Partilhar via


Mapeamento de textura padrão

O uso do mapeamento de textura padrão reduz o uso de cópia e memória ao compartilhar dados de imagem entre a GPU e a CPU. No entanto, ele só deve ser usado em situações específicas. O layout de swizzle padrão evita copiar ou girar dados em vários layouts.

Visão geral

Mapear texturas padrão não deve ser a primeira opção para desenvolvedores. Os desenvolvedores devem codificar de maneira discreta e amigável à GPU primeiro (ou seja, não têm acesso à CPU para a maioria das texturas e carregar com CopySubresourceRegion1). Mas, para determinados casos, a CPU e a GPU podem interagir com tanta frequência nos mesmos dados, que o mapeamento de texturas padrão se torna útil para economizar energia ou acelerar um design específico em adaptadores ou arquiteturas específicas. Os aplicativos devem detectar esses casos e otimizar as cópias desnecessárias.

No D3D11.3, texturas criadas com D3D11_TEXTURE_LAYOUT_UNDEFINED (um membro da enumeração D3D11_TEXTURE_LAYOUT ) e nenhum acesso à CPU são as mais eficientes para renderização e amostragem frequentes de GPU. Durante o teste de desempenho, essas texturas devem ser comparadas com D3D11_TEXTURE_LAYOUT_UNDEFINED com acesso à CPU e D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE com acesso à CPU e D3D11_TEXTURE_LAYOUT_ROW_MAJOR para suporte a adaptadores cruzados.

Usar D3D11_TEXTURE_LAYOUT_UNDEFINED com acesso à CPU habilita os métodos WriteToSubresource, ReadFromSubresource, Map (impedindo o acesso do aplicativo ao ponteiro) e Unmap; mas pode sacrificar a eficiência do acesso à GPU. Usar D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE com acesso à CPU habilita WriteToSubresource, ReadFromSubresource, Map (que retorna um ponteiro válido para o aplicativo) e Unmap. Ele também pode sacrificar a eficiência do acesso à GPU mais de D3D11_TEXTURE_LAYOUT_UNDEFINED com acesso à CPU.

Em geral, os aplicativos devem criar a maioria das texturas como acessíveis somente para GPU e com D3D11_TEXTURE_LAYOUT_UNDEFINED.

Anterior ao recurso de texturas padrão de mapeamento, havia apenas um layout padronizado para dados multidimensionais: "linear", também conhecido como "linha principal". Os aplicativos devem evitar texturas USAGE_STAGING e USAGE_DYNAMIC quando o padrão do mapa estiver disponível. As texturas USAGE_STAGING e USAGE_DYNAMIC usam o layout linear.

D3D11.3 (e D3D12) introduzem um layout de dados multidimensional padrão. Isso é feito para permitir que várias unidades de processamento operem nos mesmos dados sem copiar os dados ou girar os dados entre vários layouts. Um layout padronizado permite ganhos de eficiência por meio de efeitos de rede e permite que os algoritmos façam atalhos assumindo um padrão específico.

Observe, porém, que esse swizzle padrão é um recurso de hardware e pode não ter suporte de todas as GPUs.

D3D11.3 APIs

Ao contrário do D3D12, o D3D11.3 não dá suporte ao mapeamento de textura por padrão, portanto, você precisa consultar D3D11_FEATURE_DATA_D3D11_OPTIONS2. O swizzle standard também precisará ser consultado com uma chamada para ID3D11Device::CheckFeatureSupport e verificando o StandardSwizzle64KBSupported campo de D3D11_FEATURE_DATA_D3D11_OPTIONS2.

As seguintes APIs fazem referência ao mapeamento de textura:

Enumerações

Estruturas

Métodos

Recursos do Direct3D 11.3