Commit e8d21388 by John Kessenich

Fix nondeterminism discussed in 258b700f

parent ac516024
...@@ -320,7 +320,7 @@ ERROR: node is still EOpNull! ...@@ -320,7 +320,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects 0:? Linker Objects
0:? 'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v}) 0:? 'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
0:? 'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform implicitly-sized array of highp 4-component vector of float v}) 0:? 'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform implicitly-sized array of highp 4-component vector of float v})
0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of implicitly-sized array of highp 4-component vector of float v}) 0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 1-element array of highp 4-component vector of float v})
0:? 'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v}) 0:? 'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float) 0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
0:? 'gu' ( global implicitly-sized array of 7-element array of highp float) 0:? 'gu' ( global implicitly-sized array of 7-element array of highp float)
...@@ -361,7 +361,7 @@ ERROR: node is still EOpNull! ...@@ -361,7 +361,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects 0:? Linker Objects
0:? 'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v}) 0:? 'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
0:? 'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform 1-element array of highp 4-component vector of float v}) 0:? 'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform 1-element array of highp 4-component vector of float v})
0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of implicitly-sized array of highp 4-component vector of float v}) 0:? 'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 1-element array of highp 4-component vector of float v})
0:? 'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v}) 0:? 'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float) 0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
0:? 'gu' ( global 1-element array of 7-element array of highp float) 0:? 'gu' ( global 1-element array of 7-element array of highp float)
......
...@@ -405,7 +405,7 @@ ERROR: node is still EOpNull! ...@@ -405,7 +405,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects 0:? Linker Objects
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float) 0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
0:? 'gu' ( global implicitly-sized array of 7-element array of float) 0:? 'gu' ( global implicitly-sized array of 7-element array of float)
0:? 'gimp' ( global implicitly-sized array of implicitly-sized array of float) 0:? 'gimp' ( global implicitly-sized array of 1-element array of float)
0:? 'g4' ( global 4-element array of 7-element array of float) 0:? 'g4' ( global 4-element array of 7-element array of float)
0:? 'g5' ( global 5-element array of 7-element array of float) 0:? 'g5' ( global 5-element array of 7-element array of float)
...@@ -768,7 +768,7 @@ ERROR: node is still EOpNull! ...@@ -768,7 +768,7 @@ ERROR: node is still EOpNull!
0:? Linker Objects 0:? Linker Objects
0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float) 0:? 'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
0:? 'gu' ( global 1-element array of 7-element array of float) 0:? 'gu' ( global 1-element array of 7-element array of float)
0:? 'gimp' ( global 1-element array of implicitly-sized array of float) 0:? 'gimp' ( global 1-element array of 1-element array of float)
0:? 'g4' ( global 4-element array of 7-element array of float) 0:? 'g4' ( global 4-element array of 7-element array of float)
0:? 'g5' ( global 5-element array of 7-element array of float) 0:? 'g5' ( global 5-element array of 7-element array of float)
implicitInnerAtomicUint.frag
ERROR: 0:2: '[]' : only outermost dimension of an array of arrays can be implicitly sized
ERROR: 1 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 1-element 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 1-element array of atomic_uint)
#version 460
layout(binding = 0) uniform atomic_uint c[1][];
\ No newline at end of file
...@@ -264,6 +264,15 @@ struct TArraySizes { ...@@ -264,6 +264,15 @@ struct TArraySizes {
return false; return false;
} }
bool clearInnerImplicit()
{
for (int d = 1; d < sizes.size(); ++d) {
if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize)
setDimSize(d, 1);
}
return false;
}
bool isInnerSpecialization() const bool isInnerSpecialization() const
{ {
for (int d = 1; d < sizes.size(); ++d) { for (int d = 1; d < sizes.size(); ++d) {
......
...@@ -3002,7 +3002,7 @@ void TParseContext::structArrayCheck(const TSourceLoc& /*loc*/, const TType& typ ...@@ -3002,7 +3002,7 @@ void TParseContext::structArrayCheck(const TSourceLoc& /*loc*/, const TType& typ
} }
} }
void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qualifier, const TArraySizes* arraySizes, bool initializer, bool lastMember) void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qualifier, TArraySizes* arraySizes, bool initializer, bool lastMember)
{ {
assert(arraySizes); assert(arraySizes);
...@@ -3015,8 +3015,10 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua ...@@ -3015,8 +3015,10 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua
return; return;
// No environment allows any non-outer-dimension to be implicitly sized // No environment allows any non-outer-dimension to be implicitly sized
if (arraySizes->isInnerImplicit()) if (arraySizes->isInnerImplicit()) {
error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", ""); error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", "");
arraySizes->clearInnerImplicit();
}
if (arraySizes->isInnerSpecialization()) if (arraySizes->isInnerSpecialization())
error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", ""); error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", "");
......
...@@ -338,7 +338,7 @@ public: ...@@ -338,7 +338,7 @@ public:
bool arrayError(const TSourceLoc&, const TType&); bool arrayError(const TSourceLoc&, const TType&);
void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&); void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
void structArrayCheck(const TSourceLoc&, const TType& structure); void structArrayCheck(const TSourceLoc&, const TType& structure);
void arraySizesCheck(const TSourceLoc&, const TQualifier&, const TArraySizes*, bool initializer, bool lastMember); void arraySizesCheck(const TSourceLoc&, const TQualifier&, TArraySizes*, bool initializer, bool lastMember);
void arrayOfArrayVersionCheck(const TSourceLoc&); void arrayOfArrayVersionCheck(const TSourceLoc&);
void arrayDimCheck(const TSourceLoc&, const TArraySizes* sizes1, const TArraySizes* sizes2); void arrayDimCheck(const TSourceLoc&, const TArraySizes* sizes1, const TArraySizes* sizes2);
void arrayDimCheck(const TSourceLoc&, const TType*, const TArraySizes*); void arrayDimCheck(const TSourceLoc&, const TType*, const TArraySizes*);
......
...@@ -160,7 +160,7 @@ INSTANTIATE_TEST_CASE_P( ...@@ -160,7 +160,7 @@ INSTANTIATE_TEST_CASE_P(
"460.vert", "460.vert",
"dce.frag", "dce.frag",
"atomic_uint.frag", "atomic_uint.frag",
// "implicitInnerAtomicUint.frag", "implicitInnerAtomicUint.frag",
"aggOps.frag", "aggOps.frag",
"always-discard.frag", "always-discard.frag",
"always-discard2.frag", "always-discard2.frag",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment