Mesa (main): panvk: Use vk_command_pool

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 11 08:46:48 UTC 2022


Module: Mesa
Branch: main
Commit: 2a5ae138b4977912eb8df1ac08266ea693c40052
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2a5ae138b4977912eb8df1ac08266ea693c40052

Author: Jason Ekstrand <jason.ekstrand at collabora.com>
Date:   Mon Feb  7 14:23:39 2022 -0600

panvk: Use vk_command_pool

Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
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



More information about the mesa-commit mailing list