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

Reply via email to