共用方式為


GPU 區段

從 WDDM 2.0 開始,分割模型可用來抽象化實體記憶體的 GPU 存取。 核心模式驅動程式 (KMD) 會列舉一組區段,以表示 GPU 可用的實體記憶體資源。 然後,視訊記憶體管理員 (VidMm) 會管理這些區段。

區段類型

區段分為三種類型:

記憶體區段

記憶體區段代表專用於 GPU 的記憶體。 它可以是離散 GPU 上的 VRAM,也可以是整合式 GPU 上的韌體/驅動程式保留記憶體。 驅動程式可以列舉多個記憶體區段。

從 WDDM 2.0 開始, VidMm 會將記憶體區段管理為大小為 4 KB 或 64 KB 的實體頁面集區。 Surface 數據會透過 Fill/Transfer/Discard/FillVirtual/TransferVirtual 分頁作業,複製至記憶體區段或從記憶體區段複製出來。

CPU 可以透過下列兩種方式之一存取記憶體區段的內容:

  • 記憶體區段可以在 CPU 的實體位址空間中可見,在此情況下, VidMm 只會將 CPU 虛擬位址直接對應至區段內的配置。
  • 從 WDDM 2.0 開始, VidMm 也支援透過與該區段相關聯的可程式化 CPU 主機通圈來存取記憶體區段的內容。

光圈分段

光圈段是一個全域頁表,用於使不連續的系統記憶體頁面從 GPU 引擎的角度看起來連續。

在 WDDM 2.0 中,必須報告單一孔徑區段。

系統記憶體區段

系統記憶體區段是代表系統記憶體參照的隱含區段 (也就是客體實體位址)。 KMD 不會直接列舉系統記憶體區段。 相反地, VidMm 會隱式列舉它,並一律指派 SegmentId==0. 若要將配置放在系統記憶體區段中,KMD 必須使用光圈區段識別碼。

實體記憶體參考

在 DDI 中,實體記憶體參考一律採用區段識別碼和區段位移配對的形式。

透過實體位址存取分配

不支援 GPU 虛擬定址的 GPU 引擎需要透過其實體位址存取配置。 此需求會影響分配如何從區段取得指派的資源。 實體參照表示配置必須在記憶體區段中連續配置,或在孔徑區段中佔據連續範圍。

若要避免不必要且昂貴的連續配置,KMD 必須明確識別需要轉譯引擎才能實際存取它們的配置。 KMD 會在配置建立期間設定 DXGK_ALLOCATIONINFOFLAGS2:AccessedPhysical 旗標來執行此動作。

當此類分配駐留在系統記憶體中時,它們將映射到孔徑段。 當駐留於記憶體區段時,分配將是連續的。 以這種方式建立的分配可以透過引擎上的分配清單來參考,在實體定址模式下運行。

對於未設定此旗標的配置, VidMm 會將它們配置為記憶體區段中的一組頁面或系統記憶體中的一組頁面,其中任何一個都是透過 GPU 虛擬位址存取。 以這種方式建立的分配無法透過分配清單參考。 任何以此方式參照配置的命令緩衝區提交都會被拒絕。

主要表面是電腦顯示的主要影像,由顯示控制器隱含地實體存取。 這些表面將在記憶體區段中連續分配,或在顯示時映射到孔徑區段中。 KMD 應僅在其渲染引擎將以實體方式存取配置時,設定 AccessedPhysically 標誌。 主要界面上的隱含實體存取和明確旗標之間的不同在於這些配置何時會映射到記憶體孔徑:

  • AccessedPhysically 標記被設置時,每當配置處於駐留狀態時,此配置都會映射到開口中。

  • 未設定此旗標的主要表面僅在顯示時才會映射到光圈中。 這種方法有助於消除孔徑段上的壓力。 也就是說,通常只有少數主要曲面會目前顯示,而大量的曲面可能存在且進行繪製。 例如,所有 FlipEx 交換鏈都會在 dFlip/iFlip 案例中建立為主要且可能可顯示的介面。

下表摘要說明如何根據 GPU 區段內的實體存取需求來存取不同類型的配置。

區段類型 物理存取==0 實體存取==1 主要 && AccessedPhysically==0
記憶體區段 頁面集合。 只允許 GPU 虛擬存取。 連續的。 允許 GPU 實體存取 連續的。 轉譯引擎只允許 GPU 虛擬存取。
光圈分段 未對應。 系統記憶體頁面,僅映射到 GPU 頁表,未映射至孔徑段。 只允許 GPU 虛擬存取。 駐留時繪製地圖。 允許 GPU 實體存取。 顯示時進行映射。 轉譯引擎只允許 GPU 虛擬存取。