【问题标题】:Vulkan resource ownership transfer vs VK_SHARING_MODE_CONCURRENT & different queue families performanceVulkan 资源所有权转移与 VK_SHARING_MODE_CONCURRENT 和不同队列系列的性能
【发布时间】:2019-11-13 04:10:17
【问题描述】:

我有一个计算着色器,它产生顶点缓冲区并绘制间接结构,然后用于绘制一些几何图形。

计算着色器不是每帧调用一次,而是每 5-10 帧调用一次。 事实上,我的顶点和绘制间接缓冲区是重复的,所以当我使用 VB1 和 DI1 渲染几何图形时,计算着色器能够写入 VB2 和 DI2,然后交换它们,因此计算和绘图调用可能是独立的。 我还有 2 个队列系列:无所不能和仅计算。

所以,我可以想到 3 种方法来做到这一点:

  1. 仅使用一个带有VK_SHARING_MODE_EXCLUSIVE 缓冲区的无所不能队列
  2. 使用仅计算队列进行计算着色器,使用 VK_SHARING_MODE_EXCLUSIVE 缓冲区和队列之间的所有权转移进行绘图
  3. 使用仅计算队列进行计算着色器,使用 VK_SHARING_MODE_CONCURRENT 缓冲区进行绘图

我想听听您关于使用什么选项以及它们的优缺点的建议。 我对此有一些假设并想知道,我是否正确:

  1. 我认为使用专门用于计算操作的单独系列可能会提高性能
  2. 我认为所有权转移是一项繁重的操作,值得只做一次(比如将资源上传到 gpu 内存时),但不是每 5-10 帧一次
  3. 因此,我认为第 3 个选项将是我的最佳选择

【问题讨论】:

  • this称,CONCURRENT模式禁用了DCC(Delta Color Compression),导致带宽要求更高。

标签: graphics gpu shader vulkan


【解决方案1】:

由于标准有这个明确的警告:

VK_SHARING_MODE_CONCURRENT 可能导致访问缓冲区的性能降低 或图片比VK_SHARING_MODE_EXCLUSIVE.

我会说您应该选择独占模式,除非并且直到您的分析数据表明存在性能问题。毕竟,您说过使用缓冲区和跨队列移动缓冲区之间的比率至少为 5:1。因此,您访问缓冲区的频率高于执行队列所有权操作的频率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多