yum-mirror/slang

Making it easier to work with shaders

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

Julius IkkalaMake sizeof(T) & alignof(T) of generic types work as compile-time constants (#7213)ce238dd87

master
1.1 KiB41 linesraw
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -compute -shaderobj
2//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-slang -compute -shaderobj
3//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-slang -compute -dx12 -shaderobj
4//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -compute -shaderobj
5//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cuda -compute -shaderobj
6
7//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
8
9RWStructuredBuffer<int> outputBuffer;
10
11struct Thing<T>
12{
13    uint8_t data[sizeof(T)];
14};
15
16struct AlignThing<T>
17{
18    uint8_t data[alignof(T)];
19};
20
21[numthreads(4, 1, 1)]
22void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
23{
24    const int idx = asint(dispatchThreadID.x);
25
26    int size = 0;
27    
28    switch (idx)
29    {   
30        case 0: size = sizeof(Thing<float>); break;
31        case 1: size = sizeof(Thing<float3>); break;
32        case 2: size = sizeof(AlignThing<float>); break;
33        case 3: size = sizeof(AlignThing<float3>); break;
34    }
35
36    // CHECK: 4
37    // CHECK-NEXT: C
38    // CHECK: 4
39    // CHECK-NEXT: 4
40    outputBuffer[idx] = size;
41}