diff --git a/src/evergreen_accel.c b/src/evergreen_accel.c index 5c95e20..47f3edc 100644 --- a/src/evergreen_accel.c +++ b/src/evergreen_accel.c @@ -284,9 +284,6 @@ void evergreen_cp_wait_vline_sync(ScrnInfoPtr pScrn, PixmapPtr pPix, drmmode_crtc = crtc->driver_private; - if (stop < start) - return; - if (!crtc->enabled) return; @@ -306,16 +303,12 @@ void evergreen_cp_wait_vline_sync(ScrnInfoPtr pScrn, PixmapPtr pPix, return; } - start = max(start, 0); - stop = min(stop, crtc->mode.VDisplay); + start = max(start, crtc->y); + stop = min(stop, crtc->y + crtc->mode.VDisplay); - if (start > crtc->mode.VDisplay) + if (stop <= start) return; - /* on r5xx+ vline starts at viewport_y */ - start += crtc->y; - stop += crtc->y; - BEGIN_BATCH(11); /* set the VLINE range */ EREG(EVERGREEN_VLINE_START_END, /* this is just a marker */ diff --git a/src/r6xx_accel.c b/src/r6xx_accel.c index 752165b..2683de9 100644 --- a/src/r6xx_accel.c +++ b/src/r6xx_accel.c @@ -345,9 +345,6 @@ r600_cp_wait_vline_sync(ScrnInfoPtr pScrn, drmBufPtr ib, PixmapPtr pPix, if (!crtc) return; - if (stop < start) - return; - if (!crtc->enabled) return; @@ -367,16 +364,14 @@ r600_cp_wait_vline_sync(ScrnInfoPtr pScrn, drmBufPtr ib, PixmapPtr pPix, return; } - start = max(start, 0); - stop = min(stop, crtc->mode.VDisplay); + ErrorF("(start, stop) before clamping: (%d, %d)\n", start, stop); + start = max(start, crtc->y); + stop = min(stop, crtc->y + crtc->mode.VDisplay); + ErrorF("(start, stop) after clamping: (%d, %d)\n", start, stop); - if (start > crtc->mode.VDisplay) + if (stop <= start) return; - /* on r5xx+ vline starts at viewport_y */ - start += crtc->y; - stop += crtc->y; - #if defined(XF86DRM_MODE) if (info->cs) { drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c index d399257..18ae67b 100644 --- a/src/radeon_commonfuncs.c +++ b/src/radeon_commonfuncs.c @@ -905,9 +905,6 @@ void FUNC_NAME(RADEONWaitForVLine)(ScrnInfoPtr pScrn, PixmapPtr pPix, if (!crtc) return; - if (stop < start) - return; - if (!crtc->enabled) return; @@ -927,16 +924,16 @@ void FUNC_NAME(RADEONWaitForVLine)(ScrnInfoPtr pScrn, PixmapPtr pPix, return; } - start = max(start, 0); - stop = min(stop, crtc->mode.VDisplay); + start = max(start, crtc->y); + stop = min(stop, crtc->y + crtc->mode.VDisplay); - if (start > crtc->mode.VDisplay) + if (stop <= start) return; - if (IS_AVIVO_VARIANT) { - /* on r5xx+ vline starts at viewport_y */ - start += crtc->y; - stop += crtc->y; + if (!IS_AVIVO_VARIANT) { + /* on pre-r5xx vline starts at CRTC scanout */ + start -= crtc->y; + stop -= crtc->y; } #if defined(ACCEL_CP) && defined(XF86DRM_MODE)