ID3D11DeviceContext::Map メソッド (d3d11.h)

サブリソースに含まれるデータへのポインターを取得し、そのサブリソースへの GPU アクセスを拒否します。

構文

HRESULT Map(
  [in]            ID3D11Resource           *pResource,
  [in]            UINT                     Subresource,
  [in]            D3D11_MAP                MapType,
  [in]            UINT                     MapFlags,
  [out, optional] D3D11_MAPPED_SUBRESOURCE *pMappedResource
);

パラメーター

[in] pResource

種類: ID3D11Resource*

ID3D11Resource インターフェイスへのポインター。

[in] Subresource

型: UINT

サブリソースのインデックス番号。

[in] MapType

種類: D3D11_MAP

リソースに対する CPU の読み取りおよび書き込みアクセス許可を指定する、 D3D11_MAP型指定された値。

[in] MapFlags

型: UINT

GPU がビジー状態のときに CPU が実行する処理を指定するフラグ。 このフラグは省略可能です。

[out, optional] pMappedResource

種類: D3D11_MAPPED_SUBRESOURCE*

マップされたサブリソースの D3D11_MAPPED_SUBRESOURCE 構造体へのポインター。 NULL ポインターについては、「解説」セクションを参照してください。

戻り値

型: HRESULT

このメソッドは、 Direct3D 11 リターン コードのいずれかを返します

また、MapFlagsD3D11_MAP_FLAG_DO_NOT_WAITが指定されていて、GPU がまだリソースで完了していない場合、このメソッドは DXGI_ERROR_WAS_STILL_DRAWING を返します。

MapType が CPU 読み取りアクセスを許可し、ビデオ カードが削除された場合、このメソッドはDXGI_ERROR_DEVICE_REMOVEDも返します。

これらのエラー コードの詳細については、「 DXGI_ERROR」を参照してください。

注釈

遅延コンテキストで Map を 呼び出す場合は、 D3D11_MAP_WRITE_DISCARDD3D11_MAP_WRITE_NO_OVERWRITE、またはその両方のみを MapType パラメーターに渡すことができます。 その他 のD3D11_MAP型指定された値は、遅延コンテキストではサポートされていません。

メモ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 です
 
Map の使用方法については、「方法: 動的リソースを使用する」を参照してください。

pMappedResource の NULL ポインター

pMappedResource パラメーターは、D3D11_USAGE_DEFAULTを使用して作成されたテクスチャが指定され、API が即時コンテキストで呼び出されると NULL になることがあります。 これにより、D3D11_TEXTURE_LAYOUT_UNDEFINED を使用して作成された場合でも、既定のテクスチャをマップできます。 この API 呼び出しの後、 ID3D11DeviceContext3::WriteToSubresource または ID3D11DeviceContext3::ReadFromSubresource を使用してテクスチャにアクセスできます。

書き込み用にマップされたサブリソースから読み取らない

MapType パラメーターにD3D11_MAP_WRITED3D11_MAP_WRITE_DISCARD、またはD3D11_MAP_WRITE_NO_OVERWRITEを渡す場合は、pData メンバーがポイントするサブリソース データをアプリが読み取らないようにする必要があります。これにより、パフォーマンスが大幅に低下する可能性があるためD3D11_MAPPED_SUBRESOURCEポイントします。 pData ポイントがPAGE_WRITECOMBINEを使用して割り当てることができるメモリ領域。アプリでは、このようなメモリに関連付けられているすべての制限を適用する必要があります。
  

次の C++ コードでも、メモリから読み取り、パフォーマンスの低下をトリガーできます。これは、コードが次の x86 アセンブリ コードに拡張できるためです。

C++ コード:

*((int*)MappedResource.pData) = 0;

x86 アセンブリ コード:

AND DWORD PTR [EAX],0
 

このパフォーマンスの低下を回避するには、適切な最適化設定と言語コンストラクトを使用します。 たとえば、 揮発性 ポインターを使用するか、コード サイズではなくコード速度を最適化することで、xor の最適化を回避できます。

Windows Phone 8: この API はサポートされています。

要件

要件
対象プラットフォーム Windows
ヘッダー d3d11.h
Library D3D11.lib

こちらもご覧ください

ID3D11DeviceContext