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

Author: Samuel Pitoiset <samuel.pitoi...@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.pitoi...@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <b...@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;
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to