diff options
Diffstat (limited to 'mesalib/src/mapi')
-rw-r--r-- | mesalib/src/mapi/entry.c | 4 | ||||
-rw-r--r-- | mesalib/src/mapi/glapi/gen/ARB_debug_output.xml | 8 | ||||
-rw-r--r-- | mesalib/src/mapi/glapi/gen/GL4x.xml | 2 | ||||
-rw-r--r-- | mesalib/src/mapi/glapi/gen/KHR_debug.xml | 150 | ||||
-rw-r--r-- | mesalib/src/mapi/glapi/gen/gl_API.xml | 144 | ||||
-rw-r--r-- | mesalib/src/mapi/glapi/glapi.c | 4 | ||||
-rw-r--r-- | mesalib/src/mapi/glapi/glapi.h | 4 | ||||
-rw-r--r-- | mesalib/src/mapi/mapi.c | 12 | ||||
-rw-r--r-- | mesalib/src/mapi/mapi_glapi.c | 10 | ||||
-rw-r--r-- | mesalib/src/mapi/stub.c | 6 | ||||
-rw-r--r-- | mesalib/src/mapi/u_current.c | 44 | ||||
-rw-r--r-- | mesalib/src/mapi/u_current.h | 30 | ||||
-rw-r--r-- | mesalib/src/mapi/u_execmem.c | 6 | ||||
-rw-r--r-- | mesalib/src/mapi/u_thread.h | 32 |
14 files changed, 231 insertions, 225 deletions
diff --git a/mesalib/src/mapi/entry.c b/mesalib/src/mapi/entry.c index 128f0115d..b6e8db28d 100644 --- a/mesalib/src/mapi/entry.c +++ b/mesalib/src/mapi/entry.c @@ -36,7 +36,7 @@ #ifdef MAPI_MODE_BRIDGE #define ENTRY_CURRENT_TABLE_GET "_glapi_get_dispatch" #else -#define ENTRY_CURRENT_TABLE_GET U_STRINGIFY(u_current_get_internal) +#define ENTRY_CURRENT_TABLE_GET U_STRINGIFY(u_current_get_table_internal) #endif #if defined(USE_X86_ASM) && defined(__GNUC__) @@ -57,7 +57,7 @@ entry_current_get(void) #ifdef MAPI_MODE_BRIDGE return GET_DISPATCH(); #else - return u_current_get(); + return u_current_get_table(); #endif } diff --git a/mesalib/src/mapi/glapi/gen/ARB_debug_output.xml b/mesalib/src/mapi/glapi/gen/ARB_debug_output.xml index 11f268dc6..0468d570c 100644 --- a/mesalib/src/mapi/glapi/gen/ARB_debug_output.xml +++ b/mesalib/src/mapi/glapi/gen/ARB_debug_output.xml @@ -52,7 +52,7 @@ <enum name="DEBUG_SEVERITY_LOW_ARB" value="0x9148"/> - <function name="DebugMessageControlARB" offset="assign"> + <function name="DebugMessageControlARB" alias="DebugMessageControl"> <param name="source" type="GLenum"/> <param name="type" type="GLenum"/> <param name="severity" type="GLenum"/> @@ -61,7 +61,7 @@ <param name="enabled" type="GLboolean"/> </function> - <function name="DebugMessageInsertARB" offset="assign"> + <function name="DebugMessageInsertARB" alias="DebugMessageInsert"> <param name="source" type="GLenum"/> <param name="type" type="GLenum"/> <param name="id" type="GLuint"/> @@ -70,12 +70,12 @@ <param name="buf" type="const GLcharARB *"/> </function> - <function name="DebugMessageCallbackARB" offset="assign"> + <function name="DebugMessageCallbackARB" alias="DebugMessageCallback"> <param name="callback" type="GLDEBUGPROCARB"/> <param name="userParam" type="const GLvoid *"/> </function> - <function name="GetDebugMessageLogARB" offset="assign"> + <function name="GetDebugMessageLogARB" alias="GetDebugMessageLog"> <return type="GLuint"/> <param name="count" type="GLuint"/> <param name="bufsize" type="GLsizei"/> diff --git a/mesalib/src/mapi/glapi/gen/GL4x.xml b/mesalib/src/mapi/glapi/gen/GL4x.xml index 6706278ce..8efef0b91 100644 --- a/mesalib/src/mapi/glapi/gen/GL4x.xml +++ b/mesalib/src/mapi/glapi/gen/GL4x.xml @@ -15,7 +15,7 @@ </category> <category name="4.3"> - + <enum name="DEPTH_STENCIL_TEXTURE_MODE" value="0x90EA"/> </category> </OpenGLAPI> diff --git a/mesalib/src/mapi/glapi/gen/KHR_debug.xml b/mesalib/src/mapi/glapi/gen/KHR_debug.xml new file mode 100644 index 000000000..48f7fa762 --- /dev/null +++ b/mesalib/src/mapi/glapi/gen/KHR_debug.xml @@ -0,0 +1,150 @@ +<?xml version="1.0"?> +<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd"> + +<OpenGLAPI> + +<category name="GL_KHR_debug" number="119"> + <enum name="DEBUG_OUTPUT" value="0x92E0"/> + <enum name="DEBUG_OUTPUT_SYNCHRONOUS" value="0x8242"/> + + <enum name="CONTEXT_FLAG_DEBUG_BIT" value="0x00000002"/> + + <enum name="MAX_DEBUG_MESSAGE_LENGTH" count="1" value="0x9143"> + <size name="Get" mode="get"/> + </enum> + <enum name="MAX_DEBUG_LOGGED_MESSAGES" count="1" value="0x9144"> + <size name="Get" mode="get"/> + </enum> + <enum name="DEBUG_LOGGED_MESSAGES" count="1" value="0x9145"> + <size name="Get" mode="get"/> + </enum> + <enum name="DEBUG_NEXT_LOGGED_MESSAGE_LENGTH" count="1" value="0x8243"> + <size name="Get" mode="get"/> + </enum> + <enum name="MAX_DEBUG_GROUP_STACK_DEPTH" count="1" value="0x826C"> + <size name="Get" mode="get"/> + </enum> + <enum name="DEBUG_GROUP_STACK_DEPTH" count="1" value="0x826D"> + <size name="Get" mode="get"/> + </enum> + <enum name="MAX_LABEL_LENGTH" count="1" value="0x82E8"> + <size name="Get" mode="get"/> + </enum> + + <enum name="DEBUG_CALLBACK_FUNCTION" count="1" value="0x8244"> + <size name="GetPointerv" mode="get"/> + </enum> + <enum name="DEBUG_CALLBACK_USER_PARAM" count="1" value="0x8245"> + <size name="GetPointerv" mode="get"/> + </enum> + + <enum name="DEBUG_SOURCE_API" value="0x8246"/> + <enum name="DEBUG_SOURCE_WINDOW_SYSTEM" value="0x8247"/> + <enum name="DEBUG_SOURCE_SHADER_COMPILER" value="0x8248"/> + <enum name="DEBUG_SOURCE_THIRD_PARTY" value="0x8249"/> + <enum name="DEBUG_SOURCE_APPLICATION" value="0x824A"/> + <enum name="DEBUG_SOURCE_OTHER" value="0x824B"/> + + <enum name="DEBUG_TYPE_ERROR" value="0x824C"/> + <enum name="DEBUG_TYPE_DEPRECATED_BEHAVIOR" value="0x824D"/> + <enum name="DEBUG_TYPE_UNDEFINED_BEHAVIOR" value="0x824E"/> + <enum name="DEBUG_TYPE_PORTABILITY" value="0x824F"/> + <enum name="DEBUG_TYPE_PERFORMANCE" value="0x8250"/> + <enum name="DEBUG_TYPE_OTHER" value="0x8251"/> + <enum name="DEBUG_TYPE_MARKER" value="0x8268"/> + + <enum name="DEBUG_TYPE_PUSH_GROUP" value="0x8269"/> + <enum name="DEBUG_TYPE_POP_GROUP" value="0x826A"/> + + <enum name="DEBUG_SEVERITY_HIGH" value="0x9146"/> + <enum name="DEBUG_SEVERITY_MEDIUM" value="0x9147"/> + <enum name="DEBUG_SEVERITY_LOW" value="0x9148"/> + <enum name="DEBUG_SEVERITY_NOTIFICATION" value="0x826B"/> + + <enum name="STACK_UNDERFLOW" value="0x0504"/> + <enum name="STACK_OVERFLOW" value="0x0503"/> + + <enum name="BUFFER" value="0x82E0"/> + <enum name="SHADER" value="0x82E1"/> + <enum name="PROGRAM" value="0x82E2"/> + <enum name="QUERY" value="0x82E3"/> + <enum name="PROGRAM_PIPELINE" value="0x82E4"/> + <enum name="SAMPLER" value="0x82E6"/> + <!-- Compatibility Profile --> + <enum name="DISPLAY_LIST" value="0x82E7"/> + + <function name="DebugMessageControl" offset="assign"> + <param name="source" type="GLenum"/> + <param name="type" type="GLenum"/> + <param name="severity" type="GLenum"/> + <param name="count" type="GLsizei" counter="true"/> + <param name="ids" type="const GLuint *" count="count"/> + <param name="enabled" type="GLboolean"/> + </function> + + <function name="DebugMessageInsert" offset="assign"> + <param name="source" type="GLenum"/> + <param name="type" type="GLenum"/> + <param name="id" type="GLuint"/> + <param name="severity" type="GLenum"/> + <param name="length" type="GLsizei"/> + <param name="buf" type="const GLchar *"/> + </function> + + <function name="DebugMessageCallback" offset="assign"> + <param name="callback" type="GLDEBUGPROC"/> + <param name="userParam" type="const GLvoid *"/> + </function> + + <function name="GetDebugMessageLog" offset="assign"> + <return type="GLuint"/> + <param name="count" type="GLuint"/> + <param name="bufsize" type="GLsizei"/> + <param name="sources" type="GLenum *" output="true"/> + <param name="types" type="GLenum *" output="true"/> + <param name="ids" type="GLuint *" output="true"/> + <param name="severities" type="GLenum *" output="true"/> + <param name="lengths" type="GLsizei *" output="true"/> + <param name="messageLog" type="GLchar *" output="true"/> + </function> + + <function name="PushDebugGroup" offset="assign"> + <param name="source" type="GLenum"/> + <param name="id" type="GLuint"/> + <param name="length" type="GLsizei"/> + <param name="message" type="const GLchar *"/> + </function> + + <function name="PopDebugGroup" offset="assign"/> + + <function name="ObjectLabel" offset="assign"> + <param name="identifier" type="GLenum"/> + <param name="name" type="GLuint"/> + <param name="length" type="GLsizei"/> + <param name="label" type="const GLchar *"/> + </function> + + <function name="GetObjectLabel" offset="assign"> + <param name="identifier" type="GLenum"/> + <param name="name" type="GLuint"/> + <param name="bufSize" type="GLsizei"/> + <param name="length" type="GLsizei *"/> + <param name="label" type="GLchar *"/> + </function> + + <function name="ObjectPtrLabel" offset="assign"> + <param name="ptr" type="const GLvoid *"/> + <param name="length" type="GLsizei"/> + <param name="label" type="const GLchar *"/> + </function> + + <function name="GetObjectPtrLabel" offset="assign"> + <param name="ptr" type="const GLvoid *"/> + <param name="bufSize" type="GLsizei"/> + <param name="length" type="GLsizei *"/> + <param name="label" type="GLchar *"/> + </function> + +</category> + +</OpenGLAPI> diff --git a/mesalib/src/mapi/glapi/gen/gl_API.xml b/mesalib/src/mapi/glapi/gen/gl_API.xml index 7e1946e22..9129d5790 100644 --- a/mesalib/src/mapi/glapi/gen/gl_API.xml +++ b/mesalib/src/mapi/glapi/gen/gl_API.xml @@ -8324,149 +8324,7 @@ <!-- ARB extension #118 --> -<category name="GL_KHR_debug" number="119"> - <enum name="DEBUG_OUTPUT" value="0x92E0"/> - <enum name="DEBUG_OUTPUT_SYNCHRONOUS" value="0x8242"/> - - <enum name="CONTEXT_FLAG_DEBUG_BIT" value="0x00000002"/> - - <enum name="MAX_DEBUG_MESSAGE_LENGTH" count="1" value="0x9143"> - <size name="Get" mode="get"/> - </enum> - <enum name="MAX_DEBUG_LOGGED_MESSAGES" count="1" value="0x9144"> - <size name="Get" mode="get"/> - </enum> - <enum name="DEBUG_LOGGED_MESSAGES" count="1" value="0x9145"> - <size name="Get" mode="get"/> - </enum> - <enum name="DEBUG_NEXT_LOGGED_MESSAGE_LENGTH" count="1" value="0x8243"> - <size name="Get" mode="get"/> - </enum> - <enum name="MAX_DEBUG_GROUP_STACK_DEPTH" count="1" value="0x826C"> - <size name="Get" mode="get"/> - </enum> - <enum name="DEBUG_GROUP_STACK_DEPTH" count="1" value="0x826D"> - <size name="Get" mode="get"/> - </enum> - <enum name="MAX_LABEL_LENGTH" count="1" value="0x82E8"> - <size name="Get" mode="get"/> - </enum> - - <enum name="DEBUG_CALLBACK_FUNCTION" count="1" value="0x8244"> - <size name="GetPointerv" mode="get"/> - </enum> - <enum name="DEBUG_CALLBACK_USER_PARAM" count="1" value="0x8245"> - <size name="GetPointerv" mode="get"/> - </enum> - - <enum name="DEBUG_SOURCE_API" value="0x8246"/> - <enum name="DEBUG_SOURCE_WINDOW_SYSTEM" value="0x8247"/> - <enum name="DEBUG_SOURCE_SHADER_COMPILER" value="0x8248"/> - <enum name="DEBUG_SOURCE_THIRD_PARTY" value="0x8249"/> - <enum name="DEBUG_SOURCE_APPLICATION" value="0x824A"/> - <enum name="DEBUG_SOURCE_OTHER" value="0x824B"/> - - <enum name="DEBUG_TYPE_ERROR" value="0x824C"/> - <enum name="DEBUG_TYPE_DEPRECATED_BEHAVIOR" value="0x824D"/> - <enum name="DEBUG_TYPE_UNDEFINED_BEHAVIOR" value="0x824E"/> - <enum name="DEBUG_TYPE_PORTABILITY" value="0x824F"/> - <enum name="DEBUG_TYPE_PERFORMANCE" value="0x8250"/> - <enum name="DEBUG_TYPE_OTHER" value="0x8251"/> - <enum name="DEBUG_TYPE_MARKER" value="0x8268"/> - - <enum name="DEBUG_TYPE_PUSH_GROUP" value="0x8269"/> - <enum name="DEBUG_TYPE_POP_GROUP" value="0x826A"/> - - <enum name="DEBUG_SEVERITY_HIGH" value="0x9146"/> - <enum name="DEBUG_SEVERITY_MEDIUM" value="0x9147"/> - <enum name="DEBUG_SEVERITY_LOW" value="0x9148"/> - <enum name="DEBUG_SEVERITY_NOTIFICATION" value="0x826B"/> - - <enum name="STACK_UNDERFLOW" value="0x0504"/> - <enum name="STACK_OVERFLOW" value="0x0503"/> - - <enum name="BUFFER" value="0x82E0"/> - <enum name="SHADER" value="0x82E1"/> - <enum name="PROGRAM" value="0x82E2"/> - <enum name="QUERY" value="0x82E3"/> - <enum name="PROGRAM_PIPELINE" value="0x82E4"/> - <enum name="SAMPLER" value="0x82E6"/> - <!-- Compatibility Profile --> - <enum name="DISPLAY_LIST" value="0x82E7"/> - - <function name="DebugMessageControl" offset="assign"> - <param name="source" type="GLenum"/> - <param name="type" type="GLenum"/> - <param name="severity" type="GLenum"/> - <param name="count" type="GLsizei" counter="true"/> - <param name="ids" type="const GLuint *" count="count"/> - <param name="enabled" type="GLboolean"/> - </function> - - <function name="DebugMessageInsert" offset="assign"> - <param name="source" type="GLenum"/> - <param name="type" type="GLenum"/> - <param name="id" type="GLuint"/> - <param name="severity" type="GLenum"/> - <param name="length" type="GLsizei"/> - <param name="buf" type="const GLchar *"/> - </function> - - <function name="DebugMessageCallback" offset="assign"> - <param name="callback" type="GLDEBUGPROC"/> - <param name="userParam" type="const GLvoid *"/> - </function> - - <function name="GetDebugMessageLog" offset="assign"> - <return type="GLuint"/> - <param name="count" type="GLuint"/> - <param name="bufsize" type="GLsizei"/> - <param name="sources" type="GLenum *" output="true"/> - <param name="types" type="GLenum *" output="true"/> - <param name="ids" type="GLuint *" output="true"/> - <param name="severities" type="GLenum *" output="true"/> - <param name="lengths" type="GLsizei *" output="true"/> - <param name="messageLog" type="GLchar *" output="true"/> - </function> - - <function name="PushDebugGroup" offset="assign"> - <param name="source" type="GLenum"/> - <param name="id" type="GLuint"/> - <param name="length" type="GLsizei"/> - <param name="message" type="const GLchar *"/> - </function> - - <function name="PopDebugGroup" offset="assign"/> - - <function name="ObjectLabel" offset="assign"> - <param name="identifier" type="GLenum"/> - <param name="name" type="GLuint"/> - <param name="length" type="GLsizei"/> - <param name="label" type="const GLchar *"/> - </function> - - <function name="GetObjectLabel" offset="assign"> - <param name="identifier" type="GLenum"/> - <param name="name" type="GLuint"/> - <param name="bufSize" type="GLsizei"/> - <param name="length" type="GLsizei *"/> - <param name="label" type="GLchar *"/> - </function> - - <function name="ObjectPtrLabel" offset="assign"> - <param name="ptr" type="const GLvoid *"/> - <param name="length" type="GLsizei"/> - <param name="label" type="const GLchar *"/> - </function> - - <function name="GetObjectPtrLabel" offset="assign"> - <param name="ptr" type="const GLvoid *"/> - <param name="bufSize" type="GLsizei"/> - <param name="length" type="GLsizei *"/> - <param name="label" type="GLchar *"/> - </function> - -</category> +<xi:include href="KHR_debug.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <!-- ARB extension #120 --> diff --git a/mesalib/src/mapi/glapi/glapi.c b/mesalib/src/mapi/glapi/glapi.c index 3a0b638f7..194b9ee86 100644 --- a/mesalib/src/mapi/glapi/glapi.c +++ b/mesalib/src/mapi/glapi/glapi.c @@ -54,11 +54,11 @@ _glapi_check_multithread(void) void _glapi_set_context(void *context) { - u_current_set_user((const void *) context); + u_current_set_context((const void *) context); } void _glapi_set_dispatch(struct _glapi_table *dispatch) { - u_current_set((const struct mapi_table *) dispatch); + u_current_set_table((const struct mapi_table *) dispatch); } diff --git a/mesalib/src/mapi/glapi/glapi.h b/mesalib/src/mapi/glapi/glapi.h index dcf91a7f3..7c22985ec 100644 --- a/mesalib/src/mapi/glapi/glapi.h +++ b/mesalib/src/mapi/glapi/glapi.h @@ -168,10 +168,6 @@ _GLAPI_EXPORT struct _glapi_table * _glapi_create_table_from_handle(void *handle, const char *symbol_prefix); -_GLAPI_EXPORT unsigned long -_glthread_GetID(void); - - /* * These stubs are kept so that the old DRI drivers still load. */ diff --git a/mesalib/src/mapi/mapi.c b/mesalib/src/mapi/mapi.c index 56f209bfa..aa6b91b42 100644 --- a/mesalib/src/mapi/mapi.c +++ b/mesalib/src/mapi/mapi.c @@ -72,15 +72,15 @@ get_stub(const char *name, const struct mapi_stub *alias) void mapi_init(const char *spec) { - u_mutex_declare_static(mutex); + static mtx_t mutex = _MTX_INITIALIZER_NP; const char *p; int ver, count; - u_mutex_lock(mutex); + mtx_lock(&mutex); /* already initialized */ if (mapi_num_stubs) { - u_mutex_unlock(mutex); + mtx_unlock(&mutex); return; } @@ -90,7 +90,7 @@ mapi_init(const char *spec) /* parse version string */ ver = atoi(p); if (ver != 1) { - u_mutex_unlock(mutex); + mtx_unlock(&mutex); return; } p += strlen(p) + 1; @@ -115,7 +115,7 @@ mapi_init(const char *spec) mapi_num_stubs = count; - u_mutex_unlock(mutex); + mtx_unlock(&mutex); } /** @@ -186,5 +186,5 @@ mapi_table_fill(struct mapi_table *tbl, const mapi_proc *procs) void mapi_table_make_current(const struct mapi_table *tbl) { - u_current_set(tbl); + u_current_set_table(tbl); } diff --git a/mesalib/src/mapi/mapi_glapi.c b/mesalib/src/mapi/mapi_glapi.c index 7b9f1aee4..7b0903be9 100644 --- a/mesalib/src/mapi/mapi_glapi.c +++ b/mesalib/src/mapi/mapi_glapi.c @@ -58,13 +58,13 @@ _glapi_check_multithread(void) void _glapi_set_context(void *context) { - u_current_set_user((const void *) context); + u_current_set_context((const void *) context); } void _glapi_set_dispatch(struct _glapi_table *dispatch) { - u_current_set((const struct mapi_table *) dispatch); + u_current_set_table((const struct mapi_table *) dispatch); } /** @@ -222,12 +222,6 @@ _glapi_get_proc_name(unsigned int offset) return stub ? stub_get_name(stub) : NULL; } -unsigned long -_glthread_GetID(void) -{ - return u_thread_self(); -} - void _glapi_noop_enable_warnings(unsigned char enable) { diff --git a/mesalib/src/mapi/stub.c b/mesalib/src/mapi/stub.c index acd2c0a79..dfadbe1a5 100644 --- a/mesalib/src/mapi/stub.c +++ b/mesalib/src/mapi/stub.c @@ -126,11 +126,11 @@ stub_add_dynamic(const char *name) struct mapi_stub * stub_find_dynamic(const char *name, int generate) { - u_mutex_declare_static(dynamic_mutex); + static mtx_t dynamic_mutex = _MTX_INITIALIZER_NP; struct mapi_stub *stub = NULL; int count, i; - u_mutex_lock(dynamic_mutex); + mtx_lock(&dynamic_mutex); if (generate) assert(!stub_find_public(name)); @@ -147,7 +147,7 @@ stub_find_dynamic(const char *name, int generate) if (generate && !stub) stub = stub_add_dynamic(name); - u_mutex_unlock(dynamic_mutex); + mtx_unlock(&dynamic_mutex); return stub; } diff --git a/mesalib/src/mapi/u_current.c b/mesalib/src/mapi/u_current.c index 07213380d..afa887e06 100644 --- a/mesalib/src/mapi/u_current.c +++ b/mesalib/src/mapi/u_current.c @@ -103,18 +103,18 @@ __thread struct mapi_table *u_current_table __attribute__((tls_model("initial-exec"))) = (struct mapi_table *) table_noop_array; -__thread void *u_current_user +__thread void *u_current_context __attribute__((tls_model("initial-exec"))); #else struct mapi_table *u_current_table = (struct mapi_table *) table_noop_array; -void *u_current_user; +void *u_current_context; #ifdef THREADS struct u_tsd u_current_table_tsd; -static struct u_tsd u_current_user_tsd; +static struct u_tsd u_current_context_tsd; static int ThreadSafe; #endif /* THREADS */ @@ -127,7 +127,7 @@ u_current_destroy(void) { #if defined(THREADS) && defined(_WIN32) u_tsd_destroy(&u_current_table_tsd); - u_tsd_destroy(&u_current_user_tsd); + u_tsd_destroy(&u_current_context_tsd); #endif } @@ -138,13 +138,13 @@ static void u_current_init_tsd(void) { u_tsd_init(&u_current_table_tsd); - u_tsd_init(&u_current_user_tsd); + u_tsd_init(&u_current_context_tsd); } /** * Mutex for multithread check. */ -u_mutex_declare_static(ThreadCheckMutex); +static mtx_t ThreadCheckMutex = _MTX_INITIALIZER_NP; /** * We should call this periodically from a function such as glXMakeCurrent @@ -159,7 +159,7 @@ u_current_init(void) if (ThreadSafe) return; - u_mutex_lock(ThreadCheckMutex); + mtx_lock(&ThreadCheckMutex); if (firstCall) { u_current_init_tsd(); @@ -168,10 +168,10 @@ u_current_init(void) } else if (knownID != u_thread_self()) { ThreadSafe = 1; - u_current_set(NULL); - u_current_set_user(NULL); + u_current_set_table(NULL); + u_current_set_context(NULL); } - u_mutex_unlock(ThreadCheckMutex); + mtx_unlock(&ThreadCheckMutex); } #else @@ -191,17 +191,17 @@ u_current_init(void) * void from the real context pointer type. */ void -u_current_set_user(const void *ptr) +u_current_set_context(const void *ptr) { u_current_init(); #if defined(GLX_USE_TLS) - u_current_user = (void *) ptr; + u_current_context = (void *) ptr; #elif defined(THREADS) - u_tsd_set(&u_current_user_tsd, (void *) ptr); - u_current_user = (ThreadSafe) ? NULL : (void *) ptr; + u_tsd_set(&u_current_context_tsd, (void *) ptr); + u_current_context = (ThreadSafe) ? NULL : (void *) ptr; #else - u_current_user = (void *) ptr; + u_current_context = (void *) ptr; #endif } @@ -211,16 +211,16 @@ u_current_set_user(const void *ptr) * void to the real context pointer type. */ void * -u_current_get_user_internal(void) +u_current_get_context_internal(void) { #if defined(GLX_USE_TLS) - return u_current_user; + return u_current_context; #elif defined(THREADS) return (ThreadSafe) - ? u_tsd_get(&u_current_user_tsd) - : u_current_user; + ? u_tsd_get(&u_current_context_tsd) + : u_current_context; #else - return u_current_user; + return u_current_context; #endif } @@ -230,7 +230,7 @@ u_current_get_user_internal(void) * table (__glapi_noop_table). */ void -u_current_set(const struct mapi_table *tbl) +u_current_set_table(const struct mapi_table *tbl) { u_current_init(); @@ -253,7 +253,7 @@ u_current_set(const struct mapi_table *tbl) * Return pointer to current dispatch table for calling thread. */ struct mapi_table * -u_current_get_internal(void) +u_current_get_table_internal(void) { #if defined(GLX_USE_TLS) return u_current_table; diff --git a/mesalib/src/mapi/u_current.h b/mesalib/src/mapi/u_current.h index f9cffd8c3..72708d433 100644 --- a/mesalib/src/mapi/u_current.h +++ b/mesalib/src/mapi/u_current.h @@ -11,14 +11,14 @@ #ifdef GLX_USE_TLS #define u_current_table _glapi_tls_Dispatch -#define u_current_user _glapi_tls_Context +#define u_current_context _glapi_tls_Context #else #define u_current_table _glapi_Dispatch -#define u_current_user _glapi_Context +#define u_current_context _glapi_Context #endif -#define u_current_get_internal _glapi_get_dispatch -#define u_current_get_user_internal _glapi_get_context +#define u_current_get_table_internal _glapi_get_dispatch +#define u_current_get_context_internal _glapi_get_context #define u_current_table_tsd _gl_DispatchTSD @@ -33,13 +33,13 @@ struct mapi_table; extern __thread struct mapi_table *u_current_table __attribute__((tls_model("initial-exec"))); -extern __thread void *u_current_user +extern __thread void *u_current_context __attribute__((tls_model("initial-exec"))); #else /* GLX_USE_TLS */ extern struct mapi_table *u_current_table; -extern void *u_current_user; +extern void *u_current_context; #endif /* GLX_USE_TLS */ @@ -52,35 +52,35 @@ void u_current_destroy(void); void -u_current_set(const struct mapi_table *tbl); +u_current_set_table(const struct mapi_table *tbl); struct mapi_table * -u_current_get_internal(void); +u_current_get_table_internal(void); void -u_current_set_user(const void *ptr); +u_current_set_context(const void *ptr); void * -u_current_get_user_internal(void); +u_current_get_context_internal(void); static INLINE const struct mapi_table * -u_current_get(void) +u_current_get_table(void) { #ifdef GLX_USE_TLS return u_current_table; #else return (likely(u_current_table) ? - u_current_table : u_current_get_internal()); + u_current_table : u_current_get_table_internal()); #endif } static INLINE const void * -u_current_get_user(void) +u_current_get_context(void) { #ifdef GLX_USE_TLS - return u_current_user; + return u_current_context; #else - return likely(u_current_user) ? u_current_user : u_current_get_user_internal(); + return likely(u_current_context) ? u_current_context : u_current_get_context_internal(); #endif } diff --git a/mesalib/src/mapi/u_execmem.c b/mesalib/src/mapi/u_execmem.c index 357365263..ac1cae093 100644 --- a/mesalib/src/mapi/u_execmem.c +++ b/mesalib/src/mapi/u_execmem.c @@ -39,7 +39,7 @@ #define EXEC_MAP_SIZE (4*1024) -u_mutex_declare_static(exec_mutex); +static mtx_t exec_mutex = _MTX_INITIALIZER_NP; static unsigned int head = 0; @@ -123,7 +123,7 @@ u_execmem_alloc(unsigned int size) { void *addr = NULL; - u_mutex_lock(exec_mutex); + mtx_lock(&exec_mutex); if (!init_map()) goto bail; @@ -137,7 +137,7 @@ u_execmem_alloc(unsigned int size) head += size; bail: - u_mutex_unlock(exec_mutex); + mtx_unlock(&exec_mutex); return addr; } diff --git a/mesalib/src/mapi/u_thread.h b/mesalib/src/mapi/u_thread.h index ba5d98ea9..57c3b076a 100644 --- a/mesalib/src/mapi/u_thread.h +++ b/mesalib/src/mapi/u_thread.h @@ -57,9 +57,9 @@ /* * Error messages */ -#define INIT_TSD_ERROR "_glthread_: failed to allocate key for thread specific data" -#define GET_TSD_ERROR "_glthread_: failed to get thread specific data" -#define SET_TSD_ERROR "_glthread_: thread failed to set thread specific data" +#define INIT_TSD_ERROR "Mesa: failed to allocate key for thread specific data" +#define GET_TSD_ERROR "Mesa: failed to get thread specific data" +#define SET_TSD_ERROR "Mesa: thread failed to set thread specific data" /* @@ -79,20 +79,28 @@ struct u_tsd { unsigned initMagic; }; -typedef mtx_t u_mutex; - -#define u_mutex_declare_static(name) \ - static u_mutex name = _MTX_INITIALIZER_NP - -#define u_mutex_init(name) mtx_init(&(name), mtx_plain) -#define u_mutex_destroy(name) mtx_destroy(&(name)) -#define u_mutex_lock(name) (void) mtx_lock(&(name)) -#define u_mutex_unlock(name) (void) mtx_unlock(&(name)) static INLINE unsigned long u_thread_self(void) { + /* + * XXX: Callers of u_thread_self assume it is a lightweight function, + * returning a numeric value. But unfortunately C11's thrd_current() gives + * no such guarantees. In fact, it's pretty hard to have a compliant + * implementation of thrd_current() on Windows with such characteristics. + * So for now, we side-step this mess and use Windows thread primitives + * directly here. + * + * FIXME: On the other hand, u_thread_self() is a bad + * abstraction. Even with pthreads, there is no guarantee that + * pthread_self() will return numeric IDs -- we should be using + * pthread_equal() instead of assuming we can compare thread ids... + */ +#ifdef _WIN32 + return GetCurrentThreadId(); +#else return (unsigned long) (uintptr_t) thrd_current(); +#endif } |