DirectXデバッグ-簡単

「内部」で発生するプロセスの理解DirectXは、常にいくつかの困難に悩まされ、Pixなどの追加ツールの使用を余儀なくされてきました。 しかし、進歩は止まらず、多くのアイデアとターンキーソリューションがVisual Studio 11ベータ版に実装されました。 このツールキットは、DirectXアプリケーションのデバッグを大幅に簡素化し、プログラマーにイメージを形成するプロセスを詳細に理解する機会を与えます。 今、各ピクセルを徹底的に研究することができ、彼の人生の全容が得られます。



新しいデバッグモード



Visual Studio 11ベータのデバッグメニューに新しい項目「Debug / Graphics」が登場しました。この記事の一部として、各項目の目的を説明します。







「診断の開始」項目から始まります。 これは、DirectXアプリケーションの特別な起動モードです。デバッグシステムでは、現在のフレームの「スナップショット」を取得できます。 ご覧のように、アプリケーションの隅に、現在のレンダリングされたフレーム数が表示されているオーバーレイ、アプリケーションの起動開始からの時間、および画像が占有しているメモリ量を確認できます。







「画面の印刷」ボタンを押すと、フレームの状態の完全なダンプが生成されます。これには、生成された画像と多くの追加情報が含まれます。これにより、画面に表示されるプロセスとそのリソースを理解できます必要です。







メニュー項目「デバッグ/グラフィックス/オブジェクトテーブル」を呼び出すと、現在この画面の作成に使用されているリソース、占有されているメモリ量、作成された時期(フレーム)、解像度、およびその他の多くの情報を把握できます。 当然、リソースはテクスチャだけでなく、シェーダー、あらゆる種類のバッファー、ステート、ビューでもあります。 この情報により、最適化のためにさらに手順を実行できます。 たとえば、より弱いハードウェアでアプリケーションを実行できるようにします。







詳細





画像形成時に何が起こったのかをより詳細に理解すると、メニュー項目「デバッグ/グラフィックス/ピクセル履歴」が可能になります。 特定のピクセルの形成の履歴を表示するには、十字線で示す必要があります。 [グラフィックスピクセル履歴]パネルには、作成の全体像が表示されます。







パネルに表示される4つのDraw呼び出しは、実際にはレンダリングです:

  1. 背景
  2. 地球の裏
  3. 透明性を考慮した地球の正面
  4. 経線に沿って進む光線の描画






各Drawメソッドは、グラフィックサブシステムパイプラインと相互作用し、メニュー項目「デバッグ/グラフィック/パイプラインステージ」のおかげで、この相互作用の詳細を確認できます。







コンベアの4つのステップはそれぞれ段階的にチェックできます。



  1. 元のジオメトリの受信。
  2. 通常、画面上のオブジェクトの比率と回転、カメラの方向を設定するための、頂点シェーダーによる幾何学的変換。
  3. 実際には、ピクセルシェーダーでジオメトリを処理し、何らかの照明モデルとテクスチャに基づいて色付けします。
  4. たとえば前のレンダリング手順を組み合わせた最終的な画像形成。








コードに戻る



グラフィックピクセル履歴パネルから、各ステップでアプリケーションによって実行されるコードに簡単にアクセスできます。 これを行うには、[ デバッグ/グラフィックス/イベントコールスタック ]メニュー項目を使用して、この呼び出しの原因となったソースファイルを選択します。その後、ソースファイルは呼び出しを行った行に配置されます。







まったく同じ方法で、興味のあるDraw呼び出しを展開すると、この呼び出しをパイプラインで処理したシェーダーのソースコードを取得できます。 現在、すべての診断が完全に特定のピクセルについて目の前にあり、必要に応じてこのフレームのinnerColour変数の値を取得することもできることを忘れないでください。 DirectXに慣れていない人のために、詳細を説明します。 画面に表示されるコードはHLSLファームウェアであり、コンパイル後にグラフィックアクセラレータによって各画像ピクセルに対して実行されます。 これらのファームウェアにはパラメーターがあり、そのうちの1つが青で強調表示されています。







ピクセルのDraw呼び出し時のDirectXサブシステムの完全な状態は、Graphics Pixel Historyパネルの呼び出しをクリックすることにより、レポートの形式で取得できます。 レポートは非​​常に膨大です。









レポートでピクセルシェーダーの状態に関する情報を見つけたら、パラメーター化に使用される定数バッファーのデータを取得できます。







リンクobj:35をクリックすると、このバッファのステータスを確認できます。 入力パラメーターinnerColourの色(R、G、B、アルファ)である最初の4つのセルの値。







しかし、これだけではありません。 将来、これらの値(0.3 0.3 0.3 1.0)を生成したプログラムのソースコードに到達する可能性があります。 これを行うには、メニュー項目「デバッグ/グラフィックス/イベントリスト」を使用します。 Graphics Pixel Historyパネルで興味のあるDraw呼び出しを選択すると、Graphics Event ListパネルでDirectX API呼び出しの完全なリストを取得し、シェーダーパラメーターを更新するメソッド-UpdateSubResourceを探します。 これもまさに私たちが興味を持っているメソッドであるというヒントは、objへの参照です:35。 そして、「Graphics Call Stack」パネルを使用して、この呼び出しが行われたプログラム内の特定の場所にいることがわかります。







これで、使い慣れたメニュー項目「すべての参照を検索」を使用して、関心のある同じパラメーターを持つ行を見つけるだけで十分です。







シェーダーのデバッグ



HLSLシェーダーのデバッグも、Visual Studio 11ベータ版にとって特別なものではありません。 これを行うには、ソースシェーダーファイルのデバッグ情報を作成するモードをオンにします。







Visual Studioの通常モードで、同じ機能(たとえば、条件ブレークポイント)でブレークポイントを設定するためにのみ残ります。 ブレークポイントを含むシェーダー関数が呼び出されると、割り込みが発生し、変数の現在の値を調べることができます。







おわりに



この記事から明らかになったように、DirectXアプリケーションのデバッグは、Visual Studio 11ベータに含まれているツールのおかげで大幅に簡素化できます。



www.microsoft.com/visualstudio/ru-ruから Visual Studio 11ベータ版を今すぐダウンロードできることを思い出してください



All Articles