多平面覆盖支持
多平面覆盖(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。
调用特定于适配器的 CreateDevice(D3D10)函数时,UMD 通过DXGI1_3_DDI_BASE_FUNCTIONS结构的成员提供指向 DXGI MPO 函数的指针。 有关详细信息,请参阅 支持 DXGI DDI。
UMD 通过调用驱动程序的 CreateDevice 函数中的D3DDDI_DEVICEFUNCS结构的成员提供指向 Direct3D 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 支持。