什么是 SPIR-V
请阅读 SPIRV-Guide 获取有关 SPIR-V 的更详细信息 |
SPIR-V 接口和功能
Vulkan 有一个完整的章节定义了 Vulkan 如何与 SPIR-V 着色器进行交互。大多数与 SPIR-V 交互的有效用法发生在着色器编译在一起的管线创建过程中。
SPIR-V 有许多功能,因为它还有 Vulkan 以外的其他目标。要查看 Vulkan 需要支持的功能,可以参考 附录。Vulkan 中的某些扩展和功能只是为了检查是否支持某些 SPIR-V 功能。
编译器
glslang
glslang 是 Khronos 用于 GLSL、HLSL 和 ESSL 的参考前端,也是示例 SPIR-V 生成器。包含一个独立的 glslangValidator
工具,可用于从 GLSL、HLSL 和 ESSL 创建 SPIR-V。
Shaderc
Google 托管的 Vulkan 着色器编译的工具、库和测试集合。它包含 glslc
,它包装了 glslang 和 SPIRV-Tools 中的核心功能。Shaderc 还包含 spvc
,它包装了 SPIRV-Cross 和 SPIRV-Tools 中的核心功能。
Shaderc 将这两个工具构建为独立的命令行工具 (glslc) 以及要链接的库 (libshaderc)。
Clspv
Clspv 是一个原型编译器,用于将 OpenCL C 的子集编译为 SPIR-V,以用作 Vulkan 计算着色器。
工具和生态系统
有一个丰富的工具生态系统可以利用 SPIR-V。Vulkan SDK 概述了为开发人员构建和打包的所有 SPIR-V 工具。
SPIRV-Tools
Khronos SPIRV-Tools 项目提供 C 和 C++ API 以及命令行界面来处理 SPIR-V 模块。有关更多信息,请参阅 SPIRV-Guide。
SPIRV-Cross
Khronos SPIRV-Cross 项目是一个实用的工具和库,用于对 SPIR-V 执行反射并将 SPIR-V 反汇编回所需的高级着色语言。有关更多详细信息,Hans Kristian,SPIR-V Cross 的主要开发人员,就创建 SPIR-V Cross 等工具所需的工作,在 2018 Vulkanised (视频) 和 2019 Vulkanised (视频) 上做了两个精彩的演讲。

SPIRV-LLVM
Khronos SPIRV-LLVM 项目是一个具有 SPIR-V 支持的 LLVM 框架。它旨在包含 LLVM 和 SPIR-V 之间的双向转换器。它还用作基于 LLVM 的面向 SPIR-V 的前端编译器的基础。