如何解决创建描述符池时是否真的需要VkDescriptorPoolSize结构?
我正在使用poolSizeCount == 0
和pPoolSizes == nullptr
创建描述符池,并且我仍然可以分配任意数量的各种类型的描述符。在Linux上没有验证错误,仅在Windows上(但代码有效)。
另一种情况:我只为VkDescriptorPoolSize提供1个VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,但可以分配更多的VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER甚至其他类型的描述符(在这种情况下,Linux和Windows均不会发生错误)。
为什么会这样?
解决方法
通常,超过池限制在技术上不是无效的使用
如果对
vkAllocateDescriptorSets
的调用将导致从池中分配的描述符集总数超过用于创建vkDescriptorPoolCreateInfo::maxSets
的{{1}}的值,则分配可能由于描述符池中空间不足而失败。同样,如果对pAllocateInfo->descriptorPool
的调用将导致任何给定描述符类型的数量超过该对象的所有vkAllocateDescriptorSets
成员之和,则分配可能由于空间不足而失败。descriptorCount
的每个元素都具有与该类型相同的成员。
请注意使用单词“ 可能”,它使实现失败,但又不需要。这意味着您应该保持在这些限制之内,但是如果您超出这些限制并逃之get,没有人会阻止您。
现在, 违反了有效用法,根本不传递任何大小:
VkDescriptorPoolCreateInfo::pPoolSizes
必须大于0
并且适当的层应该抓住这一点。但是在层之外,您只是实现未定义的行为。可以是“似乎可以工作”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。