DirectX 10/SM4.0はWindows Vista専用。厳密なバージョンコントロールで亜流バージョンはなし
DirectX 10/SM4.0はWindows Vistaに独占的に供給される方針も発表され、Windows XP以前には提供されないこととなった。マイクロソフトはWindows Vista発売直前に「Windows XPのサポート延長」を発表したが、「DirectX 10/SM4.0がVista以降専用」という方針は変えていない。実質的にリアルタイム3Dグラフィックスの進化はWindows Vista以降に委ねられることとなった。
実は、このDirectX 10/SM4.0のWindows Vistaへの専用供給は、ドライバモデルの大幅改変が理由の1つになっている。
DirectXによって提供されてきたグラフィックサブシステムのDirect3Dは、複数のアプリケーションから同時利用されることを想定していなかった。Windows Vistaでは、そのGUIがDirect3D 9(Ex)によって実現されており、これとは別にDirect3D 10も実装されている。同時に複数の3Dアプリケーションを動作させたり、GPGPU用途への対応までを視野に入れると、古いシングルタスク前提の設計では都合が悪かったのだ。そこでWindows Vistaという大きな変革に乗じてリリースされるDirectX 10/SM4.0では、マルチスレッドに対応し、さらに動作安定度も向上させた新しいGPUドライバソフトウェアのアーキテクチャを採用した。それが「WDDM : Windows (Vista) Display Driver Model」だ。
WDDMではドライバソフトウェアがユーザーモードとカーネルモードに分かれ、アプリケーションからの不当なドライバ制御などでシステムクラッシュが起こりにくい設計としている。また、GPUのハードウェア的なマルチスレッド対応度に応じてWDDM 1.0/2.0/2.1というバージョン分けがなされ、WDDM 1.0はDirectX 9世代以前の旧設計のGPUをWDDM実装したもの、そしてあらかじめDirectX 10をターゲットにして開発されたGPUはWDDM 2.0以降の実装で提供される。1.0と2.0/2.1の違いは実質的にはマルチスレッドの対応レベルの違いを表しており、1.0はノンプリエンプティブ(*1)なマルチスレッドに対応し、2.0/2.1はプリエンプティブなマルチスレッド(*2)に対応する。2.0と2.1の違いは主にマルチスレッド粒度の違いにあり、2.1の方がより細かいターゲット単位でスレッド切り替えが行える。
(*1,*2)ノンプリエンプティブとは自発的にスレッド切り替えを行って実現するマルチスレッド実装方法。プリエンプティブはタイムシェアリングなどの手法を用い、自動的にスレッドを切り換えていくマルチスレッド実装方法。
DirectX 8に始まったプログラマブルシェーダだが、SM1.x/2.0/3.0というバージョン策定はあったものの、GPUメーカー毎の独自拡張がありどうしても最終的には混沌としてしまっていた。こうした亜流バージョンの混在は、ユーザーの製品選びを難しくしただけでなく、ソフトウェア業界からの反発も大きかった。そこでマイクロソフトではDirectX 10以降では、DirectX 9以前に存在したCaps(Capability Bits Test)と呼ばれる、そのグラフィックサブシステムのサポート機能を試験する仕組みを廃止し、厳密なバージョンコントロールを行う方策を打ち出している。これにより、DirectX 10世代/SM4.0対応を謳ったGPUは、DirectX 10/SM4.0の全ての機能を実現出来なくてはならないこととなった。DirectX 9/SM3.0時代のNVIDIA:VTFサポート、ATI:VTF非サポートのようなことはDirectX 10/SM4.0時代では起こらないということだ。
これは、リアルタイム3Dグラフィックスの基本機能の実装において一段落をしたことと、これから先の機能強化がひどく複雑高度で業界団体内での厳重な議論を経る必要が出てきたこととも関係が深い。
(トライゼット西川善司)