From cedd447a92e0fa33bf530d8bc0b2ee717f85edc0 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 0cf7bf35eff..9d9f09e4bae 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4814,7 +4814,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 16c703af58f..c446889178c 100644 --- a/src/amd/vulkan/meta/radv_meta_copy.c +++ b/src/amd/vulkan/meta/radv_meta_copy.c @@ -231,7 +231,7 @@ radv_CmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToIm &pCopyBufferToImageInfo->pRegions[r]); } - 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) | @@ -643,7 +643,7 @@ radv_CmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 *pCopyI &pCopyImageInfo->pRegions[r]); } - 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) |