diff options
author | Kenneth Graunke <[email protected]> | 2011-06-14 22:47:04 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2011-06-29 16:07:13 -0700 |
commit | ed92b912120394f3b19958effaa819d29bc6d059 (patch) | |
tree | 08b8feed0458eb2b5d3d3b584f652bed5d7f9087 /src/glsl | |
parent | 8eb975394478a5c1ebd2bd8a12b5eb61cef808a7 (diff) |
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 <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/glsl')
-rw-r--r-- | 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 a5f61f213d0..94b8c4a6836 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; } |