Mesa (master): radv: use COLOR_ATTACHMENT_OPTIMAL for fast clear/hw resolve operations

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Apr 2 07:39:07 UTC 2021


Module: Mesa
Branch: master
Commit: 57916fbdcdec218b10806d4cd1863e1fa5f61f91
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=57916fbdcdec218b10806d4cd1863e1fa5f61f91

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Wed Mar 31 10:08:27 2021 +0200

radv: use COLOR_ATTACHMENT_OPTIMAL for fast clear/hw resolve operations

This should be equivalent without needed to force enable FMASK for
some specific internal pipelines.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9940>

---

 src/amd/vulkan/radv_cmd_buffer.c      | 13 -------------
 src/amd/vulkan/radv_meta.h            | 19 -------------------
 src/amd/vulkan/radv_meta_fast_clear.c |  6 +++---
 src/amd/vulkan/radv_meta_resolve.c    |  6 +++---
 4 files changed, 6 insertions(+), 38 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 4fc3c11aa4e..aa0b3ad4066 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -1652,19 +1652,6 @@ radv_emit_fb_color_state(struct radv_cmd_buffer *cmd_buffer,
 		cb_color_info &= C_028C70_FMASK_COMPRESS_1FRAG_ONLY;
 	}
 
-	if (radv_image_has_fmask(image) &&
-	    (radv_is_fmask_decompress_pipeline(cmd_buffer) ||
-	     radv_is_hw_resolve_pipeline(cmd_buffer))) {
-		/* Make sure FMASK is enabled if it has been cleared because:
-		 *
-		 * 1) it's required for FMASK_DECOMPRESS operations to avoid
-		 * GPU hangs
-		 * 2) it's necessary for CB_RESOLVE which can read compressed
-		 * FMASK data anyways.
-		 */
-		cb_color_info |= S_028C70_COMPRESSION(1);
-	}
-
 	if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX10) {
 			radeon_set_context_reg_seq(cmd_buffer->cs, R_028C60_CB_COLOR0_BASE + index * 0x3c, 11);
 			radeon_emit(cmd_buffer->cs, cb->cb_color_base);
diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index ed461575e6c..ce2c25f5850 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -284,25 +284,6 @@ radv_is_dcc_decompress_pipeline(struct radv_cmd_buffer *cmd_buffer)
 	       meta_state->fast_clear_flush.dcc_decompress_pipeline;
 }
 
-/**
- * Return whether the bound pipeline is the hardware resolve path.
- */
-static inline bool
-radv_is_hw_resolve_pipeline(struct radv_cmd_buffer *cmd_buffer)
-{
-	struct radv_meta_state *meta_state = &cmd_buffer->device->meta_state;
-	struct radv_pipeline *pipeline = cmd_buffer->state.pipeline;
-
-	if (!pipeline)
-		return false;
-
-	for (uint32_t i = 0; i < NUM_META_FS_KEYS; ++i) {
-		if (radv_pipeline_to_handle(pipeline) == meta_state->resolve.pipeline[i])
-			return true;
-	}
-	return false;
-}
-
 /* common nir builder helpers */
 #include "nir/nir_builder.h"
 
diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
index e10da6bfde9..0a250071b9f 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -186,8 +186,8 @@ create_pass(struct radv_device *device)
 	attachment.samples = 1;
 	attachment.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
 	attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
-	attachment.initialLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
-	attachment.finalLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
+	attachment.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+	attachment.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 
 	result = radv_CreateRenderPass2(device_h,
 				       &(VkRenderPassCreateInfo2) {
@@ -204,7 +204,7 @@ create_pass(struct radv_device *device)
 							       {
 								       .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
 								       .attachment = 0,
-								       .layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+								       .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 							       },
 						       },
 						       .pResolveAttachments = NULL,
diff --git a/src/amd/vulkan/radv_meta_resolve.c b/src/amd/vulkan/radv_meta_resolve.c
index 5ca95ff2c2f..c11c777e9b9 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -63,8 +63,8 @@ create_pass(struct radv_device *device, VkFormat vk_format, VkRenderPass *pass)
 		attachments[i].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
 		attachments[i].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
 	}
-	attachments[0].initialLayout = VK_IMAGE_LAYOUT_GENERAL;
-	attachments[0].finalLayout = VK_IMAGE_LAYOUT_GENERAL;
+	attachments[0].initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+	attachments[0].finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 	attachments[1].initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 	attachments[1].finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 
@@ -83,7 +83,7 @@ create_pass(struct radv_device *device, VkFormat vk_format, VkRenderPass *pass)
 							       {
 								       .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
 								       .attachment = 0,
-								       .layout = VK_IMAGE_LAYOUT_GENERAL,
+								       .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
 							       },
 							       {
 								       .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,



More information about the mesa-commit mailing list