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