#version 430 // OK: different instance names is allowed in other unit layout (std140, binding = 1) uniform ColorBlock { vec4 color1; bool b; vec4 color2; vec4 color3; } uColor; // OK: different instance names is allowed in other unit layout (std430, binding = 1) buffer BufferBlock { mat4 p; } uBuffer; // OK: different instance names is allowed in other unit layout (std140, binding = 0) uniform MatrixBlock { mat4 uProj; mat4 uWorld; } uMatrix; // OK, it's allowed for input/output interfaces to // be anonymous is one unit and not in another out Vertex { vec4 v1; vec4 v2; }; in vec4 P; vec4 getColor2() { return uColor.color2; } vec4 getWorld() { v1 = vec4(1); return uMatrix.uWorld * P; }