覆盖 DDI

本部分仅适用于 Windows 7 及更高版本以及 Windows Server 2008 R2 及更高版本的 Windows 操作系统。

覆盖 DDI 是 Direct3D 版本 9 DDI 的扩展,用于验证覆盖支持。 覆盖 DDI 由以下入口点组成:

  • Direct3D 运行时使用D3DDDICAPS_TYPE枚举中的 D3DDDICAPS_CHECKOVERLAYSUPPORT 值来验证显示设备是否支持特定的覆盖。 运行时在D3DDDIARG_GETCAPS结构的Type 成员中设置D3DDDICAPS_CHECKOVERLAYSUPPORT,当运行时调用 GetCaps 时,驱动程序的 GetCaps 函数的 pData 参数指向该成员。 运行时还将 D3DDDIARG_GETCAPS 的 pInfo 成员设置为指向描述覆盖的 DDICHECKOVERLAYSUPPORTINPUT 结构的指针。 如果驱动程序支持覆盖,则驱动程序设置 D3DOVERLAYCAPS 结构的成员,并在 D3DDDIARG_GETCAPSpData 成员中返回指向此结构的指针。 否则,如果驱动程序不支持覆盖,驱动程序将无法调用其 GetCaps 函数,并D3DDDIERR_UNSUPPORTEDOVERLAYFORMAT或D3DDDIERR_UNSUPPORTEDOVERLAY,具体取决于缺少支持是否基于覆盖格式。 DirectX SDK 文档中介绍了 D3DOVERLAYCAPS。

    驱动程序设置 D3DOVERLAYCAPS 的 MaxOverlayDisplayWidthMaxOverlayDisplayHeight 成员,以指示驱动程序和硬件可能具有的任何限制,这些限制涉及在拉伸覆盖数据) 后的最终覆盖大小 (。

    驱动程序在 D3DOVERLAYCAPS 的 Caps 成员中设置D3DOVERLAYCAPS_STRETCHX (0x00000040) 和D3DOVERLAYCAPS_STRETCHY (0x00000080) 功能位,以指示覆盖硬件能够任意拉伸和收缩覆盖数据。 驱动程序不应尝试模拟通过 GPU 的覆盖拉伸,并且只应在覆盖硬件支持拉伸时设置这些上限。 应用程序在视频处理和合成阶段执行 GPU 拉伸所需的开销通常比驱动程序在最末端执行单独的传递来模拟覆盖拉伸所需的开销更少。

  • 驱动程序应处理 来自 D3DDDI_OVERLAYINFOFLAGS 结构的以下新位字段标志。 D3DDDI_OVERLAYINFOFLAGS 结构标识要执行的覆盖操作的类型。 D3DDDI_OVERLAYINFOFLAGS 结构在调用驱动程序的 CreateOverlayUpdateOverlay 函数时,在 D3DDDI_OVERLAYINFO 结构的 Flags 成员中指定。

    LimitedRGB
    覆盖是有限的范围 RGB,而不是全范围 RGB。 在有限范围 RGB 中,RGB 范围被压缩为 16:16:16 为黑色,235:235:235 为白色。

    YCbCrBT709
    覆盖层为 BT.709,表示高清电视 (HDTV) ,而不是 BT.601。

    YCbCrxvYCC
    覆盖是扩展的 YCbCr (xvYCC) ,而不是传统的 YCbCr。

  • 例如,当显示格式为 64 位而不是 32 位 (时,当桌面 Windows 管理器 (DWM) 将D3DFMT_A16B16G16R16F用于显示模式) 时,运行时将覆盖色键的下 32 位放置在 D3DDDI_OVERLAYINFO 结构的 DstColorKeyLow 成员中,并将高 32 位放置在 D3DDDI_OVERLAYINFO 的 DstColorKeyHigh 成员中。