Revert "Fix setting const qualifier on indexing expression"
Failing to compile shaders which are used in some layout_tests,
see http://crbug.com/538692 for logs and bad shaders.
We should diagnose if the shaders are faulty or if there's a
bug in this CL and take appropriate action, but first priority
is to get the tests running again.
BUG=538692
BUG=angleproject:1170
This reverts commit 16a79cd169420cdf0254964b1bac9dd9964a8119.
Change-Id: Iea14c58d87041bcf5ba645b7076ba0936dea6b9d
Reviewed-on: https://chromium-review.googlesource.com/303794
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index 04e88da..8eaa111 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -2872,36 +2872,51 @@
}
else if (baseExpression->isArray())
{
- TType indexedType = baseExpression->getType();
- indexedType.clearArrayness();
- indexedExpression->setType(indexedType);
+ const TType &baseType = baseExpression->getType();
+ if (baseType.getStruct())
+ {
+ TType copyOfType(baseType.getStruct());
+ indexedExpression->setType(copyOfType);
+ }
+ else if (baseType.isInterfaceBlock())
+ {
+ TType copyOfType(baseType.getInterfaceBlock(), baseType.getQualifier(),
+ baseType.getLayoutQualifier(), 0);
+ indexedExpression->setType(copyOfType);
+ }
+ else
+ {
+ indexedExpression->setType(
+ TType(baseExpression->getBasicType(), baseExpression->getPrecision(), EvqTemporary,
+ static_cast<unsigned char>(baseExpression->getNominalSize()),
+ static_cast<unsigned char>(baseExpression->getSecondarySize())));
+ }
+
+ if (baseExpression->getType().getQualifier() == EvqConst)
+ {
+ indexedExpression->getTypePointer()->setQualifier(EvqConst);
+ }
}
else if (baseExpression->isMatrix())
{
+ TQualifier qualifier =
+ baseExpression->getType().getQualifier() == EvqConst ? EvqConst : EvqTemporary;
indexedExpression->setType(TType(baseExpression->getBasicType(),
- baseExpression->getPrecision(), EvqTemporary,
+ baseExpression->getPrecision(), qualifier,
static_cast<unsigned char>(baseExpression->getRows())));
}
else if (baseExpression->isVector())
{
+ TQualifier qualifier =
+ baseExpression->getType().getQualifier() == EvqConst ? EvqConst : EvqTemporary;
indexedExpression->setType(
- TType(baseExpression->getBasicType(), baseExpression->getPrecision(), EvqTemporary));
+ TType(baseExpression->getBasicType(), baseExpression->getPrecision(), qualifier));
}
else
{
indexedExpression->setType(baseExpression->getType());
}
- if (baseExpression->getType().getQualifier() == EvqConst &&
- indexExpression->getType().getQualifier() == EvqConst)
- {
- indexedExpression->getTypePointer()->setQualifier(EvqConst);
- }
- else
- {
- indexedExpression->getTypePointer()->setQualifier(EvqTemporary);
- }
-
return indexedExpression;
}