From: Connor Abbott <cwabbo...@gmail.com> This makes the radv shader pipeline much closer to brw_preprocess_nir(). The main changes are:
- Now we call nir_split_var_copies(), which is necessary for nir_lower_var_copies() to work correctly. The SPIR-V frontend never generates variable copies, so we didn't notice this, but this will prevent regressions after the next commit that turns on nir_lower_io_to_temporaries, which does use copies. We add a call to radv_optimize() after nir_split_var_copies() but before lowering var copies and other stuff so that NIR optimization passes have a chance to work on the un-lowered form. This matches i965. - We now call nir_lower_load_const_to_scalar(), which should provide more optimization opportunities for NIR. - We now get rid of local variables after optimization is done, in case an optimization removed one. --- src/amd/vulkan/radv_pipeline.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 49610a1..237e146 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -284,12 +284,20 @@ radv_shader_compile_to_nir(struct radv_device *device, nir_lower_tex(nir, &tex_options); - nir_lower_vars_to_ssa(nir); - nir_lower_var_copies(nir); nir_lower_global_vars_to_local(nir); - nir_remove_dead_variables(nir, nir_var_local); + + nir_split_var_copies(nir); + radv_optimize_nir(nir); + nir_lower_load_const_to_scalar(nir); + + nir_lower_var_copies(nir); + + radv_optimize_nir(nir); + + nir_remove_dead_variables(nir, nir_var_local); + if (dump) nir_print_shader(nir, stderr); -- 2.9.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev