chmod a-x
[mesa.git] / src / mesa / shader / slang / slang_compile.h
index a9a075c37f2a15bcee35198157db8f6265c767d6..8a72f43486a30c26703ae92ac7104775aae9e1f0 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
 
+#include "imports.h"
+#include "mtypes.h"
+#include "slang_export.h"
+#include "slang_execute.h"
+#include "slang_compile_variable.h"
+#include "slang_compile_struct.h"
+#include "slang_compile_operation.h"
+#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;\r
-\r
-slang_type_specifier_type slang_type_specifier_type_from_string (const char *);
-
-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;\r
-\r
-void 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 *);
-
-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_
+typedef enum slang_unit_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;
+       slang_unit_fragment_shader,
+       slang_unit_vertex_shader,
+       slang_unit_fragment_builtin,
+       slang_unit_vertex_builtin
+} slang_unit_type;
 
-typedef struct slang_operation_
+typedef struct slang_var_pool_
 {
-       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;\r
-\r
-int slang_operation_construct_a (slang_operation *);\r
-void slang_operation_destruct (slang_operation *);
+       GLuint next_addr;
+} slang_var_pool;
 
-typedef struct slang_variable_
+typedef struct slang_code_unit_
 {
-       slang_fully_specified_type type;
-       char *name;
-       slang_operation *array_size;    /* spec_array */
-       slang_operation *initializer;\r
-       unsigned int address;
-} slang_variable;\r
-\r
-slang_variable *_slang_locate_variable (slang_variable_scope *scope, const char *name, int all);
+   slang_variable_scope vars;
+   slang_function_scope funs;
+   slang_struct_scope structs;
+   slang_unit_type type;
+   struct slang_code_object_ *object;
+} slang_code_unit;
 
-typedef struct slang_struct_scope_
-{
-       struct slang_struct_ *structs;
-       unsigned int num_structs;
-       struct slang_struct_scope_ *outer_scope;
-} slang_struct_scope;\r
-\r
-struct slang_struct_ *slang_struct_scope_find (slang_struct_scope *, const char *, int);
+extern GLvoid
+_slang_code_unit_ctr (slang_code_unit *, struct slang_code_object_ *);
 
-typedef struct slang_struct_
-{
-       char *name;
-       slang_variable_scope *fields;
-       slang_struct_scope *structs;
-} slang_struct;\r
-\r
-int slang_struct_construct_a (slang_struct *);\r
-int slang_struct_copy (slang_struct *, const slang_struct *);
+extern GLvoid
+_slang_code_unit_dtr (slang_code_unit *);
 
-typedef enum slang_function_kind_
-{
-       slang_func_ordinary,
-       slang_func_constructor,
-       slang_func_operator
-} slang_function_kind;
+#define SLANG_BUILTIN_CORE   0
+#define SLANG_BUILTIN_COMMON 1
+#define SLANG_BUILTIN_TARGET 2
 
-typedef struct slang_function_
-{
-       slang_function_kind kind;
-       slang_variable header;
-       slang_variable_scope *parameters;
-       unsigned int param_count;
-       slang_operation *body;\r
-       unsigned int address;
-} slang_function;
+#if defined(USE_X86_ASM) || defined(SLANG_X86)
+#define SLANG_BUILTIN_VEC4   3
+#define SLANG_BUILTIN_TOTAL  4
+#else
+#define SLANG_BUILTIN_TOTAL  3
+#endif
 
-typedef struct slang_function_scope_
+typedef struct slang_code_object_
 {
-       slang_function *functions;
-       unsigned int num_functions;
-       struct slang_function_scope_ *outer_scope;
-} slang_function_scope;
+   slang_code_unit builtin[SLANG_BUILTIN_TOTAL];
+   slang_code_unit unit;
+   slang_assembly_file assembly;
+   slang_machine machine;
+   slang_var_pool varpool;
+   slang_atom_pool atompool;
+   slang_export_data_table expdata;
+   slang_export_code_table expcode;
+} slang_code_object;
 
-typedef enum slang_unit_type_
-{
-       slang_unit_fragment_shader,
-       slang_unit_vertex_shader,
-       slang_unit_fragment_builtin,
-       slang_unit_vertex_builtin
-} slang_unit_type;
-       
-typedef struct slang_translation_unit_
-{
-       slang_variable_scope globals;
-       slang_function_scope functions;
-       slang_struct_scope structs;
-       slang_unit_type type;
-} slang_translation_unit;
+extern GLvoid
+_slang_code_object_ctr (slang_code_object *);
 
-void slang_translation_unit_construct (slang_translation_unit *);
-void slang_translation_unit_destruct (slang_translation_unit *);
+extern GLvoid
+_slang_code_object_dtr (slang_code_object *);
 
 typedef struct slang_info_log_
 {
@@ -257,11 +103,13 @@ typedef struct slang_info_log_
 
 void slang_info_log_construct (slang_info_log *);
 void slang_info_log_destruct (slang_info_log *);
+int slang_info_log_print (slang_info_log *, const char *, ...);
 int slang_info_log_error (slang_info_log *, const char *, ...);
 int slang_info_log_warning (slang_info_log *, const char *, ...);
 void slang_info_log_memory (slang_info_log *);
 
-int _slang_compile (const char *, slang_translation_unit *, slang_unit_type type, slang_info_log *);
+extern GLboolean
+_slang_compile (const char *, slang_code_object *, slang_unit_type, slang_info_log *, struct gl_shader *shader);
 
 #ifdef __cplusplus
 }