#version 310 es layout(location = 7) in vec3 c; layout(LocatioN = 3) in vec4 p; layout(location = 9) in ivec2 aiv2; out vec4 pos; out vec3 color; flat out int iout; layout(row_major) uniform; // default is now row_major layout(std140) uniform Transform { // layout of this block is std140 mat4 M1; // row_major layout(column_major) mat4 M2; // column major mat3 N1; // row_major int iuin; } tblock; uniform T2 { // layout of this block is shared bool b; mat4 t2m; }; layout(column_major) uniform T3 { // shared and column_major mat4 M3; // column_major layout(row_major) mat4 M4; // row major mat2x3 N2; // column_major uvec3 uv3a[4]; }; in uint uiuin; struct S { vec3 c; float f; }; out S s; void main() { pos = p * (tblock.M1 + tblock.M2 + M4 + M3 + t2m); color = c * tblock.N1; iout = tblock.iuin + int(uiuin) + aiv2.y; s.c = c; s.f = p.x; if (N2[1] != vec3(1.0) || uv3a[2] != uvec3(5)) ++s.c; }