From 11da7e02aa3dba192aa3d95e9debec620133a41c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michel=20D=C3=A4nzer?= Date: Wed, 25 Mar 2009 15:53:28 +0100 Subject: [PATCH] Revert "dri2: Avoid round-tripping on DRI2GetBuffers for the same set of buffers." This scheme breaks when the display connection doesn't receive ConfigureNotify events. This caused reporoducible problems (cropped / misplaced output) when starting a 3D application in a guest operating system in VMware Workstation. This reverts commit dd1c68f15123a889a3ce9d2afe724e272d163e32. Conflicts: src/glx/x11/dri2_glx.c --- src/glx/x11/dri2_glx.c | 52 ----------------------------------------- src/glx/x11/glxclient.h | 1 - 2 files changed, 53 deletions(-) diff --git a/src/glx/x11/dri2_glx.c b/src/glx/x11/dri2_glx.c index 0ef5d3ab56f..9c8f1101b9e 100644 --- a/src/glx/x11/dri2_glx.c +++ b/src/glx/x11/dri2_glx.c @@ -60,9 +60,6 @@ struct __GLXDRIdisplayPrivateRec { int driMajor; int driMinor; int driPatch; - - unsigned long configureSeqno; - Bool (*oldConfigProc)(Display *, XEvent *, xEvent *); }; struct __GLXDRIcontextPrivateRec { @@ -76,7 +73,6 @@ struct __GLXDRIdrawablePrivateRec { __DRIbuffer buffers[5]; int bufferCount; int width, height; - unsigned long configureSeqno; int have_back; int have_front; int have_fake_front; @@ -174,7 +170,6 @@ static __GLXDRIdrawable *dri2CreateDrawable(__GLXscreenConfigs *psc, pdraw->base.drawable = drawable; pdraw->base.psc = psc; pdraw->bufferCount = 0; - pdraw->configureSeqno = ~0; DRI2CreateDrawable(psc->dpy, xDrawable); @@ -293,30 +288,9 @@ dri2GetBuffers(__DRIdrawable *driDrawable, int *out_count, void *loaderPrivate) { __GLXDRIdrawablePrivate *pdraw = loaderPrivate; - __GLXdisplayPrivate *dpyPriv = __glXInitialize(pdraw->base.psc->dpy); - __GLXDRIdisplayPrivate *pdp = (__GLXDRIdisplayPrivate *)dpyPriv->dri2Display; DRI2Buffer *buffers; int i; - /** - * Check if a ConfigureNotify has come in since we last asked for the - * buffers associated with this drawable. If not, we can assume that they're - * the same set at glViewport time, and save a synchronous round-trip to the - * X Server. - */ - if (pdraw->configureSeqno == pdp->configureSeqno && - count == pdraw->bufferCount) { - for (i = 0; i < count; i++) { - if (pdraw->buffers[i].attachment != attachments[i]) - break; - } - if (i == count) { - *out_count = pdraw->bufferCount; - return pdraw->buffers; - } - } - pdraw->configureSeqno = pdp->configureSeqno; - buffers = DRI2GetBuffers(pdraw->base.psc->dpy, pdraw->base.xDrawable, width, height, attachments, count, out_count); if (buffers == NULL) @@ -468,28 +442,6 @@ static void dri2DestroyDisplay(__GLXDRIdisplay *dpy) Xfree(dpy); } -/** - * Makes a note on receiving ConfigureNotify that we need to re-check the - * DRI2 buffers, as window sizes may have resulted in reallocation. - */ -static Bool dri2ConfigureNotifyProc(Display *dpy, XEvent *re, xEvent *event) -{ - __GLXdisplayPrivate *dpyPriv = __glXInitialize(dpy); - __GLXDRIdisplayPrivate *pdp; - Bool ret; - - /* We should always be able to find our pdp, as it only gets torn down - * when the Display is torn down. - */ - pdp = (__GLXDRIdisplayPrivate *)dpyPriv->dri2Display; - - ret = pdp->oldConfigProc(dpy, re, event); - - pdp->configureSeqno = re->xconfigure.serial; - - return ret; -} - /* * Allocate, initialize and return a __DRIdisplayPrivate object. * This is called from __glXInitialize() when we are given a new @@ -512,11 +464,7 @@ _X_HIDDEN __GLXDRIdisplay *dri2CreateDisplay(Display *dpy) return NULL; } - pdp->oldConfigProc = XESetWireToEvent(dpy, ConfigureNotify, - dri2ConfigureNotifyProc); - pdp->driPatch = 0; - pdp->configureSeqno = 0; pdp->base.destroyDisplay = dri2DestroyDisplay; pdp->base.createScreen = dri2CreateScreen; diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h index c42e80a0e86..fa3ec26e60a 100644 --- a/src/glx/x11/glxclient.h +++ b/src/glx/x11/glxclient.h @@ -609,7 +609,6 @@ extern void __glXSendLargeCommand(__GLXcontext *, const GLvoid *, GLint, const GLvoid *, GLint); /* Initialize the GLX extension for dpy */ -extern __GLXdisplayPrivate * __glXGetPrivateFromDisplay(Display *dpy); extern __GLXdisplayPrivate *__glXInitialize(Display*); extern void __glXPreferEGL(int state); -- 2.30.2