Compartilhar via


Método ID3D11DeviceContext::Map (d3d11.h)

Obtém um ponteiro para os dados contidos em um sub-recurso e nega o acesso de GPU a esse sub-recurso.

Sintaxe

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

Parâmetros

[in] pResource

Tipo: ID3D11Resource*

Um ponteiro para uma interface ID3D11Resource .

[in] Subresource

Tipo: UINT

Número de índice do sub-recurso.

[in] MapType

Tipo: D3D11_MAP

Um valor de tipo D3D11_MAP que especifica as permissões de leitura e gravação da CPU para um recurso.

[in] MapFlags

Tipo: UINT

Sinalizador que especifica o que a CPU faz quando a GPU está ocupada. Esse sinalizador é opcional.

[out, optional] pMappedResource

Tipo: D3D11_MAPPED_SUBRESOURCE*

Um ponteiro para a estrutura de D3D11_MAPPED_SUBRESOURCE para o sub-recurso mapeado. Consulte a seção Comentários sobre ponteiros NULL.

Retornar valor

Tipo: HRESULT

Esse método retorna um dos códigos de retorno do Direct3D 11.

Esse método também retornará DXGI_ERROR_WAS_STILL_DRAWING se MapFlagsespecificar D3D11_MAP_FLAG_DO_NOT_WAIT e a GPU ainda não estiver concluída com o recurso.

Esse método também retornará DXGI_ERROR_DEVICE_REMOVED se MapType permitir qualquer acesso de leitura da CPU e o cartão de vídeo tiver sido removido.

Para obter mais informações sobre esses códigos de erro, consulte DXGI_ERROR.

Comentários

Se você chamar Map em um contexto adiado, só poderá passar D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE ou ambos para o parâmetro MapType . Não há suporte para outros valores de tipo D3D11_MAP para um contexto adiado.

Nota O runtime do Direct3D 11.1, que está disponível a partir do Windows 8, permite mapear buffers constantes dinâmicos e SRVs (exibições de recursos de sombreador) de buffers dinâmicos com D3D11_MAP_WRITE_NO_OVERWRITE. O direct3D 11 e runtimes anteriores limitaram o mapeamento para buffers de vértice ou índice. Para determinar se um dispositivo Direct3D dá suporte a esses recursos, chame ID3D11Device::CheckFeatureSupport com D3D11_FEATURE_D3D11_OPTIONS. CheckFeatureSupport preenche membros de uma estrutura D3D11_FEATURE_DATA_D3D11_OPTIONS com os recursos do dispositivo. Os membros relevantes aqui são MapNoOverwriteOnDynamicConstantBuffer e MapNoOverwriteOnDynamicBufferSRV.
 
Para obter informações sobre como usar o Mapa, consulte Como usar recursos dinâmicos.

Ponteiros NULL para pMappedResource

O parâmetro pMappedResource pode ser NULL quando uma textura é fornecida que foi criada com D3D11_USAGE_DEFAULT e a API é chamada em um contexto imediato. Isso permite que uma textura padrão seja mapeada, mesmo que tenha sido criada usando D3D11_TEXTURE_LAYOUT_UNDEFINED. Após essa chamada à API, a textura pode ser acessada usando ID3D11DeviceContext3::WriteToSubresource e/ou ID3D11DeviceContext3::ReadFromSubresource.

Não ler de um sub-recurso mapeado para gravação

Ao passar D3D11_MAP_WRITE, D3D11_MAP_WRITE_DISCARD ou D3D11_MAP_WRITE_NO_OVERWRITE para o parâmetro MapType , você deve garantir que seu aplicativo não leia os dados de sub-recurso para os quais o membro pData de D3D11_MAPPED_SUBRESOURCE pontos, pois isso pode causar uma penalidade significativa de desempenho. A região de memória à qual os pontos pData podem ser alocados com PAGE_WRITECOMBINE e seu aplicativo deve respeitar todas as restrições associadas a essa memória.
Observação  

Até mesmo o código C++ a seguir pode ler da memória e disparar a penalidade de desempenho porque o código pode expandir para o código do assembly x86 a seguir.

Código C++:

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

Código do assembly x86:

AND DWORD PTR [EAX],0
 

Use as configurações de otimização apropriadas e constructos de linguagem para ajudar a evitar essa penalidade de desempenho. Por exemplo, você pode evitar a otimização de xor usando um ponteiro volátil ou otimizando para a velocidade do código em vez do tamanho do código.

Windows Phone 8: há suporte para essa API.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho d3d11.h
Biblioteca D3D11.lib

Confira também

ID3D11DeviceContext