使用 Premake 5 和 Visual Studio 2015 将 GLSL 编译为 SPIR-V

Compiling GLSL to SPIR-V using Premake 5 and Visual Studio 2015

我不想手动将我的 GLSL 着色器编译为 SPIR-V,而是希望 Visual Studio 自动检测对着色器文件的更改,并将 运行 glslangValidator 作为构建步骤。我正在使用 Premake 生成 Visual Studio solution/project.

一个部分有效的解决方案是在 premake5.lua 中声明:

    --prebuildcommands [[for %%i in (..\data\shaders\*) do (..\libs\vulkan\glslangValidator.exe -V -o "%%~dpibin\%%~nxi.spv" %%i)]]

然后 right-click shader in solution explorer -> properties -> General -> Item Type -> Custom Build Tool

这种方法有一些缺点:

我在 premake 文档中能找到的最接近的东西是:Custom Build Commands。我认为这个想法是在着色器文件上使用过滤器并生成构建命令,但我无法让任何东西工作。也许其他人有想法?

我对 Premake 一无所知,但这适用于 Visual Studio:

  1. 将着色器添加到您的项目
  2. 在每个着色器文件的 属性 页面中将 Item Type 设置为 Custom Build Tool
  3. 在为每个着色器文件设置的新出现的 Custom Build Tool 树中:
    1. Command Line 设置为 $(VULKAN_SDK)\Bin32\glslangValidator -V -o $(OutDir)\%(Identity).spv %(Identity)(对于 x32,否则 Bin 对于 x64 主机)
    2. Description 设置为一些不错的东西,例如Compiling vertex shader
    3. 设置Outputs例如$(OutDir)\%(Identity).spv
    4. Link Objects设置为No

现在应该按文件工作,只正确编译修改过的文件,并在干净时删除它们。

尽管我确实更喜欢只向 post-构建步骤添加一个命令的方法(就像您所做的那样):

for %%f in (*.vert *.tesc *.tese *.geom *.frag *.comp) \
   do %VK_SDK_PATH%\Bin\glslangValidator.exe -V -o $(OutDir)\%%f.spv %%f

它的好处是可以通过 属性 Sheet.

轻松添加到新项目中

看来我误解了 premake 文档中的一些内容(感谢 Nicol)。我通过做它来工作:

filter "files:../data/shaders/*"
    buildcommands '"../libs/vulkan/glslangValidator.exe" -V -o "%{file.directory}/bin/%{file.name}.spv" "%{file.relpath}"'
    buildoutputs "%{file.directory}/bin/%{file.name}.spv"

现在我的 Visual Studio 项目设置与 krOoze 的答案相匹配。唯一的缺点是必须为每个新着色器手动设置(或重新生成整个项目)。 Custom Rules 看起来很有趣,但目前仅支持 Visual Studio(它们也不支持同一规则中的多种扩展类型(.frag、.vert、.comp 等))。