Remove invariant declaration in vertex shader for translation from ESSL 3.00 to GLSL <= 4.1
This is a follow-up patch of
https://chromium-review.googlesource.com/408569. This CL removes
invariant declaration in ESSL 3.00 vertex shader, such like:
"
out vec4 foo;
invariant foo;
"
This CL also adds the workarounds in libANGLE.
BUG=chromium:639760
TEST=webgl2_conformance
Change-Id: I568ab51a9a2f5da10d1aff0b63aae8805097e081
Reviewed-on: https://chromium-review.googlesource.com/409157
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/OutputGLSLBase.cpp b/src/compiler/translator/OutputGLSLBase.cpp
index 14cb16b..964f1e2 100644
--- a/src/compiler/translator/OutputGLSLBase.cpp
+++ b/src/compiler/translator/OutputGLSLBase.cpp
@@ -85,6 +85,7 @@
ShHashFunction64 hashFunction,
NameMap &nameMap,
TSymbolTable &symbolTable,
+ sh::GLenum shaderType,
int shaderVersion,
ShShaderOutput output,
ShCompileOptions compileOptions)
@@ -95,6 +96,7 @@
mHashFunction(hashFunction),
mNameMap(nameMap),
mSymbolTable(symbolTable),
+ mShaderType(shaderType),
mShaderVersion(shaderVersion),
mOutput(output),
mCompileOptions(compileOptions)
@@ -103,11 +105,7 @@
void TOutputGLSLBase::writeInvariantQualifier(const TType &type)
{
- bool removeInvariant = ((type.getQualifier() == EvqVaryingIn && sh::IsGLSL420OrNewer(mOutput) &&
- !(mCompileOptions & SH_DONT_REMOVE_INVARIANT_FOR_FRAGMENT_INPUT)) ||
- (sh::IsGLSL410OrOlder(mOutput) && mShaderVersion >= 300 &&
- !!(mCompileOptions & SH_REMOVE_INVARIANT_FOR_ESSL3)));
- if (!removeInvariant)
+ if (!sh::RemoveInvariant(mShaderType, mShaderVersion, mOutput, mCompileOptions))
{
TInfoSinkBase &out = objSink();
out << "invariant ";
@@ -165,7 +163,7 @@
const char *TOutputGLSLBase::mapQualifierToString(TQualifier qualifier)
{
if (sh::IsGLSL410OrOlder(mOutput) && mShaderVersion >= 300 &&
- !!(mCompileOptions & SH_REMOVE_CENTROID_FOR_ESSL3))
+ (mCompileOptions & SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3) != 0)
{
switch (qualifier)
{
@@ -960,8 +958,7 @@
ASSERT(sequence && sequence->size() == 1);
const TIntermSymbol *symbol = sequence->front()->getAsSymbolNode();
ASSERT(symbol);
- writeInvariantQualifier(symbol->getType());
- out << hashVariableName(symbol->getName());
+ out << "invariant " << hashVariableName(symbol->getName());
}
visitChildren = false;
break;