代码之家  ›  专栏  ›  技术社区  ›  lvella

我可以在vulkan中取消映射后刷新设备内存吗?

  •  3
  • lvella  · 技术社区  · 6 年前

    取消映射后可以刷新内存范围吗?

    一开始似乎是错的,因为函数被调用 vkFlushMappedMemoryRanges() ,但是 the documentation 似乎意味着即使在未映射之后,内存也已准备好刷新:

    取消映射非相干内存不会隐式刷新映射的 内存和未刷新的主机写入可能永远不会 设备可见。但是,实现必须确保 未刷新的写入对任何其他人都不可见 记忆。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Nicol Bolas    6 年前

    的有效使用规则之一 vkFlushMappedMemoryRanges() 所有的 VkMappedMemoryRange 结构必须有效。该结构的有效性规则是:

    memory 必须当前映射

    所以如果你已经取消了内存映射,就不能刷新它。

    不过,法拉盛确实说:

    如果自首次映射或上次刷新以来主机已写入该集合中的任何字节,则刷新该范围中的字节。

    所以很明显,如果你取消映射然后再映射它,你可以刷新它并且仍然看到数据。就我个人而言,我不会指望它。