diff options
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/amd/vulkan/radv_meta_clear.c | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/.pick_status.json b/.pick_status.json index 24a482fb204..fd3cf574781 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -283,7 +283,7 @@ "description": "radv: Disable predication for supass clear and image clears.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index d1b3c77d955..8720ed30a95 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -1897,6 +1897,10 @@ radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer) if (!radv_subpass_needs_clear(cmd_buffer)) return; + /* Subpass clear should not be affected by conditional rendering. */ + bool old_predicating = cmd_buffer->state.predicating; + cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS); @@ -1945,6 +1949,7 @@ radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer) } radv_meta_restore(&saved_state, cmd_buffer); + cmd_buffer->state.predicating = old_predicating; cmd_buffer->state.flush_bits |= post_flush; } @@ -2212,6 +2217,10 @@ radv_CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image_h, VkImageL struct radv_meta_saved_state saved_state; bool cs; + /* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering. */ + bool old_predicating = cmd_buffer->state.predicating; + cmd_buffer->state.predicating = false; + cs = cmd_buffer->qf == RADV_QUEUE_COMPUTE || !radv_image_is_renderable(cmd_buffer->device, image); @@ -2228,6 +2237,7 @@ radv_CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image_h, VkImageL pRanges, cs); radv_meta_restore(&saved_state, cmd_buffer); + cmd_buffer->state.predicating = old_predicating; } VKAPI_ATTR void VKAPI_CALL @@ -2240,6 +2250,10 @@ radv_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image_h, RADV_FROM_HANDLE(radv_image, image, image_h); struct radv_meta_saved_state saved_state; + /* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering. */ + bool old_predicating = cmd_buffer->state.predicating; + cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS); @@ -2247,6 +2261,7 @@ radv_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image_h, rangeCount, pRanges, false); radv_meta_restore(&saved_state, cmd_buffer); + cmd_buffer->state.predicating = old_predicating; } VKAPI_ATTR void VKAPI_CALL |