123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- /*
- * Mesa 3-D graphics library
- * Version: 6.3
- *
- * Copyright (C) 2005 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.
- */
-
- #if !defined SLANG_COMPILE_H
- #define SLANG_COMPILE_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;
-
- typedef struct slang_translation_unit_
- {
- slang_variable_scope *globals;
- slang_function_scope functions;
- slang_struct_scope *structs;
- slang_unit_type type;
- } slang_translation_unit;
-
- int _slang_compile (const char *, slang_translation_unit *, slang_unit_type type);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
-
|