Учебник по Вулкану с помощью glsl-шейдеров - PullRequest
0 голосов
/ 25 ноября 2018

Я скопировал и вставил код в это руководство по Vulkan, чтобы попытаться разобрать его и понять API Vulkan.Однако у меня возникают проблемы с его запуском без ошибок.

Код работает правильно, если я отключаю проверку.Однако, если проверка включена, я получаю:

validation layer: SPIR-V module not valid: Codesize must be a multiple of 4 but is 421. The Vulkan spec states: If pCode points to SPIR-V code, codeSize must be a multiple of 4 (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-VkShaderModuleCreateInfo-pCode-01376

Что, если я правильно понимаю, является одной из проверок проверки LunarSDK.

Так что я думаю, что мне нужно запросить расширение vulkan для обработкиglsl шейдеры вместо Spir-v, но я не уверен, как это сделать, так как я впервые работаю с API и не знаю, какой код я ищу.Я попытался прочитать учебник и документацию, но не могу найти, как это исправить.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вулкан ожидает шейдеры SPIR-V (стандартное портативное промежуточное представление) .Только через расширения реализации Vulkan допускают другие входы для шейдеров.Группа Khronos предоставила компилятор GLSL -> SPIR-V, который вы можете либо встроить в свое приложение и скомпилировать во время выполнения, либо предварительно скомпилировать при сборке и поставке с вашим приложением.Этот компилятор поставляется с LunarGSDK.Использование компилятора glslang описано в Учебном пособии по Vulkan здесь .Вы можете скомпилировать с помощью команды:

/path/to/glsllanvalidator/glslangValidator.exe -V shader.frag

Я считаю, что вы должны использовать правильное расширение файла (.frag, .vert. .Comp и т.д .., которое не использовалось в OpenGL), чтобы компилятор распозналшейдер.Более подробную информацию о автономном компиляторе можно найти здесь .Используя этот метод, вы запустите glslangValidator как часть вашего шага сборки.

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

SPIR-V - это язык низкого уровня, подобный языку, который представлен двоичным файлом, предоставленным драйверу vulkan.Затем драйвер может JIT скомпилировать шейдер , что позволит вам иметь один и тот же код шейдера, независимо от драйвера vulkan.Отличие состоит в том, что драйвер не обязан выполнять все необходимые этапы компиляции, если ему было предоставлено удобочитаемое текстовое представление кода. Драйвер должен понимать только это представление сборки низкого уровня.Это позволяет разработчику использовать любой языковой интерфейс, который компилируется в SPIR-V (который теперь включает HLSL ).Как дополнительное преимущество, это устраняет огромные накладные расходы драйвера, что уменьшает основной источник ошибок для сопровождающего драйвера, и означает, что вам не нужно хранить программы в виде простого текста, который может быть легко извлечен при публикации приложения.,

0 голосов
/ 26 ноября 2018

Чтобы использовать шейдеры GLSL в Vulkan, вам нужно включить и использовать определенное расширение (я не помню его имени, проверю это позже).Но, насколько я знаю, не слишком много поставщиков поддерживают это.Первоначально он был создан Nvidia, но я думаю, что даже они перестали его поддерживать.Ядро Vulkan API поддерживает только шейдеры SPIR-V.Но не сложно конвертировать GLSL в SPIR-V.

...