Fix allowing fragment shader invariant declarations.

Bug 18732025

Change-Id: I8a3024327533c3e6db72248caafc5e618808edf5
Reviewed-on: https://swiftshader-review.googlesource.com/1630
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/compiler/OutputASM.cpp b/src/OpenGL/compiler/OutputASM.cpp
index c3e08e2..6597507 100644
--- a/src/OpenGL/compiler/OutputASM.cpp
+++ b/src/OpenGL/compiler/OutputASM.cpp
@@ -154,11 +154,14 @@
 

 	void OutputASM::visitSymbol(TIntermSymbol *symbol)

 	{

+		// Vertex varyings don't have to be actively used to successfully link

+		// against pixel shaders that use them. So make sure they're declared.

 		if(symbol->getQualifier() == EvqVaryingOut || symbol->getQualifier() == EvqInvariantVaryingOut)

 		{

-			// Vertex varyings don't have to be actively used to successfully link

-			// against pixel shaders that use them. So make sure they're declared.

-			declareVarying(symbol, -1);

+			if(symbol->getBasicType() != EbtInvariant)   // Typeless declarations are not new varyings

+			{

+				declareVarying(symbol, -1);

+			}

 		}

 	}

 

diff --git a/src/OpenGL/compiler/glslang.y b/src/OpenGL/compiler/glslang.y
index eca0478..9d307dd 100644
--- a/src/OpenGL/compiler/glslang.y
+++ b/src/OpenGL/compiler/glslang.y
@@ -1363,7 +1363,6 @@
         }
     }
     | INVARIANT IDENTIFIER {
-        VERTEX_ONLY("invariant declaration", $1.line);
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "invariant varying"))
             context->recover();
         $$.type.setBasic(EbtInvariant, EvqInvariantVaryingOut, $2.line);
diff --git a/src/OpenGL/compiler/glslang_tab.cpp b/src/OpenGL/compiler/glslang_tab.cpp
index 9d6085f..d4c09b4 100644
--- a/src/OpenGL/compiler/glslang_tab.cpp
+++ b/src/OpenGL/compiler/glslang_tab.cpp
@@ -669,17 +669,17 @@
      953,   961,   988,   993,  1003,  1041,  1044,  1051,  1059,  1080,
     1101,  1112,  1141,  1146,  1156,  1161,  1171,  1174,  1177,  1180,
     1186,  1193,  1196,  1218,  1236,  1260,  1283,  1287,  1305,  1313,
-    1345,  1365,  1454,  1463,  1486,  1489,  1495,  1503,  1511,  1519,
-    1529,  1536,  1539,  1542,  1548,  1551,  1566,  1570,  1574,  1578,
-    1587,  1592,  1597,  1602,  1607,  1612,  1617,  1622,  1627,  1632,
-    1638,  1644,  1650,  1655,  1660,  1669,  1674,  1687,  1687,  1701,
-    1701,  1710,  1713,  1728,  1764,  1768,  1774,  1782,  1798,  1802,
-    1806,  1807,  1813,  1814,  1815,  1816,  1817,  1821,  1822,  1822,
-    1822,  1832,  1833,  1837,  1837,  1838,  1838,  1843,  1846,  1856,
-    1859,  1865,  1866,  1870,  1878,  1882,  1892,  1897,  1914,  1914,
-    1919,  1919,  1926,  1926,  1934,  1937,  1943,  1946,  1952,  1956,
-    1963,  1970,  1977,  1984,  1995,  2004,  2008,  2015,  2018,  2024,
-    2024
+    1345,  1365,  1453,  1462,  1485,  1488,  1494,  1502,  1510,  1518,
+    1528,  1535,  1538,  1541,  1547,  1550,  1565,  1569,  1573,  1577,
+    1586,  1591,  1596,  1601,  1606,  1611,  1616,  1621,  1626,  1631,
+    1637,  1643,  1649,  1654,  1659,  1668,  1673,  1686,  1686,  1700,
+    1700,  1709,  1712,  1727,  1763,  1767,  1773,  1781,  1797,  1801,
+    1805,  1806,  1812,  1813,  1814,  1815,  1816,  1820,  1821,  1821,
+    1821,  1831,  1832,  1836,  1836,  1837,  1837,  1842,  1845,  1855,
+    1858,  1864,  1865,  1869,  1877,  1881,  1891,  1896,  1913,  1913,
+    1918,  1918,  1925,  1925,  1933,  1936,  1942,  1945,  1951,  1955,
+    1962,  1969,  1976,  1983,  1994,  2003,  2007,  2014,  2017,  2023,
+    2023
 };
 #endif
 
@@ -3517,7 +3517,6 @@
   case 101:
 
     {
-        VERTEX_ONLY("invariant declaration", (yyvsp[(1) - (2)].lex).line);
         if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
             context->recover();
         (yyval.interm).type.setBasic(EbtInvariant, EvqInvariantVaryingOut, (yyvsp[(2) - (2)].lex).line);
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index dae58e4..cb2df49 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -507,8 +507,8 @@
 }

 

 void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)

-{
-	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
+{

+	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications

 

 	TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",

 	      target, size, data, usage);

@@ -556,9 +556,9 @@
 }

 

 void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)

-{
-	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
-	offset = static_cast<GLint>(offset);
+{

+	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications

+	offset = static_cast<GLint>(offset);

 

 	TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",

 	      target, offset, size, data);