Condividi tramite


Metodo ID3D11DeviceContext::Map (d3d11.h)

Ottiene un puntatore ai dati contenuti in una sottoresource e nega l'accesso della GPU a tale sottoresource.

Sintassi

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

Parametri

[in] pResource

Tipo: ID3D11Resource*

Puntatore a un'interfaccia ID3D11Resource .

[in] Subresource

Tipo: UINT

Numero di indice della sottoresource.

[in] MapType

Tipo: D3D11_MAP

Valore D3D11_MAP tipizzato che specifica le autorizzazioni di lettura e scrittura della CPU per una risorsa.

[in] MapFlags

Tipo: UINT

Contrassegno che specifica le operazioni della CPU quando la GPU è occupato. Questo flag è facoltativo.

[out, optional] pMappedResource

Tipo: D3D11_MAPPED_SUBRESOURCE*

Puntatore alla struttura di D3D11_MAPPED_SUBRESOURCE per la sottoresource mappata. Vedere la sezione Osservazioni relative ai puntatori NULL.

Valore restituito

Tipo: HRESULT

Questo metodo restituisce uno dei codici restituiti Direct3D 11.

Questo metodo restituisce anche DXGI_ERROR_WAS_STILL_DRAWING se MapFlags specifica D3D11_MAP_FLAG_DO_NOT_WAIT e la GPU non è ancora stata completata con la risorsa.

Questo metodo restituisce anche DXGI_ERROR_DEVICE_REMOVED se MapType consente l'accesso in lettura cpu e la scheda video è stata rimossa.

Per altre informazioni su questi codici di errore, vedere DXGI_ERROR.

Commenti

Se si chiama Map in un contesto posticipato, è possibile passare solo D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE o entrambi al parametro MapType . Altri valori tipizzati D3D11_MAP non sono supportati per un contesto posticipato.

Nota Il runtime Direct3D 11.1, disponibile a partire da Windows 8, consente di eseguire il mapping di buffer costanti dinamiche e viste delle risorse shader (SRV) di buffer dinamici con D3D11_MAP_WRITE_NO_OVERWRITE. Direct3D 11 e versioni precedenti limitano il mapping ai vertici o ai buffer di indice. Per determinare se un dispositivo Direct3D supporta queste funzionalità, chiamare ID3D11Device::CheckFeatureSupport con D3D11_FEATURE_D3D11_OPTIONS. CheckFeatureSupport riempie i membri di una struttura D3D11_FEATURE_DATA_D3D11_OPTIONS con le funzionalità del dispositivo. I membri pertinenti sono MapNoOverwriteOnDynamicConstantBuffer e MapNoOverwriteOnDynamicBufferSRV.
 
Per informazioni su come usare Map, vedere Procedura: Usare le risorse dinamiche.

Puntatori NULL per pMappedResource

Il parametro pMappedResource può essere NULL quando viene fornita una trama creata con D3D11_USAGE_DEFAULT e l'API viene chiamata in un contesto immediato. Ciò consente di eseguire il mapping di una trama predefinita, anche se è stata creata usando D3D11_TEXTURE_LAYOUT_UNDEFINED. Dopo questa chiamata API, è possibile accedere alla trama usando ID3D11DeviceContext3::WriteToSubresource e/o ID3D11DeviceContext3::ReadFromSubresource.

Non leggere da una sottoresource mappata per la scrittura

Quando si passa D3D11_MAP_WRITE, D3D11_MAP_WRITE_DISCARD o D3D11_MAP_WRITE_NO_OVERWRITE al parametro MapType, è necessario assicurarsi che l'app non legge i dati di sottoresource a cui il membro pData di D3D11_MAPPED_SUBRESOURCE punti perché in questo modo può causare una riduzione significativa delle prestazioni. L'area di memoria a cui possono essere allocati punti pData con PAGE_WRITECOMBINE e l'app deve rispettare tutte le restrizioni associate a tale memoria.
Nota  

Anche il codice C++ seguente può leggere dalla memoria e attivare la penalità delle prestazioni perché il codice può espandersi al codice dell'assembly x86 seguente.

Codice C++:

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

Codice assembly x86:

AND DWORD PTR [EAX],0
 

Usare le impostazioni di ottimizzazione e i costrutti linguistici appropriati per evitare questa penalità delle prestazioni. Ad esempio, è possibile evitare l'ottimizzazione xor usando un puntatore volatile o ottimizzando la velocità del codice anziché le dimensioni del codice.

Windows Phone 8: questa API è supportata.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d11.h
Libreria D3D11.lib

Vedi anche

ID3D11DeviceContext