TemporalAA.ankiprog 1.6 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 mutator VARIANCE_CLIPPING 0 1
  6. #pragma anki mutator YCBCR 0 1
  7. #pragma anki technique vert pixel comp
  8. #include <AnKi/Shaders/QuadVert.hlsl>
  9. #include <AnKi/Shaders/Functions.hlsl>
  10. #include <AnKi/Shaders/PackFunctions.hlsl>
  11. #include <AnKi/Shaders/TemporalAA.hlsl>
  12. SamplerState g_linearAnyClampSampler : register(s0);
  13. Texture2D<Vec4> g_inputRt : register(t0);
  14. Texture2D<Vec4> g_historyRt : register(t1);
  15. Texture2D g_motionVectorsTex : register(t2);
  16. RWTexture2D<Vec4> g_outTex : register(u0);
  17. Vec3 computeTaa(Vec2 coord)
  18. {
  19. Vec2 viewportSize;
  20. g_historyRt.GetDimensions(viewportSize.x, viewportSize.y);
  21. const Vec2 uv = (Vec2(coord) + 0.5f) / viewportSize;
  22. const Vec2 historyUv = uv + g_motionVectorsTex.SampleLevel(g_linearAnyClampSampler, uv, 0.0).xy;
  23. const Vec3 history = g_historyRt.SampleLevel(g_linearAnyClampSampler, historyUv, 0.0);
  24. const Vec3 outColor = computeTemporalAA<F32>(g_inputRt, g_linearAnyClampSampler, history, coord);
  25. return outColor;
  26. }
  27. #if ANKI_COMPUTE_SHADER
  28. [numthreads(64, 1, 1)] void main(COMPUTE_ARGS)
  29. {
  30. UVec2 viewportSize;
  31. g_historyRt.GetDimensions(viewportSize.x, viewportSize.y);
  32. const UVec2 coord = getOptimalDispatchThreadId8x8Amd(svGroupIndex, svGroupId.xy);
  33. if(any(coord >= viewportSize))
  34. {
  35. return;
  36. }
  37. TEX(g_outTex, coord) = Vec4(computeTaa(coord), 0.0);
  38. }
  39. #elif ANKI_PIXEL_SHADER
  40. Vec3 main(VertOut input) : SV_TARGET0
  41. {
  42. return computeTaa(floor(input.m_svPosition));
  43. }
  44. #endif