Direct3D 11.2 の機能
Direct3D 11.2 には、Windows 8.1、Windows RT 8.1、Windows Server 2012 R2 に含まれる次の機能が追加されています。
タイルリソース
Direct3D 11.2 では、少量の物理メモリを使用する大規模な論理リソースと考えることができるタイル化されたリソースを作成できます。 タイル化されたリソースは、ゲームの地形やアプリ UI などと共に便利です。
タイル リソースは、 D3D11_RESOURCE_MISC_TILED フラグを指定して作成されます。 タイル リソースを操作するには、次の API を使用します。
- ID3D11Device2::GetResourceTiling
- ID3D11DeviceContext2::UpdateTiles
- ID3D11DeviceContext2::UpdateTileMappings
- ID3D11DeviceContext2::CopyTiles
- ID3D11DeviceContext2::CopyTileMappings
- ID3D11DeviceContext2::ResizeTilePool
- ID3D11DeviceContext2::TiledResourceBarrier
- ID3D11Debug::SetFeatureMask を使用したD3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION フラグ
タイルリソースの詳細については、「 タイルリソース」を参照してください。
タイル リソースのサポートを確認する
タイルリソースを使用する前に、デバイスがタイルリソースをサポートしているかどうかを確認する必要があります。 タイル化されたリソースのサポートをチェックする方法を次に示します。
HRESULT hr = D3D11CreateDevice(
nullptr, // Specify nullptr to use the default adapter.
D3D_DRIVER_TYPE_HARDWARE, // Create a device using the hardware graphics driver.
0, // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE.
creationFlags, // Set debug and Direct2D compatibility flags.
featureLevels, // List of feature levels this app can support.
ARRAYSIZE(featureLevels), // Size of the list above.
D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION for Windows Store apps.
&device, // Returns the Direct3D device created.
&m_d3dFeatureLevel, // Returns feature level of device created.
&context // Returns the device immediate context.
);
if (SUCCEEDED(hr))
{
D3D11_FEATURE_DATA_D3D11_OPTIONS1 featureData;
DX::ThrowIfFailed(
device->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &featureData, sizeof(featureData))
);
m_tiledResourcesTier = featureData.TiledResourcesTier;
}
WARP デバイスの延長サポート
Direct3D 11.2 では、D3D11CreateDevice の DriverType パラメーターにD3D_DRIVER_TYPE_WARPを渡して作成する WARP デバイスのサポートが拡張されています。 Direct3D 11.2 の WARP ソフトウェア レンダラーは、タイル化されたリソース、IDXGIDevice3::Trim、共有 BCn サーフェス、minblend、マップの既定値など、Direct3D 機能レベル 11_1 の完全なサポートを追加します。 HLSL シェーダーでのダブル サポートも、16 倍の MSAA のサポートと共に有効になっています。
グラフィックス コマンドに注釈を付ける
Direct3D 11.2 では、次の API を使用してグラフィックス コマンドに注釈を付けることができます。
- ID3D11DeviceContext2::IsAnnotationEnabled
- ID3D11DeviceContext2::BeginEventInt
- ID3D11DeviceContext2::SetMarkerInt
- ID3D11DeviceContext2::EndEvent
HLSL シェーダーのリンク
Windows 8.1は、HLSL シェーダーの個別のコンパイルとリンクを追加します。これにより、グラフィックス プログラマはプリコンパイル済みの HLSL 関数を作成し、それらをライブラリにパッケージ化し、実行時に完全なシェーダーにリンクできます。 これは基本的に C/C++ の個別のコンパイル、ライブラリ、リンクに相当します。プログラマは、計算の最終処理に関する詳細情報が得られたら、プリコンパイル済みの HLSL コードを作成できます。 シェーダー リンクの使用方法の詳細については、「シェーダー リンクの 使用」を参照してください。
実行時に動的リンケージを使用して最終的なシェーダーを作成するには、次の手順を実行します。
シェーダー リンクを作成して使用するには
- リンク コンテキストを表す ID3D11Linker リンカー オブジェクトを作成します。 1 つのコンテキストを使用して複数のシェーダーを生成することはできません。リンク コンテキストは 1 つのシェーダーを生成するために使用され、リンク コンテキストは破棄されます。
- D3DLoadModule を使用して、ライブラリ BLOB からライブラリを読み込んで設定します。
- D3DLoadModule を使用して、エントリ シェーダー BLOB を読み込んで設定するか、FLG シェーダーを作成します。
- ID3D11Module::CreateInstance を使用して ID3D11ModuleInstance オブジェクトを作成し、これらのオブジェクトの関数を呼び出して、リソースを最終的なスロットに再バインドします。
- ライブラリをリンカーに追加し、 ID3D11Linker::Link を呼び出して、完全にプリコンパイルされたリンクされたシェーダーと同様に、ランタイムで読み込んで使用できる最終的なシェーダー バイト コードを生成します。
関数リンク グラフ (FLG)
Windows 8.1関数リンク グラフ (FLG) も追加されます。 FLG を使用して、値を相互に渡すプリコンパイル済み関数呼び出しのシーケンスで構成されるシェーダーを構築できます。 FLG を使用する場合、HLSL を記述して HLSL コンパイラを呼び出す必要はありません。 代わりに、シェーダー構造は、C++ API 呼び出しを使用してプログラムによって指定されます。 FLG ノードは、プリコンパイル済みライブラリ関数の入出力署名と呼び出しを表します。 関数呼び出しノードを登録する順序によって、呼び出しのシーケンスが定義されます。 入力署名ノードは最初に指定する必要があり、出力署名ノードは最後に指定する必要があります。 FLG エッジは、あるノードから別のノードに値を渡す方法を定義します。 渡される値のデータ型は同じである必要があります。暗黙的な型変換はありません。 HLSL の動作に従うシェイプルールとスウィズルルールは、このシーケンスでのみ値を前方に渡すことができます。 FLG API の詳細については、「 ID3D11FunctionLinkingGraph」を参照してください。
受信トレイ HLSL コンパイラ
HLSL コンパイラは、Windows 8.1 以降の受信トレイになりました。 現在、シェーダー プログラミング用のほとんどの API は、Windows 8.1 以降用に構築された Windows ストア アプリで使用できます。 シェーダー プログラミング用の多くの API は、Windows 8用に構築された Windows ストア アプリでは使用できませんでした。これらの API の参照ページにはメモが付いています。 ただし、一部のシェーダー API ( D3DCompileFromFile など) は、Windows ストア アプリの開発にのみ使用でき、Windows ストアに送信するアプリでは使用できません。これらの API の参照ページには、引き続きメモが付いています。
関連トピック