Поддержка многопланового наложения
Поддержка многопланового наложения (MPO) — это функция WDDM, которая позволяет графическому оборудованию создавать несколько слоев содержимого на одном изображении, которое затем может отображаться на экране. Это, по сути, аппаратный ускоренный метод создания различных "плоскостей" содержимого - где плоскость может быть видео, рабочий стол, окно приложения и т. д. - без необходимости включать ЦП или использовать другие системные ресурсы для смешивания программного обеспечения.
Функция MPO доступна начиная с Windows 8.1 (WDDM 1.3). В этой статье описывается, как реализовать эту возможность в драйвере.
Функции MPO, вызываемые драйверами отображения в пользовательском режиме
В следующей таблице перечислены функции MPO в пользовательском режиме, реализующие операционную систему и которые могут вызывать драйверы отображения в пользовательском режиме (UMD).
Function | Description |
---|---|
pfnPresentMultiPlaneOverlayCb (D3D) | Копирует содержимое из исходного выделения MPO в целевое выделение. |
pfnPresentMultiPlaneOverlayCb (DXGI) | Копирует содержимое из исходного выделения MPO в целевое выделение. |
Функции MPO, реализованные UMD
В этом разделе содержатся функции, которые WDDM 1.3 и более поздних версий UMD должны реализовать для поддержки MPOS.
UMD предоставляет указатели на функции DXGI MPO через члены структуры DXGI1_3_DDI_BASE_FUNCTIONS при вызове функции CreateDevice (D3D10). Дополнительные сведения см. в разделе "Поддержка DDI DXGI".
UMD предоставляет указатели на функции Direct3D MPO через элементы структуры D3DDDI_DEVICEFUNCS в вызове функции CreateDevice драйвера.
В следующей таблице перечислены функции, которые должен реализовать UMD для поддержки MPOS.
Function | Description |
---|---|
pfnCheckMultiPlaneOverlaySupport (D3D) | Вызывается средой выполнения Direct3D, чтобы проверить сведения о поддержке оборудования для MPOS. |
pfnCheckMultiPlaneOverlaySupport (DXGI) | Вызывается средой выполнения инфраструктуры графики DirectX (DXGI), чтобы проверить сведения о поддержке оборудования для MPOS. |
pfnPresentMultiplaneOverlay (D3D) | Вызывается средой выполнения Direct3D, чтобы уведомить UMD о том, что приложение завершило отрисовку и запросить отображение исходной поверхности UMD. Драйвер должен отобразить эту поверхность, скопировав, перевернуть или выполнить операцию заливки цвета. |
pfnPresentMultiplaneOverlay (DXGI) | Вызывается средой выполнения DXGI, чтобы уведомить UMD о том, что приложение завершило отрисовку и запрашивает отображение исходной поверхности UMD. Драйвер должен отобразить поверхность, скопировав, перевернуть или выполнить операцию заливки цвета. |
В следующей таблице перечислены функции, которые может реализовать UMD.
Function | Description |
---|---|
pfnGetMultiPlaneOverlayCaps | Вызывается средой выполнения DXGI, чтобы запросить, чтобы UMD получил базовые возможности плоскости наложения. |
pfnGetMultiplaneOverlayGroupCaps | Вызывается средой выполнения DXGI, чтобы запросить, чтобы UMD получил группу возможностей плоскости наложения. |
Структуры и перечисления пользовательского режима MPO
Все структуры и перечисления в пользовательском режиме, используемые с интерфейсами драйверов устройств MPO (DDIs).
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 | Определяет диапазон и сведения о преобразовании YUV, описывающие MPO. |
D3DDDI_PRESENT_MULTIPLANE_OVERLAY | Указывает плоскость наложения для отображения. |
D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT | Используется в вызове функции pfnCheckMultiPlaneOverlaySupport (D3D) для проверки сведений о поддержке оборудования для MPOS. |
D3DDDIARG_PRESENTMULTIPLANEOVERLAY | Указывает ресурс MPO для отображения. |
D3DDDICB_PRESENTMULTIPLANEOVERLAY | Описывает выделение MPO, в которое копируется и из нее копируется содержимое. |
Функции драйвера в режиме ядра MPO
В следующей таблице перечислены функции MPO, которые реализует драйвер мини-порта (KMD) в режиме ядра.
Function | Description |
---|---|
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT | Вызывается подсистемой ядра графики DirectX для проверки сведений о поддержке оборудования для MPOS. |
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 | Следующая функция вызывается, чтобы определить, поддерживается ли определенная конфигурация многоуровневого наложения. |
DXGKDDI_GETMULTIPLANEOVERLAYCAPS | Вызывается для получения возможностей MPO. Поддержка этого DDI необходима для любого драйвера WDDM 2.2, который хочет поддерживать несколько самолетов. |
DXGKDDI_POSTMULTIPLANEOVERLAYPRESENT | Вызывается после того, как была вложена новая конфигурация многоуровневого наложения, что позволяет драйверу оптимизировать состояние оборудования. Необязательно для драйверов WDDM 1.3 2.0 или более поздних версий, поддерживающих многоуровневые наложения. |
DXGKDDI_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY3 | Вызывается для изменения отображаемой конфигурации наложения. |
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT2 | DxgkDdiCheckMultiPlaneOverlaySupport2 вызывается, чтобы определить, поддерживается ли определенная конфигурация многоуровневого наложения. |
DXGKDDI_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY | Задает адреса нескольких поверхностей, включая буферную цепочку диспетчера окон рабочего стола (DWM), связанную с определенным источником видео. Эта функция используется для представления нескольких поверхностей (включая цепочку буферов DWM) на экране. |
DXGKDDI_SETVIDPNSOURCEADDRESSWITHMULTIPLANEOVERLAY2 | DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay2 вызывается для изменения отображаемой конфигурации наложения. |
Структуры режима ядра MPO
В следующей таблице перечислены структуры, которые использует KMD.
Структура | Description |
---|---|
DXGK_CHECK_MULTIPLANE_OVERLAY_SUPPORT_PLANE | Указывает атрибуты поддержки, которые предоставляет оборудование для MPOS. |
DXGK_CHECK_MULTIPLANE_OVERLAY_SUPPORT_RETURN_INFO | Указывает ограничения на поддержку оборудования ДЛЯ MPOS. |
DXGK_MULTIPLANE_OVERLAY_ATTRIBUTES | Используется KMD для указания атрибутов плоскости наложения. |
DXGK_MULTIPLANE_OVERLAY_ATTRIBUTES2 | DXGK_MULTIPLANE_OVERLAY_ATTRIBUTES2 используется KMD для указания атрибутов плоскости наложения. |
DXGK_MULTIPLANE_OVERLAY_BLEND | Определяет операцию смешивания, выполняемую на плоскости наложения. |
DXGK_MULTIPLANE_OVERLAY_FLAGS | Определяет операцию переверки, выполняемую на плоскости наложения. |
DXGK_MULTIPLANE_OVERLAY_PLANE | Указывает плоскость наложения для отображения в вызове функции DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay. |
DXGK_MULTIPLANE_OVERLAY_PLANE2 | DXGK_MULTIPLANE_OVERLAY_PLANE2 используется с функцией DxgkDdiSetPnSourceAddressWithMultiPlaneOverlay2, чтобы указать плоскость наложения для отображения. |
DXGK_MULTIPLANE_OVERLAY_PLANE_WITH_SOURCE | DXGK_MULTIPLANE_OVERLAY_PLANE_WITH_SOURCE описывает атрибуты плоскости многоуровневого наложения, выделение и видео, которые представляют идентификационный номер источника сети. |
DXGK_MULTIPLANE_OVERLAY_VSYNC_INFO | Указывает плоскость наложения, отображаемую во время интервала VSync. |
DXGK_MULTIPLANE_OVERLAY_YCbCr_FLAGS | Определяет диапазон и сведения о преобразовании YUV, описывающие MPO. |
DXGK_PRESENTMULTIPLANEOVERLAYINFO | Указывает сведения о входных данных VidPN и плоскости наложения для отображения. |
DXGK_PRESENTMULTIPLANEOVERLAYLIST | Указывает плоскость наложения для отображения в вызове функции DxgkDdiPresent. |
DXGKARG_CHECKMULTIPLANEOVERLAYSUPPORT | Используется в вызове функции DxgkDdiCheckMultiPlaneOverlaySupport для проверки сведений о поддержке оборудования для MPOS. |
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_GET_MULTIPLANE_OVERLAY_GROUP_CAPS в D3DDDICAPS_TYPE указывает ПОДДЕРЖКУ UMD для MPOS.