Condividi tramite


Mappatura delle trame predefinita

L'uso del mapping delle trame predefinito riduce l'utilizzo della copia e della memoria durante la condivisione dei dati delle immagini tra la GPU e la CPU. Tuttavia, deve essere usato solo in situazioni specifiche. Il layout swizzle standard evita la copia o lo scorrimento dei dati in più layout.

Panoramica

Le trame predefinite per il mapping non devono essere la prima scelta per gli sviluppatori. Gli sviluppatori dovrebbero prima scrivere codice in modo compatibile con la GPU discreta, cioè non avere accesso alla CPU per la maggior parte delle trame e caricare con CopySubresourceRegion1. Tuttavia, per alcuni casi, la CPU e la GPU possono interagire così frequentemente sugli stessi dati, che il mapping delle trame predefinite diventa utile per risparmiare energia o per velocizzare una progettazione specifica 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 sono i più efficienti per il rendering e il campionamento frequenti della GPU. Quando si esegue il test delle prestazioni, queste texture devono essere confrontate con D3D11_TEXTURE_LAYOUT_UNDEFINED con accesso alla CPU, D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE con accesso alla CPU e D3D11_TEXTURE_LAYOUT_ROW_MAJOR per il supporto tra adattatori.

L'uso di D3D11_TEXTURE_LAYOUT_UNDEFINED con accesso alla CPU consente i metodi WriteToSubresource, ReadFromSubresource, Map (precluding l'accesso dell'applicazione al puntatore) e Unmap; ma può sacrificare l'efficienza dell'accesso alla GPU. L'uso di D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE con accesso alla CPU consente WriteToSubresource, ReadFromSubresource, Map (che restituisce un puntatore valido all'applicazione) e Unmap. Potrebbe anche sacrificare l'efficienza dell'accesso alla GPU più di quanto faccia D3D11_TEXTURE_LAYOUT_UNDEFINED con l'accesso alla CPU.

In generale, le applicazioni dovrebbero creare la maggior parte delle trame come accessibili solo dalla GPU e con D3D11_TEXTURE_LAYOUT_UNDEFINED.

In precedenza alla funzionalità di mapping delle trame predefinite, era presente un solo layout standardizzato per i dati multidimensionali: "lineare", noto anche come "row-major". Le applicazioni devono evitare le texture USAGE_STAGING e USAGE_DYNAMIC quando è disponibile l'impostazione predefinita della mappa. Le trame USAGE_STAGING e USAGE_DYNAMIC usano il layout lineare.

D3D11.3 (e D3D12) introducono un layout di dati multidimensionale standard. Questa operazione viene eseguita per consentire a più unità di elaborazione di operare sugli stessi dati senza copiare i dati o ruotare i dati tra più layout. Un layout standardizzato consente un miglioramento dell'efficienza tramite effetti di rete e consente agli algoritmi di effettuare tagli brevi presupponendo un modello specifico.

Si noti però che questo swizzle standard è 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 una query D3D11_FEATURE_DATA_D3D11_OPTIONS2. Lo standard swizzle dovrà anche essere interrogato con una chiamata a ID3D11Device::CheckFeatureSupport e controllando il campo StandardSwizzle64KBSupported di D3D11_FEATURE_DATA_D3D11_OPTIONS2.

Le seguenti API fanno riferimento al texturing:

Enumerazioni

Strutture

Metodi

funzionalità di Direct3D 11.3