mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 01:08:03 +02:00
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:
parent
2c50ee4398
commit
520572eb25
12 changed files with 40 additions and 53 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -42,8 +42,6 @@ extern "C" {
|
|||
struct dri2_screen {
|
||||
struct glx_screen base;
|
||||
|
||||
__GLXDRIscreen vtable;
|
||||
|
||||
const __DRIconfig **driver_configs;
|
||||
|
||||
int fd;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -37,8 +37,6 @@ struct drisw_screen
|
|||
{
|
||||
struct glx_screen base;
|
||||
|
||||
__GLXDRIscreen vtable;
|
||||
|
||||
bool kopper;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue