Vulkan: ошибка "threader layer" vkFlushMappedMemoryRanges? - c++


1

Если вся vkDeviceMemory сопоставлена (через vkMapMemory) и не была назначена VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, vkFlushMappedMemoryRanges должен быть сделан после внесения любых изменений в буфер, чтобы устройство vkFlushMappedMemoryRanges видеть записи (в документации).

Я только модифицирую небольшие разделы большого буфера и, таким образом, хочу только очистить затронутые области. Итак, я создаю несколько структур VkMappedMemoryRange с разными полями offset и size, но указывая на одну и vkDeviceMemory же vkDeviceMemory. Кажется, все это работает так, как я ожидаю. Как бы то ни было, если я VK_LAYER_LUNARG_threading, я получаю сообщение об ошибке:

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

Если я вместо этого просто вызываю vkFlushMappedMemoryRanges несколько раз только с одним диапазоном смыва, а не с массивом, я не получаю ошибку. Является ли промывка нескольких поддиапазонов одного и того же буфера недействительным вариантом использования?

Источник
  •  35
  •  1
  • 21 мар 2020 2020-03-21 03:17:51

1 ответ

2

Это ложный отчет об ошибке на этом уровне. Один вызов функции может смело ссылаться на один и тот же объект вулкана несколько раз. Более новые версии слоя проверки потока не сообщают об этом ложном конфликте. (Этот слой переименован в VK_LAYER_GOOGLE_threading в последних версиях.)