再びGDIアクセラレーションをサポートするWDDM v1.1

各Aero機能によってユーザビリティが向上したWindows Aeroだが、ここで技術的な背景もチェックしてみよう。最初にWindows Aeroが搭載されたWindows Vistaでは、描画システムを従来のGDI(Graphics Device Interface)/GDI+から、DWM(Desktop Window Manager)に変更し、様々な視覚効果を実現していた。当時はMIL(Media Integration Layer)という、WPF(Windows Presentation Foundation)とDirect 3Dの中間に位置する機能で、処理レイヤーに対して描画の指示を直接出すAPIを使用していた。Windows XPまで用いられていたGDIアクセラレーション機能を廃し、新世代へ移行するにはよいアイディアだったのかも知れない。

だが現実的には、メモリ使用量の肥大化につながると同時に、GDI描画を必要とするアプリケーションのパフォーマンスが低下し、Windows Vistaの悪評につながってしまったのは、読者がご存じのとおりである。Microsoftの開発者にインタビューを行なったわけではないので推測の域を超えないが、MicrosoftはWindows VistaにおけるGDIを下位互換性として残しておけばよい、と軽視していたのではないだろうか。過去のWindows OSに対する互換性を高く保つ同社らしくない発想だ。

このGDI問題に大きく関係するのがグラフィックスドライバの存在である。Windows Vistaでは、それまでのXDDM(もしくはXPDM)から、Direct3D 9Ex/10と連動するWDDM v1(Windows Display Driver Model)に変更された。このWDDM v1はGDI関連機能をサポートしておらず、アプリケーションがGDI機能を使用しようとしても、そもそもグラフィックスドライバ側で受け付けるルートが存在しないため、前述のパフォーマンスダウンにつながるのである。

それでは、Windows 7における改善ポイントに移ろう。前述のようにWDDMでは、GDI関連機能を呼び出す仕組みを廃止したが、Windows 7での使用が推奨されるWDDM v1.1では、Direct 3D 10.1 APIを前提とし、GDIハードウェアアクセラレーションを新たな形で実装した。Windows Vistaの場合、GDIアプリケーションによる描画はメモリ上に展開された内容をグラフィックスメモリに転送し、デスクトップコンポジションへの描画が行なわれている。一方Windows 7の場合、GDIハードウェアアクセラレーションは、メモリ上の展開を行なわずにWDDMが処理を行なうという仕組みに変更することで、メモリ負荷が削減する仕組みになった(図199~200)。

図199: WinHEC 2008のプレゼン資料。Windows VistaにおけるGDIアプリケーションの動作を示している

図200: こちらはWindows 7におけるGDIアプリケーションの動作は簡略化され、WDDMを経由してデスクトップコンポジションへの描画が行なわれる

WDDM v1.1が持つもう1つの利点がメモリ管理。Microsoftのレポートを読むと、50個のウィンドウを開いたWindows Vista(WDDM v1)では、300MBものメモリを消費するものの、Windows 7(WDDM v1.1)では開いたウィンドウ数に関係なく50MBを切る一定消費に留まると言う。つまり、Windows 7を導入してもお使いのグラフィックスドライバがWDDM v1.0仕様の場合、各恩恵を受けられないということになるので注意して欲しい。これらの内部変更がWindows 7の軽快さとWindows Aeroによる操作を支えているのだろう(図201~203)。

図201: 同じくWinHEC 2008のプレゼン資料から。フォルダを開いた際のメモリ消費量をWDDM v1とWDDM v1.1環境で比較したものだ。Windows 7の推奨グラフィックスドライバであるWDDM v1.1の場合、メモリ消費量は一定である

図202: ご覧のようにWDDM 1.0(v1)と表示されている場合、メモリ管理の変更による恩恵は受けられない

図203: WDDM 1.1仕様のグラフィックスドライバでも、バージョンが表示されないものもある