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

D3D11_MAP型別值,指定資源的 CPU 讀取和寫入許可權。

[in] MapFlags

類型: UINT

標,指定 GPU 忙碌時 CPU 執行的作業。 此旗標是選擇性的。

[out, optional] pMappedResource

類型: D3D11_MAPPED_SUBRESOURCE*

對應子資源 之D3D11_MAPPED_SUBRESOURCE 結構的指標。 請參閱關於 NULL 指標的一節。

傳回值

類型: HRESULT

這個方法會傳回其中一個 Direct3D 11 傳回碼

如果 MapFlags 指定D3D11_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 裝置是否支持這些功能,請使用 D3D11_FEATURE_D3D11_OPTIONS 呼叫 ID3D11Device::CheckFeatureSupportCheckFeatureSupport 會以裝置的功能填入 D3D11_FEATURE_DATA_D3D11_OPTIONS 結構的成員。 這裡的相關成員包括 MapNoOverwriteOnDynamicConstantBufferMapNoOverwriteOnDynamicBufferSRV
 
如需如何使用 Map 的詳細資訊,請參閱 如何:使用動態資源

pMappedResource 的 NULL 指標

pMappedResource 參數可能是 NULL,當紋理是以 D3D11_USAGE_DEFAULT 建立,且 API 會在立即內容上呼叫時。 這可讓預設紋理對應,即使它是使用 D3D11_TEXTURE_LAYOUT_UNDEFINED 建立。 在此 API 呼叫之後,可以使用 ID3D11DeviceContext3::WriteToSubresource 和/或 ID3D11DeviceContext3::ReadFromSubresource 來存取紋理。

請勿從對應以進行寫入的子資源讀取

當您將 D3D11_MAP_WRITED3D11_MAP_WRITE_DISCARDD3D11_MAP_WRITE_NO_OVERWRITE 傳遞至 MapType 參數時,您必須確定您的應用程式不會讀取 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
程式庫 D3D11.lib

另請參閱

ID3D11DeviceContext