Mesa (master): glsl: Fix DIV_TO_MUL_RCP lowering for uint result types.

Kenneth Graunke kwg at kemper.freedesktop.org
Wed Jun 29 23:07:31 UTC 2011


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

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Tue Jun 14 22:47:04 2011 -0700

glsl: Fix DIV_TO_MUL_RCP lowering for uint result types.

f2i results in an int/ivec; we need i2u to get a uint/uvec.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/glsl/lower_instructions.cpp |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp
index a5f61f2..94b8c4a 100644
--- a/src/glsl/lower_instructions.cpp
+++ b/src/glsl/lower_instructions.cpp
@@ -168,8 +168,13 @@ lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
 
       op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1);
 
-      ir->operation = ir_unop_f2i;
-      ir->operands[0] = op0;
+      if (ir->operands[1]->type->base_type == GLSL_TYPE_INT) {
+	 ir->operation = ir_unop_f2i;
+	 ir->operands[0] = op0;
+      } else {
+	 ir->operation = ir_unop_i2u;
+	 ir->operands[0] = new(ir) ir_expression(ir_unop_f2i, op0);
+      }
       ir->operands[1] = NULL;
    }
 




More information about the mesa-commit mailing list