Mesa (master): mesa: fix code generation for ir_unop_sqrt

Brian Paul brianp at kemper.freedesktop.org
Thu Sep 2 14:00:23 UTC 2010


Module: Mesa
Branch: master
Commit: c9039fdb167865547dc9b3828d69b99209344999
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c9039fdb167865547dc9b3828d69b99209344999

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Sep  2 07:58:28 2010 -0600

mesa: fix code generation for ir_unop_sqrt

The CMP instruction needed to be flipped to properly handle
operand==0.

Fixes fd.o bug 29923.

---

 src/mesa/program/ir_to_mesa.cpp |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index b2ba9a2..f0e14b8 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -1198,9 +1198,10 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       /* sqrt(x) = x * rsq(x). */
       ir_to_mesa_emit_scalar_op1(ir, OPCODE_RSQ, result_dst, op[0]);
       ir_to_mesa_emit_op2(ir, OPCODE_MUL, result_dst, result_src, op[0]);
-      /* For incoming channels < 0, set the result to 0. */
+      /* For incoming channels <= 0, set the result to 0. */
+      op[0].negate = ~op[0].negate;
       ir_to_mesa_emit_op3(ir, OPCODE_CMP, result_dst,
-			  op[0], src_reg_for_float(0.0), result_src);
+			  op[0], result_src, src_reg_for_float(0.0));
       break;
    case ir_unop_rsq:
       ir_to_mesa_emit_scalar_op1(ir, OPCODE_RSQ, result_dst, op[0]);




More information about the mesa-commit mailing list