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_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_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_SUPPORT1D3D12_FORMAT_SUPPORT1_DISPLAY成员的使用。
  • 维度 必须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

核心枚举

描述符堆