ID3D12InfoQueue
COM公式ドキュメント
情報キューインターフェイスは、デバッグメッセージの格納、取得、フィルタリングを行います。キューは、メッセージキュー、省略可能な格納フィルタースタック、および省略可能な取得フィルタースタックで構成されます。(ID3D12InfoQueue)
解説(Remarks)
このインターフェイスは、ID3D12Device に対して IUnknown::QueryInterface を呼び出して取得します。この操作を成功させるには、ID3D12Debug::EnableDebugLayer によって ID3D12Debug レイヤーを有効にしておく必要があります。
メソッド 35
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
メッセージキューに追加できるメッセージの最大数を設定します。(ID3D12InfoQueue.SetMessageCountLimit)
| MessageCountLimit | ULONGLONG | in | メッセージキューに追加できるメッセージの最大数です。-1 は無制限を意味します。 メッセージキュー内のメッセージ数が上限に達すると、新たに到着したメッセージが古いメッセージを押し出します。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
メッセージキューからすべてのメッセージを消去します。(ID3D12InfoQueue.ClearStoredMessages)
メッセージキューからメッセージを取得します。(ID3D12InfoQueue.GetMessage)
| MessageIndex | ULONGLONG | in | 省略可能な取得フィルターを適用した後のメッセージキューへのインデックスです。0 から、取得フィルターを通過したメッセージキュー内のメッセージ数(GetNumStoredMessagesAllowedByRetrievalFilter で取得できます)までの値を指定できます。0 はメッセージキューの先頭のメッセージです。 |
| pMessage | D3D12_MESSAGE* | outoptional | 返されるメッセージです。 |
| pMessageByteLength | UINT_PTR* | inout | pMessage のサイズ(バイト単位)です。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
解説(Remarks)
このメソッドはメッセージキューからメッセージを削除しません。
このメソッドは、省略可能な取得フィルターを適用した後のメッセージキューからメッセージを取得します。
アプリケーションは、メッセージを取得するためにこのメソッドを 2 回呼び出す必要があります。1 回目でメッセージのサイズを取得し、2 回目でメッセージ本体を取得します。典型的な例を次に示します。
// Get the size of the message
SIZE_T messageLength = 0;
HRESULT hr = pInfoQueue->GetMessage(0, NULL, &messageLength);
// Allocate space and get the message
D3D12_MESSAGE * pMessage = (D3D12_MESSAGE*)malloc(messageLength);
hr = pInfoQueue->GetMessage(0, pMessage, &messageLength);
格納フィルターの通過を許可されたメッセージの数を取得します。(ID3D12InfoQueue.GetNumMessagesAllowedByStorageFilter)
戻り値
型: UINT64
格納フィルターによって許可されたメッセージの数です。
格納フィルターの通過を拒否されたメッセージの数を取得します。(ID3D12InfoQueue.GetNumMessagesDeniedByStorageFilter)
戻り値
型: UINT64
格納フィルターによって拒否されたメッセージの数です。
現在メッセージキューに格納されているメッセージの数を取得します。(ID3D12InfoQueue.GetNumStoredMessages)
戻り値
型: UINT64
現在メッセージキューに格納されているメッセージの数です。
取得フィルターを通過できるメッセージの数を取得します。(ID3D12InfoQueue.GetNumStoredMessagesAllowedByRetrievalFilter)
戻り値
型: UINT64
取得フィルターによって許可されたメッセージの数です。
メッセージ数の上限によって破棄されたメッセージの数を取得します。(ID3D12InfoQueue.GetNumMessagesDiscardedByMessageCountLimit)
戻り値
型: UINT64
破棄されたメッセージの数です。
解説(Remarks)
メッセージ数の上限の取得と設定には、それぞれ GetMessageCountLimit と SetMessageCountLimit を使用します。
メッセージキューに追加できるメッセージの最大数を取得します。(ID3D12InfoQueue.GetMessageCountLimit)
戻り値
型: UINT64
キューに追加できるメッセージの最大数です。-1 は無制限を意味します。
メッセージキュー内のメッセージ数が上限に達すると、新たに到着したメッセージが古いメッセージを押し出します。
格納フィルタースタックの最上位に格納フィルターを追加します。(ID3D12InfoQueue.AddStorageFilterEntries)
| pFilter | D3D12_INFO_QUEUE_FILTER* | in | 格納フィルターの配列です。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
格納フィルタースタックの最上位にある格納フィルターを取得します。(ID3D12InfoQueue.GetStorageFilter)
| pFilter | D3D12_INFO_QUEUE_FILTER* | outoptional | 格納フィルタースタックの最上位にある格納フィルターです。 |
| pFilterByteLength | UINT_PTR* | inout | 格納フィルターのサイズ(バイト単位)です。pFilter が NULL の場合、格納フィルターのサイズがこのパラメーターに出力されます。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
格納フィルタースタックの最上位から格納フィルターを削除します。(ID3D12InfoQueue.ClearStorageFilter)
空の格納フィルターを格納フィルタースタックにプッシュします。(ID3D12InfoQueue.PushEmptyStorageFilter)
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
解説(Remarks)
空の格納フィルターは、すべてのメッセージの通過を許可します。
格納フィルタースタックの最上位にある格納フィルターのコピーを、格納フィルタースタックにプッシュします。(ID3D12InfoQueue.PushCopyOfStorageFilter)
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
格納フィルターを格納フィルタースタックにプッシュします。(ID3D12InfoQueue.PushStorageFilter)
| pFilter | D3D12_INFO_QUEUE_FILTER* | in | 格納フィルターへのポインターです。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
格納フィルタースタックの最上位から格納フィルターをポップします。(ID3D12InfoQueue.PopStorageFilter)
格納フィルタースタックのサイズ(バイト単位)を取得します。(ID3D12InfoQueue.GetStorageFilterStackSize)
戻り値
型: UINT
格納フィルタースタックのサイズ(バイト単位)です。
取得フィルタースタックの最上位に格納フィルターを追加します。(ID3D12InfoQueue.AddRetrievalFilterEntries)
| pFilter | D3D12_INFO_QUEUE_FILTER* | in | 取得フィルターの配列です。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
解説(Remarks)
このメソッドの使用例を次に示します。
D3D12_MESSAGE_CATEGORY cats[] = { ..., ..., ... };
D3D12_MESSAGE_SEVERITY sevs[] = { ..., ..., ... };
D3D12_MESSAGE_ID ids[] = { ..., ..., ... };
D3D12_INFO_QUEUE_FILTER filter;
memset( &filter, 0, sizeof(filter) );
// To set the type of messages to allow,
// set filter.AllowList as follows:
filter.AllowList.NumCategories = _countof(cats);
filter.AllowList.pCategoryList = cats;
filter.AllowList.NumSeverities = _countof(sevs);
filter.AllowList.pSeverityList = sevs;
filter.AllowList.NumIDs = _countof(ids);
filter.AllowList.pIDList = ids;
// To set the type of messages to deny, set filter.DenyList
// similarly to the preceding filter.AllowList.
// The following single call sets all of the preceding information.
hr = infoQueue->AddRetrievalFilterEntries( &filter );
取得フィルタースタックの最上位にある取得フィルターを取得します。(ID3D12InfoQueue.GetRetrievalFilter)
| pFilter | D3D12_INFO_QUEUE_FILTER* | outoptional | 取得フィルタースタックの最上位にある取得フィルターです。 |
| pFilterByteLength | UINT_PTR* | inout | 取得フィルターのサイズ(バイト単位)です。pFilter が NULL の場合、取得フィルターのサイズがこのパラメーターに出力されます。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
取得フィルタースタックの最上位から取得フィルターを削除します。(ID3D12InfoQueue.ClearRetrievalFilter)
空の取得フィルターを取得フィルタースタックにプッシュします。(ID3D12InfoQueue.PushEmptyRetrievalFilter)
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
解説(Remarks)
空の取得フィルターは、すべてのメッセージの通過を許可します。
取得フィルタースタックの最上位にある取得フィルターのコピーを、取得フィルタースタックにプッシュします。(ID3D12InfoQueue.PushCopyOfRetrievalFilter)
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
取得フィルターを取得フィルタースタックにプッシュします。(ID3D12InfoQueue.PushRetrievalFilter)
| pFilter | D3D12_INFO_QUEUE_FILTER* | in | 取得フィルターへのポインターです。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
取得フィルタースタックの最上位から取得フィルターをポップします。(ID3D12InfoQueue.PopRetrievalFilter)
取得フィルタースタックのサイズ(バイト単位)を取得します。(ID3D12InfoQueue.GetRetrievalFilterStackSize)
戻り値
型: UINT
取得フィルタースタックのサイズ(バイト単位)です。
デバッグメッセージをメッセージキューに追加し、そのメッセージをデバッグ出力に送信します。
| Category | D3D12_MESSAGE_CATEGORY | in | メッセージのカテゴリです。 |
| Severity | D3D12_MESSAGE_SEVERITY | in | メッセージの重大度です。 |
| ID | D3D12_MESSAGE_ID | in | メッセージの一意な識別子です。 |
| pDescription | LPSTR | in | ユーザー定義のメッセージです。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
解説(Remarks)
このメソッドは、ランタイム内部の機構がデバッグメッセージをメッセージキューに追加し、デバッグ出力へ送信するために使用します。アプリケーションが独自のカスタムメッセージをメッセージキューに追加してデバッグ出力へ送信するには、ID3D12InfoQueue::AddApplicationMessage を呼び出してください。
ユーザー定義のメッセージをメッセージキューに追加し、そのメッセージをデバッグ出力に送信します。
| Severity | D3D12_MESSAGE_SEVERITY | in | メッセージの重大度です。 |
| pDescription | LPSTR | in | メッセージ文字列を指定します。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
指定したカテゴリのメッセージが格納フィルターを通過したときにブレークするよう、メッセージカテゴリを設定します。(ID3D12InfoQueue.SetBreakOnCategory)
| Category | D3D12_MESSAGE_CATEGORY | in | ブレーク対象とするメッセージカテゴリです。 |
| bEnable | BOOL | in | このブレーク条件のオン/オフを切り替えます(true でオン、false でオフ)。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
指定した重大度のメッセージが格納フィルターを通過したときにブレークするよう、メッセージの重大度レベルを設定します。(ID3D12InfoQueue.SetBreakOnSeverity)
| Severity | D3D12_MESSAGE_SEVERITY | in | ブレーク対象とするメッセージの重大度レベルです。 |
| bEnable | BOOL | in | このブレーク条件のオン/オフを切り替えます(true でオン、false でオフ)。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
指定した識別子のメッセージが格納フィルターを通過したときにブレークするよう、メッセージ識別子を設定します。(ID3D12InfoQueue.SetBreakOnID)
| ID | D3D12_MESSAGE_ID | in | ブレーク対象とするメッセージ識別子です。 |
| bEnable | BOOL | in | このブレーク条件のオン/オフを切り替えます(true でオン、false でオフ)。 |
戻り値
型: HRESULT
このメソッドは Direct3D 12 の戻り値コードのいずれかを返します。
指定したカテゴリのメッセージが格納フィルターを通過したときにブレークするかどうかを取得します。(ID3D12InfoQueue.GetBreakOnCategory)
| Category | D3D12_MESSAGE_CATEGORY | in | ブレーク対象とするメッセージカテゴリです。 |
戻り値
型: BOOL
このブレーク条件がオンかオフかを示します(true でオン、false でオフ)。
指定した重大度のメッセージが格納フィルターを通過したときにブレークするかどうかを取得します。(ID3D12InfoQueue.GetBreakOnSeverity)
| Severity | D3D12_MESSAGE_SEVERITY | in | ブレーク対象とするメッセージの重大度レベルです。 |
戻り値
型: BOOL
このブレーク条件がオンかオフかを示します(true でオン、false でオフ)。
指定した識別子のメッセージが格納フィルターを通過したときにブレークするかどうかを取得します。(ID3D12InfoQueue.GetBreakOnID)
| ID | D3D12_MESSAGE_ID | in | ブレーク対象とするメッセージ識別子です。 |
戻り値
型: BOOL
このブレーク条件がオンかオフかを示します(true でオン、false でオフ)。
デバッグ出力のオン/オフを切り替えるブール値を設定します。(ID3D12InfoQueue.SetMuteDebugOutput)
| bMute | BOOL | in | デバッグ出力を無効化/有効化します(true で出力を無効(ミュート)、false で出力を有効)。 |
解説(Remarks)
これにより、格納フィルターを通過したメッセージがデバッグ出力に表示されなくなりますが、それらのメッセージはメッセージキューには引き続き追加されます。
デバッグ出力がオンかオフかを判定するブール値を取得します。
戻り値
型: BOOL
デバッグ出力がオンかオフかを示します(true でオン、false でオフ)。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D12InfoQueue "{0742A90B-C387-483F-B946-30A7E4E61458}" #usecom global ID3D12InfoQueue IID_ID3D12InfoQueue "{}" #comfunc global ID3D12InfoQueue_SetMessageCountLimit 3 int64 #comfunc global ID3D12InfoQueue_ClearStoredMessages 4 #comfunc global ID3D12InfoQueue_GetMessage 5 int64,var,var #comfunc global ID3D12InfoQueue_GetNumMessagesAllowedByStorageFilter 6 #comfunc global ID3D12InfoQueue_GetNumMessagesDeniedByStorageFilter 7 #comfunc global ID3D12InfoQueue_GetNumStoredMessages 8 #comfunc global ID3D12InfoQueue_GetNumStoredMessagesAllowedByRetrievalFilter 9 #comfunc global ID3D12InfoQueue_GetNumMessagesDiscardedByMessageCountLimit 10 #comfunc global ID3D12InfoQueue_GetMessageCountLimit 11 #comfunc global ID3D12InfoQueue_AddStorageFilterEntries 12 var #comfunc global ID3D12InfoQueue_GetStorageFilter 13 var,var #comfunc global ID3D12InfoQueue_ClearStorageFilter 14 #comfunc global ID3D12InfoQueue_PushEmptyStorageFilter 15 #comfunc global ID3D12InfoQueue_PushCopyOfStorageFilter 16 #comfunc global ID3D12InfoQueue_PushStorageFilter 17 var #comfunc global ID3D12InfoQueue_PopStorageFilter 18 #comfunc global ID3D12InfoQueue_GetStorageFilterStackSize 19 #comfunc global ID3D12InfoQueue_AddRetrievalFilterEntries 20 var #comfunc global ID3D12InfoQueue_GetRetrievalFilter 21 var,var #comfunc global ID3D12InfoQueue_ClearRetrievalFilter 22 #comfunc global ID3D12InfoQueue_PushEmptyRetrievalFilter 23 #comfunc global ID3D12InfoQueue_PushCopyOfRetrievalFilter 24 #comfunc global ID3D12InfoQueue_PushRetrievalFilter 25 var #comfunc global ID3D12InfoQueue_PopRetrievalFilter 26 #comfunc global ID3D12InfoQueue_GetRetrievalFilterStackSize 27 #comfunc global ID3D12InfoQueue_AddMessage 28 int,int,int,str #comfunc global ID3D12InfoQueue_AddApplicationMessage 29 int,str #comfunc global ID3D12InfoQueue_SetBreakOnCategory 30 int,int #comfunc global ID3D12InfoQueue_SetBreakOnSeverity 31 int,int #comfunc global ID3D12InfoQueue_SetBreakOnID 32 int,int #comfunc global ID3D12InfoQueue_GetBreakOnCategory 33 int #comfunc global ID3D12InfoQueue_GetBreakOnSeverity 34 int #comfunc global ID3D12InfoQueue_GetBreakOnID 35 int #comfunc global ID3D12InfoQueue_SetMuteDebugOutput 36 int #comfunc global ID3D12InfoQueue_GetMuteDebugOutput 37 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_ID3D12InfoQueue "{0742A90B-C387-483F-B946-30A7E4E61458}" #usecom global ID3D12InfoQueue IID_ID3D12InfoQueue "{}" #comfunc global ID3D12InfoQueue_SetMessageCountLimit 3 int64 #comfunc global ID3D12InfoQueue_ClearStoredMessages 4 #comfunc global ID3D12InfoQueue_GetMessage 5 int64,sptr,sptr #comfunc global ID3D12InfoQueue_GetNumMessagesAllowedByStorageFilter 6 #comfunc global ID3D12InfoQueue_GetNumMessagesDeniedByStorageFilter 7 #comfunc global ID3D12InfoQueue_GetNumStoredMessages 8 #comfunc global ID3D12InfoQueue_GetNumStoredMessagesAllowedByRetrievalFilter 9 #comfunc global ID3D12InfoQueue_GetNumMessagesDiscardedByMessageCountLimit 10 #comfunc global ID3D12InfoQueue_GetMessageCountLimit 11 #comfunc global ID3D12InfoQueue_AddStorageFilterEntries 12 sptr #comfunc global ID3D12InfoQueue_GetStorageFilter 13 sptr,sptr #comfunc global ID3D12InfoQueue_ClearStorageFilter 14 #comfunc global ID3D12InfoQueue_PushEmptyStorageFilter 15 #comfunc global ID3D12InfoQueue_PushCopyOfStorageFilter 16 #comfunc global ID3D12InfoQueue_PushStorageFilter 17 sptr #comfunc global ID3D12InfoQueue_PopStorageFilter 18 #comfunc global ID3D12InfoQueue_GetStorageFilterStackSize 19 #comfunc global ID3D12InfoQueue_AddRetrievalFilterEntries 20 sptr #comfunc global ID3D12InfoQueue_GetRetrievalFilter 21 sptr,sptr #comfunc global ID3D12InfoQueue_ClearRetrievalFilter 22 #comfunc global ID3D12InfoQueue_PushEmptyRetrievalFilter 23 #comfunc global ID3D12InfoQueue_PushCopyOfRetrievalFilter 24 #comfunc global ID3D12InfoQueue_PushRetrievalFilter 25 sptr #comfunc global ID3D12InfoQueue_PopRetrievalFilter 26 #comfunc global ID3D12InfoQueue_GetRetrievalFilterStackSize 27 #comfunc global ID3D12InfoQueue_AddMessage 28 int,int,int,str #comfunc global ID3D12InfoQueue_AddApplicationMessage 29 int,str #comfunc global ID3D12InfoQueue_SetBreakOnCategory 30 int,int #comfunc global ID3D12InfoQueue_SetBreakOnSeverity 31 int,int #comfunc global ID3D12InfoQueue_SetBreakOnID 32 int,int #comfunc global ID3D12InfoQueue_GetBreakOnCategory 33 int #comfunc global ID3D12InfoQueue_GetBreakOnSeverity 34 int #comfunc global ID3D12InfoQueue_GetBreakOnID 35 int #comfunc global ID3D12InfoQueue_SetMuteDebugOutput 36 int #comfunc global ID3D12InfoQueue_GetMuteDebugOutput 37 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。