Compartir a través de


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

Obtiene un puntero a los datos contenidos en un subrecurso y deniega el acceso de GPU a ese subrecurso.

Sintaxis

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*

Puntero a una interfaz ID3D11Resource .

[in] Subresource

Tipo: UINT

Número de índice del subrecurso.

[in] MapType

Tipo: D3D11_MAP

Valor de tipo D3D11_MAP que especifica los permisos de lectura y escritura de la CPU para un recurso.

[in] MapFlags

Tipo: UINT

Marca que especifica lo que hace la CPU cuando la GPU está ocupada. Esta marca es opcional.

[out, optional] pMappedResource

Tipo: D3D11_MAPPED_SUBRESOURCE*

Puntero a la estructura D3D11_MAPPED_SUBRESOURCE del subrecurso asignado. Consulte la sección Comentarios sobre punteros NULL.

Valor devuelto

Tipo: HRESULT

Este método devuelve uno de los códigos de retorno de Direct3D 11.

Este método también devuelve DXGI_ERROR_WAS_STILL_DRAWING si MapFlags especifica D3D11_MAP_FLAG_DO_NOT_WAIT y la GPU aún no ha terminado con el recurso.

Este método también devuelve DXGI_ERROR_DEVICE_REMOVED si MapType permite el acceso de lectura de cpu y se ha quitado la tarjeta de vídeo.

Para obtener más información sobre estos códigos de error, consulte DXGI_ERROR.

Comentarios

Si llama a Map en un contexto diferido, solo puede pasar D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE o ambos al parámetro MapType . No se admiten otros valores con tipo D3D11_MAP para un contexto diferido.

Nota El entorno de ejecución de Direct3D 11.1, que está disponible a partir de Windows 8, permite asignar búferes de constantes dinámicos y vistas de recursos de sombreador (SRV) de búferes dinámicos con D3D11_MAP_WRITE_NO_OVERWRITE. Los tiempos de ejecución de Direct3D 11 y anteriores limitan la asignación a los búferes de vértices o índices. Para determinar si un dispositivo Direct3D admite estas características, llame a ID3D11Device::CheckFeatureSupport con D3D11_FEATURE_D3D11_OPTIONS. CheckFeatureSupport rellena los miembros de una estructura de D3D11_FEATURE_DATA_D3D11_OPTIONS con las características del dispositivo. Los miembros pertinentes aquí son MapNoOverwriteOnDynamicConstantBuffer y MapNoOverwriteOnDynamicBufferSRV.
 
Para obtener información sobre cómo usar Map, vea Cómo: Usar recursos dinámicos.

Punteros NULL para pMappedResource

El parámetro pMappedResource puede ser NULL cuando se proporciona una textura que se creó con D3D11_USAGE_DEFAULT y se llama a la API en un contexto inmediato. Esto permite asignar una textura predeterminada, incluso si se creó mediante D3D11_TEXTURE_LAYOUT_UNDEFINED. Después de esta llamada API, se puede tener acceso a la textura mediante ID3D11DeviceContext3::WriteToSubresource o ID3D11DeviceContext3::ReadFromSubresource.

No lea de un subrecurso asignado para escribir

Al pasar D3D11_MAP_WRITE, D3D11_MAP_WRITE_DISCARD o D3D11_MAP_WRITE_NO_OVERWRITE al parámetro MapType , debes asegurarte de que la aplicación no lee los datos de subrecursos a los que apunta el miembro pData de D3D11_MAPPED_SUBRESOURCE porque hacerlo puede provocar una penalización significativa del rendimiento. La región de memoria a la que se pueden asignar puntos pData con PAGE_WRITECOMBINE y la aplicación debe respetar todas las restricciones asociadas a dicha memoria.
Nota  

Incluso el siguiente código de C++ puede leer de la memoria y desencadenar la penalización de rendimiento porque el código puede expandirse al siguiente código de ensamblado x86.

Código de C++:

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

Código de ensamblado x86:

AND DWORD PTR [EAX],0
 

Use la configuración de optimización y las construcciones de lenguaje adecuadas para ayudar a evitar esta penalización de rendimiento. Por ejemplo, puede evitar la optimización de xor mediante un puntero volátil o mediante la optimización de la velocidad del código en lugar del tamaño del código.

Windows Phone 8: se admite esta API.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado d3d11.h
Library D3D11.lib

Consulte también

ID3D11DeviceContext