Share via


Windows のグラフィックス API

Windows Vista には、Windows 98 用 Windows ドライバー モデル (WDM) の導入以降のビデオ ドライバーの設計における主要なリビジョンを表す、まったく新しいディスプレイ ドライバー モデルのサポートが含まれています。 この再設計されたモデルは、2D ラスター操作と GDI アプリケーションの世界から、固定機能グラフィックス ハードウェアを使用した 3D ゲームのビデオ ハードウェア、最後に、幅広い高性能グラフィックス アプリケーションをサポートする最新のプログラミング可能なグラフィックス処理装置 (GPU) の進化を反映しています。 Windows 7 と Windows 8は、追加のグラフィックス機能と API を提供することで、Windows Vista グラフィックス インフラストラクチャ上に構築されます。 この記事では、Windows グラフィックスの機能と API について説明します。

背景

Windows の初期からグラフィックスをプログラミングするための主な API は、グラフィカル デバイス インターフェイス (GDI) です。 この API は、多数の 2D 出力デバイスを処理するように設計されており、Windows ユーザー インターフェイス エクスペリエンスの基礎を形成しました。 DirectDraw と Direct3D は、現在の既存のハードウェアの拡張機能として全画面表示ゲームと 3D レンダリングをサポートする代替 API として導入されました。 GDI との対話は複雑でした。 従来の GDI 要素と Direct3D 要素の効果的な混在は、この設計によって制限されています。 XPDM と呼ばれる WDM の Windows XP バージョンは、GDI と Direct3D のサイド バイ サイドの性質を反映しています (図 1 を参照)。

図 1. Windows XP のグラフィックス API

xpdm

長年にわたり、3Dビデオカードのパワーは、ハードウェアの大部分がこの機能に専念するところまで劇的に成長してきました。 新しいドライバー モデルである Windows ディスプレイ ドライバー モデル (WDDM) は、GPU と Direct3D を最前線に持ち込み、GDI の 2D 世界と最新のプログラミング可能な GPU の機能をシームレスに融合させる、まったく新しいエクスペリエンスである 3D デスクトップの作成を可能にします。 WDDM を使用すると、ビデオ ハードウェアは Direct3D によって完全に駆動され、他のすべてのグラフィックス インターフェイスは、新しい Direct3D 中心のドライバー モデルを介してビデオ ハードウェアと通信します (図 2 を参照)。

図 2. Windows Vista のグラフィックス API

Wddm

WDDM の詳細については、MSDN の 「Windows Vista ディスプレイ ドライバー モデル (WDDM) 設計ガイド」 を参照してください。

Direct3D 9

DirectX のバージョン 9 は、2002 年に Windows 用に初めてリリースされ、その後の更新プログラムは 2003 年と 2004 年にリリースされました。 この API は、DirectX テクノロジの 10 年間の進化、Direct3D 用のより強力なシェーダー プログラミング モデルの導入、数千の出荷タイトルに支えられた成熟度を表します。 Direct3D 9 は、Windows Vista の主要なグラフィックス インターフェイスです。 これは、既存のハードウェアと Windows リリースの広い範囲で実行する必要がある 3D ゲームやアプリケーションの作成に使用する理想的な API です。 新しいドライバー モデルの詳細は、Direct3D 9 インターフェイスを使用するアプリケーションでは非表示になっていますが、バックグラウンドでは、オペレーティング システムは、GPU の真のマルチタスク、より効率的なリソース管理、堅牢なパフォーマンスを提供する新機能を最大限に活用しています。

古いバージョンの Windows との完全な互換性を確保するには、新しい Windows Vista ディスプレイ ドライバー モデルでも、古いドライバー モデルの一部の変わり目をエミュレートする必要があります。 たとえば、全画面表示アプリケーションでフォーカスが失われた場合、新しいドライバー モデルがリソースをデバイス コンテキストから削除せずに透過的に処理する場合でも、ビデオ メモリ (VRAM) 内のすべてのリソースが失われたと想定し、アンマネージド リソースとして作成したリソースを再読み込みする必要があります。 マネージド リソースの種類と既定のリソースの種類の概念も、古いドライバー モデルに固有です。 もう 1 つの例は、新しいドライバー モデルでほぼ無制限の仮想ビデオ メモリを提供できる場合でも、使用可能な VRAM の量を超えるアンマネージド (既定のプール) リソースを割り当てるときにエラーが予想される場合です。 これらの要件により、Windows Vista で実行されている Direct3D アプリケーションでは、引き続きこれらのエラー状態が発生します。 そのため、基本的な Direct3D 9 インターフェイスを使用して、新しいドライバー モデルの一部の機能を完全に使用する機能が制限されます。

Windows Vista に付属する新しいシステムには WDDM ドライバー付きのビデオ カードが含まれ、多くの一般的なビデオ カード用の新しいドライバーがボックスに含まれますが、Windows Vista では引き続きアップグレードや企業エディションに古い XPDM ドライバーを使用する機能がサポートされています。 古いドライバー モデルを使用するシステムでは、Direct3D 9 以前のインターフェイスを使用する必要があり、グラフィックス システムの操作は Windows XP と非常によく似ています (図 1)。 アプリケーションで Direct3D 9Ex、Direct3D 10、およびそれ以降のバージョンを使用するには、WDDM が必要です。

Direct3D 9Ex

Direct3D 9Ex インターフェイスは、仮想化されたリソースの割り当て、新しい紛失したデバイス セマンティクス、および Windows Vista での実行中に使用可能なその他の新機能を公開する標準の Direct3D 9 API のわずかな拡張機能へのアクセスを提供します。 この拡張オブジェクトを作成することで、Direct3D 9 API は新しいセマンティクスを使用するため、アプリケーションでは、新しい種類の条件に対してリソースの作成、管理、エラー処理に異なるロジック (したがって異なるコード パス) を使用する必要があります。 この API は Windows Vista でのみ使用でき、WDDM ドライバーが必要です。 Direct3D 9Ex では Direct3D 9 とは別の API とドライバー コード パスが使用されるため、この API をサポートするには、アプリケーションに追加のテスト ケースが必要です。

新しい Direct3D 9Ex API を作成する主な理由は、既存の Direct3D アプリケーションとの互換性を維持しながら、WDDM の新機能へのフル アクセスを許可することでした。 新しい 3D デスクトップと多くの Windows Vista 固有のアプリケーションでは、このバージョンの Direct3D 9 を使用していますが、古い XPDM ドライバーで実行する場合は機能しません。 Direct3D 9Ex API は、WDDM のサポートがないため、古いバージョンの Windows では表示されないため、標準の Direct3D 9 インターフェイスは、はるかに広範なシステム セットをカバーします。 次世代のビデオ ハードウェアを利用できる高性能アプリケーションの場合、Direct3D のまったく新しいバージョン 10 は、Direct3D 9Ex によって公開されない多くの新機能を提供します。 その結果、ゲームやその他のほとんどのアプリケーションでは、Direct3D 9 または Direct3D 10 が推奨される API です。

Note

DirectX SDK では、Direct3D 9Ex インターフェイスのサンプル、ヘッダー、またはライブラリは提供されません。 MSDN ライブラリと Windows SDK (旧称プラットフォーム SDK) には、使用可能なドキュメント、ヘッダー、およびライブラリが含まれています。

 

Direct3D 9Ex の詳細については、「 DirectX for Windows Vista on MDSN」を参照してください。

Direct3D 10

新しい Windows Vista ドライバー モデルと次世代ハードウェアの可能性を十分に実現するために、Direct3D API のまったく新しいバージョンが作成されました。 WDDM は既存のグラフィックス システムのパフォーマンスに関する制限の一部を排除しますが、Direct3D 10 は、既存の Direct3D API の設計上のボトルネックを取り除くことでさらに進み、GPU のプログラミング作業を大幅に簡略化します。

新しい API は、いくつかの固定関数の側面を除くすべてを完全に排除し、それらをプログラム可能なコンストラクトに置き換え、内部実装を大幅に合理化します。 以前のバージョンの Direct3D では、数百の機能ビットが完全に排除され、特定のリソース形式に対していくつかのオプションの使用シナリオしかない、明確に定義された包括的な機能セットに置き換えられました。 CPU を集中的に使用するリソースの作成と検証で、新しい API に明示的なセマンティクスが追加されました。 これにより、より予測可能なパフォーマンス動作が可能になり、描画ごとのオーバーヘッドが大幅に削減されます。 リソースは、さまざまな段階で効率的に使用できるように複数のフォームに再構成でき、機能セットによって、形式の使用シナリオに対する制限がはるかに少なくなります。 新しいブロック圧縮法線マップ テクスチャ形式もあります。

新しい API では、シェーダー定数とデバイスの状態は明示的なリソースであるため、ハードウェアでのキャッシュの効率が大幅に高く、ドライバーの検証が大幅に簡素化されます。 プログラム可能なシェーダー モデルは、頂点シェーダーとピクセル シェーダーの両方で統合され、明確に定義された計算モデルと演算子セットを使用して表現力を高めます。 また、頂点シェーダー ステージの後にプリミティブを操作するために、新しいジオメトリ シェーダー ステージが追加されました。 パイプラインの頂点シェーダー ステージとジオメトリ シェーダー ステージでの GPU の作業の結果をビデオ RAM にストリーミングして再利用できるため、CPU の操作を最小限に抑えて非常に複雑なマルチパス GPU 操作が可能になります。

これらのすべての機能強化により、次世代グラフィックス テクノロジが有効になり、アプリケーションの機能が GPU にオフロード動作するように拡張されます。 オフロードを使用すると、GPU ベースのより複雑な文字スキニング、高速モーフィング手法、シャドウ ボリュームの生成と浮き出し、GPU ベースのパーティクルおよび物理システム、より複雑な材料を効率的な大描画バッチ、手順の詳細化、リアルタイムのレイトレース変位マッピング、シングルパス キューブ マップ生成、およびより多くの手法に組み合わせて、より複雑なアプリケーションの CPU リソースを解放できます。

Direct3D 10 でこのレベルのイノベーションを提供するために、古いハードウェアを新しいインターフェイスの部分的な実装として表現することはできません。 ビデオ カードは、すべての新機能をサポートするか、Direct3D 10 対応のカードではありません。 したがって、Direct3D 9 は、不足している機能ビットと使用制限が多数ある DirectX7 時代のハードウェアを駆動する可能性があります。Direct3D 10 は、新世代のビデオ カードでのみ機能します。 アプリケーションで古いビデオ ハードウェアをサポートするには、Direct3D 9 インターフェイスもサポートする必要があります。 Direct3D の将来のバージョンはバージョン 10 でビルドされ、新しいバージョンの API に拡張され、Direct3D 10 機能の厳密なスーパーセットが確保されます。

Direct3D 10 の詳細については、「 Direct3D 10」を参照してください。

Direct3D 10.1

Windows Vista Service Pack 1 は Direct3D 10 API と Direct3D 10.1 を拡張します。これにより、Direct3D 10.1 をサポートするビデオ カードの新しいハードウェア機能をサポートするために、オプションのインターフェイスと追加のシェーダー モデルが追加されます。 Direct3D 10.1 をサポートできるすべてのハードウェアは、Direct3D 10 のすべての機能も完全にサポートしています。ゲーム開発者は、使用可能な場合は Direct3D 10.1 の追加機能を利用できます。

Note

Direct3D 10.1 は、Windows 7 デスクトップで使用されるグラフィックス API です。

 

Note

Windows 7 と Windows Vista 更新プログラムは、DXGI 1.1、10level9 機能レベル、および WARP10 デバイスのサポートを既存の Direct3D 10.1 API に追加します。

 

Direct3D 11

Windows 7 では、Direct3D 10.1 API の設計に基づいて構築された Direct3D Direct3D 11 の新しいリビジョンがサポートされています。 この API の新機能には、マルチスレッド レンダリングとリソースの作成、コンピューティング シェーダー、10level9 機能レベルと WARP10 ソフトウェア レンダリング デバイスのサポート、ハル & ドメイン シェーダーを使用したテセレーション、BC6H および BC7 テクスチャ圧縮形式、シェーダー モデル 5.0、動的シェーダー リンケージなどの新しい Direct3D 11 クラスハードウェア機能が含まれます。 新しい API では、既存の Direct3D 10 および 10.1 クラスのビデオ カード、機能サポートが制限された 10level9 機能レベルを介した一部の Direct3D 9 カード、最新世代の Direct3D 11 クラス ビデオ カードを使用できます。

Windows 7 には、Direct3D 11 API に加えて、DXGI 1.1、Direct2D、DirectWrite、WDDM 1.1 ドライバーのサポートが含まれています。

Note

Direct3D 11 および関連 API は、Windows Vista の更新プログラムとしても使用できます ( 「最新バージョンの DirectX をインストールする方法」を参照してください)。

 

Direct3D 11.1

Windows 8では、Direct3D 11 API を Direct3D 11.1 で拡張します。 Direct3D 11.1 では、 レベル 11、10_x、および9_xサポートを備えた既存のすべてのハードウェアと、新しい 11_1 機能レベルがサポートされています。

Direct3D 11.1 API に加えて、Windows 8には DXGI 1.2、Direct2Dデバイス コンテキスト、WDDM 1.2 ドライバーのサポートが含まれています。

Note

Windows ストア アプリで DirectX を使用して 3D グラフィックスをプログラムする場合は、Direct3D 11.1 API を使用できます。 DirectX を使用した 3D グラフィックスのプログラミングの詳細については、「DirectX を使用した 3D グラフィックスの概要」を参照してください。

 

Windows 7 のプラットフォーム更新プログラム: Windows 7 または Windows Server 2008 R2 の Direct3D 11.1 API では、 Windows 7 用プラットフォーム更新プログラム がインストールされている部分サポートを利用できます。 Windows 7 のプラットフォーム更新プログラムの詳細については、「Windows 7 用プラットフォーム更新プログラム」を参照してください。

Opengl

Windows Vista、Windows 7、Windows 8は、OpenGL 用 Windows XP と同じサポートを提供します。これにより、ビデオ カードが製造する OpenGL 用のインストール可能なクライアント ドライバー (ICD) を提供し、ハードウェア高速サポートを提供できます。 このような ICD の新しいバージョンは、Windows Vista、Windows 7、またはWindows 8を完全にサポートするために必要であることに注意してください。 ICD がインストールされていない場合、ほとんどの場合、システムは OpenGL v1.1 ソフトウェア 層にフォールバックします。

アプリケーションの互換性、GDI、および以前のバージョンの Direct3D

Windows Vista、Windows 7、Windows 8 グラフィックス システムは、既存のシステムを引き続きサポートしながら、新しいテクノロジを有効にするために、幅広いハードウェアと使用シナリオをサポートするように設計されています。 GDI、GDI+、以前のバージョンの Direct3D などの既存のグラフィックス インターフェイスは、引き続き Windows Vista と Windows 7 で動作しますが、可能な場合は内部的に再マップされます。 つまり、既存の Windows アプリケーションの大部分は引き続き動作します。

Windows Vista、Windows 7、Windows 8は、引き続き、Windows XP と同じ Direct3D インターフェイスと DirectDraw インターフェイスをサポートし続け、DirectX のバージョン 3 に戻ります (Direct3D の保持モードは除きますが、削除されています)。 Windows XP Professional x64 Edition と同様に、新しいバージョンの Windows 上の 64 ビット ネイティブ アプリケーションは、Direct3D9、DirectDraw7、またはそれ以降のインターフェイスに制限されます。 高パフォーマンス アプリケーションでは、Direct3D 9 以降を使用して、ハードウェア機能に最も近い一致が得られるようにする必要があります。

推奨事項

グラフィカル アプリケーションの API を選択する場合は、次の推奨事項を考慮してください。

  • アプリケーションで Windows XP または以前のバージョンの Windows をサポートする必要がある場合は、Direct3D 9 を使用します。
  • XPDM ドライバーで実行されている Windows Vista または Windows 7 をサポートする場合は、Direct3D 9 を使用します。 Direct3D 10 以上のビデオ ハードウェアがない Windows Vista または Windows 7 システムの場合は、既存の Windows XP Direct3D 9 コード パスを使用するか、Direct3D 10.1 または Direct3D 11 API を使用して 10level9 機能レベルを使用するかを選択できます。
  • Direct3D 11 を使用して、Windows Vista、Windows 7、Windows 8で次世代のビデオ ハードウェアを活用します。 Windows ストア アプリでは、Direct3D 11 以降を使用する必要があります。