diff options
author | Ian Romanick <[email protected]> | 2015-02-28 08:32:57 -0800 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2015-03-17 15:01:44 -0700 |
commit | 6db5e134b627d24e3d6d42a6835e6595652c5aab (patch) | |
tree | 1323e11315faba83342082489d1d9dfa0f4e050c | |
parent | 4a53445b0d199489b2d1ae7d8654791e42b16804 (diff) |
i965/fs: Apply gl_FrontFacing ? -1 : 1 optimization only for floats
At the very least, unreal4/sun-temple/102.shader_test uses this pattern
for a signed integer result. However, that shader did not hit the
optimization in the first place because it uses !gl_FrontFacing. I
changed the shader to use remove the logical-not and reverse the other
operands. I verified that incorrect code is generated before this
change and correct code is generated after.
Fixes fs-frontfacing-ternary-1-neg-1.shader_test.
No shader-db changes.
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 91dd212d0f9..6d56115a443 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -2735,6 +2735,9 @@ fs_visitor::try_opt_frontfacing_ternary(ir_if *ir) if (!then_rhs || !else_rhs) return false; + if (then_rhs->type->base_type != GLSL_TYPE_FLOAT) + return false; + if ((then_rhs->is_one() && else_rhs->is_negative_one()) || (else_rhs->is_one() && then_rhs->is_negative_one())) { then_assign->lhs->accept(this); |