DXGKDDI_SETVIDPNSOURCEADDRESS funzione di callback (d3dkmddi.h)

La funzione DxgkDdiSetVidSourceAddress imposta l'indirizzo della superficie primaria associata a un'origine video specifica.

Sintassi

DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;

NTSTATUS DxgkddiSetvidpnsourceaddress(
  IN_CONST_HANDLE hAdapter,
  IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}

Parametri

hAdapter

Handle a un blocco di contesto associato a una scheda di visualizzazione. Il driver miniport visualizzato in precedenza ha fornito questo handle al sottosistema kernel di grafica DirectX nel parametro di output MiniportDeviceContext della funzione DxgkDdiAddDevice .

pSetVidPnSourceAddress

Puntatore a una struttura DXGKARG_SETVIDPNSOURCEADDRESS che contiene argomenti di funzione.

Valore restituito

DxgkDdiSetVidSourceAddress restituisce STATUS_SUCCESS se ha esito positivo; in caso contrario, restituisce uno dei codici di errore definiti in Ntstatus.h.

A partire da Windows 8, il driver miniport visualizzato può non riuscire una chiamata a DxgkDdiSetVidSourceAddress, restituendo STATUS_INVALID_PARAMETER, quando il membro SharedPrimaryTransition è impostato in pSetVidPnSourceAddress-Flags>. Tuttavia, tale errore non è previsto a meno che non si verifichi un errore nell'implementazione del driver in modalità utente della funzione CheckDirectFlipSupport o in DWM. Se si verifica un errore di questo tipo, il sistema operativo non restituirà facilmente la modalità di composizione e la presentazione non sarà corretta.

Commenti

DxgkDdiSetVidSourceAddress viene chiamato solo con le primarie che si adattano alla topologia di rete attualmente presente video (VidPN). Ad esempio, il formato D3DDDIFMT_A8R8G8B8 è determinato a adattarsi a un formato VidPN che viene eseguito il commit in un formato D3DDDIFMT_X8R8G8B8 e viceversa.

Il sottosistema del kernel della grafica DirectX chiama DxgkDdiSetVidSourceAddress per cambiare la modalità di visualizzazione e per eseguire operazioni di I/O (MMIO) mappate in memoria. I flag di campo bit nel membro Flags della struttura DXGKARG_SETVIDPNSOURCEADDRESS a cui punta il parametro pSetVidPnSourceAddress indica il tipo di operazione di visualizzazione da eseguire. Per cambiare la modalità di visualizzazione, il sottosistema kernel grafico imposta il membro ContextCount di DXGKARG_SETVIDPNSOURCEADDRESS su zero. In questa situazione, il contenuto della matrice che il membro Context di DXGKARG_SETVIDPNSOURCEADDRESS specifica non è definito. Per eseguire un'operazione di capovolgimento, il sottosistema del kernel grafico imposta ContextCount sul numero di contesti e Contesto nella matrice di handle del contesto del driver per i contesti che contribuiscono all'operazione di capovolgimento.

Se il driver miniport visualizzato indicato in precedenza, in una chiamata alla relativa funzione DxgkDdiQueryAdapterInfo , che supporta un flip basato su MMIO (impostando il flag di campo a bit FlipOnVSyncMmIo nel membro FlipCaps della struttura DXGK_DRIVERCAPS su TRUE), la funzione DxgkDdiSetVidPnSourceAddress del driver viene successivamente chiamata a livello di richiesta di interruzione del dispositivo (DIRQL) a scopo di capovolgimento. La funzione DxgkDdiSetVidSourceAddress del driver deve programmare l'applicazione livello dati e avviare l'analisi, nella sincronizzazione verticale seguente, nella superficie primaria il cui indirizzo è specificato nel membro PrimaryAddress di DXGKARG_SETVIDPNSOURCEADDRESS. Il driver deve anche passare il tipo di interruzione DXGK_INTERRUPT_CRTC_VSYNC nel parametro InterruptType in una chiamata alla funzione DxgkCbNotifyInterrupt per segnalare l'indirizzo di analisi effettivo. Il driver deve seguire la chiamata a DxgkCbNotifyInterrupt con una chiamata alla funzione DxgkCbNotifyDpc .

DxgkDdiSetVidSourceAddress deve essere in memoria non modificabile. DxgkDdiSetVidSourceAddress non deve chiamare alcun codice in memoria paginabile e non deve modificare i dati in memoria paginabile.

Clone-View situazioni

In situazioni di clonazione, il driver miniport visualizzato deve gestire le operazioni di capovolgimento in modo appropriato, come descritto in questa sezione.

Quando il DWM è in esecuzione, il sottosistema kernel della grafica DirectX esegue la sincronizzazione quando si verifica una sincronizzazione verticale. Tuttavia, il sottosistema kernel della grafica DirectX può essere sincronizzato solo quando si verifica una sincronizzazione verticale di un singolo segnale di output della scheda grafica. Il sottosistema kernel della grafica DirectX deve scorrere immediatamente tutti gli altri segnali di output della scheda grafica per evitare la rottura.

L'utilità di pianificazione GPU rileverà una singola sincronizzazione verticale e determinerà che la superficie capovolta è disponibile non appena si verifica il primo capovolgimento del monitoraggio. Di conseguenza, il driver miniport visualizzato potrebbe essere eseguito il rendering in una superficie che il secondo monitor è ancora visualizzato.

Le applicazioni video (ad esempio, Lettore multimediale Windows) non sono consapevoli delle situazioni di visualizzazione clona e si prevede di avere un intervallo di sincronizzazione verticale prevedibile. Se l'utilità di pianificazione DELLA GPU ha rilevato le sincronizzazioni verticali di entrambi i monitor, l'intervallo di sincronizzazione verticale (e quindi il capovolgimento) sarebbe imprevedibile e avrebbe derivato nel tempo, che causerebbe il funzionamento corretto delle applicazioni DWM e video.

Per le situazioni di clonazione, il driver miniport visualizzato deve eseguire un capovolgimento verticale sul monitor primario e un'inversione immediata basata su MMIO sul monitor secondario.

La funzione DxgkDdiSetVidSourceAddress del driver di visualizzazione deve registrare l'indirizzo che viene capovolto nell'oggetto scheda grafica.

Per indirizzare il driver miniport visualizzato a non attendere il successivo ritracciamento verticale del monitor secondario, il sottosistema kernel della grafica DirectX imposta il flag di campo a bit FlipImmediate su TRUE in una chiamata alla funzione DxgkDdiSetVidPnSourceAddress del driver.

Vedere i requisiti per chiamare questa funzione con sovrimpressione multiplane nella presentazione VidPN sovrapposta a Multiplane.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Intestazione d3dkmddi.h
IRQL PASSIVE_LEVEL. Chiamato in DIRQL se il driver supporta un capovolgimento basato su MMIO.

Vedi anche

DXGK_DRIVERCAPS

DXGKARG_SETVIDPNSOURCEADDRESS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiAddDevice

DxgkDdiSetVidSourceVisibility

DxgkDdiQueryAdapterInfo