glx: Move GLX MakeCurrent lastGLContext updates next to makeCurrent().

We want to make sure that lastGLContext is set correctly during
makeCurrent, because we may have recursive GL context changes in the
DRI2 interfaces due to glamor.

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Eric Anholt 2014-04-17 18:23:51 -07:00
parent abf1202706
commit 789509ef53
2 changed files with 4 additions and 5 deletions

View File

@ -434,9 +434,6 @@ static void
StopUsingContext(__GLXcontext * glxc)
{
if (glxc) {
if (glxc == lastGLContext) {
lastGLContext = NULL;
}
glxc->currentClient = NULL;
if (!glxc->idExists) {
FreeResourceByType(glxc->id, __glXContextRes, FALSE);
@ -447,7 +444,6 @@ StopUsingContext(__GLXcontext * glxc)
static void
StartUsingContext(__GLXclientState * cl, __GLXcontext * glxc)
{
lastGLContext = glxc;
glxc->currentClient = cl->client;
}
@ -639,7 +635,9 @@ DoMakeCurrent(__GLXclientState * cl,
glxc->readPriv = readPriv;
/* make the context current */
lastGLContext = glxc;
if (!(*glxc->makeCurrent) (glxc)) {
lastGLContext = NULL;
glxc->drawPriv = NULL;
glxc->readPriv = NULL;
return __glXError(GLXBadContext);

View File

@ -444,14 +444,15 @@ __glXForceCurrent(__GLXclientState * cl, GLXContextTag tag, int *error)
/* Make this context the current one for the GL. */
if (!cx->isDirect) {
lastGLContext = cx;
if (!(*cx->makeCurrent) (cx)) {
/* Bind failed, and set the error code. Bummer */
lastGLContext = NULL;
cl->client->errorValue = cx->id;
*error = __glXError(GLXBadContextState);
return 0;
}
}
lastGLContext = cx;
return cx;
}