Windows Display Driver Model

Windows Display Driver Modelとは、GPU用デバイスドライバの枠組みである。

2006年にリリースされたWindows Vistaで最初に導入され、Direct3D 9ExやDirect3D 10以降のDirect3Dは、WDDMに対応するよう設計されている。

1. 概要
-----

DirectX 9までのバージョンにおいては、DirectXランタイムおよびデバイスドライバ層の設計がシングルタスク前提となっており、同時に複数の3Dアプリケーションを安全かつ安定的に動作させることが困難になってきた。そのため、Windows Vistaのリリースに伴い大幅に設計を変更し、マルチスレッドに対応させ安定度も向上させるべく設計された新しいドライバモデルがWDDMである。WDDMおよび後述のDWMにより、Windows AeroではOSのデスクトップの描画自体にビデオカードやオンボードグラフィックスなどのGPUを活用したハードウェアアクセラレーションを使用することができ、結果としてCPUの負荷を軽減することができるようになる。

GPUの仮想化 GPUのスケジューリングやVRAMの割り当ての仮想化で、複数のアプリケーションが互いを意識することなく資源を扱えるようになっている。 ユーザーモードへの分離 WDDMではドライバソフトウェアがカーネルモードとユーザーモードに分かれ、不正なドライバ制御などでシステムがクラッシュを起こしにくい設計となっている。 GPUの回復 ディスプレイドライバがフリーズしたとしても、Windowsカーネルが検出し、OSの再起動無しにGPUを初期化して、ディスプレイの表示を復活できるようになっている。並列処理性能の高いGPUに汎用計算を高速実行させるGPGPUという取り組みがあり、プログラマブルシェーダーが登場した頃から試みられてきたが、長時間かかるタスクをGPUに実行させるとシステム全体を巻き込んで不安定化したりクラッシュしてしまったりする問題があった。CUDA、OpenCL、DirectComputeのようなGPGPU対応APIは、ドライバーがWDDMに対応することで、汎用計算のタスクによってGPUに過負荷がかかったとき、強制的にデバイスをリセット・再初期化してシステム全体の安定性を保つことができるようになる。

.NET Framework 3.0以降に含まれるWindows Presentation Foundation  はDirect3D 9ベースのハードウェアアクセラレーションに対応しているが、Vista以降ではWDDM対応のDirect3D 9Exが使われる。

2. バージョン
--------

2.1. XDDM/XPDM
--------------

WDDM発表後、従来のグラフィックスドライバの枠組みをWindows 2000 Display Driver Model  あるいはWindows XP Display Driver Model  と呼んで区別するようになった。

Windows Vista以降のOSでも引き続きXDDM/XPDMドライバを使用することは可能であるが、その場合、Desktop Window Manager 、ひいてはWindows Aeroテーマが使用できない。DWMがDirect3D 9Exを使用するためである。

Windows 8以降のOSでは、XDDM/XPDMはサポートされなくなり、使用できなくなった。WDDM 1.0以上が必須要件となった。また、Windows 8以降ではDWMが常に有効になる。

Windows 11では、WDDM 2.0以上が必須要件となった。

2.2. WDDM 1.0
-------------

Windows Vistaでサポートされた最初のWDDMである。

Windows 7以降のOSでも、引き続きWDDM 1.0のドライバを使用することは可能である。ただしその場合、WDDM 1.1以降で追加された機能は利用できない。

2.3. WDDM 1.1
-------------

Windows 7では、新バージョンのWDDM 1.1がサポートされた。

BitBltやClearTypeフォント描画などGDI描画への支援の追加
ビデオオーバーレイへの対応
OpenGL ICDのための強化
異なるベンダーのGPUの同時利用に対応テストおよびソースコード管理の複雑さを低減するため、WDDM 1.1ドライバーインターフェイスにはWindows Vistaとの後方互換性があり、WDDM 1.0しかサポートしていないWindows Vistaで使用することも可能である。またその場合、単純にWDDM 1.0ドライバーとして動作する。

2009年10月、Windows Vistaに対して「Windows Vista 用のプラットフォーム更新プログラム」が配信された。このアップデートによりWindows VistaでもWDDM 1.1へとアップデートされた。DirectX診断ツールでもWDDM 1.1の表記が確認できるが、GDIはソフトウェアレンダリングであるなど、一部の動作に差異はある。

2.4. WDDM 1.2
-------------

Windows 8では、WDDM 1.2がサポートされた。

ビデオメモリのより効率的な利用、Direct3D 11.1のサポートなどが追加されている。

WDDM 1.2には必須機能とオプション機能があるが、ドライバーがWDDM 1.2の必須機能をすべて実装していない場合、Windows Advanced Rasterization PlatformベースのMicrosoft Basic Display Driver  にフォールバックされる。

なお、Windows 7 SP1およびWindows Server 2008 R2 SP1に対して、「Windows 7 SP1 および Windows Server 2008 R2 SP1 用のプラットフォーム更新プログラム」を適用することでDirect3D 11.1やDirect2D 1.1などの一部機能が使えるようになるが、ドライバーモデルがWDDM 1.2対応になるわけではない。

2.5. WDDM 1.3
-------------

Windows 8.1では、WDDM 1.3がサポートされた。

タイル化されたリソースや、Direct3Dレンダリングパフォーマンスの改善、Direct3D 11.2のサポートなどが追加されている。

また、Miracastのサポートもオプションとして追加された。Windows 8.1やWindows 10でMiracast機能を利用するにはWDDM 1.3以降に対応したドライバが必要になる。

2.6. WDDM 2.0
-------------

Windows 10では、WDDM 2.0がサポートされた。

Direct3D 11.3およびDirect3D 12のサポートなどが追加されている。また、GpuMmuおよびIoMmuと呼ばれる2つの仮想アドレッシングモデルを持つGPU仮想メモリ機能などをサポートする。なお、この仮想メモリ機能はかつてWinHEC 2006にて"WDDM v2"の機能として発表されたが、実際にWDDM 1.0の後継としてWindows 7に搭載されたWDDM 1.1では実現していなかった。

2.7. WDDM 2.1
-------------

Windows 10 Anniversary Update  では、WDDM 2.1がサポートされた。

同時にDirect3D 12およびDXGI 1.5の更新も行なわれ、シェーダーモデル6.0のサポートDirect3D機能レベル12_0/12_1対応GPUが必要。}}、およびUWPアプリケーションにおける可変リフレッシュレートのサポートなどが追加される。

2.8. WDDM 2.2
-------------

Windows 10 Creators Update  では、WDDM 2.2がサポートされた。

Windows Mixed Realityの仮想/拡張/複合現実の立体視レンダリングのサポートなどが追加された。

2.9. WDDM 2.3
-------------

Windows 10 Fall Creators Update  では、WDDM 2.3がサポートされた。

2.10. WDDM 2.4
--------------

Windows 10 April 2018 Update  では、WDDM 2.4がサポートされた。

2.11. WDDM 2.5
--------------

Windows 10 October 2018 Update  では、WDDM 2.5がサポートされた。

2.12. WDDM 2.6
--------------

Windows 10 May 2019 Update  では、WDDM 2.6がサポートされた。

2.13. WDDM 2.7
--------------

Windows 10 May 2020 Update  では、WDDM 2.7がサポートされた。

3. DXGI
-------

DXGI  は、DirectX 10  以降で利用可能になる新しいグラフィックス共通基盤およびそのAPI集合である。カーネルモードドライバーやハードウェアとの通信といった低レベルのタスクを担当する。

DXGIは、アダプターやアウトプットといったデバイス概念を抽象化する。さらに、以前のバージョンのDirect3Dでもおなじみとなっているダブルバッファリングシステムは、スワップチェーンと呼ばれる概念に集約される。

DXGIを導入することで、変化の頻繁なDirect3D APIやDirect2D APIによる実際のレンダリング部分と、変化の緩やかなデバイス通信部分を分離して考えることが可能となる。また、DXGI層を経由したDirect3DとDirect2Dの相互運用が可能となる。そのほか、DirectComputeでは、DXGIアダプターの列挙によって、プライマリモニター出力に利用されるデフォルトアダプターだけでなく、セカンダリアダプターも統一的に分散コンピューティング用演算リソースとして活用することが可能である。

DXGIのバージョンは、WDDMおよびDirectXのバージョンとともにアップデートされている。例えばWDDM 1.1とDirectX 11をサポートするWindows 7には、DXGI 1.1ランタイムが導入される。Windows Vista SP2 Platform Updateでも、WDDM 1.1のサポートは完全ではないものの、DXGI 1.1ランタイムはDirectX 11ランタイムと同時にバックポートされているため、DXGI 1.1 API自体の使用は可能である。

Windows 8にてDirectX 11.1に対応するDXGI 1.2が導入された。Windows 7 SP1 Platform Updateでも、WDDMのバージョンは1.1のままだが、DXGI 1.2ランタイムはDirectX 11.1ランタイムと同時にバックポートされており、一部のAPI機能が使える。

DirectX 11.2に対応するのはDXGI 1.3 、そしてDirectX 11.3とDirectX 12に対応するのはDXGI 1.4  となる。

Windows 10 November 2015 Update  にてDirectX 11.4とともにDXGI 1.5が導入された。

Windows 10 Creators Update  にてDXGI 1.6が導入された。以降はDXGI自体のバージョン番号は1.6で据え置きのまま、Windows 10の機能更新リリースとともにDXGIにも機能が追加されている。

4. 脚注
-----

4.1. 注釈
-------

4.2. 出典
-------

5. 関連項目
-------

マイクロソフトのAPIとフレームワークの一覧
デバイスドライバ
Windows Driver Model
DirectX
Direct3D
Direct2D
Quartz
X Window System
ダイレクト・レンダリング・インフラストラクチャ

6. 外部リンク
--------

[1]
[2]
[3]