glsl: Simplify symbol table version checking.
authorPaul Berry <stereotype441@gmail.com>
Thu, 2 Aug 2012 00:44:02 +0000 (17:44 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 6 Dec 2012 20:13:21 +0000 (12:13 -0800)
Previously, we stored the GLSL language version in the
glsl_symbol_table struct.  But this was unnecessary--all
glsl_symbol_table needs to know is whether functions and variables
have separate namespaces (they do in GLSL 1.10 only).

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Acked-by: Carl Worth <cworth@cworth.org>
src/glsl/ast_function.cpp
src/glsl/ast_to_hir.cpp
src/glsl/builtins/tools/generate_builtins.py
src/glsl/glsl_symbol_table.cpp
src/glsl/glsl_symbol_table.h

index ea3282c5f9428e84a7630cf2f2f5575d8b07705d..c0e05ad8589bf2a69621da058b733d1c34b214a2 100644 (file)
@@ -324,7 +324,8 @@ match_function_by_name(const char *name,
       goto done; /* no match */
 
    /* Is the function hidden by a variable (impossible in 1.10)? */
-   if (state->language_version != 110 && state->symbols->get_variable(name))
+   if (!state->symbols->separate_function_namespace
+       && state->symbols->get_variable(name))
       goto done; /* no match */
 
    if (f != NULL) {
index d450aa1e40d307a5a1d821e64c166630d42e8f30..75b551b2db44641cd8a199f4f09a5382e5030413 100644 (file)
@@ -66,7 +66,7 @@ _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
 {
    _mesa_glsl_initialize_variables(instructions, state);
 
-   state->symbols->language_version = state->language_version;
+   state->symbols->separate_function_namespace = state->language_version == 110;
 
    state->current_function = NULL;
 
index 14a72fc07a56511c8bae58d7bc759d8ebe848838..3e8d44855808471f37688c9694e195b0baf1c062 100755 (executable)
@@ -183,7 +183,7 @@ read_builtins(GLenum target, const char *protos, const char **functions, unsigne
       new(sh) _mesa_glsl_parse_state(&fakeCtx, target, sh);
 
    st->language_version = 140;
-   st->symbols->language_version = 140;
+   st->symbols->separate_function_namespace = false;
    st->ARB_texture_rectangle_enable = true;
    st->EXT_texture_array_enable = true;
    st->OES_EGL_image_external_enable = true;
index bcb65d30182a131563700b6d96cc2ab7dc94ef49..f934ea8657063a5175d0ef6a367fcfff03b89c4d 100644 (file)
@@ -52,7 +52,7 @@ public:
 
 glsl_symbol_table::glsl_symbol_table()
 {
-   this->language_version = 120;
+   this->separate_function_namespace = false;
    this->table = _mesa_symbol_table_ctor();
    this->mem_ctx = ralloc_context(NULL);
 }
@@ -80,7 +80,7 @@ bool glsl_symbol_table::name_declared_this_scope(const char *name)
 
 bool glsl_symbol_table::add_variable(ir_variable *v)
 {
-   if (this->language_version == 110) {
+   if (this->separate_function_namespace) {
       /* In 1.10, functions and variables have separate namespaces. */
       symbol_table_entry *existing = get_entry(v->name);
       if (name_declared_this_scope(v->name)) {
@@ -120,7 +120,7 @@ bool glsl_symbol_table::add_type(const char *name, const glsl_type *t)
 
 bool glsl_symbol_table::add_function(ir_function *f)
 {
-   if (this->language_version == 110 && name_declared_this_scope(f->name)) {
+   if (this->separate_function_namespace && name_declared_this_scope(f->name)) {
       /* In 1.10, functions and variables have separate namespaces. */
       symbol_table_entry *existing = get_entry(f->name);
       if ((existing->f == NULL) && (existing->t == NULL)) {
index 637bc033b9353fe9160b14720baf691746438b3e..9f5602787f083c1a077b8bb93d18debb28ebbe18 100644 (file)
@@ -77,7 +77,8 @@ public:
    glsl_symbol_table();
    ~glsl_symbol_table();
 
-   unsigned int language_version;
+   /* In 1.10, functions and variables have separate namespaces. */
+   bool separate_function_namespace;
 
    void push_scope();
    void pop_scope();