From: Benjamin Otte Date: Thu, 8 Jun 2023 04:55:40 +0000 (+0200) Subject: vulkan: Only update descriptor sets with contents X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~173^2~5 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=89f20c2fb646c0637454ed099bd1e10246bee3f0;p=gtk4.git vulkan: Only update descriptor sets with contents If one of the descriptor sets doesn't have any items, don't include it in the sets passed to vkUpdateDescriptorSets(). This has no effect right now, because we either have both images and samplers or neither, but it will become relevant once we also support buffers. --- diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index 0e3d7dfaa4..1ddd1017d1 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -524,6 +524,8 @@ static void gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self) { VkDevice device; + VkWriteDescriptorSet descriptor_sets[3]; + gsize n_descriptor_sets; GList *l; device = gdk_vulkan_context_get_device (self->vulkan); @@ -555,28 +557,36 @@ gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self) }, &self->descriptor_set); + n_descriptor_sets = 0; + if (gsk_descriptor_image_infos_get_size (&self->descriptor_images) > 0) + { + descriptor_sets[n_descriptor_sets++] = (VkWriteDescriptorSet) { + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstSet = self->descriptor_set, + .dstBinding = 0, + .dstArrayElement = 0, + .descriptorCount = gsk_descriptor_image_infos_get_size (&self->descriptor_images), + .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, + .pImageInfo = gsk_descriptor_image_infos_get_data (&self->descriptor_images) + }; + } + + if (gsk_descriptor_image_infos_get_size (&self->descriptor_samplers) > 0) + { + descriptor_sets[n_descriptor_sets++] = (VkWriteDescriptorSet) { + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstSet = self->descriptor_set, + .dstBinding = 1, + .dstArrayElement = 0, + .descriptorCount = gsk_descriptor_image_infos_get_size (&self->descriptor_samplers), + .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER, + .pImageInfo = gsk_descriptor_image_infos_get_data (&self->descriptor_samplers) + }; + } + vkUpdateDescriptorSets (device, - 2, - (VkWriteDescriptorSet[2]) { - { - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = self->descriptor_set, - .dstBinding = 0, - .dstArrayElement = 0, - .descriptorCount = gsk_descriptor_image_infos_get_size (&self->descriptor_images), - .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, - .pImageInfo = gsk_descriptor_image_infos_get_data (&self->descriptor_images) - }, - { - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = self->descriptor_set, - .dstBinding = 1, - .dstArrayElement = 0, - .descriptorCount = gsk_descriptor_image_infos_get_size (&self->descriptor_samplers), - .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER, - .pImageInfo = gsk_descriptor_image_infos_get_data (&self->descriptor_samplers) - } - }, + n_descriptor_sets, + descriptor_sets, 0, NULL); }