Fix shaders with invariant keyword.
We would trigger assertion failures in Debug mode, and fail to
parse and translate correctly in Release.
BUG=angle:711
Change-Id: Ibb7f33b288376617598578f48c7bbdbdec044279
Reviewed-on: https://chromium-review.googlesource.com/210822
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
diff --git a/tests/angle_tests/GLSLTest.cpp b/tests/angle_tests/GLSLTest.cpp
index ee6735f..450981c 100644
--- a/tests/angle_tests/GLSLTest.cpp
+++ b/tests/angle_tests/GLSLTest.cpp
@@ -205,3 +205,103 @@
GLuint program = compileProgram(vertexShaderSource, fragmentShaderSource);
EXPECT_NE(0u, program);
}
+
+TEST_F(GLSLTest, InvariantVaryingOut)
+{
+ const std::string fragmentShaderSource = SHADER_SOURCE
+ (
+ precision mediump float;
+ varying float v_varying;
+ void main() { gl_FragColor = vec4(v_varying, 0, 0, 1.0); }
+ );
+
+ const std::string vertexShaderSource = SHADER_SOURCE
+ (
+ attribute vec4 a_position;
+ invariant varying float v_varying;
+ void main() { v_varying = a_position.x; gl_Position = a_position; }
+ );
+
+ GLuint program = compileProgram(vertexShaderSource, fragmentShaderSource);
+ EXPECT_NE(0u, program);
+}
+
+TEST_F(GLSLTest, InvariantVaryingIn)
+{
+ const std::string fragmentShaderSource = SHADER_SOURCE
+ (
+ precision mediump float;
+ invariant varying float v_varying;
+ void main() { gl_FragColor = vec4(v_varying, 0, 0, 1.0); }
+ );
+
+ const std::string vertexShaderSource = SHADER_SOURCE
+ (
+ attribute vec4 a_position;
+ varying float v_varying;
+ void main() { v_varying = a_position.x; gl_Position = a_position; }
+ );
+
+ GLuint program = compileProgram(vertexShaderSource, fragmentShaderSource);
+ EXPECT_NE(0u, program);
+}
+
+TEST_F(GLSLTest, InvariantVaryingBoth)
+{
+ const std::string fragmentShaderSource = SHADER_SOURCE
+ (
+ precision mediump float;
+ invariant varying float v_varying;
+ void main() { gl_FragColor = vec4(v_varying, 0, 0, 1.0); }
+ );
+
+ const std::string vertexShaderSource = SHADER_SOURCE
+ (
+ attribute vec4 a_position;
+ invariant varying float v_varying;
+ void main() { v_varying = a_position.x; gl_Position = a_position; }
+ );
+
+ GLuint program = compileProgram(vertexShaderSource, fragmentShaderSource);
+ EXPECT_NE(0u, program);
+}
+
+TEST_F(GLSLTest, InvariantGLPosition)
+{
+ const std::string fragmentShaderSource = SHADER_SOURCE
+ (
+ precision mediump float;
+ varying float v_varying;
+ void main() { gl_FragColor = vec4(v_varying, 0, 0, 1.0); }
+ );
+
+ const std::string vertexShaderSource = SHADER_SOURCE
+ (
+ attribute vec4 a_position;
+ invariant gl_Position;
+ varying float v_varying;
+ void main() { v_varying = a_position.x; gl_Position = a_position; }
+ );
+
+ GLuint program = compileProgram(vertexShaderSource, fragmentShaderSource);
+ EXPECT_NE(0u, program);
+}
+
+TEST_F(GLSLTest, InvariantAll)
+{
+ const std::string fragmentShaderSource = SHADER_SOURCE
+ (
+ precision mediump float;
+ varying float v_varying;
+ void main() { gl_FragColor = vec4(v_varying, 0, 0, 1.0); }
+ );
+
+ const std::string vertexShaderSource =
+ "#pragma STDGL invariant(all)\n"
+ "attribute vec4 a_position;\n"
+ "varying float v_varying;\n"
+ "void main() { v_varying = a_position.x; gl_Position = a_position; }\n";
+
+ GLuint program = compileProgram(vertexShaderSource, fragmentShaderSource);
+ EXPECT_NE(0u, program);
+}