[Piglit] [PATCH] glsl-1.10: Add test for bug in i965 gl_FrontFacing optimization

Ian Romanick idr at freedesktop.org
Wed Mar 11 14:19:55 PDT 2015


From: Ian Romanick <ian.d.romanick at intel.com>

These patterns

    gl_FrontFacing ? -1.0 :  1.0
    gl_FrontFacing ?  1.0 : -1.0
    gl_FrontFacing ?  0.0 : -1.0

are recognized and optimized by the i965 driver.  However, it
incorrectly optimizes

    int x = gl_FrontFacing ? 1 : -1;

as

    int x = gl_FrontFacing ? floatBitsToInt(1.0) : floatBitsToInt(-1.0);

NOTE: This test currently fails on Mesa master and 10.5 branches.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
 .../fs-frontfacing-ternary-1-neg-1.shader_test     | 32 ++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 tests/spec/glsl-1.10/execution/fs-frontfacing-ternary-1-neg-1.shader_test

diff --git a/tests/spec/glsl-1.10/execution/fs-frontfacing-ternary-1-neg-1.shader_test b/tests/spec/glsl-1.10/execution/fs-frontfacing-ternary-1-neg-1.shader_test
new file mode 100644
index 0000000..8d73bcd
--- /dev/null
+++ b/tests/spec/glsl-1.10/execution/fs-frontfacing-ternary-1-neg-1.shader_test
@@ -0,0 +1,32 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader passthrough
+
+[fragment shader]
+uniform int front;
+uniform int back;
+
+const vec4 c = vec4(1.0, 0.0, 0.0, 0.0);
+void main()
+{
+	int f = gl_FrontFacing ? 1 : -1;
+	if (f == front) {
+		gl_FragColor = c.yxyx;
+	} else if (f == back) {
+		gl_FragColor = c.yyxx;
+	} else {
+		gl_FragColor = c.xyyx;
+	}
+}
+
+[test]
+uniform int front 1
+uniform int back -1
+
+draw rect -1 -1 2 1
+draw rect 1 0 -2 1
+relative probe rgba (0, 0) (0.0, 1.0, 0.0, 1.0)
+relative probe rgba (1, 0) (0.0, 1.0, 0.0, 1.0)
+relative probe rgba (0, 1) (0.0, 0.0, 1.0, 1.0)
+relative probe rgba (1, 1) (0.0, 0.0, 1.0, 1.0)
-- 
2.1.0



More information about the Piglit mailing list