1#version 450
2
3// should get 3 SPV types for S: no layout, 140, and 430, plus extras for interpolation or invariant differences
4struct S
5{
6	highp uvec3 a;
7	mediump mat2 b[4];
8	lowp uint c;
9};
10
11layout(set = 0, binding = 0, std140) uniform Block140
12{
13	mediump int u;
14	S s[2][3];
15	mediump vec2 v;
16} inst140;
17
18layout(set = 0, binding = 1, std430) buffer Block430
19{
20	mediump int u;
21	S s[2][3];
22	mediump vec2 v;
23} inst430;
24
25S s;
26
27// should get 5 SPV types for T: no layout, 140/row, 140/col, 430/row, and 430/col
28struct T {
29    mat2 m;
30    int a;
31};
32
33T t;
34
35struct Nestor {
36    T nestorT;
37};
38
39layout(set = 1, binding = 0, std140) uniform Bt1
40{
41    layout(row_major) Nestor nt;
42} Btn1;
43
44layout(set = 1, binding = 0, std140) uniform Bt2
45{
46    layout(column_major) Nestor nt;
47} Btn2;
48
49layout(row_major, set = 1, binding = 0, std140) uniform Bt3
50{
51    layout(column_major) Nestor ntcol;
52    Nestor ntrow;                         // should be row major decoration version of Nestor
53} Btn3;
54
55layout(set = 1, binding = 0, std430) buffer bBt1
56{
57    layout(row_major) Nestor nt;
58} bBtn1;
59
60layout(set = 1, binding = 0, std430) buffer bBt2
61{
62    layout(column_major) Nestor nt;
63} bBtn2;
64
65layout(set = 1, binding = 0, std430) buffer bBt3
66{
67    layout(row_major) Nestor ntcol;
68    Nestor ntrow;                         // should be col major decoration version of Nestor
69} bBtn3;
70
71void main()
72{
73}
74
75flat out S sout;
76invariant out S soutinv;
77