u_current.h revision 848b8605
1848b8605Smrg#ifndef _U_CURRENT_H_ 2848b8605Smrg#define _U_CURRENT_H_ 3848b8605Smrg 4848b8605Smrg#if defined(MAPI_MODE_UTIL) || defined(MAPI_MODE_GLAPI) || \ 5848b8605Smrg defined(MAPI_MODE_BRIDGE) 6848b8605Smrg 7848b8605Smrg#include "glapi/glapi.h" 8848b8605Smrg 9848b8605Smrg/* ugly renames to match glapi.h */ 10848b8605Smrg#define mapi_table _glapi_table 11848b8605Smrg 12848b8605Smrg#ifdef GLX_USE_TLS 13848b8605Smrg#define u_current_table _glapi_tls_Dispatch 14848b8605Smrg#define u_current_context _glapi_tls_Context 15848b8605Smrg#else 16848b8605Smrg#define u_current_table _glapi_Dispatch 17848b8605Smrg#define u_current_context _glapi_Context 18848b8605Smrg#endif 19848b8605Smrg 20848b8605Smrg#define u_current_get_table_internal _glapi_get_dispatch 21848b8605Smrg#define u_current_get_context_internal _glapi_get_context 22848b8605Smrg 23848b8605Smrg#define u_current_table_tsd _gl_DispatchTSD 24848b8605Smrg 25848b8605Smrg#else /* MAPI_MODE_UTIL || MAPI_MODE_GLAPI || MAPI_MODE_BRIDGE */ 26848b8605Smrg 27848b8605Smrg#include "u_compiler.h" 28848b8605Smrg 29848b8605Smrgstruct mapi_table; 30848b8605Smrg 31848b8605Smrg#ifdef GLX_USE_TLS 32848b8605Smrg 33848b8605Smrgextern __thread struct mapi_table *u_current_table 34848b8605Smrg __attribute__((tls_model("initial-exec"))); 35848b8605Smrg 36848b8605Smrgextern __thread void *u_current_context 37848b8605Smrg __attribute__((tls_model("initial-exec"))); 38848b8605Smrg 39848b8605Smrg#else /* GLX_USE_TLS */ 40848b8605Smrg 41848b8605Smrgextern struct mapi_table *u_current_table; 42848b8605Smrgextern void *u_current_context; 43848b8605Smrg 44848b8605Smrg#endif /* GLX_USE_TLS */ 45848b8605Smrg 46848b8605Smrg#endif /* MAPI_MODE_UTIL || MAPI_MODE_GLAPI || MAPI_MODE_BRIDGE */ 47848b8605Smrg 48848b8605Smrgvoid 49848b8605Smrgu_current_init(void); 50848b8605Smrg 51848b8605Smrgvoid 52848b8605Smrgu_current_destroy(void); 53848b8605Smrg 54848b8605Smrgvoid 55848b8605Smrgu_current_set_table(const struct mapi_table *tbl); 56848b8605Smrg 57848b8605Smrgstruct mapi_table * 58848b8605Smrgu_current_get_table_internal(void); 59848b8605Smrg 60848b8605Smrgvoid 61848b8605Smrgu_current_set_context(const void *ptr); 62848b8605Smrg 63848b8605Smrgvoid * 64848b8605Smrgu_current_get_context_internal(void); 65848b8605Smrg 66848b8605Smrgstatic INLINE const struct mapi_table * 67848b8605Smrgu_current_get_table(void) 68848b8605Smrg{ 69848b8605Smrg#ifdef GLX_USE_TLS 70848b8605Smrg return u_current_table; 71848b8605Smrg#else 72848b8605Smrg return (likely(u_current_table) ? 73848b8605Smrg u_current_table : u_current_get_table_internal()); 74848b8605Smrg#endif 75848b8605Smrg} 76848b8605Smrg 77848b8605Smrgstatic INLINE const void * 78848b8605Smrgu_current_get_context(void) 79848b8605Smrg{ 80848b8605Smrg#ifdef GLX_USE_TLS 81848b8605Smrg return u_current_context; 82848b8605Smrg#else 83848b8605Smrg return likely(u_current_context) ? u_current_context : u_current_get_context_internal(); 84848b8605Smrg#endif 85848b8605Smrg} 86848b8605Smrg 87848b8605Smrg#endif /* _U_CURRENT_H_ */ 88