Перечисление кофункциональных режимов источника и целевого объекта VidPN

В этом разделе описывается, как диспетчер сети представления видео (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

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