From: Yiwei Zhang Date: Mon, 18 Oct 2021 20:17:04 +0000 (+0000) Subject: venus: refactor to add vn_buffer_init X-Git-Tag: upstream/22.3.5~16245 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=34b7d820e2912c6b586f7ae670120eb18aeb45a5;p=platform%2Fupstream%2Fmesa.git venus: refactor to add vn_buffer_init Signed-off-by: Yiwei Zhang Reviewed-by: Chia-I Wu Reviewed-by: Ryan Neph Part-of: --- diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c index 766fb3a..7fd34fb 100644 --- a/src/virtio/vulkan/vn_buffer.c +++ b/src/virtio/vulkan/vn_buffer.c @@ -19,15 +19,44 @@ /* buffer commands */ +static VkResult +vn_buffer_init(struct vn_device *dev, + const VkBufferCreateInfo *create_info, + struct vn_buffer *buf) +{ + VkDevice dev_handle = vn_device_to_handle(dev); + VkBuffer buf_handle = vn_buffer_to_handle(buf); + VkResult result; + + result = vn_call_vkCreateBuffer(dev->instance, dev_handle, create_info, + NULL, &buf_handle); + if (result != VK_SUCCESS) + return result; + + buf->memory_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2; + buf->memory_requirements.pNext = &buf->dedicated_requirements; + buf->dedicated_requirements.sType = + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS; + buf->dedicated_requirements.pNext = NULL; + + vn_call_vkGetBufferMemoryRequirements2( + dev->instance, dev_handle, + &(VkBufferMemoryRequirementsInfo2){ + .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, + .buffer = buf_handle, + }, + &buf->memory_requirements); + + return VK_SUCCESS; +} + VkResult vn_buffer_create(struct vn_device *dev, const VkBufferCreateInfo *create_info, const VkAllocationCallbacks *alloc, struct vn_buffer **out_buf) { - VkDevice device = vn_device_to_handle(dev); struct vn_buffer *buf = NULL; - VkBuffer buffer = VK_NULL_HANDLE; VkResult result; buf = vk_zalloc(alloc, sizeof(*buf), VN_DEFAULT_ALIGN, @@ -37,31 +66,13 @@ vn_buffer_create(struct vn_device *dev, vn_object_base_init(&buf->base, VK_OBJECT_TYPE_BUFFER, &dev->base); - buffer = vn_buffer_to_handle(buf); - /* TODO async */ - result = vn_call_vkCreateBuffer(dev->instance, device, create_info, NULL, - &buffer); + result = vn_buffer_init(dev, create_info, buf); if (result != VK_SUCCESS) { vn_object_base_fini(&buf->base); vk_free(alloc, buf); return result; } - /* TODO add a per-device cache for the requirements */ - buf->memory_requirements.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2; - buf->memory_requirements.pNext = &buf->dedicated_requirements; - buf->dedicated_requirements.sType = - VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS; - buf->dedicated_requirements.pNext = NULL; - - vn_call_vkGetBufferMemoryRequirements2( - dev->instance, device, - &(VkBufferMemoryRequirementsInfo2){ - .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, - .buffer = buffer, - }, - &buf->memory_requirements); - *out_buf = buf; return VK_SUCCESS;