PFND3DDDI_CHECKCOUNTER回调函数 (d3dumddi.h)

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 结尾的字符串的大小(以字节为单位)的变量。

下面是对 pNameLengthpszName 参数的值的限制:

  • pNameLength 可以为 NULL,在这种情况下,应用不需要名称或名称长度。
  • 如果 pszName 为 NULL 且 pNameLength 为 NULL,则忽略 pNameLength 的输入值,并且必须通过 pNameLength 参数返回字符串(包括终止 NULL 字符)的长度。
  • 如果 pszNamepNameLength 都不是 NULL, 驱动程序必须检查 pNameLength 的输入值,以确保分配的缓冲区中有足够的空间,然后通过 pNameLength 参数传递 pszName 字符串(包括终止 NULL 字符)的长度。

unnamedParam7

[out, optional] pszUnits 是一个可选指针,驱动程序将返回以 NULL 结尾的字符串,该字符串包含计数器标识符度量单位的名称。

可以为 NULL,在这种情况下,应用不需要单位信息。 有关详细信息,请参阅 pUnitsLength 参数的说明。

pUnitsLength

[in, out, optional] pUnitsLength 是一个可选指针,用于接收 pszUnits 参数指定的 NULL 终止字符串的大小(以字节为单位)。

下面是 pUnitsLengthpszUnits 参数的值的限制:

  • pUnitsLength 可以为 NULL,在这种情况下,应用不需要单位名称或单位名称长度。
  • 如果 pszUnits 为 NULL,并且 pUnitsLength 不为 NULL,则忽略 pUnitsLength 的输入值,并且必须通过 pUnitsLength 参数返回字符串(包括终止 NULL 字符)的长度。
  • 如果 pszUnitspUnitsLength 都不是 NULL, 驱动程序必须检查 pUnitsLength 的输入值,以确保分配的缓冲区中有足够的空间,然后通过 pUnitsLength 参数传递 pszUnits 字符串(包括终止 NULL 字符)的长度。

unnamedParam9

[out, optional] pszDescription 是驱动程序返回 NULL 终止字符串的可选指针,其中包含计数器标识符度量值的说明。

可以为 NULL,在这种情况下,应用不需要说明信息。 有关详细信息,请参阅 pDescriptionLength 参数的说明。

pDescriptionLength

[in, out, optional] pDescriptionLength 是一个可选指针,用于接收 pszDescription 参数指定的 NULL 终止字符串的大小(以字节为单位)。

下面是 pDescriptionLengthpszDescription 参数的值的限制:

  • pDescriptionLength 可以为 NULL,在这种情况下,应用不需要单位名称或单位名称长度。
  • 如果 pszDescription 为 NULL,并且 pDescriptionLength 为 NULL,则忽略 pDescriptionLength 的输入值,并且必须通过 pDescriptionLength 参数返回字符串(包括终止 NULL 字符)的长度。
  • 如果 pszDescriptionpDescriptionLength 都不是 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)

另请参阅

CheckCounter

D3DDDIQUERYTYPE