lima: re-run nir_opt_algebraic after int lowering

nir_lower_int_to_float is currently only meant to run once, and some ops
must be lowered after being converted from int ops to be implementable,
so re-run nir_opt_algebraic after lowering ints to floats.

Signed-off-by: Erico Nunes <nunes.erico@gmail.com>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
This commit is contained in:
Erico Nunes 2019-08-04 23:43:44 +02:00
parent 3db4949197
commit 9e8f8dbcd1
1 changed files with 15 additions and 0 deletions

View File

@ -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);