radv: ignore the loadOp if the first use of an attachment is a resolve
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 27 May 2019 08:20:03 +0000 (10:20 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 27 May 2019 11:52:39 +0000 (13:52 +0200)
Based on ANV.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_meta_resolve.c

index b9f5106..1544513 100644 (file)
@@ -618,15 +618,6 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer)
        struct radv_meta_saved_state saved_state;
        enum radv_resolve_method resolve_method = RESOLVE_HW;
 
-       /* FINISHME(perf): Skip clears for resolve attachments.
-        *
-        * From the Vulkan 1.0 spec:
-        *
-        *    If the first use of an attachment in a render pass is as a resolve
-        *    attachment, then the loadOp is effectively ignored as the resolve is
-        *    guaranteed to overwrite all pixels in the render area.
-        */
-
        if (!subpass->has_resolve)
                return;
 
@@ -637,6 +628,9 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer)
                if (dest_att.attachment == VK_ATTACHMENT_UNUSED)
                        continue;
 
+               /* Make sure to not clear color attachments after resolves. */
+               cmd_buffer->state.attachments[dest_att.attachment].pending_clear_aspects = 0;
+
                struct radv_image *dst_img = cmd_buffer->state.framebuffer->attachments[dest_att.attachment].attachment->image;
                struct radv_image *src_img = cmd_buffer->state.framebuffer->attachments[src_att.attachment].attachment->image;