From: John Kessenich Date: Tue, 19 Jul 2016 21:50:58 +0000 (-0600) Subject: Fix issue #382: Detect implicitly-sized atomic_uint arrays. X-Git-Tag: upstream/0.1~77 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=934855a64236dcad8c56b563734ffbbffb22abba;p=platform%2Fupstream%2Fglslang.git Fix issue #382: Detect implicitly-sized atomic_uint arrays. --- diff --git a/Test/420.frag b/Test/420.frag index 98ddf3d..1444758 100644 --- a/Test/420.frag +++ b/Test/420.frag @@ -10,3 +10,5 @@ void main() 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[]; diff --git a/Test/baseResults/420.frag.out b/Test/baseResults/420.frag.out index 0697b52..784cdb4 100644 --- a/Test/baseResults/420.frag.out +++ b/Test/baseResults/420.frag.out @@ -3,6 +3,7 @@ Warning, version 420 is not yet complete; most version-specific features are pre 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. @@ -20,6 +21,7 @@ ERROR: node is still EOpNull! 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: @@ -39,4 +41,5 @@ ERROR: node is still EOpNull! 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) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 56b326e..0c20cf8 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -4753,8 +4753,18 @@ void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol) // 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);