summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-03-27 16:16:27 -0400
committerGitHub <noreply@github.com>2020-03-27 16:16:27 -0400
commite267ce24e37b9b7f98921f75abc150c1463b1d6d (patch)
tree331660a83ae0b72116b79b5cc8bf7a9c06555db5 /tests
parent5b0b8436123aa2faa9b682ed45efe2bd7edbf01b (diff)
Adds WaveShuffle intrinsic (#1298)
* Support for WaveReadLaneAt with dynamic (but uniform across Wave) on Vk by enabling VK1.4. Fixed wave-lane-at.slang test to test with laneId that is uniform across the Wave. * Added WaveShuffle intrinsic. Test for WaveShuffle intrinsic. * Added some documentation on WaveShuffle * Fix that version required for subgroupBroadcast to be non constexpr is actually 1.5
Diffstat (limited to 'tests')
-rw-r--r--tests/hlsl-intrinsic/wave-lane-at-vk.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-lane-at.slang2
-rw-r--r--tests/hlsl-intrinsic/wave-shuffle-vk.slang33
-rw-r--r--tests/hlsl-intrinsic/wave-shuffle-vk.slang.expected.txt4
-rw-r--r--tests/hlsl-intrinsic/wave-shuffle.slang42
-rw-r--r--tests/hlsl-intrinsic/wave-shuffle.slang.expected.txt4
6 files changed, 85 insertions, 2 deletions
diff --git a/tests/hlsl-intrinsic/wave-lane-at-vk.slang b/tests/hlsl-intrinsic/wave-lane-at-vk.slang
index 137632f16..0d52f781e 100644
--- a/tests/hlsl-intrinsic/wave-lane-at-vk.slang
+++ b/tests/hlsl-intrinsic/wave-lane-at-vk.slang
@@ -9,7 +9,7 @@
RWStructuredBuffer<int> outputBuffer;
// `The input lane index must be uniform across the wave.`.
-// The same restriction applies to glsl/SPIR-V 1.4
+// The same restriction applies to glsl/SPIR-V 1.5
// So we are going to use the input buffer to achieve this.
//TEST_INPUT:ubuffer(data=[1 2 3 0], stride=4):name inputBuffer
diff --git a/tests/hlsl-intrinsic/wave-lane-at.slang b/tests/hlsl-intrinsic/wave-lane-at.slang
index 8661dbc55..c3caaa4e8 100644
--- a/tests/hlsl-intrinsic/wave-lane-at.slang
+++ b/tests/hlsl-intrinsic/wave-lane-at.slang
@@ -9,7 +9,7 @@
RWStructuredBuffer<int> outputBuffer;
// Note from HLSL: `The input lane index must be uniform across the wave.`.
-// The same restriction applies to glsl/SPIR-V 1.4
+// The same restriction applies to glsl/SPIR-V 1.5
// So we are going to use the input buffer to achieve this.
//TEST_INPUT:ubuffer(data=[1 2 3 0], stride=4):name inputBuffer
diff --git a/tests/hlsl-intrinsic/wave-shuffle-vk.slang b/tests/hlsl-intrinsic/wave-shuffle-vk.slang
new file mode 100644
index 000000000..01fb59155
--- /dev/null
+++ b/tests/hlsl-intrinsic/wave-shuffle-vk.slang
@@ -0,0 +1,33 @@
+// Disabled because main tests is wave-shuffle.slang, this just tests VK
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0
+
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute
+//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+[numthreads(4, 1, 1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ int idx = int(dispatchThreadID.x);
+
+ int value = 0;
+
+ // Scalar
+
+ value += WaveShuffle(idx, (idx + 1) & 3);
+
+ // vector
+
+ {
+ float2 v = float2(idx + 1, idx + 2);
+ float2 readValue = WaveShuffle(v, (idx - 1) & 3);
+
+ value += int(readValue[0] + readValue[1]);
+ }
+
+ outputBuffer[idx] = value;
+} \ No newline at end of file
diff --git a/tests/hlsl-intrinsic/wave-shuffle-vk.slang.expected.txt b/tests/hlsl-intrinsic/wave-shuffle-vk.slang.expected.txt
new file mode 100644
index 000000000..b20444fc5
--- /dev/null
+++ b/tests/hlsl-intrinsic/wave-shuffle-vk.slang.expected.txt
@@ -0,0 +1,4 @@
+A
+5
+8
+7
diff --git a/tests/hlsl-intrinsic/wave-shuffle.slang b/tests/hlsl-intrinsic/wave-shuffle.slang
new file mode 100644
index 000000000..093babcce
--- /dev/null
+++ b/tests/hlsl-intrinsic/wave-shuffle.slang
@@ -0,0 +1,42 @@
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute
+//Disabled on D3D, because in general WaveShuffle requires hardware that doesn't have the 'uniform laneId across Wave' restriction.
+//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0
+// Disabled because vk doesn't currently support matrix types. See wave-shuffle-vk.slang
+//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute
+//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+[numthreads(4, 1, 1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ int idx = int(dispatchThreadID.x);
+
+ int value = 0;
+
+ // Scalar
+
+ value += WaveShuffle(idx, (idx + 1) & 3);
+
+ // vector
+
+ {
+ float2 v = float2(idx + 1, idx + 2);
+ float2 readValue = WaveShuffle(v, (idx - 1) & 3);
+
+ value += int(readValue[0] + readValue[1]);
+ }
+
+ // matrix
+ {
+ matrix<int, 2, 2> v = matrix<int, 2, 2>(idx, idx - 1, idx * 3, idx - 2);
+
+ matrix<int, 2, 2> readValue = WaveShuffle(v, (idx - 1) & 3);
+
+ value += int(readValue[0][0] + readValue[0][1] + readValue[1][0] + readValue[1][1]);
+ }
+
+ outputBuffer[idx] = value;
+} \ No newline at end of file
diff --git a/tests/hlsl-intrinsic/wave-shuffle.slang.expected.txt b/tests/hlsl-intrinsic/wave-shuffle.slang.expected.txt
new file mode 100644
index 000000000..a327b0804
--- /dev/null
+++ b/tests/hlsl-intrinsic/wave-shuffle.slang.expected.txt
@@ -0,0 +1,4 @@
+19
+2
+B
+10