Во-первых, вы не должны рассматривать любой исходящий документ как единственный вариант использования Vulkan. Есть много способов использовать Vulkan, и это лишь некоторые из них, которые NVIDIA рассматривала в любой презентации.
Таким образом, я пришел к выводу, что использование только первичного буфера лучше, чем использование вторичного буфера, но все сэмплы, похоже, используют вторичный буфер при многопоточном рендеринге.
Показательный пример: эти образцы не делают то же самое, что делает NVIDIA.
Два метода NVIDIA:
Создайте единый полностью статический и неизменный буфер команд. Предположительно, он содержит все, что можно когда-либо отрендерить. Предположительно, вы используете память (косвенный рендеринг, данные UBO и т. Д.), Чтобы контролировать, где они появляются, как рисовать более одного, или чтобы предотвратить их отрисовку вообще.
Создайте единственный полностью статический и неизменный командный буфер для каждого объекта. Предположительно, вы используете память, чтобы контролировать, где они появляются. Затем вы визуализируете эти объекты в первичном командном буфере.
Ни то, ни другое вообще не имеет нити.
Когда люди говорят о многопоточном рендеринге, они имеют в виду потоковое создание командных буферов в цикле рендеринга. # 2 не создает вторичных буферов команд во время цикла рендеринга; они статичны для каждого объекта.
Типичная многопоточная система рендеринга создает вторичные командные буферы, содержащие несколько объектов, которые будут отправлены в первичный командный буфер позже в этом кадре. Каждый поток обрабатывает некоторое количество объектов в свой командный буфер. Вот что делают эти образцы потоковой передачи.
Итак, вы здесь сравниваете яблоки с апельсинами.
Если мне нужно поддерживать несколько очередей, нужно ли мне использовать все несколько очередей? (многопоточность -> создание буфера команд -> отправка нескольких очередей) или использование одной очереди - это нормально?
Используйте все, что вам нужно. Параллельные операции с очередями обычно используются для таких вещей, как передача памяти или сложные вычислительные операции, которые будут работать в следующем кадре. Рендеринг, как правило, должен происходить в определенном порядке. А зависимостями между очередями для отдельных операций рендеринга может быть очень сложно управлять.
Также помните, что Vulkan работает на большом количестве оборудования. В частности, для этого требуется, чтобы оборудование обеспечивало единую очередь. Таким образом, даже если вы занимаетесь программированием с несколькими очередями, вам все равно нужен путь для поддержки систем с одной очередью.
person
Nicol Bolas
schedule
29.07.2016