diff options
author | Nicolai Hähnle <[email protected]> | 2017-02-13 12:51:36 +0100 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2017-03-28 10:22:01 +0200 |
commit | d9014952f5ca10a5292df3bb8c4bf1b7ccaed240 (patch) | |
tree | 351be01958f915e5043eb0eb4bbc3f32f41fc133 /src/gallium/drivers/radeonsi | |
parent | 239a9224a33d280cd5703c29ce6eb9df2eab9b3d (diff) |
radeonsi: remove the early-out for SDMA in si_clear_buffer
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 <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_cp_dma.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/gallium/drivers/radeonsi/si_cp_dma.c b/src/gallium/drivers/radeonsi/si_cp_dma.c index 1be7586d16b..b40f5cc5871 100644 --- a/src/gallium/drivers/radeonsi/si_cp_dma.c +++ b/src/gallium/drivers/radeonsi/si_cp_dma.c @@ -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++; + } } /** |