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


перечисление 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. Этот тип кучи лучше всего подходит для данных ЦП-записи один раз, GPU-read-once; но GPU-чтение один раз является более строгим, чем необходимо. GPU-read-once-or-from-cache является приемлемым вариантом использования для данных; но такое использование трудно судить из-за разных конструкций и размеров кэша GPU. Если сомневается, придерживайтесь определения GPU-read-once или профилируйте разницу во многих GPU между копированием данных в _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

См. также

основные перечисления

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