summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2012-02-01 13:21:02 +0100
committerMichel Dänzer <michel@daenzer.net>2012-02-01 15:41:05 +0100
commit36c190671081967bac6fff48aaf66d67b639a48c (patch)
tree20cdf6c8f6608b34c8993abcb75bbbe9df8d2176
parentbb0e1531ac6949d38025d7dcb19234fee33b2acf (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.c8
-rw-r--r--src/r6xx_accel.c8
-rw-r--r--src/radeon_commonfuncs.c12
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)