summaryrefslogtreecommitdiff
path: root/glx
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-04-17 18:23:51 -0700
committerEric Anholt <eric@anholt.net>2014-04-23 10:32:07 -0700
commit789509ef5324ce9141222fa92dea51b5cc777209 (patch)
tree3446dd13750c648d0d60b2c0c53b2c24ee4bee28 /glx
parentabf12027063dbe22bec1d055ad8db365cf07395a (diff)
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>
Diffstat (limited to 'glx')
-rw-r--r--glx/glxcmds.c6
-rw-r--r--glx/glxext.c3
2 files changed, 4 insertions, 5 deletions
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index a451d2b43..fb236b65e 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -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);
diff --git a/glx/glxext.c b/glx/glxext.c
index 85fd219df..98557670a 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -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;
}