Vulkan:“vkFlushMappedMemoryRanges”线程层错误
Vulkan: `vkFlushMappedMemoryRanges` threading layer error?
如果映射了整个vkDeviceMemory
(通过vkMapMemory
)并且没有分配VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
,则必须在对缓冲区进行任何修改后进行vkFlushMappedMemoryRanges
,以便设备看到写入(根据文档)。
我只是修改大缓冲区的一小部分,因此只想刷新受影响的区域。因此,我创建了多个VkMappedMemoryRange
结构,具有不同的offset
和size
字段,但指向相同的vkDeviceMemory
。这一切似乎都如我所料。无论如何,如果我启用VK_LAYER_LUNARG_threading
,我会收到一个错误:
THREADING ERROR : object of type VkDeviceMemory is recursively used in thread 24812
如果我只是使用单个刷新范围而不是数组多次调用vkFlushMappedMemoryRanges
,则不会出错。刷新同一缓冲区的多个子范围不是有效的用例吗?
这是来自图层的错误报告。 单个函数调用可以安全地多次引用同一个 vulkan 对象。 较新版本的线程检查层不会报告该错误冲突。 (该图层在最新版本中已重命名为 VK_LAYER_GOOGLE_threading。