On July 31, 2018 14:54:54 Kenneth Graunke <[email protected]> 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.
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
