Перечисление D3D11_USAGE (d3d11.h)
Определяет ожидаемое использование ресурсов во время отрисовки. Использование напрямую отражает, доступен ли ресурс для ЦП и (или) графического процессора (GPU).
Синтаксис
typedef enum D3D11_USAGE {
D3D11_USAGE_DEFAULT = 0,
D3D11_USAGE_IMMUTABLE = 1,
D3D11_USAGE_DYNAMIC = 2,
D3D11_USAGE_STAGING = 3
} ;
Константы
D3D11_USAGE_DEFAULT Значение: 0 Ресурс, которому требуется доступ на чтение и запись gpu. Скорее всего, это самый распространенный вариант использования. |
D3D11_USAGE_IMMUTABLE Значение: 1 Ресурс, который может считывать только GPU. Он не может быть записан с помощью GPU и недоступен для ЦП. Этот тип ресурса необходимо инициализировать при его создании, так как его нельзя изменить после создания. |
D3D11_USAGE_DYNAMIC Значение: 2 Ресурс, доступный как GPU (только для чтения), так и для ЦП (только для записи). Динамический ресурс является хорошим выбором для ресурса, который будет обновляться ЦП по крайней мере один раз на кадр. Чтобы обновить динамический ресурс, используйте метод Map . Сведения об использовании динамических ресурсов см. в разделе Практическое руководство. Использование динамических ресурсов. |
D3D11_USAGE_STAGING Значение: 3 Ресурс, поддерживающий передачу данных (копирование) из GPU в ЦП. |
Комментарии
Приложение определяет способ использования ресурса (его использование) в описании ресурса. Существует несколько структур для создания ресурсов, включая D3D11_TEXTURE1D_DESC, D3D11_TEXTURE2D_DESC, D3D11_TEXTURE3D_DESC и D3D11_BUFFER_DESC.
Различия между Direct3D 9 и Direct3D 10/11: В Direct3D 9 укажите тип памяти, в которую должен быть создан ресурс во время создания ресурса (с помощью D3DPOOL). Задача приложения заключалась в том, чтобы решить, какой пул памяти обеспечит наилучшее сочетание функциональных возможностей и производительности. В Direct3D 10/11 приложение больше не указывает тип памяти (пул) для создания ресурса. Вместо этого вы указываете предполагаемое использование ресурса и позволяете среде выполнения (совместно с драйвером и диспетчером памяти) выбрать тип памяти, который обеспечит оптимальную производительность. |
Ограничения использования ресурсов
Каждое использование определяет компромисс между доступностью ЦП и доступностью для GPU. Как правило, более высокий уровень производительности для одного из этих двух процессоров означает более низкий уровень производительности для другого. В обоих случаях используются D3D11_USAGE_DEFAULT и D3D11_USAGE_STAGING . D3D11_USAGE_DEFAULT почти полностью ограничивает доступ к GPU. D3D11_USAGE_STAGING почти полностью ограничивает доступ к ЦП и разрешает только передачу данных (копирование) ресурса между GPU и ЦП. Эти операции копирования можно выполнять с помощью методов ID3D11DeviceContext::CopySubresourceRegion и ID3D11DeviceContext::CopyResource . Эти методы копирования также можно использовать для копирования данных между двумя ресурсами одного и того же использования. Вы также можете использовать метод ID3D11DeviceContext::UpdateSubresource для копирования памяти непосредственно из указателя ЦП на любой ресурс, наиболее полезный ресурс с D3D11_USAGE_DEFAULT.D3D11_USAGE_DYNAMIC использование — это особый случай, который оптимизирует поток данных от ЦП к GPU, когда ЦП создает эти данные в режиме реального времени и отправляет эти данные с высокой частотой. D3D11_USAGE_DYNAMIC обычно используется для ресурсов с данными вершин и буферов констант. Используйте методы ID3D11DeviceContext::Map и ID3D11DeviceContext::Unmap для записи данных в эти ресурсы. Для достижения максимальной производительности данных, потребляемых последовательно, например данных вершин, используйте последовательность D3D11_MAP_WRITE_NO_OVERWRITE и D3D11_MAP_WRITE_DISCARD . Дополнительные сведения об этой последовательности см. в разделе Common Usage of D3D11_MAP_WRITE_DISCARD with D3D11_MAP_WRITE_NO_OVERWRITE.
D3D11_USAGE_IMMUTABLE использование — это еще один особый случай, когда GPU создает данные только один раз при создании ресурса. D3D11_USAGE_IMMUTABLE хорошо подходит для таких данных, как текстуры, так как такие данные обычно считываются в память из файлового формата. Поэтому при создании текстуры с D3D11_USAGE_IMMUTABLE GPU напрямую считывает эту текстуру в память.
Используйте следующую таблицу, чтобы выбрать использование, которое лучше всего описывает, как будет осуществляться доступ к ресурсу ЦП и (или) GPU. Конечно, будут компромиссы производительности.
Использование ресурсов | Default | Динамический | Неизменяемые | Промежуточная |
---|---|---|---|---|
GPU-Read | да | да | да | Да¹ |
GPU-Write | да | Да¹ | ||
CPU-Read | Да¹ | |||
CPU-Write | да | Да¹ |
1 — чтение или запись в GPU ресурса с D3D11_USAGE_STAGING использование ограничено операциями копирования. Для этих операций копирования используйте ID3D11DeviceContext::CopySubresourceRegion и ID3D11DeviceContext::CopyResource . Кроме того, так как форматы трафаретов глубины и макеты с несколькими выборками являются подробными сведениями о реализации конкретной архитектуры GPU, операционная система не может предоставлять эти форматы и макеты ЦП в целом. Таким образом, промежуточные ресурсы не могут быть буфером трафарета глубины или целевым объектом отрисовки с несколькими выборками.
Параметры привязки ресурсов
Чтобы повысить производительность, не все параметры использования ресурсов можно использовать в качестве входных или выходных ресурсов в конвейере. В этой таблице указаны эти ограничения.Ресурс можно привязать как | Default | Динамический | Неизменяемые | Промежуточная |
---|---|---|---|---|
Входные данные для этапа | Да² | Да. | да | |
Выходные данные этапа | Да² |
- 2. Если они привязаны как входные и выходные данные с помощью разных представлений, каждое представление должно использовать разные подресурсы.
- 3. Ресурс можно создать только с одним вложенным ресурсом. Ресурс не может быть массивом текстур. Ресурс не может быть цепочкой MIP-карты.
Требования
Требование | Значение |
---|---|
Заголовок | d3d11.h |