summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/lima
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/lima')
-rw-r--r--src/gallium/drivers/lima/lima_program.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/gallium/drivers/lima/lima_program.c b/src/gallium/drivers/lima/lima_program.c
index 13fd31166ae..66962e5ce23 100644
--- a/src/gallium/drivers/lima/lima_program.c
+++ b/src/gallium/drivers/lima/lima_program.c
@@ -128,6 +128,14 @@ lima_program_optimize_vs_nir(struct nir_shader *s)
NIR_PASS_V(s, nir_lower_int_to_float);
NIR_PASS_V(s, nir_lower_bool_to_float);
+
+ /* Some ops must be lowered after being converted from int ops,
+ * so re-run nir_opt_algebraic after int lowering. */
+ do {
+ progress = false;
+ NIR_PASS(progress, s, nir_opt_algebraic);
+ } while (progress);
+
NIR_PASS_V(s, nir_copy_prop);
NIR_PASS_V(s, nir_opt_dce);
NIR_PASS_V(s, nir_lower_locals_to_regs);
@@ -179,6 +187,13 @@ lima_program_optimize_fs_nir(struct nir_shader *s)
NIR_PASS_V(s, nir_lower_int_to_float);
NIR_PASS_V(s, nir_lower_bool_to_float);
+ /* Some ops must be lowered after being converted from int ops,
+ * so re-run nir_opt_algebraic after int lowering. */
+ do {
+ progress = false;
+ NIR_PASS(progress, s, nir_opt_algebraic);
+ } while (progress);
+
/* Lower modifiers */
NIR_PASS_V(s, nir_lower_to_source_mods, nir_lower_all_source_mods);
NIR_PASS_V(s, nir_copy_prop);