Share via


WDDM 1.2 以降でのプラグ アンド プレイ (PnP)

すべての Windows Display Driver Model (WDDM) 1.2 以降のディスプレイ ミニポート ドライバーは、プラグ アンド プレイ (PnP) インフラストラクチャによる開始要求と停止要求に応答して次の動作をサポートする必要があります。 動作は、ドライバーが成功と失敗のどちらのコードを返すのか、あるいはシステム ハードウェアが基本的な入出力システム (BIOS) と Unified Extensible Firmware Interface (UEFI) のどちらに基づいているのかに応じて異なる場合があります。

WDDM の最小バージョン 1.2
Windows の最小バージョン 8
ドライバーの実装 - 完全なグラフィックスと表示のみ 必須
WHCK の要件とテスト

Device.Graphics.WDDM12.Display.PnpStopStartSupport

ディスプレイ ミニポート ドライバー PnP DDI

Windows 8 以降、Microsoft DirectX グラフィックス カーネル サブシステムは、ディスプレイ デバイスが起動または休止状態から再開された場合にドライバーが呼び出すことができるこの関数を提供します。

WDDM 1.2 以降の PnP 要件を実装するディスプレイ ミニポート ドライバーには、次の関数と構造体を使用できます。

PnP 開始操作

ディスプレイ デバイスのプラグ アンド プレイ (PnP) 開始プロセスは、ブート中またはディスプレイ ドライバーのアップグレード中に発生します。 この場合、ドライバーは DxgkCbAcquirePostDisplayOwnership 関数を呼び出して、フレーム バッファーに関する情報を取得し、表示同期を維持する必要があります。 フレーム バッファー情報は、ファームウェアまたはシステムに読み込まれた以前の WDDM 1.2 以降のドライバーから提供されます。

オペレーティング システムが DxgkDdiSetPowerState 関数を呼び出して D0 電源状態に戻り、DxgkDdiStartDevice 関数を呼び出している間に、すべてのアクティブなビデオ存在ネットワーク (VidPN) ターゲットについて、WDDM 1.2 以降のドライバーでソースの可視性を false (DXGKARG_SETVIDPNSOURCEVISIBILITY.Visible = FALSE) に設定する必要があります。 この場合、ディスプレイ パイプライン ハードウェアは、モニターと同期信号を維持する必要がありますが、パイプラインは、現在スキャン アウト中のサーフェスにどのピクセル データが存在するのかに関係なく、黒いピクセル データをモニターに引き続き送信する必要があります。これは、ピクセル パイプラインが、すべての黒ピクセルでモニターを空白にすることが保証されることを意味します。 その後、最初のフレームがフレーム バッファーにレンダリングされると、オペレーティング システムによってソースの可視性が true に設定されます。

これらの手順はすべて、モニターの同期を維持し、画面に点滅やちらつきが表示されないようにします。

これらは、PnP 開始プロセス後にドライバーが返す必要があるリターン コードです。

ドライバーのリターン コード 説明

成功

動作は Windows 7 の場合と同じです。

BIOS ベースのシステムの場合、ドライバーが正常に起動すると、フレーム バッファーはまだアクティブであり、ドライバーは有効なモードに設定する準備ができている必要があります。

障害

BIOS ベースのシステムの場合、ドライバーはシステムを BIOS に対応できる状態のままにする必要があります。

UEFI ベースのシステムの場合、ドライバーはディスプレイを UEFI グラフィックス出力プロトコル (GOP) によって設定されたのと同じモードのままにしておき、基本的なディスプレイ ドライバーがディスプレイを使用できるようにする必要があります。 ドライバーは、有効なエラー コードを返す必要があります。 ドライバーが GOP を基本的なディスプレイ ドライバーで使用できる状態のままにできない場合、ドライバーは Ntstatus.h から STATUS_GRAPHICS_STALE_MODESET エラー コードを返す必要があります。そして、オペレーティング システムによってシステムのバグ チェックが行われます。

PnP 停止操作

通常、ディスプレイ デバイスのプラグ アンド プレイ (PnP) 停止プロセスは、ドライバーが新しいバージョンにアップグレードされるときに発生します。 この場合、オペレーティング システムはドライバーの DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出します。このとき、ドライバーは正確なフレーム バッファー情報を提供する必要があります。

DxgkDdiStopDeviceAndReleasePostDisplayOwnership 呼び出しでは、ドライバーは、アクティブな VidPn ターゲットのソースの可視性が true (DXGKARG_SETVIDPNSOURCEVISIBILITY.Visible = TRUE) であることを確認する必要があります。 さらに、WDDM 1.2 以降では、ドライバーはピクセル パイプラインがスキャン アウトするようにプログラムされているサーフェスが、黒いピクセルで満たされていることを確認する必要があります。 ソースの可視性が true に設定される前に、ドライバーは黒いピクセルでサーフェスの塗りつぶしを完了する必要があります。

また、ドライバーに DxgkDdiStopDevice も忘れずに実装してください。 場合によっては、オペレーティング システムが DxgkDdiStopDeviceAndReleasePostDisplayOwnership の代わりに、あるいは DxgkDdiStopDeviceAndReleasePostDisplayOwnership の呼び出しに失敗した後に、DxgkDdiStopDevice を呼び出すことがあります。

これらは、PnP 停止プロセス後にドライバーが返す必要があるリターン コードです。

ドライバーのリターン コード 説明

成功し、ドライバーがモード情報を返す

ドライバーは、停止する前に、現在の解像度を使用して基本的なディスプレイ ドライバーが使用できるフレーム バッファーを設定する必要があります。そして、ドライバーは、オペレーティング システムが DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出すときに、この情報を返す必要があります。 保存されたモード情報は、BIOS に対応している必要はありません。基本的なディスプレイ ドライバーは、システムが再起動されるまでは BIOS モードを提供しません。

オペレーティング システムは、DxgkDdiStopDeviceAndReleasePostDisplayOwnershipSTATUS_SUCCESS を返した場合、DxgkDdiStopDevice を呼び出さないことを保証します。

成功し、ドライバーは、DXGK_DISPLAY_INFORMATION 構造体の Width メンバーと Height メンバーを 0 に設定する

このシナリオが可能になるのは、システムに 2 つのグラフィックス カードがあり、現在の電源オン セルフテスト (POST) デバイスにモニターが接続されておらず、かつオペレーティング システムが DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出して POST デバイスを停止する場合のみです。

この場合、現在のディスプレイは 2 番目のグラフィックス アダプターで引き続き実行され、基本的なディスプレイ ドライバーは POST デバイスをサポートするアダプターでヘッドレス モードで実行されます。

障害

オペレーティング システムは、DxgkDdiStopDevice 関数を介して Windows 7 スタイルの PnP 停止ドライバー インターフェイスを呼び出します。

BIOS ベースのシステムの場合、ドライバーはディスプレイを BIOS 対応モードに設定する必要があります。

UEFI ベースのシステムの場合、基本的なディスプレイ ドライバーは、グラフィックス アダプターでヘッドレス モードで実行されます。

PnP やその他の状態遷移に関するその他の要件については、「WDDM 1.2 以降でのシームレスな状態遷移の提供」を参照してください。

ハードウェア認定の要件

ハードウェア デバイスがこの機能を実装するときに満たす必要がある要件については、Device.Graphics.WDDM12.Display.PnpStopStartSupport に関する WHCK ドキュメントを参照してください。

Windows 8 で追加された機能のレビューについては、「WDDM 1.2 の機能」を参照してください。