nir/split_per_member_structs: Inline split_variables_in_list
This lets us do one list walk instead of three. Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5966>
This commit is contained in:

committed by
Marge Bot

parent
d70fff99c5
commit
789ec95dcd
@@ -103,24 +103,6 @@ split_variable(struct nir_variable *var, nir_shader *shader,
|
|||||||
_mesa_hash_table_insert(var_to_member_map, var, members);
|
_mesa_hash_table_insert(var_to_member_map, var, members);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
|
||||||
split_variables_in_list(nir_shader *shader, nir_variable_mode mode,
|
|
||||||
struct hash_table *var_to_member_map, void *dead_ctx)
|
|
||||||
{
|
|
||||||
bool progress = false;
|
|
||||||
|
|
||||||
nir_foreach_variable_with_modes_safe(var, shader, mode) {
|
|
||||||
if (var->num_members == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
split_variable(var, shader, var_to_member_map, dead_ctx);
|
|
||||||
exec_node_remove(&var->node);
|
|
||||||
progress = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return progress;
|
|
||||||
}
|
|
||||||
|
|
||||||
static nir_deref_instr *
|
static nir_deref_instr *
|
||||||
build_member_deref(nir_builder *b, nir_deref_instr *deref, nir_variable *member)
|
build_member_deref(nir_builder *b, nir_deref_instr *deref, nir_variable *member)
|
||||||
{
|
{
|
||||||
@@ -177,12 +159,17 @@ nir_split_per_member_structs(nir_shader *shader)
|
|||||||
struct hash_table *var_to_member_map =
|
struct hash_table *var_to_member_map =
|
||||||
_mesa_pointer_hash_table_create(dead_ctx);
|
_mesa_pointer_hash_table_create(dead_ctx);
|
||||||
|
|
||||||
progress |= split_variables_in_list(shader, nir_var_shader_in,
|
nir_foreach_variable_with_modes_safe(var, shader, nir_var_shader_in |
|
||||||
var_to_member_map, dead_ctx);
|
nir_var_shader_out |
|
||||||
progress |= split_variables_in_list(shader, nir_var_shader_out,
|
nir_var_system_value) {
|
||||||
var_to_member_map, dead_ctx);
|
if (var->num_members == 0)
|
||||||
progress |= split_variables_in_list(shader, nir_var_system_value,
|
continue;
|
||||||
var_to_member_map, dead_ctx);
|
|
||||||
|
split_variable(var, shader, var_to_member_map, dead_ctx);
|
||||||
|
exec_node_remove(&var->node);
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!progress) {
|
if (!progress) {
|
||||||
ralloc_free(dead_ctx);
|
ralloc_free(dead_ctx);
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user