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_FLAG_ALLOW_RENDER_TARGET或D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL,否则不允许堆包含具有D3D12_RESOURCE_DIMENSION_TEXTURE1D、D3D12_RESOURCE_DIMENSION_TEXTURE2D或D3D12_RESOURCE_DIMENSION_TEXTURE3D的资源。 请参阅 D3D12_RESOURCE_DIMENSIOND3D12_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
- 堆是 CPU 可见的,但堆类型 不是D3D12_HEAP_TYPE_CUSTOM

请注意,在某些系统上,具有此标志的堆可能是有限的资源。
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT
值: 0x800
堆是在非常驻状态中创建的,必须使用 ID3D12Device::MakeResidentID3D12Device3::EnqueueMakeResident 成为常驻堆。

默认情况下,创建堆的最后一步是使堆驻留,因此此标志将跳过此步骤,并允许应用程序决定何时执行此操作。
D3D12_HEAP_FLAG_CREATE_NOT_ZEROED
值: 0x1000
允许 OS 不将创建的堆归零。 默认情况下,提交的资源和堆在创建时几乎始终为零。 此标志允许在某些情况下执行此标记。 但是,它不能保证。 例如,仍需要将来自其他进程的内存归零,以便进行数据保护和进程隔离。 这可以降低创建堆的开销。
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枚举常 量) D3D12_RESOURCE_DIMENSION_BUFFER (的资源。
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_FLAG_ALLOW_RENDER_TARGET和D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL,否则不允许堆包含具有D3D12_RESOURCE_DIMENSION_TEXTURE1D、D3D12_RESOURCE_DIMENSION_TEXTURE2D或D3D12_RESOURCE_DIMENSION_TEXTURE3D的资源。

别名

此外,还允许支持 堆第 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_FLAGS枚举的 D3D12_HEAP_FLAG_ALLOW_DISPLAY成员指定可显示堆。

应用程序可能会在交换链之外创建可显示的堆;但实际上不能与它们一起出现。 此标志不受 CreateHeap 支持,只能与具有D3D12_HEAP_TYPE_DEFAULT的 CreateCommittedResource 一起使用。

D3D12_RESOURCE_DESC的其他限制适用于使用可显示堆创建的资源。

  • 设备不仅必须支持该格式,而且必须支持扫描输出。请参阅使用 D3D12_FORMAT_SUPPORT1 的 D3D12_FORMAT_SUPPORT1_DISPLAY 成员。
  • 维度 必须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是无效标志。

要求

要求
Header d3d12.h

另请参阅

CD3DX12_HEAP_DESC

核心枚举

描述符堆