支持 GetDriverInfo2

DirectX 8.0 DDI 引入了一种用于查询驱动程序信息的新机制。 此机制扩展现有的 DdGetDriverInfo 入口点,以查询驱动程序的其他信息。 目前,此机制仅用于查询 DX8 样式 D3D 大写字母。

注意 当你阅读以下内容时,你可能会质疑为什么需要 GetDriverInfo2 机制。 似乎最好只是定义驱动程序将通过返回 D3DCAP8 结构来处理的新 GetDriverInfo GUID。 以下段落中介绍的 GetDriverInfo2 是一种机制,用于最大程度地减少 Windows 操作系统所需的更改,以启用 DirectX 8.0 级别功能,从而使重新分发 DirectX 8.0 运行时变得可行。

GetDriverInfo 的此扩展采用 DdGetDriverInfo 调用的形式,GUID_GetDriverInfo2。 当驱动程序收到具有该 GUID 的 DdGetDriverInfo 调用时,它必须检查在DD_GETDRIVERINFODATA数据结构的 lpvData 字段中传递的数据结构,以查看请求的信息。 如下所述, lpvData 可以指向 DD_GETDRIVERINFO2DATADD_STEREOMODE 结构。

GUID_GetDriverInfo2与 GUID_DDStereoMode 的 GUID 值相同。 如果驱动程序未处理GUID_DDStereoMode,则这不是问题。 但是,如果 DirectX 8.0 驱动程序处理GUID_DDStereoMode,请注意,当使用 GUID_GetDriverInfo2 (GUID_DDStereoMode) 调用 DdGetDriverInfo 时,运行时会将 DD_STEREOMODE 结构的 dwHeight 字段设置为D3DGDI2_MAGIC的特殊值。 此字段对应于DD_GETDRIVERINFO2DATA结构的 dwMagic 字段。 因此,通过将 lpvData 指针强制转换为指向DD_STEREOMODE结构的指针或指向DD_GETDRIVERINFO2DATA结构的指针,并检查相应字段的值 (dwHeightdwMagic) 的值D3DGDI2_MAGIC,可以区分用于确定立体声模式功能的调用或 Direct3D 8.0 功能的请求。

驱动程序确定这是对 GetDriverInfo2 的调用后,它必须确定运行时请求的信息类型。 此类型包含在DD_GETDRIVERINFO2DATA数据结构的 dwType 字段中。

最后,驱动程序将请求的数据复制到提供的缓冲区中。 请务必注意,DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向要向其复制所请求数据的缓冲区。 lpvData 还指向DD_GETDRIVERINFO2DATA结构。 这意味着驱动程序返回的数据会覆盖 (DD_GETDRIVERINFO2DATA结构,因此,DD_GETDRIVERINFO2DATA结构会占用缓冲区) 的前几个 DWORD。

若要使用 GetDriverInfo2 调用并报告 DirectX 8.0 功能,驱动程序必须在驱动程序返回的 DD_HALINFO 结构的 dwFlags 字段中设置新标志 DDHALINFO_GETDRIVERINFO2 。 如果未设置此标志,则运行时不会向驱动程序发送 GetDriverInfo2 调用,并且不会将驱动程序识别为 DirectX 8.0 级别驱动程序。

运行时使用类型为 D3DGDI2_TYPE_DXVERSION 的 GetDriverInfo2 来通知驱动程序应用程序正在使用的当前 DX 运行时版本。 运行时提供指向 DD_GETDRIVERINFODATA 的lpvData 字段中DD_DXVERSION结构的指针。