C++ “VkDescriptorSetLayout”中未使用的绑定的含义?
我有两个片段着色器(用GLSL编写),都带有一组采样器。其他绑定是相同的,但是,两个绑定之间的数组大小不同:C++ “VkDescriptorSetLayout”中未使用的绑定的含义?,c++,performance,vulkan,C++,Performance,Vulkan,我有两个片段着色器(用GLSL编写),都带有一组采样器。其他绑定是相同的,但是,两个绑定之间的数组大小不同: layout (binding = 2) uniform sampler2D tex[2]; vs 我可以创建一个VkDescriptorSetLayoutBinding与此参数匹配的VkDescriptorSetLayoutBinding: VkDescriptorSetLayoutBinding parameter; memset(¶meter, 0, sizeof
layout (binding = 2) uniform sampler2D tex[2];
vs
我可以创建一个VkDescriptorSetLayoutBinding
与此参数匹配的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
都将大于必要值(对于第一个着色器的数组)?
额外分配的描述符是性能和/或内存方面的大问题吗?为了澄清,您想了解现有描述符与为每个管道提供单独布局的情况之间的潜在差异,是吗?因此,您的问题是,当您已经要更改管道和描述符集时,相对于具有更少管道特定布局所增加的内存,布局更改的成本。@Nicolas是的,没错。
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)