DXGKARG_BUILDPAGINGBUFFER struttura (d3dkmddi.h)
La struttura DXGKARG_BUILDPAGINGBUFFER descrive i parametri per il callback DxgkDdiBuildPagingBuffer** che compila un buffer di paging da usare in un'operazione di trasferimento della memoria.
Sintassi
typedef struct _DXGKARG_BUILDPAGINGBUFFER {
VOID *pDmaBuffer;
UINT DmaSize;
VOID *pDmaBufferPrivateData;
UINT DmaBufferPrivateDataSize;
DXGK_BUILDPAGINGBUFFER_OPERATION Operation;
UINT MultipassOffset;
union {
struct {
HANDLE hAllocation;
UINT TransferOffset;
SIZE_T TransferSize;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Source;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Destination;
DXGK_TRANSFERFLAGS Flags;
UINT MdlOffset;
} Transfer;
struct {
HANDLE hAllocation;
SIZE_T FillSize;
UINT FillPattern;
struct {
UINT SegmentId;
LARGE_INTEGER SegmentAddress;
} Destination;
} Fill;
struct {
HANDLE hAllocation;
DXGK_DISCARDCONTENTFLAGS Flags;
UINT SegmentId;
PHYSICAL_ADDRESS SegmentAddress;
} DiscardContent;
struct {
UINT SegmentId;
PHYSICAL_ADDRESS PhysicalAddress;
} ReadPhysical;
struct {
UINT SegmentId;
PHYSICAL_ADDRESS PhysicalAddress;
} WritePhysical;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
PMDL pMdl;
DXGK_MAPAPERTUREFLAGS Flags;
ULONG MdlOffset;
} MapApertureSegment;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
PHYSICAL_ADDRESS DummyPage;
} UnmapApertureSegment;
struct {
HANDLE hAllocation;
UINT TransferOffset;
SIZE_T TransferSize;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Source;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Destination;
DXGK_TRANSFERFLAGS Flags;
UINT SwizzlingRangeId;
UINT SwizzlingRangeData;
} SpecialLockTransfer;
struct {
HANDLE hAllocation;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
PVOID VirtualAddress;
D3DGPU_VIRTUAL_ADDRESS GpuVirtualAddress;
} Destination;
} InitContextResource;
DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL TransferVirtual;
DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL FillVirtual;
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE UpdatePageTable;
DXGK_BUILDPAGINGBUFFER_FLUSHTLB FlushTlb;
DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES CopyPageTableEntries;
DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION UpdateContextAllocation;
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY NotifyResidency;
DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE SignalMonitoredFence;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
DXGK_ADL Adl;
DXGK_MAPAPERTUREFLAGS Flags;
ULONG AdlOffset;
PVOID CpuVisibleAddress;
} MapApertureSegment2;
DXGK_BUILDPAGINGBUFFER_NOTIFY_FENCE_RESIDENCY NotifyFenceResidency;
DXGK_BUILDPAGINGBUFFER_MAPMMU MmapMmu;
DXGK_BUILDPAGINGBUFFER_UNMAPMMU UnmapMmu;
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY2 NotifyResidency2;
DXGK_BUILDPAGINGBUFFER_NOTIFYALLOC NotifyAllocation;
struct {
UINT Reserved[64];
} Reserved;
};
HANDLE hSystemContext;
D3DGPU_VIRTUAL_ADDRESS DmaBufferGpuVirtualAddress;
UINT DmaBufferWriteOffset;
} DXGKARG_BUILDPAGINGBUFFER;
Members
pDmaBuffer
[in/out] Indirizzo virtuale al primo byte disponibile nel buffer di paging. Quando il driver viene chiamato per la prima volta con un nuovo buffer di paging, questo indirizzo virtuale è allineato a 4 KB. Il driver esegue strettamente le operazioni nel buffer di paging fino a quando il buffer di paging non è pieno e quindi usa un nuovo buffer di paging. Pertanto, se l'unità di elaborazione grafica (GPU) richiede un allineamento specifico per un invio di buffer di paging, il driver deve applicare questo allineamento spaziando le operazioni che scrive nel buffer di paging. Prima che la funzione DxgkDdiBuildPagingBuffer restituisca, il driver deve aggiornare pDmaBuffer per puntare l'ultimo byte scritto nel buffer di paging.
DmaSize
[in/out] Dimensioni, in byte, del buffer di paging che pDmaBuffer specifica.
pDmaBufferPrivateData
[in/out] Puntatore a una struttura di dati privata residente dal driver associata al buffer DMA (Direct Memory Access) (ovvero il buffer di paging) specificato da pDmaBuffer .
DmaBufferPrivateDataSize
[in/out] Numero di byte che rimangono nella struttura di dati privata a cui pDmaBufferPrivateData punta per l'operazione corrente.
Operation
[in] Valore DXGK_BUILDPAGINGBUFFER_OPERATION tipizzato che indica il tipo di operazione di memoria da eseguire.
MultipassOffset
[in/out] Valore UINT che specifica lo stato di avanzamento dell'operazione di paging se sono necessari più buffer di paging. Il driver imposta questo valore per indicare una suddivisione in più buffer di paging per più operazioni di trasferimento. Ad esempio, il driver può archiviare il numero di pagina che è stato trasferito per un trasferimento basato su pagine.
Transfer
[in] Struttura che descrive l'operazione di trasferimento.
Transfer.hAllocation
[in] Handle per l'allocazione restituita in precedenza dalla funzione DxgkDdiCreateAllocation nel membro hAllocation di una struttura di DXGK_ALLOCATIONINFO, che fa parte del membro pAllocationInfo della struttura di DXGKARG_CREATEALLOCATION. L'handle di allocazione punta a un buffer che contiene dati del driver privato per il trasferimento.
Transfer.TransferOffset
[in] Offset, in byte, della prima pagina all'interno dell'allocazione trasferita. Questo offset viene applicato solo a una posizione descritta da un segmento. Questo offset non si applica a una descrizione MDL di un intervallo di memoria. Se il driver richiede più buffer di paging per completare il trasferimento, ovvero il driver restituisce STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER dalla relativa funzione DxgkDdiBuildPagingBuffer , TransferOffset è lo stesso per ogni chiamata a DxgkDdiBuildPagingBuffer per questo trasferimento.
Transfer.TransferSize
[in] Dimensioni, in byte, delle informazioni sulla memoria da trasferire.
Transfer.Source
[in] Struttura che descrive l'allocazione di origine. Questa struttura contiene un membro SegmentId e un'unione che contiene un offset in un segmento dell'allocazione di origine (SegmentAddress) o un puntatore a un MDL per l'origine (pMdl).
Transfer.Source.SegmentId
[in] Identificatore di un segmento all'interno dell'allocazione di origine o zero se l'allocazione di origine è descritta dal membro pMdl dell'unione contenente l'origine.
Transfer.Source.SegmentAddress
[in] Indirizzo del segmento di origine, se il membro SegmentId di Source è diverso da zero. Il sottosistema kernel della grafica DirectX calcola l'indirizzo del segmento come somma dell'offset del segmento e l'indirizzo di base del segmento: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
Transfer.Source.pMdl
[in] Puntatore a un buffer contenente la struttura MDL che descrive le pagine di memoria di sistema per l'origine, se il membro SegmentId di Source è zero.
Transfer.Destination
[in] Struttura che descrive l'allocazione di destinazione. Questa struttura contiene un membro SegmentId e un'unione che contiene un offset in un segmento dell'allocazione di destinazione (SegmentAddress) o un puntatore a un MDL per la destinazione (pMdl).
Transfer.Destination.SegmentId
[in] Identificatore di un segmento all'interno dell'allocazione di destinazione o zero se l'allocazione di destinazione è descritta dal membro pMdl dell'unione contenente destinazione .
Transfer.Destination.SegmentAddress
[in] Indirizzo del segmento di destinazione, se il membro SegmentId di Destination è diverso da zero. Il sottosistema kernel della grafica DirectX calcola l'indirizzo del segmento come somma dell'offset del segmento e l'indirizzo di base del segmento: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
Transfer.Destination.pMdl
[in] Puntatore a un buffer contenente la struttura MDL che descrive le pagine di memoria di sistema per la destinazione, se il membro SegmentId di Destination è zero.
Transfer.Flags
[in] Struttura DXGK_TRANSFERFLAGS che identifica, in flag di campo a bit, il tipo di operazione di trasferimento speciale da eseguire.
Transfer.MdlOffset
[in] Offset, nelle pagine di memoria di sistema, all'interno della struttura MDL a cui punta il membro pMdl , alla prima pagina di memoria di sistema per l'operazione corrente. Il driver può ottenere l'indirizzo fisico della prima pagina di memoria di sistema chiamando la funzione [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray come indicato di seguito.
MmGetMdlPfnArray(pMdl)[MdlOffset];
Fill
[in] Struttura che descrive l'operazione di riempimento.
Fill.hAllocation
[in] Handle per l'allocazione contenente il contenuto da riempire.
Fill.FillSize
[in] Dimensioni, in byte, delle informazioni sulla memoria da riempire.
Fill.FillPattern
[in] Modello con cui riempire la destinazione. La gestione memoria video usa queste informazioni per inizializzare la memoria video in un modello specifico quando un'allocazione senza contenuto viene prima paginata. In questo caso, nessuna origine esiste per la richiesta di riempimento, ma esiste solo una destinazione.
Fill.Destination
[in] Struttura che descrive l'allocazione di destinazione per l'operazione di riempimento.
Fill.Destination.SegmentId
[in] Identificatore di un segmento all'interno dell'allocazione di destinazione.
Fill.Destination.SegmentAddress
[in] Indirizzo del segmento di destinazione. Il sottosistema kernel della grafica DirectX calcola l'indirizzo del segmento come somma dell'offset del segmento e l'indirizzo di base del segmento: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
DiscardContent
[in] Struttura che descrive l'operazione di eliminazione del contenuto.
DiscardContent.hAllocation
[in] Handle per l'allocazione che contiene contenuto da eliminare.
DiscardContent.Flags
[in] Struttura DXGK_DISCARDCONTENTFLAGS che identifica, in flag di campo a bit, il tipo di operazione di eliminazione del contenuto da eseguire.
DiscardContent.SegmentId
[in] Identificatore di un segmento all'interno dell'allocazione da cui eliminare il contenuto.
DiscardContent.SegmentAddress
[in] Tipo di dati PHYSICAL_ADDRESS (definito come LARGE_INTEGER) che indica l'indirizzo del segmento. Il sottosistema kernel della grafica DirectX calcola l'indirizzo del segmento come somma dell'offset del segmento e l'indirizzo di base del segmento: SegmentAddress = SegmentOffset + Segment.BaseAddr
. Questa posizione è la posizione in cui il contenuto viene rimosso.
ReadPhysical
[in] Struttura che descrive l'operazione di lettura-fisica.
ReadPhysical.SegmentId
[in] Identificatore di un segmento da cui i dati sono letti.
ReadPhysical.PhysicalAddress
[in] Tipo di dati PHYSICAL_ADDRESS (definito come LARGE_INTEGER) che indica l'indirizzo fisico, all'interno del segmento specificato da SegmentId , dove i dati vengono letti.
WritePhysical
[in] Struttura che descrive l'operazione fisica di scrittura.
WritePhysical.SegmentId
[in] Identificatore di un segmento a cui vengono scritti i dati.
WritePhysical.PhysicalAddress
[in] Tipo di dati PHYSICAL_ADDRESS (definito come LARGE_INTEGER) che indica l'indirizzo fisico, all'interno del segmento specificato da SegmentId , dove vengono scritti i dati.
MapApertureSegment
[in] Struttura che descrive l'operazione di segmento map-aperture usando un MDL.
MapApertureSegment.hDevice
[in] Handle al dispositivo proprietario dell'allocazione che hAllocation specifica che viene eseguito il mapping nel segmento di apertura specificato da SegmentId .
Per un'allocazione condivisa, hDevice è impostato sul dispositivo che la gestione memoria video ha determinato di essere il proprietario dell'allocazione.
hDevice è NULL per l'allocazione primaria.
MapApertureSegment.hAllocation
[in] Handle per l'allocazione mappata al segmento di apertura specificato da SegmentId .
hAllocation è NULL quando viene eseguito il mapping di un buffer DMA al segmento di apertura perché i buffer DMA non vengono creati in modo esplicito dal driver.
MapApertureSegment.SegmentId
[in] Identificatore di un segmento di apertura da configurare.
MapApertureSegment.OffsetInPages
[in] Offset, nelle pagine, dall'inizio del segmento alla prima pagina da mappare.
MapApertureSegment.NumberOfPages
[in] Numero di pagine da mappare.
MapApertureSegment.pMdl
[in] Puntatore a un buffer contenente la struttura MDL che descrive le pagine di memoria del sistema fisico da mappare nel segmento di apertura.
MapApertureSegment.Flags
[in] Struttura DXGK_MAPAPERTUREFLAGS che identifica, in flag di campo a bit, il tipo di operazione del segmento di apertura mappa da eseguire.
MapApertureSegment.MdlOffset
[in] Offset, nelle pagine di memoria di sistema, all'interno della struttura MDL a cui punta il membro pMdl , alla prima pagina di memoria di sistema per l'operazione corrente. Il driver può ottenere l'indirizzo fisico della prima pagina di memoria di sistema chiamando la funzione [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray come indicato di seguito.
MmGetMdlPfnArray(pMdl)[MdlOffset];
UnmapApertureSegment
[in] Struttura che descrive l'operazione unmap-aperture-segmento.
UnmapApertureSegment.hDevice
[in] Handle al dispositivo proprietario dell'allocazione che hAllocation specifica che non viene eseguito il mapping dal segmento di apertura specificato da SegmentId .
Per un'allocazione condivisa, hDevice è impostato sul dispositivo che la gestione memoria video ha determinato di essere il proprietario dell'allocazione.
hDevice è NULL per l'allocazione primaria.
UnmapApertureSegment.hAllocation
[in] Handle per l'allocazione non mappata dal segmento di apertura specificato da SegmentId .
hAllocation è NULL quando un buffer DMA non viene eseguito il mapping dal segmento di apertura perché i buffer DMA non vengono creati in modo esplicito dal driver.
UnmapApertureSegment.SegmentId
[in] Identificatore di un segmento di apertura da configurare.
UnmapApertureSegment.OffsetInPages
[in] Offset, nelle pagine, dall'inizio del segmento alla prima pagina per annullare il mapping.
UnmapApertureSegment.NumberOfPages
[in] Numero di pagine da annullare.
UnmapApertureSegment.DummyPage
[in] Tipo di dati PHYSICAL_ADDRESS (definito come LARGE_INTEGER) che indica l'indirizzo fisico della pagina segnaposto in cui il driver deve eseguire il mapping dell'intervallo non mappato.
SpecialLockTransfer
[in] Struttura che descrive l'operazione special-lock-transfer.
SpecialLockTransfer.hAllocation
[in] Handle per l'allocazione restituita in precedenza dalla funzione DxgkDdiCreateAllocation nel membro hAllocation di una struttura di DXGK_ALLOCATIONINFO, che fa parte del membro pAllocationInfo della struttura di DXGKARG_CREATEALLOCATION. L'handle di allocazione punta a un buffer che contiene dati del driver privato per il trasferimento speciale.
SpecialLockTransfer.TransferOffset
[in] Offset, in byte, della prima pagina all'interno dell'allocazione trasferita. Questo offset viene applicato solo a una posizione descritta da un segmento. Questo offset non si applica a una descrizione MDL di un intervallo di memoria. Se il driver richiede più buffer di paging per completare il trasferimento, ovvero il driver restituisce STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER dalla relativa funzione DxgkDdiBuildPagingBuffer , TransferOffset è lo stesso per ogni chiamata a DxgkDdiBuildPagingBuffer per questo trasferimento.
SpecialLockTransfer.TransferSize
[in] Dimensioni, in byte, delle informazioni sulla memoria da trasferire.
SpecialLockTransfer.Source
[in] Struttura che descrive l'allocazione di origine. Questa struttura contiene un membro SegmentId e un'unione che contiene un offset in un segmento dell'allocazione di origine (SegmentAddress) o un puntatore a un MDL per l'origine (pMdl).
SpecialLockTransfer.Source.SegmentId
[in] Identificatore di un segmento all'interno dell'allocazione di origine o zero se l'allocazione di origine è descritta dal membro pMdl dell'unione contenente l'origine.
SpecialLockTransfer.Source. (unione senza nome)
[in] Unione che contiene un offset in un segmento dell'allocazione di origine (SegmentAddress) o un puntatore a un MDL per l'origine (pMdl).
SpecialLockTransfer.Source.SegmentAddress
[in] Indirizzo del segmento di origine, se il membro SegmentId di Source è diverso da zero. Il sottosistema kernel della grafica DirectX calcola l'indirizzo del segmento come somma dell'offset del segmento e l'indirizzo di base del segmento: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
SpecialLockTransfer.Source.pMdl
[in] Puntatore a un buffer contenente la struttura MDL che descrive le pagine di memoria di sistema per l'origine, se il membro SegmentId di Source è zero.
SpecialLockTransfer.Destination
[in] Struttura che descrive l'allocazione di destinazione. Questa struttura contiene un membro SegmentId e un'unione che contiene un offset in un segmento dell'allocazione di destinazione (SegmentAddress) o un puntatore a un MDL per la destinazione (pMdl).
SpecialLockTransfer.Destination.SegmentId
[in] Identificatore di un segmento all'interno dell'allocazione di destinazione oppure zero se l'allocazione di destinazione è descritta dal membro pMdl dell'unione contenuta in Destination .
SpecialLockTransfer.Destination. (unione senza nome)
[in] Unione che contiene un offset in un segmento dell'allocazione di destinazione (SegmentAddress) o un puntatore a un MDL per la destinazione (pMdl).
SpecialLockTransfer.Destination.SegmentAddress
[in] Indirizzo del segmento di destinazione, se il membro SegmentId di Destination è diverso da zero. Il sottosistema kernel della grafica DirectX calcola l'indirizzo del segmento come somma dell'offset del segmento e l'indirizzo di base del segmento: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
SpecialLockTransfer.Destination.pMdl
[in] Puntatore a un buffer contenente la struttura MDL che descrive le pagine di memoria di sistema per la destinazione, se il membro SegmentId di Destination è zero.
SpecialLockTransfer.Flags
[in] Struttura DXGK_TRANSFERFLAGS che identifica, in flag di campo di bit, il tipo di operazione speciale di trasferimento blocchi da eseguire.
SpecialLockTransfer.SwizzlingRangeId
[in] Valore UINT che identifica l'intervallo di scorrimento.
SpecialLockTransfer.SwizzlingRangeData
[in] Valore UINT che specifica i dati dell'intervallo di scorrimento.
InitContextResource
[in] Struttura che descrive l'operazione di inizializzazione del contesto. Supportato a partire da Windows 8.
InitContextResource.hAllocation
[in] Handle per l'allocazione del contesto creata quando il driver ha chiamato DxgkCbCreateContextAllocation. L'handle per questa allocazione viene restituito nel membro hAllocation della struttura DXGKARGCB_CREATECONTEXTALLOCATION . Il driver passa un puntatore a questa struttura nel parametro ContextAllocation quando chiama DxgkCbCreateContextAllocation.
InitContextResource.Destination
[in] Struttura che descrive l'allocazione del contesto di destinazione. Questa struttura contiene un membro SegmentId e un'unione che contiene un offset in un segmento dell'allocazione del contesto di destinazione (SegmentAddress) o un puntatore a un MDL per la destinazione (pMdl).
InitContextResource.Destination.SegmentId
[in] Identificatore di un segmento all'interno dell'allocazione del contesto di destinazione oppure zero se l'allocazione del contesto di destinazione è descritta dal membro pMdl dell'unione contenuta in Destination .
InitContextResource.Destination. (unione senza nome)
[in] Unione che contiene un offset in un segmento dell'allocazione del contesto di destinazione (SegmentAddress) o un puntatore a un MDL per la destinazione (pMdl).
InitContextResource.Destination.SegmentAddress
[in] Indirizzo del segmento di destinazione, se il membro SegmentId di Destination è diverso da zero. Il sottosistema kernel della grafica DirectX calcola l'indirizzo del segmento come somma dell'offset del segmento e l'indirizzo di base del segmento: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
InitContextResource.Destination.pMdl
[in] Puntatore a un buffer contenente la struttura MDL che descrive le pagine di memoria di sistema per la destinazione, se il membro SegmentId di Destination è zero.
InitContextResource.Destination.VirtualAddress
[in] Indirizzo virtuale dell'allocazione del contesto di destinazione. Questo indirizzo è valido durante la durata dell'allocazione del contesto.
Seguire le procedure nella sezione Indirizzi virtuali per le allocazioni del contesto di destinazione" dell'argomento DxgkCbCreateContextAllocation per assicurarsi che l'indirizzo virtuale sia valido.
InitContextResource.Destination.GpuVirtualAddress
Indirizzo virtuale GPU della risorsa di contesto da inizializzare.
TransferVirtual
Struttura DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL che descrive l'operazione usata per trasferire il contenuto di allocazione tra posizioni in memoria.
FillVirtual
Struttura DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL che descrive l'operazione utilizzata per riempire un'allocazione con un criterio.
UpdatePageTable
Struttura DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE che descrive l'operazione utilizzata per aggiornare una tabella di pagine.
FlushTlb
Struttura DXGK_BUILDPAGINGBUFFER_FLUSHTLB che descrive l'operazione utilizzata per scaricare i buffer di ricerca della traduzione.
CopyPageTableEntries
Struttura DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES che descrive l'operazione utilizzata per copiare le voci della tabella di pagina da una posizione a un'altra.
UpdateContextAllocation
Struttura DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION che descrive l'operazione utilizzata per aggiornare il contenuto di un contesto o di un'allocazione del dispositivo.
NotifyResidency
Struttura DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY che descrive un'operazione di modifica dell'allocazione della residenza.
SignalMonitoredFence
[in] Struttura DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE che descrive un'istruzione GPU per segnalare l'oggetto recinto monitorato di paging al buffer DMA. Disponibile a partire da Windows 10 versione 1703 (WDDM 2.2).
MapApertureSegment2
MapApertureSegment2.hDevice
[in] Handle per il dispositivo proprietario dell'allocazione che hAllocation specifica che è mappato al segmento di apertura specificato da SegmentId .
Per un'allocazione condivisa, hDevice è impostato sul dispositivo che il gestore della memoria video ha determinato di essere il proprietario dell'allocazione.
hDevice è NULL per l'allocazione primaria.
MapApertureSegment2.hAllocation
[in] Handle del driver per l'allocazione mappata nel segmento di apertura specificato da SegmentId .
hAllocation è NULL quando viene eseguito il mapping di un buffer DMA nel segmento di apertura perché i buffer DMA non vengono creati in modo esplicito dal driver.
MapApertureSegment2.SegmentId
[in] Identificatore di un segmento di apertura da configurare.
MapApertureSegment2.OffsetInPages
[in] Offset, nelle pagine, dall'inizio del segmento alle prime pagine di cui eseguire il mapping.
MapApertureSegment2.NumberOfPages
[in] Dimensioni dell'intervallo di cui viene eseguito il mapping all'interno dell'allocazione, nelle pagine.
MapApertureSegment2.Adl
[in] Struttura DXGK_ADL con l'elenco dei descrittori di indirizzi (ADL) che descrive i mapping di indirizzi logici (pagine) per la memoria di allocazione. AdL può essere contiguo o una matrice di pagine; il driver deve essere in grado di gestire entrambi i casi.
MapApertureSegment2.Flags
[in] Struttura DXGK_MAPAPERTUREFLAGS che identifica, in flag di campo di bit, il tipo di operazione map-aperture-segment da eseguire.
MapApertureSegment2.AdlOffset
[in] Offset all'interno di ADL all'inizio dell'intervallo di indirizzi logici di cui è stato eseguito il mapping per l'operazione corrente, specificato nelle pagine di memoria di sistema. Se ADL è un ADL contiguo, il membro BasePageNumber di ADL è l'indirizzo iniziale di un intervallo contiguo di memoria. In caso contrario, utilizzare il membro Pages di ADL per la memoria non contigua.
MapApertureSegment2.CpuVisibleAddress
Se l'allocazione di un driver è stata creata con il flag MapApertureCpuVisible,CpuVisibleAddress è un puntatore non Null a un indirizzo virtuale mappato al sistema e in modalità kernel per le operazioni di DXGK_OPERATION_MAP_APERTURE_SEGMENT2 . Questo indirizzo è valido finché l'allocazione viene mappata nel segmento di apertura e verrà liberata immediatamente dopo la chiamata di DXGK_OPERATION_UNMAP_APERTURE_SEGMENT corrispondente per la stessa allocazione.
Se MapApertureCpuVisible non è specificato, CpuVisibleAddress è NULL per le operazioni di DXGK_OPERATION_MAP_APERTURE_SEGMENT2 .
NotifyFenceResidency
MmapMmu
UnmapMmu
NotifyResidency2
NotifyAllocation
Reserved
Questo membro è riservato e non deve essere utilizzato.
Reserved.Reserved[64]
Questo membro è riservato e non deve essere utilizzato.
hSystemContext
[in] Handle per il contesto di sistema per l'operazione di paging.
DmaBufferGpuVirtualAddress
Tipo di dati D3DGPU_VIRTUAL_ADDRESS che indica l'indirizzo virtuale in cui è stato eseguito il paging del buffer DMA. Se l'indirizzo fisico è zero, il buffer DMA non viene eseguito correttamente il paging.
DmaBufferWriteOffset
Offset dell'operazione corrente in byte dall'inizio del buffer DMA.
Commenti
MDL è definito nella documentazione di Windows Driver Model (WDM).
Classe di sincronizzazione WDDM:
- Classe di utilità di pianificazione GPU di primo livello per il tipo di invio BuildPagingBuffer .
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato a partire da Windows Vista. |
Intestazione | d3dkmddi.h (include D3dkmddi.h) |
Vedi anche
DXGKARGCB_CREATECONTEXTALLOCATION
DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES
DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL
DXGK_BUILDPAGINGBUFFER_FLUSHTLB
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY
DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL
DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE
[MmGetMdlPfnArray] (/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray