Rev 4358 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4358 | Rev 4548 | ||
---|---|---|---|
1 | /* |
1 | /* |
2 | * Mesa 3-D graphics library |
2 | * Mesa 3-D graphics library |
3 | * |
3 | * |
4 | * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. |
4 | * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. |
5 | * |
5 | * |
6 | * Permission is hereby granted, free of charge, to any person obtaining a |
6 | * Permission is hereby granted, free of charge, to any person obtaining a |
7 | * copy of this software and associated documentation files (the "Software"), |
7 | * copy of this software and associated documentation files (the "Software"), |
8 | * to deal in the Software without restriction, including without limitation |
8 | * to deal in the Software without restriction, including without limitation |
9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
10 | * and/or sell copies of the Software, and to permit persons to whom the |
10 | * and/or sell copies of the Software, and to permit persons to whom the |
11 | * Software is furnished to do so, subject to the following conditions: |
11 | * Software is furnished to do so, subject to the following conditions: |
12 | * |
12 | * |
13 | * The above copyright notice and this permission notice shall be included |
13 | * The above copyright notice and this permission notice shall be included |
14 | * in all copies or substantial portions of the Software. |
14 | * in all copies or substantial portions of the Software. |
15 | * |
15 | * |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
19 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR |
19 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR |
20 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
20 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
22 | * OTHER DEALINGS IN THE SOFTWARE. |
22 | * OTHER DEALINGS IN THE SOFTWARE. |
23 | */ |
23 | */ |
24 | 24 | ||
25 | 25 | ||
26 | /** |
26 | /** |
27 | * \mainpage Mesa GL API Module |
27 | * \mainpage Mesa GL API Module |
28 | * |
28 | * |
29 | * \section GLAPIIntroduction Introduction |
29 | * \section GLAPIIntroduction Introduction |
30 | * |
30 | * |
31 | * The Mesa GL API module is responsible for dispatching all the |
31 | * The Mesa GL API module is responsible for dispatching all the |
32 | * gl*() functions. All GL functions are dispatched by jumping through |
32 | * gl*() functions. All GL functions are dispatched by jumping through |
33 | * the current dispatch table (basically a struct full of function |
33 | * the current dispatch table (basically a struct full of function |
34 | * pointers.) |
34 | * pointers.) |
35 | * |
35 | * |
36 | * A per-thread current dispatch table and per-thread current context |
36 | * A per-thread current dispatch table and per-thread current context |
37 | * pointer are managed by this module too. |
37 | * pointer are managed by this module too. |
38 | * |
38 | * |
39 | * This module is intended to be non-Mesa-specific so it can be used |
39 | * This module is intended to be non-Mesa-specific so it can be used |
40 | * with the X/DRI libGL also. |
40 | * with the X/DRI libGL also. |
41 | */ |
41 | */ |
42 | 42 | ||
43 | 43 | ||
44 | #ifndef _GLAPI_H |
44 | #ifndef _GLAPI_H |
45 | #define _GLAPI_H |
45 | #define _GLAPI_H |
46 | 46 | ||
47 | #include "glapi/glthread.h" |
47 | #include "glapi/glthread.h" |
48 | 48 | ||
49 | 49 | ||
50 | #ifdef __cplusplus |
50 | #ifdef __cplusplus |
51 | extern "C" { |
51 | extern "C" { |
52 | #endif |
52 | #endif |
53 | - | ||
54 | - | ||
55 | #ifdef _GLAPI_NO_EXPORTS |
- | |
56 | # define _GLAPI_EXPORT |
- | |
57 | #else /* _GLAPI_NO_EXPORTS */ |
- | |
58 | # ifdef _WIN32 |
53 | |
59 | # ifdef _GLAPI_DLL_EXPORTS |
54 | #ifdef _GLAPI_DLL_EXPORTS |
60 | # define _GLAPI_EXPORT __declspec(dllexport) |
55 | # define _GLAPI_EXPORT __declspec(dllexport) |
61 | # else |
56 | #else |
62 | # define _GLAPI_EXPORT __declspec(dllimport) |
57 | # define _GLAPI_EXPORT __declspec(dllimport) |
63 | # endif |
58 | #endif |
64 | # elif defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) |
- | |
65 | # define _GLAPI_EXPORT __attribute__((visibility("default"))) |
- | |
66 | # else |
- | |
67 | # define _GLAPI_EXPORT |
- | |
68 | # endif |
- | |
69 | #endif /* _GLAPI_NO_EXPORTS */ |
- | |
70 | 59 | ||
71 | 60 | ||
72 | /* Is this needed? It is incomplete anyway. */ |
61 | /* Is this needed? It is incomplete anyway. */ |
73 | #ifdef USE_MGL_NAMESPACE |
62 | #ifdef USE_MGL_NAMESPACE |
74 | #define _glapi_set_dispatch _mglapi_set_dispatch |
63 | #define _glapi_set_dispatch _mglapi_set_dispatch |
75 | #define _glapi_get_dispatch _mglapi_get_dispatch |
64 | #define _glapi_get_dispatch _mglapi_get_dispatch |
76 | #define _glapi_set_context _mglapi_set_context |
65 | #define _glapi_set_context _mglapi_set_context |
77 | #define _glapi_get_context _mglapi_get_context |
66 | #define _glapi_get_context _mglapi_get_context |
78 | #define _glapi_Dispatch _mglapi_Dispatch |
67 | #define _glapi_Dispatch _mglapi_Dispatch |
79 | #define _glapi_Context _mglapi_Context |
68 | #define _glapi_Context _mglapi_Context |
80 | #endif |
69 | #endif |
81 | 70 | ||
82 | typedef void (*_glapi_proc)(void); |
71 | typedef void (*_glapi_proc)(void); |
83 | struct _glapi_table; |
72 | struct _glapi_table; |
84 | 73 | ||
85 | 74 | ||
86 | #if defined (GLX_USE_TLS) |
75 | #if defined (GLX_USE_TLS) |
87 | 76 | ||
88 | _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch |
77 | _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch |
89 | __attribute__((tls_model("initial-exec"))); |
78 | __attribute__((tls_model("initial-exec"))); |
90 | 79 | ||
91 | _GLAPI_EXPORT extern __thread void * _glapi_tls_Context |
80 | _GLAPI_EXPORT extern __thread void * _glapi_tls_Context |
92 | __attribute__((tls_model("initial-exec"))); |
81 | __attribute__((tls_model("initial-exec"))); |
93 | 82 | ||
94 | _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch; |
83 | _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch; |
95 | _GLAPI_EXPORT extern const void *_glapi_Context; |
84 | _GLAPI_EXPORT extern const void *_glapi_Context; |
96 | 85 | ||
97 | # define GET_DISPATCH() _glapi_tls_Dispatch |
86 | # define GET_DISPATCH() _glapi_tls_Dispatch |
98 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_tls_Context |
87 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_tls_Context |
99 | 88 | ||
100 | #else |
89 | #else |
101 | 90 | ||
102 | _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch; |
91 | _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch; |
103 | _GLAPI_EXPORT extern void *_glapi_Context; |
92 | _GLAPI_EXPORT extern void *_glapi_Context; |
104 | 93 | ||
105 | # ifdef THREADS |
94 | # ifdef THREADS |
106 | 95 | ||
107 | # define GET_DISPATCH() \ |
96 | # define GET_DISPATCH() \ |
108 | (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch()) |
97 | (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch()) |
109 | 98 | ||
110 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) \ |
99 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) \ |
111 | (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context()) |
100 | (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context()) |
112 | 101 | ||
113 | # else |
102 | # else |
114 | 103 | ||
115 | # define GET_DISPATCH() _glapi_Dispatch |
104 | # define GET_DISPATCH() _glapi_Dispatch |
116 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_Context |
105 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_Context |
117 | 106 | ||
118 | # endif |
107 | # endif |
119 | 108 | ||
120 | #endif /* defined (GLX_USE_TLS) */ |
109 | #endif /* defined (GLX_USE_TLS) */ |
121 | 110 | ||
122 | 111 | ||
123 | void |
112 | void |
124 | _glapi_destroy_multithread(void); |
113 | _glapi_destroy_multithread(void); |
125 | 114 | ||
126 | 115 | ||
127 | _GLAPI_EXPORT void |
116 | _GLAPI_EXPORT void |
128 | _glapi_check_multithread(void); |
117 | _glapi_check_multithread(void); |
129 | 118 | ||
130 | 119 | ||
131 | _GLAPI_EXPORT void |
120 | _GLAPI_EXPORT void |
132 | _glapi_set_context(void *context); |
121 | _glapi_set_context(void *context); |
133 | 122 | ||
134 | 123 | ||
135 | _GLAPI_EXPORT void * |
124 | _GLAPI_EXPORT void * |
136 | _glapi_get_context(void); |
125 | _glapi_get_context(void); |
137 | 126 | ||
138 | 127 | ||
139 | _GLAPI_EXPORT void |
128 | _GLAPI_EXPORT void |
140 | _glapi_set_dispatch(struct _glapi_table *dispatch); |
129 | _glapi_set_dispatch(struct _glapi_table *dispatch); |
141 | 130 | ||
142 | 131 | ||
143 | _GLAPI_EXPORT struct _glapi_table * |
132 | _GLAPI_EXPORT struct _glapi_table * |
144 | _glapi_get_dispatch(void); |
133 | _glapi_get_dispatch(void); |
145 | 134 | ||
146 | 135 | ||
147 | _GLAPI_EXPORT unsigned int |
136 | _GLAPI_EXPORT unsigned int |
148 | _glapi_get_dispatch_table_size(void); |
137 | _glapi_get_dispatch_table_size(void); |
149 | 138 | ||
150 | 139 | ||
151 | _GLAPI_EXPORT int |
140 | _GLAPI_EXPORT int |
152 | _glapi_add_dispatch( const char * const * function_names, |
141 | _glapi_add_dispatch( const char * const * function_names, |
153 | const char * parameter_signature ); |
142 | const char * parameter_signature ); |
154 | 143 | ||
155 | _GLAPI_EXPORT int |
144 | _GLAPI_EXPORT int |
156 | _glapi_get_proc_offset(const char *funcName); |
145 | _glapi_get_proc_offset(const char *funcName); |
157 | 146 | ||
158 | 147 | ||
159 | _GLAPI_EXPORT _glapi_proc |
148 | _GLAPI_EXPORT _glapi_proc |
160 | _glapi_get_proc_address(const char *funcName); |
149 | _glapi_get_proc_address(const char *funcName); |
161 | 150 | ||
162 | 151 | ||
163 | _GLAPI_EXPORT const char * |
152 | _GLAPI_EXPORT const char * |
164 | _glapi_get_proc_name(unsigned int offset); |
153 | _glapi_get_proc_name(unsigned int offset); |
165 | 154 | ||
166 | 155 | ||
167 | _GLAPI_EXPORT struct _glapi_table * |
156 | _GLAPI_EXPORT struct _glapi_table * |
168 | _glapi_create_table_from_handle(void *handle, const char *symbol_prefix); |
157 | _glapi_create_table_from_handle(void *handle, const char *symbol_prefix); |
169 | 158 | ||
170 | 159 | ||
171 | _GLAPI_EXPORT unsigned long |
160 | _GLAPI_EXPORT unsigned long |
172 | _glthread_GetID(void); |
161 | _glthread_GetID(void); |
173 | 162 | ||
174 | 163 | ||
175 | /* |
164 | /* |
176 | * These stubs are kept so that the old DRI drivers still load. |
165 | * These stubs are kept so that the old DRI drivers still load. |
177 | */ |
166 | */ |
178 | _GLAPI_EXPORT void |
167 | _GLAPI_EXPORT void |
179 | _glapi_noop_enable_warnings(unsigned char enable); |
168 | _glapi_noop_enable_warnings(unsigned char enable); |
180 | 169 | ||
181 | 170 | ||
182 | _GLAPI_EXPORT void |
171 | _GLAPI_EXPORT void |
183 | _glapi_set_warning_func(_glapi_proc func); |
172 | _glapi_set_warning_func(_glapi_proc func); |
184 | 173 | ||
185 | 174 | ||
186 | #ifdef __cplusplus |
175 | #ifdef __cplusplus |
187 | } |
176 | } |
188 | #endif |
177 | #endif |
189 | 178 | ||
190 | #endif /* _GLAPI_H */ |
179 | #endif /* _GLAPI_H */ |