From: Ian Romanick <[email protected]>

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.

v2: Add missing ] on vertex passthrough line.  Noticed by Emil.

Signed-off-by: Ian Romanick <[email protected]>
---
 .../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..a6590c1
--- /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

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to