VkInvalidateMappedMemoryRanges 用法

问题描述 投票:0回答:1

我无法理解 vkInvalidateMappedMemoryRanges 的用法。

文档说它会使主机的缓存行无效以从主内存读取数据。我的理解是,如果我有由 GPU 更新的映射内存,我不必在第一次访问时调用 vkInvalidateMappedMemoryRanges 从 CPU 端读取,因为我的缓存不会有任何有关数据的信息,但在我第二次访问时我必须调用它来清除缓存中的旧数据?

此外,如果我的内存只是 HOST_VISIBLE 而不是 HOST_CACHED 会发生什么? vkInvalidateMappedMemoryRanges 将尝试使哪个缓存失效? (vkFlushMappedMemoryRange 也是同样的问题)

caching memory-management vulkan invalidation
1个回答
0
投票

我不必在第一次访问时调用 vkInvalidateMappedMemoryRanges 从 CPU 端读取,因为我的缓存不会有任何有关数据的信息

不正确。 Vulkan 内存模型不关心“缓存”等。使映射范围无效会使设备写入对主机可见。如果没有这个或一致的内存,这些写入对主机来说是不可见的。无论这是您第一次访问还是第 20 次访问都没有关系;如果不可见,则主机看不到它们。

“文档”可能指的是缓存等,但定义的行为是基于 Vulkan 内存模型和可用性/可见性操作。对于涉及设备第一次写入内存的这些操作没有特殊情况。

© www.soinside.com 2019 - 2024. All rights reserved.