Compartilhar via


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

Obtém um ponteiro para os dados contidos em uma sub-fonte 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 de ID3D11Resource de.

[in] Subresource

Tipo: UINT

Número de índice do sub-recurso .

[in] MapType

Tipo: D3D11_MAP

Um valor D3D11_MAPdigitado 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.

Valor de retorno

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 MapFlags especificar 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 a placa de vídeo tiver sido removida.

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

Observações

Se você chamar Map em um contexto adiado, só poderá passar D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITEou ambos para o parâmetro MapType. Não há suporte para outros valores tipados em D3D11_MAPpara um contexto adiado.

Observação o runtime do Direct3D 11.1, que está disponível a partir do Windows 8, permite mapear buffers constantes dinâmicos e exibições de recursos de sombreador (SRVs) de buffers dinâmicos com D3D11_MAP_WRITE_NO_OVERWRITE. O mapeamento limitado do Direct3D 11 e dos runtimes anteriores 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 de 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 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_DEFAULTe 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_DISCARDou D3D11_MAP_WRITE_NO_OVERWRITE para o parâmetro MapType, você deve garantir que seu aplicativo não leia os dados de sub-fonte aos quais o pData membro de pontos de D3D11_MAPPED_SUBRESOURCE porque isso pode causar uma penalidade de desempenho significativa. A região de memória à qual pData pontos pode ser alocada com PAGE_WRITECOMBINEe seu aplicativo deve respeitar todas as restrições associadas a essa memória.
de 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 de 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 os constructos de linguagem para ajudar a evitar essa penalidade de desempenho. Por exemplo, você pode evitar a otimização xor usando um ponteiro volátil ou otimizando para a velocidade do código em vez do tamanho do código.

Windows Phone 8: essa API tem suporte.

Requisitos

Requisito Valor
da Plataforma de Destino Windows
cabeçalho d3d11.h
biblioteca D3D11.lib

Consulte também

ID3D11DeviceContext