EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN コールバック関数 (iddcx.h)
EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN は、アダプター上のモニターのモード変更を間接ディスプレイ ドライバー (IDD) に通知するために OS によって呼び出されます。
構文
EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN EvtIddCxMonitorAssignSwapchain;
NTSTATUS EvtIddCxMonitorAssignSwapchain(
[in] IDDCX_MONITOR MonitorObject,
[in] const IDARG_IN_SETSWAPCHAIN *pInArgs
)
{...}
パラメーター
[in] MonitorObject
モード変更の影響を受けたモニターを識別するために OS によって使用される、ドライバーによって作成された不透明なIDDCX_MONITOR ハンドル。
[in] pInArgs
間接スワップ チェーンの設定 に使用するドライバーの情報を含むIDARG_IN_SETSWAPCHAIN構造体へのポインター。
戻り値
(NTSTATUS)操作が成功した場合、コールバック関数は STATUS_SUCCESS、または NT_SUCCESS(status) が TRUE に等しい別の状態値を返す必要があります。 エラーが発生した場合、エラーが再び発生しない可能性が高い場合、IDD は STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN を返す必要があります。 それ以外の場合は、適切な NTSTATUS エラー コードを返す必要があります。 「解説」を参照してください。
Remarks
OS は EvtIddCxMonitorAssignSwapChain を 呼び出して、IDD がフレーム処理メカニズムを設定できるようにします。 たとえば、IDD は、D3D デバイスを初期化し、フレームの処理をループする新しいスレッドを作成する場合があります ( ID ドライバーのサンプルを参照してください)。
EvtIddCxMonitorAssignSwapChain が成功を返した場合、IDD は IDARG_IN_SETSWAPCHAIN.hSwapChain オブジェクトを所有し、WdfObjectDelete を呼び出してフレームの処理を停止したときにスワップチェーン オブジェクトを解放します。 スワップチェーン処理は、 EvtIddCxMonitorUnassignSwapChain が呼び出されたとき、または成功が EvtIddCxMonitorAssignSwapChain に返された後にフレーム処理ループでエラーが発生したときに、フレームの処理を停止できます。 これは、コンソール ID アダプターとリモート ID アダプターとすべての IddCx バージョンの両方に適用されます。
Windows 10 バージョン 1903 以降では、ユーザーへの影響 (IddCx によるドライバーのバグチェックの待機に費やされた時間など) を減らすために、EvtIddCxMonitorAssignSwapChain がSTATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN以外のエラー コードを報告した場合、IddCx はドライバーを直ちにバグチェックします。
ドライバーから STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAINが返された場合、IddCx はデスクトップコンポジターに通知します。 新しいスワップチェーンを作成する必要があるため、OS は EvtIddCxMonitorAssignSwapChain を再度呼び出します。 ID ドライバーは、発生したエラーが再び発生しない可能性が高い場合にのみ、このリターン コードを使用する必要があります。 つまり、ID ドライバーは、エラー コードを返したが、同じエラーが再び発生しないことを確認するために何も行わなかったため、使用できないデスクトップをユーザーに残すべきではありません。 たとえば、ドライバーがレンダリング アダプターで D3D デバイスを作成中にエラーが発生した場合、 IddCxAdapterSetRenderAdapter を呼び出して別のアダプター (おそらく別の GPU または WARP) に変更し、 STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAINを返すことができます。 OS は、新しいレンダー アダプターに新しいスワップチェーンを作成し、エラーを回避できます。 このエラー コードはバージョン 1903 以降Windows 10定義されていますが、ID ドライバーは以前の OS リリースでこのエラー コードを返す可能性があり、その結果効果はありません。
スワップチェーン内のサーフェスの解像度は、常にターゲット モードセットと同じ解像度になります。
サーフェスの形式は、ドライバーでサポートされている形式のいずれかになりますが、取得した各バッファーの形式は、フレームからフレームにサポートされている形式の間で変更できます。 ドライバーは、取得した各バッファーの形式をチェックする必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 |
サポートされている最小のサーバー | Windows Server 2016 |
対象プラットフォーム | Windows |
ヘッダー | iddcx.h |
IRQL | requires_same |