Revert "i965/fs: Fix conversions float->bool, int->bool"
authorEric Anholt <eric@anholt.net>
Mon, 12 Nov 2012 21:16:02 +0000 (13:16 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 20 Nov 2012 06:33:43 +0000 (22:33 -0800)
This reverts commit cf0bbb30f6bd9d3fa61b5207320e8f34c563a2c6.  It
was just papering over the bug fixed in the previous commit.

Acked-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp

index 3c0a27bc575b3f8c1e659dd59b8cec9bcbe08f69..edadd3513c95f05383791ca6f4e47c261c6eb425 100644 (file)
@@ -501,16 +501,16 @@ fs_visitor::visit(ir_expression *ir)
       break;
 
    case ir_unop_f2b:
-      inst = emit(BRW_OPCODE_CMP, this->result, op[0], fs_reg(0.0f));
-      inst->conditional_mod = BRW_CONDITIONAL_NZ;
-      emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(1));
-      break;
    case ir_unop_i2b:
-      assert(op[0].type == BRW_REGISTER_TYPE_D);
+      temp = this->result;
+      /* original gen4 does implicit conversion before comparison. */
+      if (intel->gen < 5)
+        temp.type = op[0].type;
+
+      resolve_ud_negate(&op[0]);
 
-      inst = emit(BRW_OPCODE_CMP, this->result, op[0], fs_reg(0));
+      inst = emit(BRW_OPCODE_CMP, temp, op[0], fs_reg(0.0f));
       inst->conditional_mod = BRW_CONDITIONAL_NZ;
-      emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(1));
       break;
 
    case ir_unop_trunc: