mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 07:10:09 +01:00
nir: Add a helper for finding a function by name
Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18675>
This commit is contained in:
parent
0a06abbb91
commit
2aa9eb497d
2 changed files with 15 additions and 13 deletions
|
|
@ -3761,6 +3761,17 @@ nir_shader_get_entrypoint(const nir_shader *shader)
|
||||||
return func->impl;
|
return func->impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline nir_function *
|
||||||
|
nir_shader_get_function_for_name(const nir_shader *shader, const char *name)
|
||||||
|
{
|
||||||
|
nir_foreach_function(func, shader) {
|
||||||
|
if (strcmp(func->name, name) == 0)
|
||||||
|
return func;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void nir_remove_non_entrypoints(nir_shader *shader);
|
void nir_remove_non_entrypoints(nir_shader *shader);
|
||||||
|
|
||||||
nir_shader *nir_shader_create(void *mem_ctx,
|
nir_shader *nir_shader_create(void *mem_ctx,
|
||||||
|
|
|
||||||
|
|
@ -139,24 +139,15 @@ static nir_function *mangle_and_find(struct vtn_builder *b,
|
||||||
struct vtn_type **src_types)
|
struct vtn_type **src_types)
|
||||||
{
|
{
|
||||||
char *mname;
|
char *mname;
|
||||||
nir_function *found = NULL;
|
|
||||||
|
|
||||||
vtn_opencl_mangle(name, const_mask, num_srcs, src_types, &mname);
|
vtn_opencl_mangle(name, const_mask, num_srcs, src_types, &mname);
|
||||||
|
|
||||||
/* try and find in current shader first. */
|
/* try and find in current shader first. */
|
||||||
nir_foreach_function(funcs, b->shader) {
|
nir_function *found = nir_shader_get_function_for_name(b->shader, mname);
|
||||||
if (!strcmp(funcs->name, mname)) {
|
|
||||||
found = funcs;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* if not found here find in clc shader and create a decl mirroring it */
|
/* if not found here find in clc shader and create a decl mirroring it */
|
||||||
if (!found && b->options->clc_shader && b->options->clc_shader != b->shader) {
|
if (!found && b->options->clc_shader && b->options->clc_shader != b->shader) {
|
||||||
nir_foreach_function(funcs, b->options->clc_shader) {
|
found = nir_shader_get_function_for_name(b->options->clc_shader, mname);
|
||||||
if (!strcmp(funcs->name, mname)) {
|
|
||||||
found = funcs;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (found) {
|
if (found) {
|
||||||
nir_function *decl = nir_function_create(b->shader, mname);
|
nir_function *decl = nir_function_create(b->shader, mname);
|
||||||
decl->num_params = found->num_params;
|
decl->num_params = found->num_params;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue