r600g: only do necessary cache flushes in cp_dma_copy_buffer
authorMarek Olšák <marek.olsak@amd.com>
Thu, 26 May 2016 15:25:46 +0000 (17:25 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 4 Jun 2016 13:42:33 +0000 (15:42 +0200)
The main impact is that {upload, draw, upload, draw, ..} doesn't flush
framebuffer caches before every upload.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Grazvydas Ignotas <notasas@gmail.com>
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
src/gallium/drivers/r600/r600_hw_context.c

index 3ba723d..ed4820d 100644 (file)
@@ -447,15 +447,7 @@ void r600_cp_dma_copy_buffer(struct r600_context *rctx,
        src_offset += r600_resource(src)->gpu_address;
 
        /* Flush the caches where the resources are bound. */
-       rctx->b.flags |= R600_CONTEXT_INV_CONST_CACHE |
-                        R600_CONTEXT_INV_VERTEX_CACHE |
-                        R600_CONTEXT_INV_TEX_CACHE |
-                        R600_CONTEXT_FLUSH_AND_INV |
-                        R600_CONTEXT_FLUSH_AND_INV_CB |
-                        R600_CONTEXT_FLUSH_AND_INV_DB |
-                        R600_CONTEXT_FLUSH_AND_INV_CB_META |
-                        R600_CONTEXT_FLUSH_AND_INV_DB_META |
-                        R600_CONTEXT_STREAMOUT_FLUSH |
+       rctx->b.flags |= r600_get_flush_flags(R600_COHERENCY_SHADER) |
                         R600_CONTEXT_WAIT_3D_IDLE;
 
        /* There are differences between R700 and EG in CP DMA,
@@ -513,11 +505,6 @@ void r600_cp_dma_copy_buffer(struct r600_context *rctx,
         * should precede it.
         */
        r600_emit_pfp_sync_me(rctx);
-
-       /* Invalidate the read caches. */
-       rctx->b.flags |= R600_CONTEXT_INV_CONST_CACHE |
-                        R600_CONTEXT_INV_VERTEX_CACHE |
-                        R600_CONTEXT_INV_TEX_CACHE;
 }
 
 void r600_dma_copy_buffer(struct r600_context *rctx,