diff options
author | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2021-12-07 14:44:38 +0100 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2021-12-13 10:48:44 +0000 |
commit | 9a388beda7ba10675246bf782f8c362448d92c40 (patch) | |
tree | 8bd67fab6d484c400843029395e7497f904ecc72 | |
parent | 841949e50b3a98d0a2b0ad040ed31ba6331f2b2e (diff) |
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@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14109>
-rw-r--r-- | src/amd/vulkan/radv_cmd_buffer.c | 23 |
1 files 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) { |