D3D12_FEATURE_DATA_ARCHITECTURE1結構 (d3d12.h)
提供每個配接器架構詳細數據的詳細數據,讓您的應用程式可以更妥善地針對特定配接器屬性進行優化。
語法
typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1 {
UINT NodeIndex;
BOOL TileBasedRenderer;
BOOL UMA;
BOOL CacheCoherentUMA;
BOOL IsolatedMMU;
} D3D12_FEATURE_DATA_ARCHITECTURE1;
成員
NodeIndex
在多配接器作業中,這表示裝置的實體適配卡是相關的。 請參閱 多配接器系統。 NodeIndex 會在呼叫 checkFeatureSupport之前,由應用程式填入,因為應用程式可以擷取每個配接器架構的詳細數據。
TileBasedRenderer
指定硬體和驅動程式是否支援以磚為基礎的轉譯器。 如果硬體和驅動程式支援磚式轉譯器,運行時間會將這個成員設定為 TRUE。
UMA
指定硬體和驅動程式是否支援UMA。 如果硬體和驅動程式支援UMA,運行時間會將這個成員設定為 TRUE。
CacheCoherentUMA
指定硬體和驅動程式是否支援快取一致的 UMA。 如果硬體和驅動程式支援快取一致的 UMA,運行時間會將這個成員設定為 TRUE。
IsolatedMMU
SAL: Out
指定硬體和驅動程式是否支援隔離的記憶體管理單元 (MMU)。
運行時間會將此成員設定為 true 如果 GPU 接受 CPU 頁面數據表屬性,例如
如果 TRUE,應用程式必須小心不要將這些分頁表屬性與 GPU 搭配使用記憶體,因為 GPU 可能會以非預期的方式觸發這些分頁表屬性。 例如,GPU 寫入作業可能比應用程式預期的粗略,特別是從著色器內寫入。 某些寫入監看式頁面可能看起來很臟,即使 GPU 寫入如何影響它們也不清楚。 與上傳和讀取回寫堆積使用案例相關聯的 GPU 作業適用於寫入監看頁面,但偶爾可能會產生可以放心忽略的誤判。
言論
如何使用 UMA 和 CacheCoherentUMA
D3D12 應用程式應該關注管理記憶體落地,並提供最佳的堆積屬性。 D3D12 應用程式可以透過管理 D3D12_HEAP_TYPE_DEFAULT 堆積中的資源落地來管理,讓許多 GPU 架構都能保持簡化並正常執行。 這些應用程式只需要呼叫 IDXGIAdapter3::QueryVideoMemoryInfo 以進行DXGI_MEMORY_SEGMENT_GROUP_LOCAL,而且必須能夠容忍該D3D12_HEAP_TYPE_UPLOAD和D3D12_HEAP_TYPE_READBACK來自該相同的記憶體區段群組。不過,對於推送限制的應用程式而言,這種簡單的設計過於受限。 因此,D3D12_FEATURE_DATA_ARCHITECTURE可協助應用程式更妥善地優化基礎配接器屬性。
某些應用程式可能想要更妥善地針對離散適配卡進行優化,並承擔管理系統記憶體和視訊記憶體預算的額外複雜度。 如果上傳堆積的大小與預設紋理的大小相媲美,可以使用記憶體使用率的近一倍。 支援這類優化時,應用程式可以偵測兩個落地預算或辨識 UMAfalse。
某些應用程式可能想要更妥善地針對整合式/UMA 適配卡進行優化,特別是那些想要在行動裝置上延長電池使用時間的應用程式。 簡單的 D3D12 應用程式會在 UMA 上不一定必要時,強制在具有不同屬性的堆積之間複製數據。 不過,UMA 屬性本身包含 GPU 設計的相當模糊的灰色區域。 請勿假設 UMA 表示所有 GPU 可存取的記憶體都可以自由地讓 CPU 存取,因為它不會。 有一個更貼近該類型思維的屬性:CacheCoherentUMA。
當 CacheCoherentUMAfalse時,可以使用單一落地預算,但 UMA 設計通常受益於三個堆積屬性。 透過上傳和讀取資源與堆積的明智使用方式,移除資源複製的機會確實存在,以提供記憶體的CPU存取權。 不過,這樣的機會並不明確。 因此,應用程式應該謹慎;建議在各種「UMA」系統中進行試驗,因為可能需要啟用或排除特定裝置識別碼。 建議您瞭解 GPU 記憶體架構,以及堆積類型如何轉譯為快取屬性。 成功的可行性可能取決於每個處理器讀取或寫入數據的頻率、數據存取的大小和位置等等。對於進階開發人員:當 UMA 為 true 且 快取CoherentUMAfalse時,這些配接器最獨特的特性是上傳堆積仍會合併寫入。 不過,某些 UMA 配接器受益於預設和上傳堆積的無 CPU 存取和寫入合併屬性。 如需詳細資訊,請參閱 GetCustomHeapProperties。
當 CacheCoherentUMA 成立時,應用程式可以更強烈地娛樂放棄堆積的屬性,並使用相當於隨處上傳堆積的自定義堆積。
零複製 UMA 優化,例如 WriteToSubresource 所提供的優化,通常會受到鼓勵,因為更多案例只會受益於共用使用量。
記憶體模型非常有利於更多案例和更廣泛的採用。
一些邊角案例可能仍然存在,其中的好處不容易獲得,但它們應該比其他選項少得多,而且有害得多。
對於進階開發人員:CacheCoherentUMA 表示記憶體階層中的大量快取也會在 CPU 和 GPU 之間統一或整合。
最獨特的可觀察特性是上傳堆積實際上是在 cacheCoherentUMA
絕大多數單一配接器應用程式都應該忽略低階詳細數據。 一如往常,單一配接器應用程式可以簡化環境,並確保CPU寫入以上傳堆積時,會使用可寫入-合併-易記的模式。 較低層級的詳細數據有助於強化多配接器應用程式的概念。 多配接器應用程式可能需要瞭解適配卡架構屬性,以便選擇最佳的自定義堆積屬性,以有效率地在配接器之間移動數據。
要求
要求 | 價值 |
---|---|
標頭 | d3d12.h |