既定のテクスチャ マッピング
既定のテクスチャ マッピングを使用すると、GPU と CPU の間でイメージ データを共有しながら、コピーとメモリ使用量が削減されます。 ただし、特定の状況でのみ使用する必要があります。 標準のスウィズル レイアウトでは、複数のレイアウトでデータをコピーまたはスウィズルすることを回避できます。
概要
既定のテクスチャのマッピングは、開発者にとって最初の選択肢ではありません。 開発者は、最初に個別の GPU フレンドリな方法でコーディングする必要があります (つまり、大部分のテクスチャに対する CPU アクセス権を持たず、 CopySubresourceRegion1 を使用してアップロードする必要があります)。 ただし、場合によっては、CPU と GPU が同じデータで頻繁に対話する場合があるため、既定のテクスチャのマッピングは、電力を節約したり、特定のアダプターやアーキテクチャで特定の設計を高速化したりするのに役立ちます。 アプリケーションでは、このような状況を検出して、最適化によって不要なコピーをなくす必要があります。
D3D11.3 では、D3D11_TEXTURE_LAYOUT_UNDEFINED ( D3D11_TEXTURE_LAYOUT 列挙型の 1 つのメンバー) を使用して作成されたテクスチャは、頻繁な GPU レンダリングとサンプリングに最も効率的です。 パフォーマンス テストでは、これらのテクスチャを CPU アクセスを使用したD3D11_TEXTURE_LAYOUT_UNDEFINEDと比較し、CPU アクセスを使用してD3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLEし、アダプター間のサポートをD3D11_TEXTURE_LAYOUT_ROW_MAJORする必要があります。
CPU アクセスでD3D11_TEXTURE_LAYOUT_UNDEFINEDを使用すると、 WriteToSubresource、 ReadFromSubresource、 Map (ポインターへのアプリケーション アクセスを排除する)、および Unmap の各メソッドが有効になります。GPU アクセスの効率を犠牲にすることができます。 CPU アクセスでD3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLEを使用すると、 WriteToSubresource、 ReadFromSubresource、 Map (アプリケーションへの有効なポインターを返します)、および マップ解除が有効になります。 また、CPU アクセスを使用してD3D11_TEXTURE_LAYOUT_UNDEFINEDよりも GPU アクセスの効率を犠牲にすることもできます。
一般に、アプリケーションでは、GPU 専用アクセス可能なテクスチャの大部分を作成し、D3D11_TEXTURE_LAYOUT_UNDEFINEDを使用する必要があります。
マッピングの既定のテクスチャ機能以前は、多次元データの標準化されたレイアウトは 1 つだけでした。"linear" ("行メジャー" とも呼ばれます)。 マップの既定値を使用できる場合は、アプリケーションでテクスチャのUSAGE_STAGINGとUSAGE_DYNAMICを回避する必要があります。 USAGE_STAGINGテクスチャとUSAGE_DYNAMICテクスチャでは、線形レイアウトが使用されます。
D3D11.3 (および D3D12) では、標準の多次元データ レイアウトが導入されています。 この目的は、複数の処理ユニットが同じデータの操作を行うときに、複数のレイアウト間でのデータのコピーやデータのスウィズルを不要にすることです。 レイアウトが標準化されていれば、ネットワーク効果による効率の向上が可能になると共に、特定のパターンを想定することによってアルゴリズムのショートカットが可能になります。
ただし、この標準スウィズルはハードウェアの機能の 1 つであるため、すべての GPU でサポートされるとはかぎりません。
D3D11.3 API
D3D12 とは異なり、D3D11.3 では既定でテクスチャ マッピングがサポートされていないため、 D3D11_FEATURE_DATA_D3D11_OPTIONS2クエリを実行する必要があります。 また、ID3D11Device::CheckFeatureSupport を呼び出し、D3D11_FEATURE_DATA_D3D11_OPTIONS2のフィールドをチェックして、Standard swizzle のクエリを実行するStandardSwizzle64KBSupported
必要があります。
テクスチャ マッピングを参照する API は次のとおりです。
列挙型
- D3D11_TEXTURE_LAYOUT : 既定のテクスチャのスウィズル パターンを制御し、既定のテクスチャでマップのサポートを有効にします。
- D3D11_FEATURE : D3D11_FEATURE_DATA_D3D11_OPTIONS2を参照します。
- D3D11_TILE_COPY_FLAG : リニア バッファーとの間でスウィズル タイル リソースをコピーするためのフラグが含まれています。
構造体
- D3D11_TEXTURE2D_DESC1 : 2D テクスチャについて説明します。 CD3D11_TEXTURE2D_DESC1 ヘルパー構造に注意してください。
- D3D11_TEXTURE3D_DESC1 : 3D テクスチャについて説明します。 CD3D11_TEXTURE3D_DESC1 ヘルパー構造に注意してください。
メソッド
- ID3D11Device3::CreateTexture2D1 : 2D テクスチャの配列を作成します。
- ID3D11Device3::CreateTexture3D1 : 1 つの 3D テクスチャを作成します。
- ID3D11Device3::WriteToSubresource : Map を使用してマップされたD3D11_USAGE_DEFAULT テクスチャにデータをコピーします。
- ID3D11Device3::ReadFromSubresource : Map を使用してマップされたD3D11_USAGE_DEFAULT テクスチャからデータをコピーします。
- ID3D11DeviceContext::Map : サブリソースに含まれるデータへのポインターを取得し、そのサブリソースへの GPU アクセスを拒否します。
- ID3D11DeviceContext::Unmap : リソースへのポインターを無効にし、そのリソースへの GPU のアクセスを再度有効にします。
- ID3D11Texture2D1::GetDesc1 : 2D テクスチャ リソースのプロパティを取得します。
- ID3D11Texture3D1::GetDesc1 : 3D テクスチャ リソースのプロパティを取得します。
関連トピック