From 6fb9e4e7ff2d7b8a3ecf35a86f6550843e72e9d9 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 7 Feb 2022 14:29:26 -0600 Subject: [PATCH] v3dv: Use vk_command_pool Reviewed-by: Iago Toral Quiroga Part-of: --- src/broadcom/vulkan/v3dv_cmd_buffer.c | 25 ++++++++++++++----------- src/broadcom/vulkan/v3dv_private.h | 6 +++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index 2cbe2b3cbd9..4e561da8399 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -62,15 +62,17 @@ v3dv_CreateCommandPool(VkDevice _device, /* We only support one queue */ assert(pCreateInfo->queueFamilyIndex == 0); - pool = vk_object_zalloc(&device->vk, pAllocator, sizeof(*pool), - VK_OBJECT_TYPE_COMMAND_POOL); + pool = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*pool), 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (pool == NULL) return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); - if (pAllocator) - pool->alloc = *pAllocator; - else - pool->alloc = device->vk.alloc; + VkResult result = vk_command_pool_init(&pool->vk, &device->vk, + pCreateInfo, pAllocator); + if (result != VK_SUCCESS) { + vk_free2(&device->vk.alloc, pAllocator, pool); + return result; + } list_inithead(&pool->cmd_buffers); @@ -116,7 +118,7 @@ cmd_buffer_create(struct v3dv_device *device, { struct v3dv_cmd_buffer *cmd_buffer; cmd_buffer = vk_zalloc2(&device->vk.alloc, - &pool->alloc, + &pool->vk.alloc, sizeof(*cmd_buffer), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); @@ -126,7 +128,7 @@ cmd_buffer_create(struct v3dv_device *device, VkResult result; result = vk_command_buffer_init(&cmd_buffer->vk, &device->vk, level); if (result != VK_SUCCESS) { - vk_free2(&device->vk.alloc, &pool->alloc, cmd_buffer); + vk_free2(&device->vk.alloc, &pool->vk.alloc, cmd_buffer); return result; } @@ -289,7 +291,7 @@ cmd_buffer_free_resources(struct v3dv_cmd_buffer *cmd_buffer) v3dv_job_destroy(cmd_buffer->state.job); if (cmd_buffer->state.attachments) - vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.attachments); + vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer->state.attachments); if (cmd_buffer->state.query.end.alloc_count > 0) vk_free(&cmd_buffer->device->vk.alloc, cmd_buffer->state.query.end.states); @@ -314,7 +316,7 @@ cmd_buffer_destroy(struct v3dv_cmd_buffer *cmd_buffer) list_del(&cmd_buffer->pool_link); cmd_buffer_free_resources(cmd_buffer); vk_command_buffer_finish(&cmd_buffer->vk); - vk_free2(&cmd_buffer->device->vk.alloc, &cmd_buffer->pool->alloc, + vk_free2(&cmd_buffer->device->vk.alloc, &cmd_buffer->pool->vk.alloc, cmd_buffer); } @@ -916,7 +918,8 @@ v3dv_DestroyCommandPool(VkDevice _device, cmd_buffer_destroy(cmd_buffer); } - vk_object_free(&device->vk, pAllocator, pool); + vk_command_pool_finish(&pool->vk); + vk_free2(&device->vk.alloc, pAllocator, pool); } VKAPI_ATTR void VKAPI_CALL diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index f9f985f7896..c102ff1ed83 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -46,6 +46,7 @@ #include "vk_util.h" #include "vk_command_buffer.h" +#include "vk_command_pool.h" #include "vk_queue.h" #include @@ -816,9 +817,8 @@ v3dv_do_double_initial_tile_clear(const struct v3dv_frame_tiling *tiling) } struct v3dv_cmd_pool { - struct vk_object_base base; + struct vk_command_pool vk; - VkAllocationCallbacks alloc; struct list_head cmd_buffers; }; @@ -2157,7 +2157,7 @@ VK_DEFINE_HANDLE_CASTS(v3dv_physical_device, vk.base, VkPhysicalDevice, VK_OBJECT_TYPE_PHYSICAL_DEVICE) VK_DEFINE_HANDLE_CASTS(v3dv_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) -VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_cmd_pool, base, VkCommandPool, +VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_cmd_pool, vk.base, VkCommandPool, VK_OBJECT_TYPE_COMMAND_POOL) VK_DEFINE_NONDISP_HANDLE_CASTS(v3dv_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER)