diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c index 34ec3b170a9..547ffb49bf7 100644 --- a/src/virtio/vulkan/vn_buffer.c +++ b/src/virtio/vulkan/vn_buffer.c @@ -19,29 +19,30 @@ /* buffer commands */ VkResult -vn_CreateBuffer(VkDevice device, - const VkBufferCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, - VkBuffer *pBuffer) +vn_buffer_create(struct vn_device *dev, + const VkBufferCreateInfo *create_info, + const VkAllocationCallbacks *alloc, + struct vn_buffer **out_buf) { - struct vn_device *dev = vn_device_from_handle(device); - const VkAllocationCallbacks *alloc = - pAllocator ? pAllocator : &dev->base.base.alloc; + VkDevice device = vn_device_to_handle(dev); + struct vn_buffer *buf = NULL; + VkBuffer buffer = VK_NULL_HANDLE; + VkResult result; - struct vn_buffer *buf = vk_zalloc(alloc, sizeof(*buf), VN_DEFAULT_ALIGN, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + buf = vk_zalloc(alloc, sizeof(*buf), VN_DEFAULT_ALIGN, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (!buf) - return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY); + return VK_ERROR_OUT_OF_HOST_MEMORY; vn_object_base_init(&buf->base, VK_OBJECT_TYPE_BUFFER, &dev->base); - VkBuffer buf_handle = vn_buffer_to_handle(buf); + buffer = vn_buffer_to_handle(buf); /* TODO async */ - VkResult result = vn_call_vkCreateBuffer(dev->instance, device, - pCreateInfo, NULL, &buf_handle); + result = vn_call_vkCreateBuffer(dev->instance, device, create_info, NULL, + &buffer); if (result != VK_SUCCESS) { vk_free(alloc, buf); - return vn_error(dev->instance, result); + return result; } /* TODO add a per-device cache for the requirements */ @@ -55,11 +56,33 @@ vn_CreateBuffer(VkDevice device, dev->instance, device, &(VkBufferMemoryRequirementsInfo2){ .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, - .buffer = vn_buffer_to_handle(buf), + .buffer = buffer, }, &buf->memory_requirements); - *pBuffer = buf_handle; + *out_buf = buf; + + return VK_SUCCESS; +} + +VkResult +vn_CreateBuffer(VkDevice device, + const VkBufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkBuffer *pBuffer) +{ + struct vn_device *dev = vn_device_from_handle(device); + const VkAllocationCallbacks *alloc = + pAllocator ? pAllocator : &dev->base.base.alloc; + struct vn_buffer *buf = NULL; + VkResult result; + + result = vn_buffer_create(dev, pCreateInfo, alloc, &buf); + + if (result != VK_SUCCESS) + return vn_error(dev->instance, result); + + *pBuffer = vn_buffer_to_handle(buf); return VK_SUCCESS; } diff --git a/src/virtio/vulkan/vn_buffer.h b/src/virtio/vulkan/vn_buffer.h index 87c67962d61..7cec3b5de0b 100644 --- a/src/virtio/vulkan/vn_buffer.h +++ b/src/virtio/vulkan/vn_buffer.h @@ -32,4 +32,10 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(vn_buffer_view, VkBufferView, VK_OBJECT_TYPE_BUFFER_VIEW) +VkResult +vn_buffer_create(struct vn_device *dev, + const VkBufferCreateInfo *create_info, + const VkAllocationCallbacks *alloc, + struct vn_buffer **out_buf); + #endif /* VN_BUFFER_H */