Direct3D 运行时调用 PFND3DDDI_CHECKCOUNTER 以检索描述计数器的信息。 必须由 Windows 显示驱动程序模型 (WDDM) 1.3 及更高版本的用户模式显示驱动程序实现。
语法
PFND3DDDI_CHECKCOUNTER Pfnd3dddiCheckcounter;
HRESULT Pfnd3dddiCheckcounter(
HANDLE hDevice,
D3DDDIQUERYTYPE unnamedParam2,
D3DDDI_COUNTER_TYPE *unnamedParam3,
UINT *unnamedParam4,
LPSTR unnamedParam5,
UINT *pNameLength,
LPSTR unnamedParam7,
UINT *pUnitsLength,
LPSTR unnamedParam9,
UINT *pDescriptionLength
)
{...}
参数
hDevice
[in]显示设备的句柄(图形上下文)。
unnamedParam2
[in] 计数器 是一个类型 D3DDDIQUERYTYPE 的值,用于标识要为其检索信息的计数器标识符。
unnamedParam3
[out] pType 是一个指针,该变量接收用于标识计数器输出的数据类型的 D3DDDI_COUNTER_TYPE 枚举值。
unnamedParam4
pActiveCounters [out] pActiveCounters 是指向一个变量的指针,该变量接收为创建 计数器 参数标识的计数器标识符而分配的同时活动计数器数。
unnamedParam5
[out, optional] pszName 是一个可选指针,驱动程序将返回 NULL 终止的字符串,该字符串包含计数器标识符的名称。
可以为 NULL,在这种情况下,应用不需要名称。
pNameLength
[in, out, optional]一个可选指针,该指针指向接收 pszName 参数所指定以 NULL 结尾的字符串的大小(以字节为单位)的变量。
下面是对 pNameLength 和 pszName 参数的值的限制:
- pNameLength 可以为 NULL,在这种情况下,应用不需要名称或名称长度。
- 如果 pszName 为 NULL 且 pNameLength 为 NULL,则忽略 pNameLength 的输入值,并且必须通过 pNameLength 参数返回字符串(包括终止 NULL 字符)的长度。
- 如果 pszName 和 pNameLength 都不是 NULL, 驱动程序必须检查 pNameLength 的输入值,以确保分配的缓冲区中有足够的空间,然后通过 pNameLength 参数传递 pszName 字符串(包括终止 NULL 字符)的长度。
unnamedParam7
[out, optional] pszUnits 是一个可选指针,驱动程序将返回以 NULL 结尾的字符串,该字符串包含计数器标识符度量单位的名称。
可以为 NULL,在这种情况下,应用不需要单位信息。 有关详细信息,请参阅 pUnitsLength 参数的说明。
pUnitsLength
[in, out, optional] pUnitsLength 是一个可选指针,用于接收 pszUnits 参数指定的 NULL 终止字符串的大小(以字节为单位)。
下面是 pUnitsLength 和 pszUnits 参数的值的限制:
- pUnitsLength 可以为 NULL,在这种情况下,应用不需要单位名称或单位名称长度。
- 如果 pszUnits 为 NULL,并且 pUnitsLength 不为 NULL,则忽略 pUnitsLength 的输入值,并且必须通过 pUnitsLength 参数返回字符串(包括终止 NULL 字符)的长度。
- 如果 pszUnits 和 pUnitsLength 都不是 NULL, 驱动程序必须检查 pUnitsLength 的输入值,以确保分配的缓冲区中有足够的空间,然后通过 pUnitsLength 参数传递 pszUnits 字符串(包括终止 NULL 字符)的长度。
unnamedParam9
[out, optional] pszDescription 是驱动程序返回 NULL 终止字符串的可选指针,其中包含计数器标识符度量值的说明。
可以为 NULL,在这种情况下,应用不需要说明信息。 有关详细信息,请参阅 pDescriptionLength 参数的说明。
pDescriptionLength
[in, out, optional] pDescriptionLength 是一个可选指针,用于接收 pszDescription 参数指定的 NULL 终止字符串的大小(以字节为单位)。
下面是 pDescriptionLength 和 pszDescription 参数的值的限制:
- pDescriptionLength 可以为 NULL,在这种情况下,应用不需要单位名称或单位名称长度。
- 如果 pszDescription 为 NULL,并且 pDescriptionLength 为 NULL,则忽略 pDescriptionLength 的输入值,并且必须通过 pDescriptionLength 参数返回字符串(包括终止 NULL 字符)的长度。
- 如果 pszDescription 和 pDescriptionLength 都不是 NULL, 驱动程序必须检查 pDescriptionLength 的输入值,以确保分配的缓冲区中有足够的空间,然后通过 pDescriptionLength 参数传递 pszDescription 字符串(包括终止 NULL 字符)的长度。
返回值
如果此例程成功,它将返回S_OK。 否则,它将返回 HRESULT 错误代码,包括以下内容:
| 返回代码 | 描述 |
|---|---|
| E_INVALIDARG | 请求超出范围的设备依赖计数器,或者字符串长度不够大,无法容纳整个字符串。 尽管此函数中使用的所有字符串都基于 Unicode,但它们始终位于英语区域设置中,并且不会本地化为其他区域设置。 |
言论
此函数的行为应类似于支持 Microsoft Direct3D 10 及更高版本的 CheckCounter 函数。
计数器通常由捕获帧并播放多次的工具使用。 记录准确计时信息的传递与其他传递分开。 在以后的传递中,每次使用不同的计数器集。 优先级应是获取计数器结果的准确关联来绘制调用,并且可以牺牲播放期间产生的开销。 驱动程序必须插入刷新调用或等待空闲调用,以确保准确关联。
通常,应用可以同时监视少量可能的本机计数器,这可能以数百为单位。 此外,驱动程序必须指示通过监视 D3DDDIQUERYTYPE 枚举中每个支持的计数器 ID(已知计数器 ID 和设备特定的计数器 ID)使用的活动计数器数。 例如,驱动程序可以指示监视 FillRateUtilized 变量需要最多 4 个同时处于活动状态的计数器(由 pActiveCounters 参数指示)。 因此,只要该计数器 ID 需要一个或多个活动计数器,应用也可以监视另一个计数器 ID。
如果始终可以监视计数器 ID(并且不会干扰监视任何其他计数器 ID),则计数器 ID 所需的同时活动计数器数可以为零。
要求
| 要求 | 价值 |
|---|---|
| 最低支持的客户端 | Windows 8.1 |
| 支持的最低服务器 | Windows Server 2012 R2 |
| 目标平台 | 桌面 |
| 标头 | d3dumddi.h(包括 D3d10umddi.h) |