[Mesa-dev] [PATCH 5/6] radv: reorder and add passes to match i965

Connor Abbott connora at valvesoftware.com
Thu Jul 6 19:50:56 UTC 2017


From: Connor Abbott <cwabbott0 at 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



More information about the mesa-dev mailing list