グラフィックス イベント一覧
Visual Studio のグラフィックス診断でグラフィックス イベント一覧を使用して、ゲームまたはアプリケーションのフレームのレンダリング中に記録された Direct3D イベントを調査できます。
これは [グラフィックス イベント一覧] ウィンドウです。
注意
Visual Studio 2013 Update 3 以降、グラフィックス診断ツールのウィンドウは、独立した Visual Studio シェルのコピー内でホストされます。グラフィックス分析と呼ばれるこのカスタマイズされたシェルでは、不要なメニューとオプションは表示されなくなりますが、その点を除けば、以前と同じグラフィックス イベント一覧とワークフローが提供されます。この変更の詳細については、「グラフィックス診断の概要」を参照してください。
イベント一覧の使用
イベント一覧でイベントを選択すると、他のグラフィックス診断ツールで表示されている情報に反映されます。イベント一覧が他のツールと連携することにより、レンダリングの問題を詳しく調べて、その原因を特定することができます。 イベント一覧と他のグラフィックス診断ツールを合わせて使用し、レンダリングの問題を解決するための方法については、「グラフィックス診断例」を参照してください。
数千個のイベントが含まれている可能性がある複雑なフレームに対処するには、イベント一覧の機能を効果的に使用することが重要です。 イベント一覧を効果的に使用するには、最適に機能するビューを選択し、検索を使用してイベント一覧をフィルターして、リンクに従って、イベントに関連付けられている Direct3D オブジェクトの詳細を調べてから、矢印ボタンを使用して描画呼び出し間をすばやくナビゲートします。
イベント一覧ビュー
イベント一覧は、2 つの異なるビューをサポートしています。これらのビューは、ワークフローと環境設定をサポートするためにさまざまな方法でグラフィックス イベントを体系化しています。 最初のビューは描画呼び出しビューで、これはイベントおよびイベントに関連する状態を階層的に体系化します。 2 つ目のビューはタイムライン ビューで、これはイベントを時系列の単純なリストに体系化します。
描画呼び出し ビュー
キャプチャされたイベント、およびイベントの状態を階層的に表示します。 階層の最上位は、描画呼び出し、クリア、現在、ビューの処理などのイベントで構成されます。 イベント一覧では、描画呼び出しを展開して、描画呼び出しが行われたタイミングでのデバイスの状態を表示できます。また、それぞれの状態をさらに展開して、値を設定したイベントを表示できます。 このレベルでは、前のフレームで特別な状態が設定されていたかどうか、または最後の描画呼び出し以降に複数回設定されていたかどうかも確認できます。タイムライン ビュー
キャプチャされた各イベントを時系列に表示します。 イベント一覧をこのように体系化する方法は、Visual Studio の前のバージョンと同じです。
イベント一覧ビューのモードを変更するには
- [グラフィックス イベント一覧] ウィンドウで、イベント一覧の上の [ビュー] ボックスから、[タイムライン] ビューまたは**[描画呼び出し]**ビューのいずれかを選択します。
イベントのフィルタリング
[グラフィックス イベント一覧] ウィンドウの右上にある [検索] ボックスを使用してイベント一覧をフィルタリングし、特定のキーワードが含まれている名前のイベントのみを検索することができます。 前の図に示されているように、「Vertex」などの 1 つのキーワードを指定することも、「Draw;Primitive」のようにセミコロンで区切って複数のキーワードを指定することもできます。複数のキーワードを指定すると、名前に Draw または Primitive のいずれかが含まれているイベントが該当します。 検索では、空白の有無も区別されます。たとえば、「VSSet」と「VS Set」は異なる検索であるため、検索する語には注意が必要です。
描画呼び出し間の移動
Draw 呼び出しを調べることは非常に重要であるため、[グラフィックス イベント一覧] ウィンドウの左上にある [次の描画呼び出しに移動します] ボタンと [前の描画呼び出しに移動します] ボタンを使用して描画呼び出しを検索し、それらの間をすばやく移動することができます。
グラフィックス オブジェクトへのリンク
特定のグラフィックス イベントについて理解するために、イベントに参照されているデバイスの現在の状態、または Direct3D オブジェクトの追加情報が必要になることがあります。 多数のイベントがこの情報に対するリンクを提供しており、このリンクに従って詳細を調べることができます。
イベントおよびイベント マーカーの種類
イベント一覧に表示されるイベントは 4 つのカテゴリ、つまり general (一般) イベント、draw (描画) イベント、user-defined (ユーザー定義) イベント グループ、および user-defined (ユーザー定義) イベント マーカーに分類されます。 一般イベント以外のイベントは、自身が属しているカテゴリを示すアイコンと共にまとめて表示されます。
アイコン |
イベントの説明 |
---|---|
(アイコンなし) |
|
|
|
|
|
|
ユーザー定義イベント
ユーザー定義イベントは、ユーザーのアプリケーションに特有のものです。 これを使用して、アプリケーション内で発生する重要なイベントを、グラフィックス イベント一覧のイベントに関連付けることができます。 たとえば、ユーザー定義イベント グループを作成して、関連するイベント (ユーザー インターフェイスをレンダリングするイベントなど) をグループまたは階層にまとめることができます。このようにすると、イベント一覧を簡単に参照したり、特定の種類のオブジェクトが描画されたときにマーカーを作成して、イベント一覧の中でグラフィックス イベントを簡単に見つけたりすることができます。
アプリケーションでグループおよびマーカーを作成するには、Direct3D が他の Direct3D デバッギング ツールで使用できるように提供している API と同じものを使用します。 以下の表は、Direct3D のさまざまなバージョンでグループおよびマーカーを作成するために使用できる API をまとめています。
API の説明 |
ID3D11DeviceContext2 (Direct3D 11.2) |
ID3DUserDefinedAnnotation (Direct3D 11.1) |
D3DPerf_API ファミリ (Direct3D 11.0 以前) |
---|---|---|---|
イベント グループを作成する |
BeginEventInt |
BeginEvent |
D3DPerf_BeginEvent |
イベント グループを終了する |
EndEventInt |
EndEvent |
D3DPerf_EndEvent |
イベント マーカーを作成する |
SetMarkerInt |
SetMarker |
D3DPerf_SetMarker |
ご利用の Direct3D のバージョンがサポートしている API のいずれかを使用することができます。たとえば、ターゲットが Direct3D 11.1 API の場合は、SetMarker または D3DPerf_SetMarker を使用してイベント マーカーを作成できますが、SetMarkerInt は Direct3D 11.2 でしか使用できないため、使用できません。また、Direct3D の複数のバージョンをサポートしているものを同じアプリケーション内に混在させることもできます。