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, ®ion);
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, ®ion);
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