[Mesa-dev] [PATCH 4/7] glsl: pass symbols to find_matching_signature() rather than shader
Timothy Arceri
timothy.arceri at collabora.com
Tue Jun 28 02:04:33 UTC 2016
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())
This should be:
if (use_builtin == sig->is_builtin())
Looks like I squashed the fix into the next patch rather than this one.
I've fixed this locally.
> + return sig;
> + }
> }
>
> return NULL;
More information about the mesa-dev
mailing list