Freigeben über


ID3D11DeviceContext::Map-Methode (d3d11.h)

Ruft einen Zeiger auf die Daten ab, die in einer Unterressource enthalten sind, und verweigert dem GPU-Zugriff auf diese Unterressource.

Syntax

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

Parameter

[in] pResource

Typ: ID3D11Resource*

Ein Zeiger auf eine ID3D11Resource-Schnittstelle .

[in] Subresource

Typ: UINT

Indexnummer der Unterressource.

[in] MapType

Typ: D3D11_MAP

Ein D3D11_MAP typisierter Wert, der die Lese- und Schreibberechtigungen der CPU für eine Ressource angibt.

[in] MapFlags

Typ: UINT

Flag , das angibt, was die CPU tut, wenn die GPU ausgelastet ist. Dieses Flag ist optional.

[out, optional] pMappedResource

Typ: D3D11_MAPPED_SUBRESOURCE*

Ein Zeiger auf die D3D11_MAPPED_SUBRESOURCE-Struktur für die zugeordnete Unterressource. Weitere Informationen finden Sie im Abschnitt Hinweise zu NULL-Zeigern.

Rückgabewert

Typ: HRESULT

Diese Methode gibt einen der Direct3D 11-Rückgabecodes zurück.

Diese Methode gibt auch DXGI_ERROR_WAS_STILL_DRAWING zurück, wenn MapFlagsD3D11_MAP_FLAG_DO_NOT_WAIT angibt und die GPU noch nicht mit der Ressource fertig ist.

Diese Methode gibt auch DXGI_ERROR_DEVICE_REMOVED zurück, wenn MapType CPU-Lesezugriff zulässt und das Video Karte entfernt wurde.

Weitere Informationen zu diesen Fehlercodes finden Sie unter DXGI_ERROR.

Hinweise

Wenn Sie Map in einem verzögerten Kontext aufrufen, können Sie nur D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE oder beides an den MapType-Parameter übergeben. Andere D3D11_MAP typisierte Werte werden für einen verzögerten Kontext nicht unterstützt.

Hinweis Die Direct3D 11.1-Runtime, die ab Windows 8 verfügbar ist, ermöglicht die Zuordnung dynamischer Konstantenpuffer und Shaderressourcensichten (SRVs) von dynamischen Puffern mit D3D11_MAP_WRITE_NO_OVERWRITE. Die Direct3D 11- und früheren Runtimes beschränkten die Zuordnung zu Vertex- oder Indexpuffern. Um festzustellen, ob ein Direct3D-Gerät diese Features unterstützt, rufen Sie ID3D11Device::CheckFeatureSupport mit D3D11_FEATURE_D3D11_OPTIONS auf. CheckFeatureSupport füllt Member einer D3D11_FEATURE_DATA_D3D11_OPTIONS-Struktur mit den Features des Geräts aus. Die relevanten Member hier sind MapNoOverwriteOnDynamicConstantBuffer und MapNoOverwriteOnDynamicBufferSRV.
 
Informationen zur Verwendung von Map finden Sie unter Vorgehensweise: Verwenden dynamischer Ressourcen.

NULL-Zeiger für pMappedResource

Der pMappedResource-Parameter kann NULL sein, wenn eine Textur bereitgestellt wird, die mit D3D11_USAGE_DEFAULT erstellt wurde, und die API in einem unmittelbaren Kontext aufgerufen wird. Dadurch kann eine Standardtextur zugeordnet werden, auch wenn sie mit D3D11_TEXTURE_LAYOUT_UNDEFINED erstellt wurde. Nach diesem API-Aufruf kann mithilfe von ID3D11DeviceContext3::WriteToSubresource und/oder ID3D11DeviceContext3::ReadFromSubresource auf die Textur zugegriffen werden.

Lesen Sie nicht aus einer Für das Schreiben zugeordneten Unterressource.

Wenn Sie D3D11_MAP_WRITE, D3D11_MAP_WRITE_DISCARD oder D3D11_MAP_WRITE_NO_OVERWRITE an den MapType-Parameter übergeben, müssen Sie sicherstellen, dass Ihre App nicht die Unterressourcendaten liest, auf die der pData-Membervon D3D11_MAPPED_SUBRESOURCE verweist, da dies zu erheblichen Leistungseinbußen führen kann. Der Speicherbereich, dem pData-PunktePAGE_WRITECOMBINE zugeordnet werden können, und Ihre App muss alle Einschränkungen berücksichtigen, die diesem Arbeitsspeicher zugeordnet sind.
Hinweis  

Sogar der folgende C++-Code kann aus dem Arbeitsspeicher lesen und die Leistungseinbußen auslösen, da der Code auf den folgenden x86-Assemblycode erweitert werden kann.

C++-Code:

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

x86-Assemblycode:

AND DWORD PTR [EAX],0
 

Verwenden Sie die entsprechenden Optimierungseinstellungen und Sprachkonstrukte, um diese Leistungseinbußen zu vermeiden. Beispielsweise können Sie die xor-Optimierung vermeiden, indem Sie einen flüchtigen Zeiger verwenden oder die Codegeschwindigkeit anstelle der Codegröße optimieren.

Windows Phone 8: Diese API wird unterstützt.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d11.h
Bibliothek D3D11.lib

Weitere Informationen

ID3D11DeviceContext