some list nonsense

This commit is contained in:
Gregory Wells
2025-06-17 12:09:29 -04:00
parent 4a7eb0bcd1
commit 537134742d
2 changed files with 29 additions and 18 deletions

View File

@@ -6,11 +6,20 @@
#include "vulkan_uniform.h" #include "vulkan_uniform.h"
#include "stdio.h" #include "stdio.h"
VkGryphnUniformPool* GetLastUniformPool(VkGryphnUniformPoolArrayList* list) { return &list->data[list->count - 1]; }
gnReturnCode gnCreateUniformPoolFn(gnUniformPool pool, gnDeviceHandle device) { gnReturnCode gnCreateUniformPoolFn(gnUniformPool pool, gnDeviceHandle device) {
pool->uniformPool = malloc(sizeof(struct gnPlatformUniformPool_t)); pool->uniformPool = malloc(sizeof(struct gnPlatformUniformPool_t));
pool->uniformPool->poolCount = 0; pool->uniformPool->pools = VkGryphnUniformPoolArrayListCreate();
// pool->uniformPool->maxPoolCount = 2; {
pool->uniformPool->pools = malloc(sizeof(vkGryphnUniformPool) * pool->uniformPool->maxPoolCount); VkGryphnUniformPool firstPool = {
.pool = VK_NULL_HANDLE,
.layouts = VkDescriptorSetLayoutArrayListCreate()
};
VkGryphnUniformPoolArrayListAdd(&pool->uniformPool->pools, firstPool);
} // scopped because the add function copies and I don't want it lying around
VkGryphnUniformPool* currentPool = GetLastUniformPool(&pool->uniformPool->pools);
VkDescriptorPoolCreateInfo poolInfo = { VkDescriptorPoolCreateInfo poolInfo = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
@@ -22,12 +31,10 @@ gnReturnCode gnCreateUniformPoolFn(gnUniformPool pool, gnDeviceHandle device) {
if (vkCreateDescriptorPool( if (vkCreateDescriptorPool(
pool->device->outputDevice->device, &poolInfo, NULL, pool->device->outputDevice->device, &poolInfo, NULL,
&pool->uniformPool->pools[0].pool &currentPool->pool
) != VK_SUCCESS) ) != VK_SUCCESS)
return GN_FAILED_TO_ALLOCATE_MEMORY; return GN_FAILED_TO_ALLOCATE_MEMORY;
pool->uniformPool->pools[0].layouts = VkDescriptorSetLayoutArrayListCreate();
// if (device->outputDevice->enabledOversizedDescriptorPools == gnTrue) { // if (device->outputDevice->enabledOversizedDescriptorPools == gnTrue) {
// VkDescriptorPoolCreateInfo poolInfo = { // VkDescriptorPoolCreateInfo poolInfo = {
// .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, // .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
@@ -56,21 +63,23 @@ gnReturnCode gnCreateUniformPoolFn(gnUniformPool pool, gnDeviceHandle device) {
} }
gnUniform* gnUniformPoolAllocateUniformsFn(gnUniformPool pool, gnUniformAllocationInfo allocInfo) { gnUniform* gnUniformPoolAllocateUniformsFn(gnUniformPool pool, gnUniformAllocationInfo allocInfo) {
uint32_t startingCount = pool->uniformPool->pools[0].layouts.count; VkGryphnUniformPool* currentPool = GetLastUniformPool(&pool->uniformPool->pools);
VkDescriptorSetLayoutArrayListExpand(&pool->uniformPool->pools[0].layouts, allocInfo.setCount);
uint32_t startingCount = currentPool->layouts.count;
VkDescriptorSetLayoutArrayListExpand(&currentPool->layouts, allocInfo.setCount);
for (int i = 0; i < allocInfo.setCount; i++) { for (int i = 0; i < allocInfo.setCount; i++) {
VkDescriptorSetLayoutArrayListAdd( VkDescriptorSetLayoutArrayListAdd(
&pool->uniformPool->pools[0].layouts, &currentPool->layouts,
vkGryphnCreateSetLayouts(&allocInfo.sets[i], pool->device->outputDevice->device) vkGryphnCreateSetLayouts(&allocInfo.sets[i], pool->device->outputDevice->device)
); );
} }
VkDescriptorSetAllocateInfo vkAllocInfo = { VkDescriptorSetAllocateInfo vkAllocInfo = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
.descriptorPool = pool->uniformPool->pools[0].pool, .descriptorPool = currentPool->pool,
.descriptorSetCount = allocInfo.setCount, .descriptorSetCount = allocInfo.setCount,
.pSetLayouts = &pool->uniformPool->pools[0].layouts.data[startingCount] .pSetLayouts = &currentPool->layouts.data[startingCount]
}; };
VkDescriptorSet* sets = malloc(sizeof(VkDescriptorSet) * allocInfo.setCount); VkDescriptorSet* sets = malloc(sizeof(VkDescriptorSet) * allocInfo.setCount);
@@ -167,8 +176,10 @@ gnUniform* gnUniformPoolAllocateUniformsFn(gnUniformPool pool, gnUniformAllocati
} }
void gnDestroyUniformPoolFn(gnUniformPool pool) { void gnDestroyUniformPoolFn(gnUniformPool pool) {
vkDestroyDescriptorPool(pool->device->outputDevice->device, pool->uniformPool->pools[0].pool, NULL); for (int k = 0; k < pool->uniformPool->pools.count; k++) {
for (int i = 0; i < pool->uniformPool->pools[0].layouts.count; i++) { vkDestroyDescriptorPool(pool->device->outputDevice->device, pool->uniformPool->pools.data[k].pool, NULL);
vkDestroyDescriptorSetLayout(pool->device->outputDevice->device, pool->uniformPool->pools[0].layouts.data[i], NULL); for (int i = 0; i < pool->uniformPool->pools.data[k].layouts.count; i++) {
vkDestroyDescriptorSetLayout(pool->device->outputDevice->device, pool->uniformPool->pools.data[k].layouts.data[i], NULL);
}
} }
} }

View File

@@ -4,12 +4,12 @@
GN_ARRAY_LIST(VkDescriptorSetLayout); GN_ARRAY_LIST(VkDescriptorSetLayout);
typedef struct vkGryphnUniformPool { typedef struct VkGryphnUniformPool {
VkDescriptorPool pool; VkDescriptorPool pool;
VkDescriptorSetLayoutArrayList layouts; VkDescriptorSetLayoutArrayList layouts;
} vkGryphnUniformPool; } VkGryphnUniformPool;
GN_ARRAY_LIST(VkGryphnUniformPool);
struct gnPlatformUniformPool_t { struct gnPlatformUniformPool_t {
uint32_t poolCount, maxPoolCount, currentPool; VkGryphnUniformPoolArrayList pools;
vkGryphnUniformPool* pools;
}; };