diff options
author | Emil Velikov <[email protected]> | 2016-05-11 14:01:55 -0400 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2016-05-30 17:53:44 +0100 |
commit | 3bf00b6c6ac108f7d6cfc5c36401ccfd6a378469 (patch) | |
tree | cef56ea0e3748053be7c34433baf4208cb6e1b05 /src/glx | |
parent | eab7e54981017d7b87242505a215a370dfcd5024 (diff) |
glx/glvnd: rework dispatch functions/indices tables lookup
Rather than checking if the function name maps to a valid entry in the
respective table, just create a dummy entry at the end of each table.
This allows us to remove some unnessesary "index >= 0" checks, which get
executed quite often.
Reviewed-by: Adam Jackson <[email protected]>
Signed-off-by: Emil Velikov <[email protected]>
Diffstat (limited to 'src/glx')
-rw-r--r-- | src/glx/g_glxglvnddispatchfuncs.c | 7 | ||||
-rw-r--r-- | src/glx/glxglvnd.c | 19 |
2 files changed, 13 insertions, 13 deletions
diff --git a/src/glx/g_glxglvnddispatchfuncs.c b/src/glx/g_glxglvnddispatchfuncs.c index 13fbc5ea81b..72f0f68bf39 100644 --- a/src/glx/g_glxglvnddispatchfuncs.c +++ b/src/glx/g_glxglvnddispatchfuncs.c @@ -9,7 +9,8 @@ #include "g_glxglvnddispatchindices.h" const int DI_FUNCTION_COUNT = DI_LAST_INDEX; -int __glXDispatchTableIndices[DI_LAST_INDEX]; +/* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */ +int __glXDispatchTableIndices[DI_LAST_INDEX + 1]; const __GLXapiExports *__glXGLVNDAPIExports; const char * const __glXDispatchTableStrings[DI_LAST_INDEX] = { @@ -922,7 +923,8 @@ static Bool dispatch_glXWaitForSbcOML(Display *dpy, GLXDrawable drawable, #undef __FETCH_FUNCTION_PTR -const void * const __glXDispatchFunctions[DI_LAST_INDEX] = { +/* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */ +const void * const __glXDispatchFunctions[DI_LAST_INDEX + 1] = { #define __ATTRIB(field) \ [DI_##field] = (void *)dispatch_##field @@ -972,5 +974,6 @@ const void * const __glXDispatchFunctions[DI_LAST_INDEX] = { __ATTRIB(glXWaitForMscOML), __ATTRIB(glXWaitForSbcOML), + [DI_LAST_INDEX] = NULL, #undef __ATTRIB }; diff --git a/src/glx/glxglvnd.c b/src/glx/glxglvnd.c index 96cd1fd7e95..b7252a791ad 100644 --- a/src/glx/glxglvnd.c +++ b/src/glx/glxglvnd.c @@ -17,7 +17,7 @@ static void *__glXGLVNDGetProcAddress(const GLubyte *procName) return glXGetProcAddressARB(procName); } -static int FindGLXFunction(const GLubyte *name) +static unsigned FindGLXFunction(const GLubyte *name) { unsigned first = 0; unsigned last = DI_FUNCTION_COUNT - 1; @@ -34,26 +34,23 @@ static int FindGLXFunction(const GLubyte *name) else return middle; } - return -1; + + /* Just point to the dummy entry at the end of the respective table */ + return DI_FUNCTION_COUNT; } static void *__glXGLVNDGetDispatchAddress(const GLubyte *procName) { - int internalIndex = FindGLXFunction(procName); - - if (internalIndex >= 0) { - return __glXDispatchFunctions[internalIndex]; - } + unsigned internalIndex = FindGLXFunction(procName); - return NULL; + return __glXDispatchFunctions[internalIndex]; } static void __glXGLVNDSetDispatchIndex(const GLubyte *procName, int index) { - int internalIndex = FindGLXFunction(procName); + unsigned internalIndex = FindGLXFunction(procName); - if (internalIndex >= 0) - __glXDispatchTableIndices[internalIndex] = index; + __glXDispatchTableIndices[internalIndex] = index; } _X_EXPORT Bool __glx_Main(uint32_t version, const __GLXapiExports *exports, |