radeonsi/nir: enable nir_opt_move_discards_to_top pass
Since it affects discards and demotes, this commit also moves the usage of nir_lower_discard_or_demote ealier. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10522>
This commit is contained in:
parent
b447f5049b
commit
7640479028
|
@ -595,6 +595,9 @@ void si_nir_opts(struct si_screen *sscreen, struct nir_shader *nir, bool first)
|
||||||
NIR_PASS(progress, nir, nir_opt_loop_unroll, 0);
|
NIR_PASS(progress, nir, nir_opt_loop_unroll, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nir->info.stage == MESA_SHADER_FRAGMENT)
|
||||||
|
NIR_PASS_V(nir, nir_opt_move_discards_to_top);
|
||||||
|
|
||||||
if (sscreen->options.fp16)
|
if (sscreen->options.fp16)
|
||||||
NIR_PASS(progress, nir, nir_opt_vectorize, NULL, NULL);
|
NIR_PASS(progress, nir, nir_opt_vectorize, NULL, NULL);
|
||||||
} while (progress);
|
} while (progress);
|
||||||
|
@ -822,6 +825,9 @@ static void si_lower_nir(struct si_screen *sscreen, struct nir_shader *nir)
|
||||||
};
|
};
|
||||||
NIR_PASS_V(nir, nir_lower_subgroups, &subgroups_options);
|
NIR_PASS_V(nir, nir_lower_subgroups, &subgroups_options);
|
||||||
|
|
||||||
|
NIR_PASS_V(nir, nir_lower_discard_or_demote,
|
||||||
|
sscreen->debug_flags & DBG(FS_CORRECT_DERIVS_AFTER_KILL));
|
||||||
|
|
||||||
/* Lower load constants to scalar and then clean up the mess */
|
/* Lower load constants to scalar and then clean up the mess */
|
||||||
NIR_PASS_V(nir, nir_lower_load_const_to_scalar);
|
NIR_PASS_V(nir, nir_lower_load_const_to_scalar);
|
||||||
NIR_PASS_V(nir, nir_lower_var_copies);
|
NIR_PASS_V(nir, nir_lower_var_copies);
|
||||||
|
@ -883,9 +889,6 @@ static void si_lower_nir(struct si_screen *sscreen, struct nir_shader *nir)
|
||||||
si_late_optimize_16bit_samplers(sscreen, nir);
|
si_late_optimize_16bit_samplers(sscreen, nir);
|
||||||
|
|
||||||
NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL);
|
NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL);
|
||||||
|
|
||||||
NIR_PASS_V(nir, nir_lower_discard_or_demote,
|
|
||||||
sscreen->debug_flags & DBG(FS_CORRECT_DERIVS_AFTER_KILL));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void si_finalize_nir(struct pipe_screen *screen, void *nirptr, bool optimize)
|
void si_finalize_nir(struct pipe_screen *screen, void *nirptr, bool optimize)
|
||||||
|
|
Loading…
Reference in New Issue