【问题标题】:Difference between Spir-v, GLSL and HLSLSpir-v、GLSL 和 HLSL 的区别
【发布时间】:2022-08-19 02:50:44
【问题描述】:

我试图找出所有着色器语言之间的区别。我正在使用 Vulkan 开发一个 C++ 游戏,目前女巫的意思是(如果我没看错的话)我呈现给 Vulkan 的每个着色器都必须在 spir-v 扩展中。

但我有时会看到这个库的用途:https://github.com/KhronosGroup/SPIRV-Cross 哪个可以将 spir-v 翻译成其他语言(GLSL、HLSL 或 MSL),当我尝试制作游戏时它有用吗?不要在不同平台上的着色器上工作。

或者也许我需要这些不同的格式来使用它们或不同的平台? (这似乎不正确,因为 vulkan 寻找 spir-v)。尽管如此,我看到有一个工具 MoltenVK 可以在 Mac 上使用着色器。这意味着mac不支持正确的vulkan? 那么这些语言的优缺点是什么? (我的意思是在创建游戏时,用户不应该修改着色器)

我希望我的问题不会太模糊。

    标签: glsl shader vulkan hlsl spir-v


    【解决方案1】:

    您无法将 SPIR-V 与 GLSL 和 HLSL 等高级语言进行比较。这些是不同的东西。 SPIR-V 是一种中间表示(即 SPIR-V 中的“I”),旨在将 Vulkan(作为 API)与实际的高级着色语言(例如 GLSL 和 HLSL)分离。因此(如您所述),Vulkan 并不真正了解 GLSL 或 HLSL,只能使用 SPIR-V 着色器。

    考虑到这一点,只要您有一种从该着色语言生成 SPIR-V 的方法,您现在选择哪种高级语言(GLSL、HLSL、完全不同的语言)几乎都无关紧要。对于 GLSL,例如使用 GLSL 参考编译器生成 SPIR-V,对于 HLSL,您可以使用 DirectX Shader Compiler 生成 SPIR-V。尽管 HLSL 来自 DirectX 世界,但它具有官方支持的 SPIR-V 编译器后端,可用于生产。使用 GLSL 还是 HLSL 主要是个人选择。 HLSL 在商业领域更常见,因为该语言比 GLSL 更现代,具有模板之类的功能。但最终的选择是你的。

    至于 SPIR-V cross:写游戏时可能不需要它。当您决定使用哪种着色语言,然后使用该着色语言的编译器生成您提供给 Vulkan 的 SPIR-V 时,您很可能不需要从 SPIR-V 转换回来,因为您的所有源着色器都是用高级语言编写。

    【讨论】:

      最近更新 更多