Direct3D 11 への移行
このセクションでは、旧バージョンの Direct3D から Direct3D 11 に移行する方法について説明します。
- Direct3D 9 から Direct3D 11
- Direct3D 10 から Direct3D 11
- Direct3D 10.1 から Direct3D 11
- Direct3D 11 の新機能
- DirectX 11.1 の新機能
- DirectX 11.2 の新機能
- 関連トピック
Direct3D 9 から Direct3D 11
Direct3D 11 API は、Direct3D 10 と 10.1 に組み込まれたインフラストラクチャ上の改善を構築しています。 Direct3D 9 から Direct3D 11 への移行は、Direct3D 9 から Direct3D 10 への移行に類似しています。 この取り組みの主な課題事項を次に示します。
- HLSL のみに作成されたプログラミング可能なシェーダー (D3DX9 ではなく D3DCompiler 経由でコンパイル) 用の固定機能パイプラインの使用をすべて削除。
- 個々の状態トグルではなく、不変のオブジェクトに基づく状態の管理。
- 頂点バッファー入力レイアウトとシェーダー シグネチャの厳密なリンケージ要件に準拠するための更新。
- シェーダー リソース ビューをすべてのテクスチャ リソースに関連付け。
- すべての 24 ビット カラー形式 (8/8/8)を削除するなどすべての画像コンテンツを DXGI_FORMAT にマッピングし、ほとんどのシナリオでの厳密な RGB カラー順序をを適用。
- グローバルの一定状態使用状況をいくつかの小さく、より効率的に更新した一定バッファーに分割。
Direct3D 9 から Direct3D 10 への移行の詳細については、「Direct3D 9 から Direct3D 10 への考慮事項」を参照してください。
Direct3D 10 から Direct3D 11
Direct3D 10 または 10.1 API を使用するために記述された変換プログラムは、Direct3D 11 が既存の API の拡張機能であるため、簡単なプロセスです。 唯一の小さな例外を除き (以下に示すモノクロ テキスト フィルタリング)、Direct3D 10/10.1 のすべてのメソッドと機能性は Direct3D 11 で利用できます。 次のアウトラインでは、既存のコードの更新に便利な 2 つの API の違いについて説明します。 ここでの主な違いには次のようなものがあります。
- レンダリング操作 (描画、状態など) はデバイス インターフェイスの一部ではなくなりましたが、代わりにリソース Map/Unmap メソッドとデバイス クエリ メソッドを伴う新しい DeviceContext インターフェイスの一部となります。
- Direct3D 11 には、Direct3D 10.0 から 10.1 にかけて導入されたすべての機能強化と変更が含まれています
列挙と定義
Direct3D 10 | Direct3D 11 |
---|---|
DXGI_FORMAT | DXGI_FORMAT複数の新しい DXGI 形式が定義されました。 |
D3D10_CREATE_DEVICE_SWITCH_TO_REF | D3D11_CREATE_DEVICE_SWITCH_TO_REFSwitch-to-ref 機能は Direct3D 11 ではサポートされません。 |
D3D10_DRIVER_TYPE | D3D_DRIVER_TYPE D3D_DRIVER_TYPE の列挙識別子は、D3D10_DRIVER_TYPEの識別子から再定義されていることに注意してください。 そのため、リテラル番号の代わりに列挙型識別子を使用する必要があります。 D3D_DRIVER_TYPE は D3Dcommon.h で定義されています。 |
D3D10_RESOURCE_MISC_FLAG | D3D11_RESOURCE_MISC_FLAGこれらのフラグの多くは再定義されているため、リテラル番号の代わりに必ず列挙型識別子を使用してください。 |
D3D10_FILTER | D3D11_FILTERDirect3D 11 ではテキスト フィルター D3D10_FILTER_TEXT_1BIT が削除されています。 DirectWrite を参照してください。 |
D3D10_COUNTER | D3D11_COUNTERベンダーに依存しないカウンターはほとんどサポートされることがないため、Direct3D 11 では削除されました。 |
D3D10_x | D3D11_x 多くの列挙型と定義は、同様であるか、または制限がより大きいか、あるいは値が追加されています。 |
構造体
Direct3D 10 | Direct3D 11 |
---|---|
D3D10_SO_DECLARATION_ENTRY | D3D11_SO_DECLARATION_ENTRYストリームを追加します。 |
D3D10_BLEND_DESC | D3D11_BLEND_DESCレンダー ターゲット ごとのブレンド状態を提供するために、この構造は 10 から 10.1 にかけて大幅に変更されたことに注意してください |
D3D10_BUFFER_DESC | D3D11_BUFFER_DESCコンピューティング シェーダー リソースで使用する StructureByteStride を追加します |
D3D10_SHADER_RESOURCE_VIEW_DESC | D3D11_SHADER_RESOURCE_VIEW_DESCこの構造には、10.1 に加えられた追加の共用体メンバーがあります |
D3D10_DEPTH_STENCIL_VIEW_DESC | D3D11_DEPTH_STENCIL_VIEW_DESC新しい Flags メンバーがあります。 |
D3D10_QUERY_DATA_PIPELINE_STATISTICS | D3D11_QUERY_DATA_PIPELINE_STATISTICS複数の新しいシェーダー ステージ カウンターを追加します。 |
D3D10_x | D3D11_x 多くの構造は、2 つの API 間で同様のものです。 |
インターフェイス
Direct3D 10 | Direct3D 11 |
---|---|
ID3D10Device | ID3D11DeviceとID3D11DeviceContext デバイス インターフェイスは、これら 2 つの部分に分割されました。 迅速な移行を行うため、ID3D11Device::GetImmediateContext を使用できます。 「ID3D10Device::GetTextFilterSize」メソッドと「SetTextFilerSize」メソッドは存在しなくなりました。 DirectWrite を参照してください。 Create*Shader には、ID3D11ClassLinkage に対する追加オプションのパラメータがあります。 *SetShader と *GetShader には、ID3D11ClassInstance に対する追加オプションのパラメータがあります。 CreateGeometryShaderWithStreamOutput には複数の出力ストリーム ストライドの配列とカウントがあります。 CreateGeometryShaderWithStreamOutput の NumEntries パラメーターの制限は、Direct3D 11 で D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT に増加しました。 |
ID3D10Buffer | ID3D11Buffer |
ID3D10SwitchToRef | ID3D11SwitchToRefSwitch-to-ref 機能は、Direct3D 11 ではサポートされていません。 |
ID3D10Texture1D | ID3D11Texture1D |
ID3D10Texture2D | ID3D11Texture2D |
ID3D10Texture3D | ID3D11Texture3DMap メソッドと Unmap メソッドは ID3D11DeviceContext に移動し、すべての Map メソッドは void** の代わりに D3D11_MAPPED_SUBRESOURCE を使用します。 |
ID3D10Asynchronous | ID3D11AsynchronousBegin、End、および GetData はID3D11DeviceContext に移動しました。 |
ID3D10x | ID3D11x 多くのインターフェイスは、2 つの API で同様です。 |
他の関連テクノロジー
10/10.1 ソリューション | 11 ソリューション |
---|---|
HLSL コンパイラ (D3D10Compile*、D3DX10Compile*) およびシェーダー リフレクション API | D3DCompiler (D3DCompiler.h を参照) 注: Windows ストア アプリでは、D3DCompiler API は、デプロイではなく開発用のみにサポートされています。 |
Effects 10 | Effects 11 は、オンラインで共有ソースとして使用できます。 注: このソリューションは実行時 (デプロイ) に D3DCompiler API を必要とするため、Windows ストア アプリには適していません。 |
D3DX9/D3DX10 計算 | DirectXMath |
D3DX10 | 従来の DirectX SDK DirectXTex、DirectXTK、DirectXMesh の D3DX11 は、従来の D3DX10 および D3DX11 ライブラリにおける多くのテクノロジに代わる機能を提供します。 Direct2D と DirectWrite では、スタイル設定された線とフォントをレンダリングするためにクオリティの高いサポートが提供されます。 |
従来の DirectX SDK の詳細については、「DirectX SDK はどこにありますか」を参照してください。
Direct3D 10.1 から Direct3D 11
Direct3D 10.1 は Direct3D 10 インターフェイスの拡張機能であり、Direct3D 10.1 のすべての機能は Direct3D 11 で使用できます。 10.1 から 11 への移植のほとんどは、10 から 11 への移行について上記で取り上げました。
列挙と定義
Direct3D 10.1 | Direct3D 11 |
---|---|
D3D10_FEATURE_LEVEL1 | D3D_FEATURE_LEVELこれは同様のものですが、D3DCommon.h で定義され、また 11 クラス ハードウェアには D3D_FEATURE_LEVEL_11_0、10level9 には D3D_FEATURE_LEVEL_9_1、D3D_FEATURE_LEVEL_9_2、およびD3D_FEATURE_LEVEL_9_3 が追加されています (D3D10_FEATURE_LEVEL_9_1、D3D10_FEATURE_LEVEL_9_2、D3D10_FEATURE_LEVEL_9_3 も 10.1 から d3d10_1.h 向けに追加されました) |
構造体
Direct3D 10.1 | Direct3D 11 |
---|---|
D3D10_BLEND_DESC1 | D3D11_BLEND_DESC 11 バージョンは 10.1 と同様です。 |
D3D10_SHADER_RESOURCE_VIEW_DESC1 | D3D11_SHADER_RESOURCE_VIEW_DESC 11 バージョンは 10.1 と同様です。 |
インターフェイス
Direct3D 10.1 | Direct3D 11 |
---|---|
ID3D10Device1 | ID3D11DeviceとID3D11DeviceContext デバイス インターフェイスは、これら 2 つの部分に分割されました。 迅速な移行を行うため、ID3D11Device::GetImmediateContext を使用できます。 「ID3D10Device::GetTextFilterSize」メソッドと「SetTextFilerSize」メソッドは存在しなくなりました。 DirectWrite を参照してください。 Create*Shader には、ID3D11ClassLinkage に対する追加オプションのパラメータがあります。 *SetShader と *GetShader には、ID3D11ClassInstance に対する追加オプションのパラメータがあります。 CreateGeometryShaderWithStreamOutput には複数の出力ストリーム ストライドの配列とカウントがあります。 CreateGeometryShaderWithStreamOutput の NumEntries パラメーターの制限は、Direct3D 11 で D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT に増加しました。 |
ID3D10BlendState1 | ID3D11BlendState |
ID3D10ShaderResourceView1 | ID3D11ShaderResourceView |
Direct3D 11 の新機能
Direct3D 11 API を使用するようにコードを更新したらと、考慮すべき多くの新機能があります。
- コマンド リストと複数のコンテキストを使用したマルチスレッド レンダリング
- 計算シェーダーを使用した高度なアルゴリズムの実装 (4.0、4.1、または 5.0 シェーダー プロファイルを使用)
- 新しい 11 クラスハードウェア機能:
- HLSL シェーダー モデル 5.0
- 動的シェーダー リンク
- ハル シェーダーとドメイン シェーダーを介したテッセレーション
- 新しいブロック圧縮形式: HDR 画像の場合は BC6H、より高度なフィデリティ規格画像の場合は BC7
- Windows Vista および Windows 7 でサポートされるローエンドの動画ハードウェア向けの DIrect3D 11 API により、多くのシェーダー モデル 2.0 デバイス およびシェーダー モデル 3.0 デバイスでのレンダリングには 10level9 テクノロジーを使用します。
- WARP ソフトウェア レンダリング デバイスの活用。
DirectX 11.1 の新機能
Windows 8 には、Direct3D 11.1、DXGI 1.2、Windows ディスプレイ ドライバー モデル (WDDM) 1.2、機能レベル 11.1 ハードウェア、Direct2D デバイス コンテキスト、その他の機能強化など、DirectX グラフィックス コードを実装する際に考慮すべき DirectX グラフィックス拡張機能が含まれています。
Direct3D 11.1 の部分的なサポートは、Windows 7 および Windows 7 のプラットフォーム更新 (Windows 7 のプラットフォーム更新を通じて利用可能) で使用できます。
DirectX 11.2 の新機能
Windows 8.1 には Direct3D 11.2、DXGI 1.3、および他の改善事項が含まれています。