diff options
author | Emil Velikov <emil.l.velikov@gmail.com> | 2015-03-06 17:07:11 +0000 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2015-03-06 17:07:11 +0000 |
commit | 5e3276f5c7bf1a363de710709737624634389858 (patch) | |
tree | 300eb22296bdd3c4a25213f89a5bee330f473c71 | |
parent | 1c1fd82b4b50fae4644e442b0c2a017f1e428610 (diff) | |
download | external_mesa3d-5e3276f5c7bf1a363de710709737624634389858.zip external_mesa3d-5e3276f5c7bf1a363de710709737624634389858.tar.gz external_mesa3d-5e3276f5c7bf1a363de710709737624634389858.tar.bz2 |
Revert "glx: remove support for non-multithreaded platforms"
This reverts commit 38591295cd4b68f89f257b20f476f98de3772a47.
Not meant to go in yet. Lacking review.
-rw-r--r-- | docs/dispatch.html | 7 | ||||
-rw-r--r-- | src/glx/glxclient.h | 18 | ||||
-rw-r--r-- | src/glx/glxcurrent.c | 11 | ||||
-rw-r--r-- | src/glx/tests/fake_glx_screen.cpp | 2 |
4 files changed, 34 insertions, 4 deletions
diff --git a/docs/dispatch.html b/docs/dispatch.html index 77cfba3..aacd01e 100644 --- a/docs/dispatch.html +++ b/docs/dispatch.html @@ -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> diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index 30c9e52..122ae5d 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -47,11 +47,13 @@ #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. diff --git a/src/glx/glxcurrent.c b/src/glx/glxcurrent.c index 7f47a42..86fb658 100644 --- a/src/glx/glxcurrent.c +++ b/src/glx/glxcurrent.c @@ -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) diff --git a/src/glx/tests/fake_glx_screen.cpp b/src/glx/tests/fake_glx_screen.cpp index db20749..ccb1afa 100644 --- a/src/glx/tests/fake_glx_screen.cpp +++ b/src/glx/tests/fake_glx_screen.cpp @@ -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() { |