r600g: use WAIT_3D_IDLE before using CP DMA
authorMarek Olšák <maraeo@gmail.com>
Tue, 16 Jul 2013 20:48:48 +0000 (22:48 +0200)
committerMarek Olšák <maraeo@gmail.com>
Thu, 18 Jul 2013 12:27:34 +0000 (14:27 +0200)
I broke this with 7948ed1250cae78ae1b22dbce4ab23aceacc6159 for r700 at least.

src/gallium/drivers/r600/evergreen_hw_context.c
src/gallium/drivers/r600/r600_hw_context.c

index c428bc1f6cc32f7a96ed36a4f9a61e0097064846..93c9c58fd01868f6b10ea0c10cc507ab1c88391c 100644 (file)
@@ -123,6 +123,7 @@ void evergreen_cp_dma_clear_buffer(struct r600_context *rctx,
 
        /* Flush the cache where the resource is bound. */
        r600_flag_resource_cache_flush(rctx, dst);
+        rctx->flags |= R600_CONTEXT_WAIT_3D_IDLE;
 
        while (size) {
                unsigned sync = 0;
index 7bb4825ba963b919a3b5e940315c50468fd817bb..97b0f9cb0efd6d2f03a15c5d279ddbb78f312e21 100644 (file)
@@ -636,6 +636,7 @@ void r600_cp_dma_copy_buffer(struct r600_context *rctx,
        /* Flush the caches where the resources are bound. */
        r600_flag_resource_cache_flush(rctx, src);
        r600_flag_resource_cache_flush(rctx, dst);
+        rctx->flags |= R600_CONTEXT_WAIT_3D_IDLE;
 
        /* There are differences between R700 and EG in CP DMA,
         * but we only use the common bits here. */