diff --git a/Test/baseResults/implicitInnerAtomicUint.frag.out b/Test/baseResults/implicitInnerAtomicUint.frag.out new file mode 100644 index 0000000000000000000000000000000000000000..6f68980c4e62bdbb8bc2117a1512c23dbdecaa88 --- /dev/null +++ b/Test/baseResults/implicitInnerAtomicUint.frag.out @@ -0,0 +1,21 @@ +implicitInnerAtomicUint.frag +ERROR: 0:2: '[]' : only outermost dimension of an array of arrays can be implicitly sized +ERROR: 0:2: 'atomic_uint' : array must be explicitly sized +ERROR: 2 compilation errors. No code generated. + + +Shader version: 460 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'c' (layout( binding=0 offset=0) uniform 1-element array of implicitly-sized array of atomic_uint) + + +Linked fragment stage: + +ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point + +Shader version: 460 +ERROR: node is still EOpNull! +0:? Linker Objects +0:? 'c' (layout( binding=0 offset=0) uniform 1-element array of implicitly-sized array of atomic_uint) + diff --git a/Test/implicitInnerAtomicUint.frag b/Test/implicitInnerAtomicUint.frag new file mode 100644 index 0000000000000000000000000000000000000000..bb76516fd6070c573a258abc6d3a753e4f74cc49 --- /dev/null +++ b/Test/implicitInnerAtomicUint.frag @@ -0,0 +1,2 @@ +#version 460 +layout(binding = 0) uniform atomic_uint c[1][]; \ No newline at end of file diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 10c94d04a6f88b7c94c34d855810b759efc25e89..a648b9bbab9c06ebc8a01e1d05eebb6b248ac247 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -4863,7 +4863,7 @@ void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol) // Check for overlap int numOffsets = 4; if (symbol.getType().isArray()) { - if (symbol.getType().isExplicitlySizedArray()) + if (symbol.getType().isExplicitlySizedArray() && ! symbol.getType().getArraySizes()->isInnerImplicit()) numOffsets *= symbol.getType().getCumulativeArraySize(); else { // "It is a compile-time error to declare an unsized array of atomic_uint." diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 9ca88ff8d4ce395d97143db6badea46bc86e5a02..14545d1b535a4a9c3e90cd17296b13680957b5d5 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -159,6 +159,7 @@ INSTANTIATE_TEST_CASE_P( "460.vert", "dce.frag", "atomic_uint.frag", + "implicitInnerAtomicUint.frag", "aggOps.frag", "always-discard.frag", "always-discard2.frag",