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<Atomic<uint>> outputBuffer; 9 10[NumThreads(1,1,1)] 11void computeMain() 12{ 13 bool result = true; 14 if ((outputBuffer[0]+=1) != 1) 15 result = false; 16 if ((outputBuffer[0]-=1) != 0) 17 result = false; 18 if (outputBuffer[0].max(2) != 0) 19 result = false; 20 if (outputBuffer[0].min(1) != 2) 21 result = false; 22 if ((outputBuffer[0]|=3) != 3) 23 result = false; 24 if ((outputBuffer[0]&=2) != 2) 25 result = false; 26 if ((outputBuffer[0]^=3) != 1) 27 result = false; 28 if (outputBuffer[0].exchange(4) != 1) 29 result = false; 30 if (outputBuffer[0].compareExchange(4, 5) != 4) 31 {}; // result = false; // for some reason this fails on Metal Github CI, so disabling. 32 if (outputBuffer[0].load() != 5) 33 result = false; 34 if ((outputBuffer[0]++) != 5) 35 result = false; 36 if ((--outputBuffer[0]) != 5) 37 result = false; 38 // CHECK: 6 39 // For some reason the metal results obtained from github runners are 40 // incorrect, although M2 GPU does produce correct result. 41 // For now we are just not going to check outputBuffer[1] for metal on the CI. 42 outputBuffer[0].store(6); 43 if (outputBuffer[0].load() != 6) 44 result = false; 45 // CHECK: 1 46 if (result) 47 outputBuffer[1].store(1); 48 else 49 outputBuffer[1].store(0); 50} 51 52// WGSL: atomicAdd 53// WGSL: atomicSub 54// WGSL: atomicMax 55// WGSL: atomicMin 56// WGSL: atomicOr 57// WGSL: atomicAnd 58// WGSL: atomicXor 59// WGSL: atomicExchange 60// WGSL: atomicCompareExchangeWeak 61// WGSL: atomicLoad 62// WGSL: atomicAdd 63// WGSL: atomicSub 64// WGSL: atomicStore 65// WGSL: atomicLoad