mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
nir: Apply passes to all functions
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29577>
This commit is contained in:
parent
bb40284f76
commit
a8ce60eec1
3 changed files with 27 additions and 20 deletions
|
|
@ -1458,8 +1458,10 @@ void
|
|||
nir_divergence_analysis(nir_shader *shader)
|
||||
{
|
||||
shader->info.divergence_analysis_run = true;
|
||||
nir_divergence_analysis_impl(nir_shader_get_entrypoint(shader),
|
||||
shader->options->divergence_analysis_options);
|
||||
nir_foreach_function_impl(impl, shader) {
|
||||
nir_divergence_analysis_impl(impl,
|
||||
shader->options->divergence_analysis_options);
|
||||
}
|
||||
}
|
||||
|
||||
/* Compute divergence between vertices of the same primitive. This uses
|
||||
|
|
@ -1474,7 +1476,6 @@ nir_vertex_divergence_analysis(nir_shader *shader)
|
|||
struct divergence_state state = {
|
||||
.stage = shader->info.stage,
|
||||
.shader = shader,
|
||||
.impl = nir_shader_get_entrypoint(shader),
|
||||
.options = shader->options->divergence_analysis_options,
|
||||
.loop = NULL,
|
||||
.loop_all_invariant = false,
|
||||
|
|
@ -1482,10 +1483,12 @@ nir_vertex_divergence_analysis(nir_shader *shader)
|
|||
.first_visit = true,
|
||||
};
|
||||
|
||||
nir_metadata_require(nir_shader_get_entrypoint(shader),
|
||||
nir_metadata_block_index);
|
||||
visit_cf_list(&nir_shader_get_entrypoint(shader)->body, &state);
|
||||
nir_metadata_preserve(nir_shader_get_entrypoint(shader), nir_metadata_all);
|
||||
nir_foreach_function_impl(impl, shader) {
|
||||
nir_metadata_require(impl, nir_metadata_block_index);
|
||||
state.impl = impl;
|
||||
visit_cf_list(&impl->body, &state);
|
||||
nir_metadata_preserve(impl, nir_metadata_all);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -956,7 +956,8 @@ gather_func_info(nir_function_impl *func, nir_shader *shader,
|
|||
|
||||
if (!call->indirect_callee.ssa)
|
||||
assert(impl || !"nir_shader_gather_info only works with linked shaders");
|
||||
gather_func_info(impl, shader, visited_funcs, dead_ctx);
|
||||
if (impl)
|
||||
gather_func_info(impl, shader, visited_funcs, dead_ctx);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -229,21 +229,24 @@ nir_lower_memory_model(nir_shader *shader)
|
|||
{
|
||||
bool progress = false;
|
||||
|
||||
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
|
||||
struct exec_list *cf_list = &impl->body;
|
||||
nir_foreach_function_impl(impl, shader) {
|
||||
bool impl_progress = false;
|
||||
struct exec_list *cf_list = &impl->body;
|
||||
|
||||
uint32_t modes = 0;
|
||||
foreach_list_typed(nir_cf_node, cf_node, node, cf_list)
|
||||
progress |= lower_make_visible(cf_node, &modes);
|
||||
uint32_t modes = 0;
|
||||
foreach_list_typed(nir_cf_node, cf_node, node, cf_list)
|
||||
impl_progress |= lower_make_visible(cf_node, &modes);
|
||||
|
||||
modes = 0;
|
||||
foreach_list_typed_reverse(nir_cf_node, cf_node, node, cf_list)
|
||||
progress |= lower_make_available(cf_node, &modes);
|
||||
modes = 0;
|
||||
foreach_list_typed_reverse(nir_cf_node, cf_node, node, cf_list)
|
||||
impl_progress |= lower_make_available(cf_node, &modes);
|
||||
|
||||
if (progress)
|
||||
nir_metadata_preserve(impl, nir_metadata_control_flow);
|
||||
else
|
||||
nir_metadata_preserve(impl, nir_metadata_all);
|
||||
if (impl_progress)
|
||||
nir_metadata_preserve(impl, nir_metadata_control_flow);
|
||||
else
|
||||
nir_metadata_preserve(impl, nir_metadata_all);
|
||||
progress |= impl_progress;
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue