venus: refactor vn_device_memory_simple_alloc

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13874>
This commit is contained in:
Yiwei Zhang
2021-12-02 23:47:39 +00:00
committed by Marge Bot
parent eb28ac0f88
commit e019780626
+26 -21
View File
@@ -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