在使用UniformBuffer时更新它有多糟糕?

时间:2019-04-10 09:47:41

标签: vulkan

我需要每帧左右更新一个UniformBuffer(设备本地,着色器中的只读)。我不是专家,但我的理解是我需要:

  • 同步(Fence ...),以确保在使用缓冲区时不要将其写入缓冲区。
  • 写入其他缓冲区/偏移量,更新DescriptorSet,然后重新记录CommandBuffer。

但是,假设我不同步,只是将一些新数据推送到同一缓冲区中的相同位置(偏移量):

情况有多严重?

注意:此问题仅是为了更好地了解Vulkan,但绝对不会传播不良做法。

1 个答案:

答案 0 :(得分:1)

这是不确定的行为:

  

执行和内存依赖关系用于解决数据危害,即确保读写操作以明确定义的顺序发生。读取后写入危险仅可以通过执行依赖关系来解决,但是写入后读取和写入后写入危险需要在它们之间包括适当的内存依赖关系。如果应用程序不包含解决这些危险的依赖项,则内存访问的结果和执行顺序是不确定的。

撇开所有不确定行为的“鼻恶魔”解释,实际上,我认为当您不太幸运地发生写入和读取冲突时,您的渲染中极有可能出现毛刺。在我看来,您不太可能造成当机,但您永远不可能百分百对此充满信心。