DD_GETDRIVERINFO2DATA 结构 (d3dhal.h)
仅限 DirectX 8.0 及更高版本。
在 DdGetDriverInfo 调用的 DD_GETDRIVERINFODATA 的 guidInfo 成员中指定GUID_GetDriverInfo2时,DD_GETDRIVERINFO2DATA在 DD_GETDRIVERINFODATA 结构的 lpvData 成员中传递。
语法
typedef struct _DD_GETDRIVERINFO2DATA {
DWORD dwReserved;
DWORD dwMagic;
DWORD dwType;
DWORD dwExpectedSize;
} DD_GETDRIVERINFO2DATA;
成员
dwReserved
指定保留字段。 驱动程序不应读取或写入。
dwMagic
指定 magic 数字。 如果这是 GetDriverInfo2 调用,则具有D3DGDI2_MAGIC值。 否则,此结构实际上是 DD_STEREOMODE 调用。
dwType
指定所请求的信息类型,可包含以下D3DGDI2_TYPE_Xxx 值之一。 驱动程序应仅读取 (不) 此成员写入。
值 | 含义 |
---|---|
D3DGDI2_TYPE_DEFER_AGP_FREES | 仅限基于 NT 的操作系统。 用于通知驱动程序它应正确处理图面 AGP 内存 的破坏。 运行时提供指向 DD_GETDRIVERINFODATA 数据结构的 lpvData 字段中DD_FREE_DEFERRED_AGP_DATA结构的指针。 驱动程序有时会在显示模式发生更改之前收到此通知。 运行时仅在用于执行显示模式更改时发送此通知。 驱动程序应检查进程标识符 (PID) 销毁图面的进程与创建图面的进程。 如果 PID 不同,驱动程序可能不应销毁 AGP 内存的用户模式映射,因为应用程序可能仍在使用该内存。 |
D3DGDI2_TYPE_DEFERRED_AGP_AWARE | 仅限基于 NT 的操作系统。 用于通知驱动程序运行时在适当时间发送D3DGDI2_TYPE_FREE_DEFERRED_AGP和D3DGDI2_TYPE_DEFER_AGP_FREES通知, (例如,在释放) 最后一个未完成 的 AGP 内存 锁之后。 运行时提供指向 DD_GETDRIVERINFODATA数据 结构的 lpvData 字段中DD_DEFERRED_AGP_AWARE_DATA结构的指针。 |
D3DGDI2_TYPE_DXVERSION | 用于通知驱动程序应用程序正在使用的当前 DX 运行时版本。 运行时提供指向 DD_GETDRIVERINFODATA 数据结构的 lpvData 字段中DD_DXVERSION结构的指针。 |
D3DGDI2_TYPE_FREE_DEFERRED_AGP | 仅限基于 NT 的操作系统。 用于通知驱动程序现在可以安全地销毁 AGP 内存 的所有用户模式映射。 当图面被破坏并收到D3DGDI2_TYPE_DEFER_AGP_FREES通知时,驱动程序会保留这些用户模式映射。 运行时提供指向 DD_GETDRIVERINFODATA 数据结构的 lpvData 字段中DD_FREE_DEFERRED_AGP_DATA结构的指针。 当进程中的所有显示设备停止使用在显示模式更改时锁定的图面、纹理、顶点缓冲区和索引缓冲区时,驱动程序会收到此通知。 |
D3DGDI2_TYPE_GETADAPTERGROUP | 仅限 DirectX 9.0 及更高版本。 用于在驱动程序中查询属于其多头视频卡适配器组的标识。 此组共享视频硬件,如视频内存和 3D 加速器。 驱动程序应将DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向的数据结构设置为 DD_GETADAPTERGROUPDATA。 |
D3DGDI2_TYPE_GETD3DCAPS8 | 此类型指示运行时请求接收D3DCAPS8结构,从而提供设备的 DirectX 8.0 样式功能。 驱动程序应将初始化D3DCAPS8结构复制到DD_GETDRIVERINFODATA结构的 lpvData 字段中。 |
D3DGDI2_TYPE_GETD3DCAPS9 | 仅适用于 DirectX 9.0 及更高版本。 此类型指示运行时请求接收D3DCAPS9结构,从而提供设备的 DirectX 9.0 样式功能。 驱动程序应将初始化D3DCAPS9结构复制到DD_GETDRIVERINFODATA结构的 lpvData 字段中。 |
D3DGDI2_TYPE_GETD3DQUERY | 仅限 DirectX 9.0 及更高版本。 用于查询驱动程序,以获取有关它支持的特定查询类型的信息。 驱动程序应将DD_GETDRIVERINFODATA数据结构的lpvData 字段指向的数据结构设置为 DD_GETD3DQUERYDATA。 |
D3DGDI2_TYPE_GETD3DQUERYCOUNT | 仅限 DirectX 9.0 及更高版本。 用于查询驱动程序所支持的查询类型数。 驱动程序应将DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向的数据结构设置为 DD_GETD3DQUERYCOUNTDATA。 |
D3DGDI2_TYPE_GETDDIVERSION | 仅限 DirectX 9.0 及更高版本。 用于查询驱动程序支持的 DDI 版本;此 DDI 版本又取决于发出此请求的 DirectX 版本。 驱动程序应将 DD_GETDDIVERSIONDATA 结构的 dwDDIVersion 成员(DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向)设置为相应的 DDI 版本。 |
D3DGDI2_TYPE_GETEXTENDEDMODE | 仅限 DirectX 9.0 及更高版本。 用于查询驱动程序,以获取有关它支持的特定扩展显示模式的信息。 驱动程序应将DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向的数据结构设置为 DD_GETEXTENDEDMODEDATA。 |
D3DGDI2_TYPE_GETEXTENDEDMODECOUNT | 仅限 DirectX 9.0 及更高版本。 用于查询驱动程序支持的扩展显示模式的数量。 驱动程序应将DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向的数据结构设置为 DD_GETEXTENDEDMODECOUNTDATA。 |
D3DGDI2_TYPE_GETFORMAT | 用于从驱动程序查询特定图面格式。 DD_GETDRIVERINFODATA数据结构的 lpvDatafield 指向的数据结构 DD_GETFORMATDATA 。 |
D3DGDI2_TYPE_GETFORMATCOUNT | 用于请求驱动程序支持的 DirectX 8.0 及更高样式图面格式的数量。 DD_GETFORMATCOUNTDATA DD_GETDRIVERINFODATA的 thelpvData 字段指向的数据结构。 |
D3DGDI2_TYPE_GETMULTISAMPLEQUALITYLEVELS | 仅限 DirectX 9.0 及更高版本。 用于查询驱动程序中它支持的给定呈现目标格式的多样本质量级别数。 无论显示设备支持可掩码还是可子掩码多重采样,设备的驱动程序都必须提供D3DMULTISAMPLE_NONMASKABLE多样本类型的质量级别数。 驱动程序应将DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向的数据结构设置为 DD_MULTISAMPLEQUALITYLEVELSDATA。 |
dwExpectedSize
指定所请求信息的预期大小(以字节为单位)。 驱动程序应仅读取 (不) 此成员写入。
注解
发出 GetDriverInfo2 请求时,不使用 DD_GETDRIVERINFODATA 结构的 dwExpectedSize 成员。 在这种情况下,其值未定义,应忽略。 而是在 DD_GETDRIVERINFO2DATA 的 dwExpectedSize 成员中找到数据的实际预期大小。
以下代码片段演示如何处理 GetDriverInfo2:
D3DCAPS8 myD3DCaps8 = { ... };
DWORD CALLBACK
DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA lpData)
{
if (MATCH_GUID((lpData->guidInfo), GUID_GetDriverInfo2))
{
ASSERT(NULL != lpData);
ASSERT(NULL != lpData->lpvData);
// Is this a call to GetDriverInfo2 or DDStereoMode?
if (((DD_GETDRIVERINFO2DATA*)(lpData->lpvData))->dwMagic
== D3DGDI2_MAGIC)
{
// Yes, it's a call to GetDriverInfo2, fetch the
// DD_GETDRIVERINFO2DATA data structure.
DD_GETDRIVERINFO2DATA* pgdi2 = lpData->lpvData;
ASSERT(NULL != pgdi2);
// What type of request is this?
switch (pgdi2->dwType)
{
case D3DGDI2_TYPE_GETD3DCAPS8:
{
// The runtime is requesting the DX8 D3D caps
// so copy them over now. It should be noted
// that the dwExpectedSize field of
// DD_GETDRIVERINFODATA is not used for
// GetDriverInfo2 calls and should be ignored.
size_t copySize = min(
sizeof(myD3DCaps8), pgdi2->dwExpectedSize);
memcpy(lpData->lpvData, &myD3DCaps8, copySize);
lpData->dwActualSize = copySize;
lpData->ddRVal = DD_OK;
return DDHAL_DRIVER_HANDLED;
}
default:
// For any other GetDriverInfo2 types not handled
// or understood by the driver set a ddRVal of
// DDERR_CURRENTLYNOTAVAIL and return
// DDHAL_DRIVER_HANDLED.
return DDHAL_DRIVER_HANDLED;
}
}
else
{
// It must be a call to request for stereo mode support.
// Fetch the stereo mode data
DD_STEREOMODE* pStereoMode = lpData->lpvData;
ASSERT(NULL != pStereoMode);
// Process the stereo mode request...
lpData->dwActualSize = sizeof(DD_STEREOMODE);
lpData->ddRVal = DD_OK;
return DDHAL_DRIVER_HANDLED;
}
}
// Handle any other device GUIDs...
} // DdGetDriverInfo
有关D3DCAPS8和D3DCAPS9的详细信息,请参阅 DirectX SDK 文档。
要求
要求 | 值 |
---|---|
Header | d3dhal.h (包括 D3dhal.h) |