struttura DXGKARG_PATCH (d3dkmddi.h)
La struttura DXGKARG_PATCH descrive un buffer DMA (Direct Memory Access) che richiede l'applicazione di patch, ovvero richiede l'assegnazione di indirizzi fisici.
Sintassi
typedef struct _DXGKARG_PATCH {
union {
[in] HANDLE hDevice;
[in] HANDLE hContext;
};
[in] UINT DmaBufferSegmentId;
[in] PHYSICAL_ADDRESS DmaBufferPhysicalAddress;
[in] VOID *pDmaBuffer;
[in] UINT DmaBufferSize;
[in] UINT DmaBufferSubmissionStartOffset;
[in] UINT DmaBufferSubmissionEndOffset;
[in] VOID *pDmaBufferPrivateData;
[in] UINT DmaBufferPrivateDataSize;
[in] UINT DmaBufferPrivateDataSubmissionStartOffset;
[in] UINT DmaBufferPrivateDataSubmissionEndOffset;
[in] const DXGK_ALLOCATIONLIST *pAllocationList;
[in] UINT AllocationListSize;
[in] const D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
[in] UINT PatchLocationListSize;
[in] UINT PatchLocationListSubmissionStart;
[in] UINT PatchLocationListSubmissionLength;
[in] UINT SubmissionFenceId;
[in] DXGK_PATCHFLAGS Flags;
[in] UINT EngineOrdinal;
} DXGKARG_PATCH;
Members
[in] hDevice
Se un driver non è compatibile con più motori (ovvero il driver non supporta la creazione del contesto), un handle per il dispositivo di visualizzazione (contesto grafico) da cui ha avuto origine la richiesta di invio. Un handle del dispositivo viene fornito alla funzione DxgkDdiPatch del driver nell'unione che DXGKARG_PATCH contiene.
Per alcune operazioni di paging, hDevice è NULL (ad esempio, operazioni di paging che eliminano il contenuto dell'intero buffer frame durante il risparmio energia). Le operazioni di paging sono indicate dal flag di campo di bit paging nel membro Flags .
[in] hContext
Se il driver è compatibile con più motori( ovvero il driver supporta la creazione del contesto), un handle per il contesto di dispositivo da cui ha avuto origine la richiesta di invio. Un handle di contesto viene fornito alla funzione DxgkDdiPatch del driver nell'unione che DXGKARG_PATCH contiene.
Per alcune operazioni di paging, hContext è NULL ( ad esempio, operazioni di paging che eliminano il contenuto dell'intero buffer frame durante il risparmio energia). Le operazioni di paging sono indicate dal flag di campo di bit paging nel membro Flags .
[in] DmaBufferSegmentId
Identificatore del segmento di memoria in cui è stato eseguito il paging del buffer DMA.
L'identificatore può essere zero se il driver indica di non eseguire il mapping del buffer DMA nel segmento impostando il membro DmaBufferSegmentSet della struttura DXGK_CONTEXTINFO su 0 in una chiamata alla funzione DxgkDdiCreateContext del driver. Se DmaBufferSegmentId è zero, il buffer DMA è stato allocato come blocco contiguo di memoria di sistema.
[in] DmaBufferPhysicalAddress
Tipo di dati PHYSICAL_ADDRESS (definito come LARGE_INTEGER) che indica l'indirizzo fisico in cui è stato eseguito il paging del buffer DMA.
Se DmaBufferSegmentId è zero, DmaBufferPhysicalAddress è l'indirizzo fisico nella memoria di sistema in cui si trova il buffer DMA.
Se DmaBufferSegmentId è diverso da zero, DmaBufferPhysicalAddress è l'indirizzo fisico del segmento per il buffer DMA, ovvero DXGK_SEGMENTDESCRIPTOR. BaseAddress + DmaBuffer.SegmentOffset).
Si noti che DmaBufferPhysicalAddress fa sempre riferimento all'inizio del buffer DMA anche se il driver potrebbe essere necessario applicare patch o inviare una sezione del buffer DMA che non include l'inizio del buffer DMA, ovvero se il membro DmaBufferSubmissionStartOffset è diverso da zero.
[in] pDmaBuffer
Puntatore all'inizio del buffer DMA, ovvero l'indirizzo virtuale dell'inizio del buffer DMA.
[in] DmaBufferSize
Dimensioni, in byte, del buffer DMA a cui punta pDmaBuffer .
Si noti che DmaBufferSize rappresenta l'intera lunghezza del buffer DMA; Tuttavia, la richiesta di applicare patch o inviare potrebbe fare riferimento solo a una parte del buffer DMA.
[in] DmaBufferSubmissionStartOffset
Offset, in byte, dall'inizio del buffer DMA specificato da pDmaBuffer all'inizio della parte del buffer DMA che richiede l'applicazione di patch o l'invio. L'offset ricevuto al momento della patch corrisponde all'offset ricevuto al momento dell'invio.
[in] DmaBufferSubmissionEndOffset
Offset, in byte, dall'inizio del buffer DMA specificato da pDmaBuffer alla fine della parte del buffer DMA che richiede l'applicazione di patch o l'invio. L'offset ricevuto al momento della patch corrisponde all'offset ricevuto al momento dell'invio.
[in] pDmaBufferPrivateData
Puntatore ai dati privati residenti nel driver associati al buffer DMA a cui punta pDmaBuffer .
Per le operazioni di paging, viene usato un singolo buffer di paging per più invii indipendenti. In questo scenario, il driver può indicare, restituendo il puntatore dati del driver privato appropriato in una chiamata alla relativa funzione DxgkDdiBuildPagingBuffer , per avere un singolo intervallo di dati privati driver per tutti gli invii o uno per ogni invio.
[in] DmaBufferPrivateDataSize
Dimensioni, in byte, dei dati del driver privato in pDmaBufferPrivateData.
Si noti che DmaBufferPrivateDataSize rappresenta l'intera lunghezza del buffer dei dati del driver privato; Tuttavia, la parte associata all'invio corrente potrebbe essere più piccola.
[in] DmaBufferPrivateDataSubmissionStartOffset
Offset, in byte, dall'inizio dei dati privati del buffer DMA che pDmaBufferPrivateData specifica all'inizio della parte dei dati privati associati all'invio corrente. DmaBufferPrivateDataSubmissionStartOffset è sempre zero per una richiesta non dipaging.
[in] DmaBufferPrivateDataSubmissionEndOffset
Offset, in byte, dall'inizio dei dati privati del buffer DMA specificati da pDmaBufferPrivateData alla fine della parte dei dati privati associati all'invio corrente.
[in] pAllocationList
Puntatore a una matrice di DXGK_ALLOCATIONLIST strutture per l'elenco di allocazioni associate al buffer DMA a cui pDmaBuffer punta.
Per le operazioni di paging, pAllocationList è NULL perché i buffer di paging non sono associati agli elenchi di allocazione.
[in] AllocationListSize
Numero di elementi nella matrice specificata da pAllocationList .
Si noti che AllocationListSize rappresenta le dimensioni totali dell'elenco di allocazione; Tuttavia, la parte dell'elenco di allocazione associata all'invio corrente potrebbe essere inferiore.
Si noti che per le operazioni di paging AllocationListSize è zero perché i buffer di paging non sono associati agli elenchi di allocazione.
[in] pPatchLocationList
Puntatore a una matrice di strutture D3DDDI_PATCHLOCATIONLIST per l'elenco di percorsi delle patch associati al buffer DMA a cui pDmaBuffer punta.
Si noti che la matrice può iniziare con un elemento precedente all'intervallo usato per applicare patch al buffer DMA.
Per le operazioni di paging, pPatchLocationList è NULL perché i buffer di paging non sono associati agli elenchi patch-location.
[in] PatchLocationListSize
Numero di elementi nella matrice specificata da pPatchLocationList .
Si noti che PatchLocationListSize rappresenta le dimensioni totali dell'elenco patch-location; Tuttavia, l'intervallo che il driver deve elaborare è in genere più piccolo.
Per le operazioni di paging, PatchLocationListSize è zero perché i buffer di paging non sono associati agli elenchi patch-location.
[in] PatchLocationListSubmissionStart
Indice del primo elemento nell'elenco patch-location che pPatchLocationList specifica che deve essere elaborato.
Per le operazioni di paging, PatchLocationListSubmissionStart è zero.
[in] PatchLocationListSubmissionLength
Numero di elementi nell'elenco patch-location specificato da pPatchLocationList che deve essere elaborato.
Per le operazioni di paging, PatchLocationListSubmissionLength è zero.
[in] SubmissionFenceId
Identificatore univoco che il driver può scrivere nel comando di isolamento alla fine del buffer DMA. Per altre informazioni su questo tipo di identificatore, vedere Specifica di identificatori di isolamento.
[in] Flags
Struttura DXGK_PATCHFLAGS che identifica le informazioni sul buffer DMA che richiede l'applicazione di patch.
[in] EngineOrdinal
Riservato per utilizzi futuri.
Commenti
Il driver miniport di visualizzazione restituisce una matrice nel membro pAllocationList di una struttura DXGKARG_PRESENT o DXGKARG_RENDER dalla relativa funzione DxgkDdiPresent o DxgkDdiRender dopo la conversione del buffer del comando in un buffer DMA (Direct Memory Access). La gestione memoria video assegna indirizzi fisici ai membri PhysicalAddress delle strutture DXGK_ALLOCATIONLIST nella matrice e passa questa matrice alla funzione DxgkDdiPatch del driver. Le patch DxgkDdiPatch si trovano nel buffer DMA con questi indirizzi fisici.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista |
Intestazione | d3dkmddi.h (include D3dkmddi.h) |