mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-24 05:10:31 +01:00
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@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13400>
This commit is contained in:
parent
d4cf4b3cee
commit
0d2dc06761
1 changed files with 15 additions and 0 deletions
|
|
@ -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) |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue