From 064e034d5f8c51aa13021f33f058ba243c2dd3b5 Mon Sep 17 00:00:00 2001 From: Roman Stratiienko Date: Sat, 2 Sep 2023 21:01:33 +0300 Subject: [PATCH] v3dv: Migrate to vk_device_memory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It allows the reuse of some generic code, especially AHB logic. Signed-off-by: Roman Stratiienko Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/vulkan/v3dv_device.c | 18 +++++++++++------- src/broadcom/vulkan/v3dv_private.h | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 2cceb9831e0..096d1a9e8e1 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -2325,7 +2325,7 @@ free_memory(struct v3dv_device *device, device_free(device, mem); - vk_object_free(&device->vk, pAllocator, mem); + vk_device_memory_destroy(&device->vk, pAllocator, &mem->vk); } VKAPI_ATTR void VKAPI_CALL @@ -2350,9 +2350,6 @@ v3dv_AllocateMemory(VkDevice _device, assert(pAllocateInfo->sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO); - /* The Vulkan 1.0.33 spec says "allocationSize must be greater than 0". */ - assert(pAllocateInfo->allocationSize > 0); - /* We always allocate device memory in multiples of a page, so round up * requested size to that. */ @@ -2365,8 +2362,8 @@ v3dv_AllocateMemory(VkDevice _device, if (unlikely(heap_used + alloc_size > pdevice->memory.memoryHeaps[0].size)) return vk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY); - mem = vk_object_zalloc(&device->vk, pAllocator, sizeof(*mem), - VK_OBJECT_TYPE_DEVICE_MEMORY); + mem = vk_device_memory_create(&device->vk, pAllocateInfo, + pAllocator, sizeof(*mem)); if (mem == NULL) return vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY); @@ -2406,6 +2403,12 @@ v3dv_AllocateMemory(VkDevice _device, } VkResult result; + + if (mem->vk.ahardware_buffer) { + result = VK_ERROR_FEATURE_NOT_PRESENT; + goto done; + } + if (wsi_info) { result = device_alloc_for_wsi(device, pAllocator, mem, alloc_size); } else if (fd_info && fd_info->handleType) { @@ -2419,8 +2422,9 @@ v3dv_AllocateMemory(VkDevice _device, result = device_alloc(device, mem, alloc_size); } +done: if (result != VK_SUCCESS) { - vk_object_free(&device->vk, pAllocator, mem); + vk_device_memory_destroy(&device->vk, pAllocator, &mem->vk); return vk_error(device, result); } diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 8c83685854e..943be02fb71 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -38,6 +38,7 @@ #include "vk_descriptor_update_template.h" #include "vk_device.h" +#include "vk_device_memory.h" #include "vk_format.h" #include "vk_instance.h" #include "vk_image.h" @@ -597,7 +598,7 @@ struct v3dv_device { }; struct v3dv_device_memory { - struct vk_object_base base; + struct vk_device_memory vk; struct v3dv_bo *bo; const VkMemoryType *type; @@ -2483,7 +2484,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER) VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_buffer_view, base, VkBufferView, VK_OBJECT_TYPE_BUFFER_VIEW) -VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_device_memory, base, VkDeviceMemory, +VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_device_memory, vk.base, VkDeviceMemory, VK_OBJECT_TYPE_DEVICE_MEMORY) VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_descriptor_pool, base, VkDescriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL)