Otherwise result_src may be provided to an integer instruction whose
negate modifier has different semantics.  Example is UCMP as in the
bug linked below, where an unrelated change in the GLSL built-in
lowering code for atan2 (e9ffd12827ac11a2d2002a42fa8eb1df847153ba)
caused the generation of floating-point ir_unop_neg instructions
followed by ir_triop_csel, which is lowered into UCMP on back-ends
with native integer support.

Fixes a regression of piglit glsl-fs-tan-1 on softpipe introduced by
the above-mentioned glsl front-end commit.  Even though the commit
that triggered the regression doesn't seem to have made it to any
stable branches yet, this seems worth back-porting since I don't see
any reason why the bug couldn't have been reproduced before that
point.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99817
Tested-by: Vinson Lee <v...@freedesktop.org>
Cc: mesa-sta...@lists.freedesktop.org
---
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index af41bdb..6bf3c89 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -1633,7 +1633,7 @@ glsl_to_tgsi_visitor::visit_expression(ir_expression* ir, 
st_src_reg *op)
          emit_asm(ir, TGSI_OPCODE_DNEG, result_dst, op[0]);
       else {
          op[0].negate = ~op[0].negate;
-         result_src = op[0];
+         emit_asm(ir, TGSI_OPCODE_MOV, result_dst, op[0]);
       }
       break;
    case ir_unop_subroutine_to_int:
-- 
2.10.2

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to