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