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