#version 420 core layout(binding = 0) uniform atomic_uint counter; layout(binding = 0, offset = 9) uniform atomic_uint counter; uint func(atomic_uint c) { return atomicCounterIncrement(c); } uint func2(out atomic_uint c) // ERROR { return counter; // ERROR, type mismatch return atomicCounter(counter); } void main() { atomic_uint non_uniform_counter; // ERROR uint val = atomicCounter(counter); atomicCounterDecrement(counter); } layout(binding = 1, offset = 3) uniform atomic_uint countArr[4]; uniform int i; void opac() { counter + counter; // ERROR -counter; // ERROR int a[3]; a[counter]; // ERROR countArr[2]; countArr[i]; counter = 4; // ERROR } in atomic_uint acin; // ERROR atomic_uint acg; // ERROR uniform atomic_uint; uniform atomic_uint aNoBind; // ERROR, no binding layout(binding=0, offset=32) uniform atomic_uint aOffset; layout(binding=0, offset=4) uniform atomic_uint; layout(binding=0) uniform atomic_uint bar3; // offset is 4 layout(binding=0) uniform atomic_uint ac[2]; // offset = 8 layout(binding=0) uniform atomic_uint ad; // offset = 20 layout(offset=8) uniform atomic_uint bar4; // ERROR, no binding layout(binding = 0, offset = 12) uniform atomic_uint overlap; // ERROR, overlapping offsets layout(binding = 20) uniform atomic_uint bigBind; // ERROR, binding too big