Advertisement
piluve

HLSL with rs

Mar 28th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #define USE_COMPUTE_SHADER 1
  3. #pragma warning( disable : 3571)
  4. #pragma warning( disable : 3557)
  5. #pragma warning(disable:1)
  6. SamplerState wccSamplerState : register(s1)
  7. {
  8. Filter=MIN_MAG_MIP_LINEAR;
  9. AddressU=Wrap;
  10. AddressV=Clamp;
  11. AddressW=Clamp;
  12. };
  13. SamplerState wmcSamplerState : register(s2)
  14. {
  15. Filter=MIN_MAG_MIP_LINEAR;
  16. AddressU=Wrap;
  17. AddressV=Mirror;
  18. AddressW=Clamp;
  19. };
  20. SamplerState wrapMirrorSamplerState : register(s3)
  21. {
  22. Filter=MIN_MAG_MIP_LINEAR;
  23. AddressU=Wrap;
  24. AddressV=Mirror;
  25. AddressW=Wrap;
  26. };
  27. SamplerState cmcSamplerState : register(s5)
  28. {
  29. Filter=MIN_MAG_MIP_LINEAR;
  30. AddressU=Clamp;
  31. AddressV=Mirror;
  32. AddressW=Clamp;
  33. };
  34. SamplerState wrapSamplerState : register(s6)
  35. {
  36. Filter=MIN_MAG_MIP_LINEAR;
  37. AddressU=Wrap;
  38. AddressV=Wrap;
  39. AddressW=Wrap;
  40. };
  41. SamplerState wwcSamplerState : register(s7)
  42. {
  43. Filter=MIN_MAG_MIP_LINEAR;
  44. AddressU=Wrap;
  45. AddressV=Wrap;
  46. AddressW=Clamp;
  47. };
  48. SamplerState cwcSamplerState : register(s8)
  49. {
  50. Filter=MIN_MAG_MIP_LINEAR;
  51. AddressU=Clamp;
  52. AddressV=Wrap;
  53. AddressW=Clamp;
  54. };
  55. SamplerState clampSamplerState : register(s9)
  56. {
  57. Filter=MIN_MAG_MIP_LINEAR;
  58. AddressU=Clamp;
  59. AddressV=Clamp;
  60. AddressW=Clamp;
  61. };
  62. SamplerState wrapClampSamplerState : register(s10)
  63. {
  64. Filter=MIN_MAG_MIP_LINEAR;
  65. AddressU=Wrap;
  66. AddressV=Clamp;
  67. AddressW=Clamp;
  68. };
  69. SamplerState samplerStateNearest : register(s11)
  70. {
  71. Filter=MIN_MAG_MIP_POINT;
  72. AddressU=Clamp;
  73. AddressV=Clamp;
  74. AddressW=Clamp;
  75. };
  76. SamplerState cwcNearestSamplerState : register(s12)
  77. {
  78. Filter=MIN_MAG_MIP_POINT;
  79. AddressU=Clamp;
  80. AddressV=Wrap;
  81. AddressW=Clamp;
  82. };
  83. SamplerState cmcNearestSamplerState : register(s13)
  84. {
  85. Filter=MIN_MAG_MIP_POINT;
  86. AddressU=Clamp;
  87. AddressV=Mirror;
  88. AddressW=Clamp;
  89. };
  90. SamplerState samplerStateNearestWrap : register(s14)
  91. {
  92. Filter=MIN_MAG_MIP_POINT;
  93. AddressU=Wrap;
  94. AddressV=Wrap;
  95. AddressW=Wrap;
  96. };
  97. SamplerState samplerStateNearestClamp : register(s15)
  98. {
  99. Filter=MIN_MAG_MIP_POINT;
  100. AddressU=Clamp;
  101. AddressV=Clamp;
  102. AddressW=Clamp;
  103. };
  104. SamplerState cubeSamplerState : register(s4)
  105. {
  106. Filter=MIN_MAG_MIP_LINEAR;
  107. AddressU=Mirror;
  108. AddressV=Mirror;
  109. AddressW=Mirror;
  110. };
  111. SamplerState cloudSamplerState
  112. {
  113.  
  114. };
  115. #line 31 "C:/Simul/4.1a/Simul/Platform/DirectX12/../CrossPlatform/SFX/../SL/atmospherics_constants.sl"
  116. cbuffer AtmosphericsPerViewConstants : register(b12) {
  117. uniform float4x4 lightspaceToWorldMatrix;
  118. uniform float4x4 scatterspaceToWorldMatrix;
  119. uniform float4x4 worldToCloudMatrix;
  120. uniform float3 cloudOriginKm;
  121. uniform float padXXXXXXX;
  122. uniform float3 cloudScaleKm;
  123. uniform float padXXXXXXXX;
  124. uniform float3 viewPosition;
  125. uniform float zOrigin;
  126. uniform uint3 scatteringVolumeDims;
  127. uniform float godraysIntensity;
  128. uniform uint3 godraysVolumeDims;
  129. uniform float q35uj64jwq;
  130. uniform uint3 amortizationOffset;
  131. uniform float startZMetresZZZ;
  132. uniform uint3 amortization;
  133. uniform float averageCoverage;
  134. uniform uint2 edge;
  135. }
  136. ;
  137. #line 57 "C:/Simul/4.1a/Simul/Platform/DirectX12/../CrossPlatform/SFX/../SL/atmospherics_constants.sl"
  138.  
  139. Texture2D godraysTexture: register(t3);
  140.  
  141. RWTexture3D<unorm float4> targetVolume_U8: register(u0);
  142.  
  143. [numthreads(16,16,1)]
  144. #define GFXRS "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT)," \
  145. "DescriptorTable" \
  146. "("\
  147.     "CBV(b0, numDescriptors = 14)," \
  148.     "SRV(t0, numDescriptors = 16)," \
  149.     "UAV(u0, numDescriptors = 16)" \
  150. ")," \
  151. "DescriptorTable" \
  152. "(" \
  153.     "Sampler(s0, numDescriptors = 16)" \
  154. ")"\
  155. [RootSignature(GFXRS)]
  156. void CS_GodraysAccumulation(uint3 p: SV_DispatchThreadID)
  157. {
  158. #line 124 "C:/Simul/4.1a/Simul/Platform/DirectX12/../CrossPlatform/SFX/atmospherics.sfx"
  159. uint3 idx=p;
  160. float4 unity=float4(1.0,1.0,1.0,1.0);
  161. float4 total=unity;
  162. float3 texc=float3(idx+uint3(0,1,0))/float3(godraysVolumeDims.xzy);
  163. float elevation=3.1415926536*(.5-texc.y);
  164. float sum=0.0;
  165. float mean_illumination=1.0-averageCoverage;
  166. float4 mi=float4(mean_illumination,mean_illumination,mean_illumination,mean_illumination);
  167. float fade_away=saturate(1.0-godraysIntensity*(texc.y)/1.0);
  168. for(uint i=0;i<godraysVolumeDims.y;i++)
  169. {
  170. uint3 pos=uint3(idx.x,idx.y,i);
  171. texc.z=float(i)/float(godraysVolumeDims.y);
  172. float dist=texc.z;
  173. float3 texc_gr=float3(texc.x,dist*cos(elevation),1.0-0.5*(1.0-dist*sin(elevation)+zOrigin));
  174. float4 lookup=godraysTexture.SampleLevel(wccSamplerState,texc_gr.xy,0);
  175. float light=saturate((lookup.x-texc_gr.z+0.001)/0.001);
  176. total+=light;
  177. sum+=1.0;
  178. float4 result=lerp(total/sum,mi,fade_away);
  179. targetVolume_U8[pos]=result;
  180. ;
  181. }
  182.  
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement