yum-mirror/slang

Making it easier to work with shaders

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

Julius IkkalaIntroduce CDataLayout & -fvk-use-c-layout (#8136)35f8e092f

master
1.7 KiB57 linesraw
1//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK): -vk -emit-spirv-directly -compute
2//TEST:SIMPLE(filecheck=SPIRV): -stage compute -entry computeMain -target spirv -fvk-use-c-layout
3struct A
4{
5    uint64_t f0;
6    uint32_t f1;
7    // Padding of 4 bytes must exist in CPU layout, but not in scalar layout.
8};
9
10struct B
11{
12    float3 f;
13};
14
15struct C // Total size should be 40 bytes.
16{
17    A a;            // 16 bytes, alignment 8
18    uint32_t test1; // 4 bytes, alignment 4
19    B b;            // 12 bytes, alignment 4
20    uint32_t test2; // 4 bytes, alignment 4
21    bool c; // 1 bytes, alignment 1
22    bool d; // 1 bytes, alignment 1
23};
24
25//TEST_INPUT:set cpuBuffer = ubuffer(data=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20], stride=4)
26StructuredBuffer<C, CDataLayout> cpuBuffer;
27
28//TEST_INPUT:set outputBuffer = out ubuffer(data=[0 0 0 0], stride=4)
29RWStructuredBuffer<int> outputBuffer;
30
31[numthreads(1,1,1)]
32void computeMain()
33{
34    // The CPU layout should be the same as ScalarDataLayout, except that the
35    // size of structs is rounded up to their alignment.
36
37    // CHECK: 5
38    // CHECK: 9
39    // CHECK: F
40    // CHECK: 13
41    outputBuffer[0] = cpuBuffer[0].test1;
42    outputBuffer[1] = cpuBuffer[0].test2;
43    outputBuffer[2] = cpuBuffer[1].test1;
44    outputBuffer[3] = cpuBuffer[1].test2;
45}
46
47// SPIRV: OpMemberDecorate %A_c 0 Offset 0
48// SPIRV: OpMemberDecorate %A_c 1 Offset 8
49// SPIRV: OpMemberDecorate %B_c 0 Offset 0
50// SPIRV: OpMemberDecorate %C_c 0 Offset 0
51// SPIRV: OpMemberDecorate %C_c 1 Offset 16
52// SPIRV: OpMemberDecorate %C_c 2 Offset 20
53// SPIRV: OpMemberDecorate %C_c 3 Offset 32
54// SPIRV: OpMemberDecorate %C_c 4 Offset 36
55// SPIRV: OpMemberDecorate %C_c 5 Offset 37
56// SPIRV: OpDecorate %_runtimearr_C_c ArrayStride 40
57