Module: Mesa Branch: main Commit: 2a5ae138b4977912eb8df1ac08266ea693c40052 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2a5ae138b4977912eb8df1ac08266ea693c40052
Author: Jason Ekstrand <[email protected]> Date: Mon Feb 7 14:23:39 2022 -0600 panvk: Use vk_command_pool Reviewed-by: Boris Brezillon <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14917> --- src/panfrost/vulkan/panvk_cmd_buffer.c | 21 +++++++++++---------- src/panfrost/vulkan/panvk_private.h | 7 +++---- src/panfrost/vulkan/panvk_vX_cmd_buffer.c | 14 ++++++++------ 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/panfrost/vulkan/panvk_cmd_buffer.c b/src/panfrost/vulkan/panvk_cmd_buffer.c index eeb0c7b55cb..27b18d63cf9 100644 --- a/src/panfrost/vulkan/panvk_cmd_buffer.c +++ b/src/panfrost/vulkan/panvk_cmd_buffer.c @@ -296,20 +296,21 @@ panvk_CreateCommandPool(VkDevice _device, VK_FROM_HANDLE(panvk_device, device, _device); struct panvk_cmd_pool *pool; - pool = vk_object_alloc(&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->active_cmd_buffers); list_inithead(&pool->free_cmd_buffers); - pool->queue_family_index = pCreateInfo->queueFamilyIndex; panvk_bo_pool_init(&pool->desc_bo_pool); panvk_bo_pool_init(&pool->varying_bo_pool); panvk_bo_pool_init(&pool->tls_bo_pool); @@ -428,14 +429,14 @@ panvk_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, cmdbuf->state.subpass = pass->subpasses; cmdbuf->state.framebuffer = fb; cmdbuf->state.render_area = pRenderPassBegin->renderArea; - cmdbuf->state.batch = vk_zalloc(&cmdbuf->pool->alloc, + cmdbuf->state.batch = vk_zalloc(&cmdbuf->pool->vk.alloc, sizeof(*cmdbuf->state.batch), 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); util_dynarray_init(&cmdbuf->state.batch->jobs, NULL); util_dynarray_init(&cmdbuf->state.batch->event_ops, NULL); assert(pRenderPassBegin->clearValueCount <= pass->attachment_count); cmdbuf->state.clear = - vk_zalloc(&cmdbuf->pool->alloc, + vk_zalloc(&cmdbuf->pool->vk.alloc, sizeof(*cmdbuf->state.clear) * pass->attachment_count, 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); panvk_cmd_prepare_clear_values(cmdbuf, pRenderPassBegin->pClearValues); @@ -483,7 +484,7 @@ struct panvk_batch * panvk_cmd_open_batch(struct panvk_cmd_buffer *cmdbuf) { assert(!cmdbuf->state.batch); - cmdbuf->state.batch = vk_zalloc(&cmdbuf->pool->alloc, + cmdbuf->state.batch = vk_zalloc(&cmdbuf->pool->vk.alloc, sizeof(*cmdbuf->state.batch), 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); assert(cmdbuf->state.batch); diff --git a/src/panfrost/vulkan/panvk_private.h b/src/panfrost/vulkan/panvk_private.h index ff30420cd68..b230f1b0031 100644 --- a/src/panfrost/vulkan/panvk_private.h +++ b/src/panfrost/vulkan/panvk_private.h @@ -50,6 +50,7 @@ #include "util/macros.h" #include "vk_alloc.h" #include "vk_command_buffer.h" +#include "vk_command_pool.h" #include "vk_device.h" #include "vk_instance.h" #include "vk_log.h" @@ -618,11 +619,9 @@ struct panvk_cmd_state { }; struct panvk_cmd_pool { - struct vk_object_base base; - VkAllocationCallbacks alloc; + struct vk_command_pool vk; struct list_head active_cmd_buffers; struct list_head free_cmd_buffers; - uint32_t queue_family_index; struct panvk_bo_pool desc_bo_pool; struct panvk_bo_pool varying_bo_pool; struct panvk_bo_pool tls_bo_pool; @@ -1005,7 +1004,7 @@ VK_DEFINE_HANDLE_CASTS(panvk_instance, vk.base, VkInstance, VK_OBJECT_TYPE_INSTA VK_DEFINE_HANDLE_CASTS(panvk_physical_device, vk.base, VkPhysicalDevice, VK_OBJECT_TYPE_PHYSICAL_DEVICE) VK_DEFINE_HANDLE_CASTS(panvk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) -VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_cmd_pool, base, VkCommandPool, VK_OBJECT_TYPE_COMMAND_POOL) +VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_cmd_pool, vk.base, VkCommandPool, VK_OBJECT_TYPE_COMMAND_POOL) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer_view, base, VkBufferView, VK_OBJECT_TYPE_BUFFER_VIEW) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_pool, base, VkDescriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL) diff --git a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c index fd4db19fd18..5f47f666680 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c @@ -131,7 +131,7 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf) if (!clear && !batch->scoreboard.first_job) { if (util_dynarray_num_elements(&batch->event_ops, struct panvk_event_op) == 0) { /* Content-less batch, let's drop it */ - vk_free(&cmdbuf->pool->alloc, batch); + vk_free(&cmdbuf->pool->vk.alloc, batch); } else { /* Batch has no jobs but is needed for synchronization, let's add a * NULL job so the SUBMIT ioctl doesn't choke on it. @@ -782,7 +782,7 @@ panvk_per_arch(CmdEndRenderPass2)(VkCommandBuffer commandBuffer, VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); panvk_per_arch(cmd_close_batch)(cmdbuf); - vk_free(&cmdbuf->pool->alloc, cmdbuf->state.clear); + vk_free(&cmdbuf->pool->vk.alloc, cmdbuf->state.clear); cmdbuf->state.batch = NULL; cmdbuf->state.pass = NULL; cmdbuf->state.subpass = NULL; @@ -958,7 +958,7 @@ panvk_reset_cmdbuf(struct panvk_cmd_buffer *cmdbuf) util_dynarray_fini(&batch->event_ops); - vk_free(&cmdbuf->pool->alloc, batch); + vk_free(&cmdbuf->pool->vk.alloc, batch); } panvk_pool_reset(&cmdbuf->desc_pool); @@ -988,7 +988,7 @@ panvk_destroy_cmdbuf(struct panvk_cmd_buffer *cmdbuf) util_dynarray_fini(&batch->event_ops); - vk_free(&cmdbuf->pool->alloc, batch); + vk_free(&cmdbuf->pool->vk.alloc, batch); } panvk_pool_cleanup(&cmdbuf->desc_pool); @@ -1022,7 +1022,7 @@ panvk_create_cmdbuf(struct panvk_device *device, if (pool) { list_addtail(&cmdbuf->pool_link, &pool->active_cmd_buffers); - cmdbuf->queue_family_index = pool->queue_family_index; + cmdbuf->queue_family_index = pool->vk.queue_family_index; } else { /* Init the pool_link so we can safely call list_del when we destroy * the command buffer @@ -1162,7 +1162,9 @@ panvk_per_arch(DestroyCommandPool)(VkDevice _device, panvk_bo_pool_cleanup(&pool->desc_bo_pool); panvk_bo_pool_cleanup(&pool->varying_bo_pool); panvk_bo_pool_cleanup(&pool->tls_bo_pool); - vk_object_free(&device->vk, pAllocator, pool); + + vk_command_pool_finish(&pool->vk); + vk_free2(&device->vk.alloc, pAllocator, pool); } VkResult
