xf86-video-ati: Branch 'master' - 2 commits

Michel Dänzer daenzer at kemper.freedesktop.org
Wed Feb 1 06:44:18 PST 2012


 src/evergreen_accel.c    |   13 +++----------
 src/r6xx_accel.c         |   13 +++----------
 src/radeon_commonfuncs.c |   17 +++++++----------
 3 files changed, 13 insertions(+), 30 deletions(-)

New commits:
commit 36c190671081967bac6fff48aaf66d67b639a48c
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 1 13:21:02 2012 +0100

    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 at amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

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)
commit bb0e1531ac6949d38025d7dcb19234fee33b2acf
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 1 13:07:11 2012 +0100

    Check for empty vline ranges after clamping.
    
    The clamping could turn a previously non-empty range into an empty one.
    
    Also, start == stop means the range is empty.
    
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/evergreen_accel.c b/src/evergreen_accel.c
index 83320c8..7c6b777 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;
 
@@ -309,7 +306,7 @@ void evergreen_cp_wait_vline_sync(ScrnInfoPtr pScrn, PixmapPtr pPix,
     start = max(start, 0);
     stop = min(stop, crtc->mode.VDisplay);
 
-    if (start > crtc->mode.VDisplay)
+    if (start >= stop)
         return;
 
     /* on r5xx+ vline starts at viewport_y */
diff --git a/src/r6xx_accel.c b/src/r6xx_accel.c
index 752165b..94678a1 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;
 
@@ -370,7 +367,7 @@ r600_cp_wait_vline_sync(ScrnInfoPtr pScrn, drmBufPtr ib, PixmapPtr pPix,
     start = max(start, 0);
     stop = min(stop, crtc->mode.VDisplay);
 
-    if (start > crtc->mode.VDisplay)
+    if (start >= stop)
         return;
 
     /* on r5xx+ vline starts at viewport_y */
diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c
index 7281949..e2b7171 100644
--- a/src/radeon_commonfuncs.c
+++ b/src/radeon_commonfuncs.c
@@ -839,9 +839,6 @@ void FUNC_NAME(RADEONWaitForVLine)(ScrnInfoPtr pScrn, PixmapPtr pPix,
     if (!crtc)
 	return;
 
-    if (stop < start)
-	return;
-
     if (!crtc->enabled)
 	return;
 
@@ -864,7 +861,7 @@ void FUNC_NAME(RADEONWaitForVLine)(ScrnInfoPtr pScrn, PixmapPtr pPix,
     start = max(start, 0);
     stop = min(stop, crtc->mode.VDisplay);
 
-    if (start > crtc->mode.VDisplay)
+    if (start >= stop)
 	return;
 
     if (IS_AVIVO_VARIANT) {


More information about the xorg-commit mailing list