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

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Thu May 30 23:07:57 UTC 2019


On Fri, May 31, 2019, 12:49 AM Marek Olšák <maraeo at gmail.com> wrote:

>
>
> On Thu, May 30, 2019, 6:44 PM Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> wrote:
>
>>
>>
>> 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?
>>
>
> I think the normal tex opcode can be used in vertex shaders as well,
> probably only in OpenGL.
>

What is the behavior there? Implicit lod of 0?

>
> Marek
>
>
>>> 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/abe923ca/attachment.html>


More information about the mesa-dev mailing list