some list nonsense
This commit is contained in:
@@ -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
|
¤tPool->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(¤tPool->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,
|
¤tPool->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 = ¤tPool->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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user