DXGK_GPUMMUCAPS 结构 (d3dkmddi.h)

内核模式驱动程序使用 DXGK_GPUMMUCAPS 结构来表示虚拟内存寻址功能。

语法

typedef struct _DXGK_GPUMMUCAPS {
  union {
    struct {
      UINT ReadOnlyMemorySupported : 1;
      UINT NoExecuteMemorySupported : 1;
      UINT ZeroInPteSupported : 1;
      UINT ExplicitPageTableInvalidation : 1;
      UINT CacheCoherentMemorySupported : 1;
      UINT PageTableUpdateRequireAddressSpaceIdle : 1;
      UINT LargePageSupported : 1;
      UINT DualPteSupported : 1;
      UINT AllowNonAlignedLargePageAddress : 1;
      UINT SysMem64KBPageSupported : 1;
      UINT InvalidTlbEntriesNotCached : 1;
      UINT SysMemLargePageSupported : 1;
      UINT CachedPageTables : 1;
#if ...
      UINT Reserved : 19;
#elif
      UINT Reserved : 20;
#elif
      UINT Reserved : 21;
#elif
      UINT Reserved : 22;
#else
      UINT Reserved : 24;
#endif
    };
    UINT Value;
  };
  DXGK_PAGETABLEUPDATEMODE PageTableUpdateMode;
  UINT                     VirtualAddressBitCount;
  UINT                     LeafPageTableSizeFor64KPagesInBytes;
  UINT                     PageTableLevelCount;
  struct {
    UINT SourcePageTableVaInTransfer : 1;
    UINT Reserved : 31;
  } LegacyBehaviors;
} DXGK_GPUMMUCAPS;

成员

ReadOnlyMemorySupported

当设置为 1 时,驱动程序支持内存页上的只读保护。

NoExecuteMemorySupported

当设置为 1 时,驱动程序不支持在内存页上 执行 保护。

ZeroInPteSupported

当设置为 1 时,GPU 支持 零DXGK_PTE 标志。 这适用于所有页表级别。

ExplicitPageTableInvalidation

指示在释放之前,应通过 UpdatePageTable 显式将页表或页目录的所有条目置于无效状态。 默认情况下,如果不再需要这些条目,视频内存管理器可能会释放包含以前有效条目的页表, (释放较大的 GPU 虚拟地址范围,从而导致) 破坏基础页表。

注意

此标志通常由软件驱动程序使用,该驱动程序需要模拟页表,需要跟踪每页表条目的信息,并且需要对所有页表条目更新使用明确的 init/deinit 对。

CacheCoherentMemorySupported

指示驱动程序支持页表条目中的 CacheCoherent 位,并且可以执行 I/O 一致的传输到系统内存。

PageTableUpdateRequireAddressSpaceIdle

指示 GPU 不支持更新页表条目或使引擎当前正在使用的地址空间的转换旁视缓冲区失效。 设置此标志后,视频内存管理器将确保在修改其页表条目和转换旁视缓冲区失效时暂停共享地址空间的所有上下文。

LargePageSupported

设置为 1 时,除叶表外,所有级别的页表都支持DXGK_PTE) 中的大页 (LargePage 位。

DualPteSupported

当设置为 1 时,GPU 支持两个指向一级页表的指针, (4 KB 页表和 64 KB 页表) 。

AllowNonAlignedLargePageAddress

当设置为 1 时,当大型页面条目的物理地址与叶页表覆盖率不一致时,操作系统能够设置 LargePage 标志。 从 Windows 10 版本 1607 (WDDM 2.1) 开始提供。

SysMem64KBPageSupported

驱动程序提供 64KB 内存段管理。 从 Windows 10 版本 1607 (WDDM 2.1) 开始提供。

InvalidTlbEntriesNotCached

设置此位后,驱动程序将不会接收对 DxgkDdiBuildPagingBuffer 的调用,用于从无效状态转换为有效状态的 VA 范围的 FlushTlb 请求。 预计硬件的 TLB 不会缓存无效翻译

从 Windows 10 版本 1903 开始提供, (WDDM 2.6) 。

SysMemLargePageSupported

驱动程序提供大页面支持。 从 Windows Server 2022 (WDDM 2.9) 开始可用。

CachedPageTables

支持缓存页表。 从 WDDM 3.1 开始可用。

Reserved

保留供系统使用;请勿使用。

Value

以整数表示的联合结构的值。

PageTableUpdateMode

定义 DxgkDdiUpdatePageTable 操作中使用的地址类型。 设置 DXGK_PAGETABLEUPDATE_GPU_VIRTUAL 后,所有分页操作都将在系统上下文的虚拟地址空间中进行。 当页目录位于本地 GPU 内存段中时,不能将更新模式设置为 DXGK_PAGETABLEUPDATE_CPU_VIRTUAL

VirtualAddressBitCount

GPU 虚拟地址中的位数。

LeafPageTableSizeFor64KPagesInBytes

使用 64KB 页时叶页表的大小。 大小必须是 CPU 页面大小 (4096) 的倍数。

PageTableLevelCount

支持的页表级别数。 最小值为 2, (定义为 DXGK_MIN_PAGE_TABLE_LEVEL_COUNT) 。 最大值为 DXGK_MAX_PAGE_TABLE_LEVEL_COUNT

PageTableLevelCount 为 2 时,根页表可动态调整大小,并且页表的大小通过 DxgkDdiGetRootPageTableSize 确定。 当 PageTableLevelCount 大于 2 时,所有页表级别都具有固定大小,可通过 DXGK_PAGE_TABLE_LEVEL_DESC::P ageTableSizeInBytes 进行描述。

LegacyBehaviors

LegacyBehaviors.SourcePageTableVaInTransfer

当设置为 1 时,视频内存管理器在分配逐出期间在 TransferVirtual 中设置 SourcePageTable 地址。

LegacyBehaviors.Reserved

保留值;请勿使用。

要求

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