Re: [Mesa-dev] [PATCH 4/7] glsl: pass symbols to find_matching_signature() rather than shader

2016-06-28 Thread Iago Toral
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

2016-06-27 Thread Timothy Arceri
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

2016-06-27 Thread Timothy Arceri
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