[Mesa-dev] [PATCH 1/3] st/mesa: fix GLSL mix(.., .., bvecN)

Marek Olšák maraeo at gmail.com
Wed Sep 25 10:48:18 PDT 2013


It's more of a question of what the GLSL compiler did before the
introduction of ir_triop_csel. I guess it used LRP.

Marek

On Tue, Sep 24, 2013 at 8:12 PM, Ian Romanick <idr at freedesktop.org> wrote:
> On 09/23/2013 05:37 PM, maraeo at gmail.com wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> ---
>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 8 +++++++-
>>  1 file changed, 7 insertions(+), 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 271cf05..0d1506d 100644
>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> @@ -1944,6 +1944,13 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
>>        /* note: we have to reorder the three args here */
>>        emit(ir, TGSI_OPCODE_LRP, result_dst, op[2], op[1], op[0]);
>>        break;
>> +   case ir_triop_csel:
>> +      if (this->ctx->Const.NativeIntegers)
>> +         emit(ir, TGSI_OPCODE_UCMP, result_dst, op[0], op[1], op[2]);
>> +      else
>> +         /* CMP doesn't work here */
>> +         emit(ir, TGSI_OPCODE_LRP, result_dst, op[0], op[1], op[2]);
>> +      break;
>
> That won't do the right thing if one of the sources is NaN.  What did
> TGSI do before Matt's changes?  For conditional assignments?
>
>>     case ir_unop_pack_snorm_2x16:
>>     case ir_unop_pack_unorm_2x16:
>>     case ir_unop_pack_half_2x16:
>> @@ -1970,7 +1977,6 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
>>     case ir_binop_vector_extract:
>>     case ir_triop_vector_insert:
>>     case ir_binop_ldexp:
>> -   case ir_triop_csel:
>>        /* This operation is not supported, or should have already been handled.
>>         */
>>        assert(!"Invalid ir opcode in glsl_to_tgsi_visitor::visit()");
>>
>


More information about the mesa-dev mailing list