From 6f8a20688e0c4b989db152b4d06aeab04fac0567 Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 8 Mar 2024 15:13:08 -0800 Subject: [SPIRV] fix code gen for `SV_Coverage`. (#3718) * [SPIRV] fix code gen for `SV_Coverage`. * Fix #3714, #3699. * Fix. --- tests/cross-compile/sv-coverage.slang | 2 ++ tests/spirv/flat-builtin.slang | 12 ++++++++++++ tests/spirv/primitive-id.slang | 23 +++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 tests/spirv/flat-builtin.slang create mode 100644 tests/spirv/primitive-id.slang (limited to 'tests') diff --git a/tests/cross-compile/sv-coverage.slang b/tests/cross-compile/sv-coverage.slang index 3bae3ea8a..b61530e7b 100644 --- a/tests/cross-compile/sv-coverage.slang +++ b/tests/cross-compile/sv-coverage.slang @@ -1,6 +1,7 @@ // sv-coverage.slang //TEST:CROSS_COMPILE:-target spirv-assembly -entry main -stage fragment +//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry main -stage fragment -emit-spirv-directly float4 main( in float4 color : COLOR, @@ -8,6 +9,7 @@ float4 main( out uint outputCoverage : SV_Coverage) : SV_Target { + // CHECK: %gl_SampleMask = OpVariable %_ptr_Input__arr_int_int_1 Input outputCoverage = inputCoverage ^ 1; return color; } diff --git a/tests/spirv/flat-builtin.slang b/tests/spirv/flat-builtin.slang new file mode 100644 index 000000000..927c6d045 --- /dev/null +++ b/tests/spirv/flat-builtin.slang @@ -0,0 +1,12 @@ +//TEST:SIMPLE(filecheck=CHECK):-target spirv -emit-spirv-directly -entry main -stage fragment +struct PerPrimitive { + int primitive_id : SV_PrimitiveID; + int layer : SV_RenderTargetArrayIndex; +}; + +// CHECK: OpDecorate %gl_PrimitiveID Flat +// CHECK: OpDecorate %gl_Layer Flat +[shader("fragment")] +uint main(PerPrimitive data) : SV_Target { + return data.primitive_id + data.layer; +} \ No newline at end of file diff --git a/tests/spirv/primitive-id.slang b/tests/spirv/primitive-id.slang new file mode 100644 index 000000000..8c354200b --- /dev/null +++ b/tests/spirv/primitive-id.slang @@ -0,0 +1,23 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -entry main -stage mesh +struct PerVertex { + float4 pos : SV_Position; +}; + +struct PerPrimitive { + uint32_t primitive_id : SV_PrimitiveID; + uint32_t layer : SV_RenderTargetArrayIndex; +}; + +// CHECK: %gl_PrimitiveID = OpVariable %_ptr_Output__arr_int_int_1 Output + +[shader("mesh")] +[numthreads(1, 1, 1)] +[outputtopology("triangle")] +void main(out vertices PerVertex vertices[3], out indices uint3 triangles[1], out primitives PerPrimitive primitive_data[1]) { + SetMeshOutputCounts(3, 1); + + vertices[0].pos = vertices[1].pos = vertices[2].pos = 0; + triangles[0] = uint3(0, 1, 2); + primitive_data[0].primitive_id = 0; + primitive_data[0].layer = 0; +} \ No newline at end of file -- cgit v1.2.3