來源:
T客邦 微軟號稱,從Windows Vista開始,你再也看不到視窗切換慢動作的爛戲了。以筆者用了一兩年的經驗,的確是毫無因為桌面繪圖錯誤而當機的印象。這箇中奧妙解釋起來會有點複雜,所以我們先用簡單的話來說:Windows XP的桌面都是2D繪圖,Windows Vista開始才有3D加速桌面。
3D加速讓桌面進化
所謂2D桌面的舊架構,就是早在Windows 95時代出生的GDI(Graphics Device Interface),正因為它是在電腦處理能力很爛的年代開發出來的API,所以它沒有反鋸齒處理、透明背景等等華麗的功能。其實早期會有人為了讓2D 圖像跑得更順暢,去買所謂的「2D加速卡」,當然廠商也因應GDI撰寫了有硬體加速的驅動程式。
搜括世界各國佈景主題
▲ 這支Windows 7 ToolKit其實是個破解程式,不過它也有一些調校功能,像是按一下就可以把隱藏在C:\windows\Globalization\MCT的各國佈景安裝進來。
DirectX、GDI兩條路
在這不久之後,DirectX和3D遊戲也開始流行,更多廠商把資源投注在開發「3D加速卡」身上。而因為GDI和DirectX兩個API的誕生背景不同,後來就像在兩個平行世界發展似的,即使微軟試著互通它們的程式資源,卻幾乎沒有任何成果。
到了Windows XP,縱使GDI升級成GDI+,增加了材質、漸層、透明度、浮點座標、支援更多圖片格式等等新功能,骨子裡還是同樣的舊系統。簡單的說,DirectX 遊戲可以充分運用電晶體數量比CPU還多的超暴力顯示卡,存取顯示記憶體裡的圖像合成漂亮的遊戲場景。但是以上這些資源GDI都不能用,當然也就做不出任 何3D特效。
▲ 即使Windows XP 升級了新的GDI+,還是常常會有視窗拖動「鬼影幢幢」的老症頭。
▲ Vista之後的桌面,就像由DWM操控各種畫面合成的3D影像。
WDDM架構來幫忙
這些難解的問題,等到Vista重新打造桌面的繪圖流程才開始解決,也就是WDDM(Windows Display Driver Model)這個新的顯示驅動程式架構,在這個底層系統之上,是由WPF(Windows Presentation Foundation)負責控制Windows桌面的構圖。從此以後,桌面上的各個視窗,就變成了3D繪圖流程裡的平面(surface),透過 DWM(Desktop Windows Manager)這支Direct3D應用程式,就可以合成螢幕上的畫面。
▲ Vista的名產:Flip 3D原封不動的活下來了,在Windows 7按「Windows鍵+Tab」就會出現。
排程共享GPU資源
從原本的2D桌面進化到3D加速桌面有幾個關鍵,首先,WDDM架構可以讓不同的應用程式和系統服務分享GPU的處理能力。比方說負責合成桌面的 DWM程式,除了要操控桌面上的物件,還會提供Flip 3D特效,顯示縮圖預覽等等。其他的應用程式也會渲染自己的圖片,它們和DWM自己的渲染執行緒分頭進行,最後由DWM負責組成桌面。而WDDM也會負責 分配GPU的運算能力,讓3D程式在必要的時候取得最大的資源。
反過來說,在WDDM出現之前,幾乎不可能有好幾個3D應用程式同時執行,因為沒有排程的能力,跑一個DirectX遊戲就把所有資源搾乾了。而且 WDDM讓顯示記憶體可以被分頁儲存到主記憶體,就算顯示記憶體容量不夠用了,也不用擔心會3D桌面當機,導致倒退回2D模式。
桌面繪圖跟得上滑鼠
現在我們回頭看看Windows XP的「白色鬼影」問題,由於它的視窗桌面被當成一張2D平面圖,當上面的視窗移來移去,底下的其他視窗和桌面必須不斷的重繪,造成畫面不連貫,或是出現白邊。
在WDDM架構下,即使某些視窗是被覆蓋的狀況,它們還是會以3D平面的形式,儲存在螢幕以外的假想區域。這麼一來使用者可以任意拖動視窗,底下的 視窗也不必重畫一次。就像Aero特效啟動的時候,透明邊框移到底下有其他視窗的地方,同樣不必再重新繪圖,這些動作都只需DWM負責把半透明的圖像放到 新的座標即可。
▲ 雖然理論上視窗畫面不會消失,不過用久了還是會有縮圖預覽失效的狀況,Windows 7會用小圖示混過去。
WDDM 1.1啟用條件
到了Windows 7,不只是活用3D加速桌面做出神奇的操作介面而已,WDDM架構也從Vista的1.0版推進到了1.1。不過想啟用WDDM 1.1,就跟玩DirectX 10遊戲的條件一樣,你得升級Windows 7(廢話)、插一張支援WDDM 1.1的顯示卡、並且裝上WDDM 1.1的驅動程式。
而WDDM 1.1使用的API版本,從Vista的DirectX 9升級到了DirectX 10.1,所以必須裝一張支援DirectX 10的顯示卡,才能達成啟用條件。如果你的顯示卡大概是在兩年以內購買的G80以上等級,應該就沒問題,詳細可參考以下附表。
WDDM版本 | DirectX版本 | 顯示晶片 |
WDDM 1.1 | DirectX 10.x | NVIDIA:G80系列以上 |
AMD:Radeon 2000系列以上 |
Intel:i4G、i45GM、 G35、i965GM以上 |
WDDM 1.1的改善重點
既然程式的API升級,執行效率理論上應該也會變快吧?微軟標榜的便是WDDM 1.1能夠讓DirectX 10的遊戲執行效率、以及桌面繪圖效能更好。遊戲部份我們留待適當的文章驗證,而桌面繪圖的加強重點,就在大幅改善記憶體佔用量。
運作更輕巧
在3D加速桌面的結構下,每個視窗都是未壓縮的材質,準備讓顯示卡處理。在Vista的WDDM 1.0架構當中,當有視窗繪圖元件需要處理,DWN會在顯示記憶體儲存一份材質,還有一份重覆的資料會放進主記憶體,以便讓DWM合成桌面。當桌面上開啟 的元件變多,就會讓系統記憶體的消耗量激增。
到了WDDM 1.1,只要在顯示記憶體儲存一份資料就可以了。根據微軟的說法,每多開一個視窗就會佔用一塊記憶體,所以Vista在開一堆視窗之後,記憶體佔用量會呈等差級數上升。而Windows 7的使用量理論上根本不會增加。
不同系統的改善幅度
聽起來很強大,不過我們還是實際來測看看,眼見為憑。然而因為很難控制所有的環境因素不變,所以我們在同一組硬體配置上安裝了Windows Vista、Windows 7兩套作業系統,分別打開10個檔案總管、5個IE、及1個Windows Media Player視窗,從工作管理員觀察閒置到負載之後的記憶體佔用量變化。
實際上這樣的對照方法有個瑕疵,就是兩套作業系統的程式結構不同,就算打開一模一樣的視窗數量,佔用的記憶體空間本來就會不同。但是剛好Windows 7也是大幅改善了資源佔用量,方便我們觀察同樣是WDDM 1.0驅動下,Windows 7比Vista省了多少。
XPDM vs. WDDM
在前面的WDDM支援硬體列表當中,如果你的顯示卡太舊排不進去,就會退回和XP一樣的XPDM(Windows XP Display Driver Model)傳統模式,也就是透明邊框消失的「Basic」主題。所以我們不用換裝爛卡,直接用同樣的配備「自廢武功」切換到Windows 7 Basic佈景主題的話,等於就是在XPDM模式下運作。
我們加入這個另類小撇步來驗證同樣配備下,XPDM和WDDM的資源佔用狀況。讀者在家裡也可以自己玩玩看。有趣的是,實驗結果WDDM根本不會比 XPDM省資源,尤其是在Vista的環境下會更嚴重,測試平台上僅有的2GB,開了一堆視窗就被耗掉將近1GB,連CPU使用率也跟著往上跳。而且操作 速度已經開始有遲鈍的跡象,不過有WDDM架構的加持,的確怎麼也不會發生背景冒白邊的錯誤畫面。
CPU | Intel Core 2 Duo E8500 |
|
記憶體 | Kingston HyperX DDR3 2GB |
|
主機板 | Asus P5Q3 Deluxe |
|
顯示卡 | 技嘉 GeForce GTS 250 | GeForce 6200 (WDDM 1.0 對照組) |
作業系統 | Windows Vista SP2 |
|
Windows 7 |
|
CPU佔用率變化
(單位:% ↓越小越好)
▲ 雖然啟用WDDM理論上會減輕CPU負擔,詭異的是實測當中CPU佔用率不減反增。
DWM佔用量變化
(單位:% ↓越小越好)
▲ 在Vista的負載測試中,DWM記憶體佔用量飆高到43MB,到了Windows 7的WDDM 1.1只用了9MB。
總記憶體佔用量變化
(單位:% ↓越小越好)
▲ 整體來說,Windows 7各種繪圖模式都比Vista節省記憶體,WDDM1.1模式的佔用量甚至比XPDM還低。
資源佔用不飆高
除了XPDM的數據有點意外, 實測結果證明,Windows 7的桌面繪圖要比Vista省資源得多。同樣是WDDM 1.0的記憶體佔用量多過XPDM,但Windows 7的數據平均比Vista少了21%左右。啟用了WDDM 1.1之後,Windows 7幾乎降到和XPDM相同的水準,甚至閒置時的記憶體佔用量還比XPDM低11%。
單從DWM程式的佔用量觀察,差距幅度會更大。有趣的是,當WDDM關閉,DWM的佔用量也會降到谷底,因為它會變得沒有作用,就算開一堆視窗也是沒事幹。但是在Vista的WDDM模式下開啟一堆視窗後,DWM佔用量馬上劇增60%。
▲ 雖然HP Mini 331用ION平台,不過卻只支援DirectX 9,跑Windows 7的3D加速桌面會比較吃資源。
DirectX 10的新價值
經過我們的實測發現,WDDM的確改善了XPDM會「破圖」的毛病,然而在Vista底下,它的效能並沒有達到最佳化,必須升級到Windows 7的WDDM 1.1架構,才能達成先進繪圖與資源佔用量之間的平衡。而前提是要有一張支援DirectX 10的顯示卡。
要注意的是,對於本身沒有顯示記憶體,共享系統記憶體的小筆電來說,還是可能發生資源不足的狀況。另外,如果選擇買Atom平台搭配的GMA 950顯示晶片,因為只有DirectX 9等級,享受不到新架構的優點。當然啦,如果連DirectX 9都不支援,就根本沒有3D加速桌面,直接打回2D模式。
紅綠顯卡一起來
另一個Vista改成WDDM架構後被拿掉的功能,就是多重顯示驅動程式。當你要用兩張顯示卡輸出到多重螢幕上,大家都得用同一個驅動程式才行,不然就得有其中一張失效。
這個功能到了Windows 7的WDDM 1.1又重出江湖,也就是說,只要有WDDM 1.1的驅動,你可以在系統裡面安裝兩張不同廠牌的顯示卡。對於想要推廣GPGPU的廠商來說,他們就可以把N牌顯示卡賣給已經有A牌產品的消費者,不必 輸出任何畫面,只拿來當通用運算處理器。
▲ 在Vista底下同時裝ATI和NVIDIA的顯示卡,會一直出現其中一張無法啟用的錯誤訊息。
▲ Windows 7底下即使其中一張卡沒有WDDM 1.1驅動, 還是可以同時啟用。