перечисление D3D12_HEAP_TYPE (d3d12.h)

Указывает тип кучи. При резидентном расположении кучи находятся в определенном пуле физической памяти с определенными свойствами кэша ЦП.

Синтаксис

typedef enum D3D12_HEAP_TYPE {
  D3D12_HEAP_TYPE_DEFAULT = 1,
  D3D12_HEAP_TYPE_UPLOAD = 2,
  D3D12_HEAP_TYPE_READBACK = 3,
  D3D12_HEAP_TYPE_CUSTOM = 4,
  D3D12_HEAP_TYPE_GPU_UPLOAD
} ;

Константы

 
D3D12_HEAP_TYPE_DEFAULT
Значение: 1
Задает кучу по умолчанию. Этот тип кучи имеет наибольшую пропускную способность для GPU, но не может обеспечить доступ к ЦП. GPU может выполнять чтение и запись в память из этого пула, а барьеры перехода ресурсов могут быть изменены. Большинство кучи и ресурсов, как ожидается, будут расположены здесь и обычно заполняются через ресурсы в кучах отправки.
D3D12_HEAP_TYPE_UPLOAD
Значение: 2
Указывает кучу, используемую для отправки. Этот тип кучи имеет доступ к ЦП, оптимизированный для отправки на GPU, но не имеет максимальной пропускной способности для GPU. Этот тип кучи лучше всего подходит для данных cpu-write-once, GPU-read-once; но однократное чтение GPU является более строгим, чем необходимо. Gpu read-once-or-from-cache является приемлемым вариантом использования данных; но такое использование трудно оценить из-за разных конструкций и размеров кэша GPU. Если вы сомневаетесь, придерживайтесь определения gpu-read-once или профилируйте разницу между копированием данных в кучу _DEFAULT и чтением данных из _UPLOAD куче.

Ресурсы в этой куче должны создаваться с помощью D3D12_RESOURCE_STATE_GENERIC_READ и не могут быть изменены. Адрес ЦП для таких кучи обычно не эффективен для операций чтения ЦП.

Ниже приведены типичные варианты использования _UPLOAD куч.

  • Инициализация ресурсов в _DEFAULT куче с данными из ЦП.

  • Отправка динамических данных в буфер констант, многократно считываемых каждой вершиной или пикселем.



Следующие данные, скорее всего, не являются хорошими для _UPLOAD куч:

  • Переинициализация содержимого ресурса для каждого кадра.

  • Отправка константных данных, которые используются только при каждом вызове Draw, где каждый draw использует нетривиальный объем других данных.

D3D12_HEAP_TYPE_READBACK
Значение: 3
Указывает кучу, используемую для обратного чтения. Этот тип кучи имеет доступ к ЦП, оптимизированный для чтения данных из GPU, но не имеет максимальной пропускной способности для GPU. Этот тип кучи лучше всего подходит для данных, доступных для чтения ЦП, однократной записи GPU. Поведение кэша ЦП выполняется обратной записью, что способствует множеству операций чтения ЦП вложенной линии кэша.

Ресурсы в этой куче должны создаваться с D3D12_RESOURCE_STATE_COPY_DEST и не могут быть изменены.
D3D12_HEAP_TYPE_CUSTOM
Значение: 4
Задает настраиваемую кучу. Приложение может напрямую указывать свойства пула памяти и кэша ЦП, что может быть полезно для оптимизации UMA, нескольких подсистем, нескольких адаптеров или других особых случаев. Для этого приложение должно понимать архитектуру адаптера, чтобы сделать правильный выбор. Дополнительные сведения см. в разделе

D3D12_FEATURE_ARCHITECTURE
D3D12_FEATURE_DATA_ARCHITECTURE и
GetCustomHeapProperties.

Комментарии

Это перечисление используется следующими элементами API:

Типы кучи делятся на две категории: абстрактные типы кучи и пользовательские типы кучи.

Ниже приведены абстрактные типы кучи:

  • D3D12_HEAP_TYPE_DEFAULT
  • D3D12_HEAP_TYPE_UPLOAD
  • D3D12_HEAP_TYPE_READBACK
Ниже приведен пользовательский тип кучи:
  • D3D12_HEAP_TYPE_CUSTOM
Абстрактные типы кучи (_DEFAULT, _UPLOAD и _READBACK) полезны для упрощения написания приложений, не зависящих от адаптера, так как таким приложениям не нужно знать об архитектуре памяти адаптера. Чтобы использовать абстрактный тип кучи для упрощения записи приложений, не зависящих от адаптера, приложение, по сути, обрабатывает адаптер как дискретный адаптер или адаптер NUMA. Но использование типов кучи обеспечивает эффективное преобразование адаптеров UMA. Приложения, нейтральные к архитектуре адаптера, должны предполагать наличие двух пулов памяти, где пул с наибольшей пропускной способностью GPU не может обеспечить доступ к ЦП. Пул с наименьшей пропускной способностью GPU может иметь доступ к ЦП; но должен быть оптимизирован для отправки в GPU или обратного чтения с GPU.

Обратите внимание, что текстуры (в отличие от буферов) не могут быть типами кучи UPLOAD или READBACK.

Требования

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

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

Перечисления core

Кучи дескрипторов