Use C-style system headers in C++ code to avoid issues with std:: namespace
[mesa.git] / src / glsl / glsl_types.h
index 3e86d2c011fa1e18c0c3fd6972118400346cb6c9..61bf5e0cfd24779fee3913817214bf6fd13d1abd 100644 (file)
 #ifndef GLSL_TYPES_H
 #define GLSL_TYPES_H
 
-#include <cstring>
-#include <cassert>
+#include <string.h>
+#include <assert.h>
 
 extern "C" {
 #include "GL/gl.h"
-#include <talloc.h>
 }
 
+#include "ralloc.h"
+
 struct _mesa_glsl_parse_state;
 struct glsl_symbol_table;
 
@@ -43,16 +44,17 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state);
 extern "C" void
 _mesa_glsl_release_types(void);
 
-#define GLSL_TYPE_UINT          0
-#define GLSL_TYPE_INT           1
-#define GLSL_TYPE_FLOAT         2
-#define GLSL_TYPE_BOOL          3
-#define GLSL_TYPE_SAMPLER       4
-#define GLSL_TYPE_STRUCT        5
-#define GLSL_TYPE_ARRAY         6
-#define GLSL_TYPE_FUNCTION      7
-#define GLSL_TYPE_VOID          8
-#define GLSL_TYPE_ERROR         9
+enum glsl_base_type {
+   GLSL_TYPE_UINT = 0,
+   GLSL_TYPE_INT,
+   GLSL_TYPE_FLOAT,
+   GLSL_TYPE_BOOL,
+   GLSL_TYPE_SAMPLER,
+   GLSL_TYPE_STRUCT,
+   GLSL_TYPE_ARRAY,
+   GLSL_TYPE_VOID,
+   GLSL_TYPE_ERROR
+};
 
 enum glsl_sampler_dim {
    GLSL_SAMPLER_DIM_1D = 0,
@@ -66,7 +68,7 @@ enum glsl_sampler_dim {
 
 struct glsl_type {
    GLenum gl_type;
-   unsigned base_type:4;
+   glsl_base_type base_type;
 
    unsigned sampler_dimensionality:3;
    unsigned sampler_shadow:1;
@@ -76,28 +78,28 @@ struct glsl_type {
                                * and \c GLSL_TYPE_UINT are valid.
                                */
 
-   /* Callers of this talloc-based new need not call delete. It's
-    * easier to just talloc_free 'mem_ctx' (or any of its ancestors). */
+   /* Callers of this ralloc-based new need not call delete. It's
+    * easier to just ralloc_free 'mem_ctx' (or any of its ancestors). */
    static void* operator new(size_t size)
    {
       if (glsl_type::mem_ctx == NULL) {
-        glsl_type::mem_ctx = talloc_init("glsl_type");
+        glsl_type::mem_ctx = ralloc_context(NULL);
         assert(glsl_type::mem_ctx != NULL);
       }
 
       void *type;
 
-      type = talloc_size(glsl_type::mem_ctx, size);
+      type = ralloc_size(glsl_type::mem_ctx, size);
       assert(type != NULL);
 
       return type;
    }
 
    /* If the user *does* call delete, that's OK, we will just
-    * talloc_free in that case. */
+    * ralloc_free in that case. */
    static void operator delete(void *type)
    {
-      talloc_free(type);
+      ralloc_free(type);
    }
 
    /**
@@ -123,11 +125,6 @@ struct glsl_type {
     * For \c GLSL_TYPE_ARRAY, this is the length of the array.  For
     * \c GLSL_TYPE_STRUCT, it is the number of elements in the structure and
     * the number of values pointed to by \c fields.structure (below).
-    *
-    * For \c GLSL_TYPE_FUNCTION, it is the number of parameters to the
-    * function.  The return value from a function is implicitly the first
-    * parameter.  The types of the parameters are stored in
-    * \c fields.parameters (below).
     */
    unsigned length;
 
@@ -146,9 +143,12 @@ struct glsl_type {
     */
    /*@{*/
    static const glsl_type *const error_type;
+   static const glsl_type *const void_type;
    static const glsl_type *const int_type;
    static const glsl_type *const ivec4_type;
    static const glsl_type *const uint_type;
+   static const glsl_type *const uvec2_type;
+   static const glsl_type *const uvec3_type;
    static const glsl_type *const uvec4_type;
    static const glsl_type *const float_type;
    static const glsl_type *const vec2_type;
@@ -207,10 +207,6 @@ struct glsl_type {
    static const glsl_type *get_record_instance(const glsl_struct_field *fields,
                                               unsigned num_fields,
                                               const char *name);
-   /**
-    * Generate the constructor for this type and return it
-    */
-   class ir_function *generate_constructor() const;
 
    /**
     * Query the total number of scalars that make up a scalar, vector or matrix
@@ -391,17 +387,17 @@ struct glsl_type {
 
 private:
    /**
-    * talloc context for all glsl_type allocations
+    * ralloc context for all glsl_type allocations
     *
     * Set on the first call to \c glsl_type::new.
     */
    static void *mem_ctx;
 
-   void init_talloc_type_ctx(void);
+   void init_ralloc_type_ctx(void);
 
    /** Constructor for vector and matrix types */
    glsl_type(GLenum gl_type,
-            unsigned base_type, unsigned vector_elements,
+            glsl_base_type base_type, unsigned vector_elements,
             unsigned matrix_columns, const char *name);
 
    /** Constructor for sampler types */
@@ -430,10 +426,11 @@ private:
     */
    /*@{*/
    static const glsl_type _error_type;
-   static const glsl_type void_type;
+   static const glsl_type _void_type;
    static const glsl_type builtin_core_types[];
    static const glsl_type builtin_structure_types[];
    static const glsl_type builtin_110_deprecated_structure_types[];
+   static const glsl_type builtin_110_types[];
    static const glsl_type builtin_120_types[];
    static const glsl_type builtin_130_types[];
    static const glsl_type builtin_ARB_texture_rectangle_types[];
@@ -450,13 +447,12 @@ private:
     * the world in a public header file.
     */
    /*@{*/
+   static void generate_100ES_types(glsl_symbol_table *);
    static void generate_110_types(glsl_symbol_table *);
    static void generate_120_types(glsl_symbol_table *);
    static void generate_130_types(glsl_symbol_table *);
-   static void generate_ARB_texture_rectangle_types(glsl_symbol_table *,
-                                                   bool);
-   static void generate_EXT_texture_array_types(glsl_symbol_table *,
-                                               bool);
+   static void generate_ARB_texture_rectangle_types(glsl_symbol_table *, bool);
+   static void generate_EXT_texture_array_types(glsl_symbol_table *, bool);
    /*@}*/
 
    /**