summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2021-12-07 14:44:38 +0100
committerMarge Bot <emma+marge@anholt.net>2021-12-13 10:48:44 +0000
commit9a388beda7ba10675246bf782f8c362448d92c40 (patch)
tree8bd67fab6d484c400843029395e7497f904ecc72
parent841949e50b3a98d0a2b0ad040ed31ba6331f2b2e (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.c23
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) {