From d2bd089b781658b4422009b95838d5330868f261 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 25 Jul 2022 19:52:22 -0500 Subject: [PATCH] vulkan: Append subpass structures to VkRenderingInfo last If we don't append subpass->self_dep_info last, other __vk_append_struct() calls will update its pNext chain which lives in the subpass which should be treated as immutable. This is easily fixable by just making it the last thing we append to the chain. Fixes: 7e11cdc77a6a ("vulkan/render_pass: Pass sample locations to barriers") Reviewed-by: Mike Blumenkrantz Part-of: --- src/vulkan/runtime/vk_render_pass.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/vulkan/runtime/vk_render_pass.c b/src/vulkan/runtime/vk_render_pass.c index 79841678a27..447a80ba8df 100644 --- a/src/vulkan/runtime/vk_render_pass.c +++ b/src/vulkan/runtime/vk_render_pass.c @@ -1991,7 +1991,6 @@ begin_subpass(struct vk_command_buffer *cmd_buffer, VkRenderingInfo rendering = { .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, - .pNext = &subpass->self_dep_info, .renderArea = cmd_buffer->render_area, .layerCount = pass->is_multiview ? 1 : framebuffer->layers, .viewMask = pass->is_multiview ? subpass->view_mask : 0, @@ -2032,6 +2031,11 @@ begin_subpass(struct vk_command_buffer *cmd_buffer, __vk_append_struct(&rendering, &sample_locations_tmp); } + /* Append this one last because it lives in the subpass and we don't want + * to be changed by appending other structures later. + */ + __vk_append_struct(&rendering, (void *)&subpass->self_dep_info); + disp->CmdBeginRendering(vk_command_buffer_to_handle(cmd_buffer), &rendering);