From 4d1d6d4147d0947ee075dcea1519a01d69239d26 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 2 Apr 2025 08:40:27 +0200 Subject: [PATCH] radv: fix ignoring conditional rendering with vkCmdResolveImage() This command isn't supposed to be affected by conditional rendering. This fixes new VKCTS coverage dEQP-VK.conditional_rendering.conditional_ignore.resolve_image*. Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/meta/radv_meta_resolve.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/amd/vulkan/meta/radv_meta_resolve.c b/src/amd/vulkan/meta/radv_meta_resolve.c index 7deadbcffe1..c232339a613 100644 --- a/src/amd/vulkan/meta/radv_meta_resolve.c +++ b/src/amd/vulkan/meta/radv_meta_resolve.c @@ -407,6 +407,13 @@ radv_CmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * VkImageLayout src_image_layout = pResolveImageInfo->srcImageLayout; VkImageLayout dst_image_layout = pResolveImageInfo->dstImageLayout; enum radv_resolve_method resolve_method = pdev->info.gfx_level >= GFX11 ? RESOLVE_FRAGMENT : RESOLVE_HW; + bool old_predicating; + + /* VK_EXT_conditional_rendering says that resolve commands should not be affected by conditional + * rendering. + */ + old_predicating = cmd_buffer->state.predicating; + cmd_buffer->state.predicating = false; /* we can use the hw resolve only for single full resolves */ if (pResolveImageInfo->regionCount == 1) { @@ -432,6 +439,9 @@ radv_CmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * resolve_image(cmd_buffer, src_image, src_image_layout, dst_image, dst_image_layout, region, resolve_method); } + + /* Restore conditional rendering. */ + cmd_buffer->state.predicating = old_predicating; } static void