gpt4 book ai didi

vulkan - 创建描述符池时真的需要 VkDescriptorPoolSize 结构吗?

转载 作者:行者123 更新时间:2023-12-04 08:41:43 28 4
gpt4 key购买 nike

我正在使用 poolSizeCount == 0 创建描述符池和 pPoolSizes == nullptr而且我仍然可以分配各种数量的任何类型的描述符。 Linux 上没有验证错误,仅在 Windows 上(但代码有效)。
另一种情况:我提供的 VkDescriptorPoolSize 只有 1 个 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,但可以分配更多的 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER 甚至其他类型的描述符(在这种情况下,Linux 和 Windows 上都不会发生错误)。
为什么会这样?

最佳答案

一般而言,超出池限制在技术上并非无效用法:

If a call to vkAllocateDescriptorSets would cause the total number of descriptor sets allocated from the pool to exceed the value of vkDescriptorPoolCreateInfo::maxSets used to create pAllocateInfo->descriptorPool, then the allocation may fail due to lack of space in the descriptor pool. Similarly, the allocation may fail due to lack of space if the call to vkAllocateDescriptorSets would cause the number of any given descriptor type to exceed the sum of all the descriptorCount members of each element of VkDescriptorPoolCreateInfo::pPoolSizes with a member equal to that type.


注意“ may ”这个词的使用,它允许实现失败,但不要求他们这样做。这意味着您应该保持在这些限制范围内,但是如果您超过它们并侥幸逃脱,则没有人会阻止您。
现在,根本不传递大小是违反有效用法的:

poolSizeCount must be greater than 0


适当的层应该捕获这一点。但是在层之外,您只会实现未定义的行为。这可以是“似乎有效”。

关于vulkan - 创建描述符池时真的需要 VkDescriptorPoolSize 结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64535456/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com