使用交叉配接器資源在離散 GPU 上轉譯
從 Windows 8.1 開始,離散 GPU 會使用交叉配接器資源作為:
- 位區塊傳輸的目的地 (bitblt) 或呈現作業,但不需要延展或色彩轉換。
- 操作系統要求使用者模式顯示驅動程序執行位或從中呈現作業的資源。
- 桌面視窗管理員 (DWM) 組合期間的紋理。
- GDI 硬體加速的轉譯目標。
- 顯示主要複本。
- 不是 3D 作業的轉譯目標。
下列各節說明三個可能案例中涉及的架構和程式,其中應用程式會在混合式系統中的離散 GPU 上轉譯。
重新導向的 bitblt 簡報模型
- 最上層視窗的交叉配接器資源會在核心模式中建立,作為整合式 GPU 的標準配置。
- 在離散 GPU 上開啟此資源時,DirectX 圖形核心子系統 (Dxgkrnl.sys) 會呼叫 DxgkDdiGetStandardAllocationDriverData 函式,並使用與整合 GPU 相同的備份存放區 (大量儲存裝置) ,在離散 GPU 上建立新的資源。
- Direct3D 執行時間會指示離散 GPU 的使用者模式顯示驅動程式,以使用私人驅動程式數據開啟交叉配接器資源。
- DirectX 應用程式會在離散 GPU 上轉譯為後端緩衝區資源。 請參閱圖中的「轉譯」作業。
- 當 DirectX 應用程式呼叫 Present 方法時,Direct3D 運行時間會呼叫 PresentDXGI (或 pfnPresent) 離散 GPU 使用者模式驅動程式的函式,以將後端緩衝區複製到交叉配接器資源。 請參閱圖中的「呈現」作業。
- 當 Windows 圖形裝置介面 (GDI) 應用程式轉譯至最上層視窗時,DirectX 圖形核心子系統會呼叫整合 GPU 顯示迷你埠驅動程式的 DxgkDdiRenderKm 函式,並指出跨適配卡資源是轉譯目標。 請參閱圖中的 GDI 應用程式與交叉配接器介面之間的連線。
- DWM 程式會在整合式 GPU 中開啟交叉配接器資源,並在組合期間使用它作為來源紋理。 請參閱圖中的「組合」作業。
直接翻轉簡報模型
- Direct3D 運行時間會指示離散 GPU 的使用者模式顯示驅動程式,為每個交換鏈結介面建立交叉配接器資源。
- 在離散 GPU 上,如果直接翻轉模式可用,Direct3D 運行時間可能會設定 D3DDDI_ALLOCATIONINFO 結構的主要和VidPnSourceId 成員。 呼叫 pfnAllocateCb 函式時,應該傳遞這些成員值。
- Direct3D 執行時間會指示整合式 GPU 的使用者模式顯示驅動程式開啟要由 DWM 管理的跨適配卡資源。
- 應用程式會使用轉譯目標紋理作為目的地,在離散 GPU 上轉譯。 請參閱圖中的「轉譯」作業。
- 當應用程式呼叫 Present 方法時,Direct3D 執行時間會呼叫離散 GPU 使用者模式驅動程式的 BltDXGI (或 pfnBlt) 函式,以執行跨適配卡資源的複本。 運行時間接著會呼叫離散 GPU 使用者模式驅動程式的 PresentDXGI (或 pfnPresent) 函式,並將來源設定為交叉配接器資源,並將目的地配置設定為 NULL。 請參閱圖中的「複製」作業。
- DWM 會使用來自整合 GPU 的資源來執行其組合。 如果需要直接翻轉作業, (DXGK_SEGMENTFLAGS。DirectFlip 設定) ,DWM 會指示整合式 GPU 的顯示迷你埠驅動程式從一個交叉適配卡配置到另一個轉接器配置執行翻轉作業。 請參閱圖中的「DWM 翻轉」作業。
全螢幕模型
- Direct3D 運行時間會指示整合式 GPU 的使用者模式顯示驅動程式,為每個交換鏈結介面建立交叉配接器共用的主要配置。
- Direct3D 執行時間會指示離散 GPU 的使用者模式顯示驅動程式開啟交叉配接器資源。
- 應用程式會使用轉譯目標紋理作為目的地,在離散 GPU 上轉譯。
- 當應用程式呼叫 Present 方法時,Direct3D 執行時間會指示離散 GPU 的使用者模式顯示驅動程式執行跨適配卡資源的複本。
- 整合式 GPU 的使用者模式顯示驅動程式和顯示器迷你埠驅動程式會指示翻轉至此交叉配接器資源。