summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@chown.ath.cx>2013-10-13 18:08:44 +0200
committerChristian König <christian.koenig@amd.com>2013-10-13 20:09:34 +0200
commitf250fd59c4e39e55816eb0bacce30c14240b58c4 (patch)
treec3a5c929e30ee7c4662d569d460fed95961c1d18
parent270fab5164d04bd8ce5f322c1a4d6ca39734d39a (diff)
radeon: use staging for mapping linear textures
Textures that likely reside in VRAM, are mapped for reading and don't require direct mapping should be staged into GTT, to avoid bad performance. This fixes readback performance of VDPAU surfaces. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r--src/gallium/drivers/radeon/r600_texture.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
index ebb7090697d..9ba1e363e27 100644
--- a/src/gallium/drivers/radeon/r600_texture.c
+++ b/src/gallium/drivers/radeon/r600_texture.c
@@ -852,6 +852,12 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
if (rtex->surface.level[level].mode >= RADEON_SURF_MODE_1D)
use_staging_texture = TRUE;
+ /* Untiled buffers in VRAM, which is slow for CPU reads */
+ if ((usage & PIPE_TRANSFER_READ) && !(usage & PIPE_TRANSFER_MAP_DIRECTLY) &&
+ (rtex->resource.domains == RADEON_DOMAIN_VRAM)) {
+ use_staging_texture = TRUE;
+ }
+
/* Use a staging texture for uploads if the underlying BO is busy. */
if (!(usage & PIPE_TRANSFER_READ) &&
(r600_rings_is_buffer_referenced(rctx, rtex->resource.cs_buf, RADEON_USAGE_READWRITE) ||