A game about forced loneliness, made by TACStudios
at master 110 lines 4.8 kB view raw
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