ID3D12Debug5
COM公式ドキュメント
オブジェクトの自動命名を構成する機能をデバッグレイヤーに追加します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オブジェクトの自動命名を構成します。
| Enable | BOOL | in | 自動命名を有効にする場合は true、無効にする場合は false を指定します。 |
解説(Remarks)
既定では、ID3D12Object::SetName または ID3D12Object::SetPrivateData で名前を割り当てない限り、オブジェクトには名前が付きません。
すべての Direct3D 12 オブジェクトに名前を付けることが推奨されます (少なくともデバッグビルドでは)。それが難しい場合は、名前の付いていない部分を補うために自動命名を有効にすると便利です。自動命名を有効にして作成された Direct3D 12 オブジェクトには自動的に名前が割り当てられ、その名前はデバッグレイヤーの出力や DRED のページフォールトデータで使用されます。
特定の自動命名フォーマットへの依存を生じさせないため、自動命名で付けられた名前の文字列を ID3D12Object::GetName や ID3D12Object::GetPrivateData で取得することはできません。ただし、一意の名前文字列を生成するために、Direct3D 12 は作成時にすべての ID3D12DeviceChild オブジェクトへ割り当てられるローカル一意識別子 (LUID) を使用します。この LUID は、REFGUID 値 WKPDID_D3D12UniqueObjectId を指定して ID3D12Object::GetPrivateData を呼び出すことで取得できます。独自のオブジェクト命名規則を作成する際に役立つ場合があります。
既存のソフトウェアをデバッグする場合は、グラフィックスツールのユーティリティ D3DConfig とコマンド d3dconfig.exe device auto-debug-name=forced-on によって自動命名を制御できます。
ID3D12Object::SetName または ID3D12Object::SetPrivateData で名前が付けられたオブジェクトは、自動命名による名前ではなく、割り当てられた名前を使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D12Debug5 "{548D6B12-09FA-40E0-9069-5DCD589A52C9}"
#usecom global ID3D12Debug5 IID_ID3D12Debug5 "{}"
#comfunc global ID3D12Debug5_SetEnableAutoName 8 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。