【问题标题】:Best practices for rendering multiple meshes with vulkan使用 vulkan 渲染多个网格的最佳实践
【发布时间】:2016-09-16 01:52:06
【问题描述】:

我有多个具有不同纹理/管道构造的网格,例如深度测试/混合功能,以使用 vulkan 进行渲染。在性能方面呈现它们的最佳实践是什么。

  1. 一个选项是为 n 个网格创建 n 个带有 n 个线程的命令缓冲区,它们之间没有任何共享、布局、描述符、采样器或任何东西。如果我这样做,我应该使用 n 个辅助命令缓冲区和 1 个主命令缓冲区还是所有这些缓冲区都是辅助的?

  2. 使用相同的命令缓冲区来渲染 n 个网格,创建 n 个管道,n 个缓冲区用于制服和顶点数据。开始记录命令缓冲区,然后在循环中,为具有不同管道、缓冲区的 n 个网格调用 vkcmdDraw。我可以使用这种方法进行渲染。但是如何使用多线程使其更快?

或者其他方法?

【问题讨论】:

  • 猜猜是时候开始投票支持 Vulkan 问题了。
  • 嗯,一个必须是主要的CB才能与vkQueueSubmit()一起使用
  • 我们在谈论什么样的“属性”?管道构造(深度测试)和描述符数据(纹理)之间存在区别。前者不能在两个对象之间共享,而后者可以。另外:“如果我们要在渲染 2 个网格之间共享任何东西,那么我们需要同步。”为什么需要同步来共享任何东西?
  • @NicolBolas 我更新了问题。
  • @debonair:您不能修改管道状态。一旦创建了管道对象,它就是不可变的。同样,尚不清楚在哪里需要或什至可能进行任何此类同步。也许一些解释您尝试使用的方法的伪代码会有所帮助。

标签: vulkan


【解决方案1】:
  1. 如果我们要在 2 个网格的渲染之间共享任何内容,那么我们需要同步。

你没有;如果您共享的所有内容都是只读的,那么您不需要同步。唯一需要网格之间同步的情况是一个写入内存而另一个网格从中读取。管道的状态和颜色附件由实现同步,因此您不必担心。

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 2014-07-14
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多