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_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 |