DXGKDDI_SYSTEM_DISPLAY_ENABLEコールバック関数 (dispmprt.h)
OS は、カーネル モード ディスプレイ ドライバー (KMD) DxgkddiSystemDisplayEnable 関数を呼び出して、KMD が現在のディスプレイ デバイスを指定された状態にリセットするように要求します。
構文
DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;
NTSTATUS DxgkddiSystemDisplayEnable(
[in] PVOID MiniportDeviceContext,
[in] D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
[in] PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
[out] UINT *Width,
[out] UINT *Height,
[out] D3DDDIFORMAT *ColorFormat
)
{...}
パラメーター
[in] MiniportDeviceContext
ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 KMD の
[in] TargetId
ディスプレイ デバイスが接続されているディスプレイ アダプター上のビデオ存在ターゲットの識別子を指定する D3DDDI_VIDEO_PRESENT_TARGET_ID 値。 この識別子は、DxgkDdiCommitVidPnへの前回の呼び出し中に現在のビデオ 現在のネットワーク (VidPn) 状態に残されたターゲットを対象にすることができます。
[in] Flags
フラグのビットごとの OR を含む DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS 値へのポインター。 このメンバーは OS によって予約されています。
[out] Width
指定したデバイスの表示モードの幅 (ピクセル単位)。
[out] Height
指定したデバイスの表示モードの高さ (ピクセル単位)。
[out] ColorFormat
表示デバイスの色形式を指定する D3DDDIFORMAT 値へのポインター。
戻り値
DxgkDdiSystemDisplayEnable
備考
OS は、システム停止エラーの後のバグチェック操作中 DxgkddiSystemDisplayEnable を呼び出します。
KMD で必要な手順
KMD は、DxgkDdiSystemDisplayEnable 関数が呼び出されたときに、次の手順に従う必要があります。
- すべての GPU 操作をキャンセルするか、GPU をアイドル状態にリセットします。
- OS は、TargetId パラメーターを使用して、ビデオの現在のターゲットを示します。 ドライバーは、このターゲットに関連付けられているディスプレイの電源をオンにし、表示したままにする必要があります。 ドライバーがディスプレイの電源をオンにできない場合は、この関数の呼び出しに失敗する必要があります。 このようなエラーが発生した場合、OS は DxgkDdiResetDevice
呼び出し、システムのバグチェックが発生する可能性があります。 - このターゲットに関連付けられているディスプレイの接続を確認します。 ターゲットにディスプレイが接続されていない場合、ドライバーはこの関数の呼び出しを完了し、STATUS_NOT_SUPPORTEDエラー コードを返す必要があります。
- ディスプレイ アダプターに接続されている他のすべてのディスプレイへの信号を無効にします。 これが不可能な場合、ドライバーは他のすべてのディスプレイに空白の画像を配置する必要があります。 これが不可能な場合、ドライバーは画面の最後の画像を変更せずに残す必要があります。
- 指定されたターゲットで現在の表示モードを維持し、このモードをこの関数呼び出しの一部として OS に戻します。
- ドライバーが現在の表示モードを維持できない場合、またはターゲットがアクティブ トポロジの一部でない場合、ドライバーは、1 ピクセルあたり 24 ビットの形式で 640 x 480 ピクセル以上の表示解像度が可能な別のターゲットにフレーム バッファーを設定する必要があります。 これが不可能な場合、ドライバーはこの関数呼び出しに失敗する可能性があります。これにより、システムのバグチェックと黒い画面の表示が発生します。
KMD では、線形フレーム バッファー モードを使用する必要はありません。 ただし、KMD では、D3DDDIFORMAT 列挙型の D3DDDIFMT_A8R8G8B8 形式のソースからこのフレーム バッファーへの書き込み操作をサポートする必要があります。
ソース イメージの制限
KMD によって表示機能が OS によって制御されると、OS は DxgkDdiSystemDisplayWrite 関数を呼び出して画面イメージを更新し、指定されたソースから、DxgkDdiSystemDisplayEnable 関数によってリセットされた画面にイメージのブロックを書き込むことができます。
DxgkDdiSystemDisplayWrite
KMD は、DxgkDdiSystemDisplayWrite 関数の PositionX および PositionY パラメーターで指定された位置から現在の画面にこのソース イメージを書き込む必要があります。
CPU を使用してソースからフレーム バッファーにイメージを書き込むには、GPU が不明な状態になるインスタンス
ページ以外のメモリを使用する
この関数が呼び出されている間は、Windows カーネル モード関数を使用できない場合があります。
DxgkDdiSystemDisplayEnable
ディスプレイの自動切り替え
自動ディスプレイ スイッチ ドライバーの DxgkDdiSystemDisplayEnable DDI は、その呼び出しの終了時にパネル自己更新 (PSR) が無効になっていることを確認する必要があります。 詳細については、「自動表示スイッチの
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 (WDDM 1.2) |
サポートされる最小サーバー | Windows Server 2012 |
ターゲット プラットフォーム の |
デスクトップ |
ヘッダー | dispmprt.h |
IRQL | 任意のレベル (「解説」セクションを参照) |
関連項目
DxgkCbAcquirePostDisplayOwnership の
DxgkDdiAddDevice の
DxgkDdiCommitVidPn を
DxgkDdiResetDevice の
DxgkDdiStopDeviceAndReleasePostDisplayOwnership
DxgkDdiSystemDisplayWrite の