Mesa (master): radv: only decompress the depth/stencil aspect that needs to be resolved

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 22 18:29:11 UTC 2021


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Mon Jan 18 15:46:06 2021 +0100

radv: only decompress the depth/stencil aspect that needs to be resolved

For depth/stencil images, the driver was decompressing both aspects
while it should be enough to only decompress the one that's going
to be resolved.

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/8561>

---

 src/amd/vulkan/radv_meta_resolve_cs.c | 20 +++++++++++++-------
 src/amd/vulkan/radv_meta_resolve_fs.c | 19 +++++++++++++------
 2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c b/src/amd/vulkan/radv_meta_resolve_cs.c
index 9a30a94ec6f..ef12f644e28 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -968,21 +968,27 @@ radv_depth_stencil_resolve_subpass_cs(struct radv_cmd_buffer *cmd_buffer,
 		radv_dst_access_flush(cmd_buffer, VK_ACCESS_SHADER_READ_BIT, NULL) |
 		radv_dst_access_flush(cmd_buffer, VK_ACCESS_SHADER_WRITE_BIT, NULL);
 
-	radv_decompress_resolve_subpass_src(cmd_buffer);
+	struct radv_subpass_attachment src_att = *subpass->depth_stencil_attachment;
+	struct radv_image_view *src_iview =
+		cmd_buffer->state.attachments[src_att.attachment].iview;
+	struct radv_image *src_image = src_iview->image;
+
+	VkImageResolve2KHR region = {0};
+	region.sType = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR;
+	region.srcSubresource.aspectMask = aspects;
+	region.srcSubresource.mipLevel = 0;
+	region.srcSubresource.baseArrayLayer = src_iview->base_layer;
+	region.srcSubresource.layerCount = layer_count;
+
+	radv_decompress_resolve_src(cmd_buffer, src_image, src_att.layout, &region);
 
 	radv_meta_save(&saved_state, cmd_buffer,
 		       RADV_META_SAVE_COMPUTE_PIPELINE |
 		       RADV_META_SAVE_DESCRIPTORS);
 
-	struct radv_subpass_attachment src_att = *subpass->depth_stencil_attachment;
 	struct radv_subpass_attachment dest_att = *subpass->ds_resolve_attachment;
-
-	struct radv_image_view *src_iview =
-		cmd_buffer->state.attachments[src_att.attachment].iview;
 	struct radv_image_view *dst_iview =
 		cmd_buffer->state.attachments[dest_att.attachment].iview;
-
-	struct radv_image *src_image = src_iview->image;
 	struct radv_image *dst_image = dst_iview->image;
 
 	struct radv_image_view tsrc_iview;
diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c b/src/amd/vulkan/radv_meta_resolve_fs.c
index 6f34e6dde1a..fb9751cd877 100644
--- a/src/amd/vulkan/radv_meta_resolve_fs.c
+++ b/src/amd/vulkan/radv_meta_resolve_fs.c
@@ -1198,18 +1198,25 @@ radv_depth_stencil_resolve_subpass_fs(struct radv_cmd_buffer *cmd_buffer,
 	barrier.dst_access_mask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
 	radv_subpass_barrier(cmd_buffer, &barrier);
 
-	radv_decompress_resolve_subpass_src(cmd_buffer);
+	struct radv_subpass_attachment src_att = *subpass->depth_stencil_attachment;
+	struct radv_image_view *src_iview =
+		cmd_buffer->state.attachments[src_att.attachment].iview;
+	struct radv_image *src_image = src_iview->image;
+
+	VkImageResolve2KHR region = {0};
+	region.sType = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR;
+	region.srcSubresource.aspectMask = aspects;
+	region.srcSubresource.mipLevel = 0;
+	region.srcSubresource.baseArrayLayer = 0;
+	region.srcSubresource.layerCount = 1;
+
+	radv_decompress_resolve_src(cmd_buffer, src_image, src_att.layout, &region);
 
 	radv_meta_save(&saved_state, cmd_buffer,
 		       RADV_META_SAVE_GRAPHICS_PIPELINE |
 		       RADV_META_SAVE_DESCRIPTORS);
 
-	struct radv_subpass_attachment src_att = *subpass->depth_stencil_attachment;
 	struct radv_subpass_attachment dst_att = *subpass->ds_resolve_attachment;
-
-	struct radv_image_view *src_iview =
-		cmd_buffer->state.attachments[src_att.attachment].iview;
-	struct radv_image *src_image = src_iview->image;
 	struct radv_image_view *dst_iview =
 		cmd_buffer->state.attachments[dst_att.attachment].iview;
 



More information about the mesa-commit mailing list