IddCx バージョン 1.10 以降向けの更新
このページでは、IddCx バージョン 1.10 で行われた変更について説明します。 IddCx 1.9 に対してビルドされた 1 つの間接ディスプレイ ドライバー (IDD) バイナリは、ランタイム チェックを使用して Windows 10 バージョン 1803 以降で実行し、IddCx 1.9 の DDI 変更がそのシステムで使用できるかどうかを確認できます。 詳細については、 複数のバージョンの Windows 用の WDF ドライバーの構築を参照してください 。
IddCx 1.10 の変更は、次のカテゴリに分類されます。
- IddCxGetVersion バージョン の更新 (コンソールとリモート)。 IddCx 関連のバージョン情報の完全な一覧については、 IddCx のバージョンを参照してください。
- HDR10 (高ダイナミック レンジ) および SDR (標準ダイナミック レンジ) ワイド カラー ガマット (WCG) サポートを間接ディスプレイに追加します。
更新された IddCxGetVersion バージョン
IddCxGetVersion によって 返される値は更新されましたが、OS によって異なります。
- Windows 11 バージョン 22H2 9 月更新プログラムは、0x1A00 (IDDCX_VERSION_SV3) を返します。
- 2024 Windows プラットフォーム リリースでは、0x1A80が返されます。
このバージョン管理は、OS の動作が若干異なるリモート ドライバーにとって重要です。
HDR および SDR ワイド色域のサポート
SDR WCG など、Windows の色に関する概要情報については、HDR および SDR ディスプレイの高度な色を持つ DirectX に関する ページを参照してください。
ドライバー DDI と OS のサポート
可能であれば、ドライバーが次のサポートを報告できるように既存の DDI が拡張されました。
- HDR10
- SDR WCG
- IDD に送信された HDR フレームを記述するデータの受信
既存の DDI を拡張できない場合、既存の DDI の新しいバリアントが追加されました。 ほとんどの場合、これらの変更はコンソール ドライバーとリモート ドライバーの両方に適用できますが、リモート ドライバーに固有のいくつかの詳細も定義されています。
HDR をサポートするバージョン 1.10 以降のドライバーでは、新しい DDI バリアントを使用する必要があります。 HDR をサポートしていない古いドライバーまたはドライバーは、引き続き既存の機能を使用できます。 変更の概要については、この後のセクションで説明します。
次の表に、IddCx 1.10 で追加されたドライバー実装 DDI の一覧と、以前の同等の DDI がある場合の名前を示します。 HDR をサポートしていないアダプターの場合でも、ドライバーから報告された場合、OS はこれらの関数を呼び出す可能性があります。
*: 関数はリモート ドライバーには呼び出されません。
**: ドライバーによって設定されたアダプター フラグ によっては、リモート ドライバーの 関数が呼び出されない場合があります。
次の表に、IddCx 1.10 で追加された OS 実装関数の一覧を示し、以前の関数が存在する場合はこれに相当する名前を付けます。 バージョン 1.10 ドライバーは、ドライバーが実行されている OS でこれらの関数が使用可能であると判断した場合、新しいバリアントを呼び出すことができます。
*: リモート ドライバーでのみ使用します。
レポート アダプターの HDR サポート
バージョン 1.10 以降のドライバーでは、FP16 サーフェスのサポートを報告するために、 IDDCX_ADAPTER_FLAGS に追加された IDDCX_ADAPTER_FLAGS_CAN_PROCESS_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_Standard Edition T_GAMMA_RAMPで 受信した HDR 3x4 マトリックス変換を使用する
- HDR メタデータをディスプレイに送信します。 このメタデータは、 EVT_IDD_CX_MONITOR_Standard Edition T_DEFAULT_HDR_METADATA または IddCxSwapChainReleaseAndAcquireBuffer2で送信されます
- 必要に応じて SDR ホワイト レベルを適用します。たとえば、マウス カーソルなどです。 SDR ホワイト レベルは、 IddCxSwapChainReleaseAndAcquireBuffer2 および IddCxMonitorQueryHardwareCursor3に含まれています
ターゲット HDR 機能のレポート
ドライバーがアダプターの HDR を有効にする場合は、その EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO 関数を使用して、各ターゲット コネクタに関する追加情報を提供する必要があります。 HDR の一部の側面をサポートできるのは、使用可能なターゲットの一部のみであるため、ターゲット コネクタ固有の情報が必要です。
HDR のメタデータ
ドライバーが HDR メタデータを含むモニター記述子を提供する場合、OS は既定の HDR メタデータをドライバーに提供するために EVT_IDD_CX_MONITOR_Standard Edition T_DEFAULT_HDR_METADATA を呼び出します。 ドライバーは、この既定のデータを保持し、HDR10 情報フレーム (SMPTE ST.2086) をモニターに送信するときに使用する必要があります。 ドライバーが IddCxSwapChainReleaseAndAcquireBuffer2を呼び出すと、OS は HDR メタデータ情報も提供します。 このメタデータが既定値を使用する必要があることを示す場合は、参照されている格納された既定のデータです。
HDR モードが設定されると、OS はフレームごとに HDR メタデータ状態を送信します。 このメタデータは、導入された IDDCX_METADATA2 構造を介して使用する HDR メタデータをドライバーに指示します。 メタデータは、新しいメタデータ ブロックか、ドライバーが以前に OS によって提供された既定のメタデータまたは前のフレームと同じメタデータを使用する必要があることを示します。
注: HDR 10 メタデータはクライアントのディスプレイ サブシステムから取得する必要があるため、HDR メタデータはリモート ドライバーで使用できません。
レポート HDR モード
ディスプレイがターゲットに接続されると、OS は現在サポートされているモニター モードとターゲット モードについてドライバーにクエリを実行します。 HDR 機能を正しくアドバタイズするには、これらのモードごとに追加情報が必要であるため、HDR ドライバーは v1.10 で導入された次の DDI を公開する必要があります。
- 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 は、組み合わせて 1 つのモードとして報告する必要がある繰り返しモードの検出を試みるモードを検証します。 たとえば、チャネルあたり 8 ビットと 10 ビットの両方で 60 Hz で 1080p をサポートするターゲットは、単一モードとして報告する必要があります。 ただし、ターゲットでこれらのモードがサポートされているが、異なる帯域幅が必要な場合は、これらのモードを個別に報告しても問題ありません。
追加されたガンマ型
既存の EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP DDI が拡張され、HDR サポートをアドバタイズするドライバーに HDR ディスプレイをサポートするために必要な 3x4 マトリックス変換を OS で提供できるようになりました。
SDR ホワイト レベル
マウス カーソルのピクセル データは常に SDR です。 モニターが HDR モードで設定されている場合は、SDR ホワイト レベルをマウス カーソルに適用する必要があります。 IddCx v.10 では、次の 2 つの場所でこの機能が提供されます。
- IddCxSwapChainReleaseAndAcquireBuffer2 を呼び出すときにドライバーが受信したフレームごとのメタデータに追加されています。
- また、導入された IddCxMonitorQueryHardwareCursor3 関数の一部であるため、ドライバーは新しいフレームを受け取ることなく、正しいホワイト レベルでカーソルの更新をレンダリングできます。 既定の SDR ホワイト レベルは 80 ニトです。
サーフェスの色空間
ドライバーがモード情報の一部として色空間を報告した場合でも、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 構造体のサイズを設定します。
- 以前のリリースでは使用できない OS 実装関数を呼び出そうとしないでください。 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 DDI のいずれかが使用できない場合、ドライバーはフラグを設定しないでください。
IDD_IS_FIELD_AVAILABLE の使用方法 の例を次に示します。
if (IDD_IS_FIELD_AVAILABLE(IDD_CX_CLIENT_CONFIG, EvtIddCxParseMonitorDescription2))
{
IddCxClientConfig.EvtIddCxParseMonitorDescription2 = ParseMonitorDescription2;
}
詳しくは、「 IddCx 1.4 ドライバーのビルド」をご覧ください。