Check in SwapBuffers for any new pending dri2 events
authorAlan Hourihane <alanh@tungstengraphics.com>
Thu, 26 Jun 2008 21:53:29 +0000 (22:53 +0100)
committerAlan Hourihane <alanh@tungstengraphics.com>
Thu, 26 Jun 2008 21:53:29 +0000 (22:53 +0100)
src/mesa/drivers/dri/common/dri_util.c

index 10d2e801dcc91f7b0da95676a1c2d4a4efea1925..9655741bbba556282e87f9130ae2899fc0555dc7 100644 (file)
@@ -283,7 +283,7 @@ __driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp)
 int
 __driParseEvents(__DRIcontextPrivate *pcp, __DRIdrawablePrivate *pdp)
 {
-    __DRIscreenPrivate *psp = pcp->driScreenPriv;
+    __DRIscreenPrivate *psp = pdp->driScreenPriv;
     __DRIDrawableConfigEvent *dc, *last_dc;
     __DRIBufferAttachEvent *ba, *last_ba;
     unsigned int tail, mask, *p, end, total, size, changed;
@@ -291,7 +291,7 @@ __driParseEvents(__DRIcontextPrivate *pcp, __DRIdrawablePrivate *pdp)
     size_t rect_size;
 
     /* Check for wraparound. */
-    if (psp->dri2.buffer->prealloc - pdp->dri2.tail > psp->dri2.buffer->size) {
+    if (pcp && psp->dri2.buffer->prealloc - pdp->dri2.tail > psp->dri2.buffer->size) {
        /* If prealloc overlaps into what we just parsed, the
        * server overwrote it and we have to reset our tail
        * pointer. */
@@ -460,6 +460,9 @@ static void driSwapBuffers(__DRIdrawable *dPriv)
     if (!dPriv->numClipRects)
         return;
 
+    if (psp->dri2.enabled)
+       __driParseEvents(NULL, dPriv);
+
     psp->DriverAPI.SwapBuffers(dPriv);
 
     driReportDamage(dPriv, dPriv->pClipRects, dPriv->numClipRects);