On Tue, 2016-06-28 at 11:52 +1000, Timothy Arceri wrote: > This will allow us to later split gl_shader into two structs. > --- > src/compiler/glsl/link_functions.cpp | 47 > +++++++++++++++++------------------- > 1 file changed, 22 insertions(+), 25 deletions(-) > > diff --git a/src/compiler/glsl/link_functions.cpp > b/src/compiler/glsl/link_functions.cpp > index 4e10287..c9dacc1 100644 > --- a/src/compiler/glsl/link_functions.cpp > +++ b/src/compiler/glsl/link_functions.cpp > @@ -31,8 +31,7 @@ > > static ir_function_signature * > find_matching_signature(const char *name, const exec_list *actual_parameters, > - gl_shader **shader_list, unsigned num_shaders, > - bool use_builtin); > + glsl_symbol_table *symbols, bool use_builtin); > > namespace { > > @@ -78,8 +77,8 @@ public: > * final linked shader. If it does, use it as the target of the call. > */ > ir_function_signature *sig = > - find_matching_signature(name, &callee->parameters, &linked, 1, > - ir->use_builtin); > + find_matching_signature(name, &callee->parameters, linked->symbols, > + ir->use_builtin); > if (sig != NULL) { > ir->callee = sig; > return visit_continue; > @@ -88,8 +87,14 @@ public: > /* Try to find the signature in one of the other shaders that is being > * linked. If it's not found there, return an error. > */ > - sig = find_matching_signature(name, &ir->actual_parameters, > shader_list, > - num_shaders, ir->use_builtin); > + for (unsigned i = 0; i < num_shaders; i++) { > + sig = find_matching_signature(name, &ir->actual_parameters, > + shader_list[i]->symbols, > + ir->use_builtin); > + if (sig) > + break; > + } > + > if (sig == NULL) { > /* FINISHME: Log the full signature of unresolved function. > */ > @@ -307,30 +312,22 @@ private: > */ > ir_function_signature * > find_matching_signature(const char *name, const exec_list *actual_parameters, > - gl_shader **shader_list, unsigned num_shaders, > - bool use_builtin) > + glsl_symbol_table *symbols, bool use_builtin) > { > - for (unsigned i = 0; i < num_shaders; i++) { > - ir_function *const f = shader_list[i]->symbols->get_function(name); > - > - if (f == NULL) > - continue; > + ir_function *const f = symbols->get_function(name); > > + if (f) { > ir_function_signature *sig = > f->matching_signature(NULL, actual_parameters, use_builtin); > > - if ((sig == NULL) || > - (!sig->is_defined && !sig->is_intrinsic)) > - continue; > - > - /* If this function expects to bind to a built-in function and the > - * signature that we found isn't a built-in, keep looking. Also keep > - * looking if we expect a non-built-in but found a built-in. > - */ > - if (use_builtin != sig->is_builtin()) > - continue; > - > - return sig; > + if (sig && (sig->is_defined || sig->is_intrinsic)) { > + /* If this function expects to bind to a built-in function and the > + * signature that we found isn't a built-in, keep looking. Also > keep > + * looking if we expect a non-built-in but found a built-in. > + */ > + if (use_builtin != sig->is_builtin()) > + return sig;
The code you changed would not return sig if this condition is true, so I guess you meant: if (use_builtin == sig->is_builtin()) return sig; Iago > + } > } > > return NULL; _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev