統合ディスプレイ パネルでの明るさ制御のサポート

この記事では、統合ディスプレイ パネルの明るさ制御をサポートするためのメカニズムと要件について説明します。 また、システム提供のモニター ドライバー (Monitor.sys)、カーネル モード ディスプレイ ミニポート ドライバー (KMD)、および BIOS 間 (ACPI メソッドを介して) の連携について概説します。 この記事の目的は、KMD または ACPI のいずれを使用する場合でも、ユーザーがディスプレイの明るさを簡単に調整できるようにすることです。それにより、電力使用量が最適化されると同時に、コンピューティング エクスペリエンスが向上します。

Monitor.sys での明るさ制御のサポート

明るさ制御は Monitor.sys で実装されています。 このシステム提供のモニター ドライバーのサポート内容は次のとおりです。

  • Windows Management Instrumentation (WMI) インターフェイスを実装して、アプリケーション (オペレーティング システムの明るさスライダーなど) が明るさレベルと対話できるようにします。

  • 明るさレベルが電源ポリシーの変更に対応できるように、デバイス電源ポリシー エンジン (DPPE) に登録します。

  • ACPI ベースの明るさショートカット キーを処理するために、詳細構成および電源インターフェイス (ACPI) に登録します。 旧式の Windows 2000 ディスプレイ ドライバー モデルとの互換性のために、モニター ドライバーは IOCTL ベースの明るさ制御を実装しています。

カーネル モード ディスプレイ ミニポート ドライバー (KMD)、または BIOS 公開の ACPI メソッドのいずれかで、統合ディスプレイ パネルの明るさの変更をサポートできます。 コンピューター (D3DKMDT_VOT_INTERNAL) で内部的に接続する出力テクノロジがあるとマークされている最初のビデオ ターゲットの場合、モニター ドライバーは KMD の DxgkDdiQueryInterface 関数を呼び出して、次のインターフェイスの両方を照会します。

KMD が最低限必要な明るさ制御インターフェイスをサポートしていない場合、モニター ドライバーは ACPI を使用して、子デバイスの _BCL、_BCM、および _BQC メソッドを照会します。 これらのメソッドの詳細については、ACPI Web サイトにあるACPIの仕様を参照してください。

Note

Windows Display Driver Model (WDDM) では、ACPI 識別子は統合ディスプレイ パネルを識別するために使用されません。 これは、0x0110 の識別子を持つディスプレイ パネルのみをサポートする Windows 2000 Display Driver Model とは異なります。

KMD、または BIOS 公開の ACPI メソッドのいずれかで明るさ制御がサポートされている場合、モニター ドライバーは明るさのショートカット キー イベントの ACPI 通知を受け取るための登録を行います。 ショートカット キーの通知についてモニター ドライバーに通知する代替メカニズムは存在しません。 モニター ドライバーが明るさ制御メカニズムを使用できない場合、または KMD が明るさ制御インターフェイスを提供するものの、DxgkDdiGetPossibleBrightness 関数の呼び出しに失敗した場合、モニター ドライバーは明るさ制御をサポートしません。

Brightness Level (明るさのレベル)

明るさレベルは、0 から 100 までの範囲の 1 バイト値として表されます。ゼロはオフで、100 はラップトップ コンピューターでサポートされる最大の明るさです。 すべてのラップトップコンピュータは 100 の最大明るさレベルを報告する必要があります。ただし、ラップトップ コンピューターでは、レベル 0 をサポートする必要はありません。

0 から 100 までの値の唯一の要件は、必ず値が大きいほど明るさレベルが高くなる点です。 レベル間の増分は均一である必要はありません。また、ラップトップ コンピューターでは、最大 101 レベルまでの任意の数の個別の値をサポートできます。 ハードウェア レベルを明るさレベル値の範囲にマップする方法を決定する必要があります。 ただし、KMD の DxgkDdiGetPossibleBrightness 関数の呼び出しは、ハードウェアがサポートするよりも高い明るさレベルの値を報告しません。

BIOS による明るさの自動変更を無効にする

KMD は _DOS メソッドへの引数のビット 2 を設定する必要があります。 このビットを設定することで、システム BIOS とモニター ドライバーがディスプレイ パネルの明るさを両方で制御する場合に発生する可能性のある問題を回避できます。 _DOS メソッドとその引数の詳細については、ACPI の仕様を参照してください。 ビット 2 を設定すると、システム BIOS に、明るさの自動変更を実行しないように通知されます。

明るさ制御をサポートするための BIOS 要件

KMD が最適な方法で統合パネルの明るさ制御をサポートするために、システム BIOS は、ACPI を介して次の項目を入力する必要があります。

明るさ制御方法

統合パネル デバイスは、ACPI の明るさ制御方法 (_BCL、_BCM、および_BQC) をサポートする必要があります。 _BCL と _BCM は、ACPI 仕様のバージョン 1.0b 以降変更されません。定義は、セクション B.6.2 および B.6.3 の ACPI 3.0 仕様で確認できます。 _BQC は省略可能で、セクション B.6.4 の ACPI 3.0 仕様で定義されています。 明るさレベルの定義については、「明るさレベル」を参照してください。

Dispmprt.h で定義されている ACPI 明るさ制御メソッドのエイリアスを次に示します。

  • ACPI_METHOD_OUTPUT_BCL - 表示出力デバイスでサポートされている明るさレベルの一覧を Windows が照会できるようにします。 このメソッドは、統合された LCD が存在し、明るさレベルをサポートしている場合に必要です。

  • ACPI_METHOD_OUTPUT_BCM - 表示出力デバイスの明るさレベルを Windows が設定できるようにします。 Windows は ACPI_METHOD_OUTPUT_BCL メソッドによって報告されたレベルのみを設定します。 ACPI_METHOD_OUTPUT_BCL メソッドが実装されている場合、ACPI_METHOD_OUTPUT_BCM メソッドが必要です。

自動システム BIOS 明るさ制御を無効にする

システム BIOS では、グラフィックス アダプターの _DOS メソッドへのビット 2 引数の設定をサポートして、システム BIOS の明るさの自動変更を無効にする必要があります。 このビットは、このメソッドのビットに対して以前に定義された値に追加されます。 このビットの詳細については、ACPI 3.0 仕様のセクション B.4.1 を参照してください。

このビットがサポートされていない場合、モニター ドライバーとシステム BIOS の両方で明るさレベルが変更され、明るさがちらつく可能性があります。 さらに、明るさは、ユーザーが要求した値ではない値に設定される可能性があります。

Dispmprt.h で定義されている ACPI_METHOD_DISPLAY_DOS は、ACPI 自動明るさ制御メソッドのエイリアスです。 このエイリアスは、システム BIOS がアクティブなディスプレイ出力を自動的に切り替えるか、LCD の明るさを制御できることを示します。 そのパラメーターには、次の値のいずれかを指定できます。

意味
ACPI_ARG_ENABLE_AUTO_LCD_BRIGHTNESS システム BIOS は、電源が AC から DC に変わるとき、LCD の明るさレベルを自動的に制御する必要があります。
ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS システム BIOS は、電源が AC から DC に変わるとき、LCD の明るさレベルを自動的に制御することはできません。

明るさの通知ショートカット キー

明るさショートカット キーの通知は、グラフィックス アダプターではなく、統合ディスプレイ パネル デバイスを対象とする必要があります。

Dispmprt.h で定義されているように、次の通知がサポートされています。

通知 意味
ACPI_NOTIFY_CYCLE_BRIGHTNESS_HOTKEY ユーザーは、ディスプレイの明るさを循環するためのホットキーを押しました。
ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY ユーザーは、ディスプレイの明るさレベルを増やすためのホットキーを押しました。
ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY ユーザーは、ディスプレイの明るさレベルを減らすためのホットキーを押しました。
ACPI_NOTIFY_ZERO_BRIGHTNESS_HOTKEY ユーザーは、ディスプレイの明るさをゼロに減らすためのホットキーを押しました。

これらのショートカット キーの通知は、ACPI 3.0 仕様の新機能で、セクション B.7 で説明されています。 通常、ラップトップ コンピューターでは、これらのショートカット キー通知がすべてサポートされているわけではありません。

明るさレベルの増減に対応するモニター ドライバーの既定の動作は次のとおりです。

  • ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY の場合、次の使用可能な 5% 刻みのレベル (5、10、15、...、95、100) に達するまで、明るさレベルを前のレベルよりも 5% 以上増やします。

  • ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY の場合、次の使用可能な 5% 刻みのレベル (100、95、...、15、10、5) に達するまで、明るさレベルを前のレベルよりも 5% 以上減らします。

ショートカット キーを使用して増やしたり減らしたりすると、次の例に示すように、明るさレベルで非対称パターンを作成できます。

  • 0、1、5、10、..、95、100 として指定される、_BCL 明るさ制御レベルを使用できます。

    • ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY 通知を使用した結果:
      0、5、10、15、20、25、30、35、40、45、50、55、60、65、70、75、80、85、90、95、100

    • ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY 通知を使用した結果:
      100、95、90、85、80、75、70、65、60、55、50、45、40、35、30、25、20、15、10、5、0

  • 1、5、10、..、95、100 として指定される、_BCL 明るさ制御レベルを使用できます。

    • ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY 通知を使用した結果:
      1、10、15、20、25、30、35、40、45、50、55、60、65、70、75、80、85、90、95、100

    • ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY 通知を使用した結果:
      100、95、90、85、80、75、70、65、60、55、50、45、40、35、30、25、20、15、10、5、1

    後者の例では、最後に使用可能な値が 1 のため、前の値 5 との違いが 5% 未満であっても、ドライバーは明るさレベルを 1 に設定します。

IHV または OEM は、次のレジストリ キーで MinimumStepPercentage の DWORD 値を設定することで、Windows Vista および Windows 7 の既定のモニター ドライバーの動作を変更できます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\monitor\Parameters\

ディスプレイ出力および ACPI イベントのサポート