Blit.bsl 1.3 KB

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