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


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

Указывает параметры кучи, например, может ли куча содержать текстуры, а также указывает, являются ли ресурсы общими для адаптеров.

Синтаксис

typedef enum D3D12_HEAP_FLAGS {
  D3D12_HEAP_FLAG_NONE = 0,
  D3D12_HEAP_FLAG_SHARED = 0x1,
  D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4,
  D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8,
  D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
  D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
  D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
  D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100,
  D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200,
  D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 0x400,
  D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 0x800,
  D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 0x1000,
  D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING,
  D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
  D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84
} ;

Константы

 
D3D12_HEAP_FLAG_NONE
Значение: 0
Параметры не указаны.
D3D12_HEAP_FLAG_SHARED
Значение: 0x1
Кучи общий доступ. Ознакомьтесь с общими кучами.
D3D12_HEAP_FLAG_DENY_BUFFERS
Значение: 0x4
Куча не может содержать буферы.
D3D12_HEAP_FLAG_ALLOW_DISPLAY
Значение: 0x8
Куча может содержать поверхности цепочки буферов.
D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER
Значение: 0x20
Куча может совместно использовать ресурсы между адаптерами. Ознакомьтесь с общими кучами. Защищенный сеанс нельзя смешать с ресурсами, общими для всех адаптеров.
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
Значение: 0x40
Куча не может хранить текстуры target (RT) и (или) Depth-Stencil (DS).
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
Значение: 0x80
Кучи не могут содержать ресурсы с D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D или D3D12_RESOURCE_DIMENSION_TEXTURE3D, если D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET или D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL нет. См. D3D12_RESOURCE_DIMENSION и D3D12_RESOURCE_FLAGS.
D3D12_HEAP_FLAG_HARDWARE_PROTECTED
Значение: 0x100
Неподдерживаемые. Не используйте.
D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
Значение: 0x200
Куча поддерживает MEM_WRITE_WATCH функциональные возможности, что приводит к тому, что система отслеживает страницы, записанные в зафиксированную область памяти. Этот флаг нельзя объединить с флагами D3D12_HEAP_TYPE_DEFAULT или D3D12_CPU_PAGE_PROPERTY_UNKNOWN. Приложения не рекомендуется использовать этот флаг, так как он запрещает использование этих функций средствами.
D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS
Значение: 0x400
Гарантирует, что атомарные операции будут атомарными в памяти этой кучи, в соответствии с компонентами, способными видеть память.

Создание кучи с этим флагом завершится ошибкой в любом из этих условий.
— Тип кучи D3D12_HEAP_TYPE_DEFAULT, а куча может быть видна на нескольких узлах, но устройство не поддерживает D3D12_CROSS_NODE_SHARING_TIER_3.
— Куча видна для ЦП, но тип кучи неD3D12_HEAP_TYPE_CUSTOM.

Обратите внимание, что кучи с этим флагом могут быть ограниченным ресурсом в некоторых системах.
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT
Значение: 0x800
Куча создается в неживом состоянии и должна быть создана резидентом с помощью ID3D12Device::MakeResident или ID3D12Device3::EnqueueMakeResident.

По умолчанию последним шагом создания кучи является создание кучи, поэтому этот флаг пропускает этот шаг и позволяет приложению решить, когда это сделать.
D3D12_HEAP_FLAG_CREATE_NOT_ZEROED
Значение: 0x1000
Позволяет ОС не нулю созданной куче. По умолчанию выделенные ресурсы и кучи почти всегда ноль при создании. Этот флаг позволяет вычислиться в некоторых сценариях. Однако это не гарантирует. Например, память, полученная из других процессов, по-прежнему должна быть ноль для защиты данных и изоляции процессов. Это может снизить затраты на создание кучи.
D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES
Значение: 0
Куча может хранить все типы буферов и (или) текстур. Это псевдоним; Дополнительные сведения см. в разделе "Псевдонимы" в разделе "Примечания".
D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS
Значение: 0xc0
Куча разрешена только для хранения буферов. Это псевдоним; Дополнительные сведения см. в разделе "Псевдонимы" в разделе "Примечания".
D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES
Значение: 0x44
Кучи разрешено хранить только текстуры, отличные от RT, не ds. Это псевдоним; Дополнительные сведения см. в разделе "Псевдонимы" в разделе "Примечания".
D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES
Значение: 0x84
Куча разрешена только для хранения текстур RT и (или) DS. Это псевдоним; Дополнительные сведения см. в разделе "Псевдонимы" в разделе "Примечания".

Замечания

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

Следующие флаги кучи должны использоваться с ID3D12Device::CreateHeap, но будут автоматически заданы для неявных куч, созданных ID3D12Device::CreateCommittedResource. Адаптеры, поддерживающие только кучу уровня 1, должны задать два из трех следующих флагов.
Ценность Описание
D3D12_HEAP_FLAG_DENY_BUFFERS Куча не может содержать ресурсы с D3D12_RESOURCE_DIMENSION_BUFFER (которая является константой перечисления D3D12_RESOURCE_DIMENSION).
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES Куча не может содержать ресурсы с D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D или D3D12_RESOURCE_DIMENSION_TEXTURE3D вместе с D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET или D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL. (Последние два элемента являются константами перечисления D3D12_RESOURCE_FLAGS.)
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES Кучи не могут содержать ресурсы с D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D или D3D12_RESOURCE_DIMENSION_TEXTURE3D, если D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET и D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL отсутствуют.

псевдонимы

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

Существуют следующие псевдонимы, поэтому будьте осторожны при выполнении битовых манипуляций:

  • D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0 и поддерживается только на куче 2 и больше.
  • D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES | D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS | D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS | D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES

отображаемых куч

Отображаемые кучи чаще всего создаются цепочкой буферов для презентации, чтобы включить сканирование на монитор.

Отображаемые кучы указываются с элементом D3D12_HEAP_FLAG_ALLOW_DISPLAY перечисления D3D12_HEAP_FLAGS.

Приложения могут создавать отображаемые кучи за пределами цепочки буферов; но на самом деле не может представить с ними. Этот флаг не поддерживается CreateHeap и может использоваться только с CreateCommittedResource с D3D12_HEAP_TYPE_DEFAULT.

Дополнительные ограничения для D3D12_RESOURCE_DESC применяются к ресурсу, созданному с отображаемыми кучами.

  • Формат должен поддерживаться не только устройством, но и поддерживаться для сканирования. См. сведения об использовании D3D12_FORMAT_SUPPORT1_DISPLAY члена D3D12_FORMAT_SUPPORT1.
  • измерение должно быть D3D12_RESOURCE_DIMENSION_TEXTURE2D.
  • выравнивания должно быть 0.
  • ArraySize может иметь значение 1 или 2.
  • MipLevels должно быть 1.
  • SampleDesc должен иметь значение Count равным 1 и Quality задано значение 0.
  • макет должен быть D3D12_TEXTURE_LAYOUT_UNKNOWN.
  • D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL и D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER являются недопустимыми флагами.

Требования

Требование Ценность
заголовка d3d12.h

См. также

CD3DX12_HEAP_DESC

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

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