[Mesa-dev] [PATCH 1/6] glsl: Add API to put default precision qualifiers in the symbol table
Iago Toral Quiroga
itoral at igalia.com
Thu Feb 26 03:15:16 PST 2015
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 2294dda..dd165ee 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:
@@ -195,6 +196,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);
@@ -228,6 +243,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);
/*@}*/
/**
--
1.9.1
More information about the mesa-dev
mailing list