Перечисление D3D11_MAP (d3d11.h)

Определяет ресурс, к которым ЦП будет обращаться для чтения и записи. Приложения могут объединять один или несколько из этих флагов.

Синтаксис

typedef enum D3D11_MAP {
  D3D11_MAP_READ = 1,
  D3D11_MAP_WRITE = 2,
  D3D11_MAP_READ_WRITE = 3,
  D3D11_MAP_WRITE_DISCARD = 4,
  D3D11_MAP_WRITE_NO_OVERWRITE = 5
} ;

Константы

 
D3D11_MAP_READ
Значение: 1
Ресурс сопоставляется для чтения. Ресурс должен быть создан с доступом на чтение
(см . D3D11_CPU_ACCESS_READ).
D3D11_MAP_WRITE
Значение: 2
Ресурс сопоставляется с записью. Ресурс должен быть создан с помощью записи.
access (см . D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_READ_WRITE
Значение: 3
Ресурс сопоставляется для чтения и записи. Ресурс должен быть создан с помощью операций чтения и записи
access (см . D3D11_CPU_ACCESS_READ и D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_WRITE_DISCARD
Значение: 4
Ресурс сопоставляется с записью; Предыдущее содержимое ресурса будет неопределенным. Ресурс должен быть создан с доступом на запись
и динамическое использование (см . D3D11_CPU_ACCESS_WRITE и D3D11_USAGE_DYNAMIC).
D3D11_MAP_WRITE_NO_OVERWRITE
Значение: 5
Ресурс сопоставляется с записью; существующее содержимое ресурса невозможно перезаписать (см. примечания). Этот флаг действителен только для вершин и
буферы индекса. Ресурс должен быть создан с доступом на запись (см . D3D11_CPU_ACCESS_WRITE).
Не может использоваться для ресурса, созданного с флагом D3D11_BIND_CONSTANT_BUFFER .

Примечание Среда выполнения 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.

 

Комментарии

Это перечисление используется в ID3D11DeviceContext::Map.

Значение D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_NO_OVERWRITE означает, что приложение обещает не записывать данные, которые использует этап входного ассемблер (IA). Взамен GPU позволяет приложению выполнять запись в другие части того же буфера. Приложение должно гарантировать, что оно не записывает данные, используемые на этапе IA.

Например, рассмотрим буфер, показанный на следующей схеме. Если был выполнен вызов Draw , использующий вершины 4–6, то приложение, которое вызывает Map в этом буфере, должно убедиться, что оно не записывает данные в вершины, к которым вызов Draw будет обращаться во время отрисовки.

Схема буфера, включающего вершины на разных этапах использования Однако обеспечить это может быть сложно, так как GPU часто имеет много кадров за ЦП с точки зрения того, какой кадр обрабатывается в данный момент. Отслеживание того, какие разделы ресурса используются из-за вызовов, выполненных от 2 до 5 кадров назад, является трудным и подверженным ошибкам. Поэтому при использовании D3D11_MAP_WRITE_NO_OVERWRITE приложениям рекомендуется выполнять запись только в неинициализированные части ресурса.

Общее использование D3D11_MAP_WRITE_DISCARD с D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_DISCARD и D3D11_MAP_WRITE_NO_OVERWRITE обычно используются в сочетании с динамическими буферами индексов и вершин. D3D11_MAP_WRITE_DISCARD также можно использовать с динамическими текстурами. Однако D3D11_MAP_WRITE_NO_OVERWRITE нельзя использовать с динамическими текстурами.

Обычно эти два флага используются для заполнения динамических буферов индексов и вершин геометрией, которая может быть видна по текущему положению камеры. При первом вводе данных в буфер для заданного кадра сопоставление вызывается с помощью D3D11_MAP_WRITE_DISCARD; это делает недействительным предыдущее содержимое буфера. Затем буфер заполняется всеми доступными данными.

Последующие операции записи в буфер в пределах того же кадра должны использовать D3D11_MAP_WRITE_NO_OVERWRITE. Это позволит ЦП получить доступ к ресурсу, который потенциально используется GPU при условии соблюдения ранее описанных ограничений.

Требования

Требование Значение
Заголовок d3d11.h

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

Перечисления ресурсов