DXGK_GPUMMUCAPS structure (d3dkmddi.h)

The DXGK_GPUMMUCAPS structure is used by the kernel-mode driver to express virtual memory addressing capabilities.

Syntax

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;

Members

ReadOnlyMemorySupported

When set to 1, the driver supports read-only protection on memory pages.

NoExecuteMemorySupported

When set to 1, the driver supports no execute protection on memory pages.

ZeroInPteSupported

When set to 1, the GPU supports the Zero DXGK_PTE flag. This applies to all page table levels.

ExplicitPageTableInvalidation

Indicates that all entries of a page table or page directory should be put into an invalid state explicitly, through UpdatePageTable before being freed. By default the video memory manager may free a page table, which contain previously valid entries, if these entries are no longer needed (ex. freeing a large GPU virtual address range resulting in the destruction of underlying page tables).

Note

This flags is typically used by a software driver that needs to emulate page table and need to keep track of information on a per page table entry basis and require a clear init/deinit pair for all page table entry updates.

CacheCoherentMemorySupported

Indicates that the driver supports the CacheCoherent bits in the page table entry and can do I/O coherent transfer to system memory.

PageTableUpdateRequireAddressSpaceIdle

Indicates that the GPU doesn’t support updating page table entries or invalidating translation look-aside buffer for an address space that is currently in used by an engine. When this flags is set, video memory manager will ensure that all context sharing the address space are suspended when its page table entries are modified and when translation look-aside buffer is invalidated.

LargePageSupported

When set to 1, all levels of page tables, except the leaf one, support large pages (LargePage bit in DXGK_PTE).

DualPteSupported

When set to 1, the GPU supports two pointers to page tables in the level one page table (4 KB page table and 64 KB page table).

AllowNonAlignedLargePageAddress

When set to 1, the Operating System is able to set the LargePage flag when the physical address of the large page entry is not aligned to the leaf page table coverage. Available starting in Windows 10 version 1607 (WDDM 2.1).

SysMem64KBPageSupported

The driver provides memory segment management at 64KB. Available starting in Windows 10 version 1607 (WDDM 2.1).

InvalidTlbEntriesNotCached

When this bit is set, the driver will not receive calls to DxgkDdiBuildPagingBuffer for FlushTlb requests for VA ranges that are transitioning from an invalid to valid state. It is expected that the hardware’s TLB does not cache invalid translations

Available starting in Windows 10 version 1903 (WDDM 2.6).

SysMemLargePageSupported

The driver provides large-page support. Available starting in Windows Server 2022 (WDDM 2.9).

CachedPageTables

Cached page tables are supported. Available starting in WDDM 3.1.

Reserved

Reserved for system use; don't use.

Value

The value of the union's structure expressed as an integer.

PageTableUpdateMode

Defines the type of addresses that are used in DxgkDdiUpdatePageTable operations. When DXGK_PAGETABLEUPDATE_GPU_VIRTUAL is set, all paging operation will occur in the virtual address space of the system context. When page directories are located in a local GPU memory segment, the update mode cannot be set to DXGK_PAGETABLEUPDATE_CPU_VIRTUAL.

VirtualAddressBitCount

The number of bits in the GPU virtual address.

LeafPageTableSizeFor64KPagesInBytes

The size of a leaf page table when 64KB pages are used. The size must be a multiple of CPU page size (4096).

PageTableLevelCount

The number of page table levels supported. The minimum value is 2 (defined as DXGK_MIN_PAGE_TABLE_LEVEL_COUNT). The maximum value is DXGK_MAX_PAGE_TABLE_LEVEL_COUNT.

When PageTableLevelCount is 2, the root page table is dynamically resizable and the size of the page table is determined through DxgkDdiGetRootPageTableSize. When PageTableLevelCount is greater than 2, all page table levels have a fixed size, which is described through DXGK_PAGE_TABLE_LEVEL_DESC::PageTableSizeInBytes.

LegacyBehaviors

LegacyBehaviors.SourcePageTableVaInTransfer

When set to 1, video memory manager sets SourcePageTable address in TransferVirtual during allocation eviction.

LegacyBehaviors.Reserved

Reserved; do not use.

Requirements

Requirement Value
Minimum supported client Windows 10
Minimum supported server Windows Server 2016
Header d3dkmddi.h (include D3dkmddi.h)