WDDM 1.2 以降でのシームレスな状態の移行の提供
Windows 8 以降では、いくつかの機能を使用して、ブート プロセス中、低電力状態からの移行中、およびドライバーのアップグレードやシステム バグ チェックでオペレーティング システム制御に戻る間に、画面の点滅やちらつきを最小限に抑えたり排除したりできます。 さらに、Windows 8 以降のコンピューターのシステム ファームウェアは、電源投入時に統合型ディスプレイ パネルのネイティブ解像度とタイミングを検出し、この情報をオペレーティング システムに渡す必要があります。 Windows Display Driver Model (WDDM) 1.2 以降のディスプレイ ミニポート ドライバーで、この動作がサポートされている必要があります。
WDDM の最小バージョン | 1.2 |
Windows の最小バージョン | 8 |
ドライバーの実装 - 完全なグラフィックスおよびディスプレイのみ | 必須 |
WHCK の要件とテスト | System.Client.Firmware.UEFI.GOP.Display Device.Graphics…PnpStopStartSupport Device.Graphics…DisplayOutputControl |
ファームウェアからオペレーティング システムへの移行
クライアント SKU を対象とするすべての Windows 8 システムで、Unified Extensible Firmware Interface (UEFI) Graphics Output Protocol (GOP) がサポートされている必要があります。 ブート フェーズ中に、GOP はシステムの統合型ディスプレイ パネルにネイティブ タイミングとネイティブ解像度を設定します。 オペレーティング システムがディスプレイの所有権を引き継ぐ準備ができたら、GOP はディスプレイにスキャン アウトするために使用できるフレーム バッファーを引き渡します。 この時点で、オペレーティング システムはディスプレイのタイミングや解像度をリセットしようとしませんが、指定されたフレーム バッファーだけを使用して、1 つの画面の点滅を排除します。
ハードウェア認定の要件
ハードウェア デバイスでこの機能を実装する際に満たす必要がある要件については、関連する WHCK ドキュメントで「System.Client.Firmware.UEFI.GOP.Display」を参照してください。
オペレーティング システムからドライバーへの移行
オペレーティング システムは、ブート後に WDDM ドライバーにディスプレイの所有権を引き渡すと、DxgkDdiStartDevice 関数を呼び出してデバイスのプラグ アンド プレイ (PnP) の開始を開始します。 または、休止状態から再開した後、オペレーティング システムは、DxgkDdiSetPowerState 関数 (DeviceUid パラメーターを DISPLAY_ADAPTER_HW_ID に設定 (Video.h で定義)) を呼び出してデバイスを起動します。 この時点で、WDDM グラフィックス ドライバーが制御している間、通常、画面は空白 (黒でレンダリング) になります。
ドライバーは、DxgkCbAcquirePostDisplayOwnership 関数 (Windows 8 以降で使用可能) を呼び出して、現在のフレーム バッファーの正確な状態と、ファームウェアとブート ローダーによって設定されたディスプレイ モードをについて、オペレーティング システムでクエリを実行することができます。 この関数によって取得された DXGK_DISPLAY_INFORMATION 構造体の情報を使用すると、ドライバーはディスプレイ コントローラーをアクティブな状態に保つことができ、モニターの再同期は発生しません。 ドライバーにはフレーム バッファーに関する詳細情報も含まれているため、スムーズな移行を実現することができます。
PnP 開始の詳細については、「WDDM 1.2 以降でのプラグ アンド プレイ (PnP)」を参照してください。
ドライバーからオペレーティング システムへの移行
オペレーティング システムは、DxgkDdiStopDevice 関数を呼び出して、ディスプレイ デバイスの PnP 停止を要求できます。 この時点で、オペレーティング システムがディスプレイ コントロールを引き継いでいる間、通常、画面は空白 (黒でレンダリング) になります。 オペレーティング システムは、WDDM ドライバーがスキャン アウト用に構成されたフレーム バッファーを設定する必要がある場合に、DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数 (Windows 8 以降で使用可能) を呼び出すことができます。オペレーティング システムは、ディスプレイの制御中にこのフレーム バッファーにレンダリングできるため、スムーズな移行を実現することができます。
その他のシナリオを含む PnP 停止の詳細については、「WDDM 1.2 以降でのプラグ アンド プレイ (PnP)」を参照してください。
ハードウェア認定の要件
このハンドオフの詳細については、関連する WHCK ドキュメントで「Device.Graphics…PnpStopStartSupport」を参照してください。
ドライバーを無効にしないでオペレーティング システムに移行する
オペレーティング システムで回復不能なエラーが発生し、システム バグ チェックを発行する必要がある場合があります。 この場合、オペレーティング システムがディスプレイを制御しなければならないのに、WDDM ドライバーを停止できない場合があります。 WDDM 1.2 以降のドライバーは、DxgkDdiSystemDisplayEnable 関数と DxgkDdiSystemDisplayWrite 関数を実装して、オペレーティング システムが、グラフィカル インターフェイスを高解像度と高い色深度で維持しながらエラー画面を表示できる状態にシームレスに移行できるようにする必要があります。 この移行により、不快なユーザー エクスペリエンスが解消されます。
ハードウェア認定の要件
ハードウェア デバイスでこの機能を実装する際に満たす必要がある要件については、関連する WHCK ドキュメントで「Device.Graphics…DisplayOutputControl」を参照してください。
Windows 8 ファームウェア モードの変更
ファームウェアがオペレーティング システムに制御を引き渡す前のファームウェアのディスプレイ モードの変更を次に示します。
WDDM 1.2 以降のドライバー (DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN8)
Windows 8 以降では、ディスプレイの点滅をさらになくすために、WDDM 1.2 以降のドライバーのファームウェアで Int10 モードの変更要求は呼び出されません。
さらに、モニターの電源がオフになっている間にモードの変更が発生した場合、オペレーティング システムは DxgkDdiCommitVidPn 関数を 1 回だけ呼び出し、pCommitVidPnArg パラメーターをモニターの電源がオンになっていたときの値に設定し、pCommitVidPnArg->Flags の PathPoweredOff メンバーを TRUE に設定します。
WDDM 1.0 および 1.1 ドライバー (DXGKDDI_INTERFACE_VERSION<DXGKDDI_INTERFACE_VERSION_WIN8)
Windows 8 で実行されている WDDM バージョン 1.0 および 1.1 ドライバーの場合、ブート プロセス中または休止状態からの再開時に Int10 VGA モード 0x12 を呼び出すと、ディスプレイの解像度はモニターのネイティブ高解像度に設定されます。 Windows 8 より前のバージョンでは、Int10 VGA モード 0x12 を呼び出すと、ディスプレイの解像度は 1 ピクセルあたり 16 ビットで 640 x 480 ピクセルに設定され、カーソルは点滅することなく、オペレーティング システムのスプラッシュ スクリーンの画像が表示されます。
ただし、高解像度モードをサポートしていないことを示す WDDM バージョン 1.0 および 1.1 ドライバーの場合、Windows 8 以降では、VGA モード 0x12 で起動するとディスプレイの解像度は 1 ピクセルあたり 16 ビットで 640 x 480 ピクセルに設定され、カーソルは点滅しません。 システムが休止状態から再開しても、ディスプレイの解像度はモニターのネイティブ高解像度に設定されます。
さらに、モニターの電源がオフになっている間にモードの変更が発生した場合、WDDM 1.2 ドライバーについて上記で説明したとおり、オペレーティング システムは DxgkDdiCommitVidPn 関数を呼び出し、pCommitVidPnArg->hFunctionalVidPn の空の Video Present Network (VidPN) でもう一度DxgkDdiCommitVidPn 関数を呼び出し、pCommitVidPnArg->Flags にフラグ値は設定しません。
この 2 部構成の呼び出しシーケンスは、システムが休止状態から再開し、同期の監視が有効な場合にも発生します。 この場合、ドライバーは DxgkDdiCommitVidPn の 2 回目の呼び出しを受信した場合、実行する必要があるアクションはありません。