panvk: Move the VkCommandPool logic to panvk_cmd_pool.{c,h}

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Reviewed-by: Rebecca Mckeever <rebecca.mckeever@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28170>
This commit is contained in:
Boris Brezillon 2023-12-19 18:20:14 +01:00 committed by Marge Bot
parent 7bf8805e5a
commit afbac1af77
6 changed files with 83 additions and 54 deletions

View file

@ -37,6 +37,7 @@ panvk_entrypoints = custom_target(
libpanvk_files = files(
'panvk_buffer.c',
'panvk_cmd_buffer.c',
'panvk_cmd_pool.c',
'panvk_device.c',
'panvk_device_memory.c',
'panvk_descriptor_set.c',

View file

@ -27,6 +27,7 @@
*/
#include "panvk_buffer.h"
#include "panvk_cmd_pool.h"
#include "panvk_pipeline.h"
#include "panvk_pipeline_layout.h"
#include "panvk_private.h"
@ -363,34 +364,6 @@ panvk_CmdSetStencilReference(VkCommandBuffer commandBuffer,
cmdbuf->state.fs_rsd = 0;
}
VKAPI_ATTR VkResult VKAPI_CALL
panvk_CreateCommandPool(VkDevice _device,
const VkCommandPoolCreateInfo *pCreateInfo,
const VkAllocationCallbacks *pAllocator,
VkCommandPool *pCmdPool)
{
VK_FROM_HANDLE(panvk_device, device, _device);
struct panvk_cmd_pool *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);
VkResult result =
vk_command_pool_init(&device->vk, &pool->vk, pCreateInfo, pAllocator);
if (result != VK_SUCCESS) {
vk_free2(&device->vk.alloc, pAllocator, pool);
return result;
}
panvk_bo_pool_init(&pool->desc_bo_pool);
panvk_bo_pool_init(&pool->varying_bo_pool);
panvk_bo_pool_init(&pool->tls_bo_pool);
*pCmdPool = panvk_cmd_pool_to_handle(pool);
return VK_SUCCESS;
}
void
panvk_cmd_preload_fb_after_batch_split(struct panvk_cmd_buffer *cmdbuf)
{

View file

@ -0,0 +1,57 @@
/*
* Copyright © 2021 Collabora Ltd.
*
* Derived from tu_cmd_buffer.c which is:
* Copyright © 2016 Red Hat.
* Copyright © 2016 Bas Nieuwenhuizen
* Copyright © 2015 Intel Corporation
*
* SPDX-License-Identifier: MIT
*/
#include "panvk_cmd_pool.h"
#include "panvk_private.h"
VKAPI_ATTR VkResult VKAPI_CALL
panvk_CreateCommandPool(VkDevice _device,
const VkCommandPoolCreateInfo *pCreateInfo,
const VkAllocationCallbacks *pAllocator,
VkCommandPool *pCmdPool)
{
VK_FROM_HANDLE(panvk_device, device, _device);
struct panvk_cmd_pool *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);
VkResult result =
vk_command_pool_init(&device->vk, &pool->vk, pCreateInfo, pAllocator);
if (result != VK_SUCCESS) {
vk_free2(&device->vk.alloc, pAllocator, pool);
return result;
}
panvk_bo_pool_init(&pool->desc_bo_pool);
panvk_bo_pool_init(&pool->varying_bo_pool);
panvk_bo_pool_init(&pool->tls_bo_pool);
*pCmdPool = panvk_cmd_pool_to_handle(pool);
return VK_SUCCESS;
}
VKAPI_ATTR void VKAPI_CALL
panvk_DestroyCommandPool(VkDevice _device, VkCommandPool commandPool,
const VkAllocationCallbacks *pAllocator)
{
VK_FROM_HANDLE(panvk_device, device, _device);
VK_FROM_HANDLE(panvk_cmd_pool, pool, commandPool);
vk_command_pool_finish(&pool->vk);
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_free2(&device->vk.alloc, pAllocator, pool);
}

View file

@ -0,0 +1,23 @@
/*
* Copyright © 2021 Collabora Ltd.
* SPDX-License-Identifier: MIT
*/
#ifndef PANVK_CMD_POOL_H
#define PANVK_CMD_POOL_H
#include "vk_command_pool.h"
#include "panvk_mempool.h"
struct panvk_cmd_pool {
struct vk_command_pool vk;
struct panvk_bo_pool desc_bo_pool;
struct panvk_bo_pool varying_bo_pool;
struct panvk_bo_pool tls_bo_pool;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_cmd_pool, vk.base, VkCommandPool,
VK_OBJECT_TYPE_COMMAND_POOL)
#endif

View file

@ -427,13 +427,6 @@ struct panvk_cmd_state {
struct panvk_batch *batch;
};
struct panvk_cmd_pool {
struct vk_command_pool vk;
struct panvk_bo_pool desc_bo_pool;
struct panvk_bo_pool varying_bo_pool;
struct panvk_bo_pool tls_bo_pool;
};
struct panvk_cmd_bind_point_state {
struct panvk_descriptor_state desc_state;
const struct panvk_pipeline *pipeline;
@ -476,9 +469,6 @@ 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, vk.base, VkCommandPool,
VK_OBJECT_TYPE_COMMAND_POOL)
#ifdef PAN_ARCH
#include "panvk_vX_cmd_buffer.h"
#include "panvk_vX_device.h"

View file

@ -29,6 +29,7 @@
#include "genxml/gen_macros.h"
#include "panvk_buffer.h"
#include "panvk_cmd_pool.h"
#include "panvk_event.h"
#include "panvk_image.h"
#include "panvk_image_view.h"
@ -1608,22 +1609,6 @@ panvk_per_arch(BeginCommandBuffer)(VkCommandBuffer commandBuffer,
return VK_SUCCESS;
}
VKAPI_ATTR void VKAPI_CALL
panvk_per_arch(DestroyCommandPool)(VkDevice _device, VkCommandPool commandPool,
const VkAllocationCallbacks *pAllocator)
{
VK_FROM_HANDLE(panvk_device, device, _device);
VK_FROM_HANDLE(panvk_cmd_pool, pool, commandPool);
vk_command_pool_finish(&pool->vk);
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_free2(&device->vk.alloc, pAllocator, pool);
}
VKAPI_ATTR void VKAPI_CALL
panvk_per_arch(CmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x,
uint32_t y, uint32_t z)