From: Michel Dänzer <[email protected]>

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 <[email protected]>
---
 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 7c6b777..6610c28 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 94678a1..d1a5085 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 e2b7171..e0b026f 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)
-- 
1.7.8.3

_______________________________________________
xorg-driver-ati mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-driver-ati

Reply via email to