From 867fb6756beb2c546ac394084b42b08692fa101f Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 5 May 2025 09:09:27 +0200 Subject: [PATCH] radv: fix GPU hangs with image copies for ASTC/ETC2 formats on transfer queue Emitting compute dispatches on SDMA just hangs. It might be needed to switch to gang submit for these to work but fixing the GPU hang is more important for now. Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: (cherry picked from commit 0684dc5fa89287504cb086450a55df3ca946dba5) --- .pick_status.json | 2 +- src/amd/vulkan/meta/radv_meta_copy.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 9a1bc470a96..7ae3af5f574 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -434,7 +434,7 @@ "description": "radv: fix GPU hangs with image copies for ASTC/ETC2 formats on transfer queue", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/meta/radv_meta_copy.c b/src/amd/vulkan/meta/radv_meta_copy.c index 831f0e002f1..a80d2e326f6 100644 --- a/src/amd/vulkan/meta/radv_meta_copy.c +++ b/src/amd/vulkan/meta/radv_meta_copy.c @@ -234,7 +234,7 @@ radv_CmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToIm pCopyBufferToImageInfo->dstImageLayout, region); } - if (radv_is_format_emulated(pdev, dst_image->vk.format)) { + if (radv_is_format_emulated(pdev, dst_image->vk.format) && cmd_buffer->qf != RADV_QUEUE_TRANSFER) { cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH | RADV_CMD_FLAG_PS_PARTIAL_FLUSH | radv_src_access_flush(cmd_buffer, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, 0, dst_image, NULL) | @@ -664,7 +664,7 @@ radv_CmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 *pCopyI region); } - if (radv_is_format_emulated(pdev, dst_image->vk.format)) { + if (radv_is_format_emulated(pdev, dst_image->vk.format) && cmd_buffer->qf != RADV_QUEUE_TRANSFER) { cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH | RADV_CMD_FLAG_PS_PARTIAL_FLUSH | radv_src_access_flush(cmd_buffer, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, 0, dst_image, NULL) |