新世代OS「Windows Vista」は,まずまず順調に売れていると伝えられている。だが,一般ユーザー向け製品の発売から1か月も経たないこのタイミングで,実際にアップグレードへ踏み切った人は,PCユーザー全体から見ればまだ多くないだろう。とくにゲーマーには「ゲームが動くのか」という不安からアップグレードに二の足を踏んでいる人が多いと思う。
結論からいえば,その判断は完全に正解なのだが,ここでは3回に分けて,Windows Vistaについての理解を踏まえつつ,「なぜ正解なのか」を考えてみたいと思う。
DirectX 10対応ゲームはすでにいくつかアナウンスされているが,現時点でリリースされたタイトルはない。画面は「Crysis」より
Windows Vista時代のDirectXといえば,「DirectX 10」である。4Gamerでは再三にわたって繰り返してきたから,耳にタコが出来ているかもしれないが,念のため復習しておくと,2007年2月時点で,DirectX 10にハードウェアレベルで対応したGPU(グラフィックスチップ)は「GeForce 8800」シリーズのみ。同時に,DirectX 10対応ゲームはまだ存在しない。「Windows VistaだからDirectX 10世代のGPU(グラフィックスチップ)が必須」というわけではないのだ。
とはいえ,ようやく製品版が出てきたところでもあり,実際に確かめてみる必要はありそうだ。というわけで下の画面は,Windows Vistaから,「DirectX診断ツール」(dxdiag)を実行したところである。
Windows Vista上でDirectX診断ツールを実行したところ。「DirectX 10」となっているが?
「DirectXバージョン」が「10」になっている! ……が,スクリーンショットの撮影に利用しているPCはGeForce 8800ではなく,「ATI Radeon X1950 Pro」を搭載しており,もちろんDirectX 10のハードウェアサポートは行われていない。実は,このDirectXバージョンというのは,あくまでPCにインストールされているDirectXのバージョンであり,3Dグラフィックスのアクセラレートを行う「Direct3D」のバージョンではないのだ。
続いて,DirectX診断ツールの「ディスプレイ1」タブを見てみよう。
「ドライバ」以下の「DDIバージョン」に「9Ex」と表示されている
右側にある「ドライバ」欄,「DDIバージョン」のところに「9Ex」という表示がある。DDIは「Device Driver Interface」の略で,ここでいう「Interface」(インタフェース)とは,Direct3DやDirect Drawとグラフィックスカード間のやりとりを指している。要するに「このグラフィックスカードがサポートするDirect3D/Direct Drawのバージョンは『9Ex』です」というわけだ。
DirectX 9 Exというのは,Windows VistaがサポートするDirectX 9の互換機能のこと。DirectX 9 Exは,「Windows XP」における「DirectX 9.0c」が持つDirect3Dの機能をほぼ完全にサポートする。これにより,Windows Vista上でもDirectX 9対応のゲームはほぼ問題なく動く理屈である。
もっとも「Windows XP上のDirectX 9と同じパフォーマンスが得られるか」という点に関してはいろいろと問題もある。では,どういう問題があるのか? それを理解するために,まずはWindows Vistaからサポートされた新しいグラフィックスドライバ「WDDM」について,その正体を明らかにしてみよう。
Windows Vistaでは,デバイスドライバ周りが大きく変えられているのだが,なかでも大きな変更の生じている部分がグラフィックスドライバだ。Windows Vistaでは,「WDDM」(Windows Display Driver Model)という新しいデバイスドライバモデルに準拠したグラフィックスドライバが必要になった。なぜ,従来の「WDM」(Windows Driver Model)からWDDMに切り替える必要があったのかというと,理由はいくつかある。

Windowsは(ごくまれにだが)ブルースクリーンになったりして停止してしまう。俗にいう「落ちる」というヤツだ。
本稿ではこの「落ちる」という“症状”を以後「ハングアップ」(hang up)と呼ぶが,現実的な話,Windowsは決してハングアップしやすいOSではない。Windows 9x時代からWindowsを利用してきた人なら,Windows 9x→Windows 2000,そしてWindows XPと世代を経るにつれ,不安定になったり落ちてしまったりという頻度が下がっていっているのを実感しているのではないだろうか。にもかかわらず,「落ちやすい」というイメージを持たれてしまう大きな原因に,ドライバの問題がある。
ユーザーが動かすアプリケーションソフトから“自分自身”を守るため,OSは,ゲームなどのアプリケーションソフトからはアクセスできないスペース(≒メモリ領域)で動いている。これを「カーネルスペース」(Kernel Space)といい,カーネルスペースで動作しているモードを「カーネルモード」(Kernel Mode)という。カーネルモードはCPUの動作モードでもあり,この動作モードのときにはCPUから,PCのすべてのリソース……たとえば物理メモリやグラフィックスカードをはじめとするさまざまなハードウェアにアクセスできる。
一方,ユーザーがアプリケーションを利用しているスペースは「ユーザースペース」(User Space)であり,ユーザースペースで動作するモードは「ユーザーモード」(User Mode)と呼ばれる。
ユーザーモードで可能なのは,「API」(Application Program Interface)と呼ばれるOS機能の一部の呼び出し(と,カーネルモードから許可されたメモリ領域の)呼び出しだけに限られている。アプリケーションソフトから,例えばグラフィックス担当のハードウェアに直接アクセスしようとしても「権限違反」として弾かれてしまう。
例えば,ユーザーの実行したゲームが一時的に不安定になったとしよう。このときゲームそのものは落ちる(=停止する)が,OSを巻き込んでハングアップしてしまうことは(そう頻繁には)起こらない。ゲームはユーザーモードで動いているため,OS本体が動くカーネルスペースには手出しできず,結果として,カーネルモードにあるOSそのものの動作を“壊して止める”ことはできないのである。
しかし,それでもゲームと一緒にOSがハングアップする経験をした読者はいると思う。理屈のうえではではゲーム(=ユーザーアプリケーション)からOSを落とせるはずはないのに,なぜかOSがハングアップしてしまった……そのとき原因はおそらく,グラフィックスカードのデバイスドライバにある。