Vulkan:`vkFlushMappedMemoryRanges`线程层错误?

时间:2016-03-03 21:17:42

标签: c++ vulkan

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

1 个答案:

答案 0 :(得分:2)

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