summaryrefslogtreecommitdiffstats
path: root/tests/spirv/ptr-unsized-array-3.slang
blob: ffd1345ea539557cabeb65a6d090308767e3ee48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -emit-spirv-directly
//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -wgpu
//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11
//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12
//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -metal

// Test a pointer to a struct with a trailing unsized array.

struct MeshStorage {
    int foo;
    uint64_t QuadData[];
};

//TEST_INPUT: set pStorage = ubuffer(data=[1 2 3 4 5 6 7 8],stride=4);
uniform MeshStorage* pStorage;

//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0],stride=4);
uniform RWStructuredBuffer<uint> outputBuffer;

[numthreads(1,1,1)]
void computeMain()
{
    // CHECK: 5
    // CHECK: 6
    // CHECK: 1
    outputBuffer[0] = (int)(pStorage.QuadData[1]&0xFFFFFFFF);
    outputBuffer[1] = (int)(pStorage.QuadData[1]>>32);
    outputBuffer[2] = pStorage.foo;
}