From 36c190671081967bac6fff48aaf66d67b639a48c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Wed, 1 Feb 2012 13:21:02 +0100 Subject: Fix vline range calculations. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The range passed in is in pixmap coordinates, so the CRTC offset needs to be added to the clamping limits and subtracted from the clamped range for pre-AVIVO display engines. Signed-off-by: Michel Dänzer Reviewed-by: Alex Deucher --- src/evergreen_accel.c | 8 ++------ src/r6xx_accel.c | 8 ++------ src/radeon_commonfuncs.c | 12 ++++++------ 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/evergreen_accel.c b/src/evergreen_accel.c index 7c6b7774..6610c288 100644 --- a/src/evergreen_accel.c +++ b/src/evergreen_accel.c @@ -303,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 >= stop) 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 94678a1b..d1a50858 100644 --- a/src/r6xx_accel.c +++ b/src/r6xx_accel.c @@ -364,16 +364,12 @@ r600_cp_wait_vline_sync(ScrnInfoPtr pScrn, drmBufPtr ib, 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 >= stop) 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 e2b71716..e0b026f1 100644 --- a/src/radeon_commonfuncs.c +++ b/src/radeon_commonfuncs.c @@ -858,16 +858,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 >= stop) 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) -- cgit v1.2.3