Компиляция GLSL для соответствующего Spir V для использования в Приложении Vulkan - PullRequest
2 голосов
/ 19 сентября 2019

Я использую кодовую базу Джонно Робсона Vulkan из github, найденную здесь: Vulkan-Terrain-Generator в качестве руководства или учебного пособия для лучшего понимания Vulkan.У меня нет никаких проблем с самим исходным кодом, но мой вопрос или беспокойство касаются компиляции кодов шейдеров GLSL в код Spir V.Я новичок в SpirV его компиляторы и наборы инструментов.Я попытался использовать оба: glslangValidator.exe и glslc.exe для преобразования файлов шейдеров в файлы Spir V.

В кодовой базе Джонно он преобразовал каждый файл шейдера GLSL в соответствующий файл spirv.Я попытался использовать параметры флага, которые он использовал в своем пакетном файле, с той лишь разницей, что я заменил каталог, который указывает на его glslangValidator.exe, своим собственным каталогом.

Я пытаюсь добиться того же эффекта, когда все шейдерные файлы, находящиеся в каталоге пакетного файла, будут компилироваться из GLSL в Spir V, где он добавит .spv кконец каждого из новых файлов SpirV, которые он сгенерирует в этом каталоге после преобразования его из GLSL в соответствующий байт-код Spir V.

Вот как выглядит мой пакетный файл:

compile.bat

C:\VulkanSDK\Bin\glslangValidator.exe -V %1 -o %1.spv
pause

Однако после двойного щелчка по пакетному файлу у меня это не работает.Он открывается и запускается, но не генерирует ожидаемые файлы shader_filename.vert.spv ... shader_filename.frag.spv.

Я не знаю, на какой платформе они сделали это, но я работаю под управлением Windows 7, и я не знаю, имеет ли это значение для аргументов команд или флагов, которые будут передаваться в пакетных командах.Я не знаю, использовали ли они какой-либо другой набор инструментов в Vulkan SDK или какую-то внешнюю библиотеку или инструмент или что-то еще.

Что я хотел бы сделать с этим пакетным файлом, так это преобразовать всешейдерные файлы помещаются в соответствующие файлы Spir V с помощью самой простой пакетной команды.Я не хочу писать одну и ту же команду снова и снова для каждого файла шейдера, поскольку в этом каталоге более 20 шейдеров.

Как мне добиться этого или каковы правильные аргументы команды для glslangValidator или glslc для создания необходимых файлов SpirV?

Я прочитал документы, найденные здесь: SPIR-VНабор инструментов , но я все еще не уверен, как правильно сгенерировать необходимый командный файл.

1 Ответ

3 голосов
/ 19 сентября 2019

Необходимо убедиться, что вы вводите имя для каждого файла, например, чисто используемый% 1, который затем был выдан как параметр из командной строки, что-то вроде:

mybatch.bat inputfile.frag

Нам нужно изменить егоесли вы планируете просто дважды щелкнуть по нему.Это позволит вам зациклить каждый из файлов, для которых вы хотите сделать это:

@echo off
for %%i in (*.vert *.frag) do "C:\VulkanSDK\Bin\glslangValidator.exe" -V "%%~i" -o "%%~i.spv"

Что нужно сделать, это взять все .vert и .frag и присвоить их метавариабельной переменной %%iзатем просто введите команду для каждого из них, пока мы не зациклим каждый файл.

Вы можете прочитать больше о мета-переменных и их расширении при выполнении for /? из cmd.exe

Здесьявляется выдержкой.

Теперь вы можете использовать следующий необязательный синтаксис:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

Модификаторы можно комбинировать для получения составных результатов:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line
...