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