D3D11_MAP列挙 (d3d11.h)

CPU による読み取りと書き込みのためにアクセスするリソースを識別します。 アプリケーションは、これらのフラグの 1 つ以上を組み合わせることができます。

構文

typedef enum D3D11_MAP {
  D3D11_MAP_READ = 1,
  D3D11_MAP_WRITE = 2,
  D3D11_MAP_READ_WRITE = 3,
  D3D11_MAP_WRITE_DISCARD = 4,
  D3D11_MAP_WRITE_NO_OVERWRITE = 5
} ;

定数

 
D3D11_MAP_READ
値: 1
リソースは読み取り用にマップされます。 リソースは読み取りアクセス権で作成されている必要があります
( D3D11_CPU_ACCESS_READを参照)。
D3D11_MAP_WRITE
値: 2
リソースは書き込み用にマップされます。 リソースは書き込みで作成されている必要があります
アクセス ( D3D11_CPU_ACCESS_WRITEを参照)。
D3D11_MAP_READ_WRITE
値: 3
リソースは読み取りと書き込みにマップされます。 リソースは、読み取りと書き込みを使用して作成されている必要があります
アクセス ( D3D11_CPU_ACCESS_READとD3D11_CPU_ACCESS_WRITEを参照)。
D3D11_MAP_WRITE_DISCARD
値: 4
リソースは書き込み用にマップされます。リソースの以前の内容は未定義になります。 リソースは書き込みアクセス権で作成されている必要があります
動的な使用 ( 「D3D11_CPU_ACCESS_WRITED3D11_USAGE_DYNAMIC」を参照してください)。
D3D11_MAP_WRITE_NO_OVERWRITE
値: 5
リソースは書き込み用にマップされます。リソースの既存の内容を上書きすることはできません (「解説」を参照)。 このフラグは、頂点と
インデックス バッファー。 リソースは、書き込みアクセス権を使用して作成されている必要があります ( D3D11_CPU_ACCESS_WRITEを参照してください)。
D3D11_BIND_CONSTANT_BUFFER フラグを使用して作成されたリソースでは使用できません。

メモdirect3D 11.1 ランタイムは、Windows 8 以降で使用でき、動的定数バッファーと、D3D11_MAP_WRITE_NO_OVERWRITEを使用した動的バッファーのシェーダー リソース ビュー (SRV) のマッピングを可能にします。 Direct3D 11 以前のランタイムでは、頂点バッファーまたはインデックス バッファーへのマッピングが制限されています。 Direct3D デバイスでこれらの機能がサポートされているかどうかを確認するには、 ID3D11Device::CheckFeatureSupportD3D11_FEATURE_D3D11_OPTIONSで呼び出します。 CheckFeatureSupport は、 D3D11_FEATURE_DATA_D3D11_OPTIONS 構造体のメンバーにデバイスの機能を入力します。 ここでの関連するメンバーは 、MapNoOverwriteOnDynamicConstantBufferMapNoOverwriteOnDynamicBufferSRV です

 

注釈

この列挙体は 、ID3D11DeviceContext::Map で使用されます。

D3D11_MAP_WRITE_NO_OVERWRITEの意味

D3D11_MAP_WRITE_NO_OVERWRITE は、アプリケーションが入力アセンブラー (IA) ステージで使用されているデータに書き込まないことを約束していることを示します。 GPU と引き換えに、アプリケーションは同じバッファーの他の部分に書き込むことができます。 アプリケーションは、IA ステージで使用されているデータに対して書き込みが行われるようにする必要があります。

たとえば、次の図に示すバッファーを考えてみましょう。 頂点 4 から 6 を使用する Draw 呼び出しが発行されている場合、このバッファーで Map を呼び出すアプリケーションは、 描画 呼び出しがレンダリング中にアクセスする頂点に書き込まれないことを確認する必要があります。

さまざまな使用率の段階の頂点を含むバッファーの図 ただし、GPU が現在処理しているフレームの観点から CPU の背後にあるフレームが多いことが多いため、これを確実に行うのは困難な場合があります。 2 から 5 フレーム前に呼び出しが行われたため、リソースのどのセクションが使用されているかを追跡することは困難であり、エラーが発生しやすいです。 このため、アプリケーションは、 D3D11_MAP_WRITE_NO_OVERWRITEを使用する場合にのみ、リソースの初期化されていない部分に書き込みを行うことをお勧めします。

D3D11_MAP_WRITE_NO_OVERWRITEでのD3D11_MAP_WRITE_DISCARDの一般的な使用方法

D3D11_MAP_WRITE_DISCARDD3D11_MAP_WRITE_NO_OVERWRITE は、通常、動的インデックス/頂点バッファーと組み合わせて使用されます。 D3D11_MAP_WRITE_DISCARD は動的テクスチャでも使用できます。 ただし、 D3D11_MAP_WRITE_NO_OVERWRITE は動的テクスチャでは使用できません。

これら 2 つのフラグの一般的な用途には、カメラの現在の位置から見ることができるジオメトリを使用して動的インデックス/頂点バッファーを埋める必要があります。 特定のフレームのバッファーに初めてデータを入力すると、 MapD3D11_MAP_WRITE_DISCARDで呼び出されます。これにより、バッファーの以前の内容が無効になります。 バッファーには、使用可能なすべてのデータが格納されます。

同じフレーム内のバッファーへの後続の書き込みでは 、D3D11_MAP_WRITE_NO_OVERWRITEを使用する必要があります。 これにより、前述の制限が遵守されている限り、CPU は GPU によって使用される可能性のあるリソースにアクセスできます。

要件

要件
Header d3d11.h

こちらもご覧ください

リソース列挙