gpt4 book ai didi

batch-file - 将 GLSL 编译为相应的 Spir V,以便在 Vulkan 应用程序中使用

转载 作者:行者123 更新时间:2023-12-04 01:46:44 26 4
gpt4 key购买 nike

我正在使用来自 github 的 Jonno Robson 的 Vulkan 代码库:Vulkan-Terrain-Generator作为更好地理解 Vulkan 的指南和/或学习引用。我对源代码本身没有任何问题,但我的问题或疑虑与将 GLSL 着色器代码编译成 Spir V 代码有关。我是 SpirV 的编译器和工具包的新手。我尝试同时使用:glslangValidator.exe 和 glslc.exe 将着色器文件转换为 Spir V 文件。

在 Jonno 的代码库中,他将每个 GLSL 着色器文件转换为相应的 spirv 文件。我尝试使用他在他的批处理文件中使用的标志选项,唯一的区别是我用我自己的目录替换了指向他的 glslangValidator.exe 的目录。

我正在尝试实现相同的效果,它会将批处理文件目录中的所有着色器文件从 GLSL 编译到 Spir V,并在其中附加 .spv 到每个新的 SpirV 文件的末尾,在将其从 GLSL 转换为受人尊敬的 Spir V 字节代码后,它将在该目录中生成。

这是我的批处理文件的样子:

编译.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 Toolchain但我仍然不确定如何正确生成所需的批处理文件。

最佳答案

您需要确保为每个文件提供一个输入名称,该示例纯粹使用了 %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 然后我们只需发出命令对于每个文件,直到我们循环遍历每个文件。

您可以阅读有关元变量的更多信息,以及如何在 cmd.exe 执行 for/? 时扩展它们

这里是摘录。

您现在可以使用以下可选语法:

%~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

关于batch-file - 将 GLSL 编译为相应的 Spir V,以便在 Vulkan 应用程序中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58004458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com