注意書き

本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

RenderDocでシェーダーデバッグ (Vulkan)

プログラミング

シェーダーのデバッグはなかなか大変です。色情報を出力して目視確認というのは基本ですが、ソースコードレベルでステップ実行したいこともあります。 今回 RenderDoc で Vulkan 向けのシェーダーをデバッグできそうだったので紹介します。

スポンサーリンク

シェーダーをデバッグビルドする

glsl から SPIR-V の形式へコンパイルするときに、デバッグ情報付きにします。また最適化も切っておくと、調査がしやすいでしょう。このシェーダーコンパイルでは、以下のようにコンパイルオプションを追加します。

glslangValidator -S vert -V -g -Od -o shader.spv   shader.vert
  • “-g” デバッグ情報を追加
  • “-Od” 最適化を抑制

ここでは 頂点シェーダーの例ですが、同様にフラグメントシェーダーにも適用可能です。

RenderDoc でデバッグ

RenderDoc の Mesh Viewer から頂点を選択してデバッグ、もしくは Texture Viewer からピクセルを選んでデバッグ、でシェーダーのデバッグができます。

シェーダーにデバッグ情報が付いていれば、上記のように Disassembly のほかにソースコードを確認することができるようになっています。そして、ステップ実行や各種変数の値を下段の各ウィンドウにて確認ができます。

※これらの値の内容はエミュレーションで再現されているようなので、GPU上のシェーダーのデバッグを実行しているわけではありません。とはいえ、この状態でもかなり手助けになることは多いのではと思います。

より詳しい使い方の説明は、本家ドキュメントを参照して下さい。

How do I debug a shader? — RenderDoc documentation

なお、シェーダーアセンブリ(SPIR-V)レベルをデバッグすることは、いつでも可能なようです。

まとめ

DirectX であれば、PIXを使ってシェーダーのソースコードレベルデバッグが可能です。Vulkan ではこのツールが使えません。今のところベンダー中立で使える RenderDoc がシェーダーデバッグの機能があるので、活用していきたいところですね。

現時点では、逆に RenderDoc は DXIL のシェーダーをソースコードレベルのデバッグができないようです。

コメント

タイトルとURLをコピーしました