Mesa (master): ir_to_mesa: use RSQ+MUL instead of RSQ+RCP for SQRT

Marek Olšák mareko at kemper.freedesktop.org
Tue Aug 31 04:40:22 UTC 2010


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Tue Aug 31 05:38:50 2010 +0200

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.

---

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

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index af6d734..516c991 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -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);




More information about the mesa-commit mailing list