diff --git a/.pick_status.json b/.pick_status.json index 76f925e4f72..4a810f107b2 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4,7 +4,7 @@ "description": "radeonsi: fix GravityMark corruption when use aco", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/drivers/radeonsi/si_barrier.c b/src/gallium/drivers/radeonsi/si_barrier.c index 4951fd84b83..555d0dcd3ac 100644 --- a/src/gallium/drivers/radeonsi/si_barrier.c +++ b/src/gallium/drivers/radeonsi/si_barrier.c @@ -677,6 +677,11 @@ static void si_memory_barrier(struct pipe_context *ctx, unsigned flags) PIPE_BARRIER_IMAGE | PIPE_BARRIER_STREAMOUT_BUFFER | PIPE_BARRIER_GLOBAL_BUFFER)) sctx->barrier_flags |= SI_BARRIER_INV_VMEM; + /* Unlike LLVM, ACO may use SMEM for SSBOs and global access. */ + if (sctx->screen->use_aco && + (flags & (PIPE_BARRIER_SHADER_BUFFER | PIPE_BARRIER_GLOBAL_BUFFER))) + sctx->barrier_flags |= SI_BARRIER_INV_SMEM; + if (flags & (PIPE_BARRIER_INDEX_BUFFER | PIPE_BARRIER_INDIRECT_BUFFER)) sctx->barrier_flags |= SI_BARRIER_PFP_SYNC_ME;