Маски доступа не соответствуют переходам макета. Для проходов рендеринга вы не указываете переходы макета явно для вложений. Вместо этого вы определяете в VkAttachmentReference
s, предоставленных для VkSubpassDescription
, какой макет должен быть вложением (ями) для этого подпроцесса. Затем система проходов рендеринга отвечает за вставку соответствующих переходов между различными подпроцессами, полностью зависящими от порядка, в котором она выбирает выполнение подпроходов.
Порядок, который, конечно, определяется зависимостями выполнения подпроцесса. Таким образом, цитата из комментария в примере «Использовать зависимости подпрохода для переходов макета» довольно вводит в заблуждение. Это не зависимости подпроцесса, которые вызывают переходы макета;это система рендеринга. Просто зависимости subpass предоставляют ограничения на то, как проход рендеринга может внедрить переход макета.
Теперь эти ограничения имеют значение, потому что, хотя проходы рендеринга более автоматические, Vulkan по-прежнему Vulkan ,Без явных зависимостей между подпроцессами они могут выполняться в любом порядке. Поэтому, если один подпроцесс собирается использовать продукты рендеринга другого, даже если он просто перезаписывает эти продукты рендеринга, между ними все равно должна быть зависимость.
Маски доступа важны, но не для макетапереходы. Они важны для правильной синхронизации ;они важны для обеспечения того, чтобы исходный подпроход сделал правильные операции видимыми для назначения.
Таким образом, если подпропуск 0 выполняет запись в буферы цвета и глубины, а подпроход 1 заботится только о значениях, записанных вбуфер глубины, зависимость между ними должна только сказать, что он получит доступ к записанной информации о глубине (и, конечно, как он планирует ее прочитать).