手写一个 Shader 虚拟机 (SPVM)

December 3, 2022 之前写了个 C++ 的软件渲染器(详见:手写一个C++软件渲染器),其中的 Shader 部分是将 Shader 逻辑用 C++ 实现,然后静态编译进去的,没法直接执行真正的 Shader 代码(如 GLSL/HLSL 等),因此萌生了写个 Shader 虚拟机的想法,正好 Khronos 推出的 SPIR-V 意在统一 Shader 生态,因此写个 SPIR-V 的虚拟机更合适,于是便有了 SPVM 这个项目: https://github.com/keith2018/spvm 首先看下 Khronos 官方对 SPIR-V 生态的描述 即目前不同的 Shader 语言代码(如 GLSL/HLSL/MSL 等)可以通过工具编译成 SPIR-V 字节码,然后又可以编译回不同的 Shader 语言代码,对于跨平台开发确实是好事,不过目前用的多的估计主要还是 Vulkan。 SPVM 目前只有解释执行模式,基本的用法流程: 将 Shader 代码(如 GLSL)用工具(如 glslangValidator )编译成 SPIR-V 二进制文件 使用Continue reading “手写一个 Shader 虚拟机 (SPVM)”