DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE Struktur (d3dkmddi.h)

DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE wird als Teil eines Aktualisierungsvorgangs für Seitentabellen verwendet.

Syntax

typedef struct _DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE {
  UINT                        PageTableLevel;
  HANDLE                      hAllocation;
  DXGK_PAGETABLEUPDATEADDRESS PageTableAddress;
  DXGK_PTE                    *pPageTableEntries;
  UINT                        StartIndex;
  UINT                        NumPageTableEntries;
  UINT                        Reserved0;
  DXGK_UPDATEPAGETABLEFLAGS   Flags;
  UINT64                      DriverProtection;
  UINT64                      AllocationOffsetInBytes;
  HANDLE                      hProcess;
  DXGK_PAGETABLEUPDATEMODE    UpdateMode;
  DXGK_PTE                    *pPageTableEntries64KB;
  D3DGPU_VIRTUAL_ADDRESS      FirstPteVirtualAddress;
} DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE;

Member

PageTableLevel

Ebene einer Seitentabelle, die aktualisiert wird.

hAllocation

Kernelmodustreiberhandle einer Zuordnung, die durch die Seitentabelleneinträge zugeordnet wird. Das Handle wird vom Kernelmodustreiber von DxgkDdiCreateAllocation zurückgegeben. Das Handle kann NULL für Zuordnungen sein, die kein Kernelmodustreiberhandle (Seitentabellen, Seitenverzeichnisse usw.) aufweisen.

PageTableAddress

Adresse der zu aktualisierenden Seitentabelle. Wenn DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_CPU_VIRTUAL ist, befindet sich die virtuelle CPU-Adresse im Feld CpuVirtual . Wenn DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_GPU_VIRTUAL ist, befindet sich die virtuelle GPU-Adresse im Feld GpuVirtual . Wenn DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_GPU_PHYSICAL ist, befindet sich die physische GPU-Adresse im Feld GpuPhysical .

pPageTableEntries

Die Einträge, die kopiert werden müssen. Der Index null im pPageTableEntries-Array entspricht dem StartIndex im Tabelleneintragsarray der Treiberseite.

StartIndex

Der Startindex eines Seitentabelleneintrags in der Seitentabelle, in die die Einträge kopiert werden sollen. Der Seitentabelleneintragsarrayindex ist nullbasiert.

NumPageTableEntries

Die Anzahl der Einträge, die kopiert werden müssen.

Reserved0

Dieser Member ist reserviert und sollte auf null festgelegt werden.

Flags

DXGK_UPDATEPAGETABLEFLAGS Struktur, die den Aktualisierungsvorgang beschreibt.

DriverProtection

Wird von UMD in MapGpuVirtualAddressRangeCb übergeben.

AllocationOffsetInBytes

Wenn hAllocation nicht NULL ist, gibt dieses Feld den relativen Offset in Bytes vom Anfang der Zuordnung bis zur ersten Seite an, auf die dieser Aktualisierungsvorgang abzielt. Wenn das Update mehrere Seiten aus hAllocation anzielt, wird garantiert, dass diese Seiten sequenziell sind. Beispielsweise aktualisiert der Videospeicher-Manager möglicherweise eine virtuelle GPU-Adresse auf Seite 4,5,6,7 in hAllocation. Es wird nie einen Fall geben, in dem einem Treiber ein einzelner Aktualisierungsvorgang angezeigt wird, der auf nicht sequenzielle Seiten ausgerichtet ist (z. B. 4,5,7). Beachten Sie, dass die Seiten zwar vom Standpunkt der Zuordnung her garantiert sequenziell sind, aber möglicherweise nicht physisch im Arbeitsspeicher zusammenhängend sind.

hProcess

Kernelmodustreiberprozesshandle für den Prozess, dessen Seitentabelleneinträge aktualisiert werden. Dies ist der von DxgkDdiCreateProcess zurückgegebene Wert.

UpdateMode

Definiert die Bedeutung von PageTableAddress. Beim Initialisieren von Seitentabellen für den Pagingprozess ist der Aktualisierungsmodus immer DXGK_PAGETABLEUPDATE_CPU_VIRTUAL und pDmaBuffer auf NULL festgelegt. In diesem Fall muss der Treiber die Seitentabellen sofort aktualisieren. In anderen Fällen wird der UpdateMode auf den Wert festgelegt, der in DXGK_VIRTUALADDRESSCAPS::GpuMmu.PageTableUpdateMode angegeben wird.

Beim Aktualisieren von Seitentabelleneinträgen für eine Blattseitentabelle geht der Videospeicher-Manager davon aus, dass jeder Eintrag eine Seite mit 4 KB abdeckt. Wenn eine GPU-Seite größer ist (4 KB * 2n), stellt der Videospeicher-Manager Einträge im Array bereit, die innerhalb der GPU-Seiten zeigen. Der Kernelmodustreiber muss möglicherweise nur Seitentabelleneinträge initialisieren, die auf den Anfang von GPU-Seiten verweisen. Die folgende Abbildung veranschaulicht dies für den Fall, wenn die GPU-Seite 16 KB beträgt.

pPageTableEntries64KB

Die Einträge, die aus den 64 KB-Seitentabellen kopiert werden müssen. Der Index null im pPageTableEntries-Array entspricht dem StartIndex im Tabelleneintragsarray der Treiberseite. Das Array sollte nur verwendet werden, wenn die DXGK_GPUMMUCAPS::D ualPteSupported-Obergrenze festgelegt ist.

FirstPteVirtualAddress

Die virtuelle GPU-Adresse, die durch den ersten aktualisierten Seitentabelleneintrag zugeordnet wird.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10
Unterstützte Mindestversion (Server) Windows Server 2016
Kopfzeile d3dkmddi.h (einschließlich D3dkmddi.h)