Mesa (main): venus: refactor vn_device_memory_simple_alloc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sat Dec 4 01:59:42 UTC 2021
Module: Mesa
Branch: main
Commit: e019780626a48d440bb2214d6c8f5e897e7498e1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e019780626a48d440bb2214d6c8f5e897e7498e1
Author: Yiwei Zhang <zzyiwei at chromium.org>
Date: Thu Dec 2 23:47:39 2021 +0000
venus: refactor vn_device_memory_simple_alloc
Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Reviewed-by: Chia-I Wu <olvaffe at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13874>
---
src/virtio/vulkan/vn_device_memory.c | 47 ++++++++++++++++++++----------------
1 file changed, 26 insertions(+), 21 deletions(-)
diff --git a/src/virtio/vulkan/vn_device_memory.c b/src/virtio/vulkan/vn_device_memory.c
index c281794e789..13e754c10a1 100644
--- a/src/virtio/vulkan/vn_device_memory.c
+++ b/src/virtio/vulkan/vn_device_memory.c
@@ -27,20 +27,27 @@ vn_device_memory_simple_alloc(struct vn_device *dev,
VkDeviceSize size,
struct vn_device_memory **out_mem)
{
+ VkDevice dev_handle = vn_device_to_handle(dev);
const VkAllocationCallbacks *alloc = &dev->base.base.alloc;
+ const VkPhysicalDeviceMemoryProperties *mem_props =
+ &dev->physical_device->memory_properties.memoryProperties;
+ const VkMemoryPropertyFlags mem_flags =
+ mem_props->memoryTypes[mem_type_index].propertyFlags;
+ struct vn_device_memory *mem = NULL;
+ VkDeviceMemory mem_handle = VK_NULL_HANDLE;
+ VkResult result;
- struct vn_device_memory *mem =
- vk_zalloc(alloc, sizeof(*mem), VN_DEFAULT_ALIGN,
- VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
+ mem = vk_zalloc(alloc, sizeof(*mem), VN_DEFAULT_ALIGN,
+ VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
if (!mem)
return VK_ERROR_OUT_OF_HOST_MEMORY;
vn_object_base_init(&mem->base, VK_OBJECT_TYPE_DEVICE_MEMORY, &dev->base);
mem->size = size;
- VkDeviceMemory mem_handle = vn_device_memory_to_handle(mem);
- VkResult result = vn_call_vkAllocateMemory(
- dev->instance, vn_device_to_handle(dev),
+ mem_handle = vn_device_memory_to_handle(mem);
+ result = vn_call_vkAllocateMemory(
+ dev->instance, dev_handle,
&(const VkMemoryAllocateInfo){
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
.allocationSize = size,
@@ -48,29 +55,27 @@ vn_device_memory_simple_alloc(struct vn_device *dev,
},
NULL, &mem_handle);
if (result != VK_SUCCESS) {
- vn_object_base_fini(&mem->base);
- vk_free(alloc, mem);
- return result;
+ mem_handle = VK_NULL_HANDLE;
+ goto fail;
}
- const VkPhysicalDeviceMemoryProperties *mem_props =
- &dev->physical_device->memory_properties.memoryProperties;
- const VkMemoryType *mem_type = &mem_props->memoryTypes[mem_type_index];
result = vn_renderer_bo_create_from_device_memory(
- dev->renderer, mem->size, mem->base.id, mem_type->propertyFlags, 0,
- &mem->base_bo);
- if (result != VK_SUCCESS) {
- vn_async_vkFreeMemory(dev->instance, vn_device_to_handle(dev),
- mem_handle, NULL);
- vn_object_base_fini(&mem->base);
- vk_free(alloc, mem);
- return result;
- }
+ dev->renderer, mem->size, mem->base.id, mem_flags, 0, &mem->base_bo);
+ if (result != VK_SUCCESS)
+ goto fail;
+
vn_instance_roundtrip(dev->instance);
*out_mem = mem;
return VK_SUCCESS;
+
+fail:
+ if (mem_handle != VK_NULL_HANDLE)
+ vn_async_vkFreeMemory(dev->instance, dev_handle, mem_handle, NULL);
+ vn_object_base_fini(&mem->base);
+ vk_free(alloc, mem);
+ return result;
}
static void
More information about the mesa-commit
mailing list