Replies: 1 comment 1 reply
-
|
我有点不太清楚该从什么角度回答这个问题。
个人认为这个做法合理,不过一开始不必分配很大的描述符池,可以用类似std::vector的扩容规则的方式封装。 需求不至于过分宽泛的话,可以试着预测描述符的使用频率。 前面的都是废话 其实可以直接不使用descriptor pool,使用descriptor buffer来手动管理描述符的底层数据。 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
最近看到描述符相关内容,有个疑问。如果我的Vulkan程序无法预先知道描述符的使用情况(比如存在一些运行时着色器的动态编译),我应该咋设计Descriptor Pool。



一个简单的想法是先创建一个容量很大的Descriptor Pool,分配不够了就再创建一个,构成Descriptor Pool数组。但是这样做似乎存在木桶效应,因为一个Descriptor Pool中只要某个描述符资源不够,就会导致描述符集分配不出来。池里明明还有描述符却无法充分使用,感觉效率不高。
然后今天看了下Godot的实现,它的策略是每个Descriptor Pool对应一种描述符集Layout。当出现一种新的Layout(或现有描述符池满了)时,创建对应的Descriptor Pool,并使其中包含足以分配64个描述符集的资源。这样可以避免之前提到的木桶效应。
但是感觉也不是很完美,如果某种Layout只分配一个描述符集,就有63倍的资源是浪费的。而且Descriptor Pool的数量很多,池化效率不太高的样子。。。
Beta Was this translation helpful? Give feedback.
All reactions