DXGKDDI_SYSTEM_DISPLAY_ENABLE Rückruffunktion (dispmprt.h)
Das Betriebssystem ruft den Kernelmodus-Anzeigetreiber (KMD) DxgkddiSystemDisplayEnable-Funktion auf, um anzufordern, dass KMD das aktuelle Anzeigegerät auf einen angegebenen Zustand zurücksetzt.
Syntax
DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;
NTSTATUS DxgkddiSystemDisplayEnable(
[in] PVOID MiniportDeviceContext,
[in] D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
[in] PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
[out] UINT *Width,
[out] UINT *Height,
[out] D3DDDIFORMAT *ColorFormat
)
{...}
Parameter
[in] MiniportDeviceContext
Behandeln eines Kontextblocks, der einem Anzeigeadapter zugeordnet ist. Die DxgkDdiAddDevice-Funktion von KMD hat zuvor dieses Handle für Dxgkrnl-bereitgestellt.
[in] TargetId
Ein D3DDDI_VIDEO_PRESENT_TARGET_ID Wert, der den Bezeichner des Videodarstellungsziels auf dem Displayadapter angibt, mit dem das Anzeigegerät verbunden ist. Dieser Bezeichner kann für das Ziel sein, das während des vorherigen Aufrufs von DxgkDdiCommitVidPnim aktuellen Video present Network -Zustand (VidPn) verbleibt.
[in] Flags
Zeigen Sie auf einen DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Wert, der ein bitweises ODER von Flags enthält. Dieses Mitglied ist vom Betriebssystem reserviert.
[out] Width
Breite des Anzeigemodus des angegebenen Geräts in Pixeln.
[out] Height
Höhe des Anzeigemodus des angegebenen Geräts in Pixeln.
[out] ColorFormat
Zeigen Sie auf einen D3DDDIFORMAT Wert, der das Farbformat des Anzeigegeräts angibt.
Rückgabewert
DxgkDdiSystemDisplayEnable gibt STATUS_SUCCESS zurück, wenn dies erfolgreich ist. Wenn das durch die TargetId Parameter angegebene Ziel nicht mit einem Anzeigegerät verbunden ist, gibt die Funktion STATUS_NOT_SUPPORTED zurück. Andernfalls wird eine der fehlercodes zurückgegeben, die in ntstatus.hdefiniert sind.
Bemerkungen
Das Betriebssystem ruft DxgkddiSystemDisplayEnable während eines Fehlerüberprüfungsvorgangs nach einem Systemstoppfehler auf.
Erforderliche Schritte nach KMD
Die KMD muss die folgenden Schritte ausführen, wenn die DxgkDdiSystemDisplayEnable-Funktion aufgerufen wird:
- Abbrechen aller GPU-Vorgänge oder Zurücksetzen der GPU auf den Leerlaufzustand.
- Das Betriebssystem gibt das Video an, das ziel über den parameter TargetId. Der Treiber muss die dem Ziel zugeordnete Anzeige eingeschaltet und sichtbar halten. Wenn der Treiber das Display nicht einschalten kann, muss der Aufruf dieser Funktion fehlschlagen. In einem solchen Fehlerfall ruft das Betriebssystem möglicherweise DxgkDdiResetDevice- auf und verursacht eine Systemfehlerprüfung.
- Überprüfen Sie die Konnektivität der Anzeige, die diesem Ziel zugeordnet ist. Wenn das Ziel nicht über eine Anzeige verbunden ist, muss der Treiber den Aufruf dieser Funktion abschließen und den STATUS_NOT_SUPPORTED Fehlercode zurückgeben.
- Deaktivieren Sie das Signal für alle anderen Displays, die mit dem Anzeigeadapter verbunden sind. Wenn dies nicht möglich ist, sollte der Treiber versuchen, ein leeres Bild auf allen anderen Displays zu platzieren. Wenn dies nicht möglich ist, muss der Treiber das letzte Bild auf dem Bildschirm unverändert lassen.
- Halten Sie den aktuellen Anzeigemodus auf dem angegebenen Ziel, und stellen Sie diesen Modus im Rahmen dieses Funktionsaufrufs wieder im Betriebssystem bereit.
- Wenn der Treiber den aktuellen Anzeigemodus nicht beibehalten kann oder das Ziel nicht Teil der aktiven Topologie ist, sollte der Treiber versuchen, einen Framepuffer für ein anderes Ziel festzulegen, das eine Anzeigeauflösung von mindestens 640 x 480 Pixeln in einem Format von 24 Bit pro Pixel ermöglicht. Wenn dies nicht möglich ist, kann der Treiber diesen Funktionsaufruf nicht ausführen, was zu einer Systemfehlerüberprüfung und der Anzeige eines schwarzen Bildschirms führt.
KMD muss keinen linearen Framepuffermodus verwenden. KMD sollte jedoch Schreibvorgänge aus Quellen unterstützen, die das D3DDDIFMT_A8R8G8B8 Format der D3DDDIFORMAT Enumeration aufweisen.
Einschränkungen für Quellbilder
Nachdem KMD die Betriebssystemsteuerung über die Anzeigefunktionalität erteilt hat, kann das Betriebssystem die DxgkDdiSystemDisplayWrite-Funktion aufrufen, um das Bildschirmbild zu aktualisieren und einen Block von Bildern aus angegebenen Quellen auf den Bildschirm zu schreiben, der vom DxgkDdiSystemDisplayEnable-Funktion zurückgesetzt wurde.
DxgkDdiSystemDisplayWrite stellt dem Treiber die Startadresse des Quellbilds sowie die Stride, Breite und Höhe zur Verfügung. Das Farbformat des Quellbilds wird immer D3DDDIFMT_X8R8G8B8. Das Betriebssystem garantiert, dass sich das Quellimage im nicht ausgelagerten Speicher befindet.
KMD muss dieses Quellbild in den aktuellen Bildschirm schreiben, beginnend an den positionen, die durch die PositionX- und PositionY Parameter der funktion DxgkDdiSystemDisplayWrite angegeben werden.
Es wird empfohlen, dass der Treiber die CPU verwendet, um das Bild aus der Quelle in den Framepuffer zu schreiben, da eine Systemfehlerüberprüfung möglicherweise durch wiederholte Timeouterkennung und -wiederherstellung (Timeout Detection and Recovery, TDR) Instanzen verursacht wird, die dazu führen, dass die GPU in einer unbekannten Bedingung ist.
Verwenden des nicht ausgelagerten Speichers
Windows-Kernelmodusfunktionen sind möglicherweise nicht verfügbar, während diese Funktion aufgerufen wird.
DxgkDdiSystemDisplayEnable- kann bei jedem IRQL aufgerufen werden, daher muss es sich im nicht seitenfähigen Speicher befinden. DxgkDdiSystemDisplayEnable darf keinen Code aufrufen, der sich im ausgelagerten Speicher befindet, und darf keine Daten bearbeiten, die sich im ausgelagerten Speicher befinden.
Automatische Anzeigeschaltung
Die DxgkDdiSystemDisplayEnable DDI eines automatischen Anzeigeschalters muss sicherstellen, dass die Selbstaktualisierung des Panels (PSR) am Ende des Aufrufs deaktiviert ist. Weitere Informationen finden Sie unter automatischen Anzeigeschalter.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 8 (WDDM 1.2) |
mindestens unterstützte Server- | Windows Server 2012 |
Zielplattform- | Desktop |
Header- | dispmprt.h |
IRQL- | Beliebige Ebene (siehe Abschnitt "Hinweise") |
Siehe auch
DxgkCbAcquirePostDisplayOwnership