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

YaaZ

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

计算着色器不是每帧调用一次,而是每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. 因此,我认为第三个选择对我来说将是最佳选择
尼科尔·波拉斯(Nicol Bolas)

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

VK_SHARING_MODE_CONCURRENT 可能导致访问缓冲区或映像的性能低于VK_SHARING_MODE_EXCLUSIVE

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章