fix comments
[mesa.git] / src / mesa / shader / slang / slang_execute.h
1 /*
2 * Mesa 3-D graphics library
3 * Version: 6.5.2
4 *
5 * Copyright (C) 2005-2006 Brian Paul All Rights Reserved.
6 *
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:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
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.
23 */
24
25 #ifndef SLANG_EXECUTE_H
26 #define SLANG_EXECUTE_H
27
28 #include "slang_assemble.h"
29
30 #if defined __cplusplus
31 extern "C" {
32 #endif
33
34
35 /**
36 * A memory location
37 */
38 typedef union slang_machine_slot_
39 {
40 GLfloat _float;
41 GLuint _addr;
42 } slang_machine_slot;
43
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)
47
48
49 #if defined(USE_X86_ASM) || defined(SLANG_X86)
50 /**
51 * Extra machine state for x86 execution.
52 */
53 typedef struct
54 {
55 GLvoid(*compiled_func) (struct slang_machine_ *);
56 GLuint esp_restore;
57 GLshort fpucntl_rnd_neg;
58 GLshort fpucntl_restore;
59 } slang_machine_x86;
60 #endif
61
62
63 /**
64 * Runtime shader machine state.
65 */
66 typedef struct slang_machine_
67 {
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 */
73 /** Machine memory */
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;
78 #endif
79 } slang_machine;
80
81
82 extern GLvoid
83 slang_machine_ctr(slang_machine *);
84
85 extern GLvoid
86 slang_machine_dtr(slang_machine *);
87
88 extern void
89 slang_machine_init(slang_machine *);
90
91 extern GLboolean
92 _slang_execute2(const slang_assembly_file *, slang_machine *);
93
94
95 #if defined(USE_X86_ASM) || defined(SLANG_X86)
96 extern GLboolean
97 _slang_x86_codegen(slang_machine *, slang_assembly_file *, GLuint);
98 #endif
99
100
101 #ifdef __cplusplus
102 }
103 #endif
104
105 #endif