On 5 September 2016 at 11:23, Eric Engestrom <eric.engest...@imgtec.com> wrote: > On Fri, Sep 02, 2016 at 04:12:24PM -0400, Adam Jackson wrote: >> The dynamic dispatch table needs to be sorted properly, the entrypoints >> shouldn't duplicate the 'glX' prefix, and please just use bsearch() >> instead of open-coding it. >> >> Signed-off-by: Adam Jackson <a...@redhat.com> >> --- >> src/glx/g_glxglvnddispatchfuncs.c | 254 >> ++++++++++++++++++------------------ >> src/glx/g_glxglvnddispatchindices.h | 36 ++--- >> src/glx/glxglvnd.c | 32 ++--- >> 3 files changed, 161 insertions(+), 161 deletions(-) >> >> diff --git a/src/glx/g_glxglvnddispatchfuncs.c >> b/src/glx/g_glxglvnddispatchfuncs.c >> index e6b9c0b..b5e3398 100644 >> --- a/src/glx/g_glxglvnddispatchfuncs.c >> +++ b/src/glx/g_glxglvnddispatchfuncs.c >> @@ -17,16 +17,19 @@ const char * const >> __glXDispatchTableStrings[DI_LAST_INDEX] = { >> #define __ATTRIB(field) \ >> [DI_##field] = "glX"#field >> >> + __ATTRIB(BindSwapBarrierSGIX), >> __ATTRIB(BindTexImageEXT), >> // glXChooseFBConfig implemented by libglvnd >> __ATTRIB(ChooseFBConfigSGIX), >> // glXChooseVisual implemented by libglvnd >> // glXCopyContext implemented by libglvnd >> + __ATTRIB(CopySubBufferMESA), >> // glXCreateContext implemented by libglvnd >> __ATTRIB(CreateContextAttribsARB), >> __ATTRIB(CreateContextWithConfigSGIX), >> __ATTRIB(CreateGLXPbufferSGIX), >> // glXCreateGLXPixmap implemented by libglvnd >> + __ATTRIB(CreateGLXPixmapMESA), >> __ATTRIB(CreateGLXPixmapWithConfigSGIX), >> // glXCreateNewContext implemented by libglvnd >> // glXCreatePbuffer implemented by libglvnd >> @@ -51,54 +54,50 @@ const char * const >> __glXDispatchTableStrings[DI_LAST_INDEX] = { >> __ATTRIB(GetFBConfigAttribSGIX), >> __ATTRIB(GetFBConfigFromVisualSGIX), >> // glXGetFBConfigs implemented by libglvnd >> + __ATTRIB(GetMscRateOML), >> // glXGetProcAddress implemented by libglvnd >> // glXGetProcAddressARB implemented by libglvnd >> + __ATTRIB(GetScreenDriver), >> // glXGetSelectedEvent implemented by libglvnd >> __ATTRIB(GetSelectedEventSGIX), >> + __ATTRIB(GetSwapIntervalMESA), >> + __ATTRIB(GetSyncValuesOML), >> __ATTRIB(GetVideoSyncSGI), >> // glXGetVisualFromFBConfig implemented by libglvnd >> __ATTRIB(GetVisualFromFBConfigSGIX), >> // glXImportContextEXT implemented by libglvnd >> // glXIsDirect implemented by libglvnd >> + __ATTRIB(JoinSwapGroupSGIX), >> // glXMakeContextCurrent implemented by libglvnd >> // glXMakeCurrent implemented by libglvnd >> // glXQueryContext implemented by libglvnd >> __ATTRIB(QueryContextInfoEXT), >> + __ATTRIB(QueryCurrentRendererIntegerMESA), >> + __ATTRIB(QueryCurrentRendererStringMESA), >> // glXQueryDrawable implemented by libglvnd >> // glXQueryExtension implemented by libglvnd >> // glXQueryExtensionsString implemented by libglvnd >> __ATTRIB(QueryGLXPbufferSGIX), >> + __ATTRIB(QueryMaxSwapBarriersSGIX), >> + __ATTRIB(QueryRendererIntegerMESA), >> + __ATTRIB(QueryRendererStringMESA), >> // glXQueryServerString implemented by libglvnd >> // glXQueryVersion implemented by libglvnd >> + __ATTRIB(ReleaseBuffersMESA), >> __ATTRIB(ReleaseTexImageEXT), >> // glXSelectEvent implemented by libglvnd >> __ATTRIB(SelectEventSGIX), >> // glXSwapBuffers implemented by libglvnd >> + __ATTRIB(SwapBuffersMscOML), >> + __ATTRIB(SwapIntervalMESA), >> __ATTRIB(SwapIntervalSGI), >> // glXUseXFont implemented by libglvnd >> + __ATTRIB(WaitForMscOML), >> + __ATTRIB(WaitForSbcOML), >> // glXWaitGL implemented by libglvnd >> __ATTRIB(WaitVideoSyncSGI), >> // glXWaitX implemented by libglvnd >> >> - __ATTRIB(glXBindSwapBarrierSGIX), >> - __ATTRIB(glXCopySubBufferMESA), >> - __ATTRIB(glXCreateGLXPixmapMESA), >> - __ATTRIB(glXGetMscRateOML), >> - __ATTRIB(glXGetScreenDriver), >> - __ATTRIB(glXGetSwapIntervalMESA), >> - __ATTRIB(glXGetSyncValuesOML), >> - __ATTRIB(glXJoinSwapGroupSGIX), >> - __ATTRIB(glXQueryCurrentRendererIntegerMESA), >> - __ATTRIB(glXQueryCurrentRendererStringMESA), >> - __ATTRIB(glXQueryMaxSwapBarriersSGIX), >> - __ATTRIB(glXQueryRendererIntegerMESA), >> - __ATTRIB(glXQueryRendererStringMESA), >> - __ATTRIB(glXReleaseBuffersMESA), >> - __ATTRIB(glXSwapBuffersMscOML), >> - __ATTRIB(glXSwapIntervalMESA), >> - __ATTRIB(glXWaitForMscOML), >> - __ATTRIB(glXWaitForSbcOML), >> - >> #undef __ATTRIB >> }; >> >> @@ -557,49 +556,49 @@ static int dispatch_WaitVideoSyncSGI(int divisor, int >> remainder, >> >> >> >> -static void dispatch_glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable >> drawable, >> +static void dispatch_BindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, >> int barrier) >> { >> - PFNGLXBINDSWAPBARRIERSGIXPROC pglXBindSwapBarrierSGIX; >> + PFNGLXBINDSWAPBARRIERSGIXPROC pBindSwapBarrierSGIX; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return; >> >> - __FETCH_FUNCTION_PTR(glXBindSwapBarrierSGIX); >> - if (pglXBindSwapBarrierSGIX == NULL) >> + __FETCH_FUNCTION_PTR(BindSwapBarrierSGIX); >> + if (pBindSwapBarrierSGIX == NULL) >> return; >> >> - (*pglXBindSwapBarrierSGIX)(dpy, drawable, barrier); >> + (*pBindSwapBarrierSGIX)(dpy, drawable, barrier); >> } >> >> >> >> -static void dispatch_glXCopySubBufferMESA(Display *dpy, GLXDrawable >> drawable, >> +static void dispatch_CopySubBufferMESA(Display *dpy, GLXDrawable drawable, >> int x, int y, int width, int >> height) >> { >> - PFNGLXCOPYSUBBUFFERMESAPROC pglXCopySubBufferMESA; >> + PFNGLXCOPYSUBBUFFERMESAPROC pCopySubBufferMESA; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return; >> >> - __FETCH_FUNCTION_PTR(glXCopySubBufferMESA); >> - if (pglXCopySubBufferMESA == NULL) >> + __FETCH_FUNCTION_PTR(CopySubBufferMESA); >> + if (pCopySubBufferMESA == NULL) >> return; >> >> - (*pglXCopySubBufferMESA)(dpy, drawable, x, y, width, height); >> + (*pCopySubBufferMESA)(dpy, drawable, x, y, width, height); >> } >> >> >> >> -static GLXPixmap dispatch_glXCreateGLXPixmapMESA(Display *dpy, >> +static GLXPixmap dispatch_CreateGLXPixmapMESA(Display *dpy, >> XVisualInfo *visinfo, >> Pixmap pixmap, Colormap >> cmap) >> { >> - PFNGLXCREATEGLXPIXMAPMESAPROC pglXCreateGLXPixmapMESA; >> + PFNGLXCREATEGLXPIXMAPMESAPROC pCreateGLXPixmapMESA; >> __GLXvendorInfo *dd; >> GLXPixmap ret; >> >> @@ -607,11 +606,11 @@ static GLXPixmap >> dispatch_glXCreateGLXPixmapMESA(Display *dpy, >> if (dd == NULL) >> return None; >> >> - __FETCH_FUNCTION_PTR(glXCreateGLXPixmapMESA); >> - if (pglXCreateGLXPixmapMESA == NULL) >> + __FETCH_FUNCTION_PTR(CreateGLXPixmapMESA); >> + if (pCreateGLXPixmapMESA == NULL) >> return None; >> >> - ret = (*pglXCreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap); >> + ret = (*pCreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap); >> if (AddDrawableMapping(dpy, ret, dd)) { >> /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're >> not >> * allowed to call it from here, should we extend >> __glXDispatchTableIndices ? >> @@ -624,47 +623,47 @@ static GLXPixmap >> dispatch_glXCreateGLXPixmapMESA(Display *dpy, >> >> >> >> -static GLboolean dispatch_glXGetMscRateOML(Display *dpy, GLXDrawable >> drawable, >> +static GLboolean dispatch_GetMscRateOML(Display *dpy, GLXDrawable drawable, >> int32_t *numerator, int32_t >> *denominator) >> { >> - PFNGLXGETMSCRATEOMLPROC pglXGetMscRateOML; >> + PFNGLXGETMSCRATEOMLPROC pGetMscRateOML; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return GL_FALSE; >> >> - __FETCH_FUNCTION_PTR(glXGetMscRateOML); >> - if (pglXGetMscRateOML == NULL) >> + __FETCH_FUNCTION_PTR(GetMscRateOML); >> + if (pGetMscRateOML == NULL) >> return GL_FALSE; >> >> - return (*pglXGetMscRateOML)(dpy, drawable, numerator, denominator); >> + return (*pGetMscRateOML)(dpy, drawable, numerator, denominator); >> } >> >> >> >> -static const char *dispatch_glXGetScreenDriver(Display *dpy, int scrNum) >> +static const char *dispatch_GetScreenDriver(Display *dpy, int scrNum) >> { >> typedef const char *(*fn_glXGetScreenDriver_ptr)(Display *dpy, int >> scrNum); >> - fn_glXGetScreenDriver_ptr pglXGetScreenDriver; >> + fn_glXGetScreenDriver_ptr pGetScreenDriver; >> __GLXvendorInfo *dd; >> >> dd = __VND->getDynDispatch(dpy, scrNum); >> if (dd == NULL) >> return NULL; >> >> - __FETCH_FUNCTION_PTR(glXGetScreenDriver); >> - if (pglXGetScreenDriver == NULL) >> + __FETCH_FUNCTION_PTR(GetScreenDriver); >> + if (pGetScreenDriver == NULL) >> return NULL; >> >> - return (*pglXGetScreenDriver)(dpy, scrNum); >> + return (*pGetScreenDriver)(dpy, scrNum); >> } >> >> >> >> -static int dispatch_glXGetSwapIntervalMESA(void) >> +static int dispatch_GetSwapIntervalMESA(void) >> { >> - PFNGLXGETSWAPINTERVALMESAPROC pglXGetSwapIntervalMESA; >> + PFNGLXGETSWAPINTERVALMESAPROC pGetSwapIntervalMESA; >> __GLXvendorInfo *dd; >> >> if (!__VND->getCurrentContext()) >> @@ -674,57 +673,57 @@ static int dispatch_glXGetSwapIntervalMESA(void) >> if (dd == NULL) >> return 0; >> >> - __FETCH_FUNCTION_PTR(glXGetSwapIntervalMESA); >> - if (pglXGetSwapIntervalMESA == NULL) >> + __FETCH_FUNCTION_PTR(GetSwapIntervalMESA); >> + if (pGetSwapIntervalMESA == NULL) >> return 0; >> >> - return (*pglXGetSwapIntervalMESA)(); >> + return (*pGetSwapIntervalMESA)(); >> } >> >> >> >> -static Bool dispatch_glXGetSyncValuesOML(Display *dpy, GLXDrawable drawable, >> +static Bool dispatch_GetSyncValuesOML(Display *dpy, GLXDrawable drawable, >> int64_t *ust, int64_t *msc, >> int64_t *sbc) >> { >> - PFNGLXGETSYNCVALUESOMLPROC pglXGetSyncValuesOML; >> + PFNGLXGETSYNCVALUESOMLPROC pGetSyncValuesOML; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return False; >> >> - __FETCH_FUNCTION_PTR(glXGetSyncValuesOML); >> - if (pglXGetSyncValuesOML == NULL) >> + __FETCH_FUNCTION_PTR(GetSyncValuesOML); >> + if (pGetSyncValuesOML == NULL) >> return False; >> >> - return (*pglXGetSyncValuesOML)(dpy, drawable, ust, msc, sbc); >> + return (*pGetSyncValuesOML)(dpy, drawable, ust, msc, sbc); >> } >> >> >> >> -static void dispatch_glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable >> drawable, >> +static void dispatch_JoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, >> GLXDrawable member) >> { >> - PFNGLXJOINSWAPGROUPSGIXPROC pglXJoinSwapGroupSGIX; >> + PFNGLXJOINSWAPGROUPSGIXPROC pJoinSwapGroupSGIX; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return; >> >> - __FETCH_FUNCTION_PTR(glXJoinSwapGroupSGIX); >> - if (pglXJoinSwapGroupSGIX == NULL) >> + __FETCH_FUNCTION_PTR(JoinSwapGroupSGIX); >> + if (pJoinSwapGroupSGIX == NULL) >> return; >> >> - (*pglXJoinSwapGroupSGIX)(dpy, drawable, member); >> + (*pJoinSwapGroupSGIX)(dpy, drawable, member); >> } >> >> >> >> -static Bool dispatch_glXQueryCurrentRendererIntegerMESA(int attribute, >> +static Bool dispatch_QueryCurrentRendererIntegerMESA(int attribute, >> unsigned int *value) >> { >> - PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC >> pglXQueryCurrentRendererIntegerMESA; >> + PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC >> pQueryCurrentRendererIntegerMESA; >> __GLXvendorInfo *dd; >> >> if (!__VND->getCurrentContext()) >> @@ -734,18 +733,18 @@ static Bool >> dispatch_glXQueryCurrentRendererIntegerMESA(int attribute, >> if (dd == NULL) >> return False; >> >> - __FETCH_FUNCTION_PTR(glXQueryCurrentRendererIntegerMESA); >> - if (pglXQueryCurrentRendererIntegerMESA == NULL) >> + __FETCH_FUNCTION_PTR(QueryCurrentRendererIntegerMESA); >> + if (pQueryCurrentRendererIntegerMESA == NULL) >> return False; >> >> - return (*pglXQueryCurrentRendererIntegerMESA)(attribute, value); >> + return (*pQueryCurrentRendererIntegerMESA)(attribute, value); >> } >> >> >> >> -static const char *dispatch_glXQueryCurrentRendererStringMESA(int attribute) >> +static const char *dispatch_QueryCurrentRendererStringMESA(int attribute) >> { >> - PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC >> pglXQueryCurrentRendererStringMESA; >> + PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC >> pQueryCurrentRendererStringMESA; >> __GLXvendorInfo *dd; >> >> if (!__VND->getCurrentContext()) >> @@ -755,114 +754,114 @@ static const char >> *dispatch_glXQueryCurrentRendererStringMESA(int attribute) >> if (dd == NULL) >> return NULL; >> >> - __FETCH_FUNCTION_PTR(glXQueryCurrentRendererStringMESA); >> - if (pglXQueryCurrentRendererStringMESA == NULL) >> + __FETCH_FUNCTION_PTR(QueryCurrentRendererStringMESA); >> + if (pQueryCurrentRendererStringMESA == NULL) >> return NULL; >> >> - return (*pglXQueryCurrentRendererStringMESA)(attribute); >> + return (*pQueryCurrentRendererStringMESA)(attribute); >> } >> >> >> >> -static Bool dispatch_glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, >> +static Bool dispatch_QueryMaxSwapBarriersSGIX(Display *dpy, int screen, >> int *max) >> { >> - PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pglXQueryMaxSwapBarriersSGIX; >> + PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pQueryMaxSwapBarriersSGIX; >> __GLXvendorInfo *dd; >> >> dd = __VND->getDynDispatch(dpy, screen); >> if (dd == NULL) >> return False; >> >> - __FETCH_FUNCTION_PTR(glXQueryMaxSwapBarriersSGIX); >> - if (pglXQueryMaxSwapBarriersSGIX == NULL) >> + __FETCH_FUNCTION_PTR(QueryMaxSwapBarriersSGIX); >> + if (pQueryMaxSwapBarriersSGIX == NULL) >> return False; >> >> - return (*pglXQueryMaxSwapBarriersSGIX)(dpy, screen, max); >> + return (*pQueryMaxSwapBarriersSGIX)(dpy, screen, max); >> } >> >> >> >> -static Bool dispatch_glXQueryRendererIntegerMESA(Display *dpy, int screen, >> +static Bool dispatch_QueryRendererIntegerMESA(Display *dpy, int screen, >> int renderer, int >> attribute, >> unsigned int *value) >> { >> - PFNGLXQUERYRENDERERINTEGERMESAPROC pglXQueryRendererIntegerMESA; >> + PFNGLXQUERYRENDERERINTEGERMESAPROC pQueryRendererIntegerMESA; >> __GLXvendorInfo *dd; >> >> dd = __VND->getDynDispatch(dpy, screen); >> if (dd == NULL) >> return False; >> >> - __FETCH_FUNCTION_PTR(glXQueryRendererIntegerMESA); >> - if (pglXQueryRendererIntegerMESA == NULL) >> + __FETCH_FUNCTION_PTR(QueryRendererIntegerMESA); >> + if (pQueryRendererIntegerMESA == NULL) >> return False; >> >> - return (*pglXQueryRendererIntegerMESA)(dpy, screen, renderer, >> attribute, value); >> + return (*pQueryRendererIntegerMESA)(dpy, screen, renderer, attribute, >> value); >> } >> >> >> >> -static const char *dispatch_glXQueryRendererStringMESA(Display *dpy, int >> screen, >> +static const char *dispatch_QueryRendererStringMESA(Display *dpy, int >> screen, >> int renderer, int >> attribute) >> { >> - PFNGLXQUERYRENDERERSTRINGMESAPROC pglXQueryRendererStringMESA; >> + PFNGLXQUERYRENDERERSTRINGMESAPROC pQueryRendererStringMESA; >> __GLXvendorInfo *dd = NULL; >> >> dd = __VND->getDynDispatch(dpy, screen); >> if (dd == NULL) >> return NULL; >> >> - __FETCH_FUNCTION_PTR(glXQueryRendererStringMESA); >> - if (pglXQueryRendererStringMESA == NULL) >> + __FETCH_FUNCTION_PTR(QueryRendererStringMESA); >> + if (pQueryRendererStringMESA == NULL) >> return NULL; >> >> - return (*pglXQueryRendererStringMESA)(dpy, screen, renderer, attribute); >> + return (*pQueryRendererStringMESA)(dpy, screen, renderer, attribute); >> } >> >> >> >> -static Bool dispatch_glXReleaseBuffersMESA(Display *dpy, GLXDrawable d) >> +static Bool dispatch_ReleaseBuffersMESA(Display *dpy, GLXDrawable d) >> { >> - PFNGLXRELEASEBUFFERSMESAPROC pglXReleaseBuffersMESA; >> + PFNGLXRELEASEBUFFERSMESAPROC pReleaseBuffersMESA; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, d); >> if (dd == NULL) >> return False; >> >> - __FETCH_FUNCTION_PTR(glXReleaseBuffersMESA); >> - if (pglXReleaseBuffersMESA == NULL) >> + __FETCH_FUNCTION_PTR(ReleaseBuffersMESA); >> + if (pReleaseBuffersMESA == NULL) >> return False; >> >> - return (*pglXReleaseBuffersMESA)(dpy, d); >> + return (*pReleaseBuffersMESA)(dpy, d); >> } >> >> >> >> -static int64_t dispatch_glXSwapBuffersMscOML(Display *dpy, GLXDrawable >> drawable, >> +static int64_t dispatch_SwapBuffersMscOML(Display *dpy, GLXDrawable >> drawable, >> int64_t target_msc, int64_t >> divisor, >> int64_t remainder) >> { >> - PFNGLXSWAPBUFFERSMSCOMLPROC pglXSwapBuffersMscOML; >> + PFNGLXSWAPBUFFERSMSCOMLPROC pSwapBuffersMscOML; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return 0; >> >> - __FETCH_FUNCTION_PTR(glXSwapBuffersMscOML); >> - if (pglXSwapBuffersMscOML == NULL) >> + __FETCH_FUNCTION_PTR(SwapBuffersMscOML); >> + if (pSwapBuffersMscOML == NULL) >> return 0; >> >> - return (*pglXSwapBuffersMscOML)(dpy, drawable, target_msc, divisor, >> remainder); >> + return (*pSwapBuffersMscOML)(dpy, drawable, target_msc, divisor, >> remainder); >> } >> >> >> >> -static int dispatch_glXSwapIntervalMESA(unsigned int interval) >> +static int dispatch_SwapIntervalMESA(unsigned int interval) >> { >> - PFNGLXSWAPINTERVALMESAPROC pglXSwapIntervalMESA; >> + PFNGLXSWAPINTERVALMESAPROC pSwapIntervalMESA; >> __GLXvendorInfo *dd; >> >> if (!__VND->getCurrentContext()) >> @@ -872,52 +871,52 @@ static int dispatch_glXSwapIntervalMESA(unsigned int >> interval) >> if (dd == NULL) >> return 0; >> >> - __FETCH_FUNCTION_PTR(glXSwapIntervalMESA); >> - if (pglXSwapIntervalMESA == NULL) >> + __FETCH_FUNCTION_PTR(SwapIntervalMESA); >> + if (pSwapIntervalMESA == NULL) >> return 0; >> >> - return (*pglXSwapIntervalMESA)(interval); >> + return (*pSwapIntervalMESA)(interval); >> } >> >> >> >> -static Bool dispatch_glXWaitForMscOML(Display *dpy, GLXDrawable drawable, >> +static Bool dispatch_WaitForMscOML(Display *dpy, GLXDrawable drawable, >> int64_t target_msc, int64_t divisor, >> int64_t remainder, int64_t *ust, >> int64_t *msc, int64_t *sbc) >> { >> - PFNGLXWAITFORMSCOMLPROC pglXWaitForMscOML; >> + PFNGLXWAITFORMSCOMLPROC pWaitForMscOML; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return False; >> >> - __FETCH_FUNCTION_PTR(glXWaitForMscOML); >> - if (pglXWaitForMscOML == NULL) >> + __FETCH_FUNCTION_PTR(WaitForMscOML); >> + if (pWaitForMscOML == NULL) >> return False; >> >> - return (*pglXWaitForMscOML)(dpy, drawable, target_msc, divisor, >> remainder, ust, msc, sbc); >> + return (*pWaitForMscOML)(dpy, drawable, target_msc, divisor, remainder, >> ust, msc, sbc); >> } >> >> >> >> -static Bool dispatch_glXWaitForSbcOML(Display *dpy, GLXDrawable drawable, >> +static Bool dispatch_WaitForSbcOML(Display *dpy, GLXDrawable drawable, >> int64_t target_sbc, int64_t *ust, >> int64_t *msc, int64_t *sbc) >> { >> - PFNGLXWAITFORSBCOMLPROC pglXWaitForSbcOML; >> + PFNGLXWAITFORSBCOMLPROC pWaitForSbcOML; >> __GLXvendorInfo *dd; >> >> dd = GetDispatchFromDrawable(dpy, drawable); >> if (dd == NULL) >> return False; >> >> - __FETCH_FUNCTION_PTR(glXWaitForSbcOML); >> - if (pglXWaitForSbcOML == NULL) >> + __FETCH_FUNCTION_PTR(WaitForSbcOML); >> + if (pWaitForSbcOML == NULL) >> return False; >> >> - return (*pglXWaitForSbcOML)(dpy, drawable, target_sbc, ust, msc, sbc); >> + return (*pWaitForSbcOML)(dpy, drawable, target_sbc, ust, msc, sbc); >> } >> >> #undef __FETCH_FUNCTION_PTR >> @@ -928,45 +927,44 @@ const void * const >> __glXDispatchFunctions[DI_LAST_INDEX + 1] = { >> #define __ATTRIB(field) \ >> [DI_##field] = (void *)dispatch_##field >> >> - __ATTRIB(BindTexImageEXT), >> + __ATTRIB(BindSwapBarrierSGIX), >> __ATTRIB(BindTexImageEXT), >> __ATTRIB(ChooseFBConfigSGIX), >> + __ATTRIB(CopySubBufferMESA), >> __ATTRIB(CreateContextAttribsARB), >> __ATTRIB(CreateContextWithConfigSGIX), >> __ATTRIB(CreateGLXPbufferSGIX), >> + __ATTRIB(CreateGLXPixmapMESA), >> __ATTRIB(CreateGLXPixmapWithConfigSGIX), >> __ATTRIB(DestroyGLXPbufferSGIX), >> __ATTRIB(GetContextIDEXT), >> __ATTRIB(GetCurrentDisplayEXT), >> __ATTRIB(GetFBConfigAttribSGIX), >> __ATTRIB(GetFBConfigFromVisualSGIX), >> + __ATTRIB(GetMscRateOML), >> + __ATTRIB(GetScreenDriver), >> __ATTRIB(GetSelectedEventSGIX), >> + __ATTRIB(GetSwapIntervalMESA), >> + __ATTRIB(GetSyncValuesOML), >> __ATTRIB(GetVideoSyncSGI), >> __ATTRIB(GetVisualFromFBConfigSGIX), >> + __ATTRIB(JoinSwapGroupSGIX), >> __ATTRIB(QueryContextInfoEXT), >> + __ATTRIB(QueryCurrentRendererIntegerMESA), >> + __ATTRIB(QueryCurrentRendererStringMESA), >> __ATTRIB(QueryGLXPbufferSGIX), >> + __ATTRIB(QueryMaxSwapBarriersSGIX), >> + __ATTRIB(QueryRendererIntegerMESA), >> + __ATTRIB(QueryRendererStringMESA), >> + __ATTRIB(ReleaseBuffersMESA), >> __ATTRIB(ReleaseTexImageEXT), >> __ATTRIB(SelectEventSGIX), >> + __ATTRIB(SwapBuffersMscOML), >> + __ATTRIB(SwapIntervalMESA), >> __ATTRIB(SwapIntervalSGI), >> + __ATTRIB(WaitForMscOML), >> + __ATTRIB(WaitForSbcOML), >> __ATTRIB(WaitVideoSyncSGI), >> - __ATTRIB(glXBindSwapBarrierSGIX), >> - __ATTRIB(glXCopySubBufferMESA), >> - __ATTRIB(glXCreateGLXPixmapMESA), >> - __ATTRIB(glXGetMscRateOML), >> - __ATTRIB(glXGetScreenDriver), >> - __ATTRIB(glXGetSwapIntervalMESA), >> - __ATTRIB(glXGetSyncValuesOML), >> - __ATTRIB(glXJoinSwapGroupSGIX), >> - __ATTRIB(glXQueryCurrentRendererIntegerMESA), >> - __ATTRIB(glXQueryCurrentRendererStringMESA), >> - __ATTRIB(glXQueryMaxSwapBarriersSGIX), >> - __ATTRIB(glXQueryRendererIntegerMESA), >> - __ATTRIB(glXQueryRendererStringMESA), >> - __ATTRIB(glXReleaseBuffersMESA), >> - __ATTRIB(glXSwapBuffersMscOML), >> - __ATTRIB(glXSwapIntervalMESA), >> - __ATTRIB(glXWaitForMscOML), >> - __ATTRIB(glXWaitForSbcOML), >> >> [DI_LAST_INDEX] = NULL, >> #undef __ATTRIB >> diff --git a/src/glx/g_glxglvnddispatchindices.h >> b/src/glx/g_glxglvnddispatchindices.h >> index fd2156e..0891654 100644 >> --- a/src/glx/g_glxglvnddispatchindices.h >> +++ b/src/glx/g_glxglvnddispatchindices.h >> @@ -6,16 +6,19 @@ >> #define __glxlibglvnd_dispatchindex_h__ >> >> typedef enum __GLXdispatchIndex { >> + DI_BindSwapBarrierSGIX, >> DI_BindTexImageEXT, >> // ChooseFBConfig implemented by libglvnd >> DI_ChooseFBConfigSGIX, >> // ChooseVisual implemented by libglvnd >> // CopyContext implemented by libglvnd >> + DI_CopySubBufferMESA, >> // CreateContext implemented by libglvnd >> DI_CreateContextAttribsARB, >> DI_CreateContextWithConfigSGIX, >> DI_CreateGLXPbufferSGIX, >> // CreateGLXPixmap implemented by libglvnd >> + DI_CreateGLXPixmapMESA, >> DI_CreateGLXPixmapWithConfigSGIX, >> // CreateNewContext implemented by libglvnd >> // CreatePbuffer implemented by libglvnd >> @@ -40,6 +43,7 @@ typedef enum __GLXdispatchIndex { >> DI_GetFBConfigAttribSGIX, >> DI_GetFBConfigFromVisualSGIX, >> // GetFBConfigs implemented by libglvnd >> + DI_GetMscRateOML, >> // GetProcAddress implemented by libglvnd >> // GetProcAddressARB implemented by libglvnd >> // GetSelectedEvent implemented by libglvnd >> @@ -47,45 +51,41 @@ typedef enum __GLXdispatchIndex { >> DI_GetVideoSyncSGI, >> // GetVisualFromFBConfig implemented by libglvnd >> DI_GetVisualFromFBConfigSGIX, >> + DI_GetScreenDriver, >> + DI_GetSwapIntervalMESA, >> + DI_GetSyncValuesOML, >> // ImportContextEXT implemented by libglvnd >> // IsDirect implemented by libglvnd >> + DI_JoinSwapGroupSGIX, >> // MakeContextCurrent implemented by libglvnd >> // MakeCurrent implemented by libglvnd >> // QueryContext implemented by libglvnd >> DI_QueryContextInfoEXT, >> + DI_QueryCurrentRendererIntegerMESA, >> + DI_QueryCurrentRendererStringMESA, >> // QueryDrawable implemented by libglvnd >> // QueryExtension implemented by libglvnd >> // QueryExtensionsString implemented by libglvnd >> DI_QueryGLXPbufferSGIX, >> + DI_QueryMaxSwapBarriersSGIX, >> + DI_QueryRendererIntegerMESA, >> + DI_QueryRendererStringMESA, >> // QueryServerString implemented by libglvnd >> // QueryVersion implemented by libglvnd >> + DI_ReleaseBuffersMESA, >> DI_ReleaseTexImageEXT, >> // SelectEvent implemented by libglvnd >> DI_SelectEventSGIX, >> // SwapBuffers implemented by libglvnd >> + DI_SwapBuffersMscOML, >> + DI_SwapIntervalMESA, >> DI_SwapIntervalSGI, >> // UseXFont implemented by libglvnd >> // WaitGL implemented by libglvnd >> + DI_WaitForMscOML, >> + DI_WaitForSbcOML, >> DI_WaitVideoSyncSGI, >> // WaitX implemented by libglvnd >> - DI_glXBindSwapBarrierSGIX, >> - DI_glXCopySubBufferMESA, >> - DI_glXCreateGLXPixmapMESA, >> - DI_glXGetMscRateOML, >> - DI_glXGetScreenDriver, >> - DI_glXGetSwapIntervalMESA, >> - DI_glXGetSyncValuesOML, >> - DI_glXJoinSwapGroupSGIX, >> - DI_glXQueryCurrentRendererIntegerMESA, >> - DI_glXQueryCurrentRendererStringMESA, >> - DI_glXQueryMaxSwapBarriersSGIX, >> - DI_glXQueryRendererIntegerMESA, >> - DI_glXQueryRendererStringMESA, >> - DI_glXReleaseBuffersMESA, >> - DI_glXSwapBuffersMscOML, >> - DI_glXSwapIntervalMESA, >> - DI_glXWaitForMscOML, >> - DI_glXWaitForSbcOML, >> DI_LAST_INDEX >> } __GLXdispatchIndex; >> >> diff --git a/src/glx/glxglvnd.c b/src/glx/glxglvnd.c >> index 962eda8..21ffc38 100644 >> --- a/src/glx/glxglvnd.c >> +++ b/src/glx/glxglvnd.c >> @@ -5,6 +5,7 @@ >> >> #include "glxglvnd.h" >> >> +#include <stdlib.h> >> >> static Bool __glXGLVNDIsScreenSupported(Display *dpy, int screen) >> { >> @@ -17,26 +18,24 @@ static void *__glXGLVNDGetProcAddress(const GLubyte >> *procName) >> return glXGetProcAddressARB(procName); >> } >> >> +static int >> +compare(const void *l, const void *r) >> +{ >> + const char *s = *(const char **)r; > > Shouldn't we do the same with `l`? > >> + return strcmp(l, s); >> +} >> + >> static unsigned FindGLXFunction(const GLubyte *name) >> { >> - int first = 0; >> - int last = DI_FUNCTION_COUNT - 1; >> + const char **match; >> >> - while (first <= last) { >> - int middle = (first + last) / 2; >> - int comp = strcmp((const char *) name, >> - __glXDispatchTableStrings[middle]); >> + match = bsearch(name, __glXDispatchTableStrings, DI_FUNCTION_COUNT, >> + sizeof(const char *), compare); > > stray tab > >> >> - if (comp < 0) >> - first = middle + 1; >> - else if (comp > 0) >> - last = middle - 1; >> - else >> - return middle; >> - } >> + if (match == NULL) >> + return DI_FUNCTION_COUNT; > > stray tab > >> >> - /* Just point to the dummy entry at the end of the respective table */ >> - return DI_FUNCTION_COUNT; >> + return match - __glXDispatchTableStrings; >> } > > I didn't know bsearch() existed, but that's a much cleaner solution indeed. > > The whole thing is: > Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> > > but IMHO this should be 3-4 patches: > - replace the open-coded binary sort with bsearch() > - reorder the names to actually be binary searchable > - remove the glX prefixes (will need a reorder too, so it could be squashed > with the previous patch) > - add the missing return in the hunk below > Wrt the glx prefixed functions - they go through a layer of indirection and we still get to the correct functions. I started going through the 'generated' file, nuking everything but the ones we need which ended up a bit longer than expected. It's nice to have and not an actual bug.
On the 'sin' part ... relating that to the discoveries in xserver I'd call it a walk in the park ;-) But if you insist, please split it out from the other refactoring. For the moment I'll go with the 2 line fix. Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev