From ff1e667e4536cfb9a73b640e7acd141d82fda735 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 13 Jun 2023 11:35:04 -0400 Subject: [PATCH] zink: strip format list when disabling mutable during image creation drivers shouldn't be getting a format list if it won't be used cc: mesa-stable Part-of: --- src/gallium/drivers/zink/zink_resource.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index c77b38e521c..5bfa228227a 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -461,11 +461,26 @@ double_check_ici(struct zink_screen *screen, VkImageCreateInfo *ici, VkImageUsag if (check_ici(screen, ici, *mod)) return true; if (pNext) { - ici->pNext = NULL; + VkBaseOutStructure *prev = NULL; + VkBaseOutStructure *fmt_list = NULL; + vk_foreach_struct(strct, (void*)ici->pNext) { + if (strct->sType == VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO) { + fmt_list = strct; + if (prev) { + prev->pNext = strct->pNext; + } else { + ici->pNext = strct->pNext; + } + fmt_list->pNext = NULL; + break; + } + prev = strct; + } ici->flags &= ~VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; if (check_ici(screen, ici, *mod)) return true; - ici->pNext = pNext; + fmt_list->pNext = (void*)ici->pNext; + ici->pNext = fmt_list; ici->flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; } return false;