DXGKDDI_SYSTEM_DISPLAY_ENABLE funzione di callback (dispmprt.h)
Chiamato dal sistema operativo per richiedere al driver miniport visualizzato di reimpostare il dispositivo di visualizzazione corrente in uno stato specificato.
A partire da Windows 8, il sistema operativo chiama questa funzione durante un'operazione di controllo bug dopo un errore di arresto del sistema.
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 a un blocco di contesto associato a una scheda di visualizzazione. La funzione DxgkDdiAddDevice del driver di visualizzazione ha precedentemente fornito questo handle al sottosistema kernel della grafica Microsoft DirectX.
[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 visualizzato. Questo identificatore potrebbe essere per la destinazione lasciata nello stato di rete corrente (VidPn) durante la chiamata precedente a DxgkDdiCommitVidPn.
Per altre informazioni sull'uso del parametro TargetId , vedere la sezione "Video present target initialization" (Video present target initialization).
[in] Flags
Puntatore a un valore contenente un OR bit per bit di flag. Questo membro è riservato dal sistema operativo.
[out] Width
Valore UINT che specifica la larghezza della modalità di visualizzazione del dispositivo specificato in unità di pixel.
[out] Height
Valore UINT che specifica l'altezza della modalità di visualizzazione del dispositivo specificato in unità di pixel.
[out] ColorFormat
Puntatore a un valore D3DDDIFORMAT che specifica il formato del 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.
Commenti
Passaggi necessari per visualizzare il driver miniport
Il driver miniport visualizzato deve seguire questa procedura quando viene chiamata la funzione DxgkDdiSystemDisplayEnable :- Il driver deve annullare tutte le operazioni dell'unità di elaborazione grafica (GPU) o reimpostare la GPU allo stato inattiva.
- Il sistema operativo indica la destinazione del video presente tramite il parametro TargetId . Il driver deve mantenere lo schermo associato a questa destinazione attivata e visibile. Se il driver non può essere attivato sul display, deve non riuscire la chiamata a questa funzione. In questo caso di errore, il sistema operativo potrebbe chiamare la funzione DxgkDdiResetDevice e causare la verifica di un bug di sistema.
- Il driver deve controllare la connettività del display associato a questa destinazione. Se la destinazione non ha una visualizzazione connessa, il driver deve completare la chiamata a questa funzione e restituire il codice di errore STATUS_NOT_SUPPORTED .
- Il driver deve disabilitare il segnale a tutti gli altri display connessi alla scheda di visualizzazione. Se non è possibile, il driver deve tentare di inserire un'immagine vuota in tutte le altre visualizzazioni. Se non è possibile, il driver deve lasciare invariata l'ultima immagine sullo schermo.
- Il driver deve mantenere la modalità di visualizzazione corrente nella destinazione indicata e fornire questa modalità al sistema operativo come parte di questa chiamata di funzione.
-
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 frame su un'altra destinazione in grado di una risoluzione di visualizzazione di almeno 640 x 480 pixel in un formato di 24 bit per pixel. Se non è possibile, il driver può non riuscire questa chiamata di funzione, che comporterà un controllo di bug di sistema e la visualizzazione di una schermata nera.
Non è necessario che il driver usi una modalità buffer di frame lineare. Tuttavia, il driver deve supportare operazioni di scrittura in questo buffer frame da origini con il formato D3DDDIFMT_A8R8G8B8 dell'enumerazione D3DDDIFORMAT .
Restrizioni dell'immagine di origine
Dopo che il driver fornisce il controllo del sistema operativo sulla 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 alla schermata reimpostata dalla funzione DxgkDdiSystemDisplayEnable .DxgkDdiSystemDisplayWrite fornisce il driver con l'indirizzo iniziale dell'immagine di origine e l'altezza, 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 a pagina.
Il driver deve scrivere questa immagine di origine nella schermata corrente a partire dalle posizioni specificate dai parametri PositionX e PositionY della funzione DxgkDdiSystemDisplayWrite.
È consigliabile che il driver usi la CPU per scrivere l'immagine dall'origine al buffer di frame perché un controllo di bug di sistema potrebbe essere causato da istanze di Rilevamento timeout e ripristino ripetute (TDR) che comportano che la GPU sia in una condizione sconosciuta.
Usare memoria non a pagina
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 modificabile. DxgkDdiSystemDisplayEnable non deve chiamare alcun codice in memoria paginabile e non deve modificare i dati in memoria paginabili.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 |
Server minimo supportato | Windows Server 2012 |
Piattaforma di destinazione | Desktop |
Intestazione | dispmprt.h |
IRQL | Qualsiasi livello (vedere la sezione Osservazioni) |
Vedi anche
DxgkCbAcquirePostDisplayOwnership