【问题标题】:Vulkan: `vkFlushMappedMemoryRanges` threading layer error?Vulkan:`vkFlushMappedMemoryRanges` 线程层错误?
【发布时间】:2016-03-03 21:17:42
【问题描述】:

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

【问题讨论】:

  • 你在使用多线程吗?
  • @NicolBolas 应用程序中有多个线程,但只有一个线程调用过 Vulkan 方法。

标签: c++ vulkan


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多