[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 01:52:47 UTC 2016


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;
+      }
    }
 
    return NULL;
-- 
2.7.4



More information about the mesa-dev mailing list