Reviewed-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com>
On 05/11/15 12:33, Tapani Pälli wrote: > From: Iago Toral Quiroga <ito...@igalia.com> > > These have scoping rules that match the ones defined for other things such > as variables, so we want them in the symbol table. > --- > src/glsl/glsl_symbol_table.cpp | 24 ++++++++++++++++++++++++ > src/glsl/glsl_symbol_table.h | 2 ++ > 2 files changed, 26 insertions(+) > > diff --git a/src/glsl/glsl_symbol_table.cpp b/src/glsl/glsl_symbol_table.cpp > index 536f0a3..6c682ac 100644 > --- a/src/glsl/glsl_symbol_table.cpp > +++ b/src/glsl/glsl_symbol_table.cpp > @@ -23,6 +23,7 @@ > */ > > #include "glsl_symbol_table.h" > +#include "ast.h" > > class symbol_table_entry { > public: > @@ -201,6 +202,20 @@ 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_default_precision_qualifier(const char > *type_name, > + int precision) > +{ > + char *name = ralloc_asprintf(mem_ctx, "#default_precision_%s", type_name); > + > + ast_type_specifier *default_specifier = new(mem_ctx) > ast_type_specifier(name); > + default_specifier->default_precision = precision; > + > + symbol_table_entry *entry = > + new(mem_ctx) symbol_table_entry(default_specifier); > + > + return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0; > +} > + > void glsl_symbol_table::add_global_function(ir_function *f) > { > symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(f); > @@ -234,6 +249,15 @@ ir_function *glsl_symbol_table::get_function(const char > *name) > return entry != NULL ? entry->f : NULL; > } > > +int glsl_symbol_table::get_default_precision_qualifier(const char *type_name) > +{ > + char *name = ralloc_asprintf(mem_ctx, "#default_precision_%s", type_name); > + symbol_table_entry *entry = get_entry(name); > + if (!entry) > + return ast_precision_none; > + return entry->a->default_precision; > +} > + > symbol_table_entry *glsl_symbol_table::get_entry(const char *name) > { > return (symbol_table_entry *) > diff --git a/src/glsl/glsl_symbol_table.h b/src/glsl/glsl_symbol_table.h > index e32b88b..5d654e5 100644 > --- a/src/glsl/glsl_symbol_table.h > +++ b/src/glsl/glsl_symbol_table.h > @@ -72,6 +72,7 @@ struct glsl_symbol_table { > bool add_function(ir_function *f); > bool add_interface(const char *name, const glsl_type *i, > enum ir_variable_mode mode); > + bool add_default_precision_qualifier(const char *type_name, int > precision); > /*@}*/ > > /** > @@ -88,6 +89,7 @@ struct glsl_symbol_table { > ir_function *get_function(const char *name); > const glsl_type *get_interface(const char *name, > enum ir_variable_mode mode); > + int get_default_precision_qualifier(const char *type_name); > /*@}*/ > > /** > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev