Использование одного и того же VkPipeline с несколькими VkRenderPass - PullRequest
0 голосов
/ 24 января 2020

VkGraphicsPipelineCreateInfo ожидает присвоения свойства VkRenderPass .renderPass. Я не очень понимаю, почему конвейер должен быть связан с проходом рендеринга. Я имею в виду, что VkGraphicsPipelineCreateInfo напрямую не "говорит", чтобы воспроизвести связанный с контентом контент, такой как FBO и их вложения. Я могу захотеть использовать один и тот же конвейер с более чем одним проходом рендеринга, как в случае, когда я хочу рендерить один и тот же набор объектов в разных сценах, поэтому мне нужно создать еще один с точно такой же настройкой?

Просто добавьте, что создание VkPipeline с .renderPass = nullptr завершается с ошибкой проверки:

vkCreateGraphicsPipelines: обязательный параметр pCreateInfos [0] .renderPass, указанный как VK_NULL_HANDLE.Invalid VkRenderPass Object 0x0. Vulkan spe c гласит: renderPass должен быть действительным дескриптором VkRenderPass (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID -VkGraphicsPipelineCreateInfo-renderPass-параметр )

1 Ответ

1 голос
/ 24 января 2020

Я имею в виду, что VkGraphicsPipelineCreateInfo напрямую не "разговаривает", чтобы воспроизвести связанный с контентом контент, такой как FBO и их вложения.

Конечно, это так. Как вы думаете, что делает фрагментный шейдер, когда он записывает вложения для прохода рендеринга?

Нужно ли создавать еще один с точно такой же настройкой?

Нет. Согласно спецификации:

"renderPass является дескриптором объекта прохода рендеринга, описывающим среду, в которой будет использоваться конвейер; конвейер должен использоваться только с экземпляром любого прохода рендеринга совместим с предоставленным. Для получения дополнительной информации см. «Совместимость прохода рендеринга».

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

...