DirectX 12のPIXグラフィカルデバッガーの生まれ変わり

グラフィカルデバッガが大好きです。 私も普通のものが大好きですが、グラフィックのものはもっとあります。 彼らはパフォーマンス中に劇場のカーテンの後ろを見ているような感覚を与えます:「ええ、この装飾はこのように取り付けられ、この光線はここから落ち、このキャビネットには後壁がありません...」 グラフィカルデバッガーは、アプリケーションのテキストコードと結果の美しい画像の間の理解の架け橋となります。



しかし、業界はこのようなツールを豊富に用意しているわけではありません。 Intel、NVidia、AMDのグラフィカルデバッガがありますが、競合他社のチップでは動作せず、ベンチマークやビデオカードを披露するために開発/デバッグ用に設計されているわけではありません。 何が起こったのか、何が起こったのかはよくわかりますが、なぜ、どのように修正すべきかを説明するのは不十分です。



別のキャンプには私のお気に入りのRenderDocがあります。 Crytekのメンバーが自分自身と人々のために作成した優れたユーティリティ。 オープンソース、すべてのベンダーのサポート、DirectX11(VulcanとDirectX12の計画を含む)、小さな便利な小さなものの束。



2番目の代表者は、DirectX9パフォーマンス分析ユーティリティであるPIXでした。 XBoxの開発ツールとして考案されました(名前自体はXBoxのパフォーマンス調査の略語です)が、デスクトップアプリケーションではうまく機能しました。 その瞬間まで、彼女が亡くなるまで(DirectX 10/11とWindowsの新しいバージョンで)。 マーケティング担当者がエンジニアを再び敗北させたマイクロソフトは、Visual Studioがグラフィカルデバッグのための唯一のツールであると宣言しました。 スタジオはプログラミングのための優れたツールですが、グラフィックコード(特に外国のコード)の学習、プロファイリング、デバッグには適していません。



Microsoftのエンジニアが一時的な勝利を収め、2017年1月にMicrosoftはDirectX 12のPIXの完全に更新されたバージョンのベータ版の発売を発表するまで、この不振は数年続きました。



何が得られたか見てみましょう。



環境設定



(DirectX 12を使用するには)Windows 10が必要です。 PIX自体はここからダウンロードできます 。 また、DirectX 12を使用して何かを描画するアプリケーションも必要です。手始めに、たとえばMicrosoftの公式サンプルを使用できます。 ここではGitHubにあります 。 それらをビルドするには、 Visual Studio (2015以降、無料のコミュニティで問題ありません)とWindows 10 SDKが必要です。



上記のすべてをダウンロードしてインストールし、例を収集し、PIXを実行します。



はじめに







PIXの開始ウィンドウは見た目が良いです。 Officeの最新バージョンからの何か、Visual Studioからの何か、そして今日Microsoftで今流行しているUWPアプリケーションのスタイルからはほとんどありません。 すぐに6つのアクションのいずれかを選択してください:GPUキャプチャおよびタイミングキャプチャはグラフィックアダプターに関連し、残りの項目は通常のプロファイリングに関連します。この記事のコンテキストではほとんど関心がありません。



PIX開発者の1人がプレゼンテーションで説明したように、2つのGPUキャプチャポイントとタイミングキャプチャポイントの必要性は、グラフィックパイプラインの詳細な状態を見つけてタイミングを変更せずに維持する方法がないことによって決まります。ハイゼンベルグ方程式は、例として与えられました:))。 したがって、いずれの場合も、今すぐパフォーマンスをデバッグするか、レンダリング精度をデバッグするかを選択する必要があります。



パフォーマンス測定にはベンダーユーティリティがあるため、GPUキャプチャに注目しましょう。 このコンピューターにインストールされているUWPアプリケーションのいずれかを実行するか、通常のバイナリへのパスを指定することができます。 Attachタブもありますが、これは好みではありません-通常のプロファイリングでのみ機能しますが、PIXから起動されたアプリケーションでのみ有効になるグラフィカルデバッグです。 ちなみに、これによりランチャーに問題が生じます(たとえば、Renderdocでは解決されています)。 まあ、いつか彼らはここでそれを修正するでしょう。







この例は実験のために取りました。ドアのように単純であり、同時に多くの描画呼び出しを行うため、必要なものすべてを示すことができます。







フレームの上部にあるキャプションにより、PIXがアプリケーションに正常に実装されたと判断できます。 次に、実行中のアプリケーションでPrintScreenを使用するか、PIXのカメラでボタンを使用して、単一フレームをレンダリングする「スナップショット」を取得する必要があります。 キャプチャされたスナップショットは次のようになります。







画像を開きます。 フレームレンダリング操作の順序が表示されます。







下にタイムラインがありますが、何もありません。 これはバグではなく機能です。 そこに何かを表示するには、画像の「再生」を開始する必要があります(右上の「開始」ボタン)。 次に、PIXはメモリにレンダリングに必要なすべてのリソースを復元し、すべてのメソッドを(同じ順序で、同じパラメーターで)呼び出します。 そして、これが私たちのタイムラインです。







ここでは、パフォーマンス、並列処理、全体像を評価できます。 特定の描画呼び出しを選択した後、次の[パイプライン]タブに移動して、そこで描画されたものを確認できます。







入力バッファー、バインドされたテクスチャ、シェーダーの状態、この呼び出しを行った後のレンダリングの結果を表示できます。







画像のどこかを右クリックすると、このピクセルのレンダリングの履歴を見ることができます。











この特定のピクセルは、現在のフレームの描画中に2回タッチされたことがわかります-キャンバスをクリーニングするときと、後で「チェッカー」テクスチャをレンダリングするとき。



レンダリング履歴の任意のステップのコンテキストメニューから、このピクセルを描画したシェーダーのデバッグを開始できます。







画像



デバッガーは優れています-ステップに進み、ブレークポイントを使用し、戻ることができます。Autosウィンドウで必要なすべての値を確認できます。 シェーダーコードの編集と続行もあります。



一般的に、私は新しいPIXが好きでした。 わずかな粗さ(ランチャーのサポートの欠如、1つのGPUのみでの動作)がありますが、これはすべて修正可能です。 グローバルな欠点のうち、DirectX 11のサポートの欠如にのみ注目します。これは依然として非常に一般的な標準であり、PIXの古いバージョンと新しいバージョンの両方のサポートの欠如は非常にイライラします。



さらなる研究のための新しいPIXリソース






All Articles