summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-03 17:10:09 -0700
committerGitHub <noreply@github.com>2023-11-03 17:10:09 -0700
commit79677b83870577fbad9ce65a731d3ae8a4c553c1 (patch)
tree82e10e5eaef138cf61f21c8842d5c8e4b199c198 /tests
parent111de4d5527a07877edd971e8be335e067ff9a1b (diff)
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 <yhe@nvidia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/hlsl-intrinsic/subgroup-quad.slang41
1 files changed, 41 insertions, 0 deletions
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<float> 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}}
+}