layout(depth_less) in float depth; // ERROR: depth_less only applies to gl_FragDepth
layout(depth_any) out float gl_FragDepth; // ERROR, done after use
+
+layout(binding=0) uniform atomic_uint a[];
ERROR: 0:4: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth
ERROR: 0:11: 'layout qualifier' : can only apply depth layout to gl_FragDepth
ERROR: 0:12: 'gl_FragDepth' : cannot redeclare after use
+WARNING: 0:14: 'atomic_uint' : implicitly sized atomic_uint array treated as having one element for tracking the default offset
ERROR: 3 compilation errors. No code generated.
0:? 'gl_FragDepth' (gl_FragDepth float FragDepth)
0:? 'gl_FragDepth' (gl_FragDepth float FragDepth)
0:? 'depth' (smooth in float)
+0:? 'a' (layout(binding=0 offset=0 ) uniform implicitly-sized array of atomic_uint)
Linked fragment stage:
0:? 'gl_FragDepth' (gl_FragDepth float FragDepth)
0:? 'gl_FragDepth' (gl_FragDepth float FragDepth)
0:? 'depth' (smooth in float)
+0:? 'a' (layout(binding=0 offset=0 ) uniform 1-element array of atomic_uint)
// Check for overlap
int numOffsets = 4;
- if (symbol.getType().isArray())
- numOffsets *= symbol.getType().getCumulativeArraySize();
+ if (symbol.getType().isArray()) {
+ if (symbol.getType().isExplicitlySizedArray())
+ numOffsets *= symbol.getType().getCumulativeArraySize();
+ else {
+ // TODO: functionality: implicitly-sized atomic_uint arrays.
+ // We don't know the full size until later. This might
+ // be a specification problem, will report to Khronos. For the
+ // cases that is not true, the rest of the checking would need
+ // to be done at link time instead of compile time.
+ warn(loc, "implicitly sized atomic_uint array treated as having one element for tracking the default offset", "atomic_uint", "");
+ }
+ }
int repeated = intermediate.addUsedOffsets(qualifier.layoutBinding, offset, numOffsets);
if (repeated >= 0)
error(loc, "atomic counters sharing the same offset:", "offset", "%d", repeated);