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

Reply via email to