Rev 4358 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4358 | Serge | 1 | /* |
2 | * Mesa 3-D graphics library |
||
3 | * |
||
4 | * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. |
||
5 | * |
||
6 | * Permission is hereby granted, free of charge, to any person obtaining a |
||
7 | * copy of this software and associated documentation files (the "Software"), |
||
8 | * to deal in the Software without restriction, including without limitation |
||
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 |
||
11 | * Software is furnished to do so, subject to the following conditions: |
||
12 | * |
||
13 | * The above copyright notice and this permission notice shall be included |
||
14 | * in all copies or substantial portions of the Software. |
||
15 | * |
||
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, |
||
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 |
||
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 |
||
22 | * OTHER DEALINGS IN THE SOFTWARE. |
||
23 | */ |
||
24 | |||
25 | |||
26 | /** |
||
27 | * \mainpage Mesa GL API Module |
||
28 | * |
||
29 | * \section GLAPIIntroduction Introduction |
||
30 | * |
||
31 | * The Mesa GL API module is responsible for dispatching all the |
||
32 | * gl*() functions. All GL functions are dispatched by jumping through |
||
33 | * the current dispatch table (basically a struct full of function |
||
34 | * pointers.) |
||
35 | * |
||
36 | * A per-thread current dispatch table and per-thread current context |
||
37 | * pointer are managed by this module too. |
||
38 | * |
||
39 | * This module is intended to be non-Mesa-specific so it can be used |
||
40 | * with the X/DRI libGL also. |
||
41 | */ |
||
42 | |||
43 | |||
44 | #ifndef _GLAPI_H |
||
45 | #define _GLAPI_H |
||
46 | |||
47 | #include "glapi/glthread.h" |
||
48 | |||
49 | |||
50 | #ifdef __cplusplus |
||
51 | extern "C" { |
||
52 | #endif |
||
53 | |||
4548 | Serge | 54 | #ifdef _GLAPI_DLL_EXPORTS |
55 | # define _GLAPI_EXPORT __declspec(dllexport) |
||
56 | #else |
||
57 | # define _GLAPI_EXPORT __declspec(dllimport) |
||
58 | #endif |
||
4358 | Serge | 59 | |
60 | |||
61 | /* Is this needed? It is incomplete anyway. */ |
||
62 | #ifdef USE_MGL_NAMESPACE |
||
63 | #define _glapi_set_dispatch _mglapi_set_dispatch |
||
64 | #define _glapi_get_dispatch _mglapi_get_dispatch |
||
65 | #define _glapi_set_context _mglapi_set_context |
||
66 | #define _glapi_get_context _mglapi_get_context |
||
67 | #define _glapi_Dispatch _mglapi_Dispatch |
||
68 | #define _glapi_Context _mglapi_Context |
||
69 | #endif |
||
70 | |||
71 | typedef void (*_glapi_proc)(void); |
||
72 | struct _glapi_table; |
||
73 | |||
74 | |||
75 | #if defined (GLX_USE_TLS) |
||
76 | |||
77 | _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch |
||
78 | __attribute__((tls_model("initial-exec"))); |
||
79 | |||
80 | _GLAPI_EXPORT extern __thread void * _glapi_tls_Context |
||
81 | __attribute__((tls_model("initial-exec"))); |
||
82 | |||
83 | _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch; |
||
84 | _GLAPI_EXPORT extern const void *_glapi_Context; |
||
85 | |||
86 | # define GET_DISPATCH() _glapi_tls_Dispatch |
||
87 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_tls_Context |
||
88 | |||
89 | #else |
||
90 | |||
91 | _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch; |
||
92 | _GLAPI_EXPORT extern void *_glapi_Context; |
||
93 | |||
94 | # ifdef THREADS |
||
95 | |||
96 | # define GET_DISPATCH() \ |
||
97 | (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch()) |
||
98 | |||
99 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) \ |
||
100 | (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context()) |
||
101 | |||
102 | # else |
||
103 | |||
104 | # define GET_DISPATCH() _glapi_Dispatch |
||
105 | # define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_Context |
||
106 | |||
107 | # endif |
||
108 | |||
109 | #endif /* defined (GLX_USE_TLS) */ |
||
110 | |||
111 | |||
112 | void |
||
113 | _glapi_destroy_multithread(void); |
||
114 | |||
115 | |||
116 | _GLAPI_EXPORT void |
||
117 | _glapi_check_multithread(void); |
||
118 | |||
119 | |||
120 | _GLAPI_EXPORT void |
||
121 | _glapi_set_context(void *context); |
||
122 | |||
123 | |||
124 | _GLAPI_EXPORT void * |
||
125 | _glapi_get_context(void); |
||
126 | |||
127 | |||
128 | _GLAPI_EXPORT void |
||
129 | _glapi_set_dispatch(struct _glapi_table *dispatch); |
||
130 | |||
131 | |||
132 | _GLAPI_EXPORT struct _glapi_table * |
||
133 | _glapi_get_dispatch(void); |
||
134 | |||
135 | |||
136 | _GLAPI_EXPORT unsigned int |
||
137 | _glapi_get_dispatch_table_size(void); |
||
138 | |||
139 | |||
140 | _GLAPI_EXPORT int |
||
141 | _glapi_add_dispatch( const char * const * function_names, |
||
142 | const char * parameter_signature ); |
||
143 | |||
144 | _GLAPI_EXPORT int |
||
145 | _glapi_get_proc_offset(const char *funcName); |
||
146 | |||
147 | |||
148 | _GLAPI_EXPORT _glapi_proc |
||
149 | _glapi_get_proc_address(const char *funcName); |
||
150 | |||
151 | |||
152 | _GLAPI_EXPORT const char * |
||
153 | _glapi_get_proc_name(unsigned int offset); |
||
154 | |||
155 | |||
156 | _GLAPI_EXPORT struct _glapi_table * |
||
157 | _glapi_create_table_from_handle(void *handle, const char *symbol_prefix); |
||
158 | |||
159 | |||
160 | _GLAPI_EXPORT unsigned long |
||
161 | _glthread_GetID(void); |
||
162 | |||
163 | |||
164 | /* |
||
165 | * These stubs are kept so that the old DRI drivers still load. |
||
166 | */ |
||
167 | _GLAPI_EXPORT void |
||
168 | _glapi_noop_enable_warnings(unsigned char enable); |
||
169 | |||
170 | |||
171 | _GLAPI_EXPORT void |
||
172 | _glapi_set_warning_func(_glapi_proc func); |
||
173 | |||
174 | |||
175 | #ifdef __cplusplus |
||
176 | } |
||
177 | #endif |
||
178 | |||
179 | #endif /* _GLAPI_H */ |