|
|
@@ -3,35 +3,36 @@
|
|
|
// Code licensed under the BSD License.
|
|
|
// http://www.anki3d.org/LICENSE
|
|
|
|
|
|
+#pragma anki hlsl
|
|
|
#pragma anki start comp
|
|
|
|
|
|
-#include <AnKi/Shaders/Functions.glsl>
|
|
|
+#include <AnKi/Shaders/Functions.hlsl>
|
|
|
|
|
|
-layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
|
|
+[[vk::binding(0)]] Texture2D<UVec4> g_inputTex;
|
|
|
+[[vk::binding(1)]] SamplerState g_nearestAnyClampSampler;
|
|
|
+[[vk::binding(2)]] RWTexture2D<UVec4> g_outUav;
|
|
|
|
|
|
-layout(binding = 0) uniform utexture2D u_inputTex;
|
|
|
-layout(binding = 1) uniform sampler u_nearestAnyClampSampler;
|
|
|
-layout(binding = 2) uniform uimage2D u_outputImage;
|
|
|
-
|
|
|
-layout(push_constant, std140) uniform b_pc
|
|
|
+struct Uniforms
|
|
|
{
|
|
|
- Vec2 u_oneOverViewportSize;
|
|
|
- F32 u_padding0;
|
|
|
- F32 u_padding1;
|
|
|
+ Vec2 m_oneOverViewportSize;
|
|
|
+ F32 m_padding0;
|
|
|
+ F32 m_padding1;
|
|
|
};
|
|
|
|
|
|
-void main()
|
|
|
+[[vk::push_constant]] ConstantBuffer<Uniforms> g_uniforms;
|
|
|
+
|
|
|
+[numthreads(8, 8, 1)] void main(UVec3 svDispatchThreadId : SV_DISPATCHTHREADID)
|
|
|
{
|
|
|
- const Vec2 uv = (Vec2(gl_GlobalInvocationID.xy) + 0.5) * u_oneOverViewportSize;
|
|
|
+ const Vec2 uv = (Vec2(svDispatchThreadId.xy) + 0.5) * g_uniforms.m_oneOverViewportSize;
|
|
|
|
|
|
- const UVec4 rates = textureGather(usampler2D(u_inputTex, u_nearestAnyClampSampler), uv, 0);
|
|
|
+ const UVec4 rates = g_inputTex.GatherRed(g_nearestAnyClampSampler, uv);
|
|
|
|
|
|
UVec2 rate = decodeVrsRate(rates[0]);
|
|
|
rate = min(rate, decodeVrsRate(rates[1]));
|
|
|
rate = min(rate, decodeVrsRate(rates[2]));
|
|
|
rate = min(rate, decodeVrsRate(rates[3]));
|
|
|
|
|
|
- imageStore(u_outputImage, IVec2(gl_GlobalInvocationID.xy), UVec4(encodeVrsRate(rate)));
|
|
|
+ g_outUav[svDispatchThreadId.xy] = UVec4(encodeVrsRate(rate), 0, 0, 0);
|
|
|
}
|
|
|
|
|
|
#pragma anki end
|