merge from master
[mesa.git] / src / mesa / shader / slang / slang_compile_variable.h
index fc42280ae5620b7369b2dda3ad1b03034db62108..d3691f0f51113da051dfed1aad7984079b7ee68d 100644 (file)
-/*\r
- * Mesa 3-D graphics library\r
- * Version:  6.5\r
- *\r
- * Copyright (C) 2005-2006  Brian Paul   All Rights Reserved.\r
- *\r
- * Permission is hereby granted, free of charge, to any person obtaining a\r
- * copy of this software and associated documentation files (the "Software"),\r
- * to deal in the Software without restriction, including without limitation\r
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
- * and/or sell copies of the Software, and to permit persons to whom the\r
- * Software is furnished to do so, subject to the following conditions:\r
- *\r
- * The above copyright notice and this permission notice shall be included\r
- * in all copies or substantial portions of the Software.\r
- *\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
- */\r
-\r
-#if !defined SLANG_COMPILE_VARIABLE_H\r
-#define SLANG_COMPILE_VARIABLE_H\r
-\r
-#if defined __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-typedef enum slang_type_qualifier_\r
-{\r
-       slang_qual_none,\r
-       slang_qual_const,\r
-       slang_qual_attribute,\r
-       slang_qual_varying,\r
-       slang_qual_uniform,\r
-       slang_qual_out,\r
-       slang_qual_inout,\r
-       slang_qual_fixedoutput, /* internal */\r
-       slang_qual_fixedinput   /* internal */\r
-} slang_type_qualifier;\r
-\r
-typedef enum slang_type_specifier_type_\r
-{\r
-       slang_spec_void,\r
-       slang_spec_bool,\r
-       slang_spec_bvec2,\r
-       slang_spec_bvec3,\r
-       slang_spec_bvec4,\r
-       slang_spec_int,\r
-       slang_spec_ivec2,\r
-       slang_spec_ivec3,\r
-       slang_spec_ivec4,\r
-       slang_spec_float,\r
-       slang_spec_vec2,\r
-       slang_spec_vec3,\r
-       slang_spec_vec4,\r
-       slang_spec_mat2,\r
-       slang_spec_mat3,\r
-       slang_spec_mat4,\r
-       slang_spec_sampler1D,\r
-       slang_spec_sampler2D,\r
-       slang_spec_sampler3D,\r
-       slang_spec_samplerCube,\r
-       slang_spec_sampler1DShadow,\r
-       slang_spec_sampler2DShadow,\r
-       slang_spec_struct,\r
-       slang_spec_array\r
-} slang_type_specifier_type;\r
-\r
-slang_type_specifier_type slang_type_specifier_type_from_string (const char *);\r
-const char *slang_type_specifier_type_to_string (slang_type_specifier_type);\r
-\r
-typedef struct slang_type_specifier_\r
-{\r
-       slang_type_specifier_type type;\r
-       struct slang_struct_ *_struct;                  /* type: spec_struct */\r
-       struct slang_type_specifier_ *_array;   /* type: spec_array */\r
-} slang_type_specifier;\r
-\r
-int slang_type_specifier_construct (slang_type_specifier *);\r
-void slang_type_specifier_destruct (slang_type_specifier *);\r
-int slang_type_specifier_copy (slang_type_specifier *, const slang_type_specifier *);\r
-int slang_type_specifier_equal (const slang_type_specifier *, const slang_type_specifier *);\r
-\r
-typedef struct slang_fully_specified_type_\r
-{\r
-       slang_type_qualifier qualifier;\r
-       slang_type_specifier specifier;\r
-} slang_fully_specified_type;\r
-\r
-int slang_fully_specified_type_construct (slang_fully_specified_type *);\r
-void slang_fully_specified_type_destruct (slang_fully_specified_type *);\r
-int slang_fully_specified_type_copy (slang_fully_specified_type *, const slang_fully_specified_type *);\r
-\r
-typedef struct slang_variable_scope_\r
-{\r
-       struct slang_variable_ *variables;\r
-       unsigned int num_variables;\r
-       struct slang_variable_scope_ *outer_scope;\r
-} slang_variable_scope;\r
-\r
-int slang_variable_scope_construct (slang_variable_scope *);\r
-void slang_variable_scope_destruct (slang_variable_scope *);\r
-int slang_variable_scope_copy (slang_variable_scope *, const slang_variable_scope *);\r
-\r
-typedef struct slang_variable_\r
-{\r
-       slang_fully_specified_type type;\r
-       slang_atom a_name;\r
-       struct slang_operation_ *array_size;    /* type: spec_array */\r
-       struct slang_operation_ *initializer;\r
-       unsigned int address;\r
-       unsigned int size;\r
-       int global;\r
-} slang_variable;\r
-\r
-int slang_variable_construct (slang_variable *);\r
-void slang_variable_destruct (slang_variable *);\r
-int slang_variable_copy (slang_variable *, const slang_variable *);\r
-\r
-slang_variable *_slang_locate_variable (slang_variable_scope *scope, slang_atom a_name, int all);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
-\r
+/*
+ * Mesa 3-D graphics library
+ * Version:  6.5.2
+ *
+ * Copyright (C) 2005-2006  Brian Paul   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef SLANG_COMPILE_VARIABLE_H
+#define SLANG_COMPILE_VARIABLE_H
+
+#if defined __cplusplus
+extern "C" {
+#endif
+
+
+typedef enum slang_type_qualifier_
+{
+   SLANG_QUAL_NONE,
+   SLANG_QUAL_CONST,
+   SLANG_QUAL_ATTRIBUTE,
+   SLANG_QUAL_VARYING,
+   SLANG_QUAL_UNIFORM,
+   SLANG_QUAL_OUT,
+   SLANG_QUAL_INOUT,
+   SLANG_QUAL_FIXEDOUTPUT,      /* internal */
+   SLANG_QUAL_FIXEDINPUT        /* internal */
+} slang_type_qualifier;
+
+extern slang_type_specifier_type
+slang_type_specifier_type_from_string(const char *);
+
+extern const char *
+slang_type_specifier_type_to_string(slang_type_specifier_type);
+
+
+
+typedef struct slang_fully_specified_type_
+{
+   slang_type_qualifier qualifier;
+   slang_type_specifier specifier;
+} slang_fully_specified_type;
+
+extern int
+slang_fully_specified_type_construct(slang_fully_specified_type *);
+
+extern void
+slang_fully_specified_type_destruct(slang_fully_specified_type *);
+
+extern int
+slang_fully_specified_type_copy(slang_fully_specified_type *,
+                               const slang_fully_specified_type *);
+
+
+/**
+ * A shading language program variable.
+ */
+typedef struct slang_variable_
+{
+   slang_fully_specified_type type; /**< Variable's data type */
+   slang_atom a_name;               /**< The variable's name (char *) */
+   GLuint array_len;                /**< only if type == SLANG_SPEC_ARRAy */
+   struct slang_operation_ *initializer; /**< Optional initializer code */
+   GLuint address;                  /**< Storage location */
+   GLuint size;                     /**< Variable's size in bytes */
+   GLboolean isTemp;                /**< a named temporary (__resultTmp) */
+   void *aux;                       /**< Used during code gen */
+} slang_variable;
+
+
+/**
+ * Basically a list of variables, with a pointer to the parent scope.
+ */
+typedef struct slang_variable_scope_
+{
+   slang_variable **variables;  /**< Array [num_variables] of ptrs to vars */
+   GLuint num_variables;
+   struct slang_variable_scope_ *outer_scope;
+} slang_variable_scope;
+
+
+extern slang_variable_scope *
+_slang_variable_scope_new(slang_variable_scope *parent);
+
+extern GLvoid
+_slang_variable_scope_ctr(slang_variable_scope *);
+
+extern void
+slang_variable_scope_destruct(slang_variable_scope *);
+
+extern int
+slang_variable_scope_copy(slang_variable_scope *,
+                          const slang_variable_scope *);
+
+extern slang_variable *
+slang_variable_scope_grow(slang_variable_scope *);
+
+extern int
+slang_variable_construct(slang_variable *);
+
+extern void
+slang_variable_destruct(slang_variable *);
+
+extern int
+slang_variable_copy(slang_variable *, const slang_variable *);
+
+extern slang_variable *
+_slang_locate_variable(const slang_variable_scope *, const slang_atom a_name,
+                       GLboolean all);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SLANG_COMPILE_VARIABLE_H */