Samplers.hlsl 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifdef D3D11
  2. // Make sampling macros also available for VS on D3D11
  3. #define Sample2D(tex, uv) t##tex.Sample(s##tex, uv)
  4. #define Sample2DProj(tex, uv) t##tex.Sample(s##tex, uv.xy / uv.w)
  5. #define Sample2DLod0(tex, uv) t##tex.SampleLevel(s##tex, uv, 0.0)
  6. #define SampleCube(tex, uv) t##tex.Sample(s##tex, uv)
  7. #define SampleCubeLOD(tex, uv) t##tex.SampleLevel(s##tex, uv.xyz, uv.w)
  8. #define SampleShadow(tex, uv) t##tex.SampleCmpLevelZero(s##tex, uv.xy, uv.z)
  9. #endif
  10. #ifdef COMPILEPS
  11. #ifndef D3D11
  12. // D3D9 samplers
  13. sampler2D sDiffMap : register(s0);
  14. samplerCUBE sDiffCubeMap : register(s0);
  15. sampler2D sAlbedoBuffer : register(s0);
  16. sampler2D sNormalMap : register(s1);
  17. sampler2D sNormalBuffer : register(s1);
  18. sampler2D sSpecMap : register(s2);
  19. sampler2D sRoughMetalFresnel : register(s2); //R: Roughness, G: Metal
  20. sampler2D sEmissiveMap : register(s3);
  21. sampler2D sEnvMap : register(s4);
  22. sampler3D sVolumeMap : register(s5);
  23. samplerCUBE sEnvCubeMap : register(s4);
  24. sampler2D sLightRampMap : register(s8);
  25. sampler2D sLightSpotMap : register(s9);
  26. samplerCUBE sLightCubeMap : register(s9);
  27. sampler2D sShadowMap : register(s10);
  28. samplerCUBE sFaceSelectCubeMap : register(s11);
  29. samplerCUBE sIndirectionCubeMap : register(s12);
  30. sampler2D sDepthBuffer : register(s13);
  31. sampler2D sLightBuffer : register(s14);
  32. samplerCUBE sZoneCubeMap : register(s15);
  33. sampler3D sZoneVolumeMap : register(s15);
  34. #define Sample2D(tex, uv) tex2D(s##tex, uv)
  35. #define Sample2DProj(tex, uv) tex2Dproj(s##tex, uv)
  36. #define Sample2DLod0(tex, uv) tex2Dlod(s##tex, float4(uv, 0.0, 0.0))
  37. #define SampleCube(tex, uv) texCUBE(s##tex, uv)
  38. #define SampleCubeLOD(tex, uv) texCUBElod(s##tex, uv)
  39. #define SampleShadow(tex, uv) tex2Dproj(s##tex, uv)
  40. #else
  41. // D3D11 textures and samplers
  42. Texture2D tDiffMap : register(t0);
  43. TextureCube tDiffCubeMap : register(t0);
  44. Texture2D tAlbedoBuffer : register(t0);
  45. Texture2D tNormalMap : register(t1);
  46. Texture2D tNormalBuffer : register(t1);
  47. Texture2D tSpecMap : register(t2);
  48. Texture2D tRoughMetalFresnel : register(t2); //R: Roughness, G: Metal
  49. Texture2D tEmissiveMap : register(t3);
  50. Texture2D tEnvMap : register(t4);
  51. Texture3D tVolumeMap : register(t5);
  52. TextureCube tEnvCubeMap : register(t4);
  53. Texture2D tLightRampMap : register(t8);
  54. Texture2D tLightSpotMap : register(t9);
  55. TextureCube tLightCubeMap : register(t9);
  56. Texture2D tShadowMap : register(t10);
  57. TextureCube tFaceSelectCubeMap : register(t11);
  58. TextureCube tIndirectionCubeMap : register(t12);
  59. Texture2D tDepthBuffer : register(t13);
  60. Texture2D tLightBuffer : register(t14);
  61. TextureCube tZoneCubeMap : register(t15);
  62. Texture3D tZoneVolumeMap : register(t15);
  63. SamplerState sDiffMap : register(s0);
  64. SamplerState sDiffCubeMap : register(s0);
  65. SamplerState sAlbedoBuffer : register(s0);
  66. SamplerState sNormalMap : register(s1);
  67. SamplerState sNormalBuffer : register(s1);
  68. SamplerState sSpecMap : register(s2);
  69. SamplerState sRoughMetalFresnel : register(s2); //R: Roughness, G: Metal
  70. SamplerState sEmissiveMap : register(s3);
  71. SamplerState sEnvMap : register(s4);
  72. SamplerState sVolumeMap : register(s5);
  73. SamplerState sEnvCubeMap : register(s4);
  74. SamplerState sLightRampMap : register(s8);
  75. SamplerState sLightSpotMap : register(s9);
  76. SamplerState sLightCubeMap : register(s9);
  77. #ifdef VSM_SHADOW
  78. SamplerState sShadowMap : register(s10);
  79. #else
  80. SamplerComparisonState sShadowMap : register(s10);
  81. #endif
  82. SamplerState sFaceSelectCubeMap : register(s11);
  83. SamplerState sIndirectionCubeMap : register(s12);
  84. SamplerState sDepthBuffer : register(s13);
  85. SamplerState sLightBuffer : register(s14);
  86. SamplerState sZoneCubeMap : register(s15);
  87. SamplerState sZoneVolumeMap : register(s15);
  88. #endif
  89. float3 DecodeNormal(float4 normalInput)
  90. {
  91. #ifdef PACKEDNORMAL
  92. float3 normal;
  93. normal.xy = normalInput.ag * 2.0 - 1.0;
  94. normal.z = sqrt(max(1.0 - dot(normal.xy, normal.xy), 0.0));
  95. return normal;
  96. #else
  97. return normalInput.rgb * 2.0 - 1.0;
  98. #endif
  99. }
  100. float ReconstructDepth(float hwDepth)
  101. {
  102. return dot(float2(hwDepth, cDepthReconstruct.y / (hwDepth - cDepthReconstruct.x)), cDepthReconstruct.zw);
  103. }
  104. #endif