注意 此結構是在 Windows 10 版本 1703 (Creators Update) 中推出,取代 D3D12_FEATURE_DATA_ARCHITECTURE 結構。如果您的應用程式以 Windows 10 版本 1703 (Creators Update) 或更新版本為目標,請使用 D3D12_FEATURE_DATA_ARCHITECTURE1 (以及 D3D12_FEATURE_ARCHITECTURE1)。
語法
成員
NodeIndex類型:UINT 在多重配接器作業中,這表示裝置的哪一個實體配接器是相關的。 請參閱多重配接器系統。 NodeIndex 由應用程式在呼叫 CheckFeatureSupport 之前填入,因為應用程式可以擷取每個配接器架構的詳細資料。 TileBasedRenderer
類型:BOOL 指定硬體和驅動程式是否支援以圖格為基礎的轉譯器。 如果硬體和驅動程式支援以圖格為基礎的轉譯器,執行階段會將此成員設定為 TRUE。 UMA
類型:BOOL 指定硬體和驅動程式是否支援 UMA。 如果硬體和驅動程式支援 UMA,執行階段會將此成員設定為 TRUE。 CacheCoherentUMA
類型:BOOL 指定硬體和驅動程式是否支援快取一致 UMA。 如果硬體和驅動程式支援快取一致 UMA,執行階段會將此成員設定為 TRUE。 IsolatedMMU
類型:BOOL SAL:
Out
指定硬體和驅動程式是否支援隔離的記憶體管理單元 (MMU)。
如果 GPU 遵循 CPU 分頁表屬性,例如 MEM_WRITE_WATCH (如需詳細資訊,請參閱 VirtualAlloc) 和 PAGE_READONLY (如需詳細資訊,請參閱記憶體保護常數),執行階段會將此成員設定為 TRUE。
如果為 TRUE,應用程式必須注意不要讓 GPU 使用具有這些分頁表屬性的記憶體,因為 GPU 可能會以非預期的方式觸發這些分頁表屬性。例如,GPU 寫入作業的粒度可能比應用程式預期的更粗,特別是從著色器內部進行的寫入。某些寫入監看分頁可能看起來已變更,即使 GPU 寫入如何影響它們並不明顯。與上傳和回讀堆積使用案例相關聯的 GPU 作業可與寫入監看分頁良好地搭配運作,但偶爾可能會產生可安全忽略的誤判。
備註
如何使用 UMA 和 CacheCoherentUMA
D3D12 應用程式應該重視管理記憶體駐留,並提供最佳的堆積屬性。 D3D12 應用程式只要管理 D3D12_HEAP_TYPE_DEFAULT 堆積中資源的駐留,就能保持簡化,並在許多 GPU 架構上合理地良好執行。 這些應用程式只需要針對 DXGI_MEMORY_SEGMENT_GROUP_LOCAL 呼叫 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。 當 CacheCoherentUMA 為 true 時,應用程式可以更積極地考慮放棄堆積的屬性,並在所有地方使用與上傳堆積相當的自訂堆積。 我們更普遍地建議使用零複製 UMA 最佳化,例如 WriteToSubresource 所提供的最佳化,因為更多案例將會受益於共用使用。 記憶體模型非常有利於更多案例和更廣泛的採用。 仍可能存在一些不容易獲得效益的極端案例,但應該比其他選項更罕見,且危害更小。 進階開發人員注意:CacheCoherentUMA 表示記憶體階層中有相當數量的快取也在 CPU 和 GPU 之間統一或整合。 最獨特的可觀察特性是,在 CacheCoherentUMA 上,上傳堆積實際上是回寫。 對於這些架構,在上傳堆積上使用寫入合併通常是有害的。 絕大多數單一配接器應用程式應該忽略這些低階詳細資料。 與往常一樣,單一配接器應用程式可以簡化整體情況,並確保 CPU 寫入上傳堆積時使用適合寫入合併的模式。 低階詳細資料有助於強化多重配接器應用程式的概念。 多重配接器應用程式可能需要充分了解配接器架構屬性,才能選擇最佳的自訂堆積屬性,以便在配接器之間有效率地移動資料。需求
標頭: d3d12_xs.h 或 d3d12_x.h程式庫: d3d12_xs.lib 或 d3d12_x.lib
支援的平台: XBOX Series 主機與 XBOX One 系列
