[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