Condividi tramite


DXGKDDI_SYSTEM_DISPLAY_ENABLE funzione di callback (dispmprt.h)

Il sistema operativo chiama la funzione del driver di visualizzazione in modalità kernel (KMD) DxgkddiSystemDisplayEnable per richiedere che kmD reimposta il dispositivo di visualizzazione corrente a uno stato specificato.

Sintassi

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
)
{...}

Parametri

[in] MiniportDeviceContext

Handle in un blocco di contesto associato a una scheda di visualizzazione. La funzione DxgkDdiAddDevice del KMD ha fornito in precedenza questo handle per Dxgkrnl.

[in] TargetId

Valore D3DDDI_VIDEO_PRESENT_TARGET_ID che specifica l'identificatore della destinazione del video presente nella scheda di visualizzazione a cui è connesso il dispositivo di visualizzazione. Questo identificatore potrebbe essere per la destinazione lasciata nello stato corrente della rete video corrente (VidPn) durante la chiamata precedente a DxgkDdiCommitVidPn.

[in] Flags

Puntatore a un valore DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS che contiene un OR bit per bit di flag. Questo membro è riservato dal sistema operativo.

[out] Width

Larghezza della modalità di visualizzazione del dispositivo specificato, in pixel.

[out] Height

Altezza della modalità di visualizzazione del dispositivo specificato, in pixel.

[out] ColorFormat

Puntatore a un valore D3DDDIFORMAT che specifica il formato di colore del dispositivo di visualizzazione.

Valore restituito

DxgkDdiSystemDisplayEnable restituisce STATUS_SUCCESS se ha esito positivo. Se la destinazione specificata dal parametro TargetId non è connessa a un dispositivo di visualizzazione, la funzione restituisce STATUS_NOT_SUPPORTED. In caso contrario, restituisce uno dei codici di errore definiti in Ntstatus.h.

Osservazioni

Il sistema operativo chiama DxgkddiSystemDisplayEnable durante un'operazione di controllo dei bug dopo un errore di arresto del sistema.

Passaggi necessari per KMD

Il KMD deve seguire questi passaggi quando viene chiamata la funzione DxgkDdiSystemDisplayEnable:

  1. Annullare tutte le operazioni GPU o reimpostare la GPU sullo stato di inattività.
  2. Il sistema operativo indica la destinazione del video presente tramite il parametro TargetId . Il driver deve mantenere lo schermo associato a questa destinazione acceso e visibile. Se il driver non è in grado di accendere lo schermo, deve non riuscire la chiamata a questa funzione. In questo caso di errore, il sistema operativo potrebbe chiamare DxgkDdiResetDevice e causare un controllo errori di sistema.
  3. Controllare la connettività della visualizzazione associata a questa destinazione. Se la destinazione non dispone di una visualizzazione connessa, il driver deve completare la chiamata a questa funzione e restituire il codice di errore STATUS_NOT_SUPPORTED.
  4. Disabilitare il segnale a tutti gli altri schermi connessi alla scheda di visualizzazione. Se non è possibile, il driver deve tentare di inserire un'immagine vuota in tutti gli altri schermi. Se non è possibile, il driver deve lasciare invariata l'ultima immagine sullo schermo.
  5. Mantenere la modalità di visualizzazione corrente sulla destinazione indicata e restituire questa modalità al sistema operativo come parte di questa chiamata di funzione.
  6. Se il driver non riesce a mantenere la modalità di visualizzazione corrente o se la destinazione non fa parte della topologia attiva, il driver deve tentare di impostare un buffer di frame su un'altra destinazione in grado di visualizzare almeno 640 x 480 pixel in un formato di 24 bit per pixel. Se ciò non è possibile, il driver può non riuscire con questa chiamata di funzione, che comporterà un controllo bug di sistema e la visualizzazione di una schermata nera.

Il kmD non deve usare una modalità buffer di frame lineare. Tuttavia, kmd deve supportare operazioni di scrittura in questo buffer frame da origini che hanno il formato D3DDDIFMT_A8R8G8B8 dell'enumerazione D3DDDIFORMAT.

Restrizioni dell'immagine di origine

Dopo che kmd assegna al sistema operativo il controllo della funzionalità di visualizzazione, il sistema operativo può chiamare la funzione DxgkDdiSystemDisplayWrite per aggiornare l'immagine dello schermo e scrivere un blocco di immagini da origini specificate sullo schermo reimpostato dalla funzione DxgkDdiSystemDisplayEnable.

DxgkDdiSystemDisplayWrite fornisce al driver l'indirizzo iniziale dell'immagine di origine, nonché lo stride, la larghezza e l'altezza. Il formato di colore dell'immagine di origine è sempre D3DDDIFMT_X8R8G8B8. Il sistema operativo garantisce che l'immagine di origine sia in memoria non di paging.

Il KMD deve scrivere questa immagine di origine nella schermata corrente a partire dalle posizioni specificate dal PositionX e parametri PositionY della funzione DxgkDdiSystemDisplayWrite.

È consigliabile che il driver usi la CPU per scrivere l'immagine dall'origine nel buffer dei fotogrammi perché un controllo di bug di sistema potrebbe essere causato da ripetuti timeout detection and recovery (TDR) istanze che comportano che la GPU sia in una condizione sconosciuta.

Usare memoria non di paging

Le funzioni in modalità kernel di Windows potrebbero non essere disponibili mentre questa funzione viene chiamata.

DxgkDdiSystemDisplayEnable può essere chiamato in qualsiasi IRQL, quindi deve essere in memoria non di paging. DxgkDdiSystemDisplayEnable non deve chiamare codice che si trova in memoria paging e non deve modificare i dati presenti nella memoria di paging.

Cambio di visualizzazione automatico

Un driver del commutatore di visualizzazione automatico DxgkDdiSystemDisplayEnable DDI deve assicurarsi che il pannello di aggiornamento automatico (PSR) sia disabilitato alla fine della chiamata. Per altre informazioni, vedere commutatore di visualizzazione automatico.

Fabbisogno

Requisito Valore
client minimo supportato Windows 8 (WDDM 1.2)
server minimo supportato Windows Server 2012
piattaforma di destinazione Desktop
intestazione dispmprt.h
IRQL Qualsiasi livello (vedere la sezione Osservazioni)

Vedere anche

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiCommitVidPn

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite