OSDN Git Service

gallium/radeon: don't use temporary buffers for persistent mappings
authorMarek Olšák <marek.olsak@amd.com>
Thu, 25 Feb 2016 22:39:42 +0000 (23:39 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 8 Mar 2016 19:08:52 +0000 (20:08 +0100)
Cc: 11.1 11.2 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeon/r600_buffer_common.c

index b384baa..81409ce 100644 (file)
@@ -314,7 +314,8 @@ static void *r600_buffer_transfer_map(struct pipe_context *ctx,
                }
        }
        else if ((usage & PIPE_TRANSFER_DISCARD_RANGE) &&
-                !(usage & PIPE_TRANSFER_UNSYNCHRONIZED) &&
+                !(usage & (PIPE_TRANSFER_UNSYNCHRONIZED |
+                           PIPE_TRANSFER_PERSISTENT)) &&
                 !(rscreen->debug_flags & DBG_NO_DISCARD_RANGE) &&
                 r600_can_dma_copy_buffer(rctx, box->x, 0, box->width)) {
                assert(usage & PIPE_TRANSFER_WRITE);
@@ -341,7 +342,8 @@ static void *r600_buffer_transfer_map(struct pipe_context *ctx,
        }
        /* Using a staging buffer in GTT for larger reads is much faster. */
        else if ((usage & PIPE_TRANSFER_READ) &&
-                !(usage & PIPE_TRANSFER_WRITE) &&
+                !(usage & (PIPE_TRANSFER_WRITE |
+                           PIPE_TRANSFER_PERSISTENT)) &&
                 rbuffer->domains == RADEON_DOMAIN_VRAM &&
                 r600_can_dma_copy_buffer(rctx, 0, box->x, box->width)) {
                struct r600_resource *staging;