From f59b95c7b39a95da71b90065041d88fece811dcf Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 21 Jan 2021 12:19:12 -0800 Subject: [PATCH] glx: Provide glvnd wrapper for glXSwapIntervalEXT When using glvnd, this function needs to be exposed through getDispatchAddress or libglvnd will not find it. Signed-off-by: Keith Packard Reviewed-by: Adam Jackson Fixes: 60ebeb4608a8 "glx: Implement GLX_EXT_swap_control for DRI2 and DRI3" Part-of: (cherry picked from commit d548d781eee91842695cf54a3161348bf6a06a2e) --- .pick_status.json | 2 +- src/glx/g_glxglvnddispatchfuncs.c | 20 ++++++++++++++++++++ src/glx/g_glxglvnddispatchindices.h | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index cdf797d4d1e..df27e3365f8 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -427,7 +427,7 @@ "description": "glx: Provide glvnd wrapper for glXSwapIntervalEXT", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "60ebeb4608a871ba89ba081c1c6e7ebdd5efec9a" }, diff --git a/src/glx/g_glxglvnddispatchfuncs.c b/src/glx/g_glxglvnddispatchfuncs.c index 0f02ed2d321..e0ea27c0b18 100644 --- a/src/glx/g_glxglvnddispatchfuncs.c +++ b/src/glx/g_glxglvnddispatchfuncs.c @@ -87,6 +87,7 @@ const char * const __glXDispatchTableStrings[DI_LAST_INDEX] = { __ATTRIB(SelectEventSGIX), // glXSwapBuffers implemented by libglvnd __ATTRIB(SwapBuffersMscOML), + __ATTRIB(SwapIntervalEXT), __ATTRIB(SwapIntervalMESA), __ATTRIB(SwapIntervalSGI), // glXUseXFont implemented by libglvnd @@ -893,6 +894,24 @@ static int dispatch_SwapIntervalMESA(unsigned int interval) +static void dispatch_SwapIntervalEXT(Display *dpy, GLXDrawable drawable, int interval) +{ + PFNGLXSWAPINTERVALEXTPROC pSwapIntervalEXT; + __GLXvendorInfo *dd; + + dd = GetDispatchFromDrawable(dpy, drawable); + if (dd == NULL) + return; + + __FETCH_FUNCTION_PTR(SwapIntervalEXT); + if (pSwapIntervalEXT == NULL) + return; + + pSwapIntervalEXT(dpy, drawable, interval); +} + + + static Bool dispatch_WaitForMscOML(Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, @@ -974,6 +993,7 @@ const void * const __glXDispatchFunctions[DI_LAST_INDEX + 1] = { __ATTRIB(ReleaseTexImageEXT), __ATTRIB(SelectEventSGIX), __ATTRIB(SwapBuffersMscOML), + __ATTRIB(SwapIntervalEXT), __ATTRIB(SwapIntervalMESA), __ATTRIB(SwapIntervalSGI), __ATTRIB(WaitForMscOML), diff --git a/src/glx/g_glxglvnddispatchindices.h b/src/glx/g_glxglvnddispatchindices.h index 3ba50a74abb..b65d078098f 100644 --- a/src/glx/g_glxglvnddispatchindices.h +++ b/src/glx/g_glxglvnddispatchindices.h @@ -79,6 +79,7 @@ typedef enum __GLXdispatchIndex { DI_SelectEventSGIX, // SwapBuffers implemented by libglvnd DI_SwapBuffersMscOML, + DI_SwapIntervalEXT, DI_SwapIntervalMESA, DI_SwapIntervalSGI, // UseXFont implemented by libglvnd