glsl: update default precision qualifier when it is set in the shader
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Fri, 21 Oct 2016 06:23:59 +0000 (08:23 +0200)
committerSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Wed, 26 Oct 2016 09:57:07 +0000 (11:57 +0200)
Default precision qualifier for a data type could be set several times
inside a shader. This patch allows to update the default precision
qualifier for the given type that is saved in the symbol table.

If it is not in the symbol table, just add it.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97804
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
src/compiler/glsl/glsl_symbol_table.cpp

index 3162bb685df8995b1869c7412c61b2301276ac86..15e819eacc693f365f7bafc27edf984965c598ef 100644 (file)
@@ -213,7 +213,10 @@ bool glsl_symbol_table::add_default_precision_qualifier(const char *type_name,
    symbol_table_entry *entry =
       new(mem_ctx) symbol_table_entry(default_specifier);
 
-   return _mesa_symbol_table_add_symbol(table, name, entry) == 0;
+   if (!get_entry(name))
+      return _mesa_symbol_table_add_symbol(table, name, entry) == 0;
+
+   return _mesa_symbol_table_replace_symbol(table, name, entry) == 0;
 }
 
 void glsl_symbol_table::add_global_function(ir_function *f)