IddCx 1.10 版和更新版本的更新
本文說明IddCx 1.10版中所做的更新。 針對IddCx 1.10所建置的單一間接顯示驅動程式 (IDD) 二進位檔可以在Windows 10 1803版和更新版本上使用運行時間檢查來執行,以確認該系統上是否有IddCx 1.10中的 DDI 變更。 如需詳細資訊,請參閱 建置適用於多個 Windows 版本的 WDF 驅動程式。
IddCx 1.10 變更分為下列類別:
- 更新IddCxGetVersion版本(主控台和遠端)。 如需IddCx相關版本資訊的完整清單,請參閱 IddCx版本。
- 將 HDR10 (高動態範圍) 和 SDR (標準動態範圍) 寬色 Gamut (WCG) 支援新增至間接顯示器。
已更新IddCxGetVersion版本
IddCxGetVersion 傳回的值已更新,但視 OS 而有所不同:
- Windows 11 版本 24H2 平臺版本會傳回 0x1A80 (IDDCX_VERSION_GERMANIUM)。
- Windows 11 版本 22H2 9 月更新會傳回 0x1A00 (IDDCX_VERSION_SV3)。
對於 OS 的行為稍有差異的遠端驅動程式而言,此版本控制相當重要。
HDR 和 SDR 寬色域支援
如需 Windows 上色彩的一些簡介資訊,包括 SDR WCG,請參閱 HDR 和 SDR 顯示器上具有進階色彩的 DirectX。
驅動程式 DDI 和 OS 支援
可能的話,會擴充現有的 DIS,以允許驅動程式回報下列專案的支援:
- HDR10
- SDR WCG
- 接收數據,描述傳送至IDD的任何 HDR 畫面
當無法擴充現有的 DIS 時,會新增現有 DIS 的較新變體。 在大部分情況下,這些變更同時適用於控制台和遠端驅動程式,但也會定義遠端驅動程式特定的一些詳細數據。
支援 HDR 的 1.10 版和更新版本的驅動程式必須使用較新的 DDI 變體。 不支援 HDR 的較舊驅動程式或驅動程式可以繼續使用現有的函式。 本節後面的各節會提供變更的概觀。
下表列出IddCx 1.10中新增的驅動程序實作 DIS,並在有前一個對等專案時命名。 如果驅動程式回報這些函式,OS 可能會呼叫這些函式,即使是未嘗試支援 HDR 的適配卡也一樣。
*:遠端驅動程式不會呼叫函式。
**:根據驅動程式所設定的 適配卡旗標 ,可能無法針對遠端驅動程式呼叫函式。
下表列出IddCx 1.10中新增的OS實作函式,並命名任何先前的對等專案。 1.10 版驅動程式在判斷驅動程式執行時,可以在操作系統中取得這些函式之後呼叫較新的變體。
驅動程式必須呼叫 HDR 適配卡的較新函式 | 上一個對等專案 |
---|---|
IddCxSwapChainReleaseAndAcquireBuffer2 | IddCxSwapChainReleaseAndAcquireBuffer/IddCxSwapChainReleaseAndAcquireSystemBuffer |
IddCxMonitorQueryHardwareCursor3 | IddCxMonitorQueryHardwareCursor2 或 IddCxMonitorQueryHardwareCursor |
IddCxAdapterDisplayConfigUpdate2* | IddCxAdapterDisplayConfigUpdate* |
IddCxMonitorUpdateModes2 | IddCxMonitorUpdateModes |
*:僅供遠端驅動程式使用。
報告配接器 HDR 支援
1.10 版和更新版本的驅動程式應該設定新增至 IDDCX_ADAPTER_FLAGS IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16 旗標,以報告 FP16 表面的支援。 FP16 表面可用於 HDR10 或只用於 SDR WCG。 設定此旗標表示驅動程式會執行啟用 HDR10 或 SDR WCG 所需的所有專案,包括:
- 透過引進 的 EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO 函式 報告目標功能
- 透過下列引進的函式報告擴充模式資訊:
- 僅透過 IddCxMonitorUpdateModes2 更新目標模式,不再呼叫IddCxMonitorUpdateModes
- 僅透過IddCxMonitorQueryHardwareCursor3查詢數據指標詳細數據,不再呼叫IddCxMonitorQueryHardwareCursor2或IddCxMonitorQueryHardwareCursor
- 處理 IddCxSwapChainReleaseAndAcquireBuffer2 所提供的 FP16 桌面表面
- 使用由 EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP 接收的 HDR 3x4 矩陣轉換
- 將 HDR 元數據傳送至顯示器。 此元數據會在 EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA 或 IddCxSwapChainReleaseAndAcquireBuffer2 中傳送
- 適當時套用 SDR 白階;例如,滑鼠游標。 SDR 白階包含在 IddCxSwapChainReleaseAndAcquireBuffer2 和 IddCxMonitorQueryHardwareCursor3 中
報告目標 HDR 功能
如果驅動程式想要為適配卡啟用 HDR,它必須透過其 EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO 函式提供每個目標連接器的其他資訊。 需要目標連接器特定資訊,因為只有一些可用的目標可能支援 HDR 的某些層面。
HDR 元數據
當驅動程式提供包含 HDR 元數據的監視器描述項時,OS 會呼叫 EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA ,以提供驅動程式的預設 HDR 元數據。 驅動程式必須保留此預設數據,並在將 HDR10 信息畫面 (SMPTE ST.2086) 傳送至監視器時使用它。 當驅動程式呼叫 IddCxSwapChainReleaseAndAcquireBuffer2 時,OS 也會提供 HDR 元數據資訊。 如果此元數據指出應該使用預設值,則會參考預存的預設數據。
設定 HDR 模式時,OS 會傳送具有每個畫面的 HDR 元數據狀態。 此元數據會告知驅動程式要透過引進 的 IDDCX_METADATA2 結構使用哪些 HDR 元數據。 元數據是新的元數據區塊,或表示驅動程序應該使用先前提供的OS預設元數據,或與上一個畫面格相同的元數據。
注意:遠端驅動程式無法使用 HDR 元數據,因為任何 HDR10 元數據都應該來自用戶端上的顯示子系統。
報告 HDR 模式
當顯示器連線到目標時,OS 會查詢驅動程式,以取得目前支援的監視和目標模式。 若要正確公告 HDR 功能,每個模式都需要額外的資訊,因此 HDR 驅動程式必須公開 v1.10 中引進的下列 DIS:
- EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION2會傳回IDDCX_MONITOR_MODE2結構的清單。
- EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES2會傳回IDDCX_TARGET_MODE2結構清單。
這些擴充模式表示可以使用的可能位深度和表面格式。 驅動程式也可以藉由呼叫 IddCxMonitorUpdateModes2來更新目標模式清單。
OS 會根據驅動程式 EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO 回呼傳回的資訊,推斷 HDR 和 SDR WCG 模式的變化,再報告任何模式。
OS 會驗證模式,以嘗試偵測應結合並回報為單一模式的重複模式。 例如,在8位和每個通道10位中支援1080p的1080p的目標,應回報為單一模式。 不過,如果目標支持這些模式,但需要不同的頻寬量,則這些模式仍可以個別報告。
新增的 gamma 類型
已擴充現有的 EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP DDI,讓 OS 可以提供支援 HDR 顯示器給公告 HDR 支援的驅動程式所需的 3x4 矩陣轉換。
SDR 白色層級
滑鼠游標像素數據一律為 SDR。 在 HDR 模式中設定監視器時,SDR 白階必須套用至滑鼠游標。 IddCx v.10 會在兩個地方提供這項功能:
- 呼叫IddCxSwapChainReleaseAndAcquireBuffer2時,它已新增至驅動程式收到的每個畫面元數據。
- 它也屬於引進 的IddCxMonitorQueryHardwareCursor3 函式的一部分,因此驅動程式可以在正確的白色層級轉譯數據指標更新,而不需要接收新的框架。 預設 SDR 白色層級為 80 nits。
表面色彩空間
即使驅動程式將色彩空間報告為模式資訊的一部分,OS 仍會報告所 引進IDDCX_METADATA2 結構中特定畫面所使用的實際色彩空間。
具有遠端驅動程式的 HDR
可能的話,遠端驅動程式的 OS 和驅動程式行為應該與控制台驅動程式相同。 例外狀況為:
- HDR 元數據不會提供給遠端驅動程式。 用戶端系統預期會根據實際連接的顯示器提供此元數據。 使用伺服器所決定的元數據是毫無意義的。
- 3x4 色彩矩陣轉換也不會傳送。 同樣地,遠端驅動程式應該使用來自客戶端系統的對等數據。
- 遠端驅動程式可以提供伺服器上要使用的色度數據和SDR 白階。
- 遠端驅動程式的監視模式也是選擇性的。 如果遠端驅動程式設定 IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE 適配卡旗標,OS 不會要求它進行監視模式,而只會使用目標模式。 這項功能可讓驅動程式指定不尋常的模式,而不需要報告對等的監視模式;例如,根據客戶端視窗大小,而不是監視器大小。
支援執行下層的 1.10 驅動程式
在舊版 Windows 上執行的 1.10 版驅動程式需要採取數個步驟,以確保相容性。 具體而言,驅動程序必須:
- 繼續匯出所有現有的函式,例如EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION、EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES和EVT_IDD_CX_ADAPTER_COMMIT_MODES。
- 使用IDD_CX_CLIENT_CONFIG_INIT巨集來設定IDD_CX_CLIENT_CONFIG結構的大小。
- 請勿嘗試呼叫舊版中未提供的任何操作系統實作函式。 使用 IDD_IS_FUNCTION_AVAILABLE 來檢查可用性。
- 無法匯出 v1.10 函式。 驅動程式可以使用IDD_IS_FIELD_AVAILABLE巨集來檢查它是否應該將 EvtIddCxXxx 回呼寫入IDD_CX_CLIENT_CONFIG結構。
- IDD_IS_FIELD_AVAILABLE也可以協助驅動程序判斷是否安全設定IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16或IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE。 如果其中一個 v1.10 DIS 無法使用,驅動程式就不應該設定 旗標。
如何使用IDD_IS_FIELD_AVAILABLE的範例:
if (IDD_IS_FIELD_AVAILABLE(IDD_CX_CLIENT_CONFIG, EvtIddCxParseMonitorDescription2))
{
IddCxClientConfig.EvtIddCxParseMonitorDescription2 = ParseMonitorDescription2;
}
如需詳細資訊,請參閱 建置 IddCx 1.4 驅動程式。