Mesa (main): radv: Avoid using a new subpass for ds clears.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 24 18:45:09 UTC 2021


Module: Mesa
Branch: main
Commit: fcd2e69f7d579bb767658a62f7374d4ce6e3497b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fcd2e69f7d579bb767658a62f7374d4ce6e3497b

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Sun Nov  7 20:29:56 2021 +0100

radv: Avoid using a new subpass for ds clears.

If we have an inherited subpass in a cmdbuffer we can't really
emit any framebuffer data if it isn't provided.

Note we still do it for resolve clears, but we can't have that
in a secondary cmdbuffer with inherited renderpass.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13699>

---

 src/amd/vulkan/radv_meta_clear.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 0cb4e999476..e2879bf7b0f 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -729,7 +729,7 @@ pick_depthstencil_pipeline(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_
 static void
 emit_depthstencil_clear(struct radv_cmd_buffer *cmd_buffer, const VkClearAttachment *clear_att,
                         const VkClearRect *clear_rect, struct radv_subpass_attachment *ds_att,
-                        uint32_t view_mask)
+                        uint32_t view_mask, bool ds_resolve_clear)
 {
    struct radv_device *device = cmd_buffer->device;
    struct radv_meta_state *meta_state = &device->meta_state;
@@ -786,7 +786,8 @@ emit_depthstencil_clear(struct radv_cmd_buffer *cmd_buffer, const VkClearAttachm
       .depth_stencil_attachment = ds_att,
    };
 
-   radv_cmd_buffer_set_subpass(cmd_buffer, &clear_subpass);
+   if (ds_resolve_clear)
+      radv_cmd_buffer_set_subpass(cmd_buffer, &clear_subpass);
 
    radv_CmdBindPipeline(cmd_buffer_h, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
 
@@ -814,7 +815,8 @@ emit_depthstencil_clear(struct radv_cmd_buffer *cmd_buffer, const VkClearAttachm
       radv_CmdSetStencilReference(cmd_buffer_h, VK_STENCIL_FACE_FRONT_BIT, prev_reference);
    }
 
-   radv_cmd_buffer_restore_subpass(cmd_buffer, subpass);
+   if (ds_resolve_clear)
+      radv_cmd_buffer_restore_subpass(cmd_buffer, subpass);
 }
 
 static uint32_t
@@ -1969,7 +1971,8 @@ emit_clear(struct radv_cmd_buffer *cmd_buffer, const VkClearAttachment *clear_at
                                     clear_rect, clear_value, view_mask)) {
          radv_fast_clear_depth(cmd_buffer, iview, clear_att, pre_flush, post_flush);
       } else {
-         emit_depthstencil_clear(cmd_buffer, clear_att, clear_rect, ds_att, view_mask);
+         emit_depthstencil_clear(cmd_buffer, clear_att, clear_rect, ds_att, view_mask,
+                                 ds_resolve_clear);
       }
    }
 }



More information about the mesa-commit mailing list