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

Michel Dänzer daenzer at kemper.freedesktop.org
Mon Feb 15 08:12:28 PST 2010


 src/r600_exa.c              |    2 +-
 src/radeon.h                |    3 ++-
 src/radeon_accel.c          |    2 +-
 src/radeon_crtc.c           |    3 ++-
 src/radeon_cursor.c         |    3 ++-
 src/radeon_exa_funcs.c      |    6 +++---
 src/radeon_exa_render.c     |    2 +-
 src/radeon_legacy_memory.c  |    5 +++--
 src/radeon_textured_video.c |    9 ++++++---
 src/radeon_video.c          |    9 ++++++---
 10 files changed, 27 insertions(+), 17 deletions(-)

New commits:
commit 47136fa347d1756523239746b4c74cd5278a1118
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Mon Feb 15 16:44:39 2010 +0100

    EXA: Fix order of coordinates passed to radeon_pick_best_crtc().
    
    The wrong order prevented tearing avoidance from working with EXA/DRI2.

diff --git a/src/r600_exa.c b/src/r600_exa.c
index ddbbb53..5ed9c07 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -110,7 +110,7 @@ static void R600VlineHelperSet(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
-    accel_state->vline_crtc = radeon_pick_best_crtc(pScrn, x1, y1, x2, y2);
+    accel_state->vline_crtc = radeon_pick_best_crtc(pScrn, x1, x2, y1, y2);
     if (accel_state->vline_y1 == -1)
 	accel_state->vline_y1 = y1;
     if (y1 < accel_state->vline_y1)
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
index a3098d8..5806d3b 100644
--- a/src/radeon_exa_funcs.c
+++ b/src/radeon_exa_funcs.c
@@ -227,7 +227,7 @@ FUNC_NAME(RADEONSolid)(PixmapPtr pPix, int x1, int y1, int x2, int y2)
 
     if (info->accel_state->vsync)
 	FUNC_NAME(RADEONWaitForVLine)(pScrn, pPix,
-				      radeon_pick_best_crtc(pScrn, x1, y1, x2, y2),
+				      radeon_pick_best_crtc(pScrn, x1, x2, y1, y2),
 				      y1, y2);
 
     BEGIN_ACCEL(2);
@@ -348,7 +348,7 @@ FUNC_NAME(RADEONCopy)(PixmapPtr pDst,
 
     if (info->accel_state->vsync)
 	FUNC_NAME(RADEONWaitForVLine)(pScrn, pDst,
-				      radeon_pick_best_crtc(pScrn, dstX, dstY, dstX + w, dstY + h),
+				      radeon_pick_best_crtc(pScrn, dstX, dstX + w, dstY, dstY + h),
 				      dstY, dstY + h);
 
     BEGIN_ACCEL(3);
@@ -386,7 +386,7 @@ RADEONUploadToScreenCP(PixmapPtr pDst, int x, int y, int w, int h,
 
 	if (info->accel_state->vsync)
 	    FUNC_NAME(RADEONWaitForVLine)(pScrn, pDst,
-					  radeon_pick_best_crtc(pScrn, x, y, x + w, y + h),
+					  radeon_pick_best_crtc(pScrn, x, x + w, y, y + h),
 					  y, y + h);
 
 	while ((buf = RADEONHostDataBlit(pScrn,
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index 7f350fb..15f4326 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -2256,7 +2256,7 @@ static void FUNC_NAME(RadeonCompositeTile)(ScrnInfoPtr pScrn,
 
     if (info->accel_state->vsync)
 	FUNC_NAME(RADEONWaitForVLine)(pScrn, pDst,
-				      radeon_pick_best_crtc(pScrn, dstX, dstY, dstX + w, dstY + h),
+				      radeon_pick_best_crtc(pScrn, dstX, dstX + w, dstY, dstY + h),
 				      dstY, dstY + h);
 
 #ifdef ACCEL_CP
commit 6e95905f759b844373be62ec513c78153ed00222
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Mon Feb 15 17:02:16 2010 +0100

    Allocate BOs for 'video offscreen surfaces' and 'TV-in' in VRAM.
    
    I think these can only really work in VRAM, though right now there's probably
    nothing to prevent them from getting evicted...

diff --git a/src/radeon_video.c b/src/radeon_video.c
index 92f65a6..335cac6 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -2950,7 +2950,7 @@ RADEONPutImage(
    pPriv->video_offset = radeon_legacy_allocate_memory(pScrn, &pPriv->video_memory,
 						       (pPriv->doubleBuffer ?
 						       (new_size * 2) : new_size), 64,
-						       RADEON_GEM_DOMAIN_GTT);
+						       RADEON_GEM_DOMAIN_VRAM);
    if (pPriv->video_offset == 0)
       return BadAlloc;
 
@@ -3181,7 +3181,7 @@ RADEONAllocateSurface(
     size = pitch * h;
 
     offset = radeon_legacy_allocate_memory(pScrn, &surface_memory, size, 64,
-		    RADEON_GEM_DOMAIN_GTT);
+		    RADEON_GEM_DOMAIN_VRAM);
     if (offset == 0)
 	return BadAlloc;
 
commit 78e7047c5235b09858b66dd3688d39aaa27d7589
Author: Pauli Nieminen <suokkos at gmail.com>
Date:   Mon Feb 15 13:40:37 2010 +0200

    Allocate Xv buffers to GTT.
    
    KMS doesn't have acceleration for upload to vram. memcpy/memmove to VRAM
    directly is very slow (40M/s in benchmark) which causes visible problems
    to video.
    
    Allocating video buffer in GTT will give good performance (350-450M/s)
    for memmove operation. This is nice performance boost for Xv under KMS.
    
    Signed-off-by: Pauli Nieminen <suokkos at gmail.com>

diff --git a/src/radeon.h b/src/radeon.h
index 59c2282..f9c78ab 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -1331,7 +1331,8 @@ extern uint32_t
 radeon_legacy_allocate_memory(ScrnInfoPtr pScrn,
 			      void **mem_struct,
 			      int size,
-			      int align);
+			      int align,
+			      int domain);
 extern void
 radeon_legacy_free_memory(ScrnInfoPtr pScrn,
 		          void *mem_struct);
diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c
index 556b461..764839c 100644
--- a/src/radeon_crtc.c
+++ b/src/radeon_crtc.c
@@ -564,7 +564,8 @@ radeon_crtc_shadow_allocate (xf86CrtcPtr crtc, int width, int height)
      * setter for offscreen area locking in EXA currently.  So, we just
      * allocate offscreen memory and fake up a pixmap header for it.
      */
-    rotate_offset = radeon_legacy_allocate_memory(pScrn, &radeon_crtc->crtc_rotate_mem, size, align);
+    rotate_offset = radeon_legacy_allocate_memory(pScrn, &radeon_crtc->crtc_rotate_mem,
+		    size, align, RADEON_GEM_DOMAIN_VRAM);
     if (rotate_offset == 0)
 	return NULL;
 
diff --git a/src/radeon_cursor.c b/src/radeon_cursor.c
index 2e60710..4a171ff 100644
--- a/src/radeon_cursor.c
+++ b/src/radeon_cursor.c
@@ -420,7 +420,8 @@ Bool RADEONCursorInit(ScreenPtr pScreen)
 	    int align = IS_AVIVO_VARIANT ? 4096 : 256;
 
 	    radeon_crtc->cursor_offset =
-		radeon_legacy_allocate_memory(pScrn, &radeon_crtc->cursor_mem, size_bytes, align);
+		radeon_legacy_allocate_memory(pScrn, &radeon_crtc->cursor_mem,
+				size_bytes, align, RADEON_GEM_DOMAIN_VRAM);
 
 	    if (radeon_crtc->cursor_offset == 0)
 		return FALSE;
diff --git a/src/radeon_legacy_memory.c b/src/radeon_legacy_memory.c
index 02b95ed..bdf8ca2 100644
--- a/src/radeon_legacy_memory.c
+++ b/src/radeon_legacy_memory.c
@@ -15,7 +15,8 @@ uint32_t
 radeon_legacy_allocate_memory(ScrnInfoPtr pScrn,
 		       void **mem_struct,
 		       int size,
-		       int align)
+		       int align,
+		       int domain)
 {
     ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
     RADEONInfoPtr info = RADEONPTR(pScrn);
@@ -25,7 +26,7 @@ radeon_legacy_allocate_memory(ScrnInfoPtr pScrn,
     if (info->cs) {
 	struct radeon_bo *video_bo;
 
-	video_bo = radeon_bo_open(info->bufmgr, 0, size, 4096, 0, 0);
+	video_bo = radeon_bo_open(info->bufmgr, 0, size, 4096, domain, 0);
 
 	*mem_struct = video_bo;
 
diff --git a/src/radeon_textured_video.c b/src/radeon_textured_video.c
index fdc077e..29910d0 100644
--- a/src/radeon_textured_video.c
+++ b/src/radeon_textured_video.c
@@ -318,14 +318,16 @@ RADEONPutImageTextured(ScrnInfoPtr pScrn,
     if (pPriv->video_memory == NULL) {
 	pPriv->video_offset = radeon_legacy_allocate_memory(pScrn,
 							    &pPriv->video_memory,
-							    size, hw_align + 1);
+							    size, hw_align + 1,
+							    RADEON_GEM_DOMAIN_GTT);
 	if (pPriv->video_offset == 0)
 	    return BadAlloc;
 
 	if (info->cs) {
 	    pPriv->src_bo[0] = pPriv->video_memory;
 	    radeon_legacy_allocate_memory(pScrn, (void*)&pPriv->src_bo[1], size,
-					  hw_align + 1);
+					  hw_align + 1,
+					  RADEON_GEM_DOMAIN_GTT);
 	}
     }
 
@@ -709,7 +711,8 @@ Bool radeon_load_bicubic_texture(ScrnInfoPtr pScrn)
     /* Bicubic filter loading */
     info->bicubic_offset = radeon_legacy_allocate_memory(pScrn,
 							 &info->bicubic_memory,
-							 sizeof(bicubic_tex_512), 64);
+							 sizeof(bicubic_tex_512), 64,
+							 RADEON_GEM_DOMAIN_VRAM);
     if (info->bicubic_offset == 0)
 	return FALSE;
 
diff --git a/src/radeon_video.c b/src/radeon_video.c
index d7700fa..92f65a6 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -2949,7 +2949,8 @@ RADEONPutImage(
    }
    pPriv->video_offset = radeon_legacy_allocate_memory(pScrn, &pPriv->video_memory,
 						       (pPriv->doubleBuffer ?
-						       (new_size * 2) : new_size), 64);
+						       (new_size * 2) : new_size), 64,
+						       RADEON_GEM_DOMAIN_GTT);
    if (pPriv->video_offset == 0)
       return BadAlloc;
 
@@ -3179,7 +3180,8 @@ RADEONAllocateSurface(
     pitch = ((w << 1) + 15) & ~15;
     size = pitch * h;
 
-    offset = radeon_legacy_allocate_memory(pScrn, &surface_memory, size, 64);
+    offset = radeon_legacy_allocate_memory(pScrn, &surface_memory, size, 64,
+		    RADEON_GEM_DOMAIN_GTT);
     if (offset == 0)
 	return BadAlloc;
 
@@ -3517,7 +3519,8 @@ RADEONPutVideo(
 
    pPriv->video_offset = radeon_legacy_allocate_memory(pScrn, &pPriv->video_memory,
 						      (pPriv->doubleBuffer ?
-						      (new_size * 2) : new_size), 64);
+						      (new_size * 2) : new_size), 64,
+						      RADEON_GEM_DOMAIN_GTT);
    if (pPriv->video_offset == 0)
       return BadAlloc;
 
commit 3ec25e59854b6b03ad763bc374d3475a50f562d8
Author: Pauli Nieminen <suokkos at gmail.com>
Date:   Mon Feb 15 13:45:28 2010 +0200

    Use memcpy instead of memove for RADEONSwapCopy.
    
    memcpy has about 25% better performance than memmove when
    destination is GTT (wc caching). Changing memmove to memcpy
    in SwapCopy will reduce CPU time spent moving data between
    host and GPU.
    
    memcpy will specially help Xv when playing high resolution
    videos.
    
    The swap path doesn't support overlapping memory copies either
    so extra safety is not worth the performance hit in commonly
    used code path.
    
    Signed-off-by: Pauli Nieminen <suokkos at gmail.com>
    
    [ Michel Dänzer: Fixed up whitespace ]

diff --git a/src/radeon_accel.c b/src/radeon_accel.c
index 02905dd..f0d94c3 100644
--- a/src/radeon_accel.c
+++ b/src/radeon_accel.c
@@ -980,7 +980,7 @@ void RADEONCopySwap(uint8_t *dst, uint8_t *src, unsigned int size, int swap)
 	}
     }
     if (src != dst)
-	    memmove(dst, src, size);
+	memcpy(dst, src, size);
 }
 
 /* Copies a single pass worth of data for a hostdata blit set up by


More information about the xorg-commit mailing list