DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE構造体 (d3dkmddi.h)
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE は、ページ テーブルの更新操作の一部として使用されます。
構文
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;
メンバーズ
PageTableLevel
更新されるページ テーブルのレベル。
hAllocation
ページ テーブル エントリによってマップされる割り当てのカーネル モード ドライバー ハンドル。 ハンドルは、DxgkDdiCreateAllocationからカーネル モード ドライバーによって返されます。 このハンドルは、カーネル モード ドライバー ハンドル (ページ テーブル、ページ ディレクトリなど) がない割り当てに対して NULL を できます。
PageTableAddress
更新するページ テーブルのアドレス。 DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateMode が DXGK_PAGETABLEUPDATE_CPU_VIRTUALされている場合、CPU 仮想アドレスは CpuVirtual フィールドにあります。 DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateMode が DXGK_PAGETABLEUPDATE_GPU_VIRTUALされている場合、GPU 仮想アドレスは GpuVirtual フィールドにあります。 DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateMode が DXGK_PAGETABLEUPDATE_GPU_PHYSICAL場合、GPU 物理アドレスは GpuPhysical フィールドにあります。
pPageTableEntries
コピーする必要があるエントリ。 pPageTableEntries 配列のインデックス 0 は、ドライバー ページ テーブルエントリ配列の StartIndex に対応します。
StartIndex
エントリをコピーするページ テーブル内のページ テーブル エントリの開始インデックス。 ページ テーブルエントリ配列インデックスは 0 から始まります。
NumPageTableEntries
コピーする必要があるエントリの数。
Reserved0
このメンバーは予約されており、0 に設定する必要があります。
Flags
DXGK_UPDATEPAGETABLEFLAGS 更新操作を記述する構造体です。
DriverProtection
MapGpuVirtualAddressRangeCb 内の UMD によって渡されます。
AllocationOffsetInBytes
hAllocation NULL 以外の場合、このフィールドは、割り当ての先頭から、この更新操作の対象となる最初のページまでの相対オフセットをバイト単位で指定します。 更新プログラムが hAllocation 複数のページを対象とする場合、それらのページは順次であることが保証されます。 たとえば、ビデオ メモリ マネージャーは、GPU 仮想アドレスを、hAllocationの 4,5,6,7 ページに更新している可能性があります。 非順次ページ (例: 4,5,7) を対象とする単一の更新操作がドライバーに表示される場合はありません。 ページは割り当ての観点から順次であることが保証されますが、メモリ内で物理的に連続していない可能性があることに注意してください。
hProcess
ページ テーブル エントリが更新されるプロセスのカーネル モード ドライバー プロセス ハンドル。 これは、DxgkDdiCreateProcess から返される値です。
UpdateMode
PageTableAddressの意味を定義します。 ページング プロセスのページ テーブルを初期化する場合、更新モードは常に DXGK_PAGETABLEUPDATE_CPU_VIRTUAL され、pDmaBuffer が null に設定。 この場合、ドライバーはすぐにページ テーブルを更新する必要があります。 それ以外の場合、UpdateMode は、DXGK_VIRTUALADDRESSCAPS::GpuMmu.PageTableUpdateModeで指定されている値に設定されます。
リーフ ページ テーブルのページ テーブル エントリを更新する場合、ビデオ メモリ マネージャーでは、各エントリが 4 KB ページをカバーしていると見なされます。 GPU ページが大きい場合 (4 KB * 2n)、ビデオ メモリ マネージャーは、GPU ページ内を指す配列内のエントリを提供します。 カーネル モード ドライバーは、GPU ページの先頭を指すページ テーブル エントリのみを初期化する必要がある場合があります。 次の図は、GPU ページが 16 KB の場合にこれを示しています。
pPageTableEntries64KB
64 KB のページ テーブルからコピーする必要があるエントリ。 pPageTableEntries 配列のインデックス 0 は、ドライバー ページ テーブルエントリ配列の StartIndex に対応します。 配列は、DXGK_GPUMMUCAPS::D ualPteSupported キャップが設定されている場合にのみ使用する必要があります。
FirstPteVirtualAddress
最初に更新されたページ テーブル エントリによってマップされる GPU 仮想アドレス。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 |
サポートされる最小サーバー | Windows Server 2016 |
ヘッダー | d3dkmddi.h (D3dkmddi.h を含む) |