miy*_*oku 3 shader glsl hlsl vulkan spir-v
我试图找出所有着色器语言之间的差异。我正在使用 Vulkan 用 C++ 开发一款游戏,这意味着(如果我没读错的话)我向 Vulkan 提供的每个着色器都必须采用 spir-v 扩展。
但我有时看到这个库的用途:https://github.com/KhronosGroup/SPIRV-Cross 它可以将 spir-v 翻译为其他语言(GLSL、HLSL 或 MSL),当我尝试时它是否有用做一个游戏?不适用于不同平台上的着色器。
或者也许我需要这些不同的格式来使用它们或不同的平台?(这似乎不正确,因为 vulkan 寻找 spir-v)。尽管如此,我看到有一个工具MoltenVK可以在Mac上使用着色器。这意味着 mac 不能正确支持 vulkan?那么这些语言的优点和缺点是什么?(我的意思是在创建游戏时,用户不应该修改着色器)
我希望我的问题不会太模糊。
您无法将 SPIR-V 与 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 Shader 编译器来生成 SPIR-V。尽管 HLSL 来自 DirectX 世界,但它具有官方支持的 SPIR-V 编译器后端,可用于生产。无论您使用 GLSL 还是 HLSL 主要是个人选择。HLSL 在商业领域更常见,因为这种语言比 GLSL 更现代,具有模板等功能。但最终的选择是你的。
至于 MacOS:MoltenVK 是基于 Metal 的 MacOS/iOS 兼容 Vulkan 实现。因此,适用于 Vulkan 的一切也适用于 MoltenVK(在 MacOS 和 iOS 上)。对于 Windows、Android 或 Linux,您可以在 SPIR-V 中提供着色器。由于 SPIR-V 着色器与平台无关,因此您生成的 SPIR-V 将在支持 Vulkan 的所有平台上运行(除非您在着色器中使用在特定平台上不可用的特定扩展)。
至于 SPIR-V cross:它可能不是你编写游戏时需要的东西。当您决定使用哪种着色语言,然后使用该着色语言的编译器生成提供给 Vulkan 的 SPIR-V 时,您很可能不需要从 SPIR-V 转换回来,因为所有源着色器都是用高级语言编写。
归档时间: |
|
查看次数: |
2719 次 |
最近记录: |