次の方法で共有


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:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_CPU_VIRTUAL場合、CPU 仮想アドレスは [CpuVirtual] フィールドにあります。 DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_GPU_VIRTUAL場合、GPU 仮想アドレスは [GpuVirtual] フィールドにあります。 DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_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 され 、pDmaBufferNULL に設定されます。 この場合、ドライバーはページ テーブルを直ちに更新する必要があります。 それ以外の場合、 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 を含む)