連載
» 2009年08月31日 00時00分 公開

Windows Insider用語解説:WDDM 1.1(Windows Display Driver Model 1.1)

Windows 7で採用される新しいディスプレイドライバモデルWDDM 1.1では、GPUを使った高速なGDI処理Direct2Dと、必要メモリサイズ量の削減を実現している。

[打越浩幸,デジタルアドバンテージ]
用語解説
Windows Server Insider


「用語解説」のインデックス

連載目次


 Windows 7およびWindows Server 2008 R2向けの新しいディスプレイ・ドライバの仕様。従来のWindows Vista/Windows Server 2008向けディスプレイ・ドライバであるWDDM 1(WDDM v1)を改良したもの(Windows XP/Windows Server 2003向けのものはXPDMと呼ばれる。関連記事参照)。

WDDM 1.1をサポートしたドライバの例
これはNVIDIAのGeForce 8600M GS用のWDDM 1.1ドライバの例。dxdiagコマンドを実行すると、このように表示される。
  (1)WDDM 1.1ドライバがインストールされていると、このように表示される。

 WDDM 1.1の特徴としては次のようなものがある。

  • Direct3D 10/11サポート
  • Direct2Dサポート
  • ビデオ再生サポート(ビデオ・オーバーレイ、DXVA-HD、コンテンツ暗号化用のAES128のサポート)
  • 高精細DPIサポート
  • マルチGPU(複数のグラフィックス・カード)サポート
  • Linked Display Adapter(複数をリンクさせて性能を向上させたグラフィックス・カード)サポート

 Windows 7/Windows Server 2008 R2ではWindows Vista/Windows Server 2008用のWDDMのドライバ(WDDM v1)も利用できるが、WDDM 1.1対応ドライバを利用することにより、Direct2Dによる高速な描画や、DWMの使用メモリ量の削減といったメリットがある。

Direct2Dによる描画サポート

 Direct2Dは、Direct3D上にGDI/GDI+ API(2Dの描画API。以下単にGDI)を実装したものである。Windows 7+WDDM 1.1環境ではDirect2Dを使うことにより、高速なGDI(Graphics Device Interface)処理を実現している。

Direct2D API
Direct2Dは、Direct3D上でGDI/GDI+処理を行うための新しいAPIである。Windows 7が呼び出すだけでなく、ユーザーが直接呼び出してもよい。下位のハードウェアの仕様により、Direct2Dの実装方法は何種類かある。GPUで処理することにより、高速なGDI処理が可能になる。
  (1)DirectX 11ハードウェアの場合は、ハードウェア(GPU)もしくはデバイス・ドライバ内のエミュレーションでDirect2Dをサポートする。ハードウェアで処理するのが最も高速になる。DXGI(DirectX Graphics Infrastructure)はDirectX(WDDMドライバ)を呼び出すためのインターフェイス。
  (2)DirectX 10ハードウェアの場合は、Windows 7側でDirect3D 10の機能だけを使ってDirect2Dを実装する。
  (3)DirectX 9ハードウェアの場合は、Windows 7側でDirect3D 10 Level 9の機能だけを使ってDirect2Dを実装する。Direct3D 10 Level 9は、Direct9ハードウェア上にDirectX 10のAPIを実装したもの。

 GDIは一般的なWindowsアプリケーションでよく使われる、直線や曲線、図形、文字の描画、スクロール(BitBlt処理)などを行うAPIである。3Dが普及する以前のグラフィックス・カードでは、このGDI処理をハードウェア・サポートして高速なウィンドウ・システムを実現していた。

 だがWindows VistaのAero Glass環境では、グラフィックス・カードの持つGPUの機能を駆使してデスクトップを3Dで描画するようになったため、ハードウェアの持つGDI処理機能は使われなくなっていた(先のコラム参照)。3Dと2Dのアクセラレータはメカニズムがまったく異なるため、共存できないからだ。代わりにWindows VistaのAero Glass環境では、完全にソフトウェア(CPU)によってGDI描画を処理をしている。

 このGDIをDirect3D上に実装し、再びハードウェア(GPU)上で処理することを可能にしたのがWDDM 1.1である。Windows 7ではDirect2Dを使うことにより、2Dの描画処理もグラフィックス・ドライバ+GPUで処理し、高速な描画を実現している。

DWMの使用メモリ量の削減

 DWMは、Aero Glassのデスクトップ画面を実現するためのウィンドウ・マネージャである。各アプリケーションの表示ウィンドウやデスクトップのパーツなどを3D空間上で合成し、2Dのデスクトップを実現している。枠や背景が透けて下のウィンドウが見えるのは、3D的に見ると、本当に後ろ側に配置されているからである。またフリップ3D機能([Windows]−[Tab]キーによるダイナミックな切り替え)は、3D空間中にウィンドウを斜めに重ねて配置することにより、ページをめくるようなアプリケーションの切り替えを実現している。

 Windows Vistaにおけるこの仕組みの実現方法は次の通りである。まずアプリケーションのウィンドウ・サイズに相当するバッファを1つ用意し、すべての描画をこのバッファに対して行う(GDI描画命令を呼び出すと、CPUが処理して、このバッファに書き込む)。このバッファは実際には各アプリケーションの共有メモリ・アドレス空間内に配置されている。次にこのバッファを(共有メモリとしてアクセスして)DWMが集め、グラフィックス・カード上にビットマップ・データとして転送する。最後にグラフィックス・カードがそれらのビットマップを3Dモデルにテキスチャ・マッピングする。これが最終的なデスクトップ画面となる。

 一度中間的なバッファを使って描画するのは、CPUが直接グラフィックス・カード上のバッファに書き込むのはコストが高いからだ(メイン・メモリへの書き込みと違い、時間がかかり、ペナルティが大きい)。

 Windows 7+WDDM 1.1環境では共有メモリ上のバッファを使わず、アプリケーションのGDI描画命令をDirect2D APIとして実行している。これにより、中間的なバッファを使わず、グラフィックス・カード上のバッファに直接書き込むことが可能になった。またメモリを節約しながらも、GPUによる高速なGDI処理を実現している。

 Windows Vista(もしくはWindows 7+WDDM 1)環境では、必ず中間的なウィンドウ・サイズに相当するバッファが必要となっていたが、これに必要なメモリ・サイズは決して少ないものではない。例えば1024×1024ドット程度のウィンドウ・サイズを持つアプリケーションの場合、必要なバッファ・サイズは約4Mbytesになる(1ピクセルあたり、RGB+アルファ・チャネルの4bytes)。このようなアプリケーションが50個あったとすると、これだけで4×50=200Mbytesとなる。Windows 7+WDDM 1.1ではこの200Mbytesが不要になり、それだけほかのアプリケーションで利用可能なメモリが増えることになる。実際にはDirect2Dのハードウェア・アクセラレーションによる恩恵もあり、Windows 7はWindows Vistaよりも軽快に利用できるようになっている。

「用語解説」のインデックス

用語解説

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。