Vulkan:“vkFlushMappedMemoryRanges”线程层错误

Vulkan: `vkFlushMappedMemoryRanges` threading layer error?

本文关键字:线程 错误 vkFlushMappedMemoryRanges Vulkan      更新时间:2023-10-16

如果映射了整个vkDeviceMemory(通过vkMapMemory)并且没有分配VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,则必须在对缓冲区进行任何修改后进行vkFlushMappedMemoryRanges,以便设备看到写入(根据文档)。

我只是修改大缓冲区的一小部分,因此只想刷新受影响的区域。因此,我创建了多个VkMappedMemoryRange结构,具有不同的offsetsize字段,但指向相同的vkDeviceMemory。这一切似乎都如我所料。无论如何,如果我启用VK_LAYER_LUNARG_threading,我会收到一个错误:

THREADING ERROR : object of type VkDeviceMemory is recursively used in thread 24812

如果我只是使用单个刷新范围而不是数组多次调用vkFlushMappedMemoryRanges,则不会出错。刷新同一缓冲区的多个子范围不是有效的用例吗?

这是来自图层的错误报告。 单个函数调用可以安全地多次引用同一个 vulkan 对象。 较新版本的线程检查层不会报告该错误冲突。 (该图层在最新版本中已重命名为 VK_LAYER_GOOGLE_threading。