[Mesa-dev] [PATCH 1/7] glsl: Add API to put default precision qualifiers in the symbol table

Samuel Iglesias Gonsálvez siglesias at igalia.com
Wed Nov 11 04:27:40 PST 2015


Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>

On 05/11/15 12:33, Tapani Pälli wrote:
> From: Iago Toral Quiroga <itoral at 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);
>     /*@}*/
>  
>     /**
> 


More information about the mesa-dev mailing list