#version 450 struct RowMajor { mat4 B; }; struct NestedRowMajor { RowMajor rm; }; layout(set = 0, binding = 0, row_major) uniform UBO { mat4 A; layout(column_major) mat4 C; // This should also be worked around. }; layout(set = 0, binding = 1, row_major) uniform UBO2 { RowMajor rm; }; layout(set = 0, binding = 2, row_major) uniform UBO3 { NestedRowMajor rm2; }; layout(set = 0, binding = 3) uniform UBONoWorkaround { mat4 D; }; layout(location = 0) in vec4 Clip; layout(location = 0) out vec4 FragColor; void main() { NestedRowMajor rm2_loaded = rm2; FragColor = rm2_loaded.rm.B * rm.B * A * C * Clip; FragColor += D * Clip; FragColor += A[1] * Clip; }