小编Yaa*_*aaZ的帖子

Vulkan 资源所有权转移与 VK_SHARING_MODE_CONCURRENT 和不同队列系列的性能

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

计算着色器不是每帧调用一次,而是每 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. 因此我认为第三个选项将是我的最佳选择

shader gpu vulkan

4
推荐指数
1
解决办法
719
查看次数

Vulkan 队列的底层硬件映射

Vulkan 旨在为用户提供精简和明确的内容,但队列是此规则的一个很大例外:队列可能由驱动程序复用,并且使用一个系列的多个队列是否会提高性能并不总是很明显。

在驱动程序更新之一之后,我有 2 个仅传输队列而不是一个,但我很确定与仅使用其中一个相比,并行使用它们进行数据流传输没有任何好处(会很高兴被证明是错误的)

那么为什么不直接说“我们有 N 个单独的硬件队列,如果您想并行使用其中的一些队列,只需自己互斥它”?现在看起来没有办法知道,家庭中的独立队列到底有多独立。

gpu vulkan

4
推荐指数
1
解决办法
305
查看次数

Vulkan WaW危害和记忆屏障

Vulkan规范指出:

读取后写入危险仅可以通过执行依赖关系来解决,但是写入后读取和写入后写入危险需要在它们之间包括适当的内存依赖关系。

我认为,WaW也可以仅通过执行障碍来解决。如果我们不打算读取数据,为什么我们需要一个内存屏障来解决WaW危害?

gpu gpu-programming memory-barriers vulkan

3
推荐指数
1
解决办法
68
查看次数

标签 统计

gpu ×3

vulkan ×3

gpu-programming ×1

memory-barriers ×1

shader ×1