summaryrefslogtreecommitdiffstats
path: root/tests/glsl/layout-scalar-qualifier.slang
blob: ac7b34d8bec9ca934c847b1e416ae557663feeba (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
30
31
32
33
34
35
36
37
38
39
//TEST:SIMPLE(filecheck=CHECK): -allow-glsl -target spirv-asm

RWStructuredBuffer<uint> result;

// Test GLSL uniform block with scalar layout qualifier
// CHECK: SLANG_ParameterGroup_Data_uniform_natural
// CHECK: OpMemberDecorate %SLANG_ParameterGroup_Data_uniform_natural 0 Offset 0
// CHECK: OpMemberDecorate %SLANG_ParameterGroup_Data_uniform_natural 1 Offset 4
layout(scalar) uniform Data_uniform {
    uint a;
    uint3 b;
};

// Test HLSL cbuffer with scalar layout qualifier  
// CHECK: SLANG_ParameterGroup_Data_cbuffer_natural
// CHECK: OpMemberDecorate %SLANG_ParameterGroup_Data_cbuffer_natural 0 Offset 0
// CHECK: OpMemberDecorate %SLANG_ParameterGroup_Data_cbuffer_natural 1 Offset 4
layout(scalar) cbuffer Data_cbuffer {
    uint c;
    uint3 d;
};

// Reference: ScalarDataLayout should work correctly
struct Data {
    uint e;
    uint3 f;
};
ConstantBuffer<Data, ScalarDataLayout> Data_ConstantBufferScalarDataLayout;

[shader("compute")]
[numthreads(1,1,1)]
void computeMain(uint3 threadId : SV_DispatchThreadID)
{
    uint index = threadId.x;
    result[index] = 
        a + b.x +
        c + d.y +
        Data_ConstantBufferScalarDataLayout.e + Data_ConstantBufferScalarDataLayout.f.z;
}