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 |
Header | d3dkmddi.h (D3dkmddi.h を含む) |