Поделиться через


Перечисление 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, операционная система не может предоставлять эти форматы и макеты ЦП в целом. Таким образом, промежуточные ресурсы не могут быть буфером трафарета глубины или целевым объектом отрисовки с несколькими выборками.

Примечание Технически можно использовать ID3D11DeviceContext::UpdateSubresource для копирования в ресурс с любым использованием, кроме D3D11_USAGE_IMMUTABLE. Однако рекомендуется использовать ID3D11DeviceContext::UpdateSubresource , чтобы обновить только ресурс с D3D11_USAGE_DEFAULT. Рекомендуется использовать ID3D11DeviceContext::Map и ID3D11DeviceContext::Unmap для обновления ресурсов с помощью D3D11_USAGE_DYNAMIC , так как это конкретная цель D3D11_USAGE_DYNAMIC ресурсов и поэтому является наиболее оптимизированным путем.
 
Обратите вниманиеD3D11_USAGE_DYNAMIC ресурсы используют определенные аппаратные возможности. Поэтому используйте их экономно. Драйвер дисплея обычно выделяет память для D3D11_USAGE_DYNAMIC ресурсов с помощью алгоритма кэширования, который используется для записи ЦП и препятствует выполнению операций чтения ЦП. Кроме того, память D3D11_USAGE_DYNAMIC ресурсов может даже не совпадать для последовательных вызовов ID3D11DeviceContext::Map. Поэтому не следует ожидать высокой производительности или даже согласованности операций чтения ЦП из D3D11_USAGE_DYNAMIC ресурсов.
 
ПримечаниеID3D11DeviceContext::CopyStructureCount — это особый случай копирования с GPU на ЦП. Используйте ID3D11DeviceContext::CopyStructureCount только с неупорядоченными представлениями доступа (UAV) буферов.
 

Параметры привязки ресурсов

Чтобы повысить производительность, не все параметры использования ресурсов можно использовать в качестве входных или выходных ресурсов в конвейере. В этой таблице указаны эти ограничения.
Ресурс можно привязать как Default Динамический Неизменяемые Промежуточная
Входные данные для этапа Да² Да. да
Выходные данные этапа Да²
 
  • 2. Если они привязаны как входные и выходные данные с помощью разных представлений, каждое представление должно использовать разные подресурсы.
  • 3. Ресурс можно создать только с одним вложенным ресурсом. Ресурс не может быть массивом текстур. Ресурс не может быть цепочкой MIP-карты.

Требования

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

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

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