支援跨配接器資源掃描 (CASO)
預先 CASO 效能 (兩個複製路徑)
從 Windows 8.1 (WDDM 1.3) 開始,D3D9 和 DXGI 應用程式就能夠在多適配卡設定上使用跨適配卡簡報支援,例如混合式系統。 透過這項支援,轉譯會在轉譯配接器上完成 (通常是離散 GPU) ,然後完成兩個複本,以將內容移至顯示器適配卡 (通常為整合式 GPU) 以掃描到顯示器。
- 複製 1 是從轉譯配接器資源到交叉配接器資源。
- 複製 2 是從交叉配接器資源到顯示配接器資源。
這些複本可以限制應用程式的效能,特別是針對針對低延遲優化的應用程式。
使用 CASO 將翻轉簡報模型優化 (單一複製路徑)
Windows Server 2022 (WDDM 2.9) 和更新版本的驅動程式可以宣告對適當跨適配卡資源層的支援,讓系統的簡報堆棧能夠優化跨適配卡簡報。 無論裝置設定為何,驅動程式都必須根據自己的適配卡功能宣告此功能的支援,如此一來,功能值就會跨所有適用的硬體組態進行調整。 此調整包括單一 GPU 裝置,但不包括具有其他外部 GPU 動態連結的單一 GPU 裝置。
如果顯示配接器支援 CASO,系統只會執行從轉譯配接器介面到交叉配接器介面的第一個複本,然後直接從交叉配接器介面掃描。 這項功能會導致處理、頻寬、電源和延遲降低。
CASO 功能是針對翻轉簡報模型的 DXGI 運行時間所實作。
CASO 的 DDI 變更和新增專案
指出跨配接器資源的階層支援
DXGI 會實作三層支援跨配接器資源:
- 從跨配接器資源複製至 (最低層)
- 從跨配接器資源進行文字調整
- 跨配接器資源的掃描 (最高層)
每個較高層級的支持都必須保證其下方 (層) 的支援。 例如,若要宣告跨配接器資源的掃描支援,驅動程式也必須支援文字和複製。
驅動程式藉由在 DXGK_DRIVERCAPS 中設定下列DXGK_VIDMMCAPS位域值,宣告每個層級的支援。MemoryManagementCaps:
層 | 階層意義 | DXGK_VIDMMCAPS值 |
---|---|---|
第 1 層 | 複製支援:從跨配接器資源複製和複製 | CrossAdapterResource (透過 D3DKMT_WDDM_1_3_CAPS 中的 SupportCrossAdapterResource 位,透過圖形核心公開至使用者模式 |
第 2 層 | 紋理支援:跨配接器資源的紋理) | CrossAdapterResourceTexture (包含著色器資源檢視、未排序存取檢視和轉譯目標) |
第 3 層 | CASO 支援:從跨配接器資源掃描 | CrossAdapterResourceScanout |
如果圖形核心未以超集方式表示支援三層,圖形核心會讓配接器啟動失敗。 例如,如果已設定 CrossAdapterResourceTexture,則必須設定 CrossAdapterResource。
第 1 層支援需求
交叉配接器資源仍然定義相同,如同用於 WDDM 1.3層 1 複製支援一樣。
第 2 層支援需求
需求類似於 D3D12 使用者模式驅動程式 CrossAdapterRowMajorTextureSupported 功能, (上限) ;也就是說,裝置支援著色器資源檢視、未排序的存取檢視,以及轉譯跨配接器數據列主要紋理的目標檢視。 不過,雖然 D3D12 的 CrossAdapterRowMajorTextureSupported 需要支援所有相關紋理格式,但此第 2 層上限只需要支援第 3 層支援需求中列出的 DisplayScanOut 格式。
由於 D3D12 的上限是此第 2 層上限的超集, 因此 D3D12CreateDevice 也會確認核心驅動程式的 CrossAdapterResourceTexture 上限是在設定其 CrossAdapterRowMajorTextureSupported cap 時設定,如果裝置不是,就會失敗。
第 3 層支援需求
針對下列最低規格的交叉適配卡資源,系統必須能夠執行 DXGK_FLIPCAPS中驅動程式所宣告的支援翻轉功能:
- 1920 x 1080 或更小的交叉配接器主要緩衝區大小
- 任何支援的 DisplayScanOut 格式的緩衝區圖元格式。 自 Windows 10 20H1 版起,這些格式如下:
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
如果驅動程式支持掃描更多紋理格式的交叉配接器資源,則必須根據層級支援需求,支援從這些格式進行文字處理。
注意
DXGI 運行時間會查詢驅動程式的 CrossAdapterResourceScanout 支援。 如果支援,簡報堆疊會向下移至單一複製路徑。 因此,需要宣告 支援 CrossAdapterResourceScanout 的驅動程式,才能支援 DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI。 此外,它也必須針對上述最低規格的交叉配接器主要複本支援所有相關的簡報相關 DIS。 一些範例包括: pfnCreateResource、 pfnCheckMultiplaneOverlaySupport 和 pfnPresentMultiplaneOverlay/pfnPresent1。 如需詳細資訊,請參閱 多重平面重疊支援。 如需有關退出 CASO 的詳細資訊,請參閱 用於呈現優化的驅動程式 DIS。
這兩個層級都隨附 HLK 測試 以進行驗證。
支援DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3的 StaticCheck 旗標
StaticCheck 旗標已新增至 WDDM 3.0 中的 DXGK_MULTIPLANE_OVERLAY_FLAGS。 此旗標會擴充 CASO 支援的 DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI 用法。 此旗標可 讓DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 查詢驅動程式,以判斷是否能夠掃描以 StaticCheck 旗標標示的平面。此通話是一次性通話,不應影響實際的呈現行為。 因此,從 DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 執行目前資訊快取的驅動程式不應包含來自 DDI 呼叫與 StaticCheck 平面的資訊。 他們應該只以獨立或靜態方式執行支持判斷。
具有 StaticCheck 旗標集的DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3保證為:
- 只有一個平面以旗標標示
- 不包含任何 PostComposition 平面資訊
在緩衝區建立期間,例如在交換鏈建立或 ResizeBuffers 期間,會從 DXGI 的應用程式進程使用對 DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3的呼叫,以最佳方式嘗試判斷目前硬體組態是否支援 CASO。
HybridIntegrated 特殊案例
請務必注意 ,HybridIntegrated 驅動程序的設計目的是要有第 3 層的掃描支援。 從WDDM 3.0 開始,需要 HybridIntegrated 驅動程式才能宣告 CrossAdapterResourceScanout 的支援。 HLK 測試會驗證此需求。
現有的混合式上限未來可能會被視為淘汰。 因此, CrossAdapterResourceScanout 端點會分離,以允許未來在此空間中發展更大的彈性。 因此,即使不是 HybridIntegrated 的驅動程式也可以視需要設定跨適配卡支援層。
圖形核心變更
從WDDM 2.9 開始,已針對跨適配卡資源支持進行下列新增/變更:
KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT值已新增至現有的 KMTQUERYADAPTERINFOTYPE 列舉
已新增 D3DKMT_CROSSADAPTERRESOURCE_SUPPORT 結構和 D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER 列舉
範例使用方式︰
D3DKMT_CROSSADAPTERRESOURCE_SUPPORT KernelSupport = {};
D3DKMT_QUERYADAPTERINFO QueryAdapterInfo;
QueryAdapterInfo.hAdapter = m_hAdapter;
QueryAdapterInfo.Type = KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT;
QueryAdapterInfo.pPrivateDriverData = &KernelSupport;
QueryAdapterInfo.PrivateDriverDataSize = sizeof( KernelSupport );
VERIFY_SUCCEEDED(D3DKMTQueryAdapterInfo(&QueryAdapterInfo));
// Use KernelSupport.SupportTier as appropriate
用於呈現優化的驅動程式 DIS
驅動程式會使用下列 DIS 來指出是否支援交叉配接器掃描輸出:
DXGK_VIDMMCAPS::CrossAdapterResourceScanout cap
系統會提早查詢此上限,以判斷驅動程式是否支援 CASO 功能。
如果驅動程式支援 CASO,DXGI 會繼續進行單一複製 CASO 路徑;否則,DXGI 會回復為雙複製路徑。
-
在單一複製 CASO 路徑上,DXGI 會透過 pfnCreateResource,在顯示適配卡上建立跨適配卡資源做為主要。 驅動程式應該根據資源屬性來評估它是否可以從該資源掃描。
如果驅動程式支援根據資源屬性進行掃描,DXGI 會繼續進行單一複製 CASO 路徑。 否則,驅動程式應該傳回 DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT,退出宣告掃描。 在此情況下,DXGI 會回復為雙複製路徑。 只有在資源屬性超出第 3 層支援需求中列出的最低需求時,才會發生此後援。
pfnCheckMultiplaneOverlaySupport Ddi
根據目前的行為,Desktop Windows Manager (DWM) 呼叫顯示器驅動程式的 pfnCheckMultiplaneOverlaySupport DDI,以精確地判斷是否可以掃描主要表面。如果驅動程序支援,就會發生掃描。 否則,DWM 會回復為 DWM 組合模式。
請注意,DWM 撰寫的簡報可能比 獨立翻轉 (iFlip) 透過雙複製路徑或透過單一複製 CASO 路徑的 iFlip 少。 因此,在 DWM 中,可能會有常見的顯示頻寬有限,例如旋轉或多個顯示器,其中驅動程式可能會在 DWM 中持續失敗 pfnCheckMultiplaneOverlaySupport 支援,因此可能會產生比雙複製路徑更差的體驗。
為了減輕負面後援體驗,DXGI 會在緩衝區建立期間呼叫 pfnCheckMultiplaneOverlaySupport ,並使用交叉配接器資源作為標示為 以 StaticCheck 旗標標示的平面,以高精確度驗證驅動程式是否可以在現有的已知頻寬特性下執行掃描。 如果支援,DXGI 會繼續進行單一複製 CASO 路徑;否則,它會回復為雙複製路徑。
HLK 測試
已新增 WDDM 3.0 HLK 需求和功能及其對應的 HLK 測試。 此需求會系結至驅動程式可以宣告 的DXGK_VIDMMCAPS 支援;具體而言, CrossAdapterResourceTexture 和 CrossAdapterResourceScanout。
CrossAdapterResourceTexture
已新增 HLK 測試,以確認交叉配接器資源上的 SRV) 作業 (著色器資源檢視。
針對 D3D12,已將 Device.Graphics.AdapterRender.D3D12Core.CoreRequirement 測試的現有 HLK “D3D12 - Cross Adapter Resource DX12” 新增至 ;具體而言,CrossAdapterResource::CrossAdapterTextureSRV 測試案例。
新增至此 HLK 測試案例是 驗證 CrossAdapterResourceTexture KMD cap 和 D3D12 UMD CrossAdapterRowMajorTextureSupported cap 之間的超集關聯性。 同樣地,已在 D3D12CreateDevice 中新增邏輯,以確保如果已設定其 UMD 上限,則必須設定核心第 2 層驅動程式上限,如果未設定,裝置建立就會失敗。
針對 D3D11,上述測試案例已新增至 Device.Graphics.WDDM30.Render.CrossAdapterScanOut 的 HLK 測試;具體而言,D3DConf_11_CrossAdapterResource::CrossAdapterResourceSRV。
跨配接器資源掃描
已新增下列 HLK 測試:
Device.Graphics.WDDM30.Render.CrossAdapterScanOut
- HLK 測試,確認驅動程式可以成功建立跨適配卡主要資源,而不需要透過 DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT 旗標退出掃描行為。
- HLK 測試,以確認這些驅動程式是否支援 DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI。
- 測試人員的手動 HLK 測試,可手動驗證:
- 已掃描的跨配接器介面沒有視覺損毀/成品或非預期的卸除
- 交叉配接器介面會直接掃描出來,而不需要任何先前的內部轉換或複本。
這些端對端測試也會自然地確認跨適配卡資源支援 CheckMultiplaneOverlaySupport 和 Present DIS。 手動測試應用程式有一些特定的硬體需求,例如高解析度和高重新整理率監視器。 如需詳細資訊,請參閱隨附測試的 參考檔 。
Device.Graphics.WDDM30.Render.CoreRequirement
- HLK 測試,以確認宣告 HybridIntegrated cap 的驅動程式也會宣告 CrossAdapterResourceScanout 上限。
System.Fundamentals.Graphics.HybridGraphics.MultiGPU
- 系統型 HLK 測試,可讓 OEM 在其混合式裝置上執行這些測試,能夠在端對端系統驗證期間執行 DXGI 的單一複製路徑。