Could any of the Gallium folk R-b this? It's been this way since Bryan
Cain introduced it... I don't think that there was a USNE/etc variant
at the time.

Also, what do people think of making b2i do INEG instead of AND? That
should allow implementations to fold the neg into instructions that
support it...

On Thu, May 7, 2015 at 12:44 AM, Jason Ekstrand <[email protected]> wrote:
> I know nothing about TGSI but this looks perfectly reasonable to me.
>
> Reviewed-by: Jason Ekstrand <[email protected]>
>
> On Wed, May 6, 2015 at 8:33 PM, Ilia Mirkin <[email protected]> wrote:
>> 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 <[email protected]>
>> ---
>>
>> Found by observation. Noticed a weird pattern in the generated code,
>> which led up to this.
>>
>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
>> b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> index 93671ba..8a591b9 100644
>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> @@ -1941,7 +1941,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;
>> --
>> 2.3.6
>>
>> _______________________________________________
>> mesa-dev mailing list
>> [email protected]
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to