在 D3d11sdklayers.h 头文件中,D3D11_INFO_QUEUE_FILTER_DESC 结构用于描述信息队列(InfoQueue)的过滤器设置。这个结构通常与 ID3D11InfoQueue::AddRetrievalFilter* 方法一起使用,用于设置或查询信息队列的过滤条件。

以下是 D3D11_INFO_QUEUE_FILTER_DESC 结构的定义:
typedef struct D3D11_INFO_QUEUE_FILTER_DESC {
    D3D11_INFO_QUEUE_FILTER Filter;
    D3D11_INFO_QUEUE_FILTER_DESC1 FilterDesc1;
} D3D11_INFO_QUEUE_FILTER_DESC;

这个结构包含两个成员:

  •  Filter: 一个 D3D11_INFO_QUEUE_FILTER 结构,用于描述过滤器的详细设置。


  •  FilterDesc1: 一个 D3D11_INFO_QUEUE_FILTER_DESC1 结构,用于进一步描述过滤器。


D3D11_INFO_QUEUE_FILTER_DESC1 结构定义如下:
typedef struct D3D11_INFO_QUEUE_FILTER_DESC1 {
    UINT                           NumCategories;
    D3D11_MESSAGE_CATEGORY         pCategoryList[32];
    UINT                           NumSeverities;
    D3D11_MESSAGE_SEVERITY         pSeverityList[4];
    UINT                           NumIDs;
    D3D11_MESSAGE_ID               pIDList[2048];
} D3D11_INFO_QUEUE_FILTER_DESC1;

这个结构的成员包括:

  •  NumCategories: 表示 pCategoryList 数组中元素的数量。


  •  pCategoryList: 一个数组,包含要过滤的消息类别列表。


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


  •  pSeverityList: 一个数组,包含要过滤的消息严重程度列表。


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


  •  pIDList: 一个数组,包含要过滤的消息 ID 列表。


通过设置这些结构的成员,你可以更灵活地定义信息队列的过滤规则。

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

// 设置过滤器
pInfoQueue->AddRetrievalFilterEntries(pDevice, &filterDesc);

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

在这个示例中,我们设置了一个过滤器描述结构,只允许查询属于 D3D11_MESSAGE_CATEGORY_EXECUTION 类别且严重程度为 D3D11_MESSAGE_SEVERITY_CORRUPTION 的消息。


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