summaryrefslogtreecommitdiffstats
path: root/src/mesa/glapi/glapi.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/glapi/glapi.h')
-rw-r--r--src/mesa/glapi/glapi.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h
index e3ef066e699..fa4554ec7ba 100644
--- a/src/mesa/glapi/glapi.h
+++ b/src/mesa/glapi/glapi.h
@@ -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