gallium/xlib: Remove drawable caching from the MakeCurrent path

AFAICT this only exists to avoid hitting XMesaFindBuffer, which is a
linear search. But you don't have that many GLX drawables, so whatever.
This commit is contained in:
Adam Jackson
2019-09-10 14:59:06 -04:00
committed by Adam Jackson
parent 83f195414a
commit db8be355d1

View File

@@ -1176,10 +1176,6 @@ glXCreateContext( Display *dpy, XVisualInfo *visinfo,
/* XXX these may have to be removed due to thread-safety issues. */ /* XXX these may have to be removed due to thread-safety issues. */
static GLXContext MakeCurrent_PrevContext = 0; static GLXContext MakeCurrent_PrevContext = 0;
static GLXDrawable MakeCurrent_PrevDrawable = 0;
static GLXDrawable MakeCurrent_PrevReadable = 0;
static XMesaBuffer MakeCurrent_PrevDrawBuffer = 0;
static XMesaBuffer MakeCurrent_PrevReadBuffer = 0;
/* GLX 1.3 and later */ /* GLX 1.3 and later */
@@ -1200,11 +1196,7 @@ glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
XMesaContext xmctx = glxCtx->xmesaContext; XMesaContext xmctx = glxCtx->xmesaContext;
/* Find the XMesaBuffer which corresponds to the GLXDrawable 'draw' */ /* Find the XMesaBuffer which corresponds to the GLXDrawable 'draw' */
if (ctx == MakeCurrent_PrevContext if (ctx == MakeCurrent_PrevContext) {
&& draw == MakeCurrent_PrevDrawable) {
drawBuffer = MakeCurrent_PrevDrawBuffer;
}
else {
drawBuffer = XMesaFindBuffer( dpy, draw ); drawBuffer = XMesaFindBuffer( dpy, draw );
} }
if (!drawBuffer) { if (!drawBuffer) {
@@ -1217,11 +1209,7 @@ glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
} }
/* Find the XMesaBuffer which corresponds to the GLXDrawable 'read' */ /* Find the XMesaBuffer which corresponds to the GLXDrawable 'read' */
if (ctx == MakeCurrent_PrevContext if (ctx == MakeCurrent_PrevContext) {
&& read == MakeCurrent_PrevReadable) {
readBuffer = MakeCurrent_PrevReadBuffer;
}
else {
readBuffer = XMesaFindBuffer( dpy, read ); readBuffer = XMesaFindBuffer( dpy, read );
} }
if (!readBuffer) { if (!readBuffer) {
@@ -1233,19 +1221,10 @@ glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
} }
} }
if (no_rast && if (no_rast && MakeCurrent_PrevContext == ctx)
MakeCurrent_PrevContext == ctx &&
MakeCurrent_PrevDrawable == draw &&
MakeCurrent_PrevReadable == read &&
MakeCurrent_PrevDrawBuffer == drawBuffer &&
MakeCurrent_PrevReadBuffer == readBuffer)
return True; return True;
MakeCurrent_PrevContext = ctx; MakeCurrent_PrevContext = ctx;
MakeCurrent_PrevDrawable = draw;
MakeCurrent_PrevReadable = read;
MakeCurrent_PrevDrawBuffer = drawBuffer;
MakeCurrent_PrevReadBuffer = readBuffer;
/* Now make current! */ /* Now make current! */
if (XMesaMakeCurrent2(xmctx, drawBuffer, readBuffer)) { if (XMesaMakeCurrent2(xmctx, drawBuffer, readBuffer)) {
@@ -1263,10 +1242,6 @@ glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
/* release current context w/out assigning new one. */ /* release current context w/out assigning new one. */
XMesaMakeCurrent2( NULL, NULL, NULL ); XMesaMakeCurrent2( NULL, NULL, NULL );
MakeCurrent_PrevContext = 0; MakeCurrent_PrevContext = 0;
MakeCurrent_PrevDrawable = 0;
MakeCurrent_PrevReadable = 0;
MakeCurrent_PrevDrawBuffer = 0;
MakeCurrent_PrevReadBuffer = 0;
SetCurrentContext(NULL); SetCurrentContext(NULL);
return True; return True;
} }
@@ -1430,10 +1405,6 @@ glXDestroyContext( Display *dpy, GLXContext ctx )
GLXContext glxCtx = ctx; GLXContext glxCtx = ctx;
(void) dpy; (void) dpy;
MakeCurrent_PrevContext = 0; MakeCurrent_PrevContext = 0;
MakeCurrent_PrevDrawable = 0;
MakeCurrent_PrevReadable = 0;
MakeCurrent_PrevDrawBuffer = 0;
MakeCurrent_PrevReadBuffer = 0;
XMesaDestroyContext( glxCtx->xmesaContext ); XMesaDestroyContext( glxCtx->xmesaContext );
XMesaGarbageCollect(); XMesaGarbageCollect();
free(glxCtx); free(glxCtx);