In GLX_USE_TLS builds, make GET_CURRENT_CONTEXT use the TLS verion of the
authorIan Romanick <idr@us.ibm.com>
Thu, 14 Apr 2005 21:05:55 +0000 (21:05 +0000)
committerIan Romanick <idr@us.ibm.com>
Thu, 14 Apr 2005 21:05:55 +0000 (21:05 +0000)
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).

src/mesa/glapi/glapi.h
src/mesa/glapi/glthread.h
src/mesa/main/context.h

index e3ef066e6993b8e1fe33f942f762f1c2f9252a19..fa4554ec7ba19e239aa3ddf738e85a2be17f6f3c 100644 (file)
@@ -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
index 615d169986d12170e0f27f2dc2020ca8cdb6bbca..291485dc205d0c38394a458e99f9cc3641a020be 100644 (file)
 #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
index c59a8b2118671c5ae06e4f81141a50d177b708a4..daab59ce6b43f4811006ec62f99b8c5f8625c3c7 100644 (file)
@@ -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. */
 /*@{*/