【发布时间】:2016-09-16 01:52:06
【问题描述】:
我有多个具有不同纹理/管道构造的网格,例如深度测试/混合功能,以使用 vulkan 进行渲染。在性能方面呈现它们的最佳实践是什么。
一个选项是为 n 个网格创建 n 个带有 n 个线程的命令缓冲区,它们之间没有任何共享、布局、描述符、采样器或任何东西。如果我这样做,我应该使用 n 个辅助命令缓冲区和 1 个主命令缓冲区还是所有这些缓冲区都是辅助的?
使用相同的命令缓冲区来渲染 n 个网格,创建 n 个管道,n 个缓冲区用于制服和顶点数据。开始记录命令缓冲区,然后在循环中,为具有不同管道、缓冲区的 n 个网格调用 vkcmdDraw。我可以使用这种方法进行渲染。但是如何使用多线程使其更快?
或者其他方法?
【问题讨论】:
-
猜猜是时候开始投票支持 Vulkan 问题了。
-
嗯,一个必须是主要的CB才能与
vkQueueSubmit()一起使用 -
我们在谈论什么样的“属性”?管道构造(深度测试)和描述符数据(纹理)之间存在区别。前者不能在两个对象之间共享,而后者可以。另外:“如果我们要在渲染 2 个网格之间共享任何东西,那么我们需要同步。”为什么需要同步来共享任何东西?
-
@NicolBolas 我更新了问题。
-
@debonair:您不能修改管道状态。一旦创建了管道对象,它就是不可变的。同样,尚不清楚在哪里需要或什至可能进行任何此类同步。也许一些解释您尝试使用的方法的伪代码会有所帮助。
标签: vulkan