HLSL デバッガーは、Visual Studio のグラフィックス診断ツールの 1 つであり、グラフィックス診断のキャプチャ セッション中に記録されたグラフィックス データが HLSL シェーダー コードによってどのように処理されているのかを分析します。
HLSL デバッガーを次に示します。
.png)
HLSL デバッガーについて
HLSL デバッガーは、シェーダー コードで発生する問題を把握するのに役立ちます。Visual Studio における HLSL コードのデバッグは、C++、C#、Visual Basic などの他の言語で作成されたコードのデバッグと同様です。他の言語のデバッグ時と同じように、変数の内容の確認、ブレークポイントの設定、コードのステップ実行、および呼び出し履歴の確認を行うことができます。
ただし、CPU のハードウェアおよびソフトウェア (アプリケーション コード) は GPU のハードウェアおよびソフトウェア (シェーダー コード) とは大きく異なるため、GPU デバッガーがまったく異なる動作をしない限り、GPU のデバッグを CPU と同じような手順で行うことはできません。GPU と CPU の動作の基本的な違いは、GPU は大量のデータセットを処理できるようにグラフィックス処理に最適化された何百もの比較的低速の単純なプロセッサに処理を分散するのに対して、CPU は小さく汎用的な作業負荷を処理できる少数の比較的高速で複雑なプロセッサを使用する点です。また、GPU は本来、自己の内部処理を管理し CPU とは情報の共有をあまり行わない独立したコンピューターであるため、CPU 上で実行されているデバッガーが個々の時点における GPU の状況を把握することは非常に困難です。CPU が GPU の最新の情報を常に取得できたとしても、GPU のコードは非常に多くのスレッドを使用し、大量のデータを生成するため、開発者が取捨選択をすることはできません。
これらの問題を回避するために、HLSL デバッガーは、シェーダー コードの実行時にリアルタイムで GPU を監視しようとするのではなく、グラフィックス ログに記録された情報を使用してキャプチャされたフレームを再生成します。グラフィックス ログには出力の一部を再生成するために十分な情報が保持されているため、またグラフィックス診断にはエラーが発生した正確なピクセルおよびイベントを特定することができるツールが用意されているため、HLSL デバッガーは目的のシェーダー スレッドをシミュレートするだけで済みます。これは、シェーダーの処理を CPU 内でシミュレートし、内部の処理をすべて見ることができることを意味します。HLSL デバッガーで CPU と同様のデバッグができるのはこのためです。
ただし、HLSL デバッガーには、現在次のような制限があります。
HLSL デバッガーは、エディット コンティニュをサポートしていません。
アプリケーションとシェーダー コードを同時にデバッグすることはできません。ただし、アプリケーションとシェーダー コードを切り替えてデバッグすることはできます。
ウォッチ ウィンドウに変数とレジスタを追加することはできますが、式はサポートされていません。
計算シェーダーはサポートされていません。
一方、HLSL デバッガーでは、他のデバッガーよりも優れた、より CPU に近いデバッグが可能です。