D3D12_FEATURE_DATA_ARCHITECTURE Struktur (d3d12.h)
Enthält Details zur Adapterarchitektur, damit Ihre Anwendung für bestimmte Adaptereigenschaften besser optimieren kann.
Syntax
typedef struct D3D12_FEATURE_DATA_ARCHITECTURE {
UINT NodeIndex;
BOOL TileBasedRenderer;
BOOL UMA;
BOOL CacheCoherentUMA;
} D3D12_FEATURE_DATA_ARCHITECTURE;
Angehörige
NodeIndex
Im Betrieb mit mehreren Adaptern gibt dies an, welcher physische Adapter des Geräts relevant ist. Siehe Multiadaptersysteme. NodeIndex- wird von der Anwendung ausgefüllt, bevor CheckFeatureSupport-aufgerufen wird, da die Anwendung Details zur Architektur jedes Adapters abrufen kann.
TileBasedRenderer
Gibt an, ob die Hardware und der Treiber einen kachelbasierten Renderer unterstützen. Die Laufzeit legt dieses Element auf TRUE fest, wenn die Hardware und der Treiber einen kachelbasierten Renderer unterstützen.
UMA
Gibt an, ob die Hardware und der Treiber UMA unterstützen. Die Laufzeit legt dieses Element auf TRUE fest, wenn die Hardware und der Treiber UMA unterstützen.
CacheCoherentUMA
Gibt an, ob die Hardware und der Treiber cachekonsärente UMA unterstützen. Die Laufzeit legt dieses Element auf TRUE- fest, wenn die Hardware und der Treiber Cache-kohärente UMA unterstützen.
Bemerkungen
Verwenden von UMA und CacheCoherentUMA
D3D12-Apps sollten sich um die Verwaltung des Speicherspeichers und die Bereitstellung der optimalen Heap-Eigenschaften kümmern. D3D12-Apps können auf vielen GPU-Architekturen vereinfacht und ordnungsgemäß ausgeführt werden, indem nur die Residency für Ressourcen in D3D12_HEAP_TYPE_DEFAULT Heaps verwaltet wird. Diese Apps müssen nur IDXGIAdapter3::QueryVideoMemoryInfo- für DXGI_MEMORY_SEGMENT_GROUP_LOCAL aufrufen, und sie müssen tolerant sein, dass D3D12_HEAP_TYPE_UPLOAD und D3D12_HEAP_TYPE_READBACK aus derselben Speichersegmentgruppe stammen.Ein so einfaches Design ist jedoch zu eingeschränkt für Anwendungen, die die Grenzen überschreiten. Daher hilft D3D12_FEATURE_DATA_ARCHITECTURE Anwendungen dabei, die zugrunde liegenden Adaptereigenschaften besser zu optimieren.
Einige Anwendungen möchten möglicherweise besser für diskrete Adapter optimieren und die zusätzliche Komplexität der Verwaltung von Systemspeicher- und Videospeicherbudgets übernehmen. Wenn die Größe von Upload-Heaps mit der Größe der Standardtexturen übereinstimmt, ist eine nahezu verdoppelte Speicherauslastung verfügbar. Bei der Unterstützung solcher Optimierungen kann eine Anwendung entweder zwei Residency-Budgets erkennen oder erkennen, UMA-falschist.
Einige Anwendungen möchten möglicherweise besser für integrierte/ UMA-Adapter optimieren, insbesondere diejenigen, die an der Verlängerung der Akkulaufzeit auf mobilen Geräten interessiert sind. Einfache D3D12-Anwendungen werden gezwungen, Daten zwischen Heaps mit unterschiedlichen Zuschreibungen zu kopieren, wenn es nicht immer für UMA erforderlich ist. Die UMA-Eigenschaft umfasst jedoch selbst einen relativ vage grauen Bereich von GPU-Designs. Gehen Sie nicht davon aus, DASS UMA bedeutet, dass der gesamte GPU-speicher frei zugänglich gemacht werden kann, da er nicht. Es gibt eine Eigenschaft, die stärker an diese Art von Denken ausgerichtet ist: CacheCoherentUMA.
Wenn CacheCoherentUMA-falschist, ist ein einzelnes Residency-Budget verfügbar, aber das UMA-Design profitiert in der Regel von den drei Heap-Attributionen. Es gibt Möglichkeiten, das Kopieren von Ressourcen durch eine weise Verwendung von Upload- und Readbackressourcen und Heaps zu entfernen, die CPU-Zugriff auf den Arbeitsspeicher bieten. Solche Chancen sind jedoch nicht klar. Daher sollten Anträge vorsichtig sein; und das Experimentieren über eine Vielzahl von UMA-Systemen ist ratsam, da die Aktivierung oder Schließung bestimmter Geräte-IDs gerechtfertigt sein kann. Ein Verständnis der GPU-Speicherarchitektur und wie Heap-Typen in Cacheeigenschaften übersetzt werden, wird empfohlen. Die Durchführbarkeit des Erfolgs hängt wahrscheinlich davon ab, wie oft jeder Prozessor die Daten liest oder schreibt, wie groß und lokal die Datenzugriffe sind usw. Für fortgeschrittene Entwickler: Wenn UMA- wahr ist und CacheCoherentUMA-falschist, ist das einzigartigste Merkmal für diese Adapter, dass Upload heaps immer noch schreibgeschützt sind. Einige UMA-Adapter profitieren jedoch sowohl von den Eigenschaften ohne CPU-Zugriff als auch von Schreibkombinationen von Standard- und Upload-Heaps. Weitere Informationen finden Sie unter GetCustomHeapProperties-.
Wenn CacheCoherentUMA- wahr ist, können Anwendungen die Zuordnung von Heaps und die Verwendung der benutzerdefinierten Heap-Entsprechung von Upload heaps überall stark unterhalten. Zero-copy UMA-Optimierungen werden im Allgemeinen empfohlen, da mehr Szenarien nur von der gemeinsamen Nutzung profitieren. Das Speichermodell ist sehr förderlich für mehr Szenarien und eine breitere Akzeptanz. Einige Eckfälle können immer noch vorhanden sein, wenn Vorteile nicht leicht zu erhalten sind, aber sie sollten viel seltener und weniger nachteilig als andere Optionen sein. Für fortgeschrittene Entwickler: CacheCoherentUMA bedeutet, dass eine erhebliche Menge der Caches in der Speicherhierarchie auch vereinheitlicht oder zwischen der CPU und GPU integriert ist. Das einzigartigste feststellbare Merkmal ist, dass Upload-Heaps tatsächlich auf CacheCoherentUMAzurückgeschrieben werden. Für diese Architektur ist die Verwendung von Heaps zum Kombinieren von Schreibvorgängen häufig ein Nachteil.
Die Details auf niedriger Ebene sollten von den meisten Einzeladapteranwendungen ignoriert werden. Wie üblich können Einzeladapteranwendungen das Querformat vereinfachen und sicherstellen, dass die CPU-Schreibvorgänge zum Hochladen von Heaps Muster verwenden, die schreibgeschützt sind. Die Details auf niedrigerer Ebene unterstützen die Konzepte für Multiadapteranwendungen. Multiadapteranwendungen müssen wahrscheinlich die Eigenschaften der Adapterarchitektur gut genug verstehen, um die optimalen benutzerdefinierten Heap-Eigenschaften auszuwählen, um Daten effizient zwischen Adaptern zu verschieben.
Anforderungen
Anforderung | Wert |
---|---|
Header- | d3d12.h |