LoginSignup
1
0

More than 5 years have passed since last update.

HLSLをVulkan向けにSPIR-Vへ変換するには

Last updated at Posted at 2017-12-27

この記事にかかれていることは2017年12月24日に調べました。

結論

 DirectXShaderCompilerを使いましょう。SPIR-Vエミッタが実用一歩手前くらいのレベルになっています。
Googleのfork版を追いかけると楽しいです。

導入

 VulkanのシェーダーバイナリはSPIR-V形式です。これはGLSLでシェーダーを記述し、それをSDK同梱のglslang/glslangValidatorを用いることで出力することができます。

 でもみなさん、HLSLでシェーダー書きたいですよね。

 hlsl2glsl, HLSLParser, HLSLcc (Unity版) のような、何らかの形でHLSLをGLSLへ変換する手法には多くの実績があります。しかしながら、生成されたコードにかかる最適化が十分でないケースがあるという問題も残されています。
さらに、これらのソリューションは時代の最先端であるShader Model 6DXILに対応していません。

 その最先端の仕様、つまりShader Model 6のオフィシャルなコンパイラがDirectXShaderCompilerです。

DirectXShaderCompilerの実装

 LLVM/clangの上に実装されており、このことがShader Model 6以降のHLSLの将来性を約束してくれています。そして、従来のHLSLパーサーを書いていたプログラマを泣かせているものでもあります。

SPIR-Vエミッタ

 Googleのエンジニアが中心となってSPIR-Vエミッタを実装しています。リポジトリはこちらです。
成果は本家DirectXShaderCompilerにも随時反映されています。

少し前まではcbufferすら使えない(コンパイルが通らない)状態だったのですが、最近では(私が試した範囲の話ですが)まともに動くようになってきています。

おわりに

 かなり端折りました。

気が向いたら具体的な変換結果を交えたサンプルプログラムを上げます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0