Vulkan: упорядочение барьеров памяти изображений в нескольких командных буферах

Для перехода ресурсов вам нужно знать «до» и «после» VkImageLayout ресурса (например, в VkImageMemoryBarrier перешел к vkCmdPipelineBarrier). Vulkan не гарантирует какой-либо порядок выполнения командных буферов, если это явно не указано в документации API (от этот ответ). Тем не мение, vkCmdPipelineBarrier явно говорит, что создает зависимость между командами в буфере команд до и после вызова. Таким образом, можно «узнать» расположение изображения в любой момент, когда оно перемещается в пределах одного буфера команд.

Тем не мение, vkQueueSumbit не обеспечивает порядок выполнения командных буферов. Если есть два буфера команд, каждый с vkCmdPipelineBarrier вызывает переход одного и того же изображения в разные макеты, есть ли зависимость между этими двумя операциями или требуется явная синхронизация в этой ситуации?

7

Решение

Раздел 2.2.1 говорит:

Границы буфера команд, как между первичными буферами команд одинаковых или разных пакетов или представлений, так и между первичными и вторичными буферами команд, не вводят каких-либо неявных ограничений порядка. Другими словами, отправка набора буферов команд (который может включать выполнение вторичных буферов команд) между любыми операциями семафора или ограждения воспроизводит записанные команды, как если бы они все были записаны в один первичный буфер команд, за исключением того, что текущее состояние сбросить на каждой границе.

В разделе 6.4 говорится, что пары команд для синхронизации включают в себя:

Первый набор: команды перед барьером конвейера.

Второй набор: команды после этого конвейерного барьера в той же очереди (возможно, в пределах одного и того же подпроцесса).

Обратите внимание, что он говорит «в той же очереди», а не «в том же буфере команд».

Оба эти утверждения проясняют, что конвейерные барьеры влияют на выполнение команд в очереди. Зависимости выполнения не ограничиваются командами буфера одной команды.

5

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

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

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