diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2012-02-01 13:21:02 +0100 |
---|---|---|
committer | Michel Dänzer <michel@daenzer.net> | 2012-02-01 15:41:05 +0100 |
commit | 36c190671081967bac6fff48aaf66d67b639a48c (patch) | |
tree | 20cdf6c8f6608b34c8993abcb75bbbe9df8d2176 | |
parent | bb0e1531ac6949d38025d7dcb19234fee33b2acf (diff) |
Fix vline range calculations.
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 <michel.daenzer@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | src/evergreen_accel.c | 8 | ||||
-rw-r--r-- | src/r6xx_accel.c | 8 | ||||
-rw-r--r-- | 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) |