summaryrefslogtreecommitdiffstats
path: root/tests/metal/atomic-texture-texture2d.slang
diff options
context:
space:
mode:
Diffstat (limited to 'tests/metal/atomic-texture-texture2d.slang')
-rw-r--r--tests/metal/atomic-texture-texture2d.slang183
1 files changed, 119 insertions, 64 deletions
diff --git a/tests/metal/atomic-texture-texture2d.slang b/tests/metal/atomic-texture-texture2d.slang
index b18c96168..6ad659ef0 100644
--- a/tests/metal/atomic-texture-texture2d.slang
+++ b/tests/metal/atomic-texture-texture2d.slang
@@ -1,22 +1,31 @@
//TEST:SIMPLE(filecheck=METAL): -target metal -stage compute -entry computeMain
//TEST:SIMPLE(filecheck=METALLIB): -target metallib -stage compute -entry computeMain
+//TEST(compute, metal):COMPARE_COMPUTE_EX:-metal -compute -output-using-type
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type
//METALLIB: @computeMain
+//TEST_INPUT: RWTexture2D(format=R32Uint, size=15, content=one):name uintTexture2D
RWTexture2D<uint> uintTexture2D;
+//TEST_INPUT: RWTexture2D(format=R32Sint, size=15, content=one):name intTexture2D
RWTexture2D<int> intTexture2D;
+//TEST_INPUT: RWTexture2D(format=R32Uint, size=15, content=one, arrayLength=2):name uintTexture2DArray
RWTexture2DArray<uint> uintTexture2DArray;
+//TEST_INPUT: RWTexture2D(format=R32Sint, size=15, content=one, arrayLength=2):name intTexture2DArray
RWTexture2DArray<int> intTexture2DArray;
+//TEST_INPUT: ubuffer(data=[0], stride=1, count=368):out,name outBuffer
+RWStructuredBuffer<int> outBuffer;
+
void test()
{
- int valInt = 1;
- int originalValueInt;
+ int valInt = 3;
+ int originalValueInt = 999;
int compareValueInt = 1;
- uint valUInt = 1;
- uint originalValueUInt;
+ uint valUInt = 3;
+ uint originalValueUInt = 999;
int compareValueUInt = 1;
// Texture2D
@@ -51,37 +60,56 @@ void test()
// METAL: .atomic_exchange
// METAL: .atomic_compare_exchange_weak
// METAL: .atomic_compare_exchange_weak
- InterlockedAdd(intTexture2D[0], valInt);
- InterlockedAnd(intTexture2D[0], valInt);
- InterlockedMax(intTexture2D[0], valInt);
- InterlockedMin(intTexture2D[0], valInt);
- InterlockedOr(intTexture2D[0], valInt);
- InterlockedXor(intTexture2D[0], valInt);
- InterlockedAdd(intTexture2D[0], valInt, originalValueInt);
- InterlockedAnd(intTexture2D[0], valInt, originalValueInt);
- InterlockedMax(intTexture2D[0], valInt, originalValueInt);
- InterlockedMin(intTexture2D[0], valInt, originalValueInt);
- InterlockedOr(intTexture2D[0], valInt, originalValueInt);
- InterlockedXor(intTexture2D[0], valInt, originalValueInt);
- InterlockedExchange(intTexture2D[0], valInt, originalValueInt);
- InterlockedCompareExchange(intTexture2D[0], valInt, compareValueInt, originalValueInt);
- InterlockedCompareStore(intTexture2D[0], valUInt, compareValueUInt);
+ int o = 0;
+ int i = 0;
+ InterlockedAdd(uintTexture2D[uint2(i++, 0)], valUInt);
+ InterlockedAnd(uintTexture2D[uint2(i++, 0)], valUInt);
+ InterlockedMax(uintTexture2D[uint2(i++, 0)], valUInt);
+ InterlockedMin(uintTexture2D[uint2(i++, 0)], valUInt);
+ InterlockedOr(uintTexture2D[uint2(i++, 0)], valUInt);
+ InterlockedXor(uintTexture2D[uint2(i++, 0)], valUInt);
+ InterlockedAdd(uintTexture2D[uint2(i++, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedAnd(uintTexture2D[uint2(i++, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedMax(uintTexture2D[uint2(i++, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedMin(uintTexture2D[uint2(i++, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedOr(uintTexture2D[uint2(i++, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedXor(uintTexture2D[uint2(i++, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedExchange(uintTexture2D[uint2(i++, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedCompareExchange(uintTexture2D[uint2(i++, 0)], valUInt, compareValueUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedCompareStore(uintTexture2D[uint2(i++, 0)], valUInt, compareValueUInt);
- InterlockedAdd(uintTexture2D[0], valUInt);
- InterlockedAnd(uintTexture2D[0], valUInt);
- InterlockedMax(uintTexture2D[0], valUInt);
- InterlockedMin(uintTexture2D[0], valUInt);
- InterlockedOr(uintTexture2D[0], valUInt);
- InterlockedXor(uintTexture2D[0], valUInt);
- InterlockedAdd(uintTexture2D[0], valUInt, originalValueUInt);
- InterlockedAnd(uintTexture2D[0], valUInt, originalValueUInt);
- InterlockedMax(uintTexture2D[0], valUInt, originalValueUInt);
- InterlockedMin(uintTexture2D[0], valUInt, originalValueUInt);
- InterlockedOr(uintTexture2D[0], valUInt, originalValueUInt);
- InterlockedXor(uintTexture2D[0], valUInt, originalValueUInt);
- InterlockedExchange(uintTexture2D[0], valUInt, originalValueUInt);
- InterlockedCompareExchange(uintTexture2D[0], valUInt, compareValueUInt, originalValueUInt);
- InterlockedCompareStore(uintTexture2D[0], valUInt, compareValueUInt);
+ i = 0;
+ InterlockedAdd(intTexture2D[uint2(i++, 0)], valInt);
+ InterlockedAnd(intTexture2D[uint2(i++, 0)], valInt);
+ InterlockedMax(intTexture2D[uint2(i++, 0)], valInt);
+ InterlockedMin(intTexture2D[uint2(i++, 0)], valInt);
+ InterlockedOr(intTexture2D[uint2(i++, 0)], valInt);
+ InterlockedXor(intTexture2D[uint2(i++, 0)], valInt);
+ InterlockedAdd(intTexture2D[uint2(i++, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedAnd(intTexture2D[uint2(i++, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedMax(intTexture2D[uint2(i++, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedMin(intTexture2D[uint2(i++, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedOr(intTexture2D[uint2(i++, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedXor(intTexture2D[uint2(i++, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedExchange(intTexture2D[uint2(i++, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedCompareExchange(intTexture2D[uint2(i++, 0)], valInt, compareValueInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedCompareStore(intTexture2D[uint2(i++, 0)], valInt, compareValueUInt);
// Texture2DArray
// METAL: .atomic_fetch_add
@@ -115,37 +143,64 @@ void test()
// METAL: .atomic_exchange
// METAL: .atomic_compare_exchange_weak
// METAL: .atomic_compare_exchange_weak
- InterlockedAdd(intTexture2DArray[0], valInt);
- InterlockedAnd(intTexture2DArray[0], valInt);
- InterlockedMax(intTexture2DArray[0], valInt);
- InterlockedMin(intTexture2DArray[0], valInt);
- InterlockedOr(intTexture2DArray[0], valInt);
- InterlockedXor(intTexture2DArray[0], valInt);
- InterlockedAdd(intTexture2DArray[0], valInt, originalValueInt);
- InterlockedAnd(intTexture2DArray[0], valInt, originalValueInt);
- InterlockedMax(intTexture2DArray[0], valInt, originalValueInt);
- InterlockedMin(intTexture2DArray[0], valInt, originalValueInt);
- InterlockedOr(intTexture2DArray[0], valInt, originalValueInt);
- InterlockedXor(intTexture2DArray[0], valInt, originalValueInt);
- InterlockedExchange(intTexture2DArray[0], valInt, originalValueInt);
- InterlockedCompareExchange(intTexture2DArray[0], valInt, compareValueInt, originalValueInt);
- InterlockedCompareStore(intTexture2DArray[0], valUInt, compareValueUInt);
+ i = 0;
+ InterlockedAdd(uintTexture2DArray[uint3(i++, 0, 0)], valUInt);
+ InterlockedAnd(uintTexture2DArray[uint3(i++, 0, 0)], valUInt);
+ InterlockedMax(uintTexture2DArray[uint3(i++, 0, 0)], valUInt);
+ InterlockedMin(uintTexture2DArray[uint3(i++, 0, 0)], valUInt);
+ InterlockedOr(uintTexture2DArray[uint3(i++, 0, 0)], valUInt);
+ InterlockedXor(uintTexture2DArray[uint3(i++, 0, 0)], valUInt);
+ InterlockedAdd(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedAnd(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedMax(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedMin(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedOr(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedXor(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedExchange(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedCompareExchange(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, compareValueUInt, originalValueUInt);
+ outBuffer[o++] = originalValueUInt;
+ InterlockedCompareStore(uintTexture2DArray[uint3(i++, 0, 0)], valUInt, compareValueUInt);
+
+ i = 0;
+ InterlockedAdd(intTexture2DArray[uint3(i++, 0, 0)], valInt);
+ InterlockedAnd(intTexture2DArray[uint3(i++, 0, 0)], valInt);
+ InterlockedMax(intTexture2DArray[uint3(i++, 0, 0)], valInt);
+ InterlockedMin(intTexture2DArray[uint3(i++, 0, 0)], valInt);
+ InterlockedOr(intTexture2DArray[uint3(i++, 0, 0)], valInt);
+ InterlockedXor(intTexture2DArray[uint3(i++, 0, 0)], valInt);
+ InterlockedAdd(intTexture2DArray[uint3(i++, 0, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedAnd(intTexture2DArray[uint3(i++, 0, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedMax(intTexture2DArray[uint3(i++, 0, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedMin(intTexture2DArray[uint3(i++, 0, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedOr(intTexture2DArray[uint3(i++, 0, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedXor(intTexture2DArray[uint3(i++, 0, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedExchange(intTexture2DArray[uint3(i++, 0, 0)], valInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedCompareExchange(intTexture2DArray[uint3(i++, 0, 0)], valInt, compareValueInt, originalValueInt);
+ outBuffer[o++] = originalValueInt;
+ InterlockedCompareStore(intTexture2DArray[uint3(i++, 0, 0)], valUInt, compareValueUInt);
- InterlockedAdd(uintTexture2DArray[0], valUInt);
- InterlockedAnd(uintTexture2DArray[0], valUInt);
- InterlockedMax(uintTexture2DArray[0], valUInt);
- InterlockedMin(uintTexture2DArray[0], valUInt);
- InterlockedOr(uintTexture2DArray[0], valUInt);
- InterlockedXor(uintTexture2DArray[0], valUInt);
- InterlockedAdd(uintTexture2DArray[0], valUInt, originalValueUInt);
- InterlockedAnd(uintTexture2DArray[0], valUInt, originalValueUInt);
- InterlockedMax(uintTexture2DArray[0], valUInt, originalValueUInt);
- InterlockedMin(uintTexture2DArray[0], valUInt, originalValueUInt);
- InterlockedOr(uintTexture2DArray[0], valUInt, originalValueUInt);
- InterlockedXor(uintTexture2DArray[0], valUInt, originalValueUInt);
- InterlockedExchange(uintTexture2DArray[0], valUInt, originalValueUInt);
- InterlockedCompareExchange(uintTexture2DArray[0], valUInt, compareValueUInt, originalValueUInt);
- InterlockedCompareStore(uintTexture2DArray[0], valUInt, compareValueUInt);
+ // Copy to output
+ int test_count = i;
+ for (i=0; i<test_count; i++) {
+ outBuffer[o + test_count*0 + i] = uintTexture2D[uint2(i, 0)];
+ outBuffer[o + test_count*1 + i] = intTexture2D[uint2(i, 0)];
+ outBuffer[o + test_count*2 + i] = uintTexture2DArray[uint3(i, 0, 0)];
+ outBuffer[o + test_count*3 + i] = intTexture2DArray[uint3(i, 0, 0)];
+ }
}
[numthreads(1, 1, 1)]