diff --git a/.pick_status.json b/.pick_status.json index 4c27623c0a4..e5d4461b2f9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -436,7 +436,7 @@ "description": "zink: strip format list when disabling mutable during image creation", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 83283041455..c91ac048736 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -363,11 +363,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;