Direct3D 11 への移行

このセクションでは、旧バージョンの Direct3D から Direct3D 11 に移行する方法について説明します。

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_TYPED3D_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 ID3D11DeviceID3D11DeviceContext
デバイス インターフェイスは、これら 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 DirectXTexDirectXTKDirectXMesh の D3DX11 は、従来の D3DX10 および D3DX11 ライブラリにおける多くのテクノロジに代わる機能を提供します。
Direct2DDirectWrite では、スタイル設定された線とフォントをレンダリングするためにクオリティの高いサポートが提供されます。

従来の 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 ID3D11DeviceID3D11DeviceContext
デバイス インターフェイスは、これら 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.1DXGI 1.2Windows ディスプレイ ドライバー モデル (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.2DXGI 1.3、および他の改善事項が含まれています。

Direct3D 11のプログラミング ガイド

エフェクト (Direct3D 11)