Mesa (main): radeonsi: don't sync before clear_buffer and copy_buffer if the buffer is idle
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Oct 19 17:44:52 UTC 2021
Module: Mesa
Branch: main
Commit: 0d2dc06761fd0f5636cf88f06f5dec554d0f7fdb
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0d2dc06761fd0f5636cf88f06f5dec554d0f7fdb
Author: Marek Olšák <marek.olsak at amd.com>
Date: Sun Oct 17 12:23:17 2021 -0400
radeonsi: don't sync before clear_buffer and copy_buffer if the buffer is idle
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13400>
---
src/gallium/drivers/radeonsi/si_compute_blit.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/gallium/drivers/radeonsi/si_compute_blit.c b/src/gallium/drivers/radeonsi/si_compute_blit.c
index be3f47da6ab..b499b766654 100644
--- a/src/gallium/drivers/radeonsi/si_compute_blit.c
+++ b/src/gallium/drivers/radeonsi/si_compute_blit.c
@@ -59,12 +59,27 @@ unsigned si_get_flush_flags(struct si_context *sctx, enum si_coherency coher,
}
}
+static bool si_is_buffer_idle(struct si_context *sctx, struct si_resource *buf,
+ enum radeon_bo_usage usage)
+{
+ return !si_cs_is_buffer_referenced(sctx, buf->buf, usage) &&
+ sctx->ws->buffer_wait(sctx->ws, buf->buf, 0, usage);
+}
+
static void si_improve_sync_flags(struct si_context *sctx, struct pipe_resource *dst,
struct pipe_resource *src, unsigned *flags)
{
if (dst->target != PIPE_BUFFER || (src && src->target != PIPE_BUFFER))
return;
+ if (si_is_buffer_idle(sctx, si_resource(dst), RADEON_USAGE_READWRITE) &&
+ (!src || si_is_buffer_idle(sctx, si_resource(src), RADEON_USAGE_WRITE))) {
+ /* Idle buffers don't have to sync. */
+ *flags &= ~(SI_OP_SYNC_GE_BEFORE | SI_OP_SYNC_PS_BEFORE | SI_OP_SYNC_CS_BEFORE |
+ SI_OP_SYNC_CPDMA_BEFORE);
+ return;
+ }
+
const unsigned cs_mask = SI_BIND_CONSTANT_BUFFER(PIPE_SHADER_COMPUTE) |
SI_BIND_SHADER_BUFFER(PIPE_SHADER_COMPUTE) |
SI_BIND_IMAGE_BUFFER(PIPE_SHADER_COMPUTE) |
More information about the mesa-commit
mailing list