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 結構的指標。 請參閱關於 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_DISCARD、 D3D11_MAP_WRITE_NO_OVERWRITE或兩者傳遞至 MapType 參數。 延遲的內容不支援其他 D3D11_MAP型別值。
pMappedResource 的 NULL 指標
pMappedResource 參數可能是 NULL,當紋理是以 D3D11_USAGE_DEFAULT 建立,且 API 會在立即內容上呼叫時。 這可讓預設紋理對應,即使它是使用 D3D11_TEXTURE_LAYOUT_UNDEFINED 建立。 在此 API 呼叫之後,可以使用 ID3D11DeviceContext3::WriteToSubresource 和/或 ID3D11DeviceContext3::ReadFromSubresource 來存取紋理。請勿從對應以進行寫入的子資源讀取
當您將 D3D11_MAP_WRITE、 D3D11_MAP_WRITE_DISCARD或 D3D11_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 |