D3D12_RESOURCE_DESC Struktur (d3d12.h)

Beschreibt eine Ressource, z. B. eine Textur. Diese Struktur wird häufig verwendet.

Syntax

typedef struct D3D12_RESOURCE_DESC {
  D3D12_RESOURCE_DIMENSION Dimension;
  UINT64                   Alignment;
  UINT64                   Width;
  UINT                     Height;
  UINT16                   DepthOrArraySize;
  UINT16                   MipLevels;
  DXGI_FORMAT              Format;
  DXGI_SAMPLE_DESC         SampleDesc;
  D3D12_TEXTURE_LAYOUT     Layout;
  D3D12_RESOURCE_FLAGS     Flags;
} D3D12_RESOURCE_DESC;

Member

Dimension

Ein Element von D3D12_RESOURCE_DIMENSION, das die Dimensionen der Ressource angibt (z. B. D3D12_RESOURCE_DIMENSION_TEXTURE1D), oder ob es sich um einen Puffer handelt ((D3D12_RESOURCE_DIMENSION_BUFFER).

Alignment

Gibt die Ausrichtung an.

Width

Gibt die Breite der Ressource an.

Height

Gibt die Höhe der Ressource an.

DepthOrArraySize

Gibt die Tiefe der Ressource an, wenn es sich um 3D handelt, oder die Arraygröße, wenn es sich um ein Array von 1D- oder 2D-Ressourcen handelt.

MipLevels

Gibt die Anzahl der MIP-Ebenen an.

Format

Gibt ein Element von DXGI_FORMAT an.

SampleDesc

Gibt eine DXGI_SAMPLE_DESC-Struktur an.

Layout

Gibt ein Element von D3D12_TEXTURE_LAYOUT an.

Flags

Bitweise OR'd-Flags als D3D12_RESOURCE_FLAGS Enumerationskonstanten.

Hinweise

Verwenden Sie diese Struktur mit:

Zwei häufige Ressourcen sind Puffer und Texturen, die beide diese Struktur verwenden, aber mit ganz unterschiedlichen Verwendungen der Felder.

Puffer

Puffer sind ein zusammenhängender Speicherbereich. Die Breite kann zwischen 1 und entweder dem Feld MaxGPUVirtualAddressBitsPerResource von D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT für reservierte Ressourcen oder dem Feld MaxGPUVirtualAddressBitsPerProcess für festgeschriebene Ressourcen sein. Die Erschöpfung des virtuellen GPU-Adressraums, des Speicherresidenzbudgets (siehe IDXGIAdapter3::QueryVideoMemoryInfo) und des Systemspeichers kann jedoch leicht zuerst auftreten.

Die Ausrichtung muss 64 KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) oder 0 sein, was effektiv 64 KB ist.

Height, DepthOrArraySize und MipLevels müssen 1 sein.

Das Format muss DXGI_FORMAT_UNKNOWN sein.

SampleDesc.Count muss 1 und Qualität 0 sein.

Das Layout muss D3D12_TEXTURE_LAYOUT_ROW_MAJOR sein, da Pufferspeicherlayouts von Anwendungen verstanden werden und Zeilen-Haupttexturdaten häufig über Puffer ge marshallt werden.

Flags müssen von Anwendungen für Puffer weiterhin genau ausgefüllt werden, mit geringfügigen Ausnahmen. Anwendungen können jedoch den größten Umfang an Funktionsunterstützung nutzen, ohne sich gedanken über die Auswirkungen auf die Effizienz auf Puffer zu machen. Das Feld "Flags" soll Eigenschaften im Zusammenhang mit Texturen steuern.

Texturen

Texturen sind eine mehrdimensionale Anordnung von Texels in einem zusammenhängenden Speicherbereich, die stark optimiert ist, um die Bandbreite für Rendering und Sampling zu maximieren. Texturgrößen sind schwer vorherzusagen und variieren von Adapter zu Adapter. Anwendungen müssen ID3D12Device::GetResourceAllocationInfo verwenden, um ihre Größe genau zu verstehen.

TEXTURE1D, TEXTURE2D und TEXTURE3D werden nicht orthogonal für jedes Format unterstützt. Weitere Informationen finden Sie unter Verwendung von D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D und D3D12_FORMAT_SUPPORT1_TEXTURE3D in D3D12_FORMAT_SUPPORT1.

Width, Height und DepthOrArraySize müssen zwischen 1 und der maximalen Dimension liegen, die für die jeweilige Featureebene und texturale Dimension unterstützt wird. Die Erschöpfung des virtuellen GPU-Adressraums, des Speicherresidenzbudgets (siehe IDXGIAdapter3::QueryVideoMemoryInfo) und des Systemspeichers kann jedoch leicht zuerst auftreten. Bei komprimierten Formaten sind diese Dimensionen logisch. Beispiel:

  • Für TEXTURE1D:
    • Die Breite muss kleiner oder gleich D3D10_REQ_TEXTURE1D_U_DIMENSION auf Featureebenen kleiner als 11_0 und D3D11_REQ_TEXTURE1D_U_DIMENSION auf Featureebene 11_0 oder höher sein.
    • Die Höhe muss 1 sein.
    • DepthOrArraySize wird als Arraygröße interpretiert und muss kleiner oder gleich D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION auf Featureebenen kleiner als 11_0 und D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION auf Featureebenen 11_0 oder höher sein.
  • Für TEXTURE2D:
    • Breite und Höhe müssen kleiner oder gleich D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION auf Featureebenen kleiner als 11_0 und D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION oder Featureebene 11_0 oder höher sein.
    • DepthOrArraySize wird als Arraygröße interpretiert und muss kleiner oder gleich D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION auf Featureebenen kleiner als 11_0 und D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION auf Featureebenen 11_0 oder höher sein.
  • Für TEXTURE3D:
    • Width und Height und DepthOrArraySize müssen kleiner oder gleich D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION auf Featureebenen kleiner als 11_0 und D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION auf Featureebene 11_0 oder höher sein.
    • DepthOrArraySize wird als Tiefe interpretiert.
Die folgenden Hinweise gelten für alle Texturgrößen.

Ausrichtung

Die Ausrichtung kann eine von 0, 4 KB, 64 KB oder 4 MB sein.

Wenn Ausrichtung auf 0 festgelegt ist, verwendet die Runtime 4 MB für MSAA-Texturen und 64 KB für alles andere. Die Anwendung kann kleinere Ausrichtungen als diese Standardwerte für einige Texturtypen auswählen, wenn die Textur klein ist. Texturen mit UNKNOWN-Layout und MSAA können mit einer Ausrichtung von 64 KB erstellt werden (wenn sie die unten beschriebene kleine Größeneinschränkung bestehen).

Texturen mit UNKNOWN-Layout ohne MSAA und ohne Renderziel- oder Tiefenschablonenflaggen können mit 4 KB-Ausrichtung erstellt werden (wieder unter Überschreiten der kleinen Größenbeschränkung).

Anwendungen können kleinere ausgerichtete Ressourcen erstellen, wenn die geschätzte Größe der detailliertesten MIP-Ebene insgesamt die größere Ausrichtungseinschränkung oder weniger beträgt. Die Runtime verwendet einen architekturunabhängigen Mechanismus der Größenschätzung, der die Größe der Standard swizzle- und D3D12-Kachelressourcen imitiert. Die Kachelgrößen haben jedoch die kleinere Ausrichtungseinschränkung für solche Berechnungen. Unter Verwendung der Nicht-Render-Target- und der Non-Depth-Schablonentextur nimmt die Laufzeit nahezu äquilaterale Kachelformen von 4 KB an und berechnet die Anzahl der Kacheln, die für die detaillierteste MIP-Ebene benötigt werden. Wenn die Anzahl der Kacheln gleich oder kleiner als 16 ist, kann die Anwendung eine 4 KB ausgerichtete Ressource erstellen. Ein mipped tex2d Array einer beliebigen Arraygröße und einer beliebigen Anzahl von MIP-Ebenen kann also 4 KB betragen, solange die Breite und Höhe klein genug für das jeweilige Format und MSAA ist.

MipLevels

MipLevels kann 0 oder 1 sein, bis zu den maximalen MIP-Ebenen, die von den Dimensionen Width, Height und DepthOrArraySize unterstützt werden. Wenn 0 verwendet wird, berechnet die API automatisch die maximal unterstützten MIP-Ebenen und verwendet diese. Einige Ressourcen- und Heapeigenschaften schließen jedoch MIP-Ebenen aus, sodass die App den Wert als 1 angeben muss.

Informationen zu Formateinschränkungen finden Sie im Feld D3D12_FORMAT_SUPPORT1_MIP D3D12_FORMAT_SUPPORT1 . MSAA-Ressourcen, Texturen mit D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER und Heaps mit D3D12_HEAP_FLAG_ALLOW_DISPLAY schließen MIP-Ebenen aus.

Format

Format muss ein gültiges Format sein, das auf Featureebene des Geräts unterstützt wird.

SampleDesc

Ein SampleDesc.Count größer als 1 und/oder nicht 00 Qualität wird nur für TEXTURE2D und nur dann unterstützt, wenn entweder D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET oder D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL festgelegt sind.

Folgendes wird nicht unterstützt:

  • D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
  • D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
  • D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS
  • D3D12_HEAP_FLAG_ALLOW_DISPLAY
Informationen zum Bestimmen gültiger Werte für Anzahl und Qualität finden Sie unter D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS.

Anforderungen

Anforderung Wert
Header d3d12.h

Weitere Informationen

CD3DX12_RESOURCE_DESC

Kernstrukturen

D3D12_HEAP_FLAGS