Vulkan 描述符集池中最大集数的目的是什么?
What is the purpose of the maximum number of sets in a Vulkan descriptor set pool?
在 VkDescriptorPoolCreateInfo
结构中,我们指定 maxSets
字段配置描述符集的最大数量,可以 从给定的池中分配。但是这个最大设置到底在做什么(如果有的话)?
例如,我们可以创建一个简单的应用程序,其中包含一个包含(比方说)三个组合图像采样器和三个统一缓冲区的池,目的是为三重缓冲策略创建三个描述符集(采样器和 UBO)。
但是应用程序 可以 理论上从这个池中分配 0 到 6 个集合之间的任何位置,这取决于分配的描述符集的布局和我们配置 maxSets
的内容.即池不知道将请求什么布局,只知道每种资源类型的可用数量。
那么maxSets
是对硬件的提示吗?还是有其他原因?我查看了文档,但在规范中找不到除此行以外的任何内容:
maxSets is the maximum number of descriptor sets that can be allocated from the pool.
或者 Vulkan 使用它来仔细检查应用程序是否分配了比配置的池大小更多的集合?继续这个例子,我们可以将 maxSets
配置为四个(如果不合逻辑则有效)但是如果我们尝试从池中分配第四个描述符集,分配将无论如何都会失败,因为池已耗尽,所以为什么要配置 属性 那是应用程序的责任?
对池进行限制的目的是能够预先分配做某事或做某事失败所需的资源,至少对用户将从中分配的分配数量有一个固定的限制。目标是,在某些时候,当您从池中请求资源时,系统将不再需要运行时分配资源。
单个描述符会占用某种形式的资源,无论是 CPU、GPU 还是两者。但是将它们捆绑到描述符集中也会占用资源,具体取决于实现方式。因此,如果一个实现可以预先分配一定数量的集合资源,那将有利于最小化运行时分配。
现在,通过提供多个描述符布局并声明您只打算为每个特定布局分配一定数量的集合来定义描述符池可能更有意义。但那将是一个非常受限的描述符池模型。
因此当前的接口在如此严格的模型和只查看描述符而不是集合的模型之间做出了折衷。
在 VkDescriptorPoolCreateInfo
结构中,我们指定 maxSets
字段配置描述符集的最大数量,可以 从给定的池中分配。但是这个最大设置到底在做什么(如果有的话)?
例如,我们可以创建一个简单的应用程序,其中包含一个包含(比方说)三个组合图像采样器和三个统一缓冲区的池,目的是为三重缓冲策略创建三个描述符集(采样器和 UBO)。
但是应用程序 可以 理论上从这个池中分配 0 到 6 个集合之间的任何位置,这取决于分配的描述符集的布局和我们配置 maxSets
的内容.即池不知道将请求什么布局,只知道每种资源类型的可用数量。
那么maxSets
是对硬件的提示吗?还是有其他原因?我查看了文档,但在规范中找不到除此行以外的任何内容:
maxSets is the maximum number of descriptor sets that can be allocated from the pool.
或者 Vulkan 使用它来仔细检查应用程序是否分配了比配置的池大小更多的集合?继续这个例子,我们可以将 maxSets
配置为四个(如果不合逻辑则有效)但是如果我们尝试从池中分配第四个描述符集,分配将无论如何都会失败,因为池已耗尽,所以为什么要配置 属性 那是应用程序的责任?
对池进行限制的目的是能够预先分配做某事或做某事失败所需的资源,至少对用户将从中分配的分配数量有一个固定的限制。目标是,在某些时候,当您从池中请求资源时,系统将不再需要运行时分配资源。
单个描述符会占用某种形式的资源,无论是 CPU、GPU 还是两者。但是将它们捆绑到描述符集中也会占用资源,具体取决于实现方式。因此,如果一个实现可以预先分配一定数量的集合资源,那将有利于最小化运行时分配。
现在,通过提供多个描述符布局并声明您只打算为每个特定布局分配一定数量的集合来定义描述符池可能更有意义。但那将是一个非常受限的描述符池模型。
因此当前的接口在如此严格的模型和只查看描述符而不是集合的模型之间做出了折衷。