From 50ca748b6a5bded9a597d7646b80c469dd7ec29a Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Sat, 28 May 2022 11:55:30 +1000 Subject: [PATCH] nvk: add initial descriptor pool framework. destruct has internal impl for create to call on errors later. Part-of: --- src/nouveau/vulkan/nvk_descriptor_set.c | 38 +++++++++++++++++++++++++++++++++ src/nouveau/vulkan/nvk_descriptor_set.h | 6 ++++++ 2 files changed, 44 insertions(+) diff --git a/src/nouveau/vulkan/nvk_descriptor_set.c b/src/nouveau/vulkan/nvk_descriptor_set.c index 73b4bd7..9bc1140 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set.c +++ b/src/nouveau/vulkan/nvk_descriptor_set.c @@ -2,6 +2,7 @@ #include "nvk_buffer.h" #include "nvk_descriptor_set_layout.h" +#include "nvk_device.h" #include "nvk_image_view.h" #include "nvk_sampler.h" @@ -163,3 +164,40 @@ VKAPI_ATTR void VKAPI_CALL nvk_UpdateDescriptorSets( } } } + +static void +nvk_destroy_descriptor_pool(struct nvk_device *device, const VkAllocationCallbacks *pAllocator, + struct nvk_descriptor_pool *pool) +{ + vk_object_base_finish(&pool->base); + vk_free2(&device->vk.alloc, pAllocator, pool); +} + +VKAPI_ATTR VkResult VKAPI_CALL +nvk_CreateDescriptorPool(VkDevice _device, + const VkDescriptorPoolCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDescriptorPool *pDescriptorPool) +{ + VK_FROM_HANDLE(nvk_device, device, _device); + struct nvk_descriptor_pool *pool; + uint64_t size = sizeof(struct nvk_descriptor_pool); + + pool = vk_zalloc2(&device->vk.alloc, pAllocator, size, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (!pool) + return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); + vk_object_base_init(&device->vk, &pool->base, VK_OBJECT_TYPE_DESCRIPTOR_POOL); + *pDescriptorPool = nvk_descriptor_pool_to_handle(pool); + return VK_SUCCESS; +} + + +VKAPI_ATTR void VKAPI_CALL +nvk_DestroyDescriptorPool(VkDevice _device, VkDescriptorPool _pool, + const VkAllocationCallbacks *pAllocator) +{ + VK_FROM_HANDLE(nvk_device, device, _device); + VK_FROM_HANDLE(nvk_descriptor_pool, pool, _pool); + + nvk_destroy_descriptor_pool(device, pAllocator, pool); +} diff --git a/src/nouveau/vulkan/nvk_descriptor_set.h b/src/nouveau/vulkan/nvk_descriptor_set.h index 5fe38c5..f895ee1 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set.h +++ b/src/nouveau/vulkan/nvk_descriptor_set.h @@ -27,6 +27,12 @@ struct nvk_descriptor_set { void *map; }; +struct nvk_descriptor_pool { + struct vk_object_base base; +}; + +VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_pool, base, VkDescriptorPool, + VK_OBJECT_TYPE_DESCRIPTOR_POOL) VK_DEFINE_HANDLE_CASTS(nvk_descriptor_set, base, VkDescriptorSet, VK_OBJECT_TYPE_DESCRIPTOR_SET) -- 2.7.4