From: Erico Nunes Date: Sun, 4 Aug 2019 21:43:44 +0000 (+0200) Subject: lima: re-run nir_opt_algebraic after int lowering X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9e8f8dbcd1ceea94d74d74a6b45cad146a699b1f;hp=3db49491978a72eaea8b4735f0ba805dbc87b7d7;p=mesa.git 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 Reviewed-by: Vasily Khoruzhick --- 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);