diff --git a/src/mesa/drivers/dri/unichrome/via_ioctl.c b/src/mesa/drivers/dri/unichrome/via_ioctl.c index c8c6dc0..9f77af1 100644 --- a/src/mesa/drivers/dri/unichrome/via_ioctl.c +++ b/src/mesa/drivers/dri/unichrome/via_ioctl.c @@ -577,6 +577,10 @@ void viaResetPageFlippingLocked(struct via_context *vmesa) vmesa->doPageFlip = vmesa->allowPageFlip = 0; } +void viaCheckWaitIdle(struct via_context *vmesa) +{ + while(!viaCheckIdle(vmesa)); +} /* * Copy the back buffer to the front buffer. @@ -597,11 +601,14 @@ void viaCopyBuffer(const __DRIdrawablePrivate *dPriv) VIA_FLUSH_DMA(vmesa); - if (vmesa->vblank_flags == VBLANK_FLAG_SYNC && +/* if (vmesa->vblank_flags == VBLANK_FLAG_SYNC && vmesa->lastBreadcrumbWrite > 1) viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastBreadcrumbWrite-1); else - viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastSwap[1]); + viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastSwap[1]); */ + if (vmesa->vblank_flags == VBLANK_FLAG_SYNC) { + viaCheckWaitIdle(vmesa); + } LOCK_HARDWARE(vmesa); @@ -631,11 +638,16 @@ void viaPageFlip(const __DRIdrawablePrivate *dPriv) struct via_renderbuffer buffer_tmp; VIA_FLUSH_DMA(vmesa); - if (vmesa->vblank_flags == VBLANK_FLAG_SYNC && +/* if (vmesa->vblank_flags == VBLANK_FLAG_SYNC && vmesa->lastBreadcrumbWrite > 1) viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastBreadcrumbWrite - 1); else viaWaitIdleVBlank(dPriv, vmesa, vmesa->lastSwap[0]); +*/ + + if (vmesa->vblank_flags == VBLANK_FLAG_SYNC) { + viaCheckWaitIdle(vmesa); + } LOCK_HARDWARE(vmesa); viaDoPageFlipLocked(vmesa, vmesa->back.offset);