Revert "glx: remove support for non-multithreaded platforms"
authorEmil Velikov <emil.l.velikov@gmail.com>
Fri, 6 Mar 2015 17:07:11 +0000 (17:07 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Fri, 6 Mar 2015 17:07:11 +0000 (17:07 +0000)
This reverts commit 38591295cd4b68f89f257b20f476f98de3772a47.

Not meant to go in yet. Lacking review.

docs/dispatch.html
src/glx/glxclient.h
src/glx/glxcurrent.c
src/glx/tests/fake_glx_screen.cpp

index 77cfba3221f39ba0a055240e987c1700bc03927c..aacd01e0c65682b6186b54472e37a96f8e0bb24b 100644 (file)
@@ -185,6 +185,8 @@ ways that the dispatch table pointer can be accessed.  There are four
 different methods that can be used:</p>
 
 <ol>
+<li>Using <tt>_glapi_Dispatch</tt> directly in builds for non-multithreaded
+environments.</li>
 <li>Using <tt>_glapi_Dispatch</tt> and <tt>_glapi_get_dispatch</tt> in
 multithreaded environments.</li>
 <li>Using <tt>_glapi_Dispatch</tt> and <tt>pthread_getspecific</tt> in
@@ -202,8 +204,9 @@ terribly relevant.</p>
 few preprocessor defines.</p>
 
 <ul>
-<li>If <tt>GLX_USE_TLS</tt> is defined, method #3 is used.</li>
-<li>If <tt>HAVE_PTHREAD</tt> is defined, method #2 is used.</li>
+<li>If <tt>GLX_USE_TLS</tt> is defined, method #4 is used.</li>
+<li>If <tt>HAVE_PTHREAD</tt> is defined, method #3 is used.</li>
+<li>If <tt>WIN32_THREADS</tt> is defined, method #2 is used.</li>
 <li>If none of the preceding are defined, method #1 is used.</li>
 </ul>
 
index 30c9e52139543cc923589d95d99c59643a39ba22..122ae5dd1b774946abb5c09ccff001b79ff81111 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <pthread.h>
 #include <stdint.h>
 #include "GL/glxproto.h"
 #include "glxconfig.h"
 #include "glxhash.h"
+#if defined( HAVE_PTHREAD )
+# include <pthread.h>
+#endif
 #include "util/macros.h"
 
 #include "glxextensions.h"
@@ -627,6 +629,7 @@ extern void __glXPreferEGL(int state);
 extern int __glXDebug;
 
 /* This is per-thread storage in an MT environment */
+#if defined( HAVE_PTHREAD )
 
 extern void __glXSetCurrentContext(struct glx_context * c);
 
@@ -643,6 +646,14 @@ extern struct glx_context *__glXGetCurrentContext(void);
 
 # endif /* defined( GLX_USE_TLS ) */
 
+#else
+
+extern struct glx_context *__glXcurrentContext;
+#define __glXGetCurrentContext() __glXcurrentContext
+#define __glXSetCurrentContext(gc) __glXcurrentContext = gc
+
+#endif /* defined( HAVE_PTHREAD ) */
+
 extern void __glXSetCurrentContextNull(void);
 
 
@@ -650,9 +661,14 @@ extern void __glXSetCurrentContextNull(void);
 ** Global lock for all threads in this address space using the GLX
 ** extension
 */
+#if defined( HAVE_PTHREAD )
 extern pthread_mutex_t __glXmutex;
 #define __glXLock()    pthread_mutex_lock(&__glXmutex)
 #define __glXUnlock()  pthread_mutex_unlock(&__glXmutex)
+#else
+#define __glXLock()
+#define __glXUnlock()
+#endif
 
 /*
 ** Setup for a command.  Initialize the extension for dpy if necessary.
index 7f47a42777115dc29a8e542cb08ea540c5acc49e..86fb658ca5e6f8f738e7a40c56d6f54e8d56bbb3 100644 (file)
@@ -33,7 +33,9 @@
  * Client-side GLX interface for current context management.
  */
 
+#ifdef HAVE_PTHREAD
 #include <pthread.h>
+#endif
 
 #include "glxclient.h"
 
@@ -65,6 +67,8 @@ struct glx_context dummyContext = {
  * Current context management and locking
  */
 
+#if defined( HAVE_PTHREAD )
+
 _X_HIDDEN pthread_mutex_t __glXmutex = PTHREAD_MUTEX_INITIALIZER;
 
 # if defined( GLX_USE_TLS )
@@ -134,6 +138,13 @@ __glXGetCurrentContext(void)
 
 # endif /* defined( GLX_USE_TLS ) */
 
+#else
+
+/* not thread safe */
+_X_HIDDEN struct glx_context *__glXcurrentContext = &dummyContext;
+
+#endif
+
 
 _X_HIDDEN void
 __glXSetCurrentContextNull(void)
index db20749505c903fec64270ea391d237e5d74d561..ccb1afae47d5a3afa974b6b9fc455e12f14dcd68 100644 (file)
@@ -77,7 +77,7 @@ indirect_create_context_attribs(struct glx_screen *base,
 
 __thread void *__glX_tls_Context = NULL;
 
-#if !defined(GLX_USE_TLS)
+#if defined(HAVE_PTHREAD) && !defined(GLX_USE_TLS)
 extern "C" struct glx_context *
 __glXGetCurrentContext()
 {