Merge remote-tracking branch 'mesa-public/master' into vulkan
[mesa.git] / src / glsl / glsl_symbol_table.h
index 28a44ebe91c24fa065755136f1bfd30d1efad338..e32b88b8699592408e9743d5fffa56a14dcfa3ca 100644 (file)
@@ -32,9 +32,9 @@ extern "C" {
 #include "program/symbol_table.h"
 }
 #include "ir.h"
-#include "glsl_types.h"
 
 class symbol_table_entry;
+struct glsl_type;
 
 /**
  * Facade class for _mesa_symbol_table
@@ -43,43 +43,13 @@ class symbol_table_entry;
  * type safe and some symbol table invariants.
  */
 struct glsl_symbol_table {
-private:
-   static int
-   _glsl_symbol_table_destructor (glsl_symbol_table *table)
-   {
-      table->~glsl_symbol_table();
-
-      return 0;
-   }
-
-public:
-   /* Callers of this talloc-based new need not call delete. It's
-    * easier to just talloc_free 'ctx' (or any of its ancestors). */
-   static void* operator new(size_t size, void *ctx)
-   {
-      void *table;
-
-      table = talloc_size(ctx, size);
-      assert(table != NULL);
-
-      talloc_set_destructor(table, (int (*)(void*)) _glsl_symbol_table_destructor);
-
-      return table;
-   }
-
-   /* If the user *does* call delete, that's OK, we will just
-    * talloc_free in that case. Here, C++ will have already called the
-    * destructor so tell talloc not to do that again. */
-   static void operator delete(void *table)
-   {
-      talloc_set_destructor(table, NULL);
-      talloc_free(table);
-   }
-   
+   DECLARE_RALLOC_CXX_OPERATORS(glsl_symbol_table)
+
    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();
@@ -100,6 +70,8 @@ public:
    bool add_variable(ir_variable *v);
    bool add_type(const char *name, const glsl_type *t);
    bool add_function(ir_function *f);
+   bool add_interface(const char *name, const glsl_type *i,
+                      enum ir_variable_mode mode);
    /*@}*/
 
    /**
@@ -114,8 +86,18 @@ public:
    ir_variable *get_variable(const char *name);
    const glsl_type *get_type(const char *name);
    ir_function *get_function(const char *name);
+   const glsl_type *get_interface(const char *name,
+                                  enum ir_variable_mode mode);
    /*@}*/
 
+   /**
+    * Disable a previously-added variable so that it no longer appears to be
+    * in the symbol table.  This is necessary when gl_PerVertex is redeclared,
+    * to ensure that previously-available built-in variables are no longer
+    * available.
+    */
+   void disable_variable(const char *name);
+
 private:
    symbol_table_entry *get_entry(const char *name);