#version 460 out vec4 o; // default uniforms will be gathered into a uniform block // final global block will merge uniforms from all linked files uniform vec4 a; // declared in both stages uniform vec2 b1; // declaration order swapped in other stage uniform vec2 b2; uniform vec4 c1; // not delcared in other file uniform vec4 d; // final global buffer will berge buffers from all linked files layout (binding = 0) uniform atomic_uint counter1; layout (binding = 0) uniform atomic_uint counter2; vec4 foo(); vec4 bar() { uint j = atomicCounterIncrement(counter1) + atomicCounterDecrement(counter2); vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c1 + d; return float(j) * v; } void main() { o = foo() + bar(); }