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:
- ID3D12Resource::GetDesc
- ID3D12Device::GetResourceAllocationInfo
- ID3D12Device::CreateCommittedResource
- ID3D12Device::CreatePlacedResource
- ID3D12Device::CreateReservedResource
- ID3D12Device::GetCopyableFootprints
- Una serie di funzioni helper, fare riferimento a strutture helper e funzioni per D3D12.
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à.
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
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
Fabbisogno
Requisito | Valore |
---|---|
intestazione |
d3d12.h |