Если сопоставляется весь 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 несколько раз только с одним диапазоном сброса вместо массива, я не получу ошибку. Является ли очистка нескольких поддиапазонов одного и того же буфера недопустимым вариантом использования?