summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2005-04-14 21:05:55 +0000
committerIan Romanick <[email protected]>2005-04-14 21:05:55 +0000
commit6cae4f3bc9b92f9bbda753843e8ff0f0bbbb8fb3 (patch)
tree20046e523ff4bf96981adb3b6dba8f17cac00840
parentf434e07a6ac849cd127d70eee8b3349da7cfb360 (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.h24
-rw-r--r--src/mesa/glapi/glthread.h7
-rw-r--r--src/mesa/main/context.h25
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. */
/*@{*/