diff options
author | Yiwei Zhang <zzyiwei@chromium.org> | 2022-02-15 20:15:57 +0000 |
---|---|---|
committer | Dylan Baker <dylan.c.baker@intel.com> | 2022-02-24 14:56:51 -0800 |
commit | c9215c391adacc35c42a9172cc109463e13b8f49 (patch) | |
tree | cd769c39133e6d4f36a6f1580cd82ea18680adac | |
parent | 53f532bac20b7bd40d8c60225095e98a235cae9a (diff) |
venus: properly destroy deferred ahb image before real image creation
Fixes: 19b7b09885c ("venus: prepare image creation helpers for AHB")
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15037>
(cherry picked from commit 9dd15295e30b3dd5a75440dab05a1eb4019ef1a8)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/virtio/vulkan/vn_image.c | 8 | ||||
-rw-r--r-- | 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 c307f3770f7..63e58a1c5e9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -211,7 +211,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 99cb5e317a5..233667d847d 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 @@ -313,7 +315,9 @@ vn_DestroyImage(VkDevice device, vn_FreeMemory(device, mem_handle, 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 c68114996bd..935272dc53a 100644 --- a/src/virtio/vulkan/vn_image.h +++ b/src/virtio/vulkan/vn_image.h @@ -27,6 +27,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 { |