| #version 450 | |
| // should get 3 SPV types for S: no layout, 140, and 430, plus extras for interpolation or invariant differences | |
| struct S | |
| { | |
| highp uvec3 a; | |
| mediump mat2 b[4]; | |
| lowp uint c; | |
| }; | |
| layout(set = 0, binding = 0, std140) uniform Block140 | |
| { | |
| mediump int u; | |
| S s[2][3]; | |
| mediump vec2 v; | |
| } inst140; | |
| layout(set = 0, binding = 1, std430) buffer Block430 | |
| { | |
| mediump int u; | |
| S s[2][3]; | |
| mediump vec2 v; | |
| } inst430; | |
| S s; | |
| // should get 5 SPV types for T: no layout, 140/row, 140/col, 430/row, and 430/col | |
| struct T { | |
| mat2 m; | |
| int a; | |
| }; | |
| T t; | |
| struct Nestor { | |
| T nestorT; | |
| }; | |
| layout(set = 1, binding = 0, std140) uniform Bt1 | |
| { | |
| layout(row_major) Nestor nt; | |
| } Btn1; | |
| layout(set = 1, binding = 0, std140) uniform Bt2 | |
| { | |
| layout(column_major) Nestor nt; | |
| } Btn2; | |
| layout(row_major, set = 1, binding = 0, std140) uniform Bt3 | |
| { | |
| layout(column_major) Nestor ntcol; | |
| Nestor ntrow; // should be row major decoration version of Nestor | |
| } Btn3; | |
| layout(set = 1, binding = 0, std430) buffer bBt1 | |
| { | |
| layout(row_major) Nestor nt; | |
| } bBtn1; | |
| layout(set = 1, binding = 0, std430) buffer bBt2 | |
| { | |
| layout(column_major) Nestor nt; | |
| } bBtn2; | |
| layout(set = 1, binding = 0, std430) buffer bBt3 | |
| { | |
| layout(row_major) Nestor ntcol; | |
| Nestor ntrow; // should be col major decoration version of Nestor | |
| } bBtn3; | |
| void main() | |
| { | |
| } | |
| flat out S sout; | |
| invariant out S soutinv; |