A game about forced loneliness, made by TACStudios
at master 117 lines 3.3 kB view raw
1#pragma kernel StpPreTaa 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_DIL 1 17#define STP_SAA 1 18 19#include "Packages/com.unity.render-pipelines.core/Runtime/STP/StpCommon.hlsl" 20 21// 22// Input 23// 24 25TEXTURE2D_X(_StpIntermediateConvergence); 26 27// 28// Intermediate Output 29// 30 31RW_TEXTURE2D_X(float, _StpIntermediateWeights); 32 33// 34// History Input/Output 35// 36 37TEXTURE2D_X(_StpLuma); 38RW_TEXTURE2D_X(float, _StpConvergence); 39 40// DIL 41#if defined(STP_16BIT) 42StpH1 StpDilDitH(StpW2 o) { return StpDitH1(o); } 43StpH1 StpDilConH(StpF2 p) { return (StpH1)SAMPLE_TEXTURE2D_X_LOD(_StpIntermediateConvergence, s_linear_clamp_sampler, p, 0).r; } 44StpH4 StpDilCon4H(StpF2 p) { return (StpH4)GATHER_RED_TEXTURE2D_X(_StpIntermediateConvergence, s_point_clamp_sampler, p); } 45#endif 46#if defined(STP_32BIT) 47StpMF1 StpDilDitF(StpMU2 o) { return StpDitF1(o); } 48StpMF1 StpDilConF(StpF2 p) { return (StpMF1)SAMPLE_TEXTURE2D_X_LOD(_StpIntermediateConvergence, s_linear_clamp_sampler, p, 0).r; } 49StpMF4 StpDilCon4F(StpF2 p) { return (StpMF4)GATHER_RED_TEXTURE2D_X(_StpIntermediateConvergence, s_point_clamp_sampler, p); } 50#endif 51 52// SAA 53#if defined(STP_16BIT) 54StpH4 StpSaaLum4H(StpF2 p) { return (StpH4)GATHER_RED_TEXTURE2D_X(_StpLuma, s_point_clamp_sampler, p); } 55#endif 56#if defined(STP_32BIT) 57StpMF4 StpSaaLum4F(StpF2 p) { return (StpMF4)GATHER_RED_TEXTURE2D_X(_StpLuma, s_point_clamp_sampler, p); } 58#endif 59 60#define THREADING_BLOCK_SIZE STP_GROUP_SIZE 61#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Threading.hlsl" 62 63[numthreads(STP_GROUP_SIZE, 1, 1)] 64void StpPreTaa(Threading::Group group) 65{ 66 UNITY_XR_ASSIGN_VIEW_INDEX(group.groupID.z); 67 68#if defined(STP_16BIT) 69 StpW1 lane = StpW1_(group.groupIndex); 70 StpW2 groupPos = ComputeGroupPos(StpW2(group.groupID.xy)); 71 StpW2 pos = groupPos + StpRemapLaneTo8x16H(lane); 72 StpW2 dilationSize = StpW2(asuint(_StpDilConstants0.zw)); // TODO: 16-bit packed constant? 73#else 74 StpMU1 lane = StpMU1_(group.groupIndex); 75 StpMU2 groupPos = ComputeGroupPos(StpMU2(group.groupID.xy)); 76 StpMU2 pos = groupPos + StpRemapLaneTo8x16F(lane); 77 StpMU2 dilationSize = StpMU2(asuint(_StpDilConstants0).zw); 78#endif 79 80 // The dilation logic only runs for a subset of the input image size 81 if (all(groupPos < dilationSize)) 82 { 83 half convergence; 84 85#if defined(STP_16BIT) 86 StpDilH( 87#else 88 StpDilF( 89#endif 90 convergence, 91 92 pos, 93 94 asuint(_StpDilConstants0) 95 ); 96 97 _StpConvergence[COORD_TEXTURE2D_X(pos)] = convergence; 98 } 99 100 half weights; 101 102#if defined(STP_16BIT) 103 StpSaaH( 104#else 105 StpSaaF( 106#endif 107 weights, 108 109 pos, 110 111 // SAA uses the same constants as the pattern matcher 112 asuint(_StpSetupConstants0) 113 ); 114 115 _StpIntermediateWeights[COORD_TEXTURE2D_X(pos)] = weights; 116} 117