Mapping trama predefinito
L'uso del mapping di trame predefinito riduce l'utilizzo della copia e della memoria durante la condivisione dei dati dell'immagine tra la GPU e la CPU. Tuttavia, deve essere usato solo in situazioni specifiche. Il layout swizzle standard evita la copia o la scorrimento dei dati in più layout.
Panoramica
Il mapping delle trame predefinite non deve essere la prima scelta per gli sviluppatori. Per prima cosa gli sviluppatori devono eseguire il codice in modo descrittivo della GPU discreta, ovvero non avere alcun accesso alla CPU per la maggior parte delle trame e il caricamento con CopySubresourceRegion1. Tuttavia, per alcuni casi, la CPU e la GPU possono interagire così spesso sugli stessi dati, che il mapping delle trame predefinite diventa utile per risparmiare energia o per velocizzare una determinata progettazione su schede o architetture specifiche. Le applicazioni devono rilevare questi casi e ottimizzare le copie non necessarie.
In D3D11.3 le trame create con D3D11_TEXTURE_LAYOUT_UNDEFINED (un membro dell'enumerazione D3D11_TEXTURE_LAYOUT) e nessun accesso alla CPU è più efficiente per il rendering e il campionamento frequenti della GPU. Quando si verificano le prestazioni, tali trame devono essere confrontate con D3D11_TEXTURE_LAYOUT_UNDEFINED con l'accesso alla CPU e D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE con l'accesso alla CPU e D3D11_TEXTURE_LAYOUT_ROW_MAJOR per il supporto tra schede.
L'uso di D3D11_TEXTURE_LAYOUT_UNDEFINED con l'accesso alla CPU consente ai metodi WriteToSubresource, ReadFromSubresource, Map (precluding application access to pointer) e Unmap; ma può sacrificare l'efficienza dell'accesso alla GPU. L'uso di D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE con l'accesso alla CPU abilita WriteToSubresource, ReadFromSubresource, Map (che restituisce un puntatore valido all'applicazione) e Unmap. Può anche sacrificare l'efficienza dell'accesso alla GPU più di D3D11_TEXTURE_LAYOUT_UNDEFINED con l'accesso alla CPU.
In generale, le applicazioni devono creare la maggior parte delle trame come accessibili solo dalla GPU e con D3D11_TEXTURE_LAYOUT_UNDEFINED.
Precedentemente alla funzionalità trame predefinite per il mapping, esiste solo un layout standardizzato per i dati multidimensionali: "lineare", noto anche come "row-major". Le applicazioni devono evitare USAGE_STAGING e USAGE_DYNAMIC trame quando è disponibile la mappa predefinita. Le trame USAGE_STAGING e USAGE_DYNAMIC usano il layout lineare.
D3D11.3 (e D3D12) introduce un layout di dati multidimensionale standard. Questa operazione consente a più unità di elaborazione di funzionare sugli stessi dati senza copiare i dati o scorrere i dati tra più layout. Un layout standardizzato consente un aumento dell'efficienza tramite effetti di rete e consente agli algoritmi di effettuare tagli brevi presupponendo un modello specifico.
Si noti anche se questo standard swizzle è una funzionalità hardware e potrebbe non essere supportato da tutte le GPU.
API D3D11.3
A differenza di D3D12, D3D11.3 non supporta il mapping delle trame per impostazione predefinita, quindi è necessario eseguire query D3D11_FEATURE_DATA_D3D11_OPTIONS2. Lo swizzle standard dovrà anche essere sottoposto a query con una chiamata a ID3D11Device::CheckFeatureSupport e controllare il StandardSwizzle64KBSupported
campo di D3D11_FEATURE_DATA_D3D11_OPTIONS2.
Mapping della trama di riferimento delle API seguente:
Enumerazioni
- D3D11_TEXTURE_LAYOUT : controlla il modello swizzle di trame predefinite e abilita il supporto della mappa sulle trame predefinite.
- D3D11_FEATURE : riferimenti D3D11_FEATURE_DATA_D3D11_OPTIONS2.
- D3D11_TILE_COPY_FLAG : contiene flag per copiare risorse riquadri swizzled da e verso buffer lineari.
Strutture
- D3D11_TEXTURE2D_DESC1 : descrive una trama 2D. Prendere nota della struttura helper CD3D11_TEXTURE2D_DESC1.
- D3D11_TEXTURE3D_DESC1 : descrive una trama 3D. Prendere nota della struttura helper CD3D11_TEXTURE3D_DESC1.
Metodi
- ID3D11Device3::CreateTexture2D1 : crea una matrice di trame 2D.
- ID3D11Device3::CreateTexture3D1 : crea una trama 3D singola.
- ID3D11Device3::WriteToSubresource : copia i dati in una trama D3D11_USAGE_DEFAULT mappata usando Map.
- ID3D11Device3::ReadFromSubresource : copia i dati da una trama D3D11_USAGE_DEFAULT mappata usando Map.
- ID3D11DeviceContext::Map : ottiene un puntatore ai dati contenuti in una sottoresource e nega l'accesso della GPU a tale sottoresource.
- ID3D11DeviceContext::Unmap : invalida il puntatore a una risorsa e ripristina l'accesso della GPU a tale risorsa.
- ID3D11Texture2D1::GetDesc1 : ottiene le proprietà di una risorsa trama 2D.
- ID3D11Texture3D1::GetDesc1 : ottiene le proprietà di una risorsa trama 3D.
Argomenti correlati