diff options
author | Ian Romanick <[email protected]> | 2005-04-14 21:05:55 +0000 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2005-04-14 21:05:55 +0000 |
commit | 6cae4f3bc9b92f9bbda753843e8ff0f0bbbb8fb3 (patch) | |
tree | 20046e523ff4bf96981adb3b6dba8f17cac00840 | |
parent | f434e07a6ac849cd127d70eee8b3349da7cfb360 (diff) |
In GLX_USE_TLS builds, make GET_CURRENT_CONTEXT use the TLS verion of the
variable. Without this, GET_CURRENT_CONTEXT would *always* result in a call
to _glapi_get_context (because _glapi_Context is a const pointer to NULL in
TLS builds).
-rw-r--r-- | src/mesa/glapi/glapi.h | 24 | ||||
-rw-r--r-- | src/mesa/glapi/glthread.h | 7 | ||||
-rw-r--r-- | src/mesa/main/context.h | 25 |
3 files changed, 28 insertions, 28 deletions
diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h index e3ef066e699..fa4554ec7ba 100644 --- a/src/mesa/glapi/glapi.h +++ b/src/mesa/glapi/glapi.h @@ -59,11 +59,35 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */ const extern void *_glapi_Context; const extern struct _glapi_table *_glapi_Dispatch; +extern __thread void * _glapi_tls_Context + __attribute__((tls_model("initial-exec"))); + +# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_tls_Context + #else extern void *_glapi_Context; extern struct _glapi_table *_glapi_Dispatch; +/** + * Macro for declaration and fetching the current context. + * + * \param C local variable which will hold the current context. + * + * It should be used in the variable declaration area of a function: + * \code + * ... + * { + * GET_CURRENT_CONTEXT(ctx); + * ... + * \endcode + */ +# ifdef THREADS +# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context()) +# else +# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_Context +# endif + #endif /* defined (GLX_USE_TLS) */ extern void diff --git a/src/mesa/glapi/glthread.h b/src/mesa/glapi/glthread.h index 615d169986d..291485dc205 100644 --- a/src/mesa/glapi/glthread.h +++ b/src/mesa/glapi/glthread.h @@ -64,9 +64,10 @@ #define GLTHREAD_H -#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || \ - defined(XTHREADS) || defined(BEOS_THREADS) -#define THREADS +#if (defined(PTHREADS) || defined(SOLARIS_THREADS) ||\ + defined(WIN32_THREADS) || defined(XTHREADS) || defined(BEOS_THREADS)) \ + && !defined(THREADS) +# define THREADS #endif #ifdef VMS diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index c59a8b21186..daab59ce6b4 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -169,31 +169,6 @@ _mesa_get_current_context(void); /*@}*/ -/** - * Macro for declaration and fetching the current context. - * - * \param C local variable which will hold the current context. - * - * It should be used in the variable declaration area of a function: - * \code - * ... - * { - * GET_CURRENT_CONTEXT(ctx); - * ... - * \endcode - */ -#ifdef THREADS - -#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context()) - -#else - -#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_Context - -#endif - - - /**********************************************************************/ /** \name OpenGL SI-style export functions. */ /*@{*/ |