Vulkan: `vkFlushMappedMemoryRanges` ошибка слоя потоков?

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

1

Решение

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]