У меня есть два фрагментных шейдера (написанных на GLSL), оба с массивом сэмплеров. Другие привязки идентичны, однако массив отличается между двумя размерами:
layout (binding = 2) uniform sampler2D tex[2];
против
layout (binding = 2) uniform sampler2D tex[4];
Я могу создать VkDescriptorSetLayout
с VkDescriptorSetLayoutBinding
соответствующий этому параметру:
VkDescriptorSetLayoutBinding parameter;
memset(¶meter, 0, sizeof(VkDescriptorSetLayoutBinding));
parameter.binding = 2;
parameter.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
parameter.descriptorCount = 4;
parameter.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
// go on to call vkCreateDescriptorSetLayout with this VkDescriptorSetBinding (and others)
Созданный VkDescriptorSetLayout
будет правильно работать для привязки к обоим шейдерам.
Два вопроса:
Является ли единственным следствием неиспользованных дескрипторов, что любой VkDescriptorSet
будет больше, чем необходимо (в случае массива первого шейдера)?
Являются ли дополнительные выделенные дескрипторы большой проблемой производительности и / или памяти?
Задача ещё не решена.
Других решений пока нет …