我在试图找出所有的着色语言之间的区别。我正在做一个游戏,在c++与武尔坎目前巫婆的意思(如果我已经正确地阅读),我呈现给Vulkan的每一个着色器必须在spir扩展。
但我有时会看到这个库的用途:https://github.com/KhronosGroup/SPIRV-Cross可以将spir翻译成其他语言(GLSL、HLSL或MSL),当我尝试制作一个游戏时,它会有用吗?不要在不同的平台上使用着色器。
或者我需要这些不同的格式来使用它们或者不同的平台?(这似乎不对,因为vulkan在寻找spir)。尽管如此,我发现有一个工具MoltenVK可以在Mac上使用着色器。这意味着mac不支持vulkan?那么,这些语言的利弊是什么呢?(我的意思是,在创建游戏时,用户不应该修改着色器)
我希望我的问题不要太模糊。
发布于 2022-08-18 18:50:44
您不能将SPIR与诸如GLSL和HLSL这样的高级语言进行比较。那些都是不同的东西。SPIR-V是一种与平台无关的中间表示(即SPIR-V中的"I“),其目的是将Vulkan (作为API)与实际的高级阴影语言(例如GLSL和HLSL)解耦。因此(您已经注意到),Vulkan实现并不真正了解GLSL或HLSL,只能使用SPIR-V着色器。
考虑到这一点,现在你所选择的高级语言(GLSL,HLSL,一些完全不同的东西)几乎没有关系,只要你有一种方法从那种阴影语言生成SPIR-V。对于GLSL,例如使用GLSL参考编译器生成SPIR-V,对于HLSL,可以使用DirectX着色编译器生成SPIR-V。尽管HLSL来自DirectX世界,但它有一个官方支持的SPIR编译器后端,已经准备好生产了。无论您是使用GLSL还是HLSL,基本上都是个人选择。HLSL在商业领域中更常见,因为这种语言比GLSL更现代,有模板之类的东西。但最终选择是你的。
至于MacOS: MoltenVK是一个MacOS/iOS兼容的Vulkan实现在金属之上。因此,所有对Vulkan适用的内容也适用于MoltenVK (在MacOS和iOS上)。因此,对于Windows、Android或Linux,您可以在SPIR-V中提供您的着色器。由于SPIR-V着色器与平台无关,您生成的SPIR-V将在所有支持Vulkan的平台上工作(除非您在着色器中使用特定的扩展,而这些扩展在特定的平台上是不可用的)。
至于SPIR交叉:在编写游戏时,它可能不是你需要的东西。当您决定使用哪种阴影语言,然后使用编译器为该阴影语言生成SPIR-V,您提供给Vulkan您很可能不需要转换从SPIR-V,因为您的所有源着色器都是用一种高级语言编写的。
https://stackoverflow.com/questions/73403116
复制相似问题