yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Darren WihandiImplement GetDimensions for structured buffers on WGSL (#6609)c8c9e424e

master
1.9 KiB67 linesraw
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}