ir_to_mesa: use RSQ+MUL instead of RSQ+RCP for SQRT

sqrt(x) = 1/rsq(x) = x*rsq(x)

This optimization already was in the old GLSL compiler.

Acked on irc by Eric Anholt.
This commit is contained in:
Marek Olšák 2010-08-31 05:38:50 +02:00
parent 2619b1c96f
commit 4f189b3bf5
1 changed files with 2 additions and 1 deletions

View File

@ -880,8 +880,9 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
break;
case ir_unop_sqrt:
/* sqrt(x) = x * rsq(x). */
ir_to_mesa_emit_scalar_op1(ir, OPCODE_RSQ, result_dst, op[0]);
ir_to_mesa_emit_scalar_op1(ir, OPCODE_RCP, result_dst, result_src);
ir_to_mesa_emit_op2(ir, OPCODE_MUL, result_dst, result_src, op[0]);
/* 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);