[Mesa-dev] [PATCH v2] glsl_to_tgsi, mesa: fixes for native integers and integer booleans

Bryan Cain bryancain3 at gmail.com
Sat Sep 3 21:40:32 PDT 2011

On 09/02/2011 06:13 PM, Eric Anholt wrote:
> On Wed, 31 Aug 2011 01:33:59 -0500, Bryan Cain <bryancain3 at gmail.com> wrote:
>> With this patch, there are no piglit regressions on softpipe with native
>> integers enabled.  Unlike my previous patch, this uses integer values of
>> ~0 and 0 for true and false, respectively, instead of the float values 1.0
>> and 0.0.
> This will break b2* conversions on our driver, since we expect true to
> be 1, not ~0.  The minimal change would require emit(AND(temp, uniform,
> 1)) when deferencing boolean components of uniform variables.

Your driver already emits an AND instruction on every compare, according
to this code from brw_fs_visitor.cpp:

   case ir_binop_less:
   case ir_binop_greater:
   case ir_binop_lequal:
   case ir_binop_gequal:
   case ir_binop_equal:
   case ir_binop_all_equal:
   case ir_binop_nequal:
   case ir_binop_any_nequal:
      temp = this->result;
      /* original gen4 does implicit conversion before comparison. */
      if (intel->gen < 5)
     temp.type = op[0].type;

      inst = emit(BRW_OPCODE_CMP, temp, op[0], op[1]);
      inst->conditional_mod = brw_conditional_for_comparison(ir->operation);
      emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1));

If the hardware sets ~0 on compares anyway, why not use that in your driver?

More information about the mesa-dev mailing list