Re: [Mesa-dev] [PATCH 4/7] glsl: pass symbols to find_matching_signature() rather than shader
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, >parameters, , 1, > - ir->use_builtin); > + find_matching_signature(name, >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, >actual_parameters, > shader_list, > - num_shaders, ir->use_builtin); > + for (unsigned i = 0; i < num_shaders; i++) { > + sig = find_matching_signature(name, >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
Re: [Mesa-dev] [PATCH 4/7] glsl: pass symbols to find_matching_signature() rather than shader
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, >parameters, , > 1, > - ir->use_builtin); > + find_matching_signature(name, >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, >actual_parameters, > shader_list, > - num_shaders, ir->use_builtin); > + for (unsigned i = 0; i < num_shaders; i++) { > + sig = find_matching_signature(name, >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; ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 4/7] glsl: pass symbols to find_matching_signature() rather than shader
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, >parameters, , 1, -ir->use_builtin); + find_matching_signature(name, >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, >actual_parameters, shader_list, - num_shaders, ir->use_builtin); + for (unsigned i = 0; i < num_shaders; i++) { + sig = find_matching_signature(name, >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; + } } return NULL; -- 2.7.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev