D3D12_TEXTURE_LAYOUT-Enumeration (d3d12.h)
Gibt Texturlayoutoptionen an.
Syntax
typedef enum D3D12_TEXTURE_LAYOUT {
D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
} ;
Konstanten
D3D12_TEXTURE_LAYOUT_UNKNOWN Wert: 0 Gibt an, dass das Layout unbekannt und wahrscheinlich vom Adapter abhängig ist. Während der Erstellung wählt der Treiber das effizienteste Layout basierend auf anderen Ressourceneigenschaften aus, insbesondere Ressourcengröße und Flags. Bevorzugen Sie diese Wahl, es sei denn, bestimmte Funktionen sind für ein anderes Texturlayout erforderlich. Für UMA-Architekturen gibt es Optimierungen zum Kopieren von Texturen; siehe ID3D12Resource::WriteToSubresource. |
D3D12_TEXTURE_LAYOUT_ROW_MAJOR Wert: 1 Gibt an, dass Die Daten für die Textur in Zeilen-Hauptreihenfolge (manchmal auch als "Pitch-lineare Reihenfolge" bezeichnet) gespeichert werden. Dieses Texturlayout sucht aufeinander folgende Texel einer Zeile zusammenhängend im Speicher vor den Texeln der nächsten Zeile. Ebenso sind aufeinanderfolgende Texel einer bestimmten Tiefe oder eines Array-Slices im Speicher vor den Texels der nächsten Tiefe oder des nächsten Arrayslices zusammenhängend. Ein Abstand kann zwischen Zeilen und zwischen Tiefen- oder Arrayslices vorhanden sein, um Datensammlungen auszurichten. Ein Schritt ist der Abstand im Arbeitsspeicher zwischen Zeilen, Tiefe oder Arrayslices. und enthält alle Auffüllungen. Dieses Texturlayout ermöglicht die Freigabe der Texturdaten zwischen mehreren Adaptern, wenn keine anderen Layouts verfügbar sind. Es gelten viele Einschränkungen, da dieses Layout in der Regel für eine umfangreiche Nutzung nicht effizient ist:
Puffer werden mit D3D12_TEXTURE_LAYOUT_ROW_MAJOR erstellt, da zeilenbasierte Texturdaten darin gefunden werden können, ohne ein Texturobjekt zu erstellen. Dies wird häufig zum Hochladen oder Zurücklesen von Texturdaten verwendet, insbesondere für diskrete/NUMA-Adapter. D3D12_TEXTURE_LAYOUT_ROW_MAJOR kann jedoch auch beim Marshallen von Texturdaten zwischen GPUs oder Adaptern verwendet werden. Beispiele für die Verwendung mit ID3D12GraphicsCommandList::CopyTextureRegion finden Sie in den folgenden Themen: |
D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE Wert: 2 Gibt an, dass das Layout innerhalb von 64 KB-Kacheln und tail mip packing dem Treiber entspricht. Kein Standardmäßiges Swizzle-Muster. Dieses Texturlayout ist in zusammenhängende 64-KB-Bereiche angeordnet, die auch als Kacheln bezeichnet werden und nahezu gleichlaterale Anzahl aufeinanderfolgender Texels entlang jeder Dimension enthalten. Kacheln werden in Zeilen-Hauptreihenfolge angeordnet. Es gibt zwar keinen Abstand zwischen den Kacheln, aber in der Regel gibt es nicht verwendete Texel innerhalb der letzten Kachel in jeder Dimension. Das Layout von Texels innerhalb der Kachel ist undefiniert. Jede Unterressource folgt unmittelbar an der Stelle, an der die vorherige Unterressource endet, und die Reihenfolge der Unterressourcen folgt der gleichen Reihenfolge wie die Ordnungszahl der Unterressourcen. Die Tail Mip-Verpackung ist jedoch adapterspezifisch. Weitere Informationen finden Sie unter kachelnde Ressourcenebene und ID3D12Device::GetResourceTiling. Dieses Texturlayout ermöglicht teilweise residente oder spärliche Texturszenarien, wenn es zusammen mit der Zuordnungsfunktion für virtuelle Speicherseiten verwendet wird. Dieses Texturlayout muss zusammen mit ID3D12Device::CreateReservedResource verwendet werden, um die Verwendung von ID3D12CommandQueue::UpdateTileMappings zu ermöglichen. Einige Einschränkungen gelten für Texturen mit diesem Layout:
|
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE Wert: 3 Gibt an, dass eine Standardtextur das standardisierte Swizzle-Muster verwendet. Dieses Texturlayout ist auf die gleiche Weise angeordnet wie D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE, mit der Ausnahme, dass das Layout der Texel innerhalb der Kachel definiert ist. Tail Mip Packing ist adapterspezifisch. Dieses Texturlayout ermöglicht Optimierungen beim Marshallen von Daten zwischen mehreren Adaptern oder zwischen CPU und GPU. Der Kopieraufwand kann reduziert werden, wenn mehrere Komponenten das Texturspeicherlayout verstehen. Dieses Layout ist aufgrund der rotationsinvarianten Lokalität benachbarter Texels in der Regel für eine umfangreichere Verwendung effizienter als das Zeilenhauptlayout. Dieses Layout kann in der Regel nur mit Adaptern verwendet werden, die Standard-Swizzle unterstützen, es bestehen jedoch Ausnahmen für adapterübergreifende freigegebene Heaps. Die Einschränkungen für dieses Layout sind, dass Folgendes nicht unterstützt wird:
|
Hinweise
Diese Enumeration wird von der D3D12_RESOURCE_DESC-Struktur verwendet.
Diese Enumeration steuert das Swizzle-Muster von Standardtexturen und aktiviert die Kartenunterstützung für Standardtexturen. Aufrufer müssen D3D12_FEATURE_DATA_D3D12_OPTIONS abfragen, um sicherzustellen, dass jede Option unterstützt wird.
Die standardmäßigen Swizzle-Formate gelten in jedem seitengroßen Block, und seiten sind linear zueinander angeordnet. Ein 16-Bit-Interleave-Muster definiert die Konvertierung von vorgeschwenktem Seitenstandort in die position nach dem Schwenken.
![Standard-Swizzle-Muster](images/d3d12_standardswizzle.png)
Betrachten Sie zur Veranschaulichung das obige Swizzle-Format 2D 32bpp. Dies wird durch die folgenden interleave Masken dargestellt, wobei Bits auf der linken Seite am wichtigsten sind:
UINT xBytesMask = 1010 1010 1000 1111
UINT yMask = 0101 0101 0111 0000
Zum Berechnen der swizzled-Adresse kann der folgende Code verwendet werden (wobei die _pdep_u32 systeminterne Anweisung unterstützt wird):
UINT swizzledOffset = resourceBaseOffset +
_pdep_u32(xOffset, xBytesMask) +
_pdep_u32(yOffset, yBytesMask);
Anforderungen
Anforderung | Wert |
---|---|
Header | d3d12.h |
Weitere Informationen
UMA-Optimierungen: CPU-barrierefreie Texturen und Standard Swizzle