yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f02b08490
master
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -dx12 -output-using-type 2//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -output-using-type 3//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cuda -output-using-type 4//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -metal -output-using-type 5//TEST:SIMPLE(filecheck=METALLIB): -target metallib -entry computeMain -stage compute 6 7// METALLIB: computeMain 8 9//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer 10RWStructuredBuffer<int> outputBuffer; 11 12//TEST_INPUT:set bbuffer = ubuffer(data=[0 0 0 0]) 13RWByteAddressBuffer bbuffer; 14 15[numthreads(1, 1, 1)] 16void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 17{ 18 uint originalValue; 19 bbuffer.InterlockedAdd(0, 1); 20 21 bbuffer.InterlockedAdd(0, 1, originalValue); 22 outputBuffer[4] = originalValue; 23 24 bbuffer.InterlockedMax(0, 3); 25 bbuffer.InterlockedMax(0, 4, originalValue); 26 outputBuffer[5] = originalValue; 27 28 bbuffer.InterlockedMin(0, 2); 29 bbuffer.InterlockedMin(0, 2, originalValue); 30 outputBuffer[6] = originalValue; 31 32 bbuffer.InterlockedOr(0, 1); 33 bbuffer.InterlockedOr(0, 1, originalValue); 34 outputBuffer[7] = originalValue; 35 36 bbuffer.InterlockedXor(0, 4); 37 bbuffer.InterlockedXor(0, 4, originalValue); 38 outputBuffer[8] = originalValue; 39 40 bbuffer.InterlockedAnd(0, 7); 41 bbuffer.InterlockedAnd(0, 7, originalValue); 42 outputBuffer[9] = originalValue; 43 44 bbuffer.InterlockedCompareExchange(4, 0, 1, originalValue); 45 outputBuffer[10] = originalValue; 46 47 bbuffer.InterlockedExchange(8, 3, originalValue); 48 outputBuffer[11] = originalValue; 49 50 bbuffer.InterlockedCompareStore(12, 0, 3); 51 52 // CHECK: 3 53 // CHECK: 1 54 // CHECK: 3 55 // CHECK: 3 56 outputBuffer[0] = bbuffer.Load(0); 57 outputBuffer[1] = bbuffer.Load(4); 58 outputBuffer[2] = bbuffer.Load(8); 59 outputBuffer[3] = bbuffer.Load(12); 60 // CHECK: 1 61 // CHECK: 3 62 // CHECK: 2 63 // CHECK: 3 64 // CHECK: 7 65 // CHECK: 3 66 // CHECK: 0 67 // CHECK: 0 68}