summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2021-12-07 14:33:09 +0100
committerMarge Bot <emma+marge@anholt.net>2021-12-13 10:48:44 +0000
commit841949e50b3a98d0a2b0ad040ed31ba6331f2b2e (patch)
treeea77adb3425b108c0913898cad6333b026528e50
parent43022ecc3af59fef83e1b2aa6212ac305bc694e6 (diff)
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@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.c25
1 files 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);