微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

`VkDescriptorSetLayoutBinding::descriptorCount` 指定了什么?

如何解决`VkDescriptorSetLayoutBinding::descriptorCount` 指定了什么?

阅读了文档并环顾四周后,我仍然不清楚。

标题在很大程度上总结了问题,但要问一个更具体的问题:

给定一个具有单一绑定的着色器,它的绑定是:

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 就足够了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。