diff options
Diffstat (limited to 'src/glsl/link_functions.cpp')
-rw-r--r-- | src/glsl/link_functions.cpp | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/src/glsl/link_functions.cpp b/src/glsl/link_functions.cpp index 35bd22350d5..28e56cb0fa2 100644 --- a/src/glsl/link_functions.cpp +++ b/src/glsl/link_functions.cpp @@ -37,6 +37,10 @@ extern "C" { #include "hash_table.h" #include "linker.h" +static ir_function_signature * +find_matching_signature(const char *name, const exec_list *actual_parameters, + gl_shader **shader_list, unsigned num_shaders); + class call_link_visitor : public ir_hierarchical_visitor { public: call_link_visitor(gl_shader_program *prog, gl_shader **shader_list, @@ -66,8 +70,9 @@ public: const char *const name = callee->function_name(); - ir_function_signature *sig = const_cast<ir_function_signature *> - (this->find_matching_signature(name, &ir->actual_parameters)); + ir_function_signature *sig = + find_matching_signature(name, &ir->actual_parameters, shader_list, + num_shaders); if (sig == NULL) { /* FINISHME: Log the full signature of unresolved function. */ @@ -138,31 +143,32 @@ private: /** Number of shaders available for linking. */ unsigned num_shaders; - /** - * Searches all shaders for a particular function definition - */ - const ir_function_signature * - find_matching_signature(const char *name, exec_list *actual_parameters) - { - for (unsigned i = 0; i < this->num_shaders; i++) { - ir_function *const f = - this->shader_list[i]->symbols->get_function(name); +}; + - if (f == NULL) - continue; +/** + * Searches a list of shaders for a particular function definition + */ +ir_function_signature * +find_matching_signature(const char *name, const exec_list *actual_parameters, + gl_shader **shader_list, unsigned num_shaders) +{ + for (unsigned i = 0; i < num_shaders; i++) { + ir_function *const f = shader_list[i]->symbols->get_function(name); - const ir_function_signature *sig = - f->matching_signature(actual_parameters); + if (f == NULL) + continue; - if ((sig == NULL) || !sig->is_defined) - continue; + ir_function_signature *sig = f->matching_signature(actual_parameters); - return sig; - } + if ((sig == NULL) || !sig->is_defined) + continue; - return NULL; + return sig; } -}; + + return NULL; +} bool |