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


Использование соотношения сторон и настраиваемых режимов масштабирования

Для поддержки масштабирования с сохранением пропорций и настраиваемых режимов масштабирования, начиная с Windows 7 (где DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7), в данные о путях VidPN, которые используются драйверами минипорта дисплея, добавляются следующие возможности:

Указание режимов масштабирования

Поведение и внешний вид рабочего стола на мониторе с помощью этих режимов масштабирования описано в разделе "Масштабирование образа рабочего стола". Когда диспетчер режима отображения (DMM) вызывает функцию DxgkDdiEnumVidPnCofuncModality, драйвер должен задать членов D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT в соответствии с типами масштабирования, которые поддерживает VidPN, следующим образом:

Масштабирование идентичности
Если путь может отображать содержимое без преобразования, задайте для элемента identityD3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT значение, отличное от нуля. При вызове DxgkDdiEnumVidPnCofuncModality задайте элементу Scaling структуры D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION значение D3DKMDT_VPPS_IDENTITY.

Центрирование масштабирования
Если путь может отображать содержимое в неизмененном масштабе и по центру на целевом объекте, задайте D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.Centered. Когда вызывается DxgkDdiEnumVidPnCofuncModality, задайте D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.Скалирование в D3DKMDT_VPPS_CENTERED.

Растянутое масштабирование
Если путь может отображать содержимое, масштабированное для соответствия целевому объекту, не сохраняя соотношение сторон источника, задайте D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Растянутый. Когда вызывается DxgkDdiEnumVidPnCofuncModality, установите D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.Скалирование в D3DKMDT_VPPS_STRETCHED.

Параметр —Ratio-Preserving растянутое масштабирование
Если путь может масштабировать исходное содержимое, чтобы оно соответствовало целевому объекту, сохраняя пропорции источника, задайте D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. AspectRatioCenteredMax. Когда вызывается DxgkDdiEnumVidPnCofuncModality, установите D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.Scaling на D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX.

Настраиваемое масштабирование
Если путь может отображать один или несколько режимов масштабирования, которые не описаны другими элементами структуры D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT , задайте D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Настраиваемый. Когда вызывается DxgkDdiEnumVidPnCofuncModality, задайте D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.Масштабирование на D3DKMDT_VPPS_CUSTOM. Независимые поставщики оборудования (IHVs) могут использовать значения escape-последовательностей, чтобы сообщить драйверу, как интерпретировать пользовательское масштабирование для заданной цели.

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

API для масштабирования DDI

Соответствие значений масштабирования API режима пользователя со значениями масштабирования DDI драйвера минипорта в перечислении D3DKMDT_VIDPN_PRESENT_PATH_SCALING показано в следующей таблице.

SetDisplayConfig Значение масштабирования API Значение масштабирования DDI

DC_IDENTITY

D3DKMDT_VPPS_IDENTITY

DC_CENTERED

D3DKMDT_VPPS_CENTERED

DC_STRETCHED

D3DKMDT_VPPS_STRETCHED

DC_ASPRATIOMAX

D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX

DC_CUSTOM

D3DKMDT_VPPS_CUSTOM

DC_PREFERRED

D3DKMDT_VPPS_PREFERRED

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

Масштабирование и версии драйверов

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

Версия драйвера Версия операционной системы

DXGKDDI_INTERFACE_VERSION<DXGKDDI_INTERFACE_VERSION_WIN7

и

>= DXGKDDI_INTERFACE_VERSION_VISTA

DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7

Windows Vista

Драйвер имеет поведение Windows Vista.

Драйвер должен проверить версию операционной системы во время инициализации и никогда не предоставлять или не использовать элементы AspectRatioCenteredMax и пользовательские элементы D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Если драйвер нарушает это требование, DMM игнорирует AspectRatioCenteredMax и Custom и распознает только Identity, Centered или Stretched. Если драйвер пытается закрепить режим масштабирования D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX на любом пути VidPN, DMM вернет код состояния STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION и будет обрабатывать этот режим масштабирования так же, как режим растяжения полноэкранного экрана.

Windows 7

Операционная система очищает значения элементов AspectRatioCenteredMax и Custom и предполагает, что драйвер не поддерживает растянутое масштабирование с сохранением пропорций и настраиваемые режимы масштабирования. DMM устанавливает только режимы масштабирования D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_STRETCHED или D3DKMDT_VPPS_CENTERED. Драйвер работает как в Windows Vista.

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

DMM всегда подтверждает, что интерфейс >драйвера = DXGKDDI_INTERFACE_VERSION_WIN7 перед попыткой проверить и использовать AspectRatioCenteredMax или пользовательские элементы D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.

Важный Минипорт-драйвер дисплея, поддерживающий значения D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX или D3DKMDT_VPPS_CUSTOM , никогда не должен задавать значение D3DKMDT_VPPS_NOTSPECIFIED.

Масштабирование с помощью нескольких адаптеров

Значения типов масштабирования D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX и D3DKMDT_VPPS_CUSTOM , представленных в Windows 7, хранятся в базе данных подключения CCD, связанной с графическим блоком обработки (GPU). Если пользователь перемещает монитор с одного GPU с драйвером, поддерживающим эти члены масштабирования на другой GPU, второй GPU может не поддерживаться исходным драйвером. В этом случае операционная система сопоставляет эти типы масштабирования с системным масштабированием по умолчанию.

Если оба GPU поддерживают типы масштабирования D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX и D3DKMDT_VPPS_CUSTOM, а драйвер для первого GPU реализует запрос на масштабирование D3DKMDT_VPPS_CUSTOM, то если пользователь переключает монитор на второй GPU, драйвер для второго GPU, вероятно, не знает, как интерпретировать пользовательский запрос масштабирования. В этом случае второй драйвер должен завершить вызов функции DxgkDdiCommitVidPn неудачей и должен возвращать код состояния STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED. Операционная система сопоставляет этот тип масштабирования с системным масштабированием по умолчанию.