diff --git a/projects/apis/vulkan/src/uniforms/vulkan_uniform_layout.c b/projects/apis/vulkan/src/uniforms/vulkan_uniform_layout.c index 09a6009..bd325e2 100644 --- a/projects/apis/vulkan/src/uniforms/vulkan_uniform_layout.c +++ b/projects/apis/vulkan/src/uniforms/vulkan_uniform_layout.c @@ -4,6 +4,7 @@ VkDescriptorType vkGryphnUniformType(gnUniformType type) { switch(type) { 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_UNIFORM_TYPE_MAX: return VK_DESCRIPTOR_TYPE_MAX_ENUM; } diff --git a/projects/apis/vulkan/src/uniforms/vulkan_uniform_pool.c b/projects/apis/vulkan/src/uniforms/vulkan_uniform_pool.c index a809ca2..6217454 100644 --- a/projects/apis/vulkan/src/uniforms/vulkan_uniform_pool.c +++ b/projects/apis/vulkan/src/uniforms/vulkan_uniform_pool.c @@ -50,40 +50,26 @@ gnUniform* allocateUniforms(gnUniformPool pool, gnUniformAllocationInfo allocInf }; // TODO: redo this, its not warning me IDK why cuz its totally wrong - VkDescriptorPoolSize uniformBufferSize = { - .type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - .descriptorCount = 0 - }; - - VkDescriptorPoolSize imageSize = { - .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = 0 - }; - + VkDescriptorPoolSize poolSizes[GN_UNIFORM_TYPE_MAX]; for (int i = 0; i < allocInfo.setCount; i++) { for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) { - if (allocInfo.sets[i].uniformBindings[c].type == GN_UNIFORM_BUFFER_DESCRIPTOR) uniformBufferSize.descriptorCount++; - if (allocInfo.sets[i].uniformBindings[c].type == GN_IMAGE_DESCRIPTOR) imageSize.descriptorCount++; + poolSizes[allocInfo.sets[i].uniformBindings[c].type].descriptorCount++; } } uint32_t count = 0; - VkDescriptorPoolSize poolSizes[2] = {}; + VkDescriptorPoolSize realPoolSize[GN_UNIFORM_TYPE_MAX] = {}; - if (uniformBufferSize.descriptorCount > 0) { - poolSizes[count] = uniformBufferSize; - count++; - } - - if (imageSize.descriptorCount > 0) { - poolSizes[count] = imageSize; + for (int i = 0; i < GN_UNIFORM_TYPE_MAX; i++) { + if (poolSizes[i].descriptorCount <= 0) continue; + realPoolSize[count] = poolSizes[i]; count++; } VkDescriptorPoolCreateInfo poolInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .poolSizeCount = count, - .pPoolSizes = poolSizes, + .pPoolSizes = realPoolSize, .maxSets = allocInfo.setCount }; diff --git a/projects/core/src/uniforms/gryphn_uniform_layout.h b/projects/core/src/uniforms/gryphn_uniform_layout.h index d56ff56..f273afa 100644 --- a/projects/core/src/uniforms/gryphn_uniform_layout.h +++ b/projects/core/src/uniforms/gryphn_uniform_layout.h @@ -4,6 +4,7 @@ typedef enum gnUniformType { GN_UNIFORM_BUFFER_DESCRIPTOR, + GN_SHADER_STORE_BUFFER_DESCRIPTOR, GN_IMAGE_DESCRIPTOR, GN_UNIFORM_TYPE_MAX } gnUniformType;