mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 22:20:14 +01:00
nir/lower_shader_calls: Remat derefs before lowering resumes
Closes: #7923 cc: mesa-stable Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20399>
This commit is contained in:
parent
af1bc7f4ce
commit
200e551cbb
1 changed files with 7 additions and 0 deletions
|
|
@ -1184,6 +1184,13 @@ lower_resume(nir_shader *shader, int call_idx)
|
||||||
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
|
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
|
||||||
nir_instr *resume_instr = find_resume_instr(impl, call_idx);
|
nir_instr *resume_instr = find_resume_instr(impl, call_idx);
|
||||||
|
|
||||||
|
/* Deref chains contain metadata information that is needed by other passes
|
||||||
|
* after this one. If we don't rematerialize the derefs in the blocks where
|
||||||
|
* they're used here, the following lowerings will insert phis which can
|
||||||
|
* prevent other passes from chasing deref chains.
|
||||||
|
*/
|
||||||
|
nir_rematerialize_derefs_in_use_blocks_impl(impl);
|
||||||
|
|
||||||
if (duplicate_loop_bodies(impl, resume_instr)) {
|
if (duplicate_loop_bodies(impl, resume_instr)) {
|
||||||
nir_validate_shader(shader, "after duplicate_loop_bodies in "
|
nir_validate_shader(shader, "after duplicate_loop_bodies in "
|
||||||
"nir_lower_shader_calls");
|
"nir_lower_shader_calls");
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue