多平面覆盖支持

多平面覆盖(MPO)支持是一项 WDDM 功能,它允许图形硬件将多层内容组合到一个图像中,然后它可以在屏幕上显示。 它本质上是一种硬件加速的方法,用于组合不同的内容“平面”(其中平面可以是视频、桌面、应用程序窗口等),而无需涉及 CPU 或使用其他系统资源来执行软件的混合。

MPO 功能从 Windows 8.1(WDDM 1.3)开始可用。 本文介绍如何在驱动程序中实现此功能。

用户模式显示驱动程序调用的 MPO 函数

下表列出了操作系统实现的用户模式 MPO 函数,以及用户模式显示驱动程序(UMD)可以调用。

函数 说明
pfnPresentMultiPlaneOverlayCb (D3D) 将源 MPO 分配中的内容复制到目标分配。
pfnPresentMultiPlaneOverlayCb (DXGI) 将源 MPO 分配中的内容复制到目标分配。

UMD 实现的 MPO 函数

本部分包含 WDDM 1.3 及更高版本的 UMD 必须实现的函数才能支持 MPO。

下表列出了 UMD 为了支持 MPO 而必须实现的函数。

函数 说明
pfnCheckMultiPlaneOverlaySupport (D3D) Direct3D 运行时调用,以检查 MPO 的硬件支持的详细信息。
pfnCheckMultiPlaneOverlaySupport (DXGI) DirectX 图形基础结构(DXGI)运行时调用,以检查 MPO 的硬件支持的详细信息。
pfnPresentMultiplaneOverlay (D3D) Direct3D 运行时调用以通知 UMD 应用程序已完成呈现并请求 UMD 显示源图面。 驱动程序应通过复制、翻转或执行颜色填充操作来显示此图面。
pfnPresentMultiplaneOverlay (DXGI) DXGI 运行时调用以通知 UMD 应用程序已完成呈现并请求 UMD 显示源图面。 驱动程序应通过复制、翻转或执行颜色填充操作来显示图面。

下表列出了 UMD 可以选择实现的函数。

函数 说明
pfnGetMultiPlaneOverlayCaps DXGI 运行时调用以请求 UMD 获取基本覆盖平面功能。
pfnGetMultiplaneOverlayGroupCaps DXGI 运行时调用以请求 UMD 获取一组覆盖平面功能。

MPO 用户模式结构和枚举

与 MPO 设备驱动程序接口(DDI)一起使用的所有用户模式结构和枚举。

DDI 说明
D3DDDI_MULTIPLANE_ALLOCATION_INFO 指定有关 MPO 分配的信息。
D3DDDI_MULTIPLANE_OVERLAY_ATTRIBUTES UMD 用于指定覆盖平面属性。
D3DDDI_MULTIPLANE_OVERLAY_BLEND 标识要对覆盖平面执行的混合操作。
D3DDDI_MULTIPLANE_OVERLAY_CAPS UMD 用于指定覆盖平面功能。
D3DDDI_MULTIPLANE_OVERLAY_FEATURE_CAPS 标识覆盖功能。
D3DDDI_MULTIPLANE_OVERLAY_FLAGS 标识要对覆盖平面执行的翻转操作。
D3DDDI_MULTIPLANE_OVERLAY_GROUP_CAPS 由 UMD 用来指定一组覆盖平面功能。
D3DDDI_MULTIPLANE_OVERLAY_GROUP_CAPS_INPUT 指定有关 MPO 功能组的信息。
D3DDDI_MULTIPLANE_OVERLAY_STRETCH_QUALITY 标识硬件在拉伸或收缩 MPO 数据时应执行的筛选过程。
D3DDDI_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT 标识覆盖平面的视频帧格式。 仅支持D3DDDI_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT_PROGRESSIVE值。
D3DDDI_MULTIPLANE_OVERLAY_YCbCr_FLAGS 标识描述 MPO 的 YUV 范围和转换信息。
D3DDDI_PRESENT_MULTIPLANE_OVERLAY 指定要显示的覆盖平面。
D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT 用于调用 pfnCheckMultiPlaneOverlaySupport (D3D) 函数,以检查 MPO 的硬件支持的详细信息。
D3DDDIARG_PRESENTMULTIPLANEOVERLAY 指定要显示的 MPO 资源。
D3DDDICB_PRESENTMULTIPLANEOVERLAY 描述内容复制到/从中复制的 MPO 分配。

MPO 内核模式驱动程序实现的函数

下表列出了内核模式显示微型端口驱动程序 (KMD) 实现的 MPO 函数。

函数 说明
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT DirectX 图形内核子系统调用,以检查 MPO 的硬件支持的详细信息。
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 调用以下函数以确定是否支持特定的多平面覆盖配置。
DXGKDDI_GETMULTIPLANEOVERLAYCAPS 调用以检索 MPO 功能。 任何想要支持多个平面的 WDDM 2.2 驱动程序都需要对此 DDI 的支持。
DXGKDDI_POSTMULTIPLANEOVERLAYPRESENT 在新的多平面覆盖配置生效后调用,使驱动程序能够优化硬件状态。 对于支持多平面覆盖的 WDDM 1.3 2.0 或更高版本驱动程序,可选。
DXGKDDI_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY3 调用以更改显示的覆盖配置。
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT2 将调用 DxgkDdiCheckMultiPlaneOverlaySupport2 来确定是否支持特定的多平面覆盖配置。
DXGKDDI_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY 设置多个图面的地址,包括桌面窗口管理器(DWM)的交换链,这些交换链与特定的视频呈现源相关联。 此函数用于向屏幕显示多个图面(包括 DWM 的交换链)。
DXGKDDI_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY2 将调用 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2 以更改显示的覆盖配置。

MPO 内核模式结构

下表列出了 KMD 使用的结构。

结构 说明
DXGK_CHECK_MULTIPLANE_OVERLAY_SUPPORT_PLANE 指定硬件为 MPO 提供的支持属性。
DXGK_CHECK_MULTIPLANE_OVERLAY_SUPPORT_RETURN_INFO 指定 MPO 的硬件支持限制。
DXGK_MULTIPLANE_OVERLAY_ATTRIBUTES 由 KMD 用来指定覆盖平面属性。
DXGK_MULTIPLANE_OVERLAY_ATTRIBUTES2 KMD 使用DXGK_MULTIPLANE_OVERLAY_ATTRIBUTES2来指定覆盖平面属性。
DXGK_MULTIPLANE_OVERLAY_BLEND 标识要对覆盖平面执行的混合操作。
DXGK_MULTIPLANE_OVERLAY_FLAGS 标识要对覆盖平面执行的翻转操作。
DXGK_MULTIPLANE_OVERLAY_PLANE 指定要在调用 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay 函数时显示的覆盖平面。
DXGK_MULTIPLANE_OVERLAY_PLANE2 DXGK_MULTIPLANE_OVERLAY_PLANE2与 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2 函数一起使用,以指定要显示的覆盖平面。
DXGK_MULTIPLANE_OVERLAY_PLANE_WITH_SOURCE DXGK_MULTIPLANE_OVERLAY_PLANE_WITH_SOURCE介绍了多平面覆盖平面属性、分配和视频呈现网络源标识号。
DXGK_MULTIPLANE_OVERLAY_VSYNC_INFO 指定要在 VSync 间隔期间显示的覆盖平面。
DXGK_MULTIPLANE_OVERLAY_YCbCr_FLAGS 标识描述 MPO 的 YUV 范围和转换信息。
DXGK_PRESENTMULTIPLANEOVERLAYINFO 指定要显示的 VidPN 输入和覆盖平面上的信息。
DXGK_PRESENTMULTIPLANEOVERLAYLIST 指定要在对 DxgkDdiPresent 函数的调用中显示的覆盖平面。
DXGKARG_CHECKMULTIPLANEOVERLAYSUPPORT 用于调用 DxgkDdiCheckMultiPlaneOverlaySupport 函数,以检查 MPO 的硬件支持的详细信息。
DXGKARG_CHECKMULTIPLANEOVERLAYSUPPORT2 DXGKARG_CHECKMULTIPLANEOVERLAYSUPPORT2传递给 DxgkDdiCheckMultiPlaneOverlaySupport2 函数,以确定是否支持特定的多平面覆盖配置。
DXGKARG_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY 包含 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay 函数的参数。
DXGKARG_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY2 DXGKARG_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY2传递给 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2 函数以更改显示的覆盖配置。

MPO 内核模式枚举

下表列出了 KMD 使用的枚举。

枚举 说明
DXGK_MULTIPLANE_OVERLAY_STEREO_FLIP_MODE 标识覆盖平面的立体声翻转模式。 仅支持DXGK_MULTIPLANE_OVERLAY_STEREO_FLIP_NONE值。
DXGK_MULTIPLANE_OVERLAY_STEREO_FORMAT 标识覆盖平面的立体声演示格式。 仅支持DXGK_MULTIPLANE_OVERLAY_STEREO_FORMAT_MONO值。
DXGK_MULTIPLANE_OVERLAY_STRETCH_QUALITY 标识硬件在拉伸或收缩 MPO 数据时应执行的筛选过程。
DXGK_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT 标识覆盖平面的视频帧格式。 仅支持DXGK_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT_PROGRESSIVE值。

D3DDDICAPS_TYPE中的D3DDDICAPS_GET_MULTIPLANE_OVERLAY_GROUP_CAPS值指示对 MPO 的 UMD 支持。