DXGKDDI_SETVIDPNSOURCEADDRESS funzione di callback (d3dkmddi.h)
La funzione DxgkDdiSetVidSourceAddress imposta l'indirizzo della superficie primaria associata a una determinata origine video presente.
Sintassi
DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;
NTSTATUS DxgkddiSetvidpnsourceaddress(
IN_CONST_HANDLE hAdapter,
IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}
Parametri
hAdapter
Handle di un blocco di contesto associato a una scheda di visualizzazione. Il driver miniport di visualizzazione precedentemente fornito questo handle al sottosistema kernel della grafica DirectX nel MiniportDeviceContext parametro di output 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 di visualizzazione 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 eseguirà facilmente il failback alla modalità di composizione e la presentazione non sarà corretta.
Osservazioni
DxgkDdiSetVidSourceAddress viene chiamato solo con primarie che si adattano alla topologia VidPN (Video Present Network) attualmente sottoposta a commit. Ad esempio, il formato D3DDDIFMT_A8R8G8B8 viene determinato in base a un vidPN di cui viene eseguito il commit in un formato di D3DDDIFMT_X8R8G8B8 e viceversa.
Il sottosistema kernel della grafica DirectX chiama DxgkDdiSetVidSourceAddress per cambiare la modalità di visualizzazione e per eseguire operazioni di inversione basate su I/O mappate alla memoria (MMIO). I flag di campo di bit nel Flag membro della struttura DXGKARG_SETVIDPNSOURCEADDRESS a cui punta il parametro pSetVidSourceAddress indica il tipo di operazione di visualizzazione da eseguire. Per cambiare la modalità di visualizzazione, il sottosistema del kernel grafico imposta il ContextCount membro di DXGKARG_SETVIDPNSOURCEADDRESS su zero. In questo caso, il contenuto della matrice specificato dal membro Context di di DXGKARG_SETVIDPNSOURCEADDRESS non è definito. Per eseguire un'operazione di scorrimento, il sottosistema kernel grafico imposta ContextCount sul numero di contesti e Contesto alla matrice di handle del contesto del driver per i contesti che contribuiscono all'operazione di inversione.
Se il driver miniport visualizzato indicato in precedenza, in una chiamata al relativo funzione DxgkDdiQueryAdapterInfo, che supporta un capovolgimento basato su MMIO (impostando il flag FlipOnVSyncMmIo campo di bit nel FlipCaps membro della struttura DXGK_DRIVERCAPS su TRUE), il driver DxgkDdiSetVidPnSourceAddress funzione viene successivamente chiamato 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, la superficie primaria il cui indirizzo è specificato nel PrimaryAddress membro di DXGKARG_SETVIDPNSOURCEADDRESS. Il driver deve anche passare il tipo di interrupt DXGK_INTERRUPT_CRTC_VSYNC nel parametro interruptType in una chiamata al DxgkCbNotifyInterrupt funzione 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 pagable e non deve modificare i dati presenti nella memoria pagable.
Clone-View situazioni
Nelle situazioni di clonazione, il driver miniport di visualizzazione deve gestire le operazioni di scorrimento in modo appropriato, come descritto in questa sezione.
Quando il DWM è in esecuzione, il sottosistema del kernel grafico DirectX si sincronizza quando si verifica una sincronizzazione verticale. Tuttavia, il sottosistema del kernel grafico 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 capovolgere immediatamente eventuali altri segnali di output della scheda grafica per evitare l'eliminazione.
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 monitor. Di conseguenza, il driver del miniport di visualizzazione potrebbe eseguire il rendering in una superficie che il secondo monitor è ancora visualizzato.
Le applicazioni video (ad esempio, Windows Media Player) non sono a conoscenza di situazioni di visualizzazione clone e prevedono un intervallo di sincronizzazione verticale prevedibile. Se l'utilità di pianificazione GPU ha rilevato le sincronizzazioni verticali di entrambi i monitor, l'intervallo di sincronizzazione verticale (e quindi il capovolgimento) sarebbe imprevedibile e si sarebbe allontanato nel tempo, il che causerebbe il funzionamento corretto delle applicazioni DWM e video.
Per le situazioni di clonazione, il driver miniport di visualizzazione deve eseguire un'inversione verticale del monitor primario e un'inversione immediata basata su MMIO sul monitor secondario.
La funzione di dxgkDdiSetVidSourceAddress del driver miniport deve registrare l'indirizzo a cui viene eseguito lo scorrimento nell'oggetto scheda grafica.
Per indirizzare il driver miniport di visualizzazione a non attendere il successivo ritracciamento verticale del monitor secondario, il sottosistema kernel della grafica DirectX imposta il FlipImmediate flag di campo di bit per TRUE in una chiamata alla funzione DxgkDdiSetVidSourceAd dress del driver.
Vedere i requisiti per chiamare questa funzione con sovrimpressioni multiplane in presentazione VidPN sovrapposta multipla.
Fabbisogno
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. |