From b3388aaca992564b1b244c1df5adb2859a15bd57 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 9 Dec 2016 06:09:52 +0100 Subject: [PATCH] vulkan: Don't limit number of descriptor sets If we need more than we have reserved as maximum, recreate the descriptor pool with a higher maximum. --- gsk/gskvulkanrender.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/gsk/gskvulkanrender.c b/gsk/gskvulkanrender.c index 12b390d195..8c145193b7 100644 --- a/gsk/gskvulkanrender.c +++ b/gsk/gskvulkanrender.c @@ -331,11 +331,38 @@ gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self, needed_sets = g_hash_table_size (self->descriptor_set_indexes); if (needed_sets > self->n_descriptor_sets) { - g_assert (needed_sets < self->descriptor_pool_maxsets); + if (needed_sets > self->descriptor_pool_maxsets) + { + guint added_sets = needed_sets - self->descriptor_pool_maxsets; + added_sets = added_sets + DESCRIPTOR_POOL_MAXSETS_INCREASE - 1; + added_sets -= added_sets % DESCRIPTOR_POOL_MAXSETS_INCREASE; + + vkDestroyDescriptorPool (device, + self->descriptor_pool, + NULL); + self->descriptor_pool_maxsets += added_sets; + GSK_VK_CHECK (vkCreateDescriptorPool, device, + &(VkDescriptorPoolCreateInfo) { + .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, + .maxSets = self->descriptor_pool_maxsets, + .poolSizeCount = 1, + .pPoolSizes = (VkDescriptorPoolSize[1]) { + { + .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + .descriptorCount = 1 + } + } + }, + NULL, + &self->descriptor_pool); + } + else + { + GSK_VK_CHECK (vkResetDescriptorPool, device, + self->descriptor_pool, + 0); + } - GSK_VK_CHECK (vkResetDescriptorPool, device, - self->descriptor_pool, - 0); self->n_descriptor_sets = needed_sets; self->descriptor_sets = g_renew (VkDescriptorSet, self->descriptor_sets, needed_sets);