glx: inline __GLXDRIscreen onto base glx_screen

this is much less awkward

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30619>
This commit is contained in:
Mike Blumenkrantz 2024-08-01 16:19:40 -04:00 committed by Marge Bot
parent 2c50ee4398
commit 520572eb25
12 changed files with 40 additions and 53 deletions

View file

@ -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;

View file

@ -42,8 +42,6 @@ extern "C" {
struct dri2_screen {
struct glx_screen base;
__GLXDRIscreen vtable;
const __DRIconfig **driver_configs;
int fd;

View file

@ -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;

View file

@ -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.

View file

@ -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) {

View file

@ -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;

View file

@ -37,8 +37,6 @@ struct drisw_screen
{
struct glx_screen base;
__GLXDRIscreen vtable;
bool kopper;
};

View file

@ -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;

View file

@ -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,

View file

@ -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

View file

@ -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;
}

View file

@ -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);
}