Mesa (main): radv: fix dynamic rendering inheritance if the subpass index isn't 0

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Dec 13 11:21:36 UTC 2021


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Dec  7 14:33:09 2021 +0100

radv: fix dynamic rendering inheritance if the subpass index isn't 0

The driver will always create only one subpass in the render pass
for inheritance but the subpass index isn't always zero.

This fixes dEQP-VK.multiview.dynamic_rendering.secondary_cmd_buffer*.

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 6cfb8497482..922d72dde38 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -4372,14 +4372,9 @@ radv_ResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags
 
 static void
 radv_inherit_dynamic_rendering(struct radv_cmd_buffer *cmd_buffer,
-                               const VkCommandBufferInheritanceInfo *inherit_info)
+                               const VkCommandBufferInheritanceInfo *inherit_info,
+                               const VkCommandBufferInheritanceRenderingInfoKHR *dyn_info)
 {
-   const VkCommandBufferInheritanceRenderingInfoKHR *dyn_info =
-      vk_find_struct_const(inherit_info->pNext, COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR);
-
-   if (!dyn_info)
-      return;
-
    const VkAttachmentSampleCountInfoAMD *sample_info =
       vk_find_struct_const(inherit_info->pNext, ATTACHMENT_SAMPLE_COUNT_INFO_AMD);
    VkResult result;
@@ -4503,16 +4498,26 @@ radv_BeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBegi
 
    if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY &&
        (pBeginInfo->flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)) {
+      struct radv_subpass *subpass;
+
       assert(pBeginInfo->pInheritanceInfo);
+
       cmd_buffer->state.framebuffer =
          radv_framebuffer_from_handle(pBeginInfo->pInheritanceInfo->framebuffer);
       cmd_buffer->state.pass =
          radv_render_pass_from_handle(pBeginInfo->pInheritanceInfo->renderPass);
 
-      radv_inherit_dynamic_rendering(cmd_buffer, pBeginInfo->pInheritanceInfo);
+      const VkCommandBufferInheritanceRenderingInfoKHR *dyn_info =
+         vk_find_struct_const(pBeginInfo->pInheritanceInfo->pNext,
+                              COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR);
 
-      struct radv_subpass *subpass =
-         &cmd_buffer->state.pass->subpasses[pBeginInfo->pInheritanceInfo->subpass];
+      if (dyn_info) {
+         radv_inherit_dynamic_rendering(cmd_buffer, pBeginInfo->pInheritanceInfo, dyn_info);
+         subpass = &cmd_buffer->state.pass->subpasses[0];
+      } else {
+         assert(pBeginInfo->pInheritanceInfo->subpass < cmd_buffer->state.pass->subpass_count);
+         subpass = &cmd_buffer->state.pass->subpasses[pBeginInfo->pInheritanceInfo->subpass];
+      }
 
       if (cmd_buffer->state.framebuffer) {
          result = radv_cmd_state_setup_attachments(cmd_buffer, cmd_buffer->state.pass, NULL, NULL);



More information about the mesa-commit mailing list