updated some printfs, added comment about sched_yield
[mesa.git] / src / mesa / shader / slang / slang_storage.h
index 77962c1986eee12497fc851dd1cc7f473ca9c10e..532ea638ee7cbf58107e6582bdb66db8bebc86d7 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.3
+ * Version:  6.5
  *
- * Copyright (C) 2005  Brian Paul   All Rights Reserved.
+ * 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"),
 #define SLANG_STORAGE_H
 
 #include "slang_compile.h"
+#include "slang_assemble.h"
+#include "slang_execute.h"
 
 #if defined __cplusplus
 extern "C" {
 #endif
 
 /*
      Program variable data storage is kept completely transparent to the front-end compiler. It is
      up to the back-end how the data is actually allocated. The slang_storage_type enum
      provides the basic information about how the memory is interpreted. This abstract piece
      of memory is called a data slot. A data slot of a particular type has a fixed size.
-
      For now, only the three basic types are supported, that is bool, int and float. Other built-in
      types like vector or matrix can easily be decomposed into a series of basic types.
-*/
* Program variable data storage is kept completely transparent to the front-end compiler. It is
* up to the back-end how the data is actually allocated. The slang_storage_type enum
* provides the basic information about how the memory is interpreted. This abstract piece
* of memory is called a data slot. A data slot of a particular type has a fixed size.
+ *
* For now, only the three basic types are supported, that is bool, int and float. Other built-in
* types like vector or matrix can easily be decomposed into a series of basic types.
+ */
 typedef enum slang_storage_type_
 {
        slang_stor_aggregate,
@@ -49,57 +51,73 @@ typedef enum slang_storage_type_
 } slang_storage_type;
 
 /*
      The slang_storage_array structure groups data slots of the same type into an array. This
      array has a fixed length. Arrays are required to have a size equal to the sum of sizes of its
      elements. They are also required to support indirect addressing. That is, if B references
      first data slot in the array, S is the size of the data slot and I is the integral index that
      is not known at compile time, B+I*S references I-th data slot.
-
      This structure is also used to break down built-in data types that are not supported directly.
      Vectors, like vec3, are constructed from arrays of their basic types. Matrices are formed of
      an array of column vectors, which are in turn processed as other vectors.
-*/
* The slang_storage_array structure groups data slots of the same type into an array. This
* array has a fixed length. Arrays are required to have a size equal to the sum of sizes of its
* elements. They are also required to support indirect addressing. That is, if B references
* first data slot in the array, S is the size of the data slot and I is the integral index that
* is not known at compile time, B+I*S references I-th data slot.
+ *
* This structure is also used to break down built-in data types that are not supported directly.
* Vectors, like vec3, are constructed from arrays of their basic types. Matrices are formed of
* an array of column vectors, which are in turn processed as other vectors.
+ */
 typedef struct slang_storage_array_
 {
        slang_storage_type type;
        struct slang_storage_aggregate_ *aggregate;     /* slang_stor_aggregate */
-       unsigned int length;
+       GLuint length;
 } slang_storage_array;
 
-void slang_storage_array_construct (slang_storage_array *);
-void slang_storage_array_destruct (slang_storage_array *);
+GLboolean slang_storage_array_construct (slang_storage_array *);
+GLvoid slang_storage_array_destruct (slang_storage_array *);
 
 /*
      The slang_storage_aggregate structure relaxes the indirect addressing requirement for
      slang_storage_array structure. Aggregates are always accessed statically - its member
      addresses are well-known at compile time. For example, user-defined types are implemented as
      aggregates. Aggregates can collect data of a different type.
-*/
* The slang_storage_aggregate structure relaxes the indirect addressing requirement for
* slang_storage_array structure. Aggregates are always accessed statically - its member
* addresses are well-known at compile time. For example, user-defined types are implemented as
* aggregates. Aggregates can collect data of a different type.
+ */
 typedef struct slang_storage_aggregate_
 {
        slang_storage_array *arrays;
-       unsigned int count;
+       GLuint count;
 } slang_storage_aggregate;
 
-void slang_storage_aggregate_construct (slang_storage_aggregate *);
-void slang_storage_aggregate_destruct (slang_storage_aggregate *);
-
-int _slang_aggregate_variable (slang_storage_aggregate *, struct slang_type_specifier_ *,
-       struct slang_operation_ *, struct slang_function_scope_ *, slang_struct_scope *);
+GLboolean slang_storage_aggregate_construct (slang_storage_aggregate *);
+GLvoid slang_storage_aggregate_destruct (slang_storage_aggregate *);
+
+extern GLboolean
+_slang_aggregate_variable(slang_storage_aggregate *agg,
+                          slang_type_specifier *spec,
+                          GLuint array_len,
+                          slang_function_scope *funcs,
+                          slang_struct_scope *structs,
+                          slang_variable_scope *vars,
+                          slang_machine *mach,
+                          slang_assembly_file *file,
+                          slang_atom_pool *atoms);
+
+extern GLboolean
+_slang_evaluate_int(slang_assembly_file *file,
+                    slang_machine *pmach,
+                    slang_assembly_name_space *space,
+                    slang_operation *array_size,
+                    GLuint *pint,
+                    slang_atom_pool *atoms);
 
 /*
-       returns total size (in machine units) of the given aggregate
-       returns 0 on error
-*/
-unsigned int _slang_sizeof_aggregate (const slang_storage_aggregate *);
+ * Returns total size (in machine units) of the given aggregate.
+ * Returns 0 on error.
+ */
+GLuint _slang_sizeof_aggregate (const slang_storage_aggregate *);
 
 /*
      converts structured aggregate to a flat one, with arrays of generic type being
-       one-element long
-       returns 1 on success
-       returns 0 otherwise
-*/
-int _slang_flatten_aggregate (slang_storage_aggregate *, const slang_storage_aggregate *);
* Converts structured aggregate to a flat one, with arrays of generic type being
+ * one-element long.
+ * Returns GL_TRUE on success.
+ * Returns GL_FALSE otherwise.
+ */
+GLboolean _slang_flatten_aggregate (slang_storage_aggregate *, const slang_storage_aggregate *);
 
 #ifdef __cplusplus
 }