[Mesa-dev] [PATCH v2 2/3] nir: Add a discard optimization pass
Jason Ekstrand
jason at jlekstrand.net
Wed Jul 4 17:07:39 UTC 2018
On Wed, Jul 4, 2018 at 10:00 AM, Matt Turner <mattst88 at gmail.com> wrote:
> On Wed, Jul 4, 2018 at 9:59 AM Jason Ekstrand <jason at jlekstrand.net>
> wrote:
> >
> > Many fragment shaders do a discard using relatively little information
> > but still put the discard fairly far down in the shader for no good
> > reason. If the discard is moved higher up, we can possibly avoid doing
> > some or almost all of the work in the shader. When this lets us skip
> > texturing operations, it's an especially high win.
> >
> > One of the biggest offenders here is DXVK. The D3D APIs have different
> > rules for discards than OpenGL and Vulkan. One effective way (which is
> > what DXVK uses) to implement DX behavior on top of GL or Vulkan is to
> > wait until the very end of the shader to discard. This ends up in the
> > pessimal case where we always do all of the work before discarding.
> > This pass helps some DXVK shaders significantly.
> >
> > v2 (Jason Ekstrand):
> > - Fix a couple of typos (Grazvydas, Ian)
> > - Use the new nir_instr_move helper
> > - Find all movable discards before moving anything so we don't
> > accidentally re-order anything and break dependencies
> > ---
> > src/compiler/Makefile.sources | 1 +
> > src/compiler/nir/meson.build | 1 +
> > src/compiler/nir/nir.h | 10 +
> > src/compiler/nir/nir_opt_discard.c | 396 +++++++++++++++++++++++++++++
> > 4 files changed, 408 insertions(+)
> > create mode 100644 src/compiler/nir/nir_opt_discard.c
> >
> > diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.
> sources
> > index 9e3fbdc2612..8600ce81281 100644
> > --- a/src/compiler/Makefile.sources
> > +++ b/src/compiler/Makefile.sources
> > @@ -271,6 +271,7 @@ NIR_FILES = \
> > nir/nir_opt_cse.c \
> > nir/nir_opt_dce.c \
> > nir/nir_opt_dead_cf.c \
> > + nir/nir_opt_discard.c \
> > nir/nir_opt_gcm.c \
> > nir/nir_opt_global_to_local.c \
> > nir/nir_opt_if.c \
> > diff --git a/src/compiler/nir/meson.build b/src/compiler/nir/meson.build
> > index 28aa8de7014..e339258bb94 100644
> > --- a/src/compiler/nir/meson.build
> > +++ b/src/compiler/nir/meson.build
> > @@ -156,6 +156,7 @@ files_libnir = files(
> > 'nir_opt_cse.c',
> > 'nir_opt_dce.c',
> > 'nir_opt_dead_cf.c',
> > + 'nir_opt_discard.c',
> > 'nir_opt_gcm.c',
> > 'nir_opt_global_to_local.c',
> > 'nir_opt_if.c',
> > diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
> > index c40a88c8ccc..dac019c17e8 100644
> > --- a/src/compiler/nir/nir.h
> > +++ b/src/compiler/nir/nir.h
> > @@ -2022,6 +2022,13 @@ typedef struct nir_shader_compiler_options {
> > */
> > bool vs_inputs_dual_locations;
> >
> > + /**
> > + * Whether or not derivatives are still a safe operation after a
> discard
> > + * has occurred. Optimization passes may be able to be a bit more
> > + * agressive if this is true.
>
> s/agressive/aggressive/
>
fixed locally.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180704/ef97fed6/attachment-0001.html>
More information about the mesa-dev
mailing list