本文介绍 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。
Direct3D:UMD 通过调用 UMD 的 CreateDevice 函数中的D3DDDI_DEVICEFUNCS结构的成员提供指向 D3D MPO 函数的指针。
DXGI:当调用特定于适配器的 CreateDevice(D3D10)函数时,UMD 通过DXGI1_3_DDI_BASE_FUNCTIONS结构的成员提供指向 DXGI MPO 函数的指针。 有关详细信息,请参阅 支持 DXGI DDI。
下表列出了 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 的支持。