D3D12_HEAP_TYPE-Aufzählung (d3d12.h)

Gibt den Typ des Heaps an. Wenn sie ansässig 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 Standardhap an. Dieser Heaptyp hat die größte Bandbreite für die GPU, kann jedoch keinen CPU-Zugriff bereitstellen. Die GPU kann aus diesem Pool in den Speicher lesen und schreiben, und Ressourcenübergangsbarrieren können geändert werden. Die mehrzahl der Heaps und Ressourcen wird erwartet, dass sie sich hier befinden und normalerweise über Ressourcen in Upload heaps aufgefüllt werden.
D3D12_HEAP_TYPE_UPLOAD
Wert: 2
Gibt einen Heap an, der für das Hochladen verwendet wird. Dieser Heap-Typ verfügt über cpu-Zugriff, der für das Hochladen in die GPU optimiert ist, aber nicht die maximale Bandbreite für die GPU aufweist. Dieser Heap-Typ eignet sich am besten für CPU-Write-once-GPU-Read-once-Daten; gpu-read-once ist jedoch strenger als nötig. 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. Behalten Sie im Zweifel die GPU-Read-once-Definition bei oder profilieren Sie den Unterschied bei vielen GPUs zwischen dem Kopieren der Daten in einen _DEFAULT Heap im Vergleich zum Lesen der Daten aus einem _UPLOAD Heap.

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

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 einem Konstantenpuffer, der von jedem Scheitelpunkt oder Pixel wiederholt gelesen wird.



Im Folgenden werden wahrscheinlich keine guten Verwendungen für _UPLOAD Heaps verwendet:

  • Initialisieren Sie den Inhalt einer Ressource für jeden Frame neu.

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

D3D12_HEAP_TYPE_READBACK
Wert: 3
Gibt einen Heap an, der zum Zurücklesen verwendet wird. Dieser Heap-Typ verfügt über einen CPU-Zugriff, der für das Lesen von Daten aus der GPU optimiert ist, aber nicht die maximale Bandbreite für die GPU aufweist. Dieser Heap-Typ eignet sich am besten für gpu-write-once, CPU-lesbare Daten. Das CPU-Cacheverhalten ist schreibgeschützt, was für mehrere CPU-Lesevorgänge zwischen Cachezeilen geeignet 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 die Speicherpool- und CPU-Cacheeigenschaften direkt angeben, was für UMA-Optimierungen, Multimodul-, Multiadapter- oder andere Sonderfälle nützlich sein kann. Dazu wird erwartet, dass die Anwendung die Adapterarchitektur versteht, um die richtige Wahl zu treffen. Weitere Details finden Sie unter

D3D12_FEATURE_ARCHITECTURE,
D3D12_FEATURE_DATA_ARCHITECTUREund
GetCustomHeapProperties.

Bemerkungen

Diese Enumeration wird von den folgenden API-Elementen verwendet:

Die Heaptypen sind in zwei Kategorien unterteilt: abstrahierte Heaptypen und benutzerdefinierte Heaptypen.

Es folgen abstrahierte Heaptypen:

  • 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 solche Anwendungen die Adapterspeicherarchitektur nicht kennen müssen. Um einen abstrahierten Heap-Typ zum Vereinfachen des Schreibens adapterneutraler Anwendungen zu verwenden, behandelt die Anwendung den Adapter im Wesentlichen so, als ob es sich um einen diskreten oder NUMA-Adapter handelt. Die Verwendung der Heap-Typen ermöglicht jedoch eine effiziente Übersetzung für UMA-Adapter. Bei neutralen Anwendungen der Adapterarchitektur sollte davon ausgegangen werden, dass zwei Speicherpools verfügbar sind, bei 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 in GPU oder das Rücklesen von GPU optimiert sein.

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

Anforderungen

Anforderung Wert
Header- d3d12.h

Siehe auch

Core Enumerations

Deskriptor Heaps