diff options
| author | Yong He <yonghe@outlook.com> | 2024-10-17 20:14:22 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-17 20:14:22 -0700 |
| commit | a618b8c5e249b0f20e6c0c95f9da1b5cbfdbf08b (patch) | |
| tree | d583c373d574a265fefe7f288a96c4b382e259b8 /tests | |
| parent | 11e1ecafa09396a3559fe245d729b40ce4f25d52 (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.slang | 2 | ||||
| -rw-r--r-- | tests/compute/atomics-invalid-dest-type.slang | 5 | ||||
| -rw-r--r-- | tests/compute/nonuniformres-atomic.slang | 2 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/texture/float-atomics.slang | 2 | ||||
| -rw-r--r-- | tests/metal/atomic-byteaddressbuffer.slang | 57 | ||||
| -rw-r--r-- | tests/metal/atomic-intrinsics.slang | 11 | ||||
| -rw-r--r-- | tests/metal/atomic-texture-buffer.slang | 2 | ||||
| -rw-r--r-- | tests/slang-extension/atomic-int64-byte-address-buffer.slang | 2 | ||||
| -rw-r--r-- | tests/slang-extension/atomic-min-max-u64-byte-address-buffer.slang | 2 | ||||
| -rw-r--r-- | tests/slang-extension/cas-int64-byte-address-buffer.slang | 2 | ||||
| -rw-r--r-- | tests/slang-extension/exchange-int64-byte-address-buffer.slang | 5 | ||||
| -rw-r--r-- | tests/spirv/ref-this.slang | 2 |
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 { |
