glapi.h: consolidate GET_DISPATCH() and GET_CURRENT_CONTEXT() macros
authorGeorge Sapountzis <gsapountzis@gmail.com>
Fri, 26 Feb 2010 18:58:24 +0000 (20:58 +0200)
committerGeorge Sapountzis <gsapountzis@gmail.com>
Mon, 1 Mar 2010 18:54:17 +0000 (20:54 +0200)
Use likely() macro, as this is what most projects use.

Drops GL_CALL define, cannot find it in mesa tree.

Also, whitespace cleaunps in glthread.h

src/mesa/glapi/glapi.h
src/mesa/glapi/glthread.h

index f802a61..6bfe741 100644 (file)
@@ -64,6 +64,15 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 #endif
 
 
+#if defined(__GNUC__) && (__GNUC__ >= 3)
+#  define likely(x)   __builtin_expect(!!(x), 1)
+#  define unlikely(x) __builtin_expect(!!(x), 0)
+#else
+#  define likely(x)   (x)
+#  define unlikely(x) (x)
+#endif
+
+
 /*
  * Number of extension functions which we can dynamically add at runtime.
  */
@@ -71,7 +80,8 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 
 
 /**
- ** Define the GET_CURRENT_CONTEXT() macro.
+ ** Define the GET_DISPATCH() and GET_CURRENT_CONTEXT() macros.
+ **
  ** \param C local variable which will hold the current context.
  **/
 #if defined (GLX_USE_TLS)
@@ -79,9 +89,14 @@ typedef void (*_glapi_proc)(void); /* generic function pointer */
 extern const void *_glapi_Context;
 extern const struct _glapi_table *_glapi_Dispatch;
 
+extern __thread struct _glapi_table * _glapi_tls_Dispatch
+    __attribute__((tls_model("initial-exec")));
+
 extern __thread void * _glapi_tls_Context
     __attribute__((tls_model("initial-exec")));
 
+# define GET_DISPATCH() _glapi_tls_Dispatch
+
 # define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) _glapi_tls_Context
 
 #else
@@ -90,9 +105,19 @@ extern void *_glapi_Context;
 extern struct _glapi_table *_glapi_Dispatch;
 
 # ifdef THREADS
-#  define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context())
+
+#  define GET_DISPATCH() \
+     (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
+
+#  define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) \
+     (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
+
 # else
+
+#  define GET_DISPATCH() _glapi_Dispatch
+
 #  define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) _glapi_Context
+
 # endif
 
 #endif /* defined (GLX_USE_TLS) */
index 8ec933a..be39501 100644 (file)
 #define GLTHREAD_H
 
 
-#if defined(USE_MGL_NAMESPACE)
-#define _glapi_Dispatch _mglapi_Dispatch
+#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)
+#ifndef THREADS
+#define THREADS
 #endif
-
-
-
-#if (defined(PTHREADS) || defined(SOLARIS_THREADS) ||\
-     defined(WIN32_THREADS) || defined(BEOS_THREADS)) \
-    && !defined(THREADS)
-# define THREADS
 #endif
 
-#ifdef VMS
-#include <GL/vms_x_fix.h>
-#endif
 
 /*
  * POSIX threads. This should be your choice in the Unix world
@@ -121,7 +112,7 @@ typedef pthread_cond_t _glthread_Cond;
 #define _glthread_DECLARE_STATIC_COND(name) \
    static _glthread_Cond name = PTHREAD_COND_INITIALIZER
 
-#define _glthread_INIT_COND(cond)                      \
+#define _glthread_INIT_COND(cond) \
    pthread_cond_init(&(cond), NULL)
 
 #define _glthread_DESTROY_COND(name) \
@@ -143,7 +134,7 @@ typedef unsigned int _glthread_Cond;
 #define _glthread_DECLARE_STATIC_COND(name) \
 //  #warning Condition variables not implemented.
 
-#define _glthread_INIT_COND(cond)          \
+#define _glthread_INIT_COND(cond) \
   ASSERT(0);
 
 #define _glthread_DESTROY_COND(name) \
@@ -209,11 +200,20 @@ typedef HANDLE _glthread_Thread;
 
 typedef CRITICAL_SECTION _glthread_Mutex;
 
-#define _glthread_DECLARE_STATIC_MUTEX(name)  /*static*/ _glthread_Mutex name = {0,0,0,0,0,0}
-#define _glthread_INIT_MUTEX(name)  InitializeCriticalSection(&name)
-#define _glthread_DESTROY_MUTEX(name)  DeleteCriticalSection(&name)
-#define _glthread_LOCK_MUTEX(name)  EnterCriticalSection(&name)
-#define _glthread_UNLOCK_MUTEX(name)  LeaveCriticalSection(&name)
+#define _glthread_DECLARE_STATIC_MUTEX(name) \
+   /* static */ _glthread_Mutex name = { 0, 0, 0, 0, 0, 0 }
+
+#define _glthread_INIT_MUTEX(name) \
+   InitializeCriticalSection(&name)
+
+#define _glthread_DESTROY_MUTEX(name) \
+   DeleteCriticalSection(&name)
+
+#define _glthread_LOCK_MUTEX(name) \
+   EnterCriticalSection(&name)
+
+#define _glthread_UNLOCK_MUTEX(name) \
+   LeaveCriticalSection(&name)
 
 #endif /* WIN32_THREADS */
 
@@ -252,12 +252,26 @@ typedef struct {
 } benaphore;
 typedef benaphore _glthread_Mutex;
 
-#define _glthread_DECLARE_STATIC_MUTEX(name)  static _glthread_Mutex name = { 0, 0 }
-#define _glthread_INIT_MUTEX(name)     name.sem = create_sem(0, #name"_benaphore"), name.lock = 0
-#define _glthread_DESTROY_MUTEX(name)  delete_sem(name.sem), name.lock = 0
-#define _glthread_LOCK_MUTEX(name)     if (name.sem == 0) _glthread_INIT_MUTEX(name); \
-                                                                               if (atomic_add(&(name.lock), 1) >= 1) acquire_sem(name.sem)
-#define _glthread_UNLOCK_MUTEX(name)   if (atomic_add(&(name.lock), -1) > 1) release_sem(name.sem)
+#define _glthread_DECLARE_STATIC_MUTEX(name) \
+   static _glthread_Mutex name = { 0, 0 }
+
+#define _glthread_INIT_MUTEX(name) \
+   name.sem = create_sem(0, #name"_benaphore"), \
+   name.lock = 0
+
+#define _glthread_DESTROY_MUTEX(name) \
+   delete_sem(name.sem), \
+   name.lock = 0
+
+#define _glthread_LOCK_MUTEX(name) \
+   if (name.sem == 0) \
+      _glthread_INIT_MUTEX(name); \
+   if (atomic_add(&(name.lock), 1) >= 1) \
+      acquire_sem(name.sem)
+
+#define _glthread_UNLOCK_MUTEX(name) \
+   if (atomic_add(&(name.lock), -1) > 1) \
+      release_sem(name.sem)
 
 #endif /* BEOS_THREADS */
 
@@ -308,26 +322,5 @@ _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
-    __attribute__((tls_model("initial-exec")));
-
-#define GET_DISPATCH() _glapi_tls_Dispatch
-
-#elif !defined(GL_CALL)
-# if defined(THREADS)
-#  define GET_DISPATCH() \
-   ((__builtin_expect( _glapi_Dispatch != NULL, 1 )) \
-       ? _glapi_Dispatch : _glapi_get_dispatch())
-# else
-#  define GET_DISPATCH() _glapi_Dispatch
-# endif /* defined(THREADS) */
-#endif  /* ndef GL_CALL */
-
 
 #endif /* THREADS_H */