updated some printfs, added comment about sched_yield
[mesa.git] / src / mesa / shader / slang / slang_compile.h
index 0458f3a2b2a2c696a7161aa6f6195b5e3effb5d8..cbf0bf907a1eae0653edc2449d28a6b5da544771 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"),
  */
 
 #if !defined SLANG_COMPILE_H
-#define SLANG_COMPILE_H
+#define SLANG_COMPILE_H\r
+\r
+#include "slang_export.h"\r
+#include "slang_execute.h"\r
+#include "slang_compile_variable.h"\r
+#include "slang_compile_struct.h"\r
+#include "slang_compile_operation.h"\r
+#include "slang_compile_function.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;
-
-typedef enum slang_type_specifier_type_
-{
-       slang_spec_void,
-       slang_spec_bool,
-       slang_spec_bvec2,
-       slang_spec_bvec3,
-       slang_spec_bvec4,
-       slang_spec_int,
-       slang_spec_ivec2,
-       slang_spec_ivec3,
-       slang_spec_ivec4,
-       slang_spec_float,
-       slang_spec_vec2,
-       slang_spec_vec3,
-       slang_spec_vec4,
-       slang_spec_mat2,
-       slang_spec_mat3,
-       slang_spec_mat4,
-       slang_spec_sampler1D,
-       slang_spec_sampler2D,
-       slang_spec_sampler3D,
-       slang_spec_samplerCube,
-       slang_spec_sampler1DShadow,
-       slang_spec_sampler2DShadow,
-       slang_spec_struct,
-       slang_spec_array
-} slang_type_specifier_type;
-
-typedef struct slang_type_specifier_
-{
-       slang_type_specifier_type type;
-       struct slang_struct_ *_struct;          /* spec_struct */
-       struct slang_type_specifier_ *_array;   /* spec_array */
-} slang_type_specifier;
-
-typedef struct slang_fully_specified_type_
-{
-       slang_type_qualifier qualifier;
-       slang_type_specifier specifier;
-} slang_fully_specified_type;
-
-typedef struct slang_variable_scope_
-{
-       struct slang_variable_ *variables;
-       unsigned int num_variables;
-       struct slang_variable_scope_ *outer_scope;
-} slang_variable_scope;
-
-typedef enum slang_operation_type_
-{
-       slang_oper_none,
-       slang_oper_block_no_new_scope,
-       slang_oper_block_new_scope,
-       slang_oper_variable_decl,
-       slang_oper_asm,
-       slang_oper_break,
-       slang_oper_continue,
-       slang_oper_discard,
-       slang_oper_return,
-       slang_oper_expression,
-       slang_oper_if,
-       slang_oper_while,
-       slang_oper_do,
-       slang_oper_for,
-       slang_oper_void,
-       slang_oper_literal_bool,
-       slang_oper_literal_int,
-       slang_oper_literal_float,
-       slang_oper_identifier,
-       slang_oper_sequence,
-       slang_oper_assign,
-       slang_oper_addassign,
-       slang_oper_subassign,
-       slang_oper_mulassign,
-       slang_oper_divassign,
-       /*slang_oper_modassign,*/
-       /*slang_oper_lshassign,*/
-       /*slang_oper_rshassign,*/
-       /*slang_oper_orassign,*/
-       /*slang_oper_xorassign,*/
-       /*slang_oper_andassign,*/
-       slang_oper_select,
-       slang_oper_logicalor,
-       slang_oper_logicalxor,
-       slang_oper_logicaland,
-       /*slang_oper_bitor,*/
-       /*slang_oper_bitxor,*/
-       /*slang_oper_bitand,*/
-       slang_oper_equal,
-       slang_oper_notequal,
-       slang_oper_less,
-       slang_oper_greater,
-       slang_oper_lessequal,
-       slang_oper_greaterequal,
-       /*slang_oper_lshift,*/
-       /*slang_oper_rshift,*/
-       slang_oper_add,
-       slang_oper_subtract,
-       slang_oper_multiply,
-       slang_oper_divide,
-       /*slang_oper_modulus,*/
-       slang_oper_preincrement,
-       slang_oper_predecrement,
-       slang_oper_plus,
-       slang_oper_minus,
-       /*slang_oper_complement,*/
-       slang_oper_not,
-       slang_oper_subscript,
-       slang_oper_call,
-       slang_oper_field,
-       slang_oper_postincrement,
-       slang_oper_postdecrement
-} slang_operation_type;
-
-typedef struct slang_operation_
-{
-       slang_operation_type type;
-       struct slang_operation_ *children;
-       unsigned int num_children;
-       float literal;          /* bool, literal_int, literal_float */
-       char *identifier;       /* asm, identifier, call, field */
-       slang_variable_scope *locals;
-} slang_operation;
-
-typedef struct slang_variable_
-{
-       slang_fully_specified_type type;
-       char *name;
-       slang_operation *array_size;    /* spec_array */
-       slang_operation *initializer;
-} slang_variable;
-
-typedef struct slang_struct_scope_
-{
-       struct slang_struct_ *structs;
-       unsigned int num_structs;
-       struct slang_struct_scope_ *outer_scope;
-} slang_struct_scope;
-
-typedef struct slang_struct_
-{
-       char *name;
-       slang_variable_scope *fields;
-       slang_struct_scope *structs;
-} slang_struct;
-
-typedef enum slang_function_kind_
-{
-       slang_func_ordinary,
-       slang_func_constructor,
-       slang_func_operator
-} slang_function_kind;
-
-typedef struct slang_function_
-{
-       slang_function_kind kind;
-       slang_variable header;
-       slang_variable_scope *parameters;
-       unsigned int param_count;
-       slang_operation *body;
-} slang_function;
-
-typedef struct slang_function_scope_
-{
-       slang_function *functions;
-       unsigned int num_functions;
-       struct slang_function_scope_ *outer_scope;
-} slang_function_scope;
-
 typedef enum slang_unit_type_
 {
        slang_unit_fragment_shader,
-       slang_unit_vertex_shader
-} slang_unit_type;
-       
+       slang_unit_vertex_shader,
+       slang_unit_fragment_builtin,
+       slang_unit_vertex_builtin
+} slang_unit_type;\r
+\r
+typedef struct slang_var_pool_\r
+{\r
+       GLuint next_addr;\r
+} slang_var_pool;\r
+\r
 typedef struct slang_translation_unit_
 {
-       slang_variable_scope *globals;
+       slang_variable_scope globals;
        slang_function_scope functions;
-       slang_struct_scope *structs;
-       slang_unit_type type;
+       slang_struct_scope structs;
+       slang_unit_type type;\r
+       slang_assembly_file *assembly;\r
+       int free_assembly;\r
+       slang_var_pool *global_pool;\r
+       int free_global_pool;\r
+       slang_machine *machine;\r
+       int free_machine;\r
+       slang_atom_pool *atom_pool;\r
+       int free_atom_pool;\r
+       slang_export_data_table exp_data;\r
+       slang_export_code_table exp_code;
 } slang_translation_unit;
 
+int slang_translation_unit_construct (slang_translation_unit *);\r
+int slang_translation_unit_construct2 (slang_translation_unit *, slang_assembly_file *,\r
+       slang_var_pool *, slang_machine *, slang_atom_pool *);
+void slang_translation_unit_destruct (slang_translation_unit *);
+
 typedef struct slang_info_log_
 {
        char *text;