From 520572eb258dc34f9743711203086f659afbd5c0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 1 Aug 2024 16:19:40 -0400 Subject: [PATCH] glx: inline __GLXDRIscreen onto base glx_screen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this is much less awkward Reviewed-by: Marek Olšák Part-of: --- src/glx/dri2_glx.c | 7 +++--- src/glx/dri2_priv.h | 2 -- src/glx/dri3_glx.c | 3 +-- src/glx/dri3_priv.h | 2 -- src/glx/dri_common.c | 2 +- src/glx/drisw_glx.c | 3 +-- src/glx/drisw_priv.h | 2 -- src/glx/driwindows_glx.c | 4 +-- src/glx/glx_pbuffer.c | 8 +++--- src/glx/glxclient.h | 2 +- src/glx/glxcmds.c | 54 +++++++++++++++++++--------------------- src/glx/glxext.c | 4 +-- 12 files changed, 40 insertions(+), 53 deletions(-) diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 397b6a34941..0f6e5055275 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -157,8 +157,8 @@ dri2CreateDrawable(struct glx_screen *base, XID xDrawable, * Make sure server has the same swap interval we do for the new * drawable. */ - if (psc->vtable.setSwapInterval) - psc->vtable.setSwapInterval(&pdraw->base, pdraw->swap_interval); + if (base->driScreen.setSwapInterval) + base->driScreen.setSwapInterval(&pdraw->base, pdraw->swap_interval); return &pdraw->base; } @@ -727,8 +727,7 @@ dri2CreateScreen(int screen, struct glx_display * priv, bool driver_name_is_infe psc->base.vtable = &dri_screen_vtable; psc->base.context_vtable = &dri2_context_vtable; - psp = &psc->vtable; - psc->base.driScreen = psp; + psp = &psc->base.driScreen; psp->deinitScreen = dri2DeinitScreen; psp->createDrawable = dri2CreateDrawable; psp->swapBuffers = dri2SwapBuffers; diff --git a/src/glx/dri2_priv.h b/src/glx/dri2_priv.h index 7d932881eca..7d7342ee83a 100644 --- a/src/glx/dri2_priv.h +++ b/src/glx/dri2_priv.h @@ -42,8 +42,6 @@ extern "C" { struct dri2_screen { struct glx_screen base; - __GLXDRIscreen vtable; - const __DRIconfig **driver_configs; int fd; diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index 0c47e9c42fa..a907ae5bf82 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -590,8 +590,7 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in psc->base.vtable = &dri_screen_vtable; psc->base.context_vtable = &dri3_context_vtable; - psp = &psc->vtable; - psc->base.driScreen = psp; + psp = &psc->base.driScreen; psp->deinitScreen = dri3_deinit_screen; psp->createDrawable = dri3_create_drawable; psp->swapBuffers = dri3_swap_buffers; diff --git a/src/glx/dri3_priv.h b/src/glx/dri3_priv.h index 335907ecd2b..8907e53ef7e 100644 --- a/src/glx/dri3_priv.h +++ b/src/glx/dri3_priv.h @@ -65,8 +65,6 @@ struct dri3_screen { struct glx_screen base; - __GLXDRIscreen vtable; - /* DRI screen is created for display GPU in case of prime gpu offloading. * This screen is used to allocate linear_buffer from * display GPU space in dri3_alloc_render_buffer() function. diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index e7d716459cc..aba7ef3a89b 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -341,7 +341,7 @@ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable) type = GLX_PBUFFER_BIT | GLX_WINDOW_BIT; } - pdraw = psc->driScreen->createDrawable(psc, glxDrawable, glxDrawable, + pdraw = psc->driScreen.createDrawable(psc, glxDrawable, glxDrawable, type, config); if (pdraw == NULL) { diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index d97c21c254e..7e011f241f8 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -679,8 +679,7 @@ driswCreateScreen(int screen, struct glx_display *priv, enum glx_driver glx_driv psc->base.vtable = &dri_screen_vtable; psc->base.context_vtable = &drisw_context_vtable; - psp = &psc->vtable; - psc->base.driScreen = psp; + psp = &psc->base.driScreen; psc->base.can_EXT_texture_from_pixmap = true; psp->createDrawable = driswCreateDrawable; psp->swapBuffers = driswSwapBuffers; diff --git a/src/glx/drisw_priv.h b/src/glx/drisw_priv.h index 5e55807011d..e853c32bc66 100644 --- a/src/glx/drisw_priv.h +++ b/src/glx/drisw_priv.h @@ -37,8 +37,6 @@ struct drisw_screen { struct glx_screen base; - __GLXDRIscreen vtable; - bool kopper; }; diff --git a/src/glx/driwindows_glx.c b/src/glx/driwindows_glx.c index d05cebc1e8d..23eb82a1002 100644 --- a/src/glx/driwindows_glx.c +++ b/src/glx/driwindows_glx.c @@ -44,7 +44,6 @@ struct driwindows_screen { struct glx_screen base; __DRIscreen *driScreen; - __GLXDRIscreen vtable; int event_base; Bool copySubBuffer; }; @@ -506,8 +505,7 @@ driwindowsCreateScreen(int screen, struct glx_display *priv, bool driver_name_is psc->base.visuals = visuals; psc->base.vtable = &driwindows_screen_vtable; - psp = &psc->vtable; - psc->base.driScreen = psp; + psp = &psc->base.driScreen; psp->createDrawable = driwindowsCreateDrawable; psp->swapBuffers = driwindowsSwapBuffers; diff --git a/src/glx/glx_pbuffer.c b/src/glx/glx_pbuffer.c index 3e402dbe0be..dcf66da8068 100644 --- a/src/glx/glx_pbuffer.c +++ b/src/glx/glx_pbuffer.c @@ -164,10 +164,10 @@ CreateDRIDrawable(Display *dpy, struct glx_config *config, } psc = priv->screens[config->screen]; - if (psc->driScreen == NULL) + if (psc->driScreen.createDrawable == NULL) return GL_TRUE; - pdraw = psc->driScreen->createDrawable(psc, drawable, glxdrawable, + pdraw = psc->driScreen.createDrawable(psc, drawable, glxdrawable, type, config); if (pdraw == NULL) { fprintf(stderr, "failed to create drawable\n"); @@ -296,10 +296,10 @@ __glXGetDrawableAttribute(Display * dpy, GLXDrawable drawable, if (pdraw) { if (attribute == GLX_SWAP_INTERVAL_EXT) { - *value = pdraw->psc->driScreen->getSwapInterval(pdraw); + *value = pdraw->psc->driScreen.getSwapInterval(pdraw); return 1; } else if (attribute == GLX_MAX_SWAP_INTERVAL_EXT) { - *value = pdraw->psc->driScreen->maxSwapInterval; + *value = pdraw->psc->driScreen.maxSwapInterval; return 1; } else if (attribute == GLX_LATE_SWAPS_TEAR_EXT) { *value = __glXExtensionBitIsEnabled(pdraw->psc, diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index 5001ac79013..8373d9881ed 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -523,7 +523,7 @@ struct glx_screen /** * Per screen direct rendering interface functions and data. */ - __GLXDRIscreen *driScreen; + __GLXDRIscreen driScreen; __DRIscreen *frontend_screen; const __DRIconfig **driver_configs; #endif diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c index 86efee34b7c..fd69f7f2fa4 100644 --- a/src/glx/glxcmds.c +++ b/src/glx/glxcmds.c @@ -675,7 +675,7 @@ glXSwapBuffers(Display * dpy, GLXDrawable drawable) if (pdraw != NULL) { Bool flush = gc != &dummyContext && drawable == gc->currentDrawable; - if (pdraw->psc->driScreen->swapBuffers(pdraw, 0, 0, 0, flush) == -1) + if (pdraw->psc->driScreen.swapBuffers(pdraw, 0, 0, 0, flush) == -1) __glXSendError(dpy, GLXBadCurrentWindow, 0, X_GLXSwapBuffers, false); return; } @@ -1557,15 +1557,13 @@ glXSwapIntervalSGI(int interval) } #ifdef GLX_DIRECT_RENDERING - if (gc->isDirect && psc && psc->driScreen && - psc->driScreen->setSwapInterval) { - __GLXDRIdrawable *pdraw = - GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable); + if (gc->isDirect && psc && psc->driScreen.setSwapInterval) { + __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable); /* Simply ignore the command if the GLX drawable has been destroyed but * the context is still bound. */ if (pdraw) - psc->driScreen->setSwapInterval(pdraw, interval); + psc->driScreen.setSwapInterval(pdraw, interval); return 0; } #endif @@ -1609,7 +1607,7 @@ glXSwapIntervalMESA(unsigned int interval) if (gc != &dummyContext && gc->isDirect) { struct glx_screen *psc = gc->psc; - if (psc && psc->driScreen && psc->driScreen->setSwapInterval) { + if (psc && psc->driScreen.setSwapInterval) { __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable); @@ -1619,7 +1617,7 @@ glXSwapIntervalMESA(unsigned int interval) if (!pdraw) return 0; - return psc->driScreen->setSwapInterval(pdraw, interval); + return psc->driScreen.setSwapInterval(pdraw, interval); } } #endif @@ -1636,11 +1634,11 @@ glXGetSwapIntervalMESA(void) if (gc != &dummyContext && gc->isDirect) { struct glx_screen *psc = gc->psc; - if (psc && psc->driScreen && psc->driScreen->getSwapInterval) { + if (psc && psc->driScreen.getSwapInterval) { __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable); if (pdraw) - return psc->driScreen->getSwapInterval(pdraw); + return psc->driScreen.getSwapInterval(pdraw); } } #endif @@ -1672,8 +1670,8 @@ glXSwapIntervalEXT(Display *dpy, GLXDrawable drawable, int interval) __glXSendError(dpy, BadValue, interval, 0, True); return; } - if (pdraw->psc->driScreen->setSwapInterval) - pdraw->psc->driScreen->setSwapInterval(pdraw, interval); + if (pdraw->psc->driScreen.setSwapInterval) + pdraw->psc->driScreen.setSwapInterval(pdraw, interval); #endif } @@ -1706,8 +1704,8 @@ glXGetVideoSyncSGI(unsigned int *count) * FIXME: there should be a GLX encoding for this call. I can find no * FIXME: documentation for the GLX encoding. */ - if (psc && psc->driScreen && psc->driScreen->getDrawableMSC) { - ret = psc->driScreen->getDrawableMSC(psc, pdraw, &ust, &msc, &sbc); + if (psc && psc->driScreen.getDrawableMSC) { + ret = psc->driScreen.getDrawableMSC(psc, pdraw, &ust, &msc, &sbc); *count = (unsigned) msc; return (ret == True) ? 0 : GLX_BAD_CONTEXT; } @@ -1742,8 +1740,8 @@ glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count) pdraw = GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable); - if (psc && psc->driScreen && psc->driScreen->waitForMSC) { - ret = psc->driScreen->waitForMSC(pdraw, 0, divisor, remainder, &ust, &msc, + if (psc && psc->driScreen.waitForMSC) { + ret = psc->driScreen.waitForMSC(pdraw, 0, divisor, remainder, &ust, &msc, &sbc); *count = (unsigned) msc; return (ret == True) ? 0 : GLX_BAD_CONTEXT; @@ -1819,8 +1817,8 @@ glXGetSyncValuesOML(Display *dpy, GLXDrawable drawable, #ifdef GLX_DIRECT_RENDERING pdraw = GetGLXDRIDrawable(dpy, drawable); psc = pdraw ? pdraw->psc : NULL; - if (pdraw && psc->driScreen->getDrawableMSC) { - ret = psc->driScreen->getDrawableMSC(psc, pdraw, ust, msc, sbc); + if (pdraw && psc->driScreen.getDrawableMSC) { + ret = psc->driScreen.getDrawableMSC(psc, pdraw, ust, msc, sbc); return ret; } #endif @@ -1955,8 +1953,8 @@ glXSwapBuffersMscOML(Display *dpy, GLXDrawable drawable, remainder = 1; #ifdef GLX_DIRECT_RENDERING - if (psc->driScreen && psc->driScreen->swapBuffers) - return psc->driScreen->swapBuffers(pdraw, target_msc, divisor, + if (psc->driScreen.swapBuffers) + return psc->driScreen.swapBuffers(pdraw, target_msc, divisor, remainder, False); #endif @@ -1985,8 +1983,8 @@ glXWaitForMscOML(Display *dpy, GLXDrawable drawable, int64_t target_msc, return False; #ifdef GLX_DIRECT_RENDERING - if (pdraw && psc->driScreen && psc->driScreen->waitForMSC) { - ret = psc->driScreen->waitForMSC(pdraw, target_msc, divisor, remainder, + if (pdraw && psc->driScreen.waitForMSC) { + ret = psc->driScreen.waitForMSC(pdraw, target_msc, divisor, remainder, ust, msc, sbc); return ret; } @@ -2013,8 +2011,8 @@ glXWaitForSbcOML(Display *dpy, GLXDrawable drawable, int64_t target_sbc, return False; #ifdef GLX_DIRECT_RENDERING - if (pdraw && psc->driScreen && psc->driScreen->waitForSBC) { - ret = psc->driScreen->waitForSBC(pdraw, target_sbc, ust, msc, sbc); + if (pdraw && psc->driScreen.waitForSBC) { + ret = psc->driScreen.waitForSBC(pdraw, target_sbc, ust, msc, sbc); return ret; } #endif @@ -2044,8 +2042,8 @@ glXCopySubBufferMESA(Display * dpy, GLXDrawable drawable, __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable); if (pdraw != NULL) { struct glx_screen *psc = pdraw->psc; - if (psc->driScreen->copySubBuffer != NULL) { - psc->driScreen->copySubBuffer(pdraw, x, y, width, height, True); + if (psc->driScreen.copySubBuffer != NULL) { + psc->driScreen.copySubBuffer(pdraw, x, y, width, height, True); } return; @@ -2111,8 +2109,8 @@ glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable); if (pdraw != NULL) { struct glx_screen *psc = pdraw->psc; - if (psc->driScreen->bindTexImage != NULL) - psc->driScreen->bindTexImage(pdraw, buffer, attrib_list); + if (psc->driScreen.bindTexImage != NULL) + psc->driScreen.bindTexImage(pdraw, buffer, attrib_list); return; } diff --git a/src/glx/glxext.c b/src/glx/glxext.c index 4472eeb7b56..216d19926b1 100644 --- a/src/glx/glxext.c +++ b/src/glx/glxext.c @@ -240,8 +240,8 @@ FreeScreenConfigs(struct glx_display * priv) glx_screen_cleanup(psc); #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) - if (psc->driScreen && psc->driScreen->deinitScreen) - psc->driScreen->deinitScreen(psc); + if (psc->driScreen.deinitScreen) + psc->driScreen.deinitScreen(psc); #endif free(psc); }