4 #ifdef MAPI_GLAPI_CURRENT
6 #include "glapi/glapi.h"
8 /* ugly renames to match glapi.h */
9 #define mapi_table _glapi_table
11 #define u_current_table_tls _glapi_tls_Dispatch
12 #define u_current_user_tls _glapi_tls_Context
13 #define u_current_table _glapi_Dispatch
14 #define u_current_user _glapi_Context
16 #define u_current_destroy _glapi_destroy_multithread
17 #define u_current_init _glapi_check_multithread
18 #define u_current_set_internal _glapi_set_dispatch
19 #define u_current_get_internal _glapi_get_dispatch
20 #define u_current_set_user_internal _glapi_set_context
21 #define u_current_get_user_internal _glapi_get_context
23 #define u_current_table_tsd _gl_DispatchTSD
25 #else /* MAPI_GLAPI_CURRENT */
27 #include "u_compiler.h"
33 extern __thread
struct mapi_table
*u_current_table_tls
34 __attribute__((tls_model("initial-exec")));
36 extern __thread
void *u_current_user_tls
37 __attribute__((tls_model("initial-exec")));
39 extern const struct mapi_table
*u_current_table
;
40 extern const void *u_current_user
;
42 #else /* GLX_USE_TLS */
44 extern struct mapi_table
*u_current_table
;
45 extern void *u_current_user
;
47 #endif /* GLX_USE_TLS */
53 u_current_destroy(void);
56 u_current_set_internal(struct mapi_table
*tbl
);
59 u_current_get_internal(void);
62 u_current_set_user_internal(void *ptr
);
65 u_current_get_user_internal(void);
68 u_current_set(const struct mapi_table
*tbl
)
70 u_current_set_internal((struct mapi_table
*) tbl
);
73 static INLINE
const struct mapi_table
*
77 return (const struct mapi_table
*) u_current_table_tls
;
79 return (likely(u_current_table
) ?
80 (const struct mapi_table
*) u_current_table
: u_current_get_internal());
85 u_current_set_user(void *ptr
)
87 u_current_set_internal(ptr
);
91 u_current_get_user(void)
94 return u_current_user_tls
;
96 return likely(u_current_user
) ? u_current_user
: u_current_get_user_internal();
100 #endif /* MAPI_GLAPI_CURRENT */
102 #endif /* _U_CURRENT_H_ */