D3D12_HEAP_FLAGS-Enumeration (d3d12.h)

Gibt Heapoptionen an, z. B. ob der Heap Texturen enthalten kann und ob Ressourcen adapterübergreifend gemeinsam genutzt werden.

Syntax

typedef enum D3D12_HEAP_FLAGS {
  D3D12_HEAP_FLAG_NONE = 0,
  D3D12_HEAP_FLAG_SHARED = 0x1,
  D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4,
  D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8,
  D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
  D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
  D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
  D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100,
  D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200,
  D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 0x400,
  D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 0x800,
  D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 0x1000,
  D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING,
  D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
  D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84
} ;

Konstanten

 
D3D12_HEAP_FLAG_NONE
Wert: 0
Es wurden keine Optionen angegeben.
D3D12_HEAP_FLAG_SHARED
Wert: 0x1
Der Heap wird freigegeben. Weitere Informationen finden Sie unter Freigegebene Heaps.
D3D12_HEAP_FLAG_DENY_BUFFERS
Wert: 0x4
Der Heap darf keine Puffer enthalten.
D3D12_HEAP_FLAG_ALLOW_DISPLAY
Wert: 0x8
Der Heap darf Swapchainoberflächen enthalten.
D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER
Wert: 0x20
Der Heap darf Ressourcen adapterübergreifend freigeben. Weitere Informationen finden Sie unter Freigegebene Heaps. Eine geschützte Sitzung kann nicht mit Ressourcen gemischt werden, die adapterübergreifend gemeinsam verwendet werden.
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
Wert: 0x40
Der Heap ist nicht berechtigt, Renderzieltexturen (RT) und/oder Depth-Stencil (DS) zu speichern.
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
Wert: 0x80
Der Heap darf keine Ressourcen mit D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D oder D3D12_RESOURCE_DIMENSION_TEXTURE3D enthalten, es sei denn, es sind D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET oder D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL vorhanden. Weitere Informationen finden Sie unter D3D12_RESOURCE_DIMENSION und D3D12_RESOURCE_FLAGS.
D3D12_HEAP_FLAG_HARDWARE_PROTECTED
Wert: 0x100
Nicht unterstützt. Darf nicht verwendet werden.
D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
Wert: 0x200
Der Heap unterstützt MEM_WRITE_WATCH Funktionalität, wodurch das System die Seiten nachverfolgt, auf die im committeten Speicherbereich geschrieben wird. Dieses Flag kann nicht mit den D3D12_HEAP_TYPE_DEFAULT- oder D3D12_CPU_PAGE_PROPERTY_UNKNOWN-Flags kombiniert werden. Anwendungen wird davon abgeraten, dieses Flag selbst zu verwenden, da es Tools daran hindert, diese Funktionalität zu verwenden.
D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS
Wert: 0x400
Stellt sicher, dass atomische Vorgänge im Speicher dieses Heaps gemäß den Komponenten, die den Arbeitsspeicher sehen können, atomisch sind.

Das Erstellen eines Heaps mit diesem Flag schlägt unter diesen Bedingungen fehl.
– Der Heaptyp ist D3D12_HEAP_TYPE_DEFAULT, und der Heap kann auf mehreren Knoten sichtbar sein, aber das Gerät unterstützt keineD3D12_CROSS_NODE_SHARING_TIER_3.
- Der Heap ist CPU-sichtbar, aber der Heaptyp ist nichtD3D12_HEAP_TYPE_CUSTOM.

Beachten Sie, dass Heaps mit diesem Flag auf einigen Systemen möglicherweise eine begrenzte Ressource sind.
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT
Wert: 0x800
Der Heap wird in einem nicht gebietsansässigen Zustand erstellt und muss mit ID3D12Device::MakeResident oder ID3D12Device3::EnqueueMakeResident als resident festgelegt werden.

Standardmäßig besteht der letzte Schritt der Heaperstellung darin, den Heap resident zu machen, sodass dieses Flag diesen Schritt überspringt und der Anwendung ermöglicht, zu entscheiden, wann dies geschieht.
D3D12_HEAP_FLAG_CREATE_NOT_ZEROED
Wert: 0x1000
Ermöglicht dem Betriebssystem, den erstellten Heap nicht zu null zu betragen. Standardmäßig werden committete Ressourcen und Heaps bei der Erstellung fast immer auf Null gesetzt. Mit diesem Flag kann dies in einigen Szenarien aufgehoben werden. Sie garantiert dies jedoch nicht. Beispielsweise muss arbeitsspeicher, der aus anderen Prozessen stammt, für den Datenschutz und die Prozessisolation weiterhin auf Null gesetzt werden. Dies kann den Aufwand beim Erstellen des Heaps verringern.
D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES
Wert: 0
Der Heap darf alle Typen von Puffern und/oder Texturen speichern. Dies ist ein Alias. weitere Informationen finden Sie unter "Aliase" im Abschnitt Hinweise.
D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS
Wert: 0xc0
Der Heap darf nur Puffer speichern. Dies ist ein Alias. weitere Informationen finden Sie unter "Aliase" im Abschnitt Hinweise.
D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES
Wert: 0x44
Der Heap darf nur Nicht-RT-Texturen und Nicht-DS-Texturen speichern. Dies ist ein Alias. weitere Informationen finden Sie unter "Aliase" im Abschnitt Hinweise.
D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES
Wert: 0x84
Der Heap darf nur RT- und/oder DS-Texturen speichern. Dies ist ein Alias. weitere Informationen finden Sie unter "Aliase" im Abschnitt Hinweise.

Hinweise

Diese Enumeration wird von den folgenden API-Elementen verwendet:

Die folgenden Heapflags müssen mit ID3D12Device::CreateHeap verwendet werden, werden jedoch automatisch für implizite Heaps festgelegt, die von ID3D12Device::CreateCommittedResource erstellt werden. Adapter, die nur Heapebene 1 unterstützen, müssen zwei der drei folgenden Flags festlegen.
Wert BESCHREIBUNG
D3D12_HEAP_FLAG_DENY_BUFFERS Der Heap darf keine Ressourcen mit D3D12_RESOURCE_DIMENSION_BUFFER (eine D3D12_RESOURCE_DIMENSION Enumerationskonstante) enthalten.
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES Der Heap darf keine Ressourcen mit D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D oder D3D12_RESOURCE_DIMENSION_TEXTURE3D zusammen mit D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET oder D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL enthalten. (Die beiden letztgenannten Elemente sind D3D12_RESOURCE_FLAGS Enumerationskonstanten.)
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES Der Heap darf keine Ressourcen mit D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D oder D3D12_RESOURCE_DIMENSION_TEXTURE3D enthalten, es sei denn, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET und D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL fehlen.

Aliase

Adapter, die Heapebene 2 oder höher unterstützen, können darüber hinaus keines der oben genannten Flags festlegen. Aliase für diese Flags sind für Anwendungen verfügbar, die nur überlegen, welche Ressourcen unterstützt werden.

Die folgenden Aliase sind vorhanden, daher seien Sie vorsichtig, wenn Sie Bitbearbeitungen durchführen:

  • D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0 und wird nur auf Heapebene 2 und höher unterstützt.
  • D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES | D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS | D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS | D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES

Anzeigebare Heaps

Anzeigebare Heaps werden am häufigsten von der Swapchain für die Präsentation erstellt, um das Scannen auf einen Monitor zu ermöglichen.

Anzeigebare Heaps werden mit dem D3D12_HEAP_FLAG_ALLOW_DISPLAY Member der D3D12_HEAP_FLAGS-Enumeration angegeben.

Anwendungen können anzeigebare Heaps außerhalb einer Swapchain erstellen. aber nicht wirklich mit ihnen präsentieren kann. Dieses Flag wird von CreateHeap nicht unterstützt und kann nur mit CreateCommittedResource mit D3D12_HEAP_TYPE_DEFAULT verwendet werden.

Zusätzliche Einschränkungen für die D3D12_RESOURCE_DESC gelten für die Ressource, die mit angezeigten Heaps erstellt wurde.

  • Das Format darf nicht nur vom Gerät unterstützt werden, sondern muss auch für das Scannen unterstützt werden. Weitere Informationen finden Sie unter Verwendung des D3D12_FORMAT_SUPPORT1_DISPLAY Members von D3D12_FORMAT_SUPPORT1.
  • Die Dimension muss D3D12_RESOURCE_DIMENSION_TEXTURE2D sein.
  • Die Ausrichtung muss 0 sein.
  • ArraySize kann entweder 1 oder 2 sein.
  • MipLevels muss 1 sein.
  • Für SampleDesc muss Count auf 1 und Qualität auf 0 festgelegt sein.
  • Das Layout muss D3D12_TEXTURE_LAYOUT_UNKNOWN sein.
  • D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL und D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER sind ungültige Flags.

Anforderungen

Anforderung Wert
Header d3d12.h

Weitere Informationen

CD3DX12_HEAP_DESC

Kernaufzählungen

Deskriptorheaps