Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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