#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;
