次の方法で共有


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 され、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 を含む)