diff options
author | George Sapountzis <gsapountzis@gmail.com> | 2010-03-03 21:35:36 +0200 |
---|---|---|
committer | George Sapountzis <gsapountzis@gmail.com> | 2010-03-03 21:35:36 +0200 |
commit | 1eba501f1a3d69eac7ec6c87db549e0e593ca709 (patch) | |
tree | 092ada51d0983a0fe194c66717ffe5e783867e65 | |
parent | eb0e718b3d9f99bd971bb6d729f56172461cc598 (diff) |
glapi: sync glthread with mesa
-rw-r--r-- | glx/glapi/glthread.c | 69 | ||||
-rw-r--r-- | glx/glapi/glthread.h | 108 |
2 files changed, 70 insertions, 107 deletions
diff --git a/glx/glapi/glthread.c b/glx/glapi/glthread.c index 8b9f61885..36ddbb0d2 100644 --- a/glx/glapi/glthread.c +++ b/glx/glapi/glthread.c @@ -25,18 +25,18 @@ /* * XXX There's probably some work to do in order to make this file - * truly reusable outside of Mesa. + * truly reusable outside of Mesa. First, the glheader.h include must go. */ - #ifdef HAVE_DIX_CONFIG_H #include <dix-config.h> #include <X11/Xfuncproto.h> +#define PUBLIC _X_EXPORT #endif #include <stdlib.h> #include <stdio.h> -#include "glthread.h" +#include "glapi/glthread.h" /* @@ -72,7 +72,7 @@ */ #ifdef PTHREADS -_X_EXPORT unsigned long +PUBLIC unsigned long _glthread_GetID(void) { return (unsigned long) pthread_self(); @@ -126,10 +126,10 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr) #define USE_LOCK_FOR_KEY /* undef this to try a version without lock for the global key... */ -_X_EXPORT unsigned long +PUBLIC unsigned long _glthread_GetID(void) { - OsAbort(); /* XXX not implemented yet */ + abort(); /* XXX not implemented yet */ return (unsigned long) 0; } @@ -204,7 +204,7 @@ void InsteadOf_exit(int nCode) DWORD dwErr=GetLastError(); } -unsigned long +PUBLIC unsigned long _glthread_GetID(void) { return GetCurrentThreadId(); @@ -249,63 +249,12 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr) #endif /* WIN32_THREADS */ - - -/* - * XFree86 has its own thread wrapper, Xthreads.h - * We wrap it again for GL. - */ -#ifdef USE_XTHREADS - -_X_EXPORT unsigned long -_glthread_GetID(void) -{ - return (unsigned long) xthread_self(); -} - - -void -_glthread_InitTSD(_glthread_TSD *tsd) -{ - if (xthread_key_create(&tsd->key, NULL) != 0) { - perror(INIT_TSD_ERROR); - exit(-1); - } - tsd->initMagic = INIT_MAGIC; -} - - -void * -_glthread_GetTSD(_glthread_TSD *tsd) -{ - void *ptr; - if (tsd->initMagic != INIT_MAGIC) { - _glthread_InitTSD(tsd); - } - xthread_get_specific(tsd->key, &ptr); - return ptr; -} - - -void -_glthread_SetTSD(_glthread_TSD *tsd, void *ptr) -{ - if (tsd->initMagic != INIT_MAGIC) { - _glthread_InitTSD(tsd); - } - xthread_set_specific(tsd->key, ptr); -} - -#endif /* XTHREAD */ - - - /* * BeOS threads */ #ifdef BEOS_THREADS -unsigned long +PUBLIC unsigned long _glthread_GetID(void) { return (unsigned long) find_thread(NULL); @@ -347,7 +296,7 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr) * no-op functions */ -_X_EXPORT unsigned long +PUBLIC unsigned long _glthread_GetID(void) { return 0; diff --git a/glx/glapi/glthread.h b/glx/glapi/glthread.h index e2765cebb..8ec933a85 100644 --- a/glx/glapi/glthread.h +++ b/glx/glapi/glthread.h @@ -71,7 +71,7 @@ #if (defined(PTHREADS) || defined(SOLARIS_THREADS) ||\ - defined(WIN32_THREADS) || defined(USE_XTHREADS) || defined(BEOS_THREADS)) \ + defined(WIN32_THREADS) || defined(BEOS_THREADS)) \ && !defined(THREADS) # define THREADS #endif @@ -116,9 +116,49 @@ typedef pthread_mutex_t _glthread_Mutex; #define _glthread_UNLOCK_MUTEX(name) \ (void) pthread_mutex_unlock(&(name)) -#endif /* PTHREADS */ +typedef pthread_cond_t _glthread_Cond; +#define _glthread_DECLARE_STATIC_COND(name) \ + static _glthread_Cond name = PTHREAD_COND_INITIALIZER +#define _glthread_INIT_COND(cond) \ + pthread_cond_init(&(cond), NULL) + +#define _glthread_DESTROY_COND(name) \ + pthread_cond_destroy(&(name)) + +#define _glthread_COND_WAIT(cond, mutex) \ + pthread_cond_wait(&(cond), &(mutex)) + +#define _glthread_COND_SIGNAL(cond) \ + pthread_cond_signal(&(cond)) + +#define _glthread_COND_BROADCAST(cond) \ + pthread_cond_broadcast(&(cond)) + + +#else /* PTHREADS */ + +typedef unsigned int _glthread_Cond; +#define _glthread_DECLARE_STATIC_COND(name) \ +// #warning Condition variables not implemented. + +#define _glthread_INIT_COND(cond) \ + ASSERT(0); + +#define _glthread_DESTROY_COND(name) \ + ASSERT(0); + +#define _glthread_COND_WAIT(cond, mutex) \ + ASSERT(0); + +#define _glthread_COND_SIGNAL(cond) \ + ASSERT(0); + +#define _glthread_COND_BROADCAST(cond) \ + ASSERT(0); + +#endif /* @@ -178,56 +218,26 @@ typedef CRITICAL_SECTION _glthread_Mutex; #endif /* WIN32_THREADS */ - - -/* - * XFree86 has its own thread wrapper, Xthreads.h - * We wrap it again for GL. - */ -#ifdef USE_XTHREADS -#include <X11/Xthreads.h> - -typedef struct { - xthread_key_t key; - int initMagic; -} _glthread_TSD; - -typedef xthread_t _glthread_Thread; - -typedef xmutex_rec _glthread_Mutex; - -#ifdef XMUTEX_INITIALIZER -#define _glthread_DECLARE_STATIC_MUTEX(name) \ - static _glthread_Mutex name = XMUTEX_INITIALIZER -#else -#define _glthread_DECLARE_STATIC_MUTEX(name) \ - static _glthread_Mutex name -#endif - -#define _glthread_INIT_MUTEX(name) \ - xmutex_init(&(name)) - -#define _glthread_DESTROY_MUTEX(name) \ - xmutex_clear(&(name)) - -#define _glthread_LOCK_MUTEX(name) \ - (void) xmutex_lock(&(name)) - -#define _glthread_UNLOCK_MUTEX(name) \ - (void) xmutex_unlock(&(name)) - -#endif /* USE_XTHREADS */ - - - /* * BeOS threads. R5.x required. */ #ifdef BEOS_THREADS +/* Problem with OS.h and this file on haiku */ +#ifndef __HAIKU__ #include <kernel/OS.h> +#endif + #include <support/TLS.h> +/* The only two typedefs required here + * this is cause of the OS.h problem + */ +#ifdef __HAIKU__ +typedef int32 thread_id; +typedef int32 sem_id; +#endif + typedef struct { int32 key; int initMagic; @@ -259,11 +269,11 @@ typedef benaphore _glthread_Mutex; * THREADS not defined */ -typedef int _glthread_TSD; +typedef unsigned _glthread_TSD; -typedef int _glthread_Thread; +typedef unsigned _glthread_Thread; -typedef int _glthread_Mutex; +typedef unsigned _glthread_Mutex; #define _glthread_DECLARE_STATIC_MUTEX(name) static _glthread_Mutex name = 0 @@ -298,6 +308,10 @@ _glthread_GetTSD(_glthread_TSD *); extern void _glthread_SetTSD(_glthread_TSD *, void *); +#if !defined __GNUC__ || __GNUC__ < 3 +# define __builtin_expect(x, y) x +#endif + #if defined(GLX_USE_TLS) extern __thread struct _glapi_table * _glapi_tls_Dispatch |