D3D12_HEAP_TYPE-Enumeration (d3d12.h)

Gibt den Typ des Heaps an. Wenn sie vorhanden sind, befinden sich Heaps in einem bestimmten physischen Speicherpool mit bestimmten CPU-Cacheeigenschaften.

Syntax

typedef enum D3D12_HEAP_TYPE {
  D3D12_HEAP_TYPE_DEFAULT = 1,
  D3D12_HEAP_TYPE_UPLOAD = 2,
  D3D12_HEAP_TYPE_READBACK = 3,
  D3D12_HEAP_TYPE_CUSTOM = 4,
  D3D12_HEAP_TYPE_GPU_UPLOAD
} ;

Konstanten

 
D3D12_HEAP_TYPE_DEFAULT
Wert: 1
Gibt den Standardheap an. Dieser Heaptyp hat die größte Bandbreite für die GPU, kann jedoch keinen CPU-Zugriff bieten. Die GPU kann aus diesem Pool lesen und in den Arbeitsspeicher schreiben, und Ressourcenübergangsbarrieren können geändert werden. Die meisten Heaps und Ressourcen befinden sich voraussichtlich hier und werden in der Regel über Ressourcen in Uploadheaps aufgefüllt.
D3D12_HEAP_TYPE_UPLOAD
Wert: 2
Gibt einen Heap an, der zum Hochladen verwendet wird. Dieser Heaptyp verfügt über CPU-Zugriff, der für das Hochladen auf die GPU optimiert ist, aber nicht die maximale Bandbreite für die GPU. Dieser Heaptyp eignet sich am besten für CPU-Write-Once- und GPU-Read-Once-Daten. GPU-Read-Once ist jedoch strenger als erforderlich. GPU-read-once-or-from-cache ist ein akzeptabler Anwendungsfall für die Daten. Solche Verwendungen sind jedoch aufgrund unterschiedlicher GPU-Cachedesigns und -größen schwer zu beurteilen. Halten Sie sich im Zweifelsfall an die GPU-Read-Once-Definition, oder profilieren Sie den Unterschied auf vielen GPUs zwischen dem Kopieren der Daten in einen _DEFAULT Heap und dem Lesen der Daten aus einem _UPLOAD Heap.

Ressourcen in diesem Heap müssen mit D3D12_RESOURCE_STATE erstellt werden_GENERIC_READ und können davon nicht geändert werden. Die CPU-Adresse für solche Heaps ist für CPU-Lesevorgänge in der Regel nicht effizient.

Im Folgenden sind typische Verwendungen für _UPLOAD Heaps aufgeführt:

  • Initialisieren von Ressourcen in einem _DEFAULT Heap mit Daten aus der CPU.

  • Hochladen dynamischer Daten in einen konstanten Puffer, der von jedem Scheitelpunkt oder Pixel wiederholt gelesen wird.



Im Folgenden sind wahrscheinlich keine guten Verwendungen für _UPLOAD Heaps aufgeführt:

  • Erneutes Initialisieren des Inhalts einer Ressource bei jedem Frame.

  • Hochladen konstanter Daten, die nur für jeden anderen Draw-Aufruf verwendet werden, wobei jedes Draw eine nicht triviale Menge anderer Daten verwendet.

D3D12_HEAP_TYPE_READBACK
Wert: 3
Gibt einen Heap an, der zum Lesen verwendet wird. Dieser Heaptyp verfügt über CPU-Zugriff, der für das Zurücklesen von Daten von der GPU optimiert ist, aber nicht die maximale Bandbreite für die GPU aufweist. Dieser Heaptyp eignet sich am besten für GPU-Schreibvorgänge, CPU-lesbare Daten. Das Verhalten des CPU-Caches ist rückschreibend, was für mehrere CPU-Lesevorgänge unter Cachezeilen förderlich ist.

Ressourcen in diesem Heap müssen mit D3D12_RESOURCE_STATE_COPY_DEST erstellt werden und können nicht geändert werden.
D3D12_HEAP_TYPE_CUSTOM
Wert: 4
Gibt einen benutzerdefinierten Heap an. Die Anwendung kann den Arbeitsspeicherpool und die CPU-Cacheeigenschaften direkt angeben, was für UMA-Optimierungen, Multi-Engine-, Multi-Adapter- oder andere Sonderfälle nützlich sein kann. Dazu wird erwartet, dass die Anwendung die Adapterarchitektur versteht, um die richtige Wahl zu treffen. Weitere Informationen finden Sie unter

D3D12_FEATURE_ARCHITECTURE
D3D12_FEATURE_DATA_ARCHITECTURE und
GetCustomHeapProperties.

Hinweise

Diese Enumeration wird von den folgenden API-Elementen verwendet:

Die Heaptypen fallen in zwei Kategorien: abstrahierte Heaptypen und benutzerdefinierte Heaptypen.

Die folgenden heap-Typen sind abstrahiert:

  • D3D12_HEAP_TYPE_DEFAULT
  • D3D12_HEAP_TYPE_UPLOAD
  • D3D12_HEAP_TYPE_READBACK
Es folgt ein benutzerdefinierter Heaptyp:
  • D3D12_HEAP_TYPE_CUSTOM
Die abstrahierten Heaptypen (_DEFAULT, _UPLOAD und _READBACK) sind nützlich, um das Schreiben adapterneutraler Anwendungen zu vereinfachen, da diese Anwendungen die Speicherarchitektur des Adapters nicht kennen müssen. Wenn Sie einen abstrahierten Heaptyp verwenden möchten, um das Schreiben adapterneutraler Anwendungen zu vereinfachen, behandelt die Anwendung den Adapter im Wesentlichen wie einen diskreten oder NUMA-Adapter. Die Verwendung der Heaptypen ermöglicht jedoch eine effiziente Übersetzung für UMA-Adapter. Neutrale Anwendungen der Adapterarchitektur sollten davon ausgehen, dass zwei Arbeitsspeicherpools verfügbar sind, in denen der Pool mit der meisten GPU-Bandbreite keinen CPU-Zugriff bieten kann. Der Pool mit der geringsten GPU-Bandbreite kann CPU-Zugriff haben. muss jedoch entweder für den Upload auf GPU oder das Readback von GPU optimiert sein.

Beachten Sie, dass Texturen (im Gegensatz zu Puffern) nicht der Heaptyp UPLOAD oder READBACK sein können.

Anforderungen

Anforderung Wert
Header d3d12.h

Weitere Informationen

Kernaufzählungen

Deskriptorheaps