diff options
Diffstat (limited to 'src/kosmickrisp/vulkan/kk_cmd_pool.c')
| -rw-r--r-- | src/kosmickrisp/vulkan/kk_cmd_pool.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/kosmickrisp/vulkan/kk_cmd_pool.c b/src/kosmickrisp/vulkan/kk_cmd_pool.c new file mode 100644 index 00000000000..15e571c9723 --- /dev/null +++ b/src/kosmickrisp/vulkan/kk_cmd_pool.c @@ -0,0 +1,64 @@ +/* + * Copyright © 2022 Collabora Ltd. and Red Hat Inc. + * Copyright 2025 LunarG, Inc. + * Copyright 2025 Google LLC + * SPDX-License-Identifier: MIT + */ + +#include "kk_cmd_pool.h" + +#include "kk_device.h" +#include "kk_entrypoints.h" +#include "kk_physical_device.h" + +VKAPI_ATTR VkResult VKAPI_CALL +kk_CreateCommandPool(VkDevice _device, + const VkCommandPoolCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkCommandPool *pCmdPool) +{ + VK_FROM_HANDLE(kk_device, device, _device); + struct kk_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; + } + + list_inithead(&pool->free_mem); + list_inithead(&pool->free_gart_mem); + + *pCmdPool = kk_cmd_pool_to_handle(pool); + + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL +kk_DestroyCommandPool(VkDevice _device, VkCommandPool commandPool, + const VkAllocationCallbacks *pAllocator) +{ + VK_FROM_HANDLE(kk_device, device, _device); + VK_FROM_HANDLE(kk_cmd_pool, pool, commandPool); + + if (!pool) + return; + + vk_command_pool_finish(&pool->vk); + vk_free2(&device->vk.alloc, pAllocator, pool); +} + +VKAPI_ATTR void VKAPI_CALL +kk_TrimCommandPool(VkDevice device, VkCommandPool commandPool, + VkCommandPoolTrimFlags flags) +{ + VK_FROM_HANDLE(kk_cmd_pool, pool, commandPool); + + vk_command_pool_trim(&pool->vk, flags); +} |