diff options
Diffstat (limited to 'src/compiler/glsl/builtin_functions.cpp')
-rw-r--r-- | src/compiler/glsl/builtin_functions.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp index e03a50c8438..e30509a4acd 100644 --- a/src/compiler/glsl/builtin_functions.cpp +++ b/src/compiler/glsl/builtin_functions.cpp @@ -62,6 +62,7 @@ #include "program/prog_instruction.h" #include <math.h> #include "builtin_functions.h" +#include "util/hash_table.h" #define M_PIf ((float) M_PI) #define M_PI_2f ((float) M_PI_2) @@ -6002,21 +6003,32 @@ ir_function_signature * _mesa_glsl_find_builtin_function(_mesa_glsl_parse_state *state, const char *name, exec_list *actual_parameters) { - ir_function_signature * s; + ir_function_signature *s; mtx_lock(&builtins_lock); s = builtins.find(state, name, actual_parameters); mtx_unlock(&builtins_lock); - return s; + + if (s == NULL) + return NULL; + + struct hash_table *ht = + _mesa_hash_table_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal); + void *mem_ctx = state; + ir_function *f = s->function()->clone(mem_ctx, ht); + _mesa_hash_table_destroy(ht, NULL); + + return f->matching_signature(state, actual_parameters, true); } -ir_function * -_mesa_glsl_find_builtin_function_by_name(const char *name) +bool +_mesa_glsl_has_builtin_function(const char *name) { ir_function *f; mtx_lock(&builtins_lock); f = builtins.shader->symbols->get_function(name); mtx_unlock(&builtins_lock); - return f; + + return f != NULL; } gl_shader * |