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...
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
