Метод ID3D11DeviceContext::Map (d3d11.h)

Получает указатель на данные, содержащиеся в подресурсе, и запрещает GPU доступ к его подресурсам.

Синтаксис

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

Параметры

[in] pResource

Тип: ID3D11Resource*

Указатель на интерфейс ID3D11Resource .

[in] Subresource

Тип: UINT

Номер индекса подресурса.

[in] MapType

Тип: D3D11_MAP

D3D11_MAP типизированное значение, указывающее разрешения ЦП на чтение и запись для ресурса.

[in] MapFlags

Тип: UINT

Флаг , указывающий, что делает ЦП, когда GPU занят. Этот флаг является необязательным.

[out, optional] pMappedResource

Тип: D3D11_MAPPED_SUBRESOURCE*

Указатель на структуру D3D11_MAPPED_SUBRESOURCE для сопоставленного подресурса. См. раздел Примечания о указателях NULL.

Возвращаемое значение

Тип: HRESULT

Этот метод возвращает один из кодов возврата Direct3D 11.

Этот метод также возвращает DXGI_ERROR_WAS_STILL_DRAWING , если MapFlags указывает D3D11_MAP_FLAG_DO_NOT_WAIT и GPU еще не завершен с ресурсом.

Этот метод также возвращает DXGI_ERROR_DEVICE_REMOVED, если MapType разрешает доступ на чтение ЦП и видео карта удален.

Дополнительные сведения об этих кодах ошибок см. в разделе DXGI_ERROR.

Комментарии

При вызове map в отложенном контексте в параметр MapType можно передать только D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE или и то, и другое. Другие D3D11_MAP типизированные значения не поддерживаются для отложенного контекста.

Примечание Среда выполнения Direct3D 11.1, которая доступна начиная с Windows 8, позволяет сопоставлять динамические буферы констант и представления ресурсов шейдера (SRV) динамических буферов с D3D11_MAP_WRITE_NO_OVERWRITE. Среда выполнения Direct3D 11 и более ранних версий ограничивает сопоставление с буферами вершин или индексов. Чтобы определить, поддерживает ли устройство Direct3D эти функции, вызовите ID3D11Device::CheckFeatureSupport с D3D11_FEATURE_D3D11_OPTIONS. CheckFeatureSupport заполняет элементы структуры D3D11_FEATURE_DATA_D3D11_OPTIONS функциями устройства. Соответствующими элементами здесь являются MapNoOverwriteOnDynamicConstantBuffer и MapNoOverwriteOnDynamicBufferSRV.
 
Сведения об использовании карты см. в разделе Практическое руководство. Использование динамических ресурсов.

Указатели NULL для pMappedResource

Параметр pMappedResource может иметь значение NULL, если предоставляется текстура, созданная с помощью D3D11_USAGE_DEFAULT, а API вызывается в непосредственном контексте. Это позволяет сопоставлять текстуру по умолчанию, даже если она была создана с помощью D3D11_TEXTURE_LAYOUT_UNDEFINED. После этого вызова API к текстуре можно получить доступ с помощью ID3D11DeviceContext3::WriteToSubresource и/или ID3D11DeviceContext3::ReadFromSubresource.

Не считывать из подресурса, сопоставленного для записи

При передаче D3D11_MAP_WRITE, D3D11_MAP_WRITE_DISCARD или D3D11_MAP_WRITE_NO_OVERWRITE в параметр MapType необходимо убедиться, что приложение не считывает данные подресурсов, на которые указывает элемент pDataD3D11_MAPPED_SUBRESOURCE , так как это может привести к значительному снижению производительности. Область памяти, в которую можно выделить точки pData с помощью PAGE_WRITECOMBINE, и ваше приложение должно соблюдать все ограничения, связанные с такой памятью.
Примечание  

Даже следующий код C++ может считывать из памяти и вызывать снижение производительности, так как код может расшириться до следующего кода сборки x86.

Код C++:

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

Код сборки x86:

AND DWORD PTR [EAX],0
 

Используйте соответствующие параметры оптимизации и языковые конструкции, чтобы избежать снижения производительности. Например, можно избежать оптимизации xor, используя переменный указатель или оптимизируя скорость кода вместо размера кода.

Windows Phone 8. Этот API поддерживается.

Требования

Требование Значение
Целевая платформа Windows
Header d3d11.h
Библиотека D3D11.lib

См. также раздел

ID3D11DeviceContext