ニュース

Microsoft、DirectX開発者向けのC++ライブラリ「DxTimingCaptureLibrary」を公開

ETWログをゲームエンジンやプロファイラーなど自作ツールで扱いやすく

Microsoft、オープンソースのC++ライブラリ「DxTimingCaptureLibrary」を「DirectX」開発者向けに公開

 米Microsoftは9月30日(現地時間)、「DirectX」開発者向けのC++ライブラリ「DxTimingCaptureLibrary」を公開した。「GitHub」でホストされているオープンソースプロジェクトで、ライセンスは「MIT」。Windows 10/11で利用できる。

 「DxTimingCaptureLibrary」は、「DirectX」に関連する「ETW」(Event Tracing for Windows)ログを解析し、その情報をゲームエンジン内のプロファイラや解析ツールで活用できるようにするライブラリ。「ETW」はWindows標準のログ機能で、システムやアプリケーションの詳細なイベントを低いオーバーヘッドで収集できるが、深い知識がなければ活用が難しい。そのギャップを埋めるのが「DxTimingCaptureLibrary」というわけだ。

 同ライブラリは、「DirectX」向けのデバッグ・性能解析ツール「PIX」から[Timing Capture]に関するコードを独立させたものになっているとのこと。「PIX」の[Timing Capture]画面に表示されるDirectX関連のデータを、同ライブラリでも取得でき、たとえば以下が挙げられる。

  • GPUのタイミングデータ:コマンドリストの処理ごとの、パイプライン先頭/末尾のタイムスタンプ
  • APIオブジェクトの作成・破棄:タイムスタンプ、オブジェクトのサイズ、パラメーター、デバッグ名など
  • 常駐とページングのイベント:「DirectX」カーネルがページングや退避によってオブジェクトをビデオメモリとシステムメモリの間で移動させたタイミング。VRAMの断片化などによる移行の失敗も把握できる
  • DirectStorageのイベント:読み取りと状態の要求
  • 「D3D」ランタイムのエラーログ
  • パイプラインステートのコンパイルイベント
  • モニターのVSyncのイベント
  • 「WinPixEventRuntime」のイベントとマーカー:CPUとGPUの両方のタイムライン。カスタムカウンターのデータも取得できる

 使い始めるには、まず「DirectX」の「ETW」イベントを有効にした「ETW」セッションを作成・設定する。次に、そのセッションのイベントハンドラーから、「DxTimingCaptureLibrary」のイベントハンドラーを呼び出す。あとは、必要なコールバックのインターフェイスを実装すれば、該当するイベントが発生したときにライブラリがコールバックを呼び出してくれる。

 詳しくは、「GitHub」のドキュメントやライブラリに付属するサンプルを参照するとよいだろう。

常駐・ページングイベントをコンソールへ出力するサンプル
不正なD3D12 API呼び出しによるエラーを検出するサンプル
GPUのタイミングデータを「Perfetto」で表示するサンプル
システムメモリとビデオメモリの使用状況をツリーマップで可視化するサンプル(開発中)