summaryrefslogtreecommitdiff
path: root/src/glsl/link_functions.cpp
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-07-15 13:32:27 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-07-19 14:50:43 -0700
commit5adbf0bff168c088d9fd5140226b76e3ba6471b8 (patch)
treee52c73dbaa84db01b9950db884dcf77d3e09aab8 /src/glsl/link_functions.cpp
parentb95897b89d36a25c237a021c299a4eb295856476 (diff)
linker: Pull find_matching_signature out of call_link_visitor
The list of shaders to search needs to be provided as an explicit parameter to support coming changes. At that point there is no reason for it to be in the class. Also, fix some of the 'const' decorators.
Diffstat (limited to 'src/glsl/link_functions.cpp')
-rw-r--r--src/glsl/link_functions.cpp48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/glsl/link_functions.cpp b/src/glsl/link_functions.cpp
index 35bd22350d..28e56cb0fa 100644
--- a/src/glsl/link_functions.cpp
+++ b/src/glsl/link_functions.cpp
@@ -37,6 +37,10 @@ extern "C" {
#include "hash_table.h"
#include "linker.h"
+static ir_function_signature *
+find_matching_signature(const char *name, const exec_list *actual_parameters,
+ gl_shader **shader_list, unsigned num_shaders);
+
class call_link_visitor : public ir_hierarchical_visitor {
public:
call_link_visitor(gl_shader_program *prog, gl_shader **shader_list,
@@ -66,8 +70,9 @@ public:
const char *const name = callee->function_name();
- ir_function_signature *sig = const_cast<ir_function_signature *>
- (this->find_matching_signature(name, &ir->actual_parameters));
+ ir_function_signature *sig =
+ find_matching_signature(name, &ir->actual_parameters, shader_list,
+ num_shaders);
if (sig == NULL) {
/* FINISHME: Log the full signature of unresolved function.
*/
@@ -138,31 +143,32 @@ private:
/** Number of shaders available for linking. */
unsigned num_shaders;
- /**
- * Searches all shaders for a particular function definition
- */
- const ir_function_signature *
- find_matching_signature(const char *name, exec_list *actual_parameters)
- {
- for (unsigned i = 0; i < this->num_shaders; i++) {
- ir_function *const f =
- this->shader_list[i]->symbols->get_function(name);
+};
+
- if (f == NULL)
- continue;
+/**
+ * Searches a list of shaders for a particular function definition
+ */
+ir_function_signature *
+find_matching_signature(const char *name, const exec_list *actual_parameters,
+ gl_shader **shader_list, unsigned num_shaders)
+{
+ for (unsigned i = 0; i < num_shaders; i++) {
+ ir_function *const f = shader_list[i]->symbols->get_function(name);
- const ir_function_signature *sig =
- f->matching_signature(actual_parameters);
+ if (f == NULL)
+ continue;
- if ((sig == NULL) || !sig->is_defined)
- continue;
+ ir_function_signature *sig = f->matching_signature(actual_parameters);
- return sig;
- }
+ if ((sig == NULL) || !sig->is_defined)
+ continue;
- return NULL;
+ return sig;
}
-};
+
+ return NULL;
+}
bool