如果他们不需要同步,障碍有多贵?

时间:2018-02-21 06:57:45

标签: vulkan

我有一个同步host_write -> device_read统一缓冲区的屏障。此屏障位于预先录制的命令缓冲区中,因此基本上每帧执行一次。但是,如果我的统一缓冲区经常不更新(比如投影矩阵)怎么办?是否仍然可以对没有改变的静态数据执行障碍?这有多贵?

2 个答案:

答案 0 :(得分:3)

规范有一个特殊段落,用于将数据直接写入内存(通过映射内存),刷新然后提交命令缓冲区的情况:

  

vkQueueSubmit命令自动保证主机写入   如果是,则刷新到VK_ACCESS_HOST_WRITE_BIT   在执行命令之前刷新,因此在大多数情况下是显式的   这种情况不需要记忆障碍。在少数情况下   主机写入和设备之间不发生提交的位置   读访问,可以使用显式内存使写入可用   屏障。

这意味着在您的情况下,可能不需要显式内存屏障。但是在您只将数据写入内存一次,但多次重复使用该内存的情况下,您可以记录带有内存屏障的命令缓冲区并仅提交一次。然后您可以多次提交其他命令缓冲区,预先记录或不预先记录,并且它们不需要这样的障碍。

一般而言 - 障碍可能会引入等待,因此可能会对性能产生影响。所以这意味着,如果你不需要障碍,你应该避免它。

答案 1 :(得分:2)

  

它有多贵?

据我所知,规范给出了 no 保障屏障省略。所以一般来说,它可能没有任何成本,或者它可能花费正常价格(取决于司机)。