Open4
C-WebGL: シェーダートランスパイラの試作
以前は手でシェーダをVulkan用に書き換えてみた が、これをKhronosのglslangフロントエンドを使ってプログラムでやるようにしてみる。
入力は頂点シェーダとフラグメントシェーダの2ファイルで良いが、出力が多い:
- それぞれのSPIR-V中間表現
- Uniformバッファのレイアウト情報
- Attributeのレイアウト情報
これらをどのように表現するかも考えないといけない。。
事前に手で変換したGLSLをSPIR-Vに変換する
これは簡単。
今のところは、手で変換したのを直接読ませている。getIntermediate
メソッドでASTを取得でき、これを良い感じに書き換えてから glslang::GlslangToSpv
に渡せば目的を達成できる。
ESSL1を直接SPIR-Vに変換する
え。。これ可能なの。。?? 一旦SPIRV-Crossで(Vulkanの)GLSLに変換して、再度SPIR-Vにコンパイルすれば目的のコードが得られるんではないだろうか。。
UniformConstant
な変数の渡し方が判らないので調べる必要はあるけど。。
UniformConstant
はスカラ値に使えない
ここのTable 22 によると、 UniformConstant
はサンプラ等にしか使えないようだ。