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

Marek Olšák maraeo at gmail.com
Thu May 30 19:06:18 UTC 2019


It doesn't matter if the opcode supplies a lod. The only thing that matters
is if the opcode computes derivatives. It seems that the only opcodes
computing derivatives are tex, tex_bias, and query_lod. This only applies
to fragment shaders. Other stages never compute derivatives. There is an NV
extension that enables derivatives in compute shaders.

Marek

On Thu, May 30, 2019, 2:47 PM Rhys Perry <pendingchaos02 at gmail.com> wrote:

> Seems txf can(should?) have a lod supplied. txf_ms and tg4 always use
> the 0th level.
>
> I'll add txf, txf_ms and tg4 to the list of nir_texop which don't ever
> have implicit derivatives.
>
> On Thu, 30 May 2019 at 19:43, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> >
> > txf supplies an lod, but tg4's is implicitly always 0.
> >
> > On Thu, May 30, 2019 at 2:26 PM Bas Nieuwenhuizen
> > <bas at basnieuwenhuizen.nl> wrote:
> > >
> > > On Thu, May 30, 2019 at 6:50 PM Rhys Perry <pendingchaos02 at gmail.com>
> wrote:
> > > >
> > > > Otherwise LLVM can sink them and their texture coordinate
> calculations
> > > > into divergent branches.
> > > >
> > > > Cc: <mesa-stable at lists.freedesktop.org>
> > > > Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
> > > > ---
> > > >  src/amd/common/ac_nir_to_llvm.c | 29 +++++++++++++++++++++++++++++
> > > >  1 file changed, 29 insertions(+)
> > > >
> > > > diff --git a/src/amd/common/ac_nir_to_llvm.c
> b/src/amd/common/ac_nir_to_llvm.c
> > > > index 265e3b636c4..d2dc617de36 100644
> > > > --- a/src/amd/common/ac_nir_to_llvm.c
> > > > +++ b/src/amd/common/ac_nir_to_llvm.c
> > > > @@ -1316,6 +1316,30 @@ static nir_deref_instr
> *get_tex_texture_deref(const nir_tex_instr *instr)
> > > >         return texture_deref_instr;
> > > >  }
> > > >
> > > > +static bool has_implicit_derivatives(const nir_tex_instr *instr)
> > > > +{
> > > > +       switch (instr->op) {
> > > > +       case nir_texop_txs:
> > > > +       case nir_texop_query_levels:
> > > > +       case nir_texop_texture_samples:
> > > > +       case nir_texop_samples_identical:
> > > > +               return false;
> > > > +       default:
> > > > +               break;
> > > > +       }
> > > > +       for (unsigned i = 0; i < instr->num_srcs; i++) {
> > > > +               switch (instr->src[i].src_type) {
> > > > +               case nir_tex_src_lod:
> > > > +               case nir_tex_src_ddx:
> > > > +               case nir_tex_src_ddy:
> > > > +                       return false;
> > > > +               default:
> > > > +                       break;
> > > > +               }
> > > > +       }
> > > > +       return true;
> > > > +}
> > >
> > > txf, tg4 and friends do not provide any of lod/ddx/ddy do they?
> > >
> > > > +
> > > >  static LLVMValueRef build_tex_intrinsic(struct ac_nir_context *ctx,
> > > >                                         const nir_tex_instr *instr,
> > > >                                         struct ac_image_args *args)
> > > > @@ -1394,6 +1418,11 @@ 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. */
> > > > +       if (has_implicit_derivatives(instr))
> > > > +               args->attributes |= AC_FUNC_ATTR_CONVERGENT;
> > > > +
> > > >         return ac_build_image_opcode(&ctx->ac, args);
> > > >  }
> > > >
> > > > --
> > > > 2.21.0
> > > >
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190530/d465461c/attachment.html>


More information about the mesa-dev mailing list