diff options
author | Eric Anholt <[email protected]> | 2010-07-22 14:57:55 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2010-07-22 15:03:40 -0700 |
commit | 1bef4c8c4bc11e7f4150500def6e6a4291ceb587 (patch) | |
tree | 6b349cdee0e23df13affdb99c52c4ea48dce8dc0 /src | |
parent | 47c90b144729e3edf3b5cbf5b260c1c46e429879 (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')
-rw-r--r-- | src/glsl/ir_import_prototypes.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/glsl/ir_import_prototypes.cpp b/src/glsl/ir_import_prototypes.cpp index 20aa8a6ae23..5c5dc00ad71 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; } |