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 支持 Zero DXGK_PTE 标志。 这适用于所有页表级别。

ExplicitPageTableInvalidation

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

注意

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

CacheCoherentMemorySupported

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

PageTableUpdateRequireAddressSpaceIdle

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

LargePageSupported

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

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

设置此位后,驱动程序将不会收到 对从无效状态转换为有效状态的 FLUSHTlb 请求的 dxgkDdiBuildPagingBuffer 调用。 预计硬件的 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)