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_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。 - 堆是 CPU 可见的,但堆类型 不是D3D12_HEAP_TYPE_CUSTOM。 请注意,在某些系统上,具有此标志的堆可能是有限的资源。 |
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT 值: 0x800 堆是在非常驻状态中创建的,必须使用 ID3D12Device::MakeResident 或 ID3D12Device3::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 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈