Freigeben über


D3D12_FEATURE_DATA_ARCHITECTURE1 Struktur (d3d12.h)

Enthält Details zu den Architekturdetails der einzelnen Adapter, damit Ihre Anwendung für bestimmte Adaptereigenschaften besser optimieren kann.

Hinweis Diese Struktur, eingeführt in Windows 10, Version 1703 (Creators'Update), ersetzt die D3D12_FEATURE_DATA_ARCHITECTURE Struktur. Wenn Ihre Anwendung auf Windows 10, Version 1703 (Creators'Update) oder höher ausgerichtet ist, verwenden Sie D3D12_FEATURE_DATA_ARCHITECTURE1 (und D3D12_FEATURE_ARCHITECTURE1).
 

Syntax

typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1 {
  UINT NodeIndex;
  BOOL TileBasedRenderer;
  BOOL UMA;
  BOOL CacheCoherentUMA;
  BOOL IsolatedMMU;
} D3D12_FEATURE_DATA_ARCHITECTURE1;

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.

IsolatedMMU

SAL-: Out

Gibt an, ob die Hardware und der Treiber isolierte Speicherverwaltungseinheit (Memory Management Unit, MMU) unterstützen. Die Laufzeit legt dieses Element auf TRUE fest, wenn die GPU CPU-Seitentabelleneigenschaften wie MEM_WRITE_WATCH berücksichtigt (weitere Informationen finden Sie unter VirtualAlloc) und PAGE_READONLY (weitere Informationen finden Sie unter Arbeitsspeicherschutzkonstanten).

Wenn TRUE-, muss die Anwendung darauf achten, dass keine Speicher mit diesen Seitentabelleneigenschaften mit der GPU verwendet wird, da die GPU diese Seitentabelleneigenschaften auf unerwartete Weise auslösen kann. Beispielsweise können GPU-Schreibvorgänge grober sein, als die Anwendung erwartet, insbesondere Schreibvorgänge innerhalb von Shadern. Bestimmte Schreibüberwachungsseiten werden möglicherweise schmutzig angezeigt, auch wenn es nicht offensichtlich ist, wie GPU-Schreibvorgänge sie beeinflusst haben. GPU-Vorgänge im Zusammenhang mit Upload- und Readback-Heap-Verwendungsszenarien funktionieren gut mit Schreibüberwachungsseiten, generieren aber gelegentlich falsch positive Ergebnisse, die sicher ignoriert werden können.

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, die von WriteToSubresource angeboten werden, 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

Siehe auch

Kernstrukturen

D3D12_FEATURE