Метод 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 типизированные значения не поддерживаются для отложенного контекста.
Указатели 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 |