From 79677b83870577fbad9ce65a731d3ae8a4c553c1 Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 3 Nov 2023 17:10:09 -0700 Subject: Add SubgroupQuad intrinsics for glsl/spirv. (#3310) * Add SubgroupQuad intrinsics for glsl/spirv. * Fix. * Add test for quad intrinsics. * fix. * improve diagnostics text. * Fix. * Fix. --------- Co-authored-by: Yong He --- tests/hlsl-intrinsic/subgroup-quad.slang | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/hlsl-intrinsic/subgroup-quad.slang (limited to 'tests') diff --git a/tests/hlsl-intrinsic/subgroup-quad.slang b/tests/hlsl-intrinsic/subgroup-quad.slang new file mode 100644 index 000000000..928431a45 --- /dev/null +++ b/tests/hlsl-intrinsic/subgroup-quad.slang @@ -0,0 +1,41 @@ +//TEST:SIMPLE(filecheck=SPIRV): -entry main -stage compute -target spirv +//TEST:SIMPLE(filecheck=SPIRV): -entry main -stage compute -target spirv -emit-spirv-directly +//TEST:SIMPLE(filecheck=HLSL): -entry main -stage compute -target hlsl + +RWStructuredBuffer output; + +[numthreads(1,1,1)] +void main() +{ + float x = output[0]; + float3 vx = float3(x, x, x); + + float v1 = QuadReadLaneAt(x, 1); + float v11 = QuadReadLaneAt(vx, 1).x; + float v2 = QuadReadAcrossX(x); + float v21 = QuadReadAcrossX(vx).x; + float v3 = QuadReadAcrossY(x); + float v31 = QuadReadAcrossY(vx).x; + float v4 = QuadReadAcrossDiagonal(x); + float v41 = QuadReadAcrossDiagonal(vx).x; + + output[0] = v1 + v2 + v3 + v4 + v11 + v21 + v31 + v41; + + // HLSL: QuadReadLaneAt + // HLSL: QuadReadLaneAt + // HLSL: QuadReadAcrossX + // HLSL: QuadReadAcrossX + // HLSL: QuadReadAcrossY + // HLSL: QuadReadAcrossY + // HLSL: QuadReadAcrossDiagonal + // HLSL: QuadReadAcrossDiagonal + + // SPIRV: OpGroupNonUniformQuadBroadcast {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} + // SPIRV: OpGroupNonUniformQuadBroadcast {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} + // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_0}} + // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_0}} + // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} + // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} + // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_2}} + // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_2}} +} -- cgit v1.2.3