使用 KMD 共用備份存放區
從 Windows 11 22H2 版(WDDM 3.1)開始,WDDM 已擴充為允許從內核模式驅動程式存取圖形配置支援存放區(KMD)。 支援存放區是指一個認可的記憶體緩衝區,當圖形配置的內容不在視訊記憶體中時,該緩衝區會保存圖形配置的內容。
此功能可讓使用者模式驅動程式 (UMD) 和 KMD 存取相同的配置記憶體。 當UMD在主機上執行或使用 GPU 半虛擬化 (GPU-PV) 的虛擬機時,可以使用此功能。
此功能已回到 Windows 10 版本 20H1。 DDI 適用於 WDDM 3.1 驅動程式或更新版本。
WDDM 圖形配置和備份存放區
WDDM 模型中的每個圖形配置都有一個備份存放區。 當UMD呼叫 Dxgkrnl 的 D3DKMTCreateAllocation 函式時,就會建立圖形配置。 UMD 會傳遞此配置的私人數據,Dxgkrnl 會透過對 DxgkddiCreateAllocation 的呼叫傳遞至 KMD。 KMD 會將所需的配置旗標 傳回 Dxgkrnl。
檢查功能可用性
若要檢查備份存放區共用功能是否可用,KMD 必須先呼叫下列其中一個回呼,並將 FeatureId 設定為 DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD:
- DXGKCB_QUERYFEATURESUPPORT (從 WDDM 2.9 開始提供)
- DXGKCB_ISFEATUREENABLED
只有在回呼成功且 Enable 設定為 TRUE 時,才能使用此功能。
功能流程
一旦 KMD 成功判斷已啟用此功能,UMD 會呼叫 D3DKMTCreateAllocation 來建立共用的 CPU 可見配置,並透過私人數據指示 KMD 必須與 KMD 共用配置。 在此呼叫過程中,會發生下列情況:
當 OS 呼叫 KMD 的 DxgkddiCreateAllocation 回呼時,KMD 會設定DXGK_ALLOCATIONINFOFLAGS2的 ShareBackingStoreWithKmd 旗標。 如果未啟用此功能,KMD 不得設定 ShareBackingStoreWithKmd 旗標。
Dxgkrnl 會呼叫 DXGKDDI_SETALLOCATIONBACKINGSTORE DDI,為 KMD 提供配置支援存放區的核心模式位址。
UMD 會呼叫 D3DKMTLock2 以取得配置的使用者模式位址。
配置的屬性
以這種方式建立的設定必須具有下列屬性:
- 配置只允許在系統記憶體區段中。
- 配置必須建立為共用。
- 配置無法使用現有的系統記憶體作為備份存放區。
- UMD 可以針對一般配置執行任何作業。
- UMD 可以呼叫 D3DKMTLock2 以取得配置指標。
- UMD 可以呼叫 D3DKMTMakeResident ,讓 GPU 可存取配置。