Mesa (gallium-mesa-7.4): Revert "dri2: Avoid round-tripping on DRI2GetBuffers for the same set of buffers."

Alan Hourihane alanh at kemper.freedesktop.org
Thu Mar 26 17:36:06 UTC 2009


Module: Mesa
Branch: gallium-mesa-7.4
Commit: 7dff7029fa37d0fd52dbe137d359bd1c00826fce
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7dff7029fa37d0fd52dbe137d359bd1c00826fce

Author: Michel Dänzer <daenzer at vmware.com>
Date:   Wed Mar 25 15:53:28 2009 +0100

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
(cherry picked from commit 11da7e02aa3dba192aa3d95e9debec620133a41c)

---

 src/glx/x11/dri2_glx.c  |   52 -----------------------------------------------
 src/glx/x11/glxclient.h |    1 -
 2 files changed, 0 insertions(+), 53 deletions(-)

diff --git a/src/glx/x11/dri2_glx.c b/src/glx/x11/dri2_glx.c
index ed66336..6a031d4 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);
 
@@ -277,30 +272,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)
@@ -446,28 +420,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
@@ -490,11 +442,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 d37b3ce..d03746d 100644
--- a/src/glx/x11/glxclient.h
+++ b/src/glx/x11/glxclient.h
@@ -604,7 +604,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*);
 
 /************************************************************************/




More information about the mesa-commit mailing list