yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
8086adc90
master
1//TEST:SIMPLE(filecheck=METAL): -target metal -stage compute -entry computeMain 2//TEST:SIMPLE(filecheck=METAL_FLOAT): -target metal -stage compute -entry computeMain -DFLOAT 3//TEST:SIMPLE(filecheck=METALLIB): -target metallib -stage compute -entry computeMain 4 5// Test framework does not support RWBuffer 6// TODO: github issue #8456 7 8 9// METAL_FLOAT: floating point atomic operation 10 11//METALLIB: @computeMain 12 13RWBuffer<uint> uintBuffer; 14RWBuffer<int> intBuffer; 15RWBuffer<float> floatBuffer; 16 17void test() 18{ 19 int valInt = 1; 20 int originalValueInt; 21 int compareValueInt = 1; 22 23 uint valUInt = 1; 24 uint originalValueUInt; 25 int compareValueUInt = 1; 26 27 float valFloat = 1.0f; 28 float originalValueFloat; 29 30#ifdef FLOAT 31 //float 32 InterlockedExchange(floatBuffer[0], valFloat); 33 InterlockedExchange(floatBuffer[0], valFloat, originalValueFloat); 34#endif //FLOAT 35 36 // buffer 37// METAL: ->atomic_fetch_add 38// METAL: ->atomic_fetch_and 39// METAL: ->atomic_fetch_max 40// METAL: ->atomic_fetch_min 41// METAL: ->atomic_fetch_or 42// METAL: ->atomic_fetch_xor 43// METAL: ->atomic_fetch_add 44// METAL: ->atomic_fetch_and 45// METAL: ->atomic_fetch_max 46// METAL: ->atomic_fetch_min 47// METAL: ->atomic_fetch_or 48// METAL: ->atomic_fetch_xor 49// METAL: ->atomic_exchange 50// METAL: ->atomic_compare_exchange_weak 51// METAL: ->atomic_compare_exchange_weak 52 53// METAL: ->atomic_fetch_add 54// METAL: ->atomic_fetch_and 55// METAL: ->atomic_fetch_max 56// METAL: ->atomic_fetch_min 57// METAL: ->atomic_fetch_or 58// METAL: ->atomic_fetch_xor 59// METAL: ->atomic_fetch_add 60// METAL: ->atomic_fetch_and 61// METAL: ->atomic_fetch_max 62// METAL: ->atomic_fetch_min 63// METAL: ->atomic_fetch_or 64// METAL: ->atomic_fetch_xor 65// METAL: ->atomic_exchange 66// METAL: ->atomic_compare_exchange_weak 67// METAL: ->atomic_compare_exchange_weak 68 InterlockedAdd(intBuffer[0], valInt); 69 InterlockedAnd(intBuffer[0], valInt); 70 InterlockedMax(intBuffer[0], valInt); 71 InterlockedMin(intBuffer[0], valInt); 72 InterlockedOr(intBuffer[0], valInt); 73 InterlockedXor(intBuffer[0], valInt); 74 InterlockedAdd(intBuffer[0], valInt, originalValueInt); 75 InterlockedAnd(intBuffer[0], valInt, originalValueInt); 76 InterlockedMax(intBuffer[0], valInt, originalValueInt); 77 InterlockedMin(intBuffer[0], valInt, originalValueInt); 78 InterlockedOr(intBuffer[0], valInt, originalValueInt); 79 InterlockedXor(intBuffer[0], valInt, originalValueInt); 80 InterlockedExchange(intBuffer[0], valInt, originalValueInt); 81 InterlockedCompareExchange(intBuffer[0], valInt, compareValueInt, originalValueInt); 82 InterlockedCompareStore(intBuffer[0], valInt, compareValueUInt); 83 84 InterlockedAdd(uintBuffer[0], valUInt); 85 InterlockedAnd(uintBuffer[0], valUInt); 86 InterlockedMax(uintBuffer[0], valUInt); 87 InterlockedMin(uintBuffer[0], valUInt); 88 InterlockedOr(uintBuffer[0], valUInt); 89 InterlockedXor(uintBuffer[0], valUInt); 90 InterlockedAdd(uintBuffer[0], valUInt, originalValueUInt); 91 InterlockedAnd(uintBuffer[0], valUInt, originalValueUInt); 92 InterlockedMax(uintBuffer[0], valUInt, originalValueUInt); 93 InterlockedMin(uintBuffer[0], valUInt, originalValueUInt); 94 InterlockedOr(uintBuffer[0], valUInt, originalValueUInt); 95 InterlockedXor(uintBuffer[0], valUInt, originalValueUInt); 96 InterlockedExchange(uintBuffer[0], valUInt, originalValueUInt); 97 InterlockedCompareExchange(uintBuffer[0], valUInt, compareValueUInt, originalValueUInt); 98 InterlockedCompareStore(uintBuffer[0], valUInt, compareValueUInt); 99} 100 101[numthreads(1, 1, 1)] 102void computeMain() 103{ 104 test(); 105}