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

时间:2019-07-02 13:32:26

标签: gpu shader vulkan gpu-programming

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

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

1 个答案:

答案 0 :(得分:2)

由于该标准具有以下明确警告:

  

VK_SHARING_MODE_CONCURRENT 可能会导致对缓冲区的较低性能访问   或图片比VK_SHARING_MODE_EXCLUSIVE

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