Skip to content
Snippets Groups Projects
Commit 3bf00b6c authored by Emil Velikov's avatar Emil Velikov
Browse files

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's avatarAdam Jackson <ajax@redhat.com>
Signed-off-by: default avatarEmil Velikov <emil.velikov@collabora.com>
parent eab7e549
No related branches found
No related tags found
Loading
......@@ -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
};
......@@ -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,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment