#version 430 // OK: different instance names is allowed in other unit layout (std140, binding = 0) uniform MatrixBlock { mat4 uProj; mat4 uWorld; } uM; // OK: other unit has it as anonymous, but that is allowed out Vertex { vec4 v1; vec4 v2; } oV; // OK: different instance names is allowed in other unit layout (std140, binding = 1) uniform ColorBlock { vec4 color1; bool b; vec4 color2; vec4 color3; } uC; // OK: different instance names is allowed in other unit layout (std430, binding = 1) buffer BufferBlock { mat4 p; } uBuf; layout (std430, binding = 0) buffer SecondaryColorBlock { vec4 c; } uColorBuf; vec4 getWorld(); vec4 getColor2(); out vec4 oColor; void main() { oColor = uC.color1 * getColor2() * uColorBuf.c; oV.v1 = uC.color1; gl_Position = uM.uProj * getWorld(); }