Есть ли способ адресации subpassInput в Vulkan?

SubpassInput неявно адресуется фрагментным шейдером. Я хочу обратиться к вводу с моими собственными текстурными координатами. Аналогично текстуре (сэмплер, texCoord)

1 ответ

Решение

Это невозможно. Если вы хотите сэмплировать изображение внутри шейдера, у вас есть (в общем) две возможности:

  1. Вы можете использовать набор дескрипторов с дескриптором типа сэмплированного изображения или сэмплера комбинированного изображения. Таким образом, вы можете обратиться к нему, как вам нравится. Но изображения, которые действуют как вложения внутри прохода рендеринга, не могут использоваться для таких дескрипторов в том же проходе рендеринга, в котором они используются в качестве вложений. Для этого вам нужно закончить проход рендера и начать еще один. Во втором проходе рендеринга вы можете использовать такие изображения и пробовать их из шейдеров.

  2. Если вы хотите использовать изображение в качестве вложения внутри прохода рендеринга и если вы хотите сэмплировать такое изображение в том же проходе рендеринга (но в последующем подпроцессе), вы можете сделать это только с использованием дескриптора входного вложения (subpassInput внутри шейдеров).). Таким образом, вам не нужно заканчивать проход рендеринга и запускать еще один, но вы можете только выбирать местоположение, связанное с координатами шейдера фрагмента.

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

Может быть, есть расширение, которое снимает эти ограничения, но я не читал ни о каком таком расширении. Базовая спецификация допускает только два вышеуказанных варианта.

Другие вопросы по тегам