A game about forced loneliness, made by TACStudios
1#pragma kernel StpTaa
2
3#pragma multi_compile _ ENABLE_DEBUG_MODE
4#pragma multi_compile _ ENABLE_LARGE_KERNEL
5
6#pragma multi_compile _ UNITY_DEVICE_SUPPORTS_NATIVE_16BIT
7
8#pragma multi_compile _ DISABLE_TEXTURE2D_X_ARRAY
9
10#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch
11
12#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
13#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
14#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
15
16#define STP_TAA 1
17
18#include "Packages/com.unity.render-pipelines.core/Runtime/STP/StpCommon.hlsl"
19
20//
21// Input
22//
23
24TEXTURE2D_X(_StpIntermediateColor);
25TEXTURE2D_X(_StpIntermediateWeights);
26
27//
28// History Input/Output
29//
30
31TEXTURE2D_X(_StpPriorFeedback);
32TYPED_TEXTURE2D_X(uint, _StpDepthMotion);
33TEXTURE2D_X(_StpConvergence);
34
35RW_TEXTURE2D_X(float4, _StpFeedback);
36RW_TEXTURE2D_X(float4, _StpOutput);
37
38#if defined(STP_16BIT)
39StpH4 StpTaaCtl4H(StpF2 p) { return (StpH4)GATHER_RED_TEXTURE2D_X(_StpIntermediateWeights, s_point_clamp_sampler, p); }
40StpH4 StpTaaCol4RH(StpF2 p) { return (StpH4)GATHER_RED_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
41StpH4 StpTaaCol4GH(StpF2 p) { return (StpH4)GATHER_GREEN_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
42StpH4 StpTaaCol4BH(StpF2 p) { return (StpH4)GATHER_BLUE_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
43StpH4 StpTaaCol4AH(StpF2 p) { return (StpH4)GATHER_ALPHA_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
44StpH1 StpTaaConH(StpF2 p) { return (StpH1)SAMPLE_TEXTURE2D_X_LOD(_StpConvergence, s_linear_clamp_sampler, p, 0); }
45StpH1 StpTaaDitH(StpW2 o) { return StpDitH1(o); }
46StpU4 StpTaaMot4H(StpF2 p) { return GATHER_RED_TEXTURE2D_X(_StpDepthMotion, s_point_clamp_sampler, p); }
47StpH4 StpTaaPriFedH(StpF2 p) { return (StpH4)SAMPLE_TEXTURE2D_X_LOD(_StpPriorFeedback, s_linear_clamp_sampler, p, 0); }
48StpH4 StpTaaPriFed4RH(StpF2 p) { return (StpH4)GATHER_RED_TEXTURE2D_X(_StpPriorFeedback, s_point_clamp_sampler, p); }
49StpH4 StpTaaPriFed4GH(StpF2 p) { return (StpH4)GATHER_GREEN_TEXTURE2D_X(_StpPriorFeedback, s_point_clamp_sampler, p); }
50StpH4 StpTaaPriFed4BH(StpF2 p) { return (StpH4)GATHER_BLUE_TEXTURE2D_X(_StpPriorFeedback, s_point_clamp_sampler, p); }
51#endif
52
53#if defined(STP_32BIT)
54StpMF4 StpTaaCtl4F(StpF2 p) { return (StpMF4)GATHER_RED_TEXTURE2D_X(_StpIntermediateWeights, s_point_clamp_sampler, p); }
55StpMF4 StpTaaCol4RF(StpF2 p) { return (StpMF4)GATHER_RED_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
56StpMF4 StpTaaCol4GF(StpF2 p) { return (StpMF4)GATHER_GREEN_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
57StpMF4 StpTaaCol4BF(StpF2 p) { return (StpMF4)GATHER_BLUE_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
58StpMF4 StpTaaCol4AF(StpF2 p) { return (StpMF4)GATHER_ALPHA_TEXTURE2D_X(_StpIntermediateColor, s_point_clamp_sampler, p); }
59StpMF1 StpTaaConF(StpF2 p) { return (StpMF1)SAMPLE_TEXTURE2D_X_LOD(_StpConvergence, s_linear_clamp_sampler, p, 0); }
60StpMF1 StpTaaDitF(StpMU2 o) { return (StpMF1)StpDitF1(o); }
61StpU4 StpTaaMot4F(StpF2 p) { return GATHER_RED_TEXTURE2D_X(_StpDepthMotion, s_point_clamp_sampler, p); }
62StpMF4 StpTaaPriFedF(StpF2 p) { return (StpMF4)SAMPLE_TEXTURE2D_X_LOD(_StpPriorFeedback, s_linear_clamp_sampler, p, 0); }
63StpMF4 StpTaaPriFed4RF(StpF2 p) { return (StpMF4)GATHER_RED_TEXTURE2D_X(_StpPriorFeedback, s_point_clamp_sampler, p); }
64StpMF4 StpTaaPriFed4GF(StpF2 p) { return (StpMF4)GATHER_GREEN_TEXTURE2D_X(_StpPriorFeedback, s_point_clamp_sampler, p); }
65StpMF4 StpTaaPriFed4BF(StpF2 p) { return (StpMF4)GATHER_BLUE_TEXTURE2D_X(_StpPriorFeedback, s_point_clamp_sampler, p); }
66#endif
67
68#define THREADING_BLOCK_SIZE STP_GROUP_SIZE
69#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Threading.hlsl"
70
71[numthreads(STP_GROUP_SIZE, 1, 1)]
72void StpTaa(Threading::Group group)
73{
74 UNITY_XR_ASSIGN_VIEW_INDEX(group.groupID.z);
75
76#if defined(STP_16BIT)
77 StpW1 lane = StpW1_(group.groupIndex);
78 StpW2 groupPos = ComputeGroupPos(StpW2(group.groupID.xy));
79 StpW2 pos = groupPos + StpRemapLaneTo8x16H(lane);
80#else
81 StpMU1 lane = StpMU1_(group.groupIndex);
82 StpMU2 groupPos = ComputeGroupPos(StpMU2(group.groupID.xy));
83 StpMU2 pos = groupPos + StpRemapLaneTo8x16F(lane);
84#endif
85
86 half4 feedback;
87 half4 output;
88
89#if defined(STP_16BIT)
90 StpTaaH(
91 lane,
92 pos,
93#else
94 StpTaaF(
95 lane,
96 pos,
97#endif
98 feedback,
99 output,
100
101 asuint(_StpTaaConstants0),
102 asuint(_StpTaaConstants1),
103 asuint(_StpTaaConstants2),
104 asuint(_StpTaaConstants3)
105 );
106
107 _StpFeedback[COORD_TEXTURE2D_X(pos)] = feedback;
108 _StpOutput[COORD_TEXTURE2D_X(pos)] = output;
109}
110