Перечисление 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 |