improve vulkan uniform layout generation

This commit is contained in:
Greg Wells
2025-07-03 12:07:02 -04:00
parent cfedb49569
commit d9937c2833
3 changed files with 9 additions and 21 deletions

View File

@@ -4,6 +4,7 @@
VkDescriptorType vkGryphnUniformType(gnUniformType type) { VkDescriptorType vkGryphnUniformType(gnUniformType type) {
switch(type) { switch(type) {
case GN_UNIFORM_BUFFER_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; case GN_UNIFORM_BUFFER_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
case GN_SHADER_STORE_BUFFER_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
case GN_IMAGE_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; case GN_IMAGE_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
case GN_UNIFORM_TYPE_MAX: return VK_DESCRIPTOR_TYPE_MAX_ENUM; case GN_UNIFORM_TYPE_MAX: return VK_DESCRIPTOR_TYPE_MAX_ENUM;
} }

View File

@@ -50,40 +50,26 @@ gnUniform* allocateUniforms(gnUniformPool pool, gnUniformAllocationInfo allocInf
}; };
// TODO: redo this, its not warning me IDK why cuz its totally wrong // TODO: redo this, its not warning me IDK why cuz its totally wrong
VkDescriptorPoolSize uniformBufferSize = { VkDescriptorPoolSize poolSizes[GN_UNIFORM_TYPE_MAX];
.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
.descriptorCount = 0
};
VkDescriptorPoolSize imageSize = {
.type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
.descriptorCount = 0
};
for (int i = 0; i < allocInfo.setCount; i++) { for (int i = 0; i < allocInfo.setCount; i++) {
for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) { for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) {
if (allocInfo.sets[i].uniformBindings[c].type == GN_UNIFORM_BUFFER_DESCRIPTOR) uniformBufferSize.descriptorCount++; poolSizes[allocInfo.sets[i].uniformBindings[c].type].descriptorCount++;
if (allocInfo.sets[i].uniformBindings[c].type == GN_IMAGE_DESCRIPTOR) imageSize.descriptorCount++;
} }
} }
uint32_t count = 0; uint32_t count = 0;
VkDescriptorPoolSize poolSizes[2] = {}; VkDescriptorPoolSize realPoolSize[GN_UNIFORM_TYPE_MAX] = {};
if (uniformBufferSize.descriptorCount > 0) { for (int i = 0; i < GN_UNIFORM_TYPE_MAX; i++) {
poolSizes[count] = uniformBufferSize; if (poolSizes[i].descriptorCount <= 0) continue;
count++; realPoolSize[count] = poolSizes[i];
}
if (imageSize.descriptorCount > 0) {
poolSizes[count] = imageSize;
count++; count++;
} }
VkDescriptorPoolCreateInfo poolInfo = { VkDescriptorPoolCreateInfo poolInfo = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
.poolSizeCount = count, .poolSizeCount = count,
.pPoolSizes = poolSizes, .pPoolSizes = realPoolSize,
.maxSets = allocInfo.setCount .maxSets = allocInfo.setCount
}; };

View File

@@ -4,6 +4,7 @@
typedef enum gnUniformType { typedef enum gnUniformType {
GN_UNIFORM_BUFFER_DESCRIPTOR, GN_UNIFORM_BUFFER_DESCRIPTOR,
GN_SHADER_STORE_BUFFER_DESCRIPTOR,
GN_IMAGE_DESCRIPTOR, GN_IMAGE_DESCRIPTOR,
GN_UNIFORM_TYPE_MAX GN_UNIFORM_TYPE_MAX
} gnUniformType; } gnUniformType;