Blit.bsl 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. technique Blit
  2. {
  3. depth
  4. {
  5. read = false;
  6. #ifndef DEPTH
  7. write = false;
  8. #endif
  9. };
  10. code
  11. {
  12. struct VStoFS
  13. {
  14. noperspective float4 position : SV_POSITION;
  15. noperspective float2 uv0 : TEXCOORD0;
  16. };
  17. struct VertexInput
  18. {
  19. float2 screenPos : POSITION;
  20. float2 uv0 : TEXCOORD0;
  21. };
  22. VStoFS vsmain(VertexInput input)
  23. {
  24. VStoFS output;
  25. output.position = float4(input.screenPos, 0, 1);
  26. output.uv0 = input.uv0;
  27. return output;
  28. }
  29. #if MSAA_COUNT > 1
  30. #if COLOR
  31. Texture2DMS<float4> gSource;
  32. float4 fsmain(VStoFS input) : SV_Target0
  33. #else // Assuming depth
  34. Texture2DMS<float> gSource;
  35. float fsmain(VStoFS input, out float depth : SV_Depth) : SV_Target0
  36. #endif
  37. {
  38. int2 iUV = trunc(input.uv0);
  39. #if COLOR
  40. float4 sum = float4(0, 0, 0, 0);
  41. [unroll]
  42. for(int i = 0; i < MSAA_COUNT; i++)
  43. sum += gSource.Load(iUV, i);
  44. return sum / MSAA_COUNT;
  45. #else // Assuming depth
  46. float minVal = gSource.Load(iUV, 0);
  47. [unroll]
  48. for(int i = 1; i < MSAA_COUNT; i++)
  49. minVal = min(minVal, gSource.Load(iUV, i));
  50. depth = minVal;
  51. return 0.0f;
  52. #endif
  53. }
  54. #else
  55. Texture2D<float4> gSource;
  56. float4 fsmain(VStoFS input) : SV_Target0
  57. {
  58. int2 iUV = trunc(input.uv0);
  59. return gSource.Load(int3(iUV.xy, 0));
  60. }
  61. #endif
  62. };
  63. };