st/mesa: make sure to create a "clean" bool when doing i2b
authorIlia Mirkin <imirkin@alum.mit.edu>
Thu, 7 May 2015 03:29:33 +0000 (23:29 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Mon, 11 May 2015 19:52:17 +0000 (15:52 -0400)
i2b has to work for all integers, not just 1. INEG would not necessarily
result with all bits set, which is something that other operations can
rely on by e.g. using AND (or INEG for b2i).

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Cc: mesa-stable@lists.freedesktop.org
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index 1fea8600a75d0fdc13dd5e47f2eca7450e8bbcb0..f0f2a77d0650d4327d0f1581b620eb86588b5054 100644 (file)
@@ -1953,7 +1953,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
       break;
    case ir_unop_i2b:
       if (native_integers)
-         emit(ir, TGSI_OPCODE_INEG, result_dst, op[0]);
+         emit(ir, TGSI_OPCODE_USNE, result_dst, op[0], st_src_reg_for_int(0));
       else
          emit(ir, TGSI_OPCODE_SNE, result_dst, op[0], st_src_reg_for_float(0.0));
       break;