Module: Mesa Branch: staging/21.3 Commit: 042447aa402f9cd63e39b10cef35ee9f4c29d612 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=042447aa402f9cd63e39b10cef35ee9f4c29d612
Author: Yiwei Zhang <[email protected]> Date: Tue Feb 15 20:15:57 2022 +0000 venus: properly destroy deferred ahb image before real image creation Fixes: 19b7b09885c ("venus: prepare image creation helpers for AHB") Signed-off-by: Yiwei Zhang <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15037> (cherry picked from commit 9dd15295e30b3dd5a75440dab05a1eb4019ef1a8) --- .pick_status.json | 2 +- src/virtio/vulkan/vn_image.c | 8 ++++++-- src/virtio/vulkan/vn_image.h | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index a26d803f80a..93dedc47c7f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1264,7 +1264,7 @@ "description": "venus: properly destroy deferred ahb image before real image creation", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "19b7b09885c5975535605465ceb58b06c0170148" }, diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c index 88a3c7bce77..e785138a7a1 100644 --- a/src/virtio/vulkan/vn_image.c +++ b/src/virtio/vulkan/vn_image.c @@ -206,7 +206,9 @@ vn_image_init_deferred(struct vn_device *dev, const VkImageCreateInfo *create_info, struct vn_image *img) { - return vn_image_init(dev, create_info, img); + VkResult result = vn_image_init(dev, create_info, img); + img->deferred_info->initialized = result == VK_SUCCESS; + return result; } VkResult @@ -298,7 +300,9 @@ vn_DestroyImage(VkDevice device, if (img->private_memory != VK_NULL_HANDLE) vn_FreeMemory(device, img->private_memory, pAllocator); - vn_async_vkDestroyImage(dev->instance, device, image, NULL); + /* must not ask renderer to destroy uninitialized deferred image */ + if (!img->deferred_info || img->deferred_info->initialized) + vn_async_vkDestroyImage(dev->instance, device, image, NULL); if (img->deferred_info) vk_free(alloc, img->deferred_info); diff --git a/src/virtio/vulkan/vn_image.h b/src/virtio/vulkan/vn_image.h index a61319912cc..4c512685ba5 100644 --- a/src/virtio/vulkan/vn_image.h +++ b/src/virtio/vulkan/vn_image.h @@ -22,6 +22,9 @@ struct vn_image_create_deferred_info { VkImageCreateInfo create; VkImageFormatListCreateInfo list; VkImageStencilUsageCreateInfo stencil; + + /* track whether vn_image_init_deferred succeeds */ + bool initialized; }; struct vn_image {
