Premake5: Как создавать шейдеры HLSL? - PullRequest
2 голосов
/ 08 марта 2019

Я изо всех сил пытаюсь выяснить, как настроить мои шейдеры hlsl для работы с Premake5 и Visual Studio 2017.

Я не знаю, как сказать Premake5 для компиляции моих шейдеров hlsl, как предварительнаяшаг строительства.

Вот мои цели на этом этапе предварительной сборки:

  • Укажите модель шейдера
  • Укажите компиляцию отладки / выпуска
  • Толькоскомпилировать файлы, которые изменились
  • Создать файлы dxasm
  • Поместить полученные * .asms и * .cso в соответствующие папки выпуска / отладки

Обновление 1:Пройдя немного дальше, я обнаружил, что в Premake5 есть buildaction , которая напрямую ссылается на FxCompile .

Обновление 2: благодаря мукунде.Я смог отлично настроить свой проект!Мне пришлось собрать premake5 из исходного кода, чтобы запустить этот скрипт premake.

Поскольку по состоянию на март 2019 г. бинарный дистрибутив не поддерживает модель шейдеров больше 5.

   hf.deactivate_filter()

   files(src_dir.."shaders/*.hlsl")
   shadermodel("6.3")

   shaderassembler("AssemblyCode")

   local shader_dir = _WORKING_DIR.."/"..src_dir.."shaders/%{cfg.buildcfg}/"

   -- HLSL files that don't end with 'Extensions' will be ignored as they will be
   -- used as includes
   filter("files:**.hlsl")
      flags("ExcludeFromBuild")
      shaderobjectfileoutput(shader_dir.."%{file.basename}"..".cso")
      shaderassembleroutput(shader_dir.."%{file.basename}"..".asm")

   filter("files:**_ps.hlsl")
      removeflags("ExcludeFromBuild")
      shadertype("Pixel")

   filter("files:**_vs.hlsl")
      removeflags("ExcludeFromBuild")
      shadertype("Vertex")

   hf.deactivate_filter()

   -- Warnings as errors
   shaderoptions({"/WX"})

Обновление 3: я понял, как обрабатывать параметры командной строки.

1 Ответ

1 голос
/ 08 марта 2019

Я просто возился с этим сегодня. Для моих файлов 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 (включить символы отладки) для компиляции шейдеров, но я не совсем уверен, возможно ли это.

...