Add a new invariant declaration operator.
BUG=angle:711
Change-Id: I54a48b636a68c317b8d44ee2d578847b80095289
Reviewed-on: https://chromium-review.googlesource.com/213500
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/OutputGLSLBase.cpp b/src/compiler/translator/OutputGLSLBase.cpp
index 09f7ad9..6d07ccc 100644
--- a/src/compiler/translator/OutputGLSLBase.cpp
+++ b/src/compiler/translator/OutputGLSLBase.cpp
@@ -81,8 +81,7 @@
{
TInfoSinkBase &out = objSink();
TQualifier qualifier = type.getQualifier();
- if (qualifier != EvqTemporary && qualifier != EvqGlobal &&
- type.getBasicType() != EbtInvariant)
+ if (qualifier != EvqTemporary && qualifier != EvqGlobal)
{
out << type.getQualifierString() << " ";
}
@@ -650,6 +649,17 @@
mDeclaringVariables = false;
}
break;
+ case EOpInvariantDeclaration: {
+ // Invariant declaration.
+ ASSERT(visit == PreVisit);
+ const TIntermSequence *sequence = node->getSequence();
+ ASSERT(sequence && sequence->size() == 1);
+ const TIntermSymbol *symbol = sequence->front()->getAsSymbolNode();
+ ASSERT(symbol);
+ out << "invariant " << symbol->getSymbol() << ";";
+ visitChildren = false;
+ break;
+ }
case EOpConstructFloat:
writeTriplet(visit, "float(", NULL, ")");
break;