共用方式為


DXGKDDI_SYSTEM_DISPLAY_ENABLE回呼函式 (dispmprt.h)

OS 會呼叫內核模式顯示驅動程式的 (KMD) DxgkddiSystemDisplayEnable 函式,要求 KMD 將目前的顯示裝置重設為指定的狀態。

語法

DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;

NTSTATUS DxgkddiSystemDisplayEnable(
  [in]  PVOID MiniportDeviceContext,
  [in]  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
  [in]  PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
  [out] UINT *Width,
  [out] UINT *Height,
  [out] D3DDDIFORMAT *ColorFormat
)
{...}

參數

[in] MiniportDeviceContext

處理與顯示配接器相關聯的內容區塊。 KMD 的 DxgkDdiAddDevice 函式先前提供此句柄來 Dxgkrnl

[in] TargetId

D3DDDI_VIDEO_PRESENT_TARGET_ID 值,指定顯示裝置所連接的顯示適配卡上影片目前目標的標識碼。 此標識元可能是在先前呼叫 DxgkDdiCommitVidPn 期間,目前影片呈現網路 (VidPn) 狀態中留下的目標標識碼。

[in] Flags

包含旗標位 OR 之 DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS 值的指標。 OS 會保留此成員。

[out] Width

指定裝置的顯示模式寬度,以像素為單位。

[out] Height

指定裝置的顯示模式高度,以像素為單位。

[out] ColorFormat

指定顯示裝置色彩格式之 D3DDDIFORMAT 值的指標。

傳回值

DxgkDdiSystemDisplayEnable 會在成功時傳回STATUS_SUCCESS。 如果 TargetId 參數所指定的目標未連線到顯示裝置,函式會傳回STATUS_NOT_SUPPORTED。 否則,它會傳回 Ntstatus.h中定義的其中一個錯誤碼。

言論

OS 會在發生系統停止錯誤之後,於錯誤檢查作業期間呼叫 DxgkddiSystemDisplayEnable

KMD 的必要步驟

呼叫 KMD DxgkDdiSystemDisplayEnable 函式時,必須遵循下列步驟:

  1. 取消所有 GPU 作業,或將 GPU 重設為閑置狀態。
  2. OS 會透過 TargetId 參數指出影片呈現的目標。 驅動程式必須讓顯示與這個目標保持開啟且可見的關聯。 如果驅動程式無法開啟顯示器電源,它必須無法呼叫此函式。 在這種情況下,OS 可能會呼叫 DxgkDdiResetDevice,並導致系統錯誤檢查發生。
  3. 檢查與此目標相關聯的顯示連線。 如果目標未連接顯示器,驅動程式必須完成此函式的呼叫,並傳回STATUS_NOT_SUPPORTED錯誤碼。
  4. 停用連接到顯示配接器之所有其他顯示器的訊號。 如果無法這樣做,驅動程式應該嘗試將空白影像放在所有其他顯示器上。 如果無法這樣做,驅動程式必須在畫面上保留最後一個影像不變。
  5. 將目前顯示模式保留在指定的目標上,並在此函式呼叫中將這個模式傳回OS。
  6. 如果驅動程式無法維持目前的顯示模式,或者如果目標不是使用中拓撲的一部分,驅動程式應該嘗試在另一個目標上設定框架緩衝區,該目標能夠以每圖元 24 位的格式,顯示解析度至少為 640 x 480 圖元。 如果無法這樣做,驅動程式可能會使此函式呼叫失敗,這會導致系統錯誤檢查和顯示黑色畫面。

KMD 不需要使用線性框架緩衝區模式。 不過,KMD 應該支援從具有 D3DDDIFORMAT 列舉 D3DDDIFMT_A8R8G8B8 格式的來源寫入此框架緩衝區。

來源影像限制

KMD 授與 OS 對顯示功能的控制權之後,OS 可以呼叫 DxgkDdiSystemDisplayWrite 函式來更新螢幕影像,並將來自指定來源的影像區塊寫入 DxgkDdiSystemDisplayEnable 函式所重設的畫面。

DxgkDdiSystemDisplayWrite 為驅動程式提供來源影像的起始位址,以及步幅、寬度和高度。 來源影像的色彩格式一律 D3DDDIFMT_X8R8G8B8。 OS 保證來源映像位於非分頁記憶體中。

KMD 必須將此來源影像寫入目前畫面,從 PositionXPositionY 參數 DxgkDdiSystemDisplayWrite 函式所指定的位置開始。

建議驅動程式使用 CPU 將映像從來源寫入框架緩衝區,因為系統錯誤檢查可能是由重複 逾時偵測和復原 (TDR) 所造成, 導致 GPU 處於未知狀況的實例所造成。

使用非分頁記憶體

呼叫此函式時,可能無法使用 Windows 核心模式函式。

DxgkDdiSystemDisplayEnable 可以在任何 IRQL 呼叫,因此它必須位於不可分頁的記憶體中。 DxgkDdiSystemDisplayEnable 不得呼叫任何可分頁記憶體中的程序代碼,而且不得操作可分頁記憶體中的任何數據。

自動顯示切換

自動顯示交換器驅動程式的 DxgkDdiSystemDisplayEnable DDI 必須確保面板自我重新整理 (PSR) 在呼叫結束時停用。 如需詳細資訊,請參閱 自動顯示參數

要求

要求 價值
最低支援的用戶端 Windows 8 (WDDM 1.2)
支援的最低伺服器 Windows Server 2012
目標平臺 桌面
標頭 dispmprt.h
IRQL 任何層級 (請參閱一節)

另請參閱

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiCommitVidPn

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite