summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConnor Abbott <[email protected]>2019-09-04 13:54:13 +0200
committerConnor Abbott <[email protected]>2019-09-05 12:37:28 +0200
commit7d2d7b5d5f3b2eb5fd5d49b1f26989f0c358c3c8 (patch)
treea5ee9a22e358b5fa808077dc41e4a9d90af337a3
parent71a67942003a96d90289f7f53f546af821e64a51 (diff)
st/nir: Call nir_remove_unused_variables() in the opt loop
This prevents regressions when disabling indirect lowering. Sometimes the only use of an input array was copying it to the array created by nir_lower_io_to_temporaries, and without lowering indirects we wouldn't have eliminated the temporary array until after linking, which was too late to remove unused code in the producer. No shader-db changes with radeonsi NIR. Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 2b4c45f5f55..081f85edf53 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -232,6 +232,16 @@ st_nir_opts(nir_shader *nir, bool scalar)
progress = false;
NIR_PASS_V(nir, nir_lower_vars_to_ssa);
+
+ /* Linking deals with unused inputs/outputs, but here we can remove
+ * things local to the shader in the hopes that we can cleanup other
+ * things. This pass will also remove variables with only stores, so we
+ * might be able to make progress after it.
+ */
+ NIR_PASS(progress, nir, nir_remove_dead_variables,
+ (nir_variable_mode)(nir_var_function_temp |
+ nir_var_shader_temp |
+ nir_var_mem_shared));
NIR_PASS(progress, nir, nir_opt_copy_prop_vars);
NIR_PASS(progress, nir, nir_opt_dead_write_vars);