Fix type recursion with EOpIndexIndirect dereferences

* This primarily affects arrays-of-arrays but it can also affect arrays-of-
  structs if there are no further dereferences.
This commit is contained in:
baldurk 2019-02-18 09:36:29 +00:00
parent 5432f0dd8f
commit 141bc5a54f
5 changed files with 49 additions and 6 deletions

View file

@ -317,8 +317,7 @@ public:
newBaseName.append(TString("[") + String(i) + "]");
TList<TIntermBinary*>::const_iterator nextDeref = deref;
++nextDeref;
TType derefType(*terminalType, 0);
blowUpActiveAggregate(derefType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize,
blowUpActiveAggregate(*terminalType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize,
topLevelArrayStride, baseStorage, active);
if (offset >= 0)
@ -705,7 +704,7 @@ public:
// Are we at a level in a dereference chain at which individual active uniform queries are made?
bool isReflectionGranularity(const TType& type)
{
return type.getBasicType() != EbtBlock && type.getBasicType() != EbtStruct;
return type.getBasicType() != EbtBlock && type.getBasicType() != EbtStruct && !type.isArrayOfArrays();
}
// For a binary operation indexing into an aggregate, chase down the base of the aggregate.