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...

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to