summaryrefslogtreecommitdiffstats
path: root/tests/spirv/vk-offset.slang
blob: 64cec1b55a13860fdf0b19e7952150f32825386a (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
40
41
42
//TEST:SIMPLE(filecheck=CHECK_SPV): -target spirv -emit-spirv-directly -entry vertexMain -stage vertex
//TEST:SIMPLE(filecheck=CHECK_SPV): -target spirv -emit-spirv-via-glsl -entry vertexMain -stage vertex
//TEST:SIMPLE(filecheck=CHECK_GLSL): -target glsl -entry vertexMain -stage vertex

struct S1
{
    [[vk::offset(32)]]
    float2 a;

    float3 b;

    [[vk::offset(16)]]
    float4 c;
  }

[[vk::push_constant]]
S1 pc;

struct VertexOutput
{
    float3 position : SV_Position;
}

// CHECK_SPV: OpDecorate [[STRUCT:%[a-zA-Z0-9_]+]] Block
// CHECK_SPV-NEXT: OpMemberDecorate [[STRUCT]] 0 Offset 32
// CHECK_SPV-NEXT: OpMemberDecorate [[STRUCT]] 1 Offset 48
// CHECK_SPV-NEXT: OpMemberDecorate [[STRUCT]] 2 Offset 16

// CHECK_GLSL: layout(std430) uniform
// CHECK_GLSL-NEXT: {
// CHECK_GLSL-NEXT: layout(offset = 32) vec2 a
// CHECK_GLSL-NEXT: vec3 b
// CHECK_GLSL-NEXT: layout(offset = 16) vec4 c

[shader("vertex")]
VertexOutput vertexMain()
{
    VertexOutput output;
    output.position = float3(pc.a.x, pc.b.y, pc.c.z);
    return output;
}