Mesa (master): venus: add vn_image_create

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat Apr 17 00:50:51 UTC 2021


Module: Mesa
Branch: master
Commit: b7db6598df10a05e061167c0b1319a1044ad9cde
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7db6598df10a05e061167c0b1319a1044ad9cde

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Fri Apr 16 12:26:21 2021 -0700

venus: add vn_image_create

A helper called from vn_CreateImage to allocate and initialize vn_image.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10294>

---

 src/virtio/vulkan/vn_image.c | 52 +++++++++++++++++++++++++++++---------------
 src/virtio/vulkan/vn_image.h |  6 +++++
 2 files changed, 40 insertions(+), 18 deletions(-)

diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c
index 847bde88850..9226ac68be2 100644
--- a/src/virtio/vulkan/vn_image.c
+++ b/src/virtio/vulkan/vn_image.c
@@ -99,6 +99,36 @@ vn_image_init_memory_requirements(struct vn_image *img,
    }
 }
 
+VkResult
+vn_image_create(struct vn_device *dev,
+                const VkImageCreateInfo *create_info,
+                const VkAllocationCallbacks *alloc,
+                struct vn_image **out_img)
+{
+   struct vn_image *img = vk_zalloc(alloc, sizeof(*img), VN_DEFAULT_ALIGN,
+                                    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+   if (!img)
+      return VK_ERROR_OUT_OF_HOST_MEMORY;
+
+   vn_object_base_init(&img->base, VK_OBJECT_TYPE_IMAGE, &dev->base);
+
+   VkDevice dev_handle = vn_device_to_handle(dev);
+   VkImage img_handle = vn_image_to_handle(img);
+   /* TODO async */
+   VkResult result = vn_call_vkCreateImage(dev->instance, dev_handle,
+                                           create_info, NULL, &img_handle);
+   if (result != VK_SUCCESS) {
+      vk_free(alloc, img);
+      return result;
+   }
+
+   vn_image_init_memory_requirements(img, dev, create_info);
+
+   *out_img = img;
+
+   return VK_SUCCESS;
+}
+
 /* image commands */
 
 VkResult
@@ -126,26 +156,12 @@ vn_CreateImage(VkDevice device,
       pCreateInfo = &local_create_info;
    }
 
-   struct vn_image *img = vk_zalloc(alloc, sizeof(*img), VN_DEFAULT_ALIGN,
-                                    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
-   if (!img)
-      return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
-
-   vn_object_base_init(&img->base, VK_OBJECT_TYPE_IMAGE, &dev->base);
-
-   VkImage img_handle = vn_image_to_handle(img);
-   /* TODO async */
-   VkResult result = vn_call_vkCreateImage(dev->instance, device, pCreateInfo,
-                                           NULL, &img_handle);
-   if (result != VK_SUCCESS) {
-      vk_free(alloc, img);
+   struct vn_image *img;
+   VkResult result = vn_image_create(dev, pCreateInfo, alloc, &img);
+   if (result != VK_SUCCESS)
       return vn_error(dev->instance, result);
-   }
-
-   vn_image_init_memory_requirements(img, dev, pCreateInfo);
-
-   *pImage = img_handle;
 
+   *pImage = vn_image_to_handle(img);
    return VK_SUCCESS;
 }
 
diff --git a/src/virtio/vulkan/vn_image.h b/src/virtio/vulkan/vn_image.h
index 2e2c06c2112..46f388dd98a 100644
--- a/src/virtio/vulkan/vn_image.h
+++ b/src/virtio/vulkan/vn_image.h
@@ -48,4 +48,10 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(vn_sampler_ycbcr_conversion,
                                VkSamplerYcbcrConversion,
                                VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION)
 
+VkResult
+vn_image_create(struct vn_device *dev,
+                const VkImageCreateInfo *create_info,
+                const VkAllocationCallbacks *alloc,
+                struct vn_image **out_img);
+
 #endif /* VN_IMAGE_H */



More information about the mesa-commit mailing list