Я просто возился с этим сегодня. Для моих файлов HLSL у меня есть простая схема именования:
*-p.hlsl
для файлов пиксельных шейдеров.
*-v.hlsl
для файлов вершинных шейдеров.
*.hlsl
для общих файлов, предназначенных для включения в шейдерные программы. Я просто использую расширение hlsl
, чтобы оно отображалось с правильной подсветкой синтаксиса HLSL в редакторе.
Вам не нужны пользовательские правила сборки для их компиляции. Кажется, Premake может вывести правильный блок в проекте Visual Studio для использования компилятора шейдера, и тогда такие вещи, как только перекомпиляция измененных файлов (с зависимостями #include), обрабатываются просто отлично. Вот как выглядит мой блок конфигурации:
filter { "files:**.hlsl" }
flags "ExcludeFromBuild"
shadermodel "5.0"
filter { "files:**-p.hlsl" }
removeflags "ExcludeFromBuild"
shadertype "Pixel"
shaderentry "ForPixel"
filter { "files:**-v.hlsl" }
removeflags "ExcludeFromBuild"
shadertype "Vertex"
shaderentry "ForVertex"
filter {}
В основном настраивает шейдерную модель и точки входа для моих файлов (для DirectX 12 вы, вероятно, захотите shadermodel "6.0"
). Затем я могу добавить свои шейдеры в проект через files
:
files { "shaders/**.hlsl"; }
Это все очень новое в premake, так что вы не найдете много документации по нему. Я видел эти варианты здесь: https://github.com/premake/premake-core/blob/master/modules/vstudio/_preload.lua.
Что касается вашего вопроса об экспорте файлов dxasm, есть некоторые другие опции, такие как shaderassembleroutput
и shaderassembler
, последний, я полагаю, является переключателем, который экспортирует код сборки в указанное местоположение, но у меня нет провел какое-либо тестирование, чтобы дать подробный ответ.
К сожалению, я не совсем уверен, как включить отладочную информацию в выходных файлах, так как пока не существует опции предварительного создания. Я копался в документации, чтобы найти какой-либо способ добавить флаг /Zi
(включить символы отладки) для компиляции шейдеров, но я не совсем уверен, возможно ли это.