[Mesa-dev] [PATCH] ac/nir: mark some texture intrinsics as convergent

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Thu May 30 22:44:23 UTC 2019


On Thu, May 30, 2019, 11:45 PM Marek Olšák <maraeo at gmail.com> wrote:

>
>
> On Thu, May 30, 2019, 3:54 PM Rhys Perry <pendingchaos02 at gmail.com> wrote:
>
>> Otherwise LLVM can sink them and their texture coordinate calculations
>> into divergent branches.
>>
>> v2: simplify the conditions on which the intrinsic is marked as convergent
>>
>> Cc: <mesa-stable at lists.freedesktop.org>
>> Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
>> Reviewed-By: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
>> ---
>>  src/amd/common/ac_nir_to_llvm.c | 12 ++++++++++++
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/src/amd/common/ac_nir_to_llvm.c
>> b/src/amd/common/ac_nir_to_llvm.c
>> index 265e3b636c4..b1a191ac24c 100644
>> --- a/src/amd/common/ac_nir_to_llvm.c
>> +++ b/src/amd/common/ac_nir_to_llvm.c
>> @@ -1394,6 +1394,18 @@ static LLVMValueRef build_tex_intrinsic(struct
>> ac_nir_context *ctx,
>>         }
>>
>>         args->attributes = AC_FUNC_ATTR_READNONE;
>> +       /* Prevent texture instructions with implicit derivatives from
>> being
>> +        * sinked into branches. */
>> +       switch (instr->op) {
>> +       case nir_texop_tex:
>> +       case nir_texop_txb:
>> +       case nir_texop_lod:
>> +               args->attributes |= AC_FUNC_ATTR_CONVERGENT;
>> +               break;
>> +       default:
>> +               break;
>> +       }
>>
>
> I think this should only apply to the fragment shader.
>

Well these opcodes will only be used in fragment shaders anyway, right?

>
> Marek
>
> +
>>         return ac_build_image_opcode(&ctx->ac, args);
>>  }
>>
>> --
>> 2.21.0
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190531/123e4c04/attachment.html>


More information about the mesa-dev mailing list