From a0614e11356b9fb3b4035ed4e1ea6b9ec9063253 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 23 Apr 2021 11:54:22 +0200 Subject: [PATCH] radv: make sure CP DMA is idle before executing secondary command buffers Buffer copies with CP DMA aren't synced. Fix dEQP-VK.memory.pipeline_barrier.transfer_src_transfer_dst.65536 flakes on GFX10+. Fixes: e8707961134 ("radv: prefer CP DMA for GTT buffer copies/clears on dGPUs due to slow PCIe") Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: (cherry picked from commit 3d979c9169508b4f8e2bb0e925dde22dc34ed9bd) --- .pick_status.json | 2 +- src/amd/vulkan/radv_cmd_buffer.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 02c734d41c1..2f37b9d08d5 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -229,7 +229,7 @@ "description": "radv: make sure CP DMA is idle before executing secondary command buffers", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "e8707961134daa9b91599840ad5698366a6229b7" }, diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index e6ca179b7ab..be06350f049 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -4743,6 +4743,9 @@ radv_CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCou /* Emit pending flushes on primary prior to executing secondary */ si_emit_cache_flush(primary); + /* Make sure CP DMA is idle on primary prior to executing secondary. */ + si_cp_dma_wait_for_idle(primary); + for (uint32_t i = 0; i < commandBufferCount; i++) { RADV_FROM_HANDLE(radv_cmd_buffer, secondary, pCmdBuffers[i]);