【发布时间】:2016-03-03 21:17:42
【问题描述】:
如果整个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 多次,只使用一个刷新范围,而不是一个数组,我不会收到错误消息。刷新同一缓冲区的多个子范围不是有效用例吗?
【问题讨论】:
-
你在使用多线程吗?
-
@NicolBolas 应用程序中有多个线程,但只有一个线程调用过 Vulkan 方法。