2 * Mesa 3-D graphics library
5 * Copyright (C) 2005-2006 Brian Paul All Rights Reserved.
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 #ifndef SLANG_EXECUTE_H
26 #define SLANG_EXECUTE_H
28 #include "slang_assemble.h"
30 #if defined __cplusplus
38 typedef union slang_machine_slot_
44 #define SLANG_MACHINE_GLOBAL_SIZE 3072
45 #define SLANG_MACHINE_STACK_SIZE 1024
46 #define SLANG_MACHINE_MEMORY_SIZE (SLANG_MACHINE_GLOBAL_SIZE + SLANG_MACHINE_STACK_SIZE)
49 #if defined(USE_X86_ASM) || defined(SLANG_X86)
51 * Extra machine state for x86 execution.
55 GLvoid(*compiled_func
) (struct slang_machine_
*);
57 GLshort fpucntl_rnd_neg
;
58 GLshort fpucntl_restore
;
64 * Runtime shader machine state.
66 typedef struct slang_machine_
68 GLuint ip
; /**< instruction pointer, for flow control */
69 GLuint sp
; /**< stack pointer, for stack access */
70 GLuint bp
; /**< base pointer, for local variable access */
71 GLboolean kill
; /**< discard the fragment? */
72 GLboolean exit
; /**< terminate the shader */
74 slang_machine_slot mem
[SLANG_MACHINE_MEMORY_SIZE
];
75 struct slang_info_log_
*infolog
; /**< printMESA() support */
76 #if defined(USE_X86_ASM) || defined(SLANG_X86)
77 slang_machine_x86 x86
;
83 slang_machine_ctr(slang_machine
*);
86 slang_machine_dtr(slang_machine
*);
89 slang_machine_init(slang_machine
*);
92 _slang_execute2(const slang_assembly_file
*, slang_machine
*);
95 #if defined(USE_X86_ASM) || defined(SLANG_X86)
97 _slang_x86_codegen(slang_machine
*, slang_assembly_file
*, GLuint
);