多平面覆盖支持

本文介绍 Windows 8.1(WDDM 1.3)中引入的多平面覆盖(MPO)功能。 它列出了系统提供的和驱动程序实现的函数,用于在用户模式显示驱动程序(UMD)和 WDDM 1.3 及更高版本中的内核模式显示微型端口驱动程序(KMD)中支持此功能。 它还列出了与 MPO 一起使用的结构和枚举。

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

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

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

功能 DESCRIPTION
D3D:pfnPresentMultiPlaneOverlayCb 将源 MPO 分配块中的内容复制到目标分配块。
DXGI:pfnPresentMultiPlaneOverlayCb 将源 MPO 分配中的内容复制到目标 MPO 分配中。

UMD 实现的 MPO 函数

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

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

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

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

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

MPO 用户模式结构和枚举

本部分列出了与 MPO DDI 一起使用的用户模式结构和枚举。

结构/枚举 DESCRIPTION
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 函数。

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

MPO 内核模式结构

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

结构 DESCRIPTION
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_PRESENT多平面覆盖信息 (DXGK_PRESENT多平面覆盖信息) 指定要显示的 VidPN 输入和覆盖平面上的信息。
DXGK_PRESENTMULTIPLANEOVERLAYLIST 指定要在对 DxgkDdiPresent 函数的调用中显示的覆盖平面。
DXGKARG_CHECKMULTIPLANEOVERLAYSUPPORT 用于调用 DxgkDdiCheckMultiPlaneOverlaySupport 函数,以检查硬件对 MPO 的支持详细信息。
DXGKARG_CHECKMULTIPLANEOVERLAYSUPPORT2 DXGKARG_CHECKMULTIPLANEOVERLAYSUPPORT2传递给 DxgkDdiCheckMultiPlaneOverlaySupport2 函数,以确定是否支持特定的多平面覆盖配置。
DXGKARG_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY 包含 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay 函数的参数。
DXGKARG_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY2 DXGKARG_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY2传递给 DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2 函数以更改显示的覆盖配置。

MPO 内核模式枚举

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

枚举 DESCRIPTION
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值指示 UMD 对 MPO 的支持。