struttura D3D12_RESOURCE_DESC (d3d12.h)

Descrive una risorsa, ad esempio una trama. Questa struttura viene usata ampiamente.

Sintassi

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;

Membri

Dimension

Un membro di D3D12_RESOURCE_DIMENSION, specificando le dimensioni della risorsa (ad esempio, D3D12_RESOURCE_DIMENSION_TEXTURE1D) o se si tratta di un buffer ((D3D12_RESOURCE_DIMENSION_BUFFER).

Alignment

Specifica l'allineamento.

Width

Specifica la larghezza della risorsa.

Height

Specifica l'altezza della risorsa.

DepthOrArraySize

Specifica la profondità della risorsa, se è 3D o la dimensione della matrice se si tratta di una matrice di risorse 1D o 2D.

MipLevels

Specifica il numero di livelli MIP.

Format

Specifica un membro di DXGI_FORMAT.

SampleDesc

Specifica una struttura DXGI_SAMPLE_DESC.

Layout

Specifica un membro di D3D12_TEXTURE_LAYOUT.

Flags

Flag OR bit per bit, come D3D12_RESOURCE_FLAGS costanti di enumerazione.

Osservazioni

Usare questa struttura con:

Due risorse comuni sono buffer e trame, che usano entrambe questa struttura, ma con usi molto diversi dei campi.

buffer

I buffer sono un'area di memoria contigua. la width può essere compresa tra 1 e il campo MaxGPUVirtualAddressBitsPerResource di D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT per le risorse riservate o il campo MaxGPUVirtualAddressBitsPerProcess per le risorse di cui è stato eseguito il commit. Tuttavia, l'esaurimento dello spazio degli indirizzi virtuali GPU, il budget di residenza della memoria (vedere IDXGIAdapter3::QueryVideoMemoryInfo) e o la memoria di sistema può verificarsi per prima.

l'allineamento deve essere di 64 KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) o 0, che è effettivamente di 64 KB.

Height, DepthOrArraySizee MipLevels devono essere 1.

formato deve essere DXGI_FORMAT_UNKNOWN.

SampleDesc.Count deve essere 1 e qualità deve essere 0.

layout deve essere D3D12_TEXTURE_LAYOUT_ROW_MAJOR, poiché i layout di memoria del buffer vengono riconosciuti dalle applicazioni e i dati delle trame principali delle righe vengono in genere sottoposti a marshalling tramite buffer.

i flag devono comunque essere compilati con precisione dalle applicazioni per i buffer, con eccezioni minime. Tuttavia, le applicazioni possono usare la maggior parte del supporto delle funzionalità senza preoccuparsi dell'impatto sull'efficienza sui buffer. Il campo flags è progettato per controllare le proprietà correlate alle trame.

trame

Le trame sono una disposizione multidimensionale di texel in un'area contigua di memoria, fortemente ottimizzata per ottimizzare la larghezza di banda per il rendering e il campionamento. Le dimensioni delle trame sono difficili da prevedere e variare da adapter a adapter. Le applicazioni devono usare ID3D12Device::GetResourceAllocationInfo per comprendere in modo accurato le dimensioni.

TEXTURE1D, TEXTURE2D e TEXTURE3D non sono supportati in modo ortogonale in ogni formato. Vedere l'uso di D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D e D3D12_FORMAT_SUPPORT1_TEXTURE3D in D3D12_FORMAT_SUPPORT1.

Width, Heighte DepthOrArraySize devono essere compresi tra 1 e la dimensione massima supportata per il livello di funzionalità e la dimensione trama specifici. Tuttavia, l'esaurimento dello spazio degli indirizzi virtuali GPU, il budget di residenza della memoria (vedere IDXGIAdapter3::QueryVideoMemoryInfo) e o la memoria di sistema può verificarsi per prima. Per i formati compressi, queste dimensioni sono logiche. Per esempio:

  • Per TEXTURE1D:
    • width deve essere minore o uguale a D3D10_REQ_TEXTURE1D_U_DIMENSION nei livelli di funzionalità inferiori a 11_0 e D3D11_REQ_TEXTURE1D_U_DIMENSION al livello di funzionalità 11_0 o superiore.
    • altezza deve essere 1.
    • DepthOrArraySize viene interpretato come dimensione della matrice e deve essere minore o uguale a D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION sui livelli di funzionalità inferiori a 11_0 e D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION sui livelli di funzionalità 11_0 o superiore.
  • Per TEXTURE2D:
    • width e Height devono essere minori o uguali a D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION nei livelli di funzionalità inferiori a 11_0 e D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION o livello di funzionalità 11_0 o superiore.
    • DepthOrArraySize viene interpretato come dimensione della matrice e deve essere minore o uguale a D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION sui livelli di funzionalità inferiori a 11_0 e D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION sui livelli di funzionalità 11_0 o superiori.
  • Per TEXTURE3D:
    • width e Height e DepthOrArraySize devono essere minori o uguali a D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION sui livelli di funzionalità inferiori a 11_0 e D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION a livello di funzionalità 11_0 o superiore.
    • DepthOrArraySize viene interpretato come profondità.
Le note seguenti sono per tutte le dimensioni della trama.

allineamento

allineamento può essere uno di 0, 4 KB, 64 KB o 4 MB.

Se Alignment è impostato su 0, il runtime userà 4 MB per le trame MSAA e 64 KB per tutto il resto. L'applicazione può scegliere allineamenti più piccoli rispetto a questi valori predefiniti per un paio di tipi di trama quando la trama è piccola. Le trame con layout UNKNOWN e MSAA possono essere create con allineamento di 64 KB (se superano la restrizione delle dimensioni ridotte descritta di seguito).

Le trame con layout UNKNOWN senza MSAA e senza flag di destinazione di rendering e depth-stencil possono essere create con allineamento di 4 KB (anche in questo caso, passando la restrizione delle dimensioni ridotte).

Le applicazioni possono creare risorse allineate più piccole quando le dimensioni stimate del livello mip più dettagliato sono un totale della restrizione di allineamento maggiore o inferiore. Il runtime userà un meccanismo indipendente dall'architettura di stima delle dimensioni, che simula il modo in cui vengono ridimensionate le risorse affiancate standard e D3D12. Tuttavia, le dimensioni dei riquadri saranno della restrizione di allineamento più piccola per tali calcoli. Usando la trama non di destinazione di rendering e non depth-stencil come esempio, il runtime presuppone forme di riquadri quasi equilaterali di 4 KB e calcola il numero di riquadri necessari per il livello mip più dettagliato. Se il numero di riquadri è uguale o minore di 16, l'applicazione può creare una risorsa allineata di 4 KB. Pertanto, una matrice tex2d di qualsiasi dimensione della matrice e qualsiasi numero di livelli mip può essere 4 KB, purché la larghezza e l'altezza siano sufficienti per il formato specifico e MSAA.

MipLevels

MipLevels può essere 0 o 1 ai livelli mip massimi supportati dalle dimensioniWidth , Height e DepthOrArraySize. Quando si usa 0, l'API calcolerà automaticamente i livelli mip massimi supportati e lo useranno. Tuttavia, alcune proprietà di risorse e heap impediscono i livelli mip, quindi l'app deve specificare il valore come 1.

Fare riferimento al campo D3D12_FORMAT_SUPPORT1_MIP di D3D12_FORMAT_SUPPORT1 per le restrizioni in base al formato. Risorse MSAA, trame con D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER e heap con D3D12_HEAP_FLAG_ALLOW_DISPLAY tutti i livelli mip sono esclusi.

formato

Formato deve essere un formato valido supportato a livello di funzionalità del dispositivo.

SampleDesc

Un SampleDesc.Count maggiore di 1 e/ o non zero qualità sono supportati solo per TEXTURE2D e quando vengono impostati D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET o D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL.

Di seguito sono riportati i seguenti elementi non supportati:

  • D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
  • D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
  • D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
  • D3D12_HEAP_FLAG_ALLOW_DISPLAY
Vedere D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS per determinare
conteggio validi e valori di qualità.

Fabbisogno

Requisito Valore
intestazione d3d12.h

Vedere anche

CD3DX12_RESOURCE_DESC

strutture di base

D3D12_HEAP_FLAGS