支援整合式顯示面板上的亮度控制件
本文說明在整合式顯示面板上支援亮度控件的機制和需求。 它概述系統提供的監視驅動程式(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 函式來查詢下列兩個介面:
亮度控制介面。 GUID_DEVINTERFACE_BRIGHTNESS和DXGK_BRIGHTNESS_INTERFACE_VERSION_1識別這個介面。
亮度控制介面 V.2。 GUID_DEVINTERFACE_BRIGHTNESS_2和DXGK_BRIGHTNESS_INTERFACE_VERSION_2識別這個介面。
如果 KMD 至少不支援亮度控制介面,則監視器驅動程式會使用 ACPI 來查詢子裝置上的_BCL、_BCM和_BQC方法。 如需這些方法的詳細資訊,請參閱 ACPI 網站上的 ACPI 規格。
注意
在 Windows 顯示驅動程式模型 (WDDM) 中,ACPI 識別碼不會用來識別整合式顯示面板。 這與 Windows 2000 顯示驅動程式模型不同,它只支援具有標識碼0x0110的顯示面板。
如果 KMD 或 BIOS 公開的 ACPI 方法都支援亮度控件,則監視器驅動程式會註冊亮度快捷鍵的 ACPI 通知。 沒有替代機制可向監視驅動程式發出有關快捷鍵通知的訊號。 如果監視器驅動程式無法使用亮度控制機制,或 KMD 提供亮度控制介面,但無法呼叫 DxgkDdiGetPossibleBrightness 函式,則監視器驅動程式不支援亮度控件。
亮度等級
亮度等級會以介於零到 100 之間的單位元組值表示,其中零為關閉,而 100 是膝上型電腦所支援的最大亮度。 每部膝上型計算機都必須報告最大亮度等級為 100:不過,膝上型計算機不需要支援零層級。
從零到 100 的值唯一需求是較大的值必須代表較高的亮度等級。 層級之間的增量不需要是統一的,膝上型計算機可以支援最多 101 個層級的任何數目相異值。 您必須決定如何將硬體層級對應至亮度等級值的範圍。 不過,呼叫 KMD 的 DxgkDdiGetPossibleBrightness 函式不應報告比硬體支援的亮度層級值更多。
停用 BIOS 的自動亮度變更
KMD 應該將 自變數的位 2 設定為 _DOS 方法。 設定此位可避免當系統 BIOS 和監視驅動程式兩個控制面板亮度時可能發生的問題。 如需_DOS方法及其自變數的詳細資訊,請參閱 ACPI 規格。 藉由設定位 2,系統會通知系統 BIOS 不應該執行任何自動亮度變更。
支援亮度控件的 BIOS 需求
若要讓 KMD 以最佳方式支援控制整合面板亮度,系統 BIOS 必須透過 ACPI 提供下列專案。
亮度控制方法
整合式面板裝置應支援 ACPI 亮度控制方法(_BCL、_BCM和_BQC)。 自 ACPI 規格 1.0b 版起,_BCL和_BCM保持不變:您可以在 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 應該支援將 自變數的位 2 設定為圖形適配卡上的 _DOS 方法,以允許停用自動系統 BIOS 亮度變更。 這個位是這個方法中位先前定義的值新增。 如需此位的詳細資訊,請參閱 ACPI 3.0 規格中的 B.4.1 一節。
如果不支援此位,則監視器驅動程式和系統 BIOS 可以同時變更亮度等級,因而產生亮度閃爍。 此外,亮度可能會設定為不是使用者所要求的值。
ACPI_METHOD_DISPLAY_DOS定義於 Dispmprt.h 中,是 ACPI 自動亮度控制方法的別名。 這個別名表示系統 BIOS 能夠自動切換作用中顯示器輸出或控制 LCD 的亮度。 其參數可以是下列其中一個值。
值 | 意義 |
---|---|
ACPI_ARG_ENABLE_AUTO_LCD_BRIGHTNESS | 當電源從 AC 變更為 DC 時,系統 BIOS 應該會自動控制 LCD 的亮度等級。 |
ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS | 當電源從 AC 變更為 DC 時,系統 BIOS 不應該自動控制 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% 步驟層級(5、10、15、...、95、100)。
對於ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY,在達到下一個可用的 5% 步驟層級之前,將亮度降低至少百分之五,直到達到下一個可用的 5% 步驟層級(100、95、...、15、10、5)。
使用快捷鍵遞增或遞減可以在亮度等級中建立非對稱模式,如下列範例所示。
可用的_BCL亮度控制等級指定為 0、1、5、10、...、95、100
使用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
可用的_BCL亮度控制等級指定為 1、5、10、...、95、100
使用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 是最後一個可用的值,因此驅動程式會將亮度等級設定為 1,即使它小於 5 個百分比單位,與前一個值 5 不同。
IHV 或 OEM 可以在下列登錄機碼中設定 MinimumStepPercentage 的 DWORD 值,以變更 Windows Vista 和 Windows 7 上的預設監視器驅動程序行為:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\monitor\Parameters\