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