#version 450 out gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[1]; float gl_CullDistance[1]; }; struct s0 { mediump mat2x3 m0; ivec4 m1; mat4 m2; uvec2 m3; }; struct s1 { mediump mat3x4 m0; mediump int m1; uvec3 m2; s0 m3; }; layout(set = 0, binding = 0, std140) uniform data_u_t { layout(row_major, offset = 368) mediump mat2x3 m0; layout(offset = 0) vec2 m1[5]; layout(row_major, offset = 128) s1 m2; layout(row_major, offset = 80) mediump mat4x2 m3; layout(offset = 112) ivec4 m4; } data_u; layout(location = 0) in vec4 vtx_posn; layout(location = 0) out mediump float foo; void main() { gl_Position = vtx_posn; vec2 a = data_u.m1[3]; ivec4 b = data_u.m4; mat2x3 c = data_u.m0; mat3x4 d = data_u.m2.m0; mat4 e = data_u.m2.m3.m2; foo = (a.y + b.z) * c[1][2] * d[2][3] * e[3][3]; }