slang: Handle OOM condition in new_instruction().
[mesa.git] / src / mesa / shader / slang / slang_compile_variable.h
index 3b6e1987c82248cbde72c6e53b9749e2ff828fa3..b4585599f248219d1efb33e207a3f09eed3d957e 100644 (file)
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#if !defined SLANG_COMPILE_VARIABLE_H
+#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);
+struct slang_ir_storage_;
 
 
-
-typedef struct slang_fully_specified_type_
+/**
+ * A shading language program variable.
+ */
+typedef struct slang_variable_
 {
-   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 *);
+   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 size;                     /**< Variable's size in bytes */
+   GLboolean is_global;
+   GLboolean isTemp;                /**< a named temporary (__resultTmp) */
+   GLboolean declared;              /**< for debug */
+   struct slang_ir_storage_ *store; /**< Storage for this var */
+} slang_variable;
 
 
+/**
+ * Basically a list of variables, with a pointer to the parent scope.
+ */
 typedef struct slang_variable_scope_
 {
-   struct slang_variable_ *variables;
+   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 *);
 
@@ -85,18 +70,8 @@ extern int
 slang_variable_scope_copy(slang_variable_scope *,
                           const slang_variable_scope *);
 
-
-typedef struct slang_variable_
-{
-   slang_fully_specified_type type;
-   slang_atom a_name;
-   GLuint array_len;            /* type: spec_array */
-   struct slang_operation_ *initializer;
-   unsigned int address;
-   unsigned int size;
-   GLboolean global;
-} slang_variable;
-
+extern slang_variable *
+slang_variable_scope_grow(slang_variable_scope *);
 
 extern int
 slang_variable_construct(slang_variable *);
@@ -108,16 +83,8 @@ extern int
 slang_variable_copy(slang_variable *, const slang_variable *);
 
 extern slang_variable *
-_slang_locate_variable(slang_variable_scope *, slang_atom a_name,
+_slang_variable_locate(const slang_variable_scope *, const slang_atom a_name,
                        GLboolean all);
 
-extern GLboolean
-_slang_build_export_data_table(slang_export_data_table *,
-                               slang_variable_scope *);
-
-
-#ifdef __cplusplus
-}
-#endif
 
-#endif
+#endif /* SLANG_COMPILE_VARIABLE_H */