перечисление 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
В куче запрещено хранить текстуры целевого объекта отрисовки (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
Куча создается в состоянии non-resident и должна быть резидентом с помощью 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 должно быть задано значение 1, а для свойства значение 0.
  • Макет должен быть D3D12_TEXTURE_LAYOUT_UNKNOWN.
  • D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL и D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER являются недопустимыми флагами.

Требования

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

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

CD3DX12_HEAP_DESC

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

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