「DirectX 12」のプレビュー版が3月20日(現地時間)、米・サンフランシスコで開催された世界最大のゲーム開発者カンファレンス「Game Developers Conference 2014 (GDC 2014)」にて公開された(Yamashita氏による関連記事)。

また、3月上旬から公開されていたDirectX 12のティザーページは、「DirectX Developer Blog」の記事に切り替わるようになった。今回は同記事をベースにDirectX 12のポイントを確認していく。

DirectX 12発表直前のティザーページ。AMDやNVIDIA、Intelに加えてQualcommの名が連なる部分も興味深い

2015年に登場する「DirectX 12」とは

そもそもDirectXは、Windows 95時代にリリースされた「Windows Games SDK」がスタート地点である。当初はPCゲームを実行する環境として、GPUなどのハードウェアを直接制御可能なDOSが選ばれていた。「Config.sys」を編集し、DOSとWindows 95のいずれかを選ぶ環境を構築した経験をお持ちの方も少なくないだろう。このDOSとWindows 95の隙間を埋めるため、Windows 3.1時代にリリースしたグラフィックライブラリ「WinG」やDCI (Display Control Interface)をWindows 95用に作り直したのがWindows Games SDK、すなわち「DirectX 1.0」である。

次のバージョンでは、現在でも実装され続けている「Direct3D」をサポートし、その次に当たるDirectX 3.0は「DirectSound3D」を搭載した。このようにDirectXはWindows OSのマルチメディア機能を担うようになっていった。この他にもメディアストリーミングやゲームパッドの制御など多数のコンポーネントが搭載されるようになったものの、DirectDrawとDirect3Dのようにコンポーネント同士の統合や、役目を終えたコンポーネントの整理が続き、その勢いは衰えていく。

Windows Vistaに搭載されたDirect3D 9.0Exは、GUI環境を構築するWindows Aeroの描画システムとして利用され、Windows OSと融合するようになった。そして、Windows 8専用となるDirectX 11.1においては、Windows 7に対してバックポートしたのは一部機能のみ。そのためゲーム開発に詳しい一部のユーザーからは「DirectXはなくなる」と言われていたのだ。

DirectXの主な歴史

GPU性能を引き出すための方向転換

今回発表されたDiretctX 12は、2009年のDirectX 11.0以来のメジャーバージョンアップとなる。MicrosoftのプログラムマネージャーであるMatt Sandy氏は、DirectX 12について「Direct3Dを中心とした新たなAPIを導入した」と述べている。Direct3D 9.0Ex以降の流れと同じだが、GPUの性能をより引き出すための再構築を行ったそうだ。ハードウェア性能を直接引き出すため、DirectXが開発されたことを踏まえれば、DirectX 12は原点回帰したとみるのがわかりやすいだろう。

新たなDirect3D 12は複数のスレッドを効率よく処理するため、マルチスレッドスケーリングの改善とCPU使用率の軽減を行いつつ、APIの再整理を行うことで低レベルのHAL APIを提供する。つまり、GPUへのよりダイレクトなコントロールが可能になるということだ。その背景としてDirectXリリース当初は多くのGPUベンダーが存在し、APIの集合体であるDirectXはHALとしての役割が重要だった。しかし、現在のGPUベンダーはAMDとNVIDIA、Intelの3社に絞られているため、GPUを直接制御するAPIを用意するなど、ドラスティックな方向転換に至ったのである。

以下の図はFutureMarkのベンチマークツール「3DMark」実行時のオーバーヘッドをグラフ化したものだが、図上部のDirect3D 11と図下部のDirect3D 12では約50%もの開きが生じている。これはDirect3D 11がマルチスレッドスケーリングに対応しながらも、特定のスレッドに負荷が生じていたためだ。

「3DMark」実行時のDirect3D 11/12のオーバーヘッドをグラフ化したもの。約50%の改善を実現している

Direct3D 11の実行例。スレッド0のみ負荷がかかっていることが確認できる

Direct3D 12の実行例。マルチスレッドスケーリングの改善により、各スレッドにバランスよく負荷がかかる

Sandy氏は改善の理由として「パイプラインステートの描画」「ワークサブミッション」「リソースアクセス」の3点を挙げている。Direct3D 12では、これまで発生していた無駄な部分を見直し、効率的な処理を行うことでより高いパフォーマンスを引き出したそうだ。

もう一つの注目点は「モダンGPUのサポート」である。本来DirectXシリーズは最新のGPUを必要としてきたが、前述のようにDirect3D 11と同12は似て非なる構造のため、DirectX 12世代と呼ばれるGPUの登場を待つ必要はない。Sandy氏も「現在発売されているゲーマー向けPCの80%以上に搭載されたGPUであれば、DirectX 12用ゲームを楽しめる」と述べている。なお、DirectX 12は2015年のホリデーシーズンにリリースされる予定だが、Windows PhoneやXbox Oneへの提供も予定しているそうだ。

阿久津良和(Cactus)