nir: add a nir_remove_non_entrypoints helper
This code just got duplicated a lot. There is still more, but the remaining instances do a bit more than just removing other functions. Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16348>
This commit is contained in:
@@ -3516,3 +3516,12 @@ void nir_remove_sysval_output(nir_intrinsic_instr *intr)
|
||||
nir_instr_remove(&intr->instr);
|
||||
}
|
||||
}
|
||||
|
||||
void nir_remove_non_entrypoints(nir_shader *nir)
|
||||
{
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (!func->is_entrypoint)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
}
|
||||
|
@@ -3669,6 +3669,8 @@ nir_shader_get_entrypoint(const nir_shader *shader)
|
||||
return func->impl;
|
||||
}
|
||||
|
||||
void nir_remove_non_entrypoints(nir_shader *shader);
|
||||
|
||||
nir_shader *nir_shader_create(void *mem_ctx,
|
||||
gl_shader_stage stage,
|
||||
const nir_shader_compiler_options *options,
|
||||
|
@@ -475,11 +475,7 @@ binary clover::nir::spirv_to_nir(const binary &mod, const device &dev,
|
||||
NIR_PASS_V(nir, nir_opt_deref);
|
||||
|
||||
// Pick off the single entrypoint that we want.
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (!func->is_entrypoint)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
nir_remove_non_entrypoints(nir);
|
||||
|
||||
nir_validate_shader(nir, "clover after function inlining");
|
||||
|
||||
|
@@ -894,11 +894,7 @@ lvp_shader_compile_to_ir(struct lvp_pipeline *pipeline,
|
||||
NIR_PASS_V(nir, nir_opt_deref);
|
||||
|
||||
/* Pick off the single entrypoint that we want */
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (!func->is_entrypoint)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
nir_remove_non_entrypoints(nir);
|
||||
|
||||
struct nir_lower_subgroups_options subgroup_opts = {0};
|
||||
subgroup_opts.lower_quad = true;
|
||||
|
@@ -334,11 +334,7 @@ brw_kernel_from_spirv(struct brw_compiler *compiler,
|
||||
NIR_PASS_V(nir, nir_opt_deref);
|
||||
|
||||
/* Pick off the single entrypoint that we want */
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (!func->is_entrypoint)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
nir_remove_non_entrypoints(nir);
|
||||
|
||||
/* Now that we've deleted all but the main function, we can go ahead and
|
||||
* lower the rest of the constant initializers. We do this here so that
|
||||
|
@@ -297,11 +297,7 @@ _mesa_spirv_to_nir(struct gl_context *ctx,
|
||||
NIR_PASS_V(nir, nir_opt_deref);
|
||||
|
||||
/* Pick off the single entrypoint that we want */
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (!func->is_entrypoint)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
nir_remove_non_entrypoints(nir);
|
||||
|
||||
/* Now that we've deleted all but the main function, we can go ahead and
|
||||
* lower the rest of the constant initializers. We do this here so that
|
||||
|
@@ -845,11 +845,7 @@ clc_spirv_to_dxil(struct clc_libclc *lib,
|
||||
NIR_PASS_V(nir, nir_inline_functions);
|
||||
|
||||
// Pick off the single entrypoint that we want.
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (!func->is_entrypoint)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
nir_remove_non_entrypoints(nir);
|
||||
|
||||
{
|
||||
bool progress;
|
||||
|
@@ -110,11 +110,7 @@ vk_spirv_to_nir(struct vk_device *device,
|
||||
NIR_PASS_V(nir, nir_opt_deref);
|
||||
|
||||
/* Pick off the single entrypoint that we want */
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (!func->is_entrypoint)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
nir_remove_non_entrypoints(nir);
|
||||
|
||||
/* Now that we've deleted all but the main function, we can go ahead and
|
||||
* lower the rest of the constant initializers. We do this here so that
|
||||
|
Reference in New Issue
Block a user