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 数组中的索引零对应于驱动程序页表条目数组中的 StartIndex

StartIndex

页表中页表项的起始索引,其中应复制条目。 页表条目数组索引从零开始。

NumPageTableEntries

需要复制的条目数。

Reserved0

此成员是保留成员,应设置为零。

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 中指定。

更新叶页表的页表条目时,视频内存管理器假定每个条目包含一个 4KB 页面。 如果 GPU 页面较大 (4 KB * 2n) ,则视频内存管理器将提供数组中的条目,该条目位于 GPU 页面内。 内核模式驱动程序可能只需要初始化指向 GPU 页面开头的页表条目。 下图演示了 GPU 页面为 16 KB 的情况。

pPageTableEntries64KB

需要从 64KB 页表中复制的条目。 pPageTableEntries 数组中的索引零对应于驱动程序页表条目数组中的 StartIndex。 仅当设置了 DXGK_GPUMMUCAPS::D ualPteSupported 上限时,才应使用该数组。

FirstPteVirtualAddress

由第一个更新的页表条目映射的 GPU 虚拟地址。

要求

要求
最低受支持的客户端 Windows 10
最低受支持的服务器 Windows Server 2016
标头 d3dkmddi.h (包括 D3dkmddi.h)