EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN回呼函式 (iddcx.h)
操作系統 會呼叫EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN,通知間接顯示驅動程式 (IDD) 適配卡上監視器的模式變更。
語法
EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN EvtIddCxMonitorAssignSwapchain;
NTSTATUS EvtIddCxMonitorAssignSwapchain(
[in] IDDCX_MONITOR MonitorObject,
[in] const IDARG_IN_SETSWAPCHAIN *pInArgs
)
{...}
參數
[in] MonitorObject
操作系統所使用的不透明驅動程式建立IDDCX_MONITOR句柄,用來識別受模式變更影響的監視器。
[in] pInArgs
IDARG_IN_SETSWAPCHAIN 結構的指標,其中包含用來設定間接交換鏈的驅動程序資訊。
傳回值
(NTSTATUS) 如果作業成功,回呼函式必須傳回STATUS_SUCCESS,或NT_SUCCESS (状态) 等於 TRUE 的另一個狀態值。 如果發生錯誤,IDD 應該傳回 STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN ,如果錯誤不會再次發生。 否則,它應該會傳回適當的 NTSTATUS 錯誤碼。 請參閱<備註>。
備註
OS 會呼叫 EvtIddCxMonitorAssignSwapChain ,讓 IDD 可以設定其框架處理機制。 例如,IDD 可能會建立新的線程來初始化 D3D 裝置,然後在處理框架上循環 (請參閱 標識符驅動程式範例) 。
如果 EvtIddCxMonitorAssignSwapChain 傳回成功,IDD 接著會擁有 IDARG_IN_SETSWAPCHAIN.hSwapChain 物件,並負責呼叫 WdfObjectDelete 以在停止處理框架時釋放交換鏈物件。 呼叫 EvtIddCxMonitorUnassignSwapChain 時,或在成功傳回 EvtIddCxMonitorAssignSwapChain 之後發生錯誤時,交換鏈處理可能會停止處理框架。 這同時適用於主控台和遠端標識碼適配卡和所有 IddCx 版本。
從 1903 版 Windows 10 開始,為了降低使用者的影響 (,例如,等候 IddCx 錯誤檢查驅動程式的時間) ,如果 EvtIddCxMonitorAssignSwapChain 回報錯誤碼,IddCx 就會立即檢查驅動程式。如果 EvtIddCxMonitorAssignSwapChain 回報了STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN以外的錯誤碼。
如果驅動程式傳回STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN,IddCx 會通知桌面撰寫器。 必須建立新的交換鏈,因此OS會再次呼叫 EvtIddCxMonitorAssignSwapChain。 只有在發生剛發生的錯誤不會再次發生時,ID 驅動程式才應該使用此傳回碼。 也就是說,標識符驅動程式不應該讓具有無法使用桌面的使用者,因為它傳回錯誤碼尚未執行任何動作,以確保不會再次發生相同的失敗。 例如,如果驅動程式在轉譯配接器上建立 D3D 裝置時發生錯誤,它可以呼叫 IddCxAdapterSetRenderAdapter ,以變更為另一個適配卡 (可能是另一個 GPU 或 WARP) ,然後傳回 STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN。 OS 會在新的轉譯配接器上建立新的交換鏈,並希望避免發生錯誤。 雖然從 1903 版 Windows 10 開始定義這個錯誤碼,但 ID 驅動程式可以在舊版作業系統上傳回此錯誤碼,因此不會有任何作用。
交換鏈中表面的解析度一律會與目標模式設定的解析度相同。
介面的格式將是驅動程序支援的其中一種格式,但每個取得緩衝區的格式可以在框架支援的格式之間變更。 驅動程式應該檢查取得的每個緩衝區格式。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 |
最低支援的伺服器 | Windows Server 2016 |
目標平台 | Windows |
標頭 | iddcx.h |
IRQL | requires_same |