> ## 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_ARCHITECTURE1

> 提供每個配接器架構的詳細資料，讓您的應用程式可以針對特定配接器屬性進行更好的最佳化。

提供每個配接器架構的詳細資料，讓您的應用程式可以針對特定配接器屬性進行更好的最佳化。
<div class="alert">**注意**  此結構是在 Windows 10 版本 1703 (Creators Update) 中推出，取代 [D3D12\_FEATURE\_DATA\_ARCHITECTURE](/zh-TW/reference/graphics/d3d12/structs/d3d12_feature_data_architecture_public) 結構。如果您的應用程式以 Windows 10 版本 1703 (Creators Update) 或更新版本為目標，請使用 **D3D12\_FEATURE\_DATA\_ARCHITECTURE1** (以及 [D3D12\_FEATURE\_ARCHITECTURE1](/zh-TW/reference/graphics/d3d12/enums/d3d12_feature_public))。</div><div> </div>

## 語法

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

### 成員

*NodeIndex*\
類型：UINT

在多重配接器作業中，這表示裝置的哪一個實體配接器是相關的。
請參閱[多重配接器系統](https://learn.microsoft.com/en-us/windows/win32/direct3d12/multi-engine)。
**NodeIndex** 由應用程式在呼叫 [CheckFeatureSupport](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public) 之前填入，因為應用程式可以擷取每個配接器架構的詳細資料。

*TileBasedRenderer*\
類型：BOOL

指定硬體和驅動程式是否支援以圖格為基礎的轉譯器。
如果硬體和驅動程式支援以圖格為基礎的轉譯器，執行階段會將此成員設定為 **TRUE**。

*UMA*\
類型：BOOL

指定硬體和驅動程式是否支援 UMA。
如果硬體和驅動程式支援 UMA，執行階段會將此成員設定為 **TRUE**。

*CacheCoherentUMA*\
類型：BOOL

指定硬體和驅動程式是否支援快取一致 UMA。
如果硬體和驅動程式支援快取一致 UMA，執行階段會將此成員設定為 **TRUE**。

*IsolatedMMU*\
類型：BOOL

[SAL](https://learn.microsoft.com/en-us/visualstudio/code-quality/annotating-structs-and-classes): <code>*Out*</code>

指定硬體和驅動程式是否支援隔離的記憶體管理單元 (MMU)。
如果 GPU 遵循 CPU 分頁表屬性，例如 **MEM\_WRITE\_WATCH** (如需詳細資訊，請參閱 [VirtualAlloc](https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc)) 和 **PAGE\_READONLY** (如需詳細資訊，請參閱[記憶體保護常數](https://learn.microsoft.com/en-us/windows/win32/Memory/memory-protection-constants))，執行階段會將此成員設定為 **TRUE**。

如果為 **TRUE**，應用程式必須注意不要讓 GPU 使用具有這些分頁表屬性的記憶體，因為 GPU 可能會以非預期的方式觸發這些分頁表屬性。例如，GPU 寫入作業的粒度可能比應用程式預期的更粗，特別是從著色器內部進行的寫入。某些寫入監看分頁可能看起來已變更，即使 GPU 寫入如何影響它們並不明顯。與上傳和回讀堆積使用案例相關聯的 GPU 作業可與寫入監看分頁良好地搭配運作，但偶爾可能會產生可安全忽略的誤判。

## 備註

<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](/zh-TW/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」系統上進行實驗，因為可能需要啟用或排除特定裝置識別碼。
建議了解 GPU 記憶體架構，以及堆積類型如何轉換為快取屬性。
成功的可行性可能取決於每個處理器讀取或寫入資料的頻率、資料存取的大小和區域性等。
進階開發人員注意：當 **UMA** 為 true 且 **CacheCoherentUMA** 為 **false** 時，這些配接器最獨特的特性是上傳堆積仍為寫入合併。
不過，某些 UMA 配接器會同時受益於預設堆積和上傳堆積的無 CPU 存取和寫入合併屬性。
如需詳細資訊，請參閱 [GetCustomHeapProperties](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_getcustomheapproperties_public)。

當 **CacheCoherentUMA** 為 true 時，應用程式可以更積極地考慮放棄堆積的屬性，並在所有地方使用與上傳堆積相當的自訂堆積。
我們更普遍地建議使用零複製 UMA 最佳化，例如
[WriteToSubresource](/zh-TW/reference/graphics/d3d12/interfaces/id3d12resource/methods/id3d12resource_writetosubresource_public) 所提供的最佳化，因為更多案例將會受益於共用使用。
記憶體模型非常有利於更多案例和更廣泛的採用。
仍可能存在一些不容易獲得效益的極端案例，但應該比其他選項更罕見，且危害更小。
進階開發人員注意：**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](/zh-TW/reference/graphics/d3d12/enums/d3d12_feature_public)


## Related topics

- [D3D12_FEATURE_DATA_ARCHITECTURE](/zh-TW/reference/graphics/d3d12/structs/d3d12_feature_data_architecture_public.md)
- [D3D12_FEATURE](/zh-TW/reference/graphics/d3d12/enums/d3d12_feature_public.md)
- [D3D12_DESCRIPTOR_RANGE1](/zh-TW/reference/graphics/d3d12/structs/d3d12_descriptor_range1_public.md)
- [D3D12_ROOT_DESCRIPTOR_TABLE1](/zh-TW/reference/graphics/d3d12/structs/d3d12_root_descriptor_table1_public.md)
- [D3D12_FEATURE_DATA_D3D12_OPTIONS5](/zh-TW/reference/graphics/d3d12/structs/d3d12_feature_data_d3d12_options5_public.md)
