Использование пропорций и настраиваемых режимов масштабирования
Для поддержки растянутого масштабирования и настраиваемых режимов масштабирования, доступных начиная с Windows 7 (где DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7), к данным пути VidPN, используемым драйверами мини-портов для отображения, добавляются следующие возможности:
D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT структура:
AspectRatioCenteredMax и пользовательские элементы
перечисление D3DKMDT_VIDPN_PRESENT_PATH_SCALING :
значения D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX и D3DKMDT_VPPS_CUSTOM
Указание режимов масштабирования
Поведение и внешний вид рабочего стола на мониторе, использующий эти режимы масштабирования, описаны в статье Масштабирование образа рабочего стола. Когда диспетчер режима отображения (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. По центру. При вызове DxgkDdiEnumVidPnCofuncModality задайте D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Масштабирование до D3DKMDT_VPPS_CENTERED.
Растянутое масштабирование
Если путь может отображать содержимое, масштабируемого в соответствии с целевым объектом, не сохраняя пропорции источника, задайте D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Растянутый. При вызове DxgkDdiEnumVidPnCofuncModality задайте D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Масштабирование до D3DKMDT_VPPS_STRETCHED.
Сохранение пропорций растянутого масштабирования
Если путь может масштабировать исходное содержимое в соответствии с целевым объектом, сохраняя пропорции источника, задайте D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. AspectRatioCenteredMax. При вызове DxgkDdiEnumVidPnCofuncModality задайте D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Масштабирование до D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX.
Пользовательское масштабирование
Если путь может отображать один или несколько режимов масштабирования, которые не описаны другими элементами структуры D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT , задайте D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Пользовательский. При вызове DxgkDdiEnumVidPnCofuncModality задайте D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Масштабирование до D3DKMDT_VPPS_CUSTOM. Независимые поставщики оборудования (IHV) могут использовать закрытые escape-значения для информирования драйвера о том, как интерпретировать пользовательское масштабирование на заданном целевом объекте.
Если текущий закрепленный целевой и исходный режимы имеют одинаковые пропорции, но имеют разные размеры, драйвер мини-порта дисплея должен задать только элементы Stretched и Centered . В этом случае 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 и CustomD3DKMDT_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, а операционная система использует его из панель управления приложений. Драйвер может при необходимости реализовать настраиваемые функции, задав настраиваемый член.
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 ; операционная система будет сопоставлять этот тип масштабирования с системным масштабированием по умолчанию.