Module: Mesa Branch: main Commit: 35a3a6338f11b82927d72c56a58360e19455ba59 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=35a3a6338f11b82927d72c56a58360e19455ba59
Author: Yiwei Zhang <zzyi...@chromium.org> Date: Mon Sep 18 19:18:14 2023 +0000 venus: use common vk_image as vn_image base This change only switches the object base, and is to prepare for using vk_alloc_ahardware_buffer. Large refactor via leveraging existing common vk_image state tracking will be followed. Signed-off-by: Yiwei Zhang <zzyi...@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25184> --- src/virtio/vulkan/vn_common.h | 12 ++++++++++++ src/virtio/vulkan/vn_image.c | 31 +++++++++++-------------------- src/virtio/vulkan/vn_image.h | 4 ++-- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/virtio/vulkan/vn_common.h b/src/virtio/vulkan/vn_common.h index da9a8ae8c18..cc860266143 100644 --- a/src/virtio/vulkan/vn_common.h +++ b/src/virtio/vulkan/vn_common.h @@ -37,6 +37,7 @@ #include "vk_alloc.h" #include "vk_debug_report.h" #include "vk_device.h" +#include "vk_image.h" #include "vk_instance.h" #include "vk_object.h" #include "vk_physical_device.h" @@ -146,6 +147,12 @@ struct vn_queue_base { vn_object_id id; }; +/* base class of vn_image */ +struct vn_image_base { + struct vk_image base; + vn_object_id id; +}; + /* base class of other driver objects */ struct vn_object_base { struct vk_object_base base; @@ -364,6 +371,9 @@ vn_object_set_id(void *obj, vn_object_id id, VkObjectType type) case VK_OBJECT_TYPE_QUEUE: ((struct vn_queue_base *)obj)->id = id; break; + case VK_OBJECT_TYPE_IMAGE: + ((struct vn_image_base *)obj)->id = id; + break; default: ((struct vn_object_base *)obj)->id = id; break; @@ -383,6 +393,8 @@ vn_object_get_id(const void *obj, VkObjectType type) return ((struct vn_device_base *)obj)->id; case VK_OBJECT_TYPE_QUEUE: return ((struct vn_queue_base *)obj)->id; + case VK_OBJECT_TYPE_IMAGE: + return ((struct vn_image_base *)obj)->id; default: return ((struct vn_object_base *)obj)->id; } diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c index 2b71df44319..c8828a83241 100644 --- a/src/virtio/vulkan/vn_image.c +++ b/src/virtio/vulkan/vn_image.c @@ -226,20 +226,16 @@ vn_image_create(struct vn_device *dev, const VkAllocationCallbacks *alloc, struct vn_image **out_img) { - struct vn_image *img = NULL; - VkResult result = VK_SUCCESS; - - img = vk_zalloc(alloc, sizeof(*img), VN_DEFAULT_ALIGN, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + struct vn_image *img = + vk_image_create(&dev->base.base, create_info, alloc, sizeof(*img)); if (!img) return VK_ERROR_OUT_OF_HOST_MEMORY; - vn_object_base_init(&img->base, VK_OBJECT_TYPE_IMAGE, &dev->base); + vn_object_set_id(img, (uintptr_t)img, VK_OBJECT_TYPE_IMAGE); - result = vn_image_init(dev, create_info, img); + VkResult result = vn_image_init(dev, create_info, img); if (result != VK_SUCCESS) { - vn_object_base_fini(&img->base); - vk_free(alloc, img); + vk_image_destroy(&dev->base.base, alloc, &img->base.base); return result; } @@ -264,20 +260,16 @@ vn_image_create_deferred(struct vn_device *dev, const VkAllocationCallbacks *alloc, struct vn_image **out_img) { - struct vn_image *img = NULL; - VkResult result = VK_SUCCESS; - - img = vk_zalloc(alloc, sizeof(*img), VN_DEFAULT_ALIGN, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + struct vn_image *img = + vk_image_create(&dev->base.base, create_info, alloc, sizeof(*img)); if (!img) return VK_ERROR_OUT_OF_HOST_MEMORY; - vn_object_base_init(&img->base, VK_OBJECT_TYPE_IMAGE, &dev->base); + vn_object_set_id(img, (uintptr_t)img, VK_OBJECT_TYPE_IMAGE); - result = vn_image_deferred_info_init(img, create_info, alloc); + VkResult result = vn_image_deferred_info_init(img, create_info, alloc); if (result != VK_SUCCESS) { - vn_object_base_fini(&img->base); - vk_free(alloc, img); + vk_image_destroy(&dev->base.base, alloc, &img->base.base); return result; } @@ -459,8 +451,7 @@ vn_DestroyImage(VkDevice device, vn_image_deferred_info_fini(img, alloc); - vn_object_base_fini(&img->base); - vk_free(alloc, img); + vk_image_destroy(&dev->base.base, alloc, &img->base.base); } void diff --git a/src/virtio/vulkan/vn_image.h b/src/virtio/vulkan/vn_image.h index 8273d03d826..e7059aacd83 100644 --- a/src/virtio/vulkan/vn_image.h +++ b/src/virtio/vulkan/vn_image.h @@ -37,7 +37,7 @@ struct vn_image_create_deferred_info { }; struct vn_image { - struct vn_object_base base; + struct vn_image_base base; VkSharingMode sharing_mode; @@ -67,7 +67,7 @@ struct vn_image { } wsi; }; VK_DEFINE_NONDISP_HANDLE_CASTS(vn_image, - base.base, + base.base.base, VkImage, VK_OBJECT_TYPE_IMAGE)