From 21bbebb19dfdbbee107b9fd9830e18d5fb6a573a Mon Sep 17 00:00:00 2001 From: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:29:56 -0400 Subject: Address glslang ordering requirments for 'derivative_group_*NV' (#4323) * Address glslang ordering requirments for 'derivative_group_*NV' fixes: #4305 The solution is to emit some `layout`s after a module source is emitted. Added to slangs gfx backend code to enable the compute shader derivative extension for testing purposes. * address review * enable removed test --------- Co-authored-by: Yong He --- tests/bugs/gh-4305.slang | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/bugs/gh-4305.slang (limited to 'tests/bugs') diff --git a/tests/bugs/gh-4305.slang b/tests/bugs/gh-4305.slang new file mode 100644 index 000000000..dd09bda1e --- /dev/null +++ b/tests/bugs/gh-4305.slang @@ -0,0 +1,40 @@ +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -target glsl -allow-glsl -DQUAD -DMODIFIER +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -target glsl -allow-glsl -DMODIFIER +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -target glsl -allow-glsl -DQUAD +//TEST:SIMPLE(filecheck=CHECK): -stage compute -entry computeMain -target glsl -allow-glsl +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -output-using-type -emit-spirv-via-glsl -allow-glsl -xslang -DQUAD +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -output-using-type -emit-spirv-via-glsl -allow-glsl + +//TEST_INPUT: ubuffer(data=[0], stride=4):out,name outputBuffer +RWStructuredBuffer outputBuffer; +//TEST_INPUT: Texture2D(size=4, content = one):name t2D +Texture2D t2D; +//TEST_INPUT: Sampler:name samplerState +SamplerState samplerState; + +// "local_size_x" must appear before "derivative_group_" +//CHECK:local_size_x +//CHECK:derivative_group_{{.*}}NV + +#ifndef MODIFIER +#ifdef QUAD +layout(derivative_group_quadsNV) in; +#else +layout(derivative_group_linearNV) in; +#endif // #ifdef QUAD +layout(local_size_x = 2, local_size_y = 2, local_size_z = 1) in; + +#else + +#ifdef QUAD +[DerivativeGroupQuad] +#else +[DerivativeGroupLinear] +#endif // #ifdef QUAD +[numthreads(2, 2, 1)] +#endif //#ifndef MODIFIER +void computeMain() +{ + //BUF:1 + outputBuffer[0] = t2D.Sample(samplerState, float2(0.5, 0.5)); +} \ No newline at end of file -- cgit v1.2.3