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 dd1c68f151.

Conflicts:

	src/glx/x11/dri2_glx.c
This commit is contained in:
Michel Dänzer 2009-03-25 15:53:28 +01:00
parent 4934ddf5d7
commit 11da7e02aa
2 changed files with 0 additions and 53 deletions

View file

@ -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;

View file

@ -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);