From 6a5fdf7af6b76776ba99f9ca7806809f8cb55d3c Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 22 May 2017 11:46:27 -0600 Subject: [PATCH] xlib: fix glXGetCurrentDisplay() failure glXGetCurrentDisplay() has been broken for years and nobody noticed until recently. This change adds a new XMesaGetCurrentDisplay() that the GLX emulation API can call, just as we did for glXGetCurrentContext(). Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100988 Cc: mesa-stable@lists.freedesktop.org --- src/mesa/drivers/x11/glxapi.c | 8 ++++---- src/mesa/drivers/x11/glxapi.h | 1 - src/mesa/drivers/x11/xm_api.c | 8 ++++++++ src/mesa/drivers/x11/xmesa.h | 6 ++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/x11/glxapi.c b/src/mesa/drivers/x11/glxapi.c index a807074..52e6026 100644 --- a/src/mesa/drivers/x11/glxapi.c +++ b/src/mesa/drivers/x11/glxapi.c @@ -379,13 +379,13 @@ glXQueryServerString(Display *dpy, int screen, int name) /*** GLX_VERSION_1_2 ***/ +/* declare here to avoid including xmesa.h */ +extern Display *XMesaGetCurrentDisplay(void); + Display PUBLIC * glXGetCurrentDisplay(void) { - /* Same code as in libGL's glxext.c */ - __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext(); - if (NULL == gc) return NULL; - return gc->currentDpy; + return XMesaGetCurrentDisplay(); } diff --git a/src/mesa/drivers/x11/glxapi.h b/src/mesa/drivers/x11/glxapi.h index aff38f7..cc4f902 100644 --- a/src/mesa/drivers/x11/glxapi.h +++ b/src/mesa/drivers/x11/glxapi.h @@ -37,7 +37,6 @@ * work properly. */ typedef struct __GLXcontextRec { - Display *currentDpy; GLboolean isDirect; GLXDrawable currentDrawable; GLXDrawable currentReadable; diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c index b54900b..a0695c3 100644 --- a/src/mesa/drivers/x11/xm_api.c +++ b/src/mesa/drivers/x11/xm_api.c @@ -1304,6 +1304,14 @@ XMesaBuffer XMesaGetCurrentReadBuffer( void ) } +Display *XMesaGetCurrentDisplay(void) +{ + GET_CURRENT_CONTEXT(ctx); + XMesaContext xmctx = XMESA_CONTEXT(ctx); + return xmctx ? xmctx->display : NULL; +} + + GLboolean XMesaSetFXmode( GLint mode ) { diff --git a/src/mesa/drivers/x11/xmesa.h b/src/mesa/drivers/x11/xmesa.h index cc878e7..84b2b27 100644 --- a/src/mesa/drivers/x11/xmesa.h +++ b/src/mesa/drivers/x11/xmesa.h @@ -241,6 +241,12 @@ extern XMesaBuffer XMesaGetCurrentReadBuffer( void ); /* + * Return display of current context. + */ +extern Display *XMesaGetCurrentDisplay( void ); + + +/* * Swap the front and back buffers for the given buffer. No action is * taken if the buffer is not double buffered. */ -- 1.9.1