2016-03-03 130 views
1

如果整個vkDeviceMemory被映射(通過vkMapMemory),並且它沒有被分配到VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,vkFlushMappedMemoryRanges必須在對緩衝區進行任何修改之後進行,以便設備查看寫入(根據文檔)。Vulkan:`vkFlushMappedMemoryRanges`線程層出錯?

我只修改大型緩衝區的小部分,因此只想刷新受影響的區域。因此,我創建了多個VkMappedMemoryRange結構,其中變化的offsetsize字段,但指向相同vkDeviceMemory。這一切似乎按我的預期工作。 Howevever,如果我能VK_LAYER_LUNARG_threading,我得到一個錯誤:

THREADING ERROR : object of type VkDeviceMemory is recursively used in thread 24812 

如果我不是就叫vkFlushMappedMemoryRanges只有一個單一的沖水範圍多次,而不是一個數組,我沒有得到一個錯誤。沖刷同一緩衝區的多個子範圍不是有效的用例嗎?

+0

您是否使用多個線程? –

+0

@NicolBolas應用程序中有多個線程,但只有一個線程曾調用Vulkan方法。 – MuertoExcobito

回答

2

這是來自圖層的虛假錯誤報告。單個函數調用可以安全地多次引用同一個vulkan對象。較新版本的線程檢查層不會報告錯誤的衝突。 (該層在最新版本中被重命名爲VK_LAYER_GOOGLE_threading。)

+0

是的,這個工作現在在v1.0.5。 – MuertoExcobito