对 VkDescriptorPoolCreateInfo.pPoolSizes 的这种理解是否正确?

2024-01-08

在Vulkan中,我知道描述符池用于分配某些布局的描述符集以在着色器中使用,但是在VkDescriptorPoolCreateInfo传递给vkCreateDescriptorPool,有一个字段pPoolSizes它需要一堆包含描述符类型和数字的对象。

该文档似乎有些模糊,但这是否是说给定的描述符池只能在描述符集中分配一定数量的每种类型的描述符?如果是这样,我如何预先确定需要多少?如果用完会发生什么?


您对描述符池的理解是正确的。

如果是这样,我如何预先确定需要多少?

这取决于您和您的应用程序的需求。

如果您的应用程序需要完全灵活和自由,那么您将需要根据需要动态创建描述符池。如果您的应用程序对场景的外观有更多的了解,那么您的应用程序将需要更少的此类操作。

许多严肃的 Vulkan 应用程序试图避免描述符集的数量基于场景中对象的数量。推送常量和/或动态 UBO/SSBO 描述符允许使用不同的每个对象状态,而无需更改描述符本身。许多对象的纹理可以捆绑在一起形成数组纹理,或者根据硬件,形成纹理数组。

在完美的世界中,一种类型的所有网格(例如,蒙皮网格)都可以使用完全一样描述符集,使用某些每个对象的状态来获取该对象的正确矩阵/纹理数据。

但这就是他们渲染的方式。此类应用程序可以严格控制它们呈现的对象类型、每个对象的数据是什么样子等等。其他应用程序可能有不同的需求。

Vulkan 是一个工具;如何使用它完全取决于您。

如果用完会发生什么?

那么您就无法从该池中分配更多描述符。如果需要分配另一个描述符集,则需要创建另一个池。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 VkDescriptorPoolCreateInfo.pPoolSizes 的这种理解是否正确? 的相关文章

随机推荐