[Mesa-dev] [PATCH v2 2/2] glsl_to_tgsi: use UARL instead of I2F and ARL

Bryan Cain bryancain3 at gmail.com
Wed Sep 14 11:44:28 PDT 2011


I don't see any reason why this patch would make a difference, but since
it apparently does, I'll take a look at it and fix it.  What program is
that?

Bryan

On 09/14/2011 07:01 AM, Marek Olšák wrote:
> Bryan,
>
> This commit causes hardlocks on r600g (integers disabled).
>
> Maybe you can see better than me what's wrong.
>
> This is a side-by-side diff of the failing TGSI shader. The right-hand
> one is from Mesa master. The left-hand one is with the commit
> reverted.
> http://pastebin.com/raw.php?i=QXB3SZAE
>
> Thanks,
> Marek
>
> On Sat, Sep 10, 2011 at 7:36 PM, Bryan Cain <bryancain3 at gmail.com> wrote:
>> Since TGSI now has a UARL opcode that takes an integer as the source, it is
>> no longer necessary to hack around the lack of an integer ARL opcode using I2F.
>> UARL is only emitted when native integers are enabled; ARL is still used
>> otherwise.
>>
>> Reviewed-by: Brian Paul <brianp at vmware.com>
>> ---
>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   18 +++++++-----------
>>  1 files changed, 7 insertions(+), 11 deletions(-)
>>
>> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> index e2857ed..05d4d33 100644
>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> @@ -512,7 +512,7 @@ glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
>>
>>    inst->function = NULL;
>>
>> -   if (op == TGSI_OPCODE_ARL)
>> +   if (op == TGSI_OPCODE_ARL || op == TGSI_OPCODE_UARL)
>>       this->num_address_regs = 1;
>>
>>    /* Update indirect addressing status used by TGSI */
>> @@ -724,16 +724,12 @@ void
>>  glsl_to_tgsi_visitor::emit_arl(ir_instruction *ir,
>>                                st_dst_reg dst, st_src_reg src0)
>>  {
>> -   st_src_reg tmp = get_temp(glsl_type::float_type);
>> +   int op = TGSI_OPCODE_ARL;
>>
>> -   if (src0.type == GLSL_TYPE_INT)
>> -      emit(NULL, TGSI_OPCODE_I2F, st_dst_reg(tmp), src0);
>> -   else if (src0.type == GLSL_TYPE_UINT)
>> -      emit(NULL, TGSI_OPCODE_U2F, st_dst_reg(tmp), src0);
>> -   else
>> -      tmp = src0;
>> -
>> -   emit(NULL, TGSI_OPCODE_ARL, dst, tmp);
>> +   if (src0.type == GLSL_TYPE_INT || src0.type == GLSL_TYPE_UINT)
>> +      op = TGSI_OPCODE_UARL;
>> +
>> +   emit(NULL, op, dst, src0);
>>  }
>>
>>  /**
>> --
>> 1.7.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>


More information about the mesa-dev mailing list