如果整個vkDeviceMemory
被映射(通過vkMapMemory
),並且它沒有被分配到VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
,vkFlushMappedMemoryRanges
必須在對緩衝區進行任何修改之後進行,以便設備查看寫入(根據文檔)。Vulkan:`vkFlushMappedMemoryRanges`線程層出錯?
我只修改大型緩衝區的小部分,因此只想刷新受影響的區域。因此,我創建了多個VkMappedMemoryRange
結構,其中變化的offset
和size
字段,但指向相同vkDeviceMemory
。這一切似乎按我的預期工作。 Howevever,如果我能VK_LAYER_LUNARG_threading
,我得到一個錯誤:
THREADING ERROR : object of type VkDeviceMemory is recursively used in thread 24812
如果我不是就叫vkFlushMappedMemoryRanges
只有一個單一的沖水範圍多次,而不是一個數組,我沒有得到一個錯誤。沖刷同一緩衝區的多個子範圍不是有效的用例嗎?
您是否使用多個線程? –
@NicolBolas應用程序中有多個線程,但只有一個線程曾調用Vulkan方法。 – MuertoExcobito