yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
490834924
master
1//TEST:SIMPLE(filecheck=WGSL): -target wgsl 2//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-mtl -output-using-type 3//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -output-using-type 4//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cuda -output-using-type 5//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-d3d12 -output-using-type 6 7//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0], stride=4); 8RWStructuredBuffer<int> outputBuffer; 9 10[NumThreads(1,1,1)] 11void computeMain() 12{ 13 static groupshared Atomic<int> atomicInt; 14 atomicInt = 0; 15 16 bool result = true; 17 if (atomicInt.add(1) != 0) 18 result = false; 19 if (atomicInt.sub(1) != 1) 20 result = false; 21 if (atomicInt.max(2) != 0) 22 result = false; 23 if (atomicInt.min(1) != 2) 24 result = false; 25 if (atomicInt.or(3) != 1) 26 result = false; 27 if (atomicInt.and(2) != 3) 28 result = false; 29 if (atomicInt.xor(3) != 2) 30 result = false; 31 if (atomicInt.exchange(4) != 1) 32 result = false; 33 if (atomicInt.compareExchange(4, 5) != 4) 34 {} // result = false; // for some reason this fails on Metal Github CI, so disabling. 35 if (atomicInt.load() != 5) 36 result = false; 37 if (atomicInt.increment() != 5) 38 result = false; 39 if (atomicInt.decrement() != 6) 40 result = false; 41 42 // CHECK: 5 43 outputBuffer[0] = atomicInt.load(); 44 45 atomicInt.store(6); 46 if (atomicInt.load() != 6) 47 result = false; 48 // CHECK: 1 49 if (result) 50 outputBuffer[1] = 1; 51 else 52 outputBuffer[1] = 0; 53} 54 55// WGSL: atomicAdd 56// WGSL: atomicSub 57// WGSL: atomicMax 58// WGSL: atomicMin 59// WGSL: atomicOr 60// WGSL: atomicAnd 61// WGSL: atomicXor 62// WGSL: atomicExchange 63// WGSL: atomicCompareExchangeWeak 64// WGSL: atomicLoad 65// WGSL: atomicAdd 66// WGSL: atomicSub 67// WGSL: atomicStore 68// WGSL: atomicLoad