オープンソースのシェーダーコンパイラについて調べてみました。
DirectXShaderCompiler
マイクロソフトのDirectX用シェーダーコンパイラ。2017年にオープンソースで公開された。LLVM/Clangを利用。
- 入力 HLSL
- 出力 DXIL
- https://github.com/microsoft/DirectXShaderCompiler
shaderc
GoogleのVulkan用シェーダーコンパイラ
- 入力 GLSL, HLSL
- 出力 SPIR-V
- https://github.com/google/shaderc
Mesa3D
Mesa3D/Mesa に含まれるシェーダーコンパイラ
ACO
AMDのGPU用 Vulveがファンディングします。出力 AMD
nouveau
Nvidiea用
boroadcom
RaspberryPiに搭載されているVideoCore4/6用 出力 VIR
lima
ARM Mali 4xx用
panfrost
ARM Mali Txx Gxx用
etnaviv
Vivante GCxx用
freedreno
Qualcomm Aderno用
zink
Vulkan用
microsoft
DXIL用
クロスコンパイラ
glslang
KhronosのGLSLリファレンス実装
- GLSL/ESSL to AST
- HLSL to AST
- AST to SPIR-V
- https://github.com/KhronosGroup/glslang
clspv
GoogleのOpenCLコンパイラプロトタイプ
- 入力 OpenCL
- 出力 SPIR-V
- https://github.com/google/clspv
Kyte
独自に定義したシェーダー言語 Kyteのコンパイラ
- 入力 Kyte
- 出力 SPIR-V
- https://github.com/MissingBitStudios/kyte
Lava
SLを生成するライブラリ
- 入力 C++
- 出力 SPIR-V, GLSL, ESSL, HLSL
- https://github.com/mknejp/lava
UAM - deko3d shader compiler
Nintendo Switch用シェーダーコンパイラ。
Mesa3D nouveauの派生。
- 入力 GLSL
- 出力 DEKO3D
- https://github.com/devkitPro/uam
コメント
最近はMesa3Dのソースコードを読んだりしています。
シェーダープログラムがどうやってGPUで実行されるかちょっと分かってきました。