| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #pragma anki mutator VARIANCE_CLIPPING 0 1
- #pragma anki mutator YCBCR 0 1
- #pragma anki technique vert pixel comp
- #include <AnKi/Shaders/QuadVert.hlsl>
- #include <AnKi/Shaders/Functions.hlsl>
- #include <AnKi/Shaders/PackFunctions.hlsl>
- #include <AnKi/Shaders/TemporalAA.hlsl>
- SamplerState g_linearAnyClampSampler : register(s0);
- Texture2D<Vec4> g_inputRt : register(t0);
- Texture2D<Vec4> g_historyRt : register(t1);
- Texture2D g_motionVectorsTex : register(t2);
- RWTexture2D<Vec4> g_outTex : register(u0);
- Vec3 computeTaa(Vec2 coord)
- {
- Vec2 viewportSize;
- g_historyRt.GetDimensions(viewportSize.x, viewportSize.y);
- const Vec2 uv = (Vec2(coord) + 0.5f) / viewportSize;
- const Vec2 historyUv = uv + g_motionVectorsTex.SampleLevel(g_linearAnyClampSampler, uv, 0.0).xy;
- const Vec3 history = g_historyRt.SampleLevel(g_linearAnyClampSampler, historyUv, 0.0);
- const Vec3 outColor = computeTemporalAA<F32>(g_inputRt, g_linearAnyClampSampler, history, coord);
- return outColor;
- }
- #if ANKI_COMPUTE_SHADER
- [numthreads(64, 1, 1)] void main(COMPUTE_ARGS)
- {
- UVec2 viewportSize;
- g_historyRt.GetDimensions(viewportSize.x, viewportSize.y);
- const UVec2 coord = getOptimalDispatchThreadId8x8Amd(svGroupIndex, svGroupId.xy);
- if(any(coord >= viewportSize))
- {
- return;
- }
- TEX(g_outTex, coord) = Vec4(computeTaa(coord), 0.0);
- }
- #elif ANKI_PIXEL_SHADER
- Vec3 main(VertOut input) : SV_TARGET0
- {
- return computeTaa(floor(input.m_svPosition));
- }
- #endif
|