[Mesa-dev] [PATCH 18/32] glsl: Track blocks in the symbol table using the glsl_type instead of the gl_uniform_block

Ian Romanick idr at freedesktop.org
Tue Jan 22 00:52:09 PST 2013


From: Ian Romanick <ian.d.romanick at intel.com>

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/glsl/ast_to_hir.cpp        | 12 ++++++------
 src/glsl/glsl_symbol_table.cpp | 14 +++-----------
 src/glsl/glsl_symbol_table.h   |  1 -
 3 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index bf3405f..d485bc8 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -4205,12 +4205,6 @@ ast_uniform_block::hir(exec_list *instructions,
    struct gl_uniform_block *ubo = get_next_uniform_block(state);
    ubo->Name = ralloc_strdup(state->uniform_blocks, this->block_name);
 
-   if (!state->symbols->add_uniform_block(ubo)) {
-      YYLTYPE loc = this->get_location();
-      _mesa_glsl_error(&loc, state, "Uniform block name `%s' already taken in "
-                       "the current scope.\n", ubo->Name);
-   }
-
    if (this->layout.flags.q.shared) {
       ubo->_Packing = ubo_packing_shared;
    } else if (this->layout.flags.q.packed) {
@@ -4246,6 +4240,12 @@ ast_uniform_block::hir(exec_list *instructions,
                                         (enum glsl_interface_packing) ubo->_Packing,
                                         this->block_name);
 
+   if (!state->symbols->add_type(block_type->name, block_type)) {
+      YYLTYPE loc = this->get_location();
+      _mesa_glsl_error(&loc, state, "Uniform block name `%s' already taken in "
+                       "the current scope.\n", this->block_name);
+   }
+
    /* Since interface blocks cannot contain structure definitions, it should
     * be impossible for the block to generate any instructions.
     */
diff --git a/src/glsl/glsl_symbol_table.cpp b/src/glsl/glsl_symbol_table.cpp
index eb275b1..8d34547 100644
--- a/src/glsl/glsl_symbol_table.cpp
+++ b/src/glsl/glsl_symbol_table.cpp
@@ -41,15 +41,13 @@ public:
       ralloc_free(entry);
    }
 
-   symbol_table_entry(ir_variable *v)               : v(v), f(0), t(0), u(0) {}
-   symbol_table_entry(ir_function *f)               : v(0), f(f), t(0), u(0) {}
-   symbol_table_entry(const glsl_type *t)           : v(0), f(0), t(t), u(0) {}
-   symbol_table_entry(struct gl_uniform_block *u)   : v(0), f(0), t(0), u(u) {}
+   symbol_table_entry(ir_variable *v)               : v(v), f(0), t(0) {}
+   symbol_table_entry(ir_function *f)               : v(0), f(f), t(0) {}
+   symbol_table_entry(const glsl_type *t)           : v(0), f(0), t(t) {}
 
    ir_variable *v;
    ir_function *f;
    const glsl_type *t;
-   struct gl_uniform_block *u;
 };
 
 glsl_symbol_table::glsl_symbol_table()
@@ -134,12 +132,6 @@ bool glsl_symbol_table::add_function(ir_function *f)
    return _mesa_symbol_table_add_symbol(table, -1, f->name, entry) == 0;
 }
 
-bool glsl_symbol_table::add_uniform_block(struct gl_uniform_block *u)
-{
-   symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(u);
-   return _mesa_symbol_table_add_symbol(table, -1, u->Name, entry) == 0;
-}
-
 void glsl_symbol_table::add_global_function(ir_function *f)
 {
    symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(f);
diff --git a/src/glsl/glsl_symbol_table.h b/src/glsl/glsl_symbol_table.h
index f95fb8a..9f56027 100644
--- a/src/glsl/glsl_symbol_table.h
+++ b/src/glsl/glsl_symbol_table.h
@@ -99,7 +99,6 @@ public:
    bool add_variable(ir_variable *v);
    bool add_type(const char *name, const glsl_type *t);
    bool add_function(ir_function *f);
-   bool add_uniform_block(struct gl_uniform_block *u);
    /*@}*/
 
    /**
-- 
1.7.11.7



More information about the mesa-dev mailing list