Verwenden des Seitenverhältnisses und benutzerdefinierter Skalierungsmodi
Um ab Windows 7 (wobei DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7) verfügbaren Skalierungsmodi für das Seitenverhältnis zu unterstützen, werden VidPN die folgenden Funktionen hinzugefügt, die von Anzeige-Miniporttreibern verwendet werden:
D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT Struktur:
AspectRatioCenteredMax- und Custom-Member
D3DKMDT_VIDPN_PRESENT_PATH_SCALING Enumeration:
D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX - und D3DKMDT_VPPS_CUSTOM werte
Angeben von Skalierungsmodi
Das Verhalten und die Darstellung des Desktops auf dem Monitor mit diesen Skalierungsmodi werden unter Skalieren des Desktopimages beschrieben. Wenn der Anzeigemodus-Manager (DMM) die DxgkDdiEnumVidPnCofuncModality-Funktion aufruft, muss der Treiber die Member von D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT entsprechend den Skalierungstypen festlegen, die der VidPN-Pfad unterstützt, wie folgt:
Identitätsskalierung
Wenn der Pfad Inhalte ohne Transformation anzeigen kann, legen Sie das Identity-Element von D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT auf einen Wert ungleich null fest. Wenn DxgkDdiEnumVidPnCofuncModality aufgerufen wird, legen Sie den Scaling-Member der D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION-Struktur auf D3DKMDT_VPPS_IDENTITY fest.
Zentrierte Skalierung
Wenn der Pfad Inhalte ungeskaliert und zentriert auf dem Ziel anzeigen kann, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT fest. Zentriert. Wenn DxgkDdiEnumVidPnCofuncModality aufgerufen wird, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION fest. Skalierung auf D3DKMDT_VPPS_CENTERED.
Gestreckte Skalierung
Wenn der Pfad Inhalte anzeigen kann, die skaliert werden, um dem Ziel zu entsprechen, ohne das Seitenverhältnis der Quelle beizubehalten, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT fest. Gestreckt. Wenn DxgkDdiEnumVidPnCofuncModality aufgerufen wird, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION fest. Skalierung auf D3DKMDT_VPPS_STRETCHED.
Seitenverhältnis: Beibehaltung der gestreckten Skalierung
Wenn der Pfad den Quellinhalt an das Ziel anpassen kann, während das Seitenverhältnis der Quelle beibehalten wird, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT fest. AspectRatioCenteredMax. Wenn DxgkDdiEnumVidPnCofuncModality aufgerufen wird, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION fest. Skalierung auf D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX.
Benutzerdefinierte Skalierung
Wenn der Pfad einen oder mehrere Skalierungsmodi anzeigen kann, die nicht vom anderen D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT Strukturmember beschrieben werden, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT fest. Benutzerdefiniert. Wenn DxgkDdiEnumVidPnCofuncModality aufgerufen wird, legen Sie D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION fest. Skalierung auf D3DKMDT_VPPS_CUSTOM. Unabhängige Hardwareanbieter (Independent Hardware Vendors, IHVs) können private Escapewerte verwenden, um den Treiber darüber zu informieren, wie die benutzerdefinierte Skalierung für ein bestimmtes Ziel interpretiert wird.
Wenn der aktuelle Angeheftete Ziel- und Quellmodus das gleiche Seitenverhältnis haben, aber unterschiedliche Größen aufweisen, sollte der Anzeigeminiporttreiber nur die Elemente Stretched und Centered festlegen. In diesem Fall löscht DMM alle Werte ungleich 0 des AspectRatioCenteredMax-Elements .
API-zu-DDI-Skalierung
Die Übereinstimmung der Skalierungswerte der Benutzermodus-API mit den DDI-Skalierungswerten des Anzeigeminiporttreibers in der D3DKMDT_VIDPN_PRESENT_PATH_SCALING-Enumeration ist in der folgenden Tabelle dargestellt.
SetDisplayConfig API-Skalierungswert | DDI-Skalierungswert |
---|---|
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 |
Diese Zuordnung kann mit den Tabellen unter Skalieren des Desktopimages verwendet werden, um zu verstehen, wie Skalierungstypen im Benutzermodus in DDI-Skalierungstypen übersetzt werden, die an den Anzeigeminiporttreiber gesendet werden.
Skalierung und Treiberversionen
Das Verhalten verschiedener Display-Miniporttreiberversionen, die unter verschiedenen Versionen des Betriebssystems ausgeführt werden, wird in der folgenden Tabelle dargestellt.
Treiberversion Betriebssystemversion
< DXGKDDI_INTERFACE_VERSION DXGKDDI_INTERFACE_VERSION_WIN7
und
>= DXGKDDI_INTERFACE_VERSION_VISTA
> DXGKDDI_INTERFACE_VERSION = DXGKDDI_INTERFACE_VERSION_WIN7
Windows Vista
Der Treiber verfügt über Windows Vista-Verhalten.
Der Treiber muss die Betriebssystemversion während der Initialisierung überprüfen und darf niemals die Member AspectRatioCenteredMax und Custom von D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT verfügbar machen oder verwenden. Wenn der Treiber gegen diese Anforderung verstößt, ignoriert DMM AspectRatioCenteredMax und Custom und erkennt nur die Elemente Identity, Centered oder Stretched . Wenn der Treiber versucht, den D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX Skalierungsmodus an einen beliebigen VidPN-Pfad anzuheften, gibt DMM den status Code STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION zurück und behandelt diesen Skalierungsmodus genauso wie den Vollbild-Stretchmodus.
Windows 7
Das Betriebssystem löscht die Werte der Member AspectRatioCenteredMax und Custom und geht davon aus, dass der Treiber keine Seitenverhältnisse unterstützt, die gestreckte Skalierung und benutzerdefinierte Skalierungsmodi beibehalten. DMM legt nur Skalierungsmodi D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_STRETCHED oder D3DKMDT_VPPS_CENTERED fest. Der Treiber verhält sich wie unter Windows Vista.
Der Treiber sollte das AspectRatioCenteredMax-Element unterstützen, und das Betriebssystem verwendet es aus Systemsteuerung Anwendungen. Der Treiber kann optional benutzerdefinierte Funktionen implementieren, indem er den benutzerdefinierten Member festlegt.
DMM bestätigt immer, dass die Treiberschnittstelle >= DXGKDDI_INTERFACE_VERSION_WIN7, bevor versucht wird, die Elemente AspectRatioCenteredMax oder Custom von D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT zu überprüfen und zu verwenden.
Wichtig Ein Display-Miniporttreiber, der die D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX - oder D3DKMDT_VPPS_CUSTOM-Werte unterstützt, sollte niemals den Wert D3DKMDT_VPPS_NOTSPECIFIED festlegen.
Skalieren mit mehreren Adaptern
Die Werte der Skalierungstypen D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX und D3DKMDT_VPPS_CUSTOM , die mit Windows 7 eingeführt wurden, werden in der CCD-Verbindungsdatenbank gespeichert, die einer Grafikverarbeitungseinheit (GPU) zugeordnet ist. Wenn der Benutzer einen Monitor von einer GPU mit einem Treiber, der diese Skalierungsmitglieder unterstützt, auf eine andere GPU verschiebt, wird die zweite GPU möglicherweise vom ursprünglichen Treiber nicht unterstützt. In diesem Fall bezieht das Betriebssystem diese Skalierungstypen der Standardskalierung des Systems zu.
Wenn beide GPUs die Skalierungstypen D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX und D3DKMDT_VPPS_CUSTOM unterstützen und der Treiber für die erste GPU die D3DKMDT_VPPS_CUSTOM benutzerdefinierte Skalierungsanforderung implementiert, weiß der Treiber für die zweite GPU wahrscheinlich nicht, wie die benutzerdefinierte Skalierungsanforderung interpretiert werden soll. In diesem Fall sollte der zweite Treiber bei einem Aufruf der DxgkDdiCommitVidPn-Funktion fehlschlagen und die STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED status Code zurückgeben. Das Betriebssystem zuordnen diesen Skalierungstyp der Standardskalierung des Systems.