enumerazione D3D12_TEXTURE_LAYOUT (d3d12.h)

Specifica le opzioni di layout delle trame.

Sintassi

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
} ;

Costanti

 
D3D12_TEXTURE_LAYOUT_UNKNOWN
Valore: 0
Indica che il layout è sconosciuto ed è probabilmente dipendente dall'adattatore.
Durante la creazione, il driver sceglie il layout più efficiente in base ad altre proprietà delle risorse, in particolare le dimensioni e i flag delle risorse.
Preferisce questa scelta, a meno che non siano necessarie determinate funzionalità da un altro layout di trama.

Esistono ottimizzazioni per il caricamento delle trame senza copia per le architetture UMA; vedere ID3D12Resource::WriteToSubresource.
D3D12_TEXTURE_LAYOUT_ROW_MAJOR
Valore: 1
Indica che i dati per la trama vengono archiviati nell'ordine principale della riga (talvolta denominato "ordine lineare passo").

Questo layout di trama individua i texel consecutivi di una riga contiguamente in memoria, prima dei texel della riga successiva.
Analogamente, i texel consecutivi di una determinata sezione di profondità o matrice sono contigui in memoria prima dei texel della sezione di profondità o matrice successiva.
La spaziatura interna può esistere tra righe e tra sezioni di profondità o matrice per allineare le raccolte di dati.
Uno stride è la distanza in memoria tra righe, profondità o sezioni di matrice; e include qualsiasi spaziatura interna.

Questo layout di trama consente la condivisione dei dati della trama tra più adattatori, quando altri layout non sono disponibili.

Si applicano molte restrizioni, perché questo layout in genere non è efficiente per un utilizzo esteso:


  • La località dei texel nelle vicinanze non è invariante a livello di rotazione.

  • Sono supportate solo le proprietà della trama seguenti:


  • La trama deve essere creata in un heap con D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER.


I buffer vengono creati con D3D12_TEXTURE_LAYOUT_ROW_MAJOR, perché i dati delle trame principali delle righe possono trovarsi in essi senza creare un oggetto trama.
Questo viene comunemente usato per caricare o leggere dati di trama, in particolare per adattatori discreti/NUMA.
È tuttavia possibile usare D3D12_TEXTURE_LAYOUT_ROW_MAJOR anche durante il marshalling dei dati di trama tra GPU o schede.
Per esempi di utilizzo con ID3D12GraphicsCommandList::CopyTextureRegion, vedere alcuni degli argomenti seguenti:

D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE
Valore: 2
Indica che il layout all'interno di riquadri da 64 KB e la compressione della coda sono fino al driver.
Nessun modello swizzle standard.

Questo layout di trama è disposto in aree contigue di 64 KB, note anche come riquadri, contenenti quantità quasi equilaterale di numero consecutivo di texel lungo ogni dimensione.
I riquadri sono disposti nell'ordine principale delle righe.
Anche se non esiste una spaziatura interna tra i riquadri, in genere sono presenti texel inutilizzati all'interno dell'ultimo riquadro in ogni dimensione.
Il layout dei texel all'interno del riquadro non è definito.
Ogni sottorisorsa segue immediatamente dove termina la sottorisorsa precedente e l'ordine di sottorisorsa segue la stessa sequenza dei ordinali di sottorisorsa.
Tuttavia, la compressione della coda mip è specifica dell'adattatore.
Per altre informazioni, vedere livello di risorse affiancato e ID3D12Device::GetResourceTiling.

Questo layout di trama consente scenari di trama parzialmente residenti o sparse quando vengono usati insieme alla funzionalità di mapping delle pagine della memoria virtuale.
Questo layout di trama deve essere usato insieme a ID3D12Device::CreateReservedResource per abilitare l'utilizzo di ID3D12CommandQueue::UpdateTileMappings.

Alcune restrizioni si applicano alle trame con questo layout:

D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE
Valore: 3
Indica che una trama predefinita usa il modello swizzle standardizzato.

Questo layout di trama viene disposto allo stesso modo in cui D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE è, ad eccezione del fatto che il layout dei texel all'interno del riquadro è definito. La compressione mip della coda è specifica dell'adattatore.

Questo layout di trama consente ottimizzazioni durante il marshalling dei dati tra più schede o tra CPU e GPU.
La quantità di copia può essere ridotta quando più componenti conoscono il layout della memoria della trama.
Questo layout è in genere più efficiente per un utilizzo esteso rispetto al layout principale della riga, a causa della localizzazione invariante invariante di texel adiacenti.
Questo layout può in genere essere usato solo con adattatori che supportano lo swizzle standard, ma esistono eccezioni per heap condivisi tra schede.

Le restrizioni per questo layout sono che le seguenti non sono supportate:

Commenti

Questa enumerazione viene utilizzata dalla struttura D3D12_RESOURCE_DESC .

Questa enumerazione controlla il modello swizzle delle trame predefinite e abilita il supporto delle mappe nelle trame predefinite. I chiamanti devono eseguire query D3D12_FEATURE_DATA_D3D12_OPTIONS per assicurarsi che ogni opzione sia supportata.

I formati swizzle standard si applicano all'interno di ogni blocco di dimensioni di pagina e le pagine sono disposte in ordine lineare rispetto all'altro. Un modello interleave a 16 bit definisce la conversione dalla posizione pre-swizzled all'interno della pagina alla posizione post-swizzled.

Modelli swizzle standard

Per dimostrare, considerare il formato swizzle 2D 32bpp precedente. Ciò è rappresentato dalle seguenti maschere interleave, in cui i bit a sinistra sono più significativi:

UINT xBytesMask = 1010 1010 1000 1111
UINT yMask =      0101 0101 0111 0000

Per calcolare l'indirizzo swizzled, è possibile usare il codice seguente (dove è supportata l'istruzione intrinseca _pdep_u32 ):

UINT swizzledOffset = resourceBaseOffset +
                      _pdep_u32(xOffset, xBytesMask) +
                      _pdep_u32(yOffset, yBytesMask);

Requisiti

Requisito Valore
Intestazione d3d12.h

Vedi anche

CD3DX12_RESOURCE_DESC

Enumerazioni principali

Ottimizzazioni UMA: trame accessibili dalla CPU e Swizzle Standard