次の方法で共有


Direct3D 11 への移行

Direct3D 9 から Direct3D 11 への移行

Direct3D 11 API は、Direct3D 10 および Direct3D 10.1 でインフラストラクチャ面に導入された各種の機能向上に基づいて構築されています。Direct3D 9 から Direct3D 11 への移行には、Direct3D 9 から Direct 3D 10 への移行に類似した点があります。次に、この移行における重要な問題を記述します。

  • HLSL のみで作成したプログラム可能なシェーダー (D3DX9 の代わりに D3DCompiler を介してコンパイル) を優先して、すべての固定機能パイプラインの使用が廃止されています。
  • ステート管理は、個別のステート切り替えではなく、固定オブジェクトに基づいています。
  • 頂点バッファーの入力レイアウトとシェーダー署名の厳格なリンク要件に適合するための更新が行われています。
  • シェーダー リソース ビューは、すべてのテクスチャー リソースに関連付けられます。
  • すべての画像の内容は DXGI_FORMAT にマッピングされ、厳格な RGB 色の構成を採用しています。これにより、すべての 16 ビット カラー フォーマット (5/5/5/1、5/6/5、4/4/4/4) およびすべての 24 ビット カラー フォーマット (8/8/8) が撤廃されています。
  • グローバル定数ステートの使用を、いくつかの小さい、より効率的に更新された定数バッファーに分割しています。

Direct3D 10 から Direct3D 11 への移行

Direct3D 10 または Direct3D 10.1 の API を使用するように記述したプログラムの変換は、Direct3D 11 が既存の API の拡張なので、簡単な処理です。1 つの軽微な例外 (以下で説明するモノクロ テキスト フィルタリング) を除いて、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_DRIVER_TYPE D3D_DRIVER_TYPE

同じものですが、場所が D3Dcommon.h に変わり、さらに D3D_DRIVER_TYPE_WARP が追加されています。

(10/10.1 でも、D3D10_DRIVER_TYPE_WARP が d3d10misc.h に追加されています)

D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAG

これらのフラグの多くが再定義されているので、リテラル数の代わりに列挙型識別子を使用する必要があります。

D3D10_FILTER D3D11_FILTER

Direct3D 11 では、テキスト フィルタリング D3D10_FILTER_TEXT_1BIT が撤廃されました。DirectWrite の説明を参照してください。

D3D11_COUNTER D3D11_COUNTER

Direct3D 11 では、ベンダーに依存しないカウンターはほとんどサポートされないため、撤廃されました。

D3D10_x D3D11_x

多くの列挙型および定義は同じで、上限値は大きくなり、値が追加されています。

構造体

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRY

Stream が追加されています。

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 の説明を参照してください。

シェーダーを作成するメソッドは、ID3D11ClassLinkage のオプションのパラメーターを追加で取ります。

シェーダーを設定するメソッドおよびシェーダーを取得するメソッドは、ID3D11ClassInstance のオプションのパラメーターを追加で取ります。

CreateGeometryShaderWithStreamOutput は、複数の出力ストリーム ストライドに配列およびカウントを取得します。

CreateGeometryShaderWithStreamOutput のNumEntries パラメーターの制限は、Direct3D 11 では D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT に引き上げられました。

ID3D10Buffer ID3D11Buffer
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3D

Map メソッドおよび Unmap メソッドは ID3D11DeviceContext に移動しました。また、すべての Map メソッドでは、void** の代わりに D3D11_MAPPED_SUBRESOURCE を使用します。

ID3D10Asynchronous ID3D11Asynchronous

BeginEnd、および GetData は、ID3D11DeviceContext に移動しました。

ID3D10x ID3D11x

多くのインターフェイスは、これら 2 つの API 間で同じです。

その他の関連テクノロジー

10/10.1 のソリューション 11 のソリューション
HLSL コンパイラ (D3D10Compile*、D3DX10Compile*) およびシェーダー反射 API D3DCompiler (D3DCompiler.h を参照)
Effects 10 DirectX SDK の Effects 11
D3DX9/D3DX10 の算術関数 DirectX SDK の XNA 算術関数 (または D3DX9 あるいは D3DX10 の D3DX 関数を継続使用)
D3DX10 DirectX SDK の D3DX11

ID3DX10Font の置き換えは DXUT にあります。新しい DirectWrite API. を使用することもできます。

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 が追加されています。

(10.1 でも、D3D10_FEATURE_LEVEL_9_1、D3D10_FEATURE_LEVEL_9_2、および D3D10_FEATURE_LEVEL_9_3 が 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 の説明を参照してください。

シェーダーを作成するメソッドは、ID3D11ClassLinkage のオプションのパラメーターを追加で取ります。

シェーダーを設定するメソッドおよびシェーダーを取得するメソッドは、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 ソフトウェア レンダリング デバイスの活用