在 Vulkan 中取消映射后是否可以刷新设备内存?

lve*_*lla 5 vulkan

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

起初似乎是错误的,因为该函数被调用vkFlushMappedMemoryRanges(),但文档似乎暗示内存已准备好刷新,即使在未映射之后:

取消映射非一致性内存不会隐式刷新映射的内存,并且未刷新的主机写入可能永远不会对设备可见。但是,实现必须确保未刷新的写入不会对任何其他内存可见。

Nic*_*las 6

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

memory 当前必须映射

因此,如果您取消了内存映射,则无法刷新它。

然而,冲洗确实说:

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

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