Explorar o código

Convert VrsSriDownscale to HLSL

Panagiotis Christopoulos Charitos %!s(int64=2) %!d(string=hai) anos
pai
achega
d5ffba0141
Modificáronse 1 ficheiros con 15 adicións e 14 borrados
  1. 15 14
      AnKi/Shaders/VrsSriDownscale.ankiprog

+ 15 - 14
AnKi/Shaders/VrsSriDownscale.ankiprog

@@ -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