[Mesa-dev] [PATCH v2 3/4] intel/nir: Split IO arrays into elements

Jason Ekstrand jason at jlekstrand.net
Wed Aug 1 03:55:05 UTC 2018


On Tue, Jul 31, 2018 at 3:00 PM Jason Ekstrand <jason at jlekstrand.net> wrote:

> On July 31, 2018 14:54:54 Kenneth Graunke <kenneth at whitecape.org> wrote:
>
> > On Tuesday, July 31, 2018 12:22:02 PM PDT Jason Ekstrand wrote:
> >> The NIR nir_lower_io_arrays_to_elements pass attempts to split I/O
> >> variables which are arrays or matrices into a sequence of separate
> >> variables.  This can help link-time optimization by allowing us to
> >> remove varyings at a more granular level.
> >>
> >> Shader-db results on Kaby Lake:
> >>
> >> total instructions in shared programs: 15177645 -> 15168494 (-0.06%)
> >> instructions in affected programs: 79857 -> 70706 (-11.46%)
> >> helped: 392
> >> HURT: 0
> >> ---
> >> src/intel/compiler/brw_nir.c | 4 ++++
> >> 1 file changed, 4 insertions(+)
> >>
> >> diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c
> >> index 17ccfa48af6..29ad68fdb2a 100644
> >> --- a/src/intel/compiler/brw_nir.c
> >> +++ b/src/intel/compiler/brw_nir.c
> >> @@ -709,6 +709,10 @@ void
> >> brw_nir_link_shaders(const struct brw_compiler *compiler,
> >>              nir_shader **producer, nir_shader **consumer)
> >> {
> >> +   nir_lower_io_arrays_to_elements(*producer, *consumer);
> >> +   nir_validate_shader(*producer);
> >> +   nir_validate_shader(*consumer);
> >> +
> >> NIR_PASS_V(*producer, nir_remove_dead_variables, nir_var_shader_out);
> >> NIR_PASS_V(*consumer, nir_remove_dead_variables, nir_var_shader_in);
> >
> > This actually passes the test suite?  That's strange.  When I was
> > playing with this earlier, it was demoting gl_ClipDistance[1] from
> > a float[1] compact array to a single float variable...but leaving it
> > marked compact.  var->data.compact = true makes no sense for non-arrays.
> >
> > I think our clip/cull distance handling assumes that it's an array,
> > though.  So...not sure whether the pass should unset compact, or skip
> > over compact arrays...
>
> Yes, it passes just fine. I'm not sure exactly how it interacts with clip
> distance lowering though.
>

Back at my computer finally.  I did a bit of digging and the
lower_io_arrays_to_elements pass ignores everything that isn't
VARYING_SLOT_VARX.  Clip distances are ignored since they're
VARYING_SLOT_CLIP_DIST0/1.  Hope that clears it up. :-)

--Jason

--Jason
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180731/6f7816d7/attachment.html>


More information about the mesa-dev mailing list