Смысл учебной главы состоит в том, чтобы сказать, что Hello - это не "настоящее" приложение.Привет может иметь бесконечное количество кадров в полете.Но это не то, что могло бы произойти в «реальном» приложении.
Драйверы и слои могут использовать очистку заборов, что подразумевает, что вещи больше не находятся в полете.Если такой синхронизации никогда не будет, метаданные могут накапливаться.
Вы, вероятно, будете часто обновлять данные в «реальном» приложении, что означает, что такая синхронизация будет часто.Также вы будете контролировать задержку, что означает, что у вас не будет N промежуточных буферов (как вы предлагаете) - если предыдущие данные для каждого кадра еще не использовались, то не рекомендуется обновлять новые.Они будут слишком старыми к тому времени, когда их действительно будут использовать.С другой стороны, если это не интерактивное приложение (например, рендеринг фильма), это может иметь смысл.
При этом наличие в кадре фреймов само по себе не является желательной чертой.Тем не менее, желательно, чтобы как GPU, так и CPU были заняты постоянно (при условии, что должна быть выполнена нагрузка).Это означает наличие для каждой работы в очереди, которую она может выбрать, как только она заканчивает свою текущую работу.
Ваши конвейерные барьеры кажутся достаточными для синхронизации storageBuffer
.Хотя в некоторых случаях может быть предпочтительнее использовать выделенную очередь передачи (что будет означать другую схему синхронизации).И вместо этого может быть предпочтительнее использовать эквивалентные зависимости внешнего подпроцесса.
stagingBuffer
необходимо синхронизировать как с доменом хоста, так и с доменом устройства.
Как уже говорилось, может быть ненужно иметь N изstagingBuffer
s.Если вы обновляете новые данные для каждого кадра, старые данные в идеале должны уже обрабатываться (что может быть проверено с помощью ограждения).
Вы определяете stagingBuffer
как связное, поэтому вам не нужно делатьничего на хосте, кроме записи сопоставленного указателя. Если после этого вызывается vkQueueSubmit
, то все эти записи неявно синхронизируются с помощью гарантии порядка записи хоста.
Вы также должны убедиться, что хост не начинает запись памяти, пока устройствовсе еще читает это.Должно быть какое-то Заборное ожидание, прежде чем эти записи.