Mesa (main): radv: ignore dynamic inheritance if the render pass isn't NULL

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


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

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

radv: ignore dynamic inheritance if the render pass isn't NULL

>From the Vulkan spec:

    "If the pNext chain of VkCommandBufferInheritanceInfo includes a
     VkCommandBufferInheritanceRenderingInfoKHR structure, then that
     structure controls parameters of dynamic render pass instances
     that the VkCommandBuffer can be executed within. If
     VkCommandBufferInheritanceInfo::renderPass is not VK_NULL_HANDLE,
     or VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not
     specified in VkCommandBufferBeginInfo::flags, parameters of this
     structure are ignored."

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 | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 922d72dde38..ef774f16f62 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -4498,25 +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;
+      struct radv_subpass *subpass = NULL;
 
       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);
 
-      const VkCommandBufferInheritanceRenderingInfoKHR *dyn_info =
-         vk_find_struct_const(pBeginInfo->pInheritanceInfo->pNext,
-                              COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR);
-
-      if (dyn_info) {
-         radv_inherit_dynamic_rendering(cmd_buffer, pBeginInfo->pInheritanceInfo, dyn_info);
-         subpass = &cmd_buffer->state.pass->subpasses[0];
-      } else {
+      if (pBeginInfo->pInheritanceInfo->renderPass) {
+         cmd_buffer->state.pass =
+            radv_render_pass_from_handle(pBeginInfo->pInheritanceInfo->renderPass);
          assert(pBeginInfo->pInheritanceInfo->subpass < cmd_buffer->state.pass->subpass_count);
          subpass = &cmd_buffer->state.pass->subpasses[pBeginInfo->pInheritanceInfo->subpass];
+      } else {
+         const VkCommandBufferInheritanceRenderingInfoKHR *dyn_info =
+            vk_find_struct_const(pBeginInfo->pInheritanceInfo->pNext,
+                                 COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR);
+         if (dyn_info) {
+            radv_inherit_dynamic_rendering(cmd_buffer, pBeginInfo->pInheritanceInfo, dyn_info);
+            subpass = &cmd_buffer->state.pass->subpasses[0];
+         }
       }
 
       if (cmd_buffer->state.framebuffer) {



More information about the mesa-commit mailing list