aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/glsl/glsl_symbol_table.cpp
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-07-12 08:25:37 +0200
committermarha <marha@users.sourceforge.net>2013-07-12 08:25:37 +0200
commit66b46719d55e60d53b42858770d6ac40d079ab13 (patch)
treeaad06d011ed8b820685f72ada34e56ee0f2580c6 /mesalib/src/glsl/glsl_symbol_table.cpp
parentf8f0209a691e0d0838d1ef9d602ebacafee2a233 (diff)
parentffce4319c2fb6f4f663cc5a9660e1d5837fcde87 (diff)
downloadvcxsrv-66b46719d55e60d53b42858770d6ac40d079ab13.tar.gz
vcxsrv-66b46719d55e60d53b42858770d6ac40d079ab13.tar.bz2
vcxsrv-66b46719d55e60d53b42858770d6ac40d079ab13.zip
Merge remote-tracking branch 'origin/released'
* origin/released: libxtrans fontconfig mesa xserver git update 12 Jul 2013
Diffstat (limited to 'mesalib/src/glsl/glsl_symbol_table.cpp')
-rw-r--r--mesalib/src/glsl/glsl_symbol_table.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/mesalib/src/glsl/glsl_symbol_table.cpp b/mesalib/src/glsl/glsl_symbol_table.cpp
index dcc3a1e02..f9c84e86e 100644
--- a/mesalib/src/glsl/glsl_symbol_table.cpp
+++ b/mesalib/src/glsl/glsl_symbol_table.cpp
@@ -88,17 +88,19 @@ public:
}
symbol_table_entry(ir_variable *v) :
- v(v), f(0), t(0), ibu(0), ibi(0), ibo(0) {}
+ v(v), f(0), t(0), ibu(0), ibi(0), ibo(0), a(0) {}
symbol_table_entry(ir_function *f) :
- v(0), f(f), t(0), ibu(0), ibi(0), ibo(0) {}
+ v(0), f(f), t(0), ibu(0), ibi(0), ibo(0), a(0) {}
symbol_table_entry(const glsl_type *t) :
- v(0), f(0), t(t), ibu(0), ibi(0), ibo(0) {}
+ v(0), f(0), t(t), ibu(0), ibi(0), ibo(0), a(0) {}
symbol_table_entry(const glsl_type *t, enum ir_variable_mode mode) :
- v(0), f(0), t(0), ibu(0), ibi(0), ibo(0)
+ v(0), f(0), t(0), ibu(0), ibi(0), ibo(0), a(0)
{
assert(t->is_interface());
add_interface(t, mode);
}
+ symbol_table_entry(const class ast_type_specifier *a):
+ v(0), f(0), t(0), ibu(0), ibi(0), ibo(0), a(a) {}
ir_variable *v;
ir_function *f;
@@ -106,6 +108,7 @@ public:
const glsl_type *ibu;
const glsl_type *ibi;
const glsl_type *ibo;
+ const class ast_type_specifier *a;
};
glsl_symbol_table::glsl_symbol_table()
@@ -176,6 +179,15 @@ bool glsl_symbol_table::add_type(const char *name, const glsl_type *t)
return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
}
+bool glsl_symbol_table::add_type_ast(const char *name, const class ast_type_specifier *a)
+{
+ symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(a);
+ char ast_name[strlen("#ast.") + strlen(name) + 1];
+ strcpy(ast_name, "#ast.");
+ strcat(ast_name + strlen("#ast."), name);
+ return _mesa_symbol_table_add_symbol(table, -1, ast_name, entry) == 0;
+}
+
bool glsl_symbol_table::add_interface(const char *name, const glsl_type *i,
enum ir_variable_mode mode)
{
@@ -227,6 +239,15 @@ const glsl_type *glsl_symbol_table::get_type(const char *name)
return entry != NULL ? entry->t : NULL;
}
+const class ast_type_specifier *glsl_symbol_table::get_type_ast(const char *name)
+{
+ char ast_name[strlen("#ast.") + strlen(name) + 1];
+ strcpy(ast_name, "#ast.");
+ strcat(ast_name + strlen("#ast."), name);
+ symbol_table_entry *entry = get_entry(ast_name);
+ return entry != NULL ? entry->a : NULL;
+}
+
const glsl_type *glsl_symbol_table::get_interface(const char *name,
enum ir_variable_mode mode)
{