`VkDescriptorSetLayoutBinding::descriptorCount` 指定了什么?
What does `VkDescriptorSetLayoutBinding::descriptorCount` specify?
阅读了文档并四处看了看,我仍然不清楚。
标题大致概括了问题,但要问一个更具体的问题:
给定一个具有单一绑定的着色器,它的绑定是:
layout(binding = 0) buffer Buffer {
uint x[];
};
我知道设置 VkDescriptorSetLayoutBinding::descriptorCount = 1
有效:
VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo = {};
{
VkDescriptorSetLayoutBinding binding = {};
{
binding.binding = 0;
binding.descriptorCount = 1;
binding.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
}
descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
descriptorSetLayoutCreateInfo.bindingCount = 1;
descriptorSetLayoutCreateInfo.pBindings = &binding;
}
在将 VkDescriptorSetLayoutBinding::descriptorCount
更改为 2 或其他一些值时,我需要更改什么?
VkDescriptorSetLayoutBinding::descriptorCount
表示绑定具有的描述符数量(在您的情况下为统一缓冲区)。例如,假设我们有一个缓冲区数组,
layout(binding = 0) buffer Buffers {
uint x[];
} buffers[5];
那么VkDescriptorSetLayoutBinding::descriptorCount
应该等于5,也应该等于VkDescriptorPoolSize::descriptorCount
。
因为你只有一个缓冲区,说明 1 个就够了。
阅读了文档并四处看了看,我仍然不清楚。
标题大致概括了问题,但要问一个更具体的问题:
给定一个具有单一绑定的着色器,它的绑定是:
layout(binding = 0) buffer Buffer {
uint x[];
};
我知道设置 VkDescriptorSetLayoutBinding::descriptorCount = 1
有效:
VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo = {};
{
VkDescriptorSetLayoutBinding binding = {};
{
binding.binding = 0;
binding.descriptorCount = 1;
binding.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
}
descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
descriptorSetLayoutCreateInfo.bindingCount = 1;
descriptorSetLayoutCreateInfo.pBindings = &binding;
}
在将 VkDescriptorSetLayoutBinding::descriptorCount
更改为 2 或其他一些值时,我需要更改什么?
VkDescriptorSetLayoutBinding::descriptorCount
表示绑定具有的描述符数量(在您的情况下为统一缓冲区)。例如,假设我们有一个缓冲区数组,
layout(binding = 0) buffer Buffers {
uint x[];
} buffers[5];
那么VkDescriptorSetLayoutBinding::descriptorCount
应该等于5,也应该等于VkDescriptorPoolSize::descriptorCount
。
因为你只有一个缓冲区,说明 1 个就够了。