diff options
| author | Darren Wihandi <65404740+fairywreath@users.noreply.github.com> | 2025-04-04 19:46:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-04 19:46:28 -0400 |
| commit | e3e84a1682c9e2d371f3f50f6425374c8b04828d (patch) | |
| tree | f89f00045acb0dfa3cf03740040f9d78ae22c0b5 /tests | |
| parent | 41e7e565eb3dfa13562cbfa3e8641874c2c6d66c (diff) | |
Implement subgroup quad operations for Metal (#6745)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang | 33 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/subgroup-quad.slang | 13 |
2 files changed, 33 insertions, 13 deletions
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang index b847cf460..e5d4c9de0 100644 --- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang +++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang @@ -10,6 +10,7 @@ //TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl //TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -emit-spirv-directly //TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-wgpu -compute -entry computeMain -allow-glsl -xslang -DWGPU +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-metal -compute -entry computeMain -allow-glsl -xslang -DMETAL #version 430 @@ -27,7 +28,7 @@ bool test1QuadX() { & subgroupQuadSwapHorizontal(T(2)) == T(2) & subgroupQuadSwapVertical(T(2)) == T(2) & subgroupQuadSwapDiagonal(T(3)) == T(3) - // subgroupQuadBroadcast is not implemented for WGSL as the WGSL intrinsic only accepts const integers expressions, as of time of writing. + // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(T(1), 1) == T(1) #endif @@ -41,7 +42,7 @@ bool testVQuadX() { & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3)) - // subgroupQuadBroadcast is not implemented for WGSL as the WGSL intrinsic only accepts const integers expressions, as of time of writing. + // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1)) #endif @@ -54,7 +55,7 @@ bool test1QuadX() { & subgroupQuadSwapHorizontal(T(2)) == T(2) & subgroupQuadSwapVertical(T(2)) == T(2) & subgroupQuadSwapDiagonal(T(3)) == T(3) - // subgroupQuadBroadcast is not implemented for WGSL as the WGSL intrinsic only accepts const integers expressions, as of time of writing. + // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(T(1), 1) == T(1) #endif @@ -68,7 +69,7 @@ bool testVQuadX() { & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3)) - // subgroupQuadBroadcast is not implemented for WGSL as the WGSL intrinsic only accepts const integers expressions, as of time of writing. + // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1)) #endif @@ -93,8 +94,8 @@ bool testQuadSwapX() { & testVQuadX<uint, 3>() & testVQuadX<uint, 4>() - // Disabled on WGPU as these built-in types are not supported as of time of writing. -#if !defined (WGPU) + // Disabled on WGSL and Metal as these built-in types are not supported. +#if !defined(WGPU) && !defined(METAL) & test1QuadX<double>() // WARNING: intel GPU's lack FP64 support & testVQuadX<double, 2>() & testVQuadX<double, 3>() @@ -115,19 +116,25 @@ bool testQuadSwapX() { & testVQuadX<uint8_t, 2>() & testVQuadX<uint8_t, 3>() & testVQuadX<uint8_t, 4>() - & test1QuadX<uint16_t>() - & testVQuadX<uint16_t, 2>() - & testVQuadX<uint16_t, 3>() - & testVQuadX<uint16_t, 4>() & test1QuadX<uint64_t>() & testVQuadX<uint64_t, 2>() & testVQuadX<uint64_t, 3>() - & testVQuadX<uint64_t, 4>() - & test1QuadX<bool>() - & testVQuadX<bool, 2>() + & testVQuadX<uint64_t, 4>() & test1QuadX<bool>() & testVQuadX<bool, 2>() & testVQuadX<bool, 3>() & testVQuadX<bool, 4>() #endif + + +#if !defined(WGPU) + & test1QuadX<int16_t>() + & testVQuadX<int16_t, 2>() + & testVQuadX<int16_t, 3>() + & testVQuadX<int16_t, 4>() + & test1QuadX<uint16_t>() + & testVQuadX<uint16_t, 2>() + & testVQuadX<uint16_t, 3>() + & testVQuadX<uint16_t, 4>() +#endif ; } diff --git a/tests/hlsl-intrinsic/subgroup-quad.slang b/tests/hlsl-intrinsic/subgroup-quad.slang index 928431a45..1cfbffb49 100644 --- a/tests/hlsl-intrinsic/subgroup-quad.slang +++ b/tests/hlsl-intrinsic/subgroup-quad.slang @@ -1,6 +1,7 @@ //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 +//TEST:SIMPLE(filecheck=METAL): -entry main -stage compute -target metal RWStructuredBuffer<float> output; @@ -38,4 +39,16 @@ void main() // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_2}} // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_2}} + + // METAL: quad_shuffle + // METAL: quad_shuffle + // METAL: ^ 1 + // METAL: quad_shuffle + // METAL: quad_shuffle + // METAL: ^ 2 + // METAL: quad_shuffle + // METAL: quad_shuffle + // METAL: ^ 3 + // METAL: quad_shuffle + // METAL: quad_shuffle } |
