radeonsi: remove the early-out for SDMA in si_clear_buffer
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 13 Feb 2017 11:51:36 +0000 (12:51 +0100)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 28 Mar 2017 08:22:01 +0000 (10:22 +0200)
This allows the next patches to be simple while still being able
to make use of SDMA even in some unusual cases.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_cp_dma.c

index 1be7586d16b15eb20869a3150c3b043a16f73a15..b40f5cc5871fb70c8ef335f9c3b4bad407dc3f9c 100644 (file)
@@ -223,35 +223,34 @@ static void si_clear_buffer(struct pipe_context *ctx, struct pipe_resource *dst,
             !ws->cs_is_buffer_referenced(sctx->b.gfx.cs, rdst->buf,
                                          RADEON_USAGE_READWRITE))) {
                sctx->b.dma_clear_buffer(ctx, dst, offset, size, value);
-               return;
-       }
-
-       uint64_t va = rdst->gpu_address + offset;
+       } else {
+               uint64_t va = rdst->gpu_address + offset;
 
-       /* Flush the caches. */
-       sctx->b.flags |= SI_CONTEXT_PS_PARTIAL_FLUSH |
-                        SI_CONTEXT_CS_PARTIAL_FLUSH | flush_flags;
+               /* Flush the caches. */
+               sctx->b.flags |= SI_CONTEXT_PS_PARTIAL_FLUSH |
+                                SI_CONTEXT_CS_PARTIAL_FLUSH | flush_flags;
 
-       while (size) {
-               unsigned byte_count = MIN2(size, CP_DMA_MAX_BYTE_COUNT);
-               unsigned dma_flags = tc_l2_flag  | CP_DMA_CLEAR;
+               while (size) {
+                       unsigned byte_count = MIN2(size, CP_DMA_MAX_BYTE_COUNT);
+                       unsigned dma_flags = tc_l2_flag  | CP_DMA_CLEAR;
 
-               si_cp_dma_prepare(sctx, dst, NULL, byte_count, size, 0,
-                                 &is_first, &dma_flags);
+                       si_cp_dma_prepare(sctx, dst, NULL, byte_count, size, 0,
+                                         &is_first, &dma_flags);
 
-               /* Emit the clear packet. */
-               si_emit_cp_dma(sctx, va, value, byte_count, dma_flags, coher);
+                       /* Emit the clear packet. */
+                       si_emit_cp_dma(sctx, va, value, byte_count, dma_flags, coher);
 
-               size -= byte_count;
-               va += byte_count;
-       }
+                       size -= byte_count;
+                       va += byte_count;
+               }
 
-       if (tc_l2_flag)
-               rdst->TC_L2_dirty = true;
+               if (tc_l2_flag)
+                       rdst->TC_L2_dirty = true;
 
-       /* If it's not a framebuffer fast clear... */
-       if (coher == R600_COHERENCY_SHADER)
-               sctx->b.num_cp_dma_calls++;
+               /* If it's not a framebuffer fast clear... */
+               if (coher == R600_COHERENCY_SHADER)
+                       sctx->b.num_cp_dma_calls++;
+       }
 }
 
 /**