DXGKDDI_QUERYCURRENTFENCE funzione di callback (d3dkmddi.h)
La funzione DxgkDdiQueryCurrentFence query sull'identificatore di recinto di invio completato più recente nell'unità di esecuzione del comando hardware.
Sintassi
DXGKDDI_QUERYCURRENTFENCE DxgkddiQuerycurrentfence;
NTSTATUS DxgkddiQuerycurrentfence(
[in] IN_CONST_HANDLE hAdapter,
[in/out] INOUT_PDXGKARG_QUERYCURRENTFENCE pCurrentFence
)
{...}
Parametri
[in] 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 Microsoft DirectX nel MiniportDeviceContext parametro di output della funzione DxgkDdiAddDevice.
[in/out] pCurrentFence
Puntatore a una struttura DXGKARG_QUERYCURRENTFENCE che contiene informazioni sui dati di isolamento correnti.
Valore restituito
DxgkDdiQueryCurrentFence restituisce STATUS_SUCCESS o un risultato di errore appropriato se i dati di isolamento non vengono recuperati correttamente.
Osservazioni
Un è un'istruzione che contiene 64 bit di dati e un indirizzo. Il driver miniport di visualizzazione può inserire un recinto nel flusso DMA (Direct Memory Access) inviato all'unità di elaborazione grafica (GPU). Quando la GPU legge il limite, la GPU scrive i dati di recinzione nell'indirizzo di isolamento specificato. Tuttavia, prima che la GPU possa scrivere i dati di isolamento in memoria, deve assicurarsi che tutti i pixel delle primitive che precedono l'istruzione di isolamento vengano ritirati e scritti correttamente in memoria.
- Recinzioni regolari sono recinzioni che possono essere inserite in un buffer DMA creato in modalità utente. Poiché il contenuto di un buffer DMA dalla modalità utente non è attendibile, i recinti all'interno di tale buffer DMA devono fare riferimento a un indirizzo virtuale nello spazio indirizzi del contesto GPU e non a un indirizzo fisico. L'accesso a un indirizzo virtuale di questo tipo è associato allo stesso meccanismo di convalida della memoria di qualsiasi altro indirizzo virtuale a cui accede la GPU.
-
le recinzioni con privilegi sono recinzioni che possono essere inserite solo in un buffer DMA creato (e accessibile solo) in modalità kernel. Le recinzioni all'interno di un buffer DMA di questo tipo fanno riferimento a un indirizzo fisico in memoria.
Si noti che se l'indirizzo di destinazione del recinto era accessibile in modalità utente, il software dannoso potrebbe eseguire un'operazione grafica sulla posizione di memoria per la recinzione e quindi eseguire l'override del contenuto di ciò che il kernel dovrebbe ricevere.
Se il driver miniport di visualizzazione ha perso l'ultima recinzione di un buffer DMA, il driver DxgkDdiQueryCurrentFence funzione potrebbe essere chiamata per segnalare la recinzione mancante. Ad esempio, se l'hardware genera un recinto in memoria, la dxgkDdiInterruptRoutine funzione viene attivata per leggere la memoria. Tuttavia, se i dati del recinto non sono disponibili quando il conducente tenta di leggere i dati (ad esempio, se è presente un chipset difettoso), la recinzione viene in genere segnalata all'interruzione successiva, a meno che le interruzioni non siano state arrestate. Se gli interrupt sono stati arrestati e il sottosistema kernel della grafica DirectX attende troppo tempo per un recinto, il sottosistema chiama il DxgkDdiQueryCurrentFence funzione per verificare la recinzione corrente e determinare qualsiasi limite in sospeso che potrebbe aver perso.
Prima che il driver miniport di visualizzazione venga restituito da una chiamata a DxgkDdiQueryCurrentFence, se non è stato ancora segnalato l'identificatore di recinto di invio dell'hardware più recente, il driver deve chiamare la funzione DxgkCbNotifyInterrupt per segnalare la recinzione. Per implementare questa funzionalità, il driver:
- Tiene traccia dell'ultima recinzione segnalata al sistema operativo.
- Genera irQL all'interrupt del dispositivo. Per aumentare il livello di interruzione di IRQL, il driver può chiamare la funzione dxg DxgkCbSynchronizeExecution per la sincronizzazione con il relativo DxgkDdiInterruptRoutine funzione.
- In caso di interruzione del dispositivo IRQL, confronta l'ultima recinzione segnalata con la recinzione più recente completata dall'hardware.
- In caso di interruzione del dispositivo IRQL, chiama DxgkCbNotifyInterrupt solo quando l'hardware più recente completato è più recente dell'ultima recinzione segnalata.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows Vista |
piattaforma di destinazione | Desktop |
intestazione | d3dkmddi.h (include D3dkmddi.h) |
IRQL | PASSIVE_LEVEL |