On 21/10/16 07:48, Timothy Arceri wrote: > On Thu, 2016-10-20 at 12:39 +0200, Samuel Iglesias Gonsálvez wrote: >> For that, we use gls_symbol_table::set_default_precision_qualifier() >> that >> can update an existing definition or add a new one if it doesn't >> exist. >> >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97804 >> Signed-off-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com> > > Hi Samuel, > > It looks like the parser pushes and pops scope of the symbol table so > these changes should work. However it would be nice to see some piglit > tests for this before landing these patches. >
Sure, I will write them. >> --- >> src/compiler/glsl/ast_to_hir.cpp | 2 +- >> src/compiler/glsl/glsl_symbol_table.cpp | 15 +++++++++++++++ >> src/compiler/glsl/glsl_symbol_table.h | 2 ++ >> 3 files changed, 18 insertions(+), 1 deletion(-) >> >> diff --git a/src/compiler/glsl/ast_to_hir.cpp >> b/src/compiler/glsl/ast_to_hir.cpp >> index 6e2f253..cc50ff8 100644 >> --- a/src/compiler/glsl/ast_to_hir.cpp >> +++ b/src/compiler/glsl/ast_to_hir.cpp >> @@ -6559,7 +6559,7 @@ ast_type_specifier::hir(exec_list >> *instructions, >> * is a slight abuse of the symbol table, but it has the >> semantics >> * that we want. >> */ >> - state->symbols->add_default_precision_qualifier(this- >>> type_name, >> + state->symbols->set_default_precision_qualifier(this- >>> type_name, >> this- >>> default_precision); >> } >> >> diff --git a/src/compiler/glsl/glsl_symbol_table.cpp >> b/src/compiler/glsl/glsl_symbol_table.cpp >> index 6d7baad..11e5c00 100644 >> --- a/src/compiler/glsl/glsl_symbol_table.cpp >> +++ b/src/compiler/glsl/glsl_symbol_table.cpp >> @@ -258,6 +258,21 @@ int >> glsl_symbol_table::get_default_precision_qualifier(const char >> *type_name) >> return entry->a->default_precision; >> } >> >> +bool glsl_symbol_table::set_default_precision_qualifier(const char >> *type_name, >> + int >> precision) >> +{ >> + char *name = ralloc_asprintf(mem_ctx, "#default_precision_%s", >> type_name); >> + symbol_table_entry *entry = get_entry(name); >> + if (!entry) >> + return add_default_precision_qualifier(type_name, precision); > > I think I would rather just see this completely > replace add_default_precision_qualifier() rather than duplicating a > bunch of code. What do you think? I don't think avoiding > the get_entry() call saves us much. > Right, I though that too. I will write a v2 with that change. Thanks, Sam >> + >> + ast_type_specifier *default_specifier = new(mem_ctx) >> ast_type_specifier(name); >> + default_specifier->default_precision = precision; >> + >> + entry = new(mem_ctx) symbol_table_entry(default_specifier); >> + return _mesa_symbol_table_replace_symbol(table, -1, name, entry) >> == 0; >> +} >> + >> symbol_table_entry *glsl_symbol_table::get_entry(const char *name) >> { >> return (symbol_table_entry *) >> diff --git a/src/compiler/glsl/glsl_symbol_table.h >> b/src/compiler/glsl/glsl_symbol_table.h >> index 2f94d4c..69a6912 100644 >> --- a/src/compiler/glsl/glsl_symbol_table.h >> +++ b/src/compiler/glsl/glsl_symbol_table.h >> @@ -90,6 +90,8 @@ struct glsl_symbol_table { >> const glsl_type *get_interface(const char *name, >> enum ir_variable_mode mode); >> int get_default_precision_qualifier(const char *type_name); >> + bool set_default_precision_qualifier(const char *type_name, int >> precision); >> + >> /*@}*/ >> >> /** >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev