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)

Vedi anche

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender