> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# D3D12_FEATURE_DATA_ARCHITECTURE

> 提供有关适配器架构的详细信息,以便你的应用程序可以更好地针对某些适配器属性进行优化。

提供有关适配器架构的详细信息,以便你的应用程序可以更好地针对某些适配器属性进行优化。
<div class="alert">**注意**  此结构已被 [D3D12\_FEATURE\_DATA\_ARCHITECTURE1](/reference/graphics/d3d12/structs/d3d12_feature_data_architecture1_public) 结构取代。如果你的应用程序针对 Windows 10 版本 1703(创意者更新)或更高版本,请改用 **D3D12\_FEATURE\_DATA\_ARCHITECTURE1**(和 [D3D12\_FEATURE\_ARCHITECTURE1](/reference/graphics/d3d12/enums/d3d12_feature_public))。</div><div> </div>

## 语法

```cpp theme={null}
typedef struct D3D12_FEATURE_DATA_ARCHITECTURE
{
    UINT NodeIndex;
    BOOL TileBasedRenderer;
    BOOL UMA;
    BOOL CacheCoherentUMA;
} D3D12_FEATURE_DATA_ARCHITECTURE
```

### 成员

*NodeIndex*\
类型:UINT

在多适配器操作中,这指示设备的哪个物理适配器是相关的。
请参阅[多适配器系统](https://learn.microsoft.com/en-us/windows/win32/direct3d12/multi-engine)。
在调用 [CheckFeatureSupport](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public) 之前由应用程序填写 **NodeIndex**,因为应用程序可以检索每个适配器架构的详细信息。

*TileBasedRenderer*\
类型:BOOL

指定硬件和驱动程序是否支持基于图块的渲染器。
如果硬件和驱动程序支持基于图块的渲染器,则运行时将此成员设置为 **TRUE**。

*UMA*\
类型:BOOL

指定硬件和驱动程序是否支持 UMA。
如果硬件和驱动程序支持 UMA,则运行时将此成员设置为 **TRUE**。

*CacheCoherentUMA*\
类型:BOOL

指定硬件和驱动程序是否支持缓存一致的 UMA。
如果硬件和驱动程序支持缓存一致的 UMA,则运行时将此成员设置为 **TRUE**。

## 备注

<h3><a id="How_to_use_UMA_and_CacheCoherentUMA" /><a id="how_to_use_uma_and_cachecoherentuma" /><a id="HOW_TO_USE_UMA_AND_CACHECOHERENTUMA" />如何使用 UMA 和 CacheCoherentUMA</h3>
D3D12 应用程序应关注管理内存驻留并提供最佳堆属性。
D3D12 应用程序可以通过仅管理 [D3D12\_HEAP\_TYPE](/reference/graphics/d3d12/enums/d3d12_heap_type_public)\_DEFAULT 堆中资源的驻留状态,以保持简化并在许多 GPU 架构上合理运行。
这些应用程序只需要针对 DXGI\_MEMORY\_SEGMENT\_GROUP\_LOCAL 调用 [IDXGIAdapter3::QueryVideoMemoryInfo](https://learn.microsoft.com/en-us/windows/win32/api/dxgi1_4/nf-dxgi1_4-idxgiadapter3-queryvideomemoryinfo),并且它们必须容忍 D3D12\_HEAP\_TYPE\_UPLOAD 和 D3D12\_HEAP\_TYPE\_READBACK 来自同一内存段组。

然而,这样一个简单的设计对于突破极限的应用程序来说过于受限。
因此,D3D12\_FEATURE\_DATA\_ARCHITECTURE 帮助应用程序更好地针对底层适配器属性进行优化。

一些应用程序可能希望针对独立适配器更好地优化,并承担管理系统内存和视频内存预算的额外复杂性。
如果上传堆的大小与默认纹理的大小相当,则内存利用率几乎翻倍是可用的。
在支持这种优化时,应用程序可以检测两个驻留预算或识别 **UMA** 为 **false**。

一些应用程序可能希望针对集成/UMA 适配器更好地优化,特别是那些希望延长移动设备电池寿命的应用程序。
简单的 D3D12 应用程序被迫在具有不同归属的堆之间复制数据,而这在 UMA 上并不总是必要的。
但是,UMA 属性本身包含 GPU 设计中相当模糊的灰色地带。
不要假设 UMA 意味着所有 GPU 可访问的内存都可以自由地成为 CPU 可访问的,因为它并非如此。
有一个更符合这种类型思维的属性:**CacheCoherentUMA**。

当 **CacheCoherentUMA** 为 **false** 时,一个单一驻留预算可用,但 UMA 设计通常从三种堆归属中受益。
确实存在通过明智地使用提供内存的 CPU 访问的上传和回读资源和堆来消除资源复制的机会。
然而,这些机会并不明确。
因此,应用程序应该谨慎;建议在各种"UMA"系统上进行实验,因为可能需要启用或排除某些设备 ID。
建议了解 GPU 内存架构以及堆类型如何转换为缓存属性。
成功的可行性可能取决于每个处理器读取或写入数据的频率、数据访问的大小和局部性等。
对于高级开发人员:当 **UMA** 为 true 而 **CacheCoherentUMA** 为 **false** 时,这些适配器最独特的特征是上传堆仍然是写入合并的。
但是,某些 UMA 适配器可以从默认堆和上传堆的无 CPU 访问和写入合并属性中受益。
有关详细信息,请参阅 [GetCustomHeapProperties](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_getcustomheapproperties_public)。

当 **CacheCoherentUMA** 为 true 时,应用程序可以更强烈地考虑放弃堆的归属,并在任何地方使用与上传堆等效的自定义堆。
零拷贝 UMA 优化更普遍地受到鼓励,因为更多场景将只是从共享使用中受益。
内存模型非常有利于更多场景和更广泛的采用。
可能仍然存在一些不易获得收益的极端情况,但它们应该比其他选项更罕见且危害更小。
对于高级开发人员:**CacheCoherentUMA** 意味着内存层次结构中的大量缓存在 CPU 和 GPU 之间也被统一或集成。
最独特的可观察特征是,在 **CacheCoherentUMA** 上上传堆实际上是回写的。
对于这些架构,在上传堆上使用写入合并通常是不利的。

绝大多数单适配器应用程序应忽略低级细节。
像往常一样,单适配器应用程序可以简化环境并确保 CPU 对上传堆的写入使用写入合并友好的模式。
低级细节有助于强化多适配器应用程序的概念。
多适配器应用程序可能需要充分了解适配器架构属性,以选择最佳自定义堆属性,以便在适配器之间有效地移动数据。

## 要求

**头文件:** d3d12\_xs.h 或 d3d12\_x.h\
**库:** d3d12\_xs.lib 或 d3d12\_x.lib\
**支持的平台**:XBOX Series 主机和 XBOX One 系列

## 另请参阅

[核心结构](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)

[D3D12\_FEATURE](/reference/graphics/d3d12/enums/d3d12_feature_public)


## Related topics

- [D3D12_FEATURE_DATA_ARCHITECTURE1](/zh-CN/reference/graphics/d3d12/structs/d3d12_feature_data_architecture1_public.md)
- [D3D12_FEATURE](/zh-CN/reference/graphics/d3d12/enums/d3d12_feature_public.md)
- [D3D12_HEAP_TYPE](/zh-CN/reference/graphics/d3d12/enums/d3d12_heap_type_public.md)
- [D3D12_FEATURE_DATA_D3D12_OPTIONS5](/zh-CN/reference/graphics/d3d12/structs/d3d12_feature_data_d3d12_options5_public.md)
- [D3D12_FEATURE_DATA_D3D12_OPTIONS](/zh-CN/reference/graphics/d3d12/structs/d3d12_feature_data_d3d12_options_public.md)
