[Mesa-dev] [PATCH] radv: ignore the loadOp if the first use of an attachment is a resolve

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed May 22 09:24:13 UTC 2019


Based on ANV.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/amd/vulkan/radv_meta_resolve.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_resolve.c b/src/amd/vulkan/radv_meta_resolve.c
index ade5d438438..6a8abce1ddb 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -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,18 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer)
 		if (dest_att.attachment == VK_ATTACHMENT_UNUSED)
 			continue;
 
+		if (cmd_buffer->state.attachments[dest_att.attachment].pending_clear_aspects) {
+			/* 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.
+			*/
+			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;
 
-- 
2.21.0



More information about the mesa-dev mailing list