yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
c8c9e424e
master
1//DISABLE_TEST:REFLECTION: -profile cs_5_0 -entry computeMain -target cpp 2//TEST(compute):COMPARE_COMPUTE_EX:-vk -compute -shaderobj 3//TEST(compute):COMPARE_COMPUTE_EX:-d3d12 -compute -shaderobj 4//TEST(compute):COMPARE_COMPUTE_EX:-d3d11 -compute -shaderobj 5//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj 6//TEST(compute):COMPARE_COMPUTE_EX:-wgpu -compute -shaderobj 7 8struct Thing 9{ 10 int a; 11 float b; 12}; 13 14//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer 15RWStructuredBuffer<int> outputBuffer; 16 17//TEST_INPUT:ubuffer(data=[7 2 9 53], stride=4):name buffer0 18RWStructuredBuffer<int> buffer0; 19 20//TEST_INPUT:ubuffer(data=[23 2], stride=4):name buffer1 21RWStructuredBuffer<int> buffer1; 22 23//TEST_INPUT:ubuffer(data=[-10 17 9 4 2 0], stride=4):name buffer2 24RWStructuredBuffer<float> buffer2; 25 26//TEST_INPUT:ubuffer(data=[1 0 3 0 7 0], stride=8):name buffer3 27RWStructuredBuffer<Thing> buffer3; 28 29//TEST_INPUT:ubuffer(data=[1 0 3 0 7 6], stride=0):name buffer4 30RWByteAddressBuffer buffer4; 31 32[numthreads(5, 1, 1)] 33void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 34{ 35 int index = int(dispatchThreadID.x); 36 int last = -1; 37 38 uint count = 0, stride = 0; 39 if (index == 0) 40 { 41 buffer0.GetDimensions(count, stride); 42 last = buffer0.Load(int(count - 1)); 43 } 44 else if (index == 1) 45 { 46 buffer1.GetDimensions(count, stride); 47 last = buffer1[count - 1]; 48 } 49 else if (index == 2) 50 { 51 buffer2.GetDimensions(count, stride); 52 last = int(buffer2.Load(int(count - 1))); 53 } 54 else if (index == 3) 55 { 56 buffer3.GetDimensions(count, stride); 57 58 last = buffer3.Load(int(count - 1)).a; 59 } 60 else 61 { 62 buffer4.GetDimensions(count); 63 last = buffer4.Load(count - 4); 64 } 65 outputBuffer[index * 2] = int(count); 66 outputBuffer[index * 2 + 1] = last; 67}