DXGKDDI_SETVIDPNSOURCEADDRESS回呼函式 (d3dkmddi.h)
DxgkDdiSetVidPnSourceAddress 函式會設定與特定視訊簡訊簡訊相關聯的主要表面位址。
語法
DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;
NTSTATUS DxgkddiSetvidpnsourceaddress(
IN_CONST_HANDLE hAdapter,
IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}
參數
hAdapter
與顯示配接器相關聯的內容區塊句柄。 顯示迷你埠驅動程式先前已將此句柄提供給 DxgkDdiAddDevice 函式之 MiniportDeviceContext 輸出參數中的 DirectX 圖形核心子系統。
pSetVidPnSourceAddress
包含函式自變數 之DXGKARG_SETVIDPNSOURCEADDRESS 結構的指標。
傳回值
如果成功,DxgkDdiSetVidPnSourceAddress 會傳回STATUS_SUCCESS;否則,它會傳回 Ntstatus.h 中定義的其中一個錯誤碼。
從 Windows 8 開始,當 SharedPrimaryTransition 成員在 pSetVidPnSourceAddress-Flags 中設定 SharedPrimaryTransition 成員時,顯示迷你埠驅動程式可能會失敗呼叫 DxgkDdiSetVidPnSourceAdd STATUS_INVALID_PARAMETER ress-Flags>。 不過,除非使用者模式驅動程序實作 CheckDirectFlipSupport 函式或在 DWM 中發生錯誤,否則不會預期這類失敗。 如果發生這類失敗,操作系統將不會順暢地容錯回復到組合模式,而且呈現方式不正確。
備註
DxgkDdiSetVidPnSourceAddress 只會呼叫與目前認可的視訊呈現網路 (VidPN) 拓撲相符的主要專案。 例如,D3DDDIFMT_A8R8G8B8格式會決定符合認可至D3DDDIFMT_X8R8G8B8格式的 VidPN,反之亦然。
DirectX 圖形核心子系統會呼叫 DxgkDdiSetVidPnSourceAddress 來切換顯示模式,並執行記憶體對應 I/O (MMIO) 型翻轉作業。 pSetVidPnSourceAddress 參數所指向之DXGKARG_SETVIDPNSOURCEADDRESS結構的 Flags 成員中的位字段旗標表示要執行的顯示作業類型。 若要切換顯示模式,圖形核心子系統會將 DXGKARG_SETVIDPNSOURCEADDRESS 的 ContextCount 成員設定為零。 在此情況下,DXGKARG_SETVIDPNSOURCEADDRESS 的內容成員所 指定的數位內容是未定義的。 若要執行翻轉作業,圖形核心子系統會將 ContextCount 設定為內容數目,並將 Context 設定為參與翻轉作業之內容的驅動程序內容句柄陣列。
如果先前指出的顯示迷你埠驅動程式,請在呼叫其 DxgkDdiQueryAdapterInfo 函式時, 它支援 MMIO 型翻轉 (,方法是將 DXGK_DRIVERCAPS 結構的 FlipCaps 成員中的 FlipOnVSyncMmIo 位字段旗標設定為 TRUE) ,後續會在裝置中斷要求層級呼叫驅動程式的 DxgkDdiSetVidPnSourceAddress 函式, (DIRQL) 進行翻轉。 驅動程式的 DxgkDdiSetVidPnSourceAddress 函式必須程式設計 DAC 並開始掃描,在下列垂直同步處理中,其位址是在DXGKARG_SETVIDPNSOURCEADDRESS PrimaryAddress 成員中指定的主要介面。 驅動程式也必須在對 DxgkCbNotifyInterrupt 函式的呼叫中傳遞 InterruptType 參數中的DXGK_INTERRUPT_CRTC_VSYNC插斷類型,以報告有效的掃描位址。 驅動程式必須遵循對 DxgkCbNotifyInterrupt 的呼叫,並呼叫 DxgkCbNotifyDpc 函式。
DxgkDdiSetVidPnSourceAddress 必須位於不可分頁的記憶體中。 DxgkDdiSetVidPnSourceAddress 不得呼叫任何在可分頁記憶體中的程序代碼,而且不得操作任何在可分頁記憶體中的數據。
Clone-View 情況
在複製檢視狀況中,顯示迷你埠驅動程序應該適當地處理翻轉作業,如本節所述。
當 DWM 執行時,DirectX 圖形核心子系統會在發生垂直同步處理時進行翻轉同步處理。 不過,只有在發生單一圖形配接器輸出訊號的垂直同步處理時,DirectX 圖形核心子系統才能同步處理。 DirectX 圖形核心子系統必須立即翻轉任何其他圖形適配卡輸出訊號,以避免卸除。
GPU 排程器會偵測到單一垂直同步處理,而且會在第一次發生監視器翻轉時,判斷翻轉表面可供使用。 因此,顯示迷你埠驅動程式可能會轉譯為第二個監視器仍在顯示的介面。
例如,視訊應用程式 (,Windows 媒體播放器) 不知道複製檢視狀況,而且預期會有可預測的垂直同步間隔。 如果 GPU 排程器偵測到這兩個監視器的垂直同步處理,則垂直同步間隔 (,因此翻轉) 會無法預測,而且會隨著時間漂移,這會導致 DWM 和視訊應用程式無法正確運作。
針對複製檢視情況,顯示迷你埠驅動程序必須在主要監視器上執行垂直同步翻轉,並在次要監視器上執行以MMIO為基礎的立即翻轉。
顯示迷你埠驅動程式的 DxgkDdiSetVidPnSourceAddress 函式應該記錄在圖形配接器物件中翻轉至的位址。
若要指示顯示迷你埠驅動程式不等候次要監視器的下一個垂直回溯,DirectX 圖形核心子系統會在呼叫驅動程式的 DxgkDdiSetVidPnSourceAddress 函式時,將 FlipImmediate 位字段旗標設定為 TRUE。
請參閱在 多重平面重疊 VidPN 簡報中使用多平面重疊呼叫此函式的需求。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista |
標頭 | d3dkmddi.h |
IRQL | PASSIVE_LEVEL。 如果驅動程序支援 MMIO 型翻轉,請在 DIRQL 呼叫。 |