Каковы отношения между RenderPass и Pipeline в Вулкане? - PullRequest
2 голосов
/ 05 мая 2019

Какова логическая связь между RenderPass и Pipeline в Vulkan?

Если вы игнорируете RenderPass, сначала я понимаю процесс рендеринга, данные вершин, подготовленные прикладным уровнем, затем данные текстуры могут быть переданы драйверу, а после этого - через различные этапы конвейера, после записи. в Framebuffer вы можете выполнить рендеринг.

Так какова ответственность RenderPass? Это абстракция, предоставляющая метаданные для рендеринга каждого этапа (например, «Формат»), или она играет какую-то другую роль?

Являются ли RenderPass и Pipeline зависимыми от чувств? Например, каждый конвейер принадлежит к подпроходу. Или зависимость, такая как последний вывод конвейера, обрабатывается RenderPass. Или это что-то еще?

1 Ответ

3 голосов
/ 05 мая 2019

В конце концов, Vulkan - это прекрасный современный OO API.Все те объекты в Vulkan имеют практически только те параметры, которые они принимают.Просто говорю это, чтобы облегчить ваше обучение.Вы можете посмотреть на vkCreateX и в значительной степени понять, что VkX делает в Vulkan.

VkPipeline - это контекст GPU.Думайте о GPU как о FPGA (чего нет, но потерпите меня).Выполнение vkCmdBindPipeline установит для GPU заданную конфигурацию шлюза.Кроме GPU не FPGA - в нашем случае он устанавливает GPU в состояние, в котором он может выполнять шейдерные программы и этапы конвейера с фиксированными функциями, определяемые VkPipeline.

VkRenderPass, - это объект, ориентированный на данные,Это обусловлено использованием графических процессоров с мозаичной архитектурой (мобильных графических процессоров).В настольных графических процессорах он все еще может выполнять роль оракула для оптимизации и \ или разрешать частично мозаичную архитектуру (или любую другую архитектуру, которая действительно может это использовать).

Графическим процессорам с мозаичной архитектурой необходимо «загружать» образ\ буфер из оперативной памяти общего назначения в "встроенную память".По завершении они «сохраняют» свои результаты обратно в ОЗУ.

VkRenderPass определяет, какой тип входов (вложений) потребуется.Он определяет, как они загружаются и сохраняются перед соотв.после рендеринга передать экземпляр *.У этого также есть supass.Он определяет синхронизацию между ними (заменяет vkCmdPipelineBarrier s).И определяет тип цели, которую будет заполнять данное вложение прохода рендеринга (например, если это цветной буфер или буфер глубины).

* Экземпляр прохода рендеринга - это объект, созданный из экземпляра прохода рендеринга с помощью vkCmdBeginRenderPass.Да, не путать, верно.

...