aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Madill <jmadill@chromium.org>2014-09-17 10:31:15 -0400
committerJamie Madill <jmadill@chromium.org>2014-09-17 20:30:07 +0000
commite6256f87c3f3b754f2bbe19cc817b1140cecc4fc (patch)
tree7c3c2322ec1908c93142415a59ff7e969f18c802
parent87a93308da237626325d13339565d7136125ed0d (diff)
downloadangle-e6256f87c3f3b754f2bbe19cc817b1140cecc4fc.tar.gz
Fix the varying sort comparator in ShaderD3D.
The comparator was actually a <= operator, while sort requires a strict < operator. This was causing a potential assertion failure. Bug report from Kerim Borchaev. BUG=angle:742 Change-Id: I37c2925ab0b85e70ee1b2be3c72c6ddc062e8d28 Reviewed-on: https://chromium-review.googlesource.com/218506 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
-rw-r--r--src/libGLESv2/renderer/d3d/ShaderD3D.cpp2
-rw-r--r--tests/angle_tests/GLSLTest.cpp37
2 files changed, 38 insertions, 1 deletions
diff --git a/src/libGLESv2/renderer/d3d/ShaderD3D.cpp b/src/libGLESv2/renderer/d3d/ShaderD3D.cpp
index 57edb290..c472113e 100644
--- a/src/libGLESv2/renderer/d3d/ShaderD3D.cpp
+++ b/src/libGLESv2/renderer/d3d/ShaderD3D.cpp
@@ -348,7 +348,7 @@ bool ShaderD3D::compareVarying(const gl::PackedVarying &x, const gl::PackedVaryi
return true;
}
- return gl::VariableSortOrder(x.type) <= gl::VariableSortOrder(y.type);
+ return gl::VariableSortOrder(x.type) < gl::VariableSortOrder(y.type);
}
unsigned int ShaderD3D::getUniformRegister(const std::string &uniformName) const
diff --git a/tests/angle_tests/GLSLTest.cpp b/tests/angle_tests/GLSLTest.cpp
index 233edb38..b47b3f76 100644
--- a/tests/angle_tests/GLSLTest.cpp
+++ b/tests/angle_tests/GLSLTest.cpp
@@ -226,6 +226,43 @@ TEST_F(GLSLTest, InvariantVaryingOut)
EXPECT_NE(0u, program);
}
+TEST_F(GLSLTest, FrontFacingAndVarying)
+{
+ 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;
+ }
+ );
+
+ const std::string fragmentShaderSource = SHADER_SOURCE
+ (
+ precision mediump float;
+ varying float v_varying;
+ void main()
+ {
+ vec4 c;
+
+ if (gl_FrontFacing)
+ {
+ c = vec4(v_varying, 0, 0, 1.0);
+ }
+ else
+ {
+ c = vec4(0, v_varying, 0, 1.0);
+ }
+ gl_FragColor = c;
+ }
+ );
+
+ GLuint program = CompileProgram(vertexShaderSource, fragmentShaderSource);
+ EXPECT_NE(0u, program);
+}
+
TEST_F(GLSLTest, InvariantVaryingIn)
{
const std::string fragmentShaderSource = SHADER_SOURCE