diff options
author | Grigori Goronzy <[email protected]> | 2013-10-13 18:08:44 +0200 |
---|---|---|
committer | Christian König <[email protected]> | 2013-10-13 20:09:34 +0200 |
commit | f250fd59c4e39e55816eb0bacce30c14240b58c4 (patch) | |
tree | c3a5c929e30ee7c4662d569d460fed95961c1d18 | |
parent | 270fab5164d04bd8ce5f322c1a4d6ca39734d39a (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 <[email protected]>
-rw-r--r-- | src/gallium/drivers/radeon/r600_texture.c | 6 |
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) || |