Лучшие практики для рендеринга нескольких мешей с помощью vulkan

У меня есть несколько мешей с разными текстурами / конструкциями конвейера, такими как функции проверки глубины / смешивания, для рендеринга с помощью vulkan. Каковы лучшие практики их рендеринга с точки зрения производительности.

  1. Один из вариантов - создать n командных буферов с n потоками для n сеток, между которыми ничего не делится: макет, дескрипторы, сэмплеры или что-то еще. если я пойду с этим, должен ли я использовать n вторичных командных буферов и 1 первичный или все они будут вторичными?

  2. Используйте один и тот же командный буфер для рендеринга n сеток, создания n конвейеров, n буферов для униформ и данных вершин. начать запись буфера команд, а затем в цикле вызвать vkcmdDraw для n сеток с разными конвейерами и буферами. Я могу рендерить с таким подходом. но как мне использовать многопоточность, чтобы сделать это быстрее?

Или любой другой подход?


person debonair    schedule 16.09.2016    source источник
comment
Думаю, пора начинать голосовать за вопросы Vulkan.   -  person Krythic    schedule 16.09.2016
comment
Ну, чтобы использовать с vkQueueSubmit(), должен быть первичный CB   -  person krOoze    schedule 16.09.2016
comment
О каких свойствах мы говорим? Существует различие между конструкциями конвейера (тесты глубины) и данными дескриптора (текстуры). Первый не может использоваться совместно двумя объектами, в то время как последний может быть. Также: если мы собираемся делиться чем-либо между рендерингом двух мешей, тогда нам нужна синхронизация. Зачем вам нужна синхронизация, чтобы делиться чем-либо?   -  person Nicol Bolas    schedule 16.09.2016
comment
@NicolBolas Я обновил вопрос.   -  person debonair    schedule 16.09.2016
comment
@debonair: вы не можете изменять состояние конвейера. После создания объект конвейера становится неизменным. Итак, опять же, не ясно, где такая синхронизация может быть необходима или даже возможна. Возможно, вам будет полезен какой-нибудь псевдокод, объясняющий подходы, которые вы пытаетесь использовать.   -  person Nicol Bolas    schedule 16.09.2016
comment
Вы пробовали рассчитывать время для каждого подхода?   -  person Pablo H    schedule 03.07.2018


Ответы (1)


  1. если мы собираемся делиться чем-то между рендерингом двух мешей, то нам нужна синхронизация.

Вы не делаете; если все, чем вы делитесь, доступно только для чтения, вам не нужна синхронизация. Единственный раз, когда вам нужна синхронизация между сетками, это если одна сетка записывает в память, а другая считывает из нее. Состояние конвейера и прикрепленные цвета синхронизируются реализацией, поэтому вам не нужно об этом беспокоиться.

person ratchet freak    schedule 16.09.2016