improve vulkan uniform layout generation
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user