Direct3D 呼び出しの分析
PIX を使用して、ターゲット プログラムによる Direct3D 呼び出しをすべてログに記録することができます。これは、ターゲット プログラムによる Direct3D の使用状況を把握するのに便利な方法です。ログは API 呼び出しの一覧にすぎないため、PIX で PIXRun ファイルが開かれるときには、空のウィンドウがいくつか表示されます。
- タイムライン ビューは空です。
- オブジェクト ビューはありません。
- 詳細ビューには概要タブ、レンダリング タブ、およびメッシュ タブがありますが、レンダリング タブは空です。
- イベント ビューには、実験の実行中に行われた Direct3D 呼び出しが一覧表示されます。
イベント ビューでの Direct3D 呼び出しのログの表示
この分析では、BasicHLSL サンプルが実行され、フレーム 3 で行われた呼び出しがログに記録されます。実験の実行時には、次のようなイベントが表示されます。
ターゲット プログラムによる API 呼び出し
ここでは、イベント番号 1 からイベント番号 736 までの 5 つのイベントが一覧表示されています。フレーム 3 を展開すると、これらのイベントがフレーム 3 で発生したことがわかります。
イベント ビューでは、フレーム 3 で行われたすべての API 呼び出しがイベント別に一覧表示されます。フレームでは、最初にレンダー ターゲットがクリアされ、続いて BeginScene が呼び出されて、SetTechnique に進みます。その後、他の 733 のイベントが実行されます。最初の 5 個のイベント (イベント 4 ~ 9) はそれぞれ、ターゲット プログラムによる Direct3D API 呼び出しを示しています。したがって、呼び出しログには、ターゲット プログラムによる Direct3D 呼び出しがすべて表示されます。
D3DX による API 呼び出し
PIX では、さらに次のような処理が実行されます。イベント 17 (つまり、BeginPass) までスキップします。エフェクトのレンダリング時に BeginPass が呼び出されるとどうなるかを知りたい場合は、PIX でこのノードを拡大してください。
見てわかるとおり、BeginPass は、頂点シェーダーを設定し、定数値を更新して、ピクセル シェーダーを設定します。これらの API 呼び出しはターゲット プログラムによって行われたものではなく、ターゲット プログラムから BeginPass が呼び出された結果として D3DX により行われたものです。ターゲット プログラムによる API 呼び出しと D3DX による呼び出しは、PIX を使用して確認できます。
また、この図には DrawSubset 呼び出しに関する詳細も示されます。ターゲット プログラムは DrawSubset を呼び出し、DrawSubset は SetVertexDeclaration、SetStreamSource、SetIndices、および DrawIndexedPrimitive を呼び出します。したがって、DrawSubset をプロファイリングし、プロファイラーによって返される値が予想よりも大きい理由を明らかにしたい場合は、PIX を使用して、1 つの API 呼び出しの結果として生じた状態の変化を確認できます。
この例は、基本ビューを使用し、呼び出しログ オプションを選択して実験を行った結果を示しています。このオプションでは、ここでイベント ビューに表示されているカウンターが既定で使用されます。呼び出しのログを記録するときに、基本ビューからカウンターをカスタマイズできないことがあります。収集したデータをより詳細に管理したい場合は、詳細ビューに切り替えて、トリガーとアクションを、多数のカウンターの中からいずれかのカウンターを選択できるようにカスタマイズしてください。