summaryrefslogtreecommitdiff
path: root/src/glsl/ir_import_prototypes.cpp
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-07-22 14:57:55 -0700
committerEric Anholt <eric@anholt.net>2010-07-22 15:03:40 -0700
commit1bef4c8c4bc11e7f4150500def6e6a4291ceb587 (patch)
tree6b349cdee0e23df13affdb99c52c4ea48dce8dc0 /src/glsl/ir_import_prototypes.cpp
parent47c90b144729e3edf3b5cbf5b260c1c46e429879 (diff)
glsl2: Fix builtin prototypes defined in multiple glsl/builtins/* files
If we put the protos in separate ir_functions, they wouldn't be found at lookup time for linking. Fixes: glsl-fs-texture2d-bias glsl-fs-texture2dproj-bias glsl-fs-texture2dproj-bias-2 glsl-lod-bias glsl1-texture2D(), computed coordinate
Diffstat (limited to 'src/glsl/ir_import_prototypes.cpp')
-rw-r--r--src/glsl/ir_import_prototypes.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/glsl/ir_import_prototypes.cpp b/src/glsl/ir_import_prototypes.cpp
index 20aa8a6ae2..5c5dc00ad7 100644
--- a/src/glsl/ir_import_prototypes.cpp
+++ b/src/glsl/ir_import_prototypes.cpp
@@ -55,7 +55,17 @@ public:
virtual ir_visitor_status visit_enter(ir_function *ir)
{
assert(this->function == NULL);
- this->function = new(this->mem_ctx) ir_function(ir->name);
+
+ this->function = this->symbols->get_function(ir->name);
+ if (!this->function) {
+ this->function = new(this->mem_ctx) ir_function(ir->name);
+
+ list->push_tail(this->function);
+
+ /* Add the new function to the symbol table.
+ */
+ this->symbols->add_function(this->function->name, this->function);
+ }
return visit_continue;
}
@@ -64,15 +74,6 @@ public:
(void) ir;
assert(this->function != NULL);
- /* Add the new function (and all its signatures) to the end of the
- * instruction stream.
- */
- list->push_tail(this->function);
-
- /* Add the new function to the symbol table.
- */
- this->symbols->add_function(this->function->name, this->function);
-
this->function = NULL;
return visit_continue;
}