Blit.ankiprog 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma anki technique vert pixel comp
  6. #include <AnKi/Shaders/QuadVert.hlsl>
  7. #if ANKI_COMPUTE_SHADER || ANKI_PIXEL_SHADER
  8. # include <AnKi/Shaders/Functions.hlsl>
  9. SamplerState g_linearAnyClampSampler : register(s0);
  10. Texture2D<Vec4> g_inputTex : register(t0);
  11. # if ANKI_COMPUTE_SHADER
  12. # define USE_COMPUTE 1
  13. # else
  14. # define USE_COMPUTE 0
  15. # endif
  16. # if USE_COMPUTE
  17. RWTexture2D<Vec4> g_storageTex : register(u0);
  18. struct Consts
  19. {
  20. Vec2 m_viewportSize;
  21. UVec2 m_viewportSizeU;
  22. };
  23. ANKI_FAST_CONSTANTS(Consts, g_consts)
  24. # endif
  25. # if USE_COMPUTE
  26. [numthreads(8, 8, 1)] void main(UVec3 svDispatchThreadId : SV_DISPATCHTHREADID)
  27. # else
  28. Vec3 main(VertOut input) : SV_TARGET0
  29. # endif
  30. {
  31. # if USE_COMPUTE
  32. if(skipOutOfBoundsInvocations(UVec2(8, 8), g_consts.m_viewportSizeU, svDispatchThreadId.xy))
  33. {
  34. return;
  35. }
  36. const Vec2 uv = (Vec2(svDispatchThreadId.xy) + 0.5) / g_consts.m_viewportSize;
  37. # else
  38. const Vec2 uv = input.m_uv;
  39. # endif
  40. const Vec3 color = g_inputTex.SampleLevel(g_linearAnyClampSampler, uv, 0.0).rgb;
  41. # if USE_COMPUTE
  42. g_storageTex[svDispatchThreadId.xy] = Vec4(color, 0.0);
  43. # else
  44. return color;
  45. # endif
  46. }
  47. #endif // ANKI_COMPUTE_SHADER || ANKI_PIXEL_SHADER