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

Strutture

Metodi

Funzionalità direct3D 11.3