Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается, как диспетчер видео-выводов (VidPN) и драйвер мини-порта дисплея взаимодействуют для перечисления режимов, доступных в источниках и целях видео-выводов. Прежде чем читать этот материал, необходимо ознакомиться с материалом в следующих разделах:
Время от времени диспетчер VidPN запрашивает у драйвера минипорта дисплея перечисление режимов, доступных на видеовыходах и целевых устройствах адаптера отображения. Как правило, запрос имеет следующий шаблон:
Диспетчер VidPN создает или получает VidPN с режимами, закрепленными на некоторых, но не всех его источниках и целевых объектах.
Диспетчер VidPN вызывает DxgkDdiIsSupportedVidPn, чтобы определить, можно ли расширить VidPN для формирования функционального VidPN, поддерживаемого на адаптере дисплея. То есть он спрашивает, можно ли закреплять режимы на оставшихся источниках и целевых объектах, не изменяя существующие закрепленные режимы.
Диспетчер VidPN вызывает DxgkDdiEnumVidPnCofuncModality чтобы получить режимы, доступные на источниках и целях, которые еще не имеют зафиксированных режимов.
Одним из аргументов, передаваемых в DxgkDdiEnumVidPnCofuncModality , является дескриптор объекта VidPN, который называется ограничением VidPN.
DxgkDdiEnumVidPnCofuncModality должен выполнять следующие действия:
Проверьте ограничение VidPN.
Для каждого источника и целевого объекта, который не имеет закрепленного режима, настройте набор режимов таким образом, чтобы он был самым большим набором возможных режимов, который является софункциональным с ограничениями.
Для каждого пути, который не имеет закрепленного преобразования масштабирования, настройте флаги поддержки масштабирования таким образом, чтобы они соответствовали ограничениям.
Для каждой траектории, которая не имеет привязанного преобразования поворота, настройте флаги поддержки поворота таким образом, чтобы они были совместимыми с ограничениями.
Для каждого источника с закреплённым режимом сообщите о методах мультисэмплинга, доступных для этого источника.
В следующих абзацах приводятся сведения о выполнении каждой задачи в предыдущем маркированном списке.
Проверка ограничения VidPN
Следующие свойства ограничивающего VidPN являются ограничениями, которые необходимо учитывать dxgkDdiEnumVidPnCofuncModality.
Топология (набор связей между источниками и целевыми объектами)
Закрепленные режимы
Масштабирование, поддержка масштабирования, поворот и поддержка поворота каждого пути
Целевая основа цвета каждого пути
Динамические диапазоны динамических коэффициентов целевого цвета каждого пути
Тип контента (графика или видео) каждого пути
Гамма-коррекция каждого пути
Чтобы извлечь ограничения из ограничивающего VidPN, выполните следующие действия:
Начните с вызова функции pfnGetTopology, чтобы получить указатель на интерфейс VidPN Topology, который представляет топологию ограничивающего VidPN.
Вызовите функции pfnAcquireFirstPathInfo и pfnAcquireNextPathInfo , чтобы получить сведения о каждом пути в топологии VidPN. Сведения о конкретном пути (идентификатор источника, целевой идентификатор, преобразование масштабирования, преобразование поворота, целевой цветовой базис и т. д.) содержатся в структуре D3DKMDT_VIDPN_PRESENT_PATH.
Для каждого пути передайте идентификатор источника пути в функцию pfnAcquireSourceModeSet , чтобы получить источник пути.
Вызовите функцию pfnAcquirePinnedModeInfo , чтобы определить, какой режим (если он есть) закреплен в наборе режима источника. Если в наборе режимов источника установлен закрепленный режим, вероятно, нет необходимости проверять остальные режимы в наборе. Если в наборе режимов нет закрепленного режима, проверьте остальные режимы в наборе, вызвав pfnAcquireFirstModeInfo и pfnAcquireNextModeInfo.
Используйте аналогичную процедуру, чтобы проверить наборы целевых режимов и определить, какие целевые наборы режимов имеют закрепленные режимы.
Настройка наборов режимов
При проверке наборов режимов, связанных с источниками и целевыми объектами в ограничивающей топологии VidPN, обратите внимание, какие наборы режимов имеют закрепленные режимы. Если в наборе режимов нет закрепленного режима, определите, нужно ли настроить его. Набор режимов необходимо настроить, если он содержит режимы, которые не являются софункциональными с ограничениями или если он не имеет доступных режимов, которые являются софункциональными с ограничениями.
Для целевых объектов видео, имеющих подключенные мониторы, необходимо также рассмотреть набор режимов, поддерживаемых монитором. Даже если видеоцелевой объект на адаптере дисплея поддерживает определенный режим (с учетом ограничений), вы должны указывать этот режим в наборе режимов целевого объекта только в том случае, если подключенный монитор также поддерживает этот режим. Чтобы определить режимы, поддерживаемые подключенным монитором, выполните следующие действия.
-
Вызовите функцию pfnAcquireMonitorSourceModeSet. Если для набора режимов не требуется корректировка, его можно оставить как есть. Если необходимо настроить набор режимов, необходимо создать новый набор режимов и заменить существующий набор режимов новым.
-
Чтобы создать и заполнить новый набор исходного режима, вызовите pfnCreateNewSourceModeSet.
_DXGK_VIDPNSOURCEMODESET_INTERFACE
Затем вызовите pfnCreateNewModeInfo и pfnAddMode.
-
Наконец, вызовите pfnAssignSourceModeSet , чтобы заменить существующий исходный режим, заданный новым.
Настройка флагов поддержки масштабирования
Для каждого пути в топологии ограничивающей 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
- Передайте массив в функцию pfnAssignMultisamplingMethodSetинтерфейса VidPN.
Структура D3DDDI_MULTISAMPLINGMETHOD содержит два элемента, которые необходимо задать, которые характеризуют многосамплинговый метод. Член NumSamples указывает количество подпикселей, которые отбираются. Элемент NumQualityLevels указывает количество уровней качества, с которыми может работать метод. Вы можете указать любое количество уровней качества, если каждый рост уровня заметно улучшает качество представленного изображения.
Сводные данные перечисления
Как описано ранее, DxgkDdiEnumVidPnCofuncModality должен создавать наборы режимов, которые совместимы с тем VidPN, который передан в параметре hConstrainingVidPn. В некоторых случаях DxgkDdiEnumVidPnCofuncModality должен адаптировать свое поведение в соответствии с дополнительными сведениями (точкой опоры для перечисления), переданной в параметрах EnumPivotType и EnumPivot.
Точка поворота перечисления может быть одной из следующих:
Настройка режимов определенного источника видеосигнала
Набор режимов для определенной целевой видеопрезентации
Преобразование масштабирования конкретного пути VidPN
Преобразование вращения заданного пути представления VidPN
Если ось перечисления представляет собой набор режимов, то DxgkDdkEnumVidPnCofuncModality должен оставить этот набор режимов неизменным. Если сводная диаграмма перечисления является преобразованием масштабирования (поворота) пути, то dxgkDdiEnumVidPnCofuncModality не должно изменять флаги поддержки масштабирования (поворота) для этого пути.