Separate invariance from qualifiers

ESSL3 makes it possible to combine invariant with several more different
qualifiers. To avoid combinatorial explosion of the qualifier enum, track
invariance with a separate boolean.

TEST=WebGL conformance tests, angle_unittests
BUG=angleproject:987

Change-Id: I0c6629e5ca2ded06db9ac9e5bab2fb6480299a5a
Reviewed-on: https://chromium-review.googlesource.com/267662
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/util.cpp b/src/compiler/translator/util.cpp
index 42a995e..6668a20 100644
--- a/src/compiler/translator/util.cpp
+++ b/src/compiler/translator/util.cpp
@@ -219,7 +219,6 @@
     switch (qualifier)
     {
       case EvqVaryingOut:
-      case EvqInvariantVaryingOut:
       case EvqSmoothOut:
       case EvqFlatOut:
       case EvqCentroidOut:
@@ -237,7 +236,6 @@
     switch (qualifier)
     {
       case EvqVaryingIn:
-      case EvqInvariantVaryingIn:
       case EvqSmoothIn:
       case EvqFlatIn:
       case EvqCentroidIn:
@@ -269,8 +267,6 @@
       case EvqFragmentIn:
       case EvqVaryingIn:
       case EvqVaryingOut:
-      case EvqInvariantVaryingIn:
-      case EvqInvariantVaryingOut:
         return INTERPOLATION_SMOOTH;
 
       case EvqCentroidIn:
@@ -301,13 +297,9 @@
     ASSERT(variable);
     switch (type.getQualifier())
     {
-      case EvqInvariantVaryingIn:
-      case EvqInvariantVaryingOut:
-        variable->isInvariant = true;
-        break;
       case EvqVaryingIn:
       case EvqVaryingOut:
-        if (mSymbolTable.isVaryingInvariant(std::string(name.c_str())))
+        if (mSymbolTable.isVaryingInvariant(std::string(name.c_str())) || type.isInvariant())
         {
             variable->isInvariant = true;
         }