グラフィックス情報のキャプチャ
Visual Studio のグラフィックス診断ツールを使用してレンダリングに関する問題を診断できるように、DirectX ベースのアプリからグラフィックス情報をキャプチャすることができます。
capture メソッド
Windows 8.1 では、DirectX 11.2 のランタイムはグラフィックス診断のようなデバッグ ツールの代わりにグラフィックス情報を内部でキャプチャできます。これはrobust capture (ロバスト キャプチャ) と呼ばれます。 DirectX のランタイムにこのサポートが追加される前は、特定の DirectX 関数呼び出しをインターセプトし、完了する DirectX へ呼び出しを転送する前に引数およびその他の情報を記録することによって、グラフィックス情報がキャプチャされていました。これはlegacy capture (レガシー キャプチャ) と呼ばれます。
Windows 8.1 では、DirectX のランタイムのみでグラフィックス情報のキャプチャを行うため、DirectX 11.2 をサポートするためにレガシー キャプチャを更新する必要はありません。したがって、レガシー キャプチャの使用は推奨されていません。 ただし DirectX 11.2 のランタイムは Windows 8.1 より前のバージョンの Windows をサポートしないため、Visual Studio 2013 では、Windows 8 および Windows 7 を対象とするアプリケーションのために、現在もレガシー キャプチャをサポートしています。
これらの 2 つのメソッドでは類似の情報を記録しており、グラフィックス情報をキャプチャする方法や、グラフィックス診断ツールの使用方法は変わりません。
ロバスト キャプチャ
ロバスト キャプチャは、Windows 8.1、Windows RT 8.1、および Windows Phone 8.1 で Visual Studio 2013 のグラフィックス診断をサポートします。 DirectX 10.0 から DirectX 11.2 をサポートしており、タイル型リソースなどの Direct3D 11.2 の新機能に関するグラフィックス情報もキャプチャできます。 ただし、Direct3D 11.2 のすべての機能は完全にサポートしていません。たとえば、HLSL シェーダー リンキング機能を使用して作成された HLSL シェーダーはデバッグできません。 ロバスト キャプチャ は新しいキャプチャ API を使用して、プログラムによるキャプチャ シナリオをサポートします。
レガシー キャプチャ
レガシー キャプチャはWindows 8、Windows RT 8、および Windows 7 で Visual Studio 2013 および Visual Studio 2012 のグラフィックス診断をサポートします。 これは DirectX 10.0 から DirectX 11.1 までをサポートしています。 レガシー キャプチャは Direct3D 11.2 の機能はサポートしていないため、ロバスト キャプチャを使用できないシナリオを除いては、レガシー キャプチャは推奨されていません。 レガシー キャプチャは vsgcapture.h ヘッダー ファイルに定義されているキャプチャ API を使用して、プログラムによるキャプチャ シナリオをサポートします。 このようなプログラムによるキャプチャも、ロバスト キャプチャを使用できないシナリオを除いては、推奨されていません。
グラフィックス情報をキャプチャする
グラフィックス情報のキャプチャは 2 段階のプロセスです。 最初に、アプリをグラフィックス診断の下で実行し、詳細情報をキャプチャする 1 つ以上のフレームを指定します。
グラフィックス診断の下でアプリを実行するには
メニュー バーで、[デバッグ]、[グラフィックス]、[診断の開始] の順に選択します。 (キーボード: Alt キーを押しながら F5 キーを押します)
[グラフィックス診断] ツール バーで、[診断の開始] をクリックします。
アプリがグラフィックス診断の下で実行されている間、特定の種類のグラフィックス情報が常にキャプチャされます。これには、デバイス セットアップ、スワップ チェーンの作成、グラフィックス オブジェクトとリソースの作成、および複数のフレームに影響するその他の重要なイベントが含まれます。 同時に、特定のフレームに関する詳細情報をキャプチャできます。これには、描画の呼び出しおよび計算シェーダーのディスパッチと、これらをサポートする Direct3D オブジェクトおよびリソースが含まれます。
フレームをキャプチャするには
Visual Studio の [グラフィックス診断] ツール バーで、[フレームのキャプチャ] をクリックします。
キーボードで、PrintScreen キーを押します。
注意
アプリケーションが [グラフィックス診断] で実行されている間、PrintScreen キーはグラフィックス情報のフレームをキャプチャするためだけに使用できます。通常の機能は実行できません。これは、デバッグを停止するかアプリケーションを正常に終了して、グラフィックス情報のキャプチャを停止するまで有効です。別のアプリケーションにフォーカスがある場合でも同じです。
Visual Studio 2013 更新プログラム 3 では、フレームをキャプチャするためのインターフェイスが変更されました。 Visual Studio キャプチャ インターフェイスで、[診断セッション] タイムラインの上にある [フレームのキャプチャ] ボタンを選択するか、[1 秒あたりのフレーム数] スイム レーンの下、または以前にキャプチャされたフレームの右側にある大きな [フレームのキャプチャ] ボタンを選択します。 下の画像では、両方のボタンが強調表示されています。
キャプチャしたフレームを確認する準備ができたら、サムネール画像の上の [フレーム] リンクに従って、またはサムネールをダブルクリックして、Visual Studio のグラフィックス分析を起動します。
フレーム全体のみをキャプチャできます。そのため、キャプチャを開始したときに実際に記録されるのは、次のフレームのグラフィックス情報です。 記録は、キャプチャを開始したフレームが表示された直後に開始され、キャプチャするフレームが表示されると終了します。 アプリがグラフィックス診断の下で実行されている間、フレームを必要なだけキャプチャできます。 どのフレームもキャプチャしない場合、グラフィックス ログは破棄されます。
フレームを初めてキャプチャすると、Visual Studio は、グラフィックス ログ (.vsglog) のドキュメント ウィンドウを表示します。 グラフィックス ログ ウィンドウを閉じるか、デバッグを停止するか、アプリを閉じると、それ以上フレームをそのログにキャプチャできなくなります。 より多くのグラフィックス情報をキャプチャするには、グラフィックス診断の下で再度アプリを実行し、新しいグラフィックス ログを開始する必要があります。
グラフィックス診断のキャプチャ オプション
キャプチャを構成して、すべてのグラフィックス イベントまたは特定のサブセットの呼び出し履歴の収集、キャプチャの HUD の無効化、およびキャプチャ互換モードの有効化または無効化を行うことができます。
グラフィックス診断のキャプチャ オプションを構成するには
メニュー バーの [ツール]、[オプション] の順にクリックします。 [オプション] ダイアログ ボックスが表示されます。
左側にあるオプション カテゴリの一覧から [グラフィックス診断] を選択した後、使用する [グラフィックス診断] オプションを構成します。
呼び出し履歴をキャプチャ中に収集する (キャプチャ速度が低下します)
呼び出し履歴を収集するには、このチェック ボックスをオンにします。 既定では、呼び出し履歴が収集され、[描画、ディスパッチ、表示、およびパフォーマンス マーカー] が選択されます。 すべてのイベントの呼び出し履歴をキャプチャするには、[すべて] を選択します。 呼び出し履歴を収集しないようにするには、[呼び出し履歴をキャプチャ中に収集 (キャプチャ速度が低下します)] チェック ボックスをオフにします。キャプチャ中にゲーム内の HUD を無効にする
グラフィックス診断の下で実行されているアプリが通常表示する HUD オーバーレイを無効にするには、このチェック ボックスをオンにします。 HUD オーバーレイを表示するには、このチェック ボックスをオフにします。互換モードでキャプチャする
グラフィックス情報を互換モードでキャプチャするには、このチェック ボックスをオンにします。 互換モードでのキャプチャが既定の動作です。 互換モードでは、Direct3D は、基本機能レベルで定義されていない追加機能が GPU でサポートされることを報告しません。 このため、アプリをキャプチャしている GPU のハードウェア固有の拡張機能が、キャプチャ中のアプリで使用されなくなり、同じまたはそれ以上の機能レベルをサポートしている任意の GPU を使用して、グラフィックス ログを再生できるようになります。 互換モードを無効にするには、このチェック ボックスをオフにします。互換モードでキャプチャされたログは、キャプチャ中にアプリで使用されたものと同じ追加機能をサポートしていない GPU 上では再生できません。
グラフィックス情報をリモートでキャプチャする
グラフィックス情報は、ローカル コンピューターか、リモート コンピューターまたはリモート デバイスで実行されているアプリからキャプチャできます。 リモート キャプチャは、Windows 8.1 コンピューターと Windows RT 8.1 デバイスでサポートされています。 リモートで実行されているアプリからグラフィックス情報をキャプチャするには、リモート デバッグ用にプロジェクトを構成し、既に説明したように、グラフィックス診断の下でアプリを実行します。 アプリがリモート コンピューターで実行され、キャプチャされたグラフィックス情報が開発用コンピューターに記録されます。
プロジェクトをリモート デバッグ用に構成する方法は、開発中のアプリの種類と、使用しているプログラミング言語によって異なります。 Windows ストア アプリでリモート デバッグを構成する方法の詳細については、「リモート マシンでの Visual Studio からの Windows ストア アプリの実行」を参照してください。 Windows デスクトップ アプリでリモート デバッグを構成する方法の詳細については、「Set Up Remote Debugging for a Visual Studio Project (Visual Studio のリモート デバッグのセットアップ)」を参照してください。
後で、情報をキャプチャした場所にかかわらず、リモート コンピューターまたはリモート デバイスを使用してグラフィックス情報を再生できます。 詳細については、「方法: グラフィックス診断再生マシンを変更する」を参照してください。
コマンド ラインからのグラフィックス情報のキャプチャ
コマンド ライン ツールを使用して、アプリからグラフィックス情報をキャプチャできます。 この DXCap.exe というツールでは、Visual Studio またはプログラムによるキャプチャを使用することなく、簡単にグラフィックス情報をキャプチャして再生できます。 具体的には、オートメーションを行う場合や、テスト環境で DXCap.exe を使用できます。 DXCap.exe の詳細については、「コマンド ライン キャプチャ ツール」を参照してください。