1

如果一个整体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多次,我不会收到错误消息。刷新同一缓冲区的多个子范围不是有效的用例吗?

4

1 回答 1

2

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

于 2016-03-14T16:06:22.413 回答