頂点シェーダーのデバッグ
このチュートリアルでは、頂点シェーダーのデバッグについて説明します。ブレークポイントの設定、頂点シェーダー コードのステップ実行、レジスタ値の監視について解説します。このチュートリアルは以下の手順に分かれています。
- セットアップ
- 手順 1 - 頂点シェーダー デバッガーの起動
- 手順 2 - HLSL またはアセンブリでの頂点シェーダーの表示
- 手順 3 - ブレークポイントの設定
- 手順 4 - 頂点シェーダー コードのステップ実行
セットアップ
この頂点シェーダーのデバッグの使用に関するチュートリアルをセット アップするには
Direct3D 9 用の BasicHLSL サンプルか、Direct3D 10 用の BasicHLSL10 サンプルの 2 つの BasicHSL サンプルのいずれかをビルドします。
このサンプルは、ソースレベルのシェーダー デバッグを可能にするため、コンパイルする必要があります (「PIX で使用するアプリケーションのビルド」を参照)。
PIX を開き、実験を新規作成して、生成される実行可能ファイルを PIX ターゲット プログラムとして設定します。
データの収集には、シングル フレーム キャプチャー オプションを選択します。
手順 1 - 頂点シェーダー デバッガーの起動
セットアップの後に、頂点シェーダー デバッグを起動するには
PIX で実験を開始し、PIX からシングル フレーム キャプチャーを実行します。
フレームがキャプチャーされたら、イベント ビューを使用してデバッグする描画イベントを選択し、詳細ペインのレンダリング タブを使用して、強制的にフレームの再レンダリングを行います。
ここでは、次の 2 つの方法のいずれかでシェーダー デバッガーを起動して頂点シェーダーをデバッグできます。
- 手順 1a - デバッガー タブのピクセル履歴ビューから頂点シェーダー デバッガーを起動
- 手順 1b - メッシュ データ ビューから頂点シェーダー デバッガーを起動
手順 1a - デバッガー タブのピクセル履歴ビューから頂点シェーダー デバッガーを起動
デバッガー タブのピクセル履歴ビューから頂点シェーダーのシェーダー デバッガーを使用するには
レンダリング タブで、対象のピクセルを右クリックし、コンテキスト メニューから [このピクセルをデバッグ](Debug This Pixel) を選択して、ピクセル履歴タブを起動します。
Figure 1. ピクセル履歴ビューの起動
頂点シェーダー デバッガーのインスタンスを起動するには、デバッガー タブのピクセル履歴ビューに表示されたいずれかのイベントでアクティブな [頂点のデバッグ](Debug Vertex) リンクをクリックします。
Figure 2. ピクセル履歴タブからの頂点シェーダー デバッグの起動
手順 1b - メッシュ データ ビューから頂点シェーダー デバッガーを起動
メッシュ データ ビューからシェーダー デバッガーを起動するには
メッシュ データ ビューがアクティブな状態で [PostVS] タブを選択して、トランスフォームされたメッシュ データを調べます。
下線付きの頂点の上にマウスを合わせ、コンテキスト メニューから項目 [この頂点をデバッグ](Debug this vertex) を選択してシェーダー デバッガーを開きます。
Figure 3. メッシュ データ ビューからの頂点シェーダー デバッグの起動
手順 2 - HLSL またはアセンブリでの頂点シェーダーの表示
PIX では、アセンブリ コードまたは HLSL ソースを使用して頂点シェーダーをデバッグできます。
手順 2a - HLSL での頂点シェーダーの表示
デバッガー タブが開き、シェーダーの HLSL コードが表示されます。下のセクションは空白ですが、変数を使用しているシェーダー コード行でデバッガーが停止したときに、シェーダーの変数の内容が表示されます。
Figure 4. 頂点シェーダー HLSL ソースの表示
デバッガーはシェーダーの最初の実行可能行で停止し、その行は黄色の矢印でマークされます。表示される変数は、このコード行で使用されている変数です。
Direct3D 9 と Direct3D 10 の違い Direct3D 9 と Direct3D 10 とでは、ソース デバッグの実装方法が異なるため、この 2 つのバージョン間で動作の違いが発生することがあります。 Direct3D 10 の場合、実験の実行によって生成された PIXRun ファイルに PIX がシェーダー HLSL ソース コードを直接埋め込みます。 Direct3D 9 の場合、PIXRun ファイルに HLSL ソースは格納されません。その代わりに、ターゲット プログラムのビルド時に使用された HLSL ソース コードへのリンクが格納されます。ソース コードを元の場所から移動すると、PIX は現在の場所を指定するように要求します。ソースが開発システム上に存在しない場合は、アセンブリ デバッグのみがサポートされます。 |
手順 2b - アセンブリでの頂点シェーダーの表示
シェーダーのアセンブリ コードを表示するには、[Disassembly] タブをクリックします。下のセクションは空白ですが、レジスタを使用しているシェーダー コード行でデバッガーが停止したときに、シェーダーのレジスタの内容が表示されます。
Figure 5. 頂点シェーダー アセンブリ コードの表示
デバッガーはシェーダーの最初の実行可能行で停止し、ここでもその行は黄色の矢印でマークされます。
手順 3 - ブレークポイントの設定
1 つ以上のブレークポイントを設定するには、アセンブリまたは HLSL ソースのシェーダーのコード行の左側をクリックします。
Figure 6. ブレーク ポイントの設定
ブレークポイントを示す赤い点が表示されます (ブレークポイントをクリックするとそのブレークポイントは削除されます)。
手順 4 - 頂点シェーダー コードのステップ実行
シェーダー コードの実行を制御するには、ツール バーのボタンを使用します。