About Social Code
aboutsummaryrefslogtreecommitdiff
path: root/src/kosmickrisp/vulkan/kk_cmd_pool.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kosmickrisp/vulkan/kk_cmd_pool.c')
-rw-r--r--src/kosmickrisp/vulkan/kk_cmd_pool.c64
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);
+}