mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 08:20:12 +01:00
nir: Report progress from nir_lower_locals_to_regs().
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
1adde5b87e
commit
cfae0f8a3a
2 changed files with 16 additions and 4 deletions
|
|
@ -1811,7 +1811,7 @@ void nir_lower_var_copies(nir_shader *shader);
|
|||
|
||||
bool nir_lower_global_vars_to_local(nir_shader *shader);
|
||||
|
||||
void nir_lower_locals_to_regs(nir_shader *shader);
|
||||
bool nir_lower_locals_to_regs(nir_shader *shader);
|
||||
|
||||
void nir_lower_outputs_to_temporaries(nir_shader *shader);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ struct locals_to_regs_state {
|
|||
* used to make adding register initialization code deterministic.
|
||||
*/
|
||||
nir_array derefs_array;
|
||||
|
||||
bool progress;
|
||||
};
|
||||
|
||||
/* The following two functions implement a hash and equality check for
|
||||
|
|
@ -228,6 +230,7 @@ lower_locals_to_regs_block(nir_block *block, void *void_state)
|
|||
nir_instr_insert_before(&intrin->instr, &mov->instr);
|
||||
|
||||
nir_instr_remove(&intrin->instr);
|
||||
state->progress = true;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -249,6 +252,7 @@ lower_locals_to_regs_block(nir_block *block, void *void_state)
|
|||
nir_instr_insert_before(&intrin->instr, &mov->instr);
|
||||
|
||||
nir_instr_remove(&intrin->instr);
|
||||
state->progress = true;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -336,15 +340,17 @@ insert_constant_initializer(nir_deref_var *deref_head, nir_deref *deref_tail,
|
|||
mov->dest.dest.reg.indirect = reg_src.reg.indirect;
|
||||
|
||||
nir_instr_insert_after(&load->instr, &mov->instr);
|
||||
state->progress = true;
|
||||
}
|
||||
|
||||
static void
|
||||
static bool
|
||||
nir_lower_locals_to_regs_impl(nir_function_impl *impl)
|
||||
{
|
||||
struct locals_to_regs_state state;
|
||||
|
||||
state.shader = impl->overload->function->shader;
|
||||
state.impl = impl;
|
||||
state.progress = false;
|
||||
state.regs_table = _mesa_hash_table_create(NULL, hash_deref, derefs_equal);
|
||||
nir_array_init(&state.derefs_array, NULL);
|
||||
|
||||
|
|
@ -372,13 +378,19 @@ nir_lower_locals_to_regs_impl(nir_function_impl *impl)
|
|||
|
||||
nir_array_fini(&state.derefs_array);
|
||||
_mesa_hash_table_destroy(state.regs_table, NULL);
|
||||
|
||||
return state.progress;
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
nir_lower_locals_to_regs(nir_shader *shader)
|
||||
{
|
||||
bool progress = false;
|
||||
|
||||
nir_foreach_overload(shader, overload) {
|
||||
if (overload->impl)
|
||||
nir_lower_locals_to_regs_impl(overload->impl);
|
||||
progress = nir_lower_locals_to_regs_impl(overload->impl) || progress;
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue