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

設定此位時,驅動程式不會針對從無效狀態轉換為有效狀態的 VA 範圍,收到 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 (include D3dkmddi.h)