glsl2: Fix builtin prototypes defined in multiple glsl/builtins/* files
authorEric Anholt <eric@anholt.net>
Thu, 22 Jul 2010 21:57:55 +0000 (14:57 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 22 Jul 2010 22:03:40 +0000 (15:03 -0700)
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

src/glsl/ir_import_prototypes.cpp

index 20aa8a6ae238b6718f4737081fbe984d7ceb1b99..5c5dc00ad715e062e18b07e2ad588221ee4e1ae1 100644 (file)
@@ -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;
    }