summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-10-17 20:14:22 -0700
committerGitHub <noreply@github.com>2024-10-17 20:14:22 -0700
commita618b8c5e249b0f20e6c0c95f9da1b5cbfdbf08b (patch)
treed583c373d574a265fefe7f288a96c4b382e259b8 /tests
parent11e1ecafa09396a3559fe245d729b40ce4f25d52 (diff)
Cleanup atomic intrinsics. (#5324)
* Cleanup atomic intrinsics. * Fix. * Fix glsl. * Remove hacky intrinsic expansion logic for glsl image atomics. * Fix all tests. * Fix. * Add `InterlockedAddF16Emulated`. * Fix glsl intrinsic. * Fix.
Diffstat (limited to 'tests')
-rw-r--r--tests/bugs/gh-3997.slang2
-rw-r--r--tests/compute/atomics-invalid-dest-type.slang5
-rw-r--r--tests/compute/nonuniformres-atomic.slang2
-rw-r--r--tests/hlsl-intrinsic/texture/float-atomics.slang2
-rw-r--r--tests/metal/atomic-byteaddressbuffer.slang57
-rw-r--r--tests/metal/atomic-intrinsics.slang11
-rw-r--r--tests/metal/atomic-texture-buffer.slang2
-rw-r--r--tests/slang-extension/atomic-int64-byte-address-buffer.slang2
-rw-r--r--tests/slang-extension/atomic-min-max-u64-byte-address-buffer.slang2
-rw-r--r--tests/slang-extension/cas-int64-byte-address-buffer.slang2
-rw-r--r--tests/slang-extension/exchange-int64-byte-address-buffer.slang5
-rw-r--r--tests/spirv/ref-this.slang2
12 files changed, 72 insertions, 22 deletions
diff --git a/tests/bugs/gh-3997.slang b/tests/bugs/gh-3997.slang
index 8c75da426..d42e65e39 100644
--- a/tests/bugs/gh-3997.slang
+++ b/tests/bugs/gh-3997.slang
@@ -10,7 +10,7 @@ float atomicAdd(__ref float value, float amount)
__requirePrelude("#include <atomic>");
__intrinsic_asm "std::atomic_ref(*$0).fetch_add($1)";
case spirv:
- return __atomicAdd(value, amount);
+ return __atomic_add(value, amount);
}
}
diff --git a/tests/compute/atomics-invalid-dest-type.slang b/tests/compute/atomics-invalid-dest-type.slang
index 864debaee..5ae03a5c7 100644
--- a/tests/compute/atomics-invalid-dest-type.slang
+++ b/tests/compute/atomics-invalid-dest-type.slang
@@ -1,11 +1,8 @@
// atomics-buffer.slang
-//TEST:SIMPLE(filecheck=CHECK): -target spirv -stage compute -entry computeMain
-//TEST:SIMPLE(filecheck=CHECK): -target hlsl -stage compute -entry computeMain
-//TEST:SIMPLE(filecheck=CHECK): -target glsl -stage compute -entry computeMain
//TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry computeMain
-//CHECK: Atomic must be applied to a scalar texture or non-texture
+//CHECK: atomic operation on non-scalar texture
RWBuffer<uint2> outputBuffer;
diff --git a/tests/compute/nonuniformres-atomic.slang b/tests/compute/nonuniformres-atomic.slang
index 95ae502dc..10dd30cb0 100644
--- a/tests/compute/nonuniformres-atomic.slang
+++ b/tests/compute/nonuniformres-atomic.slang
@@ -9,7 +9,7 @@ RWTexture2D<uint> texArray[2];
void main( uint2 dispatchThreadID : SV_DispatchThreadID, uint2 groupThreadID : SV_GroupThreadID )
{
- // CHECK0: imageAtomicAdd((texArray_{{.*}}[nonuniformEXT({{.*}})]
+ // CHECK0: {{.*}}imageAtomicAdd(texArray_{{.*}}[nonuniformEXT({{.*}})]
// CHECK1: InterlockedAdd(texArray_{{.*}}[NonUniformResourceIndex({{.*}})]
diff --git a/tests/hlsl-intrinsic/texture/float-atomics.slang b/tests/hlsl-intrinsic/texture/float-atomics.slang
index 02cb5570c..913380416 100644
--- a/tests/hlsl-intrinsic/texture/float-atomics.slang
+++ b/tests/hlsl-intrinsic/texture/float-atomics.slang
@@ -24,6 +24,6 @@ void computeMain(uint3 tid : SV_DispatchThreadID)
AllMemoryBarrier();
// CHECK: 4.0
- outputBuffer[0] = t[uint2(1, 0)];
+ outputBuffer[0] = t[uint2(1, 0)] + originalValue;
}
diff --git a/tests/metal/atomic-byteaddressbuffer.slang b/tests/metal/atomic-byteaddressbuffer.slang
new file mode 100644
index 000000000..677f80dbf
--- /dev/null
+++ b/tests/metal/atomic-byteaddressbuffer.slang
@@ -0,0 +1,57 @@
+//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-slang -compute -dx12 -profile cs_6_0 -use-dxil -shaderobj -output-using-type
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-vk -compute -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-cuda -compute -shaderobj -output-using-type
+//TEST:SIMPLE(filecheck=LIB):-target metallib -entry computeMain -stage compute -DMETAL
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0 0]):name=uintBuffer
+RWByteAddressBuffer uintBuffer;
+
+//TEST_INPUT: ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ], stride=4):out,name outputBuffer
+RWStructuredBuffer<float> outputBuffer;
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ uintBuffer.InterlockedAdd(0, 1);
+ int oldValue;
+ //LIB: call {{.*}}.atomic.global.add.u.i32
+ uintBuffer.InterlockedAdd(0, 1, oldValue);
+ // CHK: 1
+ outputBuffer[0] = oldValue;
+
+ uintBuffer.InterlockedAdd(0, 1, oldValue);
+ // CHK: 2
+ outputBuffer[1] = (int)oldValue;
+
+ uintBuffer.InterlockedCompareExchange(0, 3, 4, oldValue);
+ // CHK: 3
+ outputBuffer[2] = (int)oldValue;
+
+ uintBuffer.InterlockedOr(0, 3, oldValue);
+ // CHK: 4
+ outputBuffer[3] = oldValue; // 4
+
+ uintBuffer.InterlockedExchange(0, 4, oldValue);
+ // CHK: 7
+ outputBuffer[4] = oldValue; // 7
+
+ uintBuffer.InterlockedMin(0, 3, oldValue);
+ // CHK: 4
+ outputBuffer[5] = oldValue; // 4
+
+ uintBuffer.InterlockedMax(0, 4, oldValue);
+ // CHK: 3
+ outputBuffer[6] = oldValue; // 3
+
+ uintBuffer.InterlockedAnd(0, 7, oldValue);
+ // CHK: 4
+ outputBuffer[7] = oldValue; // 4
+
+ uintBuffer.InterlockedXor(0, 7, oldValue);
+ // CHK: 4
+ outputBuffer[8] = oldValue; // 4
+
+ // CHK: 3
+ outputBuffer[9] = uintBuffer.Load(0);
+
+} \ No newline at end of file
diff --git a/tests/metal/atomic-intrinsics.slang b/tests/metal/atomic-intrinsics.slang
index 5d47db913..afa0e5365 100644
--- a/tests/metal/atomic-intrinsics.slang
+++ b/tests/metal/atomic-intrinsics.slang
@@ -1,8 +1,7 @@
//TEST:SIMPLE(filecheck=MTL):-target metal -entry computeMain -stage compute -DMETAL
//TEST:SIMPLE(filecheck=LIB):-target metallib -entry computeMain -stage compute -DMETAL
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-slang -compute -dx12 -profile cs_6_0 -use-dxil -shaderobj -output-using-type
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-vk -emit-spirv-directly -compute -shaderobj -output-using-type
-//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-vk -emit-spirv-via-glsl -compute -shaderobj -output-using-type
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-vk -compute -shaderobj -output-using-type
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj -output-using-type
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type
@@ -36,22 +35,22 @@ void computeMain(uint groupIndex : SV_GroupIndex)
float val = 0.0f;
// InterlockedAdd
- //MTL: atomic_uint threadgroup* {{.*}}shareMemUI
+ //MTL: atomic_uint threadgroup*{{.*}}shareMemUI
//LIB: call {{.*}}.atomic.local.add.u.i32
InterlockedAdd(shareMemUI[idx], uint(1));
val += shareMemUI[idx];
- //MTL: atomic_int threadgroup* {{.*}}shareMemI
+ //MTL: atomic_int threadgroup*{{.*}}shareMemI
//LIB: call {{.*}}.atomic.local.add.s.i32
InterlockedAdd(shareMemI[idx], 2);
val += shareMemI[idx];
- //MTL: atomic_uint device* {{.*}}uintBuffer
+ //MTL: atomic_uint device*{{.*}}uintBuffer
//LIB: call {{.*}}.atomic.global.add.u.i32
InterlockedAdd(uintBuffer[idx], 1);
val += uintBuffer[idx];
- //MTL: atomic_int device* {{.*}}intBuffer
+ //MTL: atomic_int device*{{.*}}intBuffer
//LIB: call {{.*}}.atomic.global.add.s.i32
InterlockedAdd(intBuffer[idx], 2);
val += intBuffer[idx];
diff --git a/tests/metal/atomic-texture-buffer.slang b/tests/metal/atomic-texture-buffer.slang
index 3e4eda94b..1db156364 100644
--- a/tests/metal/atomic-texture-buffer.slang
+++ b/tests/metal/atomic-texture-buffer.slang
@@ -2,7 +2,7 @@
//TEST:SIMPLE(filecheck=METAL_FLOAT): -target metal -stage compute -entry computeMain -DFLOAT
//TEST:SIMPLE(filecheck=METALLIB): -target metallib -stage compute -entry computeMain
-// METAL_FLOAT: 'float' atomic texture operations are disallowed with Metal target's
+// METAL_FLOAT: floating point atomic operation
//METALLIB: @computeMain
diff --git a/tests/slang-extension/atomic-int64-byte-address-buffer.slang b/tests/slang-extension/atomic-int64-byte-address-buffer.slang
index 9a7ae3b61..61e38069d 100644
--- a/tests/slang-extension/atomic-int64-byte-address-buffer.slang
+++ b/tests/slang-extension/atomic-int64-byte-address-buffer.slang
@@ -5,7 +5,7 @@
// No support for int64_t on fxc - we need SM6.0 and dxil
// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/hlsl-shader-model-6-0-features-for-direct3d-12
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -nvapi-slot u0 -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -nvapi-slot u0 -compile-arg -O2 -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -compile-arg -O2 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -render-features atomic-int64 -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
diff --git a/tests/slang-extension/atomic-min-max-u64-byte-address-buffer.slang b/tests/slang-extension/atomic-min-max-u64-byte-address-buffer.slang
index 4ab67df8e..2fce9788a 100644
--- a/tests/slang-extension/atomic-min-max-u64-byte-address-buffer.slang
+++ b/tests/slang-extension/atomic-min-max-u64-byte-address-buffer.slang
@@ -5,7 +5,7 @@
// No support for int64_t on fxc - we need SM6.0 and dxil
// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/hlsl-shader-model-6-0-features-for-direct3d-12
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -nvapi-slot u0 -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -nvapi-slot u0 -compile-arg -O2 -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -compile-arg -O2 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -render-features atomic-int64 -shaderobj
// For some reason this doesn't work correctly on CUDA? That it behaves as if always does Min. Min and Max do appropriate
// things tho, because if I force the condition I do get the right answer
diff --git a/tests/slang-extension/cas-int64-byte-address-buffer.slang b/tests/slang-extension/cas-int64-byte-address-buffer.slang
index 873f6ab4b..2d3189215 100644
--- a/tests/slang-extension/cas-int64-byte-address-buffer.slang
+++ b/tests/slang-extension/cas-int64-byte-address-buffer.slang
@@ -5,7 +5,7 @@
// No support for int64_t on fxc - we need SM6.0 and dxil
// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/hlsl-shader-model-6-0-features-for-direct3d-12
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -nvapi-slot u0 -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -nvapi-slot u0 -compile-arg -O2 -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -compile-arg -O2 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -render-features atomic-int64 -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
diff --git a/tests/slang-extension/exchange-int64-byte-address-buffer.slang b/tests/slang-extension/exchange-int64-byte-address-buffer.slang
index 84654ab80..a6c1277ac 100644
--- a/tests/slang-extension/exchange-int64-byte-address-buffer.slang
+++ b/tests/slang-extension/exchange-int64-byte-address-buffer.slang
@@ -2,10 +2,7 @@
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj
// No support for int64_t on DX11
//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
-// No support for int64_t on fxc - we need SM6.0 and dxil
-// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/hlsl-shader-model-6-0-features-for-direct3d-12
-//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -nvapi-slot u0 -shaderobj
-//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -nvapi-slot u0 -compile-arg -O2 -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile cs_6_0 -use-dxil -render-features atomic-int64 -compile-arg -O2 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -render-features atomic-int64 -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
diff --git a/tests/spirv/ref-this.slang b/tests/spirv/ref-this.slang
index 5eaa7f3a1..de4263975 100644
--- a/tests/spirv/ref-this.slang
+++ b/tests/spirv/ref-this.slang
@@ -1,7 +1,7 @@
//TEST:SIMPLE(filecheck=CHECK): -target spirv
// CHECK: %[[PTR:[0-9a-zA-Z_]+]] = OpAccessChain %_ptr_PhysicalStorageBuffer_uint %{{.*}} %int_0
-// CHECK: %original = OpAtomicIAdd %uint %[[PTR]] %uint_1 %uint_0 %uint_1
+// CHECK: %{{.*}} = OpAtomicIAdd %uint %[[PTR]] %uint_1 %uint_0 %uint_1
struct Buf
{