summaryrefslogtreecommitdiff
path: root/src/mesa
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-06-28 13:01:49 -0700
committerEric Anholt <eric@anholt.net>2010-06-28 13:03:10 -0700
commit8f62ad6d0ff3c11808739c74441f82f6f12485d6 (patch)
tree3eaf05f7ab840ad534076323cedb26bad4fe8588 /src/mesa
parentd5a5df45a4af93bb845483bdeeae7c8e042b03d8 (diff)
ir_to_mesa: Fix binop_sqrt for multi-channel and negative source channels.
Fixes glsl-fs-sqrt-branch.
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/shader/ir_to_mesa.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 9cf7839148..d371e35f9c 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -706,7 +706,10 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
break;
case ir_unop_sqrt:
ir_to_mesa_emit_scalar_op1(ir, OPCODE_RSQ, result_dst, op[0]);
- ir_to_mesa_emit_op1(ir, OPCODE_RCP, result_dst, result_src);
+ ir_to_mesa_emit_scalar_op1(ir, OPCODE_RCP, result_dst, result_src);
+ /* For incoming channels < 0, set the result to 0. */
+ ir_to_mesa_emit_op3(ir, OPCODE_CMP, result_dst,
+ op[0], src_reg_for_float(0.0), result_src);
break;
case ir_unop_rsq:
ir_to_mesa_emit_scalar_op1(ir, OPCODE_RSQ, result_dst, op[0]);