D3D11_INFO_QUEUE_FILTER 结构用于设置或检索信息队列(InfoQueue)的过滤器。这个结构定义在 D3d11sdklayers.h 头文件中,用于 Direct3D 11 调试层(Debug Layer)。

以下是 D3D11_INFO_QUEUE_FILTER 结构的定义:
typedef struct D3D11_INFO_QUEUE_FILTER {
    D3D11_MESSAGE_CATEGORY         AllowList;
    D3D11_MESSAGE_CATEGORY         DenyList;
    D3D11_MESSAGE_SEVERITY         Severity;
    UINT                           NumSeverities;
    D3D11_MESSAGE_ID               pSeverityList;
    UINT                           NumIDs;
    D3D11_MESSAGE_ID               pIDList;
} D3D11_INFO_QUEUE_FILTER;

各个成员的含义如下:

  •  AllowList: 一个值为 D3D11_MESSAGE_CATEGORY 的枚举,表示允许显示的消息类别。


  •  DenyList: 一个值为 D3D11_MESSAGE_CATEGORY 的枚举,表示拒绝显示的消息类别。


  •  Severity: 一个值为 D3D11_MESSAGE_SEVERITY 的枚举,表示允许显示的消息严重程度。


  •  NumSeverities: 表示 pSeverityList 数组中元素的数量。


  •  pSeverityList: 一个数组,包含要允许显示的消息严重程度列表。


  •  NumIDs: 表示 pIDList 数组中元素的数量。


  •  pIDList: 一个数组,包含要允许显示的消息 ID 列表。


通过设置这些成员,你可以控制调试层输出的消息类型和级别,以便更好地调试 Direct3D 11 应用程序。

以下是一个简单的使用示例:
D3D11_INFO_QUEUE_FILTER filter = {};
filter.AllowList = D3D11_MESSAGE_CATEGORY_EXECUTION;
filter.Severity = D3D11_MESSAGE_SEVERITY_CORRUPTION;

// 设置过滤器
pInfoQueue->PushStorageFilter(pDevice, &filter);

// 在这之后,只有 D3D11_MESSAGE_CATEGORY_EXECUTION 类别和 D3D11_MESSAGE_SEVERITY_CORRUPTION 严重程度的消息会被输出

在这个示例中,我们设置了一个过滤器,只允许输出属于 D3D11_MESSAGE_CATEGORY_EXECUTION 类别且严重程度为 D3D11_MESSAGE_SEVERITY_CORRUPTION 的消息。这有助于聚焦在特定类型和级别的问题上进行调试。


转载请注明出处:http://www.pingtaimeng.com/article/detail/25868/Win32 API/D3d11sdklayers.h/D3D11_INFO_QUEUE_FILTER