Поделиться через


Перечисление cofunctional VidPN Source и целевых режимов

В этом разделе описывается, как диспетчер презентации видео (VidPN) и драйвер мини-порта отображения совместно используются для перечисления режимов, доступных в видеосущего источниках и целевых объектах. Прежде чем читать этот материал, необходимо ознакомиться с материалом в следующих разделах:

Время от времени диспетчер VidPN запрашивает драйвер мини-порта отображения для перечисления режимов, доступных в видеотрансляций адаптера отображения, источников и целевых объектов. Как правило, запрос имеет следующий шаблон:

  1. Диспетчер VidPN создает или получает VidPN с режимами, закрепленными на некоторых, но не всех его источниках и целевых объектах.

  2. Диспетчер VidPN вызывает DxgkDdiIsSupportedVidPn , чтобы определить, можно ли расширить VidPN для формирования функционального VidPN, поддерживаемого на адаптере дисплея. То есть он спрашивает, можно ли закреплять режимы на оставшихся источниках и целевых объектах, не изменяя существующие закрепленные режимы.

  3. Диспетчер VidPN вызывает DxgkDdiEnumVidPnCofuncModality , чтобы получить режимы, доступные в источниках и целевых объектах, которые еще не имеют закрепленных режимов.

Одним из аргументов, передаваемых в DxgkDdiEnumVidPnCofuncModality , является дескриптор объекта VidPN, который называется ограничением VidPN.

DxgkDdiEnumVidPnCofuncModality должен выполнять следующие действия:

  • Проверьте ограничение VidPN.

  • Для каждого источника и целевого объекта, который не имеет закрепленного режима, настройте набор режимов таким образом, чтобы он был самым большим набором возможных режимов, который является софункциональным с ограничениями.

  • Для каждого пути, который не имеет закрепленного преобразования масштабирования, настройте флаги поддержки масштабирования таким образом, чтобы они были софункциональными с ограничениями.

  • Для каждого пути, который не имеет закрепленного преобразования поворота, настройте флаги поддержки поворота таким образом, чтобы они были софункциональными с ограничениями.

  • Для каждого источника, имеющего закрепленный режим, сообщите о многофакторных методах, доступных для этого источника.

В следующих абзацах приводятся сведения о выполнении каждой задачи в предыдущем маркированном списке.

Проверка ограничения VidPN

Следующие свойства ограничивающего VidPN являются ограничениями, которые необходимо учитывать dxgkDdiEnumVidPnCofuncModality.

  • Топология (набор связей между источниками и целевыми объектами)

  • Закрепленные режимы

  • Поддержка масштабирования, масштабирования, поворота и поворота каждого пути

  • Целевая основа цвета каждого пути

  • Динамические диапазоны динамических коэффициентов целевого цвета каждого пути

  • Тип контента (графика или видео) каждого пути

  • Гамма-пандус каждого пути

Чтобы извлечь ограничения из ограничивающего VidPN, выполните следующие действия:

  • Начните с вызова функции pfnGetTopology , чтобы получить указатель на интерфейс топологии VidPN, представляющий топологию VidPN.

  • Вызовите функции pfnAcquireFirstPathInfo и pfnAcquireNextPathInfo, чтобы получить сведения о каждом пути в топологии VidPN. Сведения о конкретном пути (идентификатор источника, целевой идентификатор, преобразование масштабирования, преобразование поворота, основе целевого цвета и т. д.) содержатся в структуре D3DKMDT_VIDPN_PRESENT_PATH.

  • Для каждого пути передайте идентификатор источника пути в функцию pfnAcquireSourceModeSet , чтобы получить источник пути.

  • Вызовите функцию pfnAcquirePinnedModeInfo, чтобы определить, какой режим (если он есть) закреплен в наборе режима источника. Если в наборе режима источника установлен закрепленный режим, вероятно, нет необходимости проверять остальные режимы в наборе. Если в наборе режимов нет закрепленного режима, проверьте остальные режимы в наборе, вызвав pfnAcquireFirstModeInfo и pfnAcquireNextModeInfo.

    Используйте аналогичную процедуру, чтобы проверить наборы целевых режимов и определить, какие целевые наборы режимов имеют закрепленные режимы.

Настройка наборов режимов

При проверке наборов режимов, связанных с источниками и целевыми объектами в топологии VidPN, следует заметить, какие наборы режимов имеют закрепленные режимы. Если в наборе режимов нет закрепленного режима, определите, нужно ли настроить его. Набор режимов необходимо настроить, если он содержит режимы, которые не являются софункциональными с ограничениями или если он не имеет доступных режимов, которые являются софункциональными с ограничениями.

Для целевых объектов видео, имеющих подключенные мониторы, необходимо также рассмотреть набор режимов, поддерживаемых монитором. Даже если на адаптере дисплея присутствует видео, поддерживается определенный режим (учитывая ограничения), то в режиме целевого объекта также поддерживается только этот режим в режиме целевого объекта. Чтобы определить режимы, поддерживаемые подключенным монитором, выполните следующие действия.

Настройка флагов поддержки масштабирования

Для каждого пути в топологии VidPN ограничения определите, имеет ли путь закрепленное преобразование масштабирования. Чтобы сделать это определение, проверьте vpnPath.ContentTransformation.Scaling, где vpnPath — это структура D3DKMDT_VIDPN_PRESENT_PATH , представляющая путь. Если vpnPath.ContentTransformation.Scaling имеет значение D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED или D3DKMDT_VPPS_STRETCHED, а затем преобразование масштабирования для пути закреплено. В противном случае преобразование масштабирования не закреплено.

Если путь не имеет закрепленного преобразования масштабирования, определите, нужно ли настраивать флаги поддержки масштабирования пути. Флаги поддержки должны быть скорректированы, если они показывают поддержку типа масштабирования, который не является софункциональным с ограничениями или если они не могут показать поддержку типа масштабирования, который является софункциональным с ограничениями. Чтобы изменить флаги поддержки масштабирования, задайте элементы структуры D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT , содержащей флаги.

Настройка флагов поддержки поворота

Настройка флагов поддержки поворота пути аналогична настройке флагов поддержки масштабирования пути. Предположим, vpnPath — это структура D3DKMDT_VIDPN_PRESENT_PATH. Если vpnPath.ContentTransformation.Rotation имеет значение D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180 или D3DKMDT_VPPR_ROTATE270, а затем преобразование поворота для пути закреплено. В противном случае преобразование поворота не закреплено. Флаги поддержки поворота находятся в VPNPath.ContentTransformation.RotationSupport.

Создание отчетов о многофакторных методах

Если в адаптере дисплея есть один или несколько кодеков вывода видео, которые могут отреагируют путем многосамплинирования, необходимо сообщить о доступных методах многосамплинга (учитывая ограничения), для каждого источника, имеющего закрепленный режим. Чтобы сообщить о доступных многосамплинговых методах, выполните следующие действия.

Структура D3DDDI_MULTISAMPLINGMETHOD содержит два элемента, которые необходимо задать, которые характеризуют многофакторный метод. Элемент NumSamples указывает количество подпикселей, которые примеры. Элемент NumQualityLevels указывает количество уровней качества, с которыми может работать метод. Вы можете указать любое количество уровней качества, если каждый рост уровня заметно улучшает качество представленного изображения.

Сводные данные перечисления

Как описано ранее, DxgkDdiEnumVidPnCofuncModality должен создавать наборы режимов, которые являются кофункциональными с VidPN, переданными в параметре hConstrainingVidPn . В некоторых случаях DxgkDdiEnumVidPnCofuncModality должен увеличить его поведение в соответствии с дополнительными сведениями (сводной информацией перечисления), переданной в параметрах EnumPivotType и EnumPivot .

Сводная таблица перечисления может быть одной из следующих:

  • Набор режимов конкретного источника видео

  • Набор режима определенного целевого объекта видео

  • Преобразование масштабирования конкретного пути VidPN

  • Преобразование поворота конкретного пути VidPN

Если сводная таблица перечисления является набором режимов, то DxgkDkEnumVidPnCofuncModality должен оставить этот режим неизменным. Если сводная диаграмма перечисления является преобразованием масштабирования (поворота) пути, то dxgkDdiEnumVidPnCofuncModality не должно изменять флаги поддержки масштабирования (поворота) для этого пути.