Compartilhar via


Usando dados de recursos do Direct3D 11 para complementar os níveis de recursos do Direct3D

Descubra como marcar suporte ao dispositivo para recursos opcionais, incluindo recursos que foram adicionados em versões recentes do Windows.

Os níveis de recursos do Direct3D indicam conjuntos bem definidos de funcionalidade de GPU que correspondem aproximadamente a diferentes gerações de hardware gráfico. Isso simplifica muito a tarefa de verificar as capacidades de hardware e também fornece uma experiência consistente em uma ampla variedade de dispositivos diferentes.

Para considerar parte da variação entre diferentes implementações de hardware , incluindo hardware herdado, hardware móvel e hardware moderno , alguns recursos são considerados opcionais. O suporte para esses recursos pode ser determinado chamando ID3D11Device::CheckFeatureSupport e fornecendo a estrutura relevante D3D11_FEATURE_DATA_*. Este tópico descreve os vários recursos opcionais do Direct3D 11, como alguns deles funcionam juntos e como você pode evitar verificar cada recurso opcional.

Como marcar para suporte a recursos opcionais

Chame ID3D11Device::CheckFeatureSupport, fornecendo a estrutura que representa o recurso opcional que você gostaria de usar. Se o método retornar S_OK, isso significa que você está em uma versão do runtime do Direct3D que dá suporte ao recurso opcional. Se ele retornar E_INVALIDARG, isso significa que você está em uma versão do runtime do Direct3D 11 de antes de o recurso opcional ser adicionado , isso significa que o recurso opcional não está disponível, juntamente com outros recursos opcionais introduzidos na mesma versão do Direct3D 11 ou posterior.

Posso minimizar o trabalho necessário para verificações de suporte a recursos?

Além de ter o runtime correto do Direct3D 11 (geralmente associado a uma versão do Windows), o driver gráfico também deve ser recente o suficiente para dar suporte ao recurso opcional. As especificações do WDDM exigem suporte para recursos opcionais se o hardware puder dar suporte a ele. Portanto, quando um driver gráfico dá suporte a um dos recursos opcionais que foram adicionados em uma versão específica do Windows, isso geralmente significa que o driver gráfico dá suporte aos outros recursos adicionados nessa versão do Windows. Por exemplo, se um driver de dispositivo der suporte a sombras no nível 9 do recurso, você saberá que o driver do dispositivo é pelo menos WDDM 1.2.

Nota Se um dispositivo Microsoft Direct3D der suporte ao nível de recurso 11.1, todos os recursos opcionais indicados por D3D11_FEATURE_DATA_D3D11_OPTIONS serão automaticamente compatíveis , exceto SAD4ShaderInstructions e ExtendedDoublesShaderInstructions.

O runtime sempre define os seguintes agrupamentos de membros de forma idêntica. Ou seja, todos os valores em um agrupamento são TRUE ou FALSE juntos:

  • DiscardAPIsSeenByDriver e FlagsForUpdateAndCopySeenByDriver
  • ClearView, CopyWithOverlap, ConstantBufferPartialUpdate, ConstantBufferOffsetting e MapNoOverwriteOnDynamicConstantBuffer
  • MapNoOverwriteOnDynamicBufferSRV e MultisampleRTVWithForcedSampleCountOne

Opções de nível de recurso 11.2 (D3D11_FEATURE_D3D11_OPTIONS1): Os recursos opcionais indicados por esse campo são independentes e devem ser verificados individualmente.

Suporte a recursos em dispositivos Windows RT 8.1 e Windows Phone 8.1

Windows RT dispositivos tablet podem dar suporte a uma variedade de níveis de recursos e recursos opcionais, são otimizados para consumo de energia reduzido e usam elementos gráficos integrados em vez de GPUs discretas. Os aplicativos da Windows Store para dispositivos ARM devem dar suporte ao nível de recurso 9.1. Os aplicativos DirectX para Windows RT devem aproveitar os recursos opcionais que podem economizar energia e ciclos - como instanciação simples - quando estiverem disponíveis.

Windows Phone 8 dispositivos móveis dão suporte ao nível de recurso 9.3 com recursos opcionais específicos. Consulte o nível de recurso 9_3 do Direct3D para Windows Phone 8.

Quais são os recursos opcionais do Direct3D 11?

O restante deste artigo descreve os recursos opcionais disponíveis no Direct3D 11.2. Os recursos são descritos em ordem cronológica por quando foram adicionados para que você possa ter uma noção de quais recursos estão em diferentes versões do Direct3D 11.

Suporte ao sombreador de computação opcional para o nível de recurso 10

O recurso a seguir está sempre disponível para dispositivos de nível de recurso 10:

D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS: se for TRUE, o dispositivo oferecerá suporte a sombreadores de computação. Isso inclui suporte para buffers brutos e estruturados.

Quando o dispositivo de nível de recurso 10_0 ou 10_1 dá suporte a esse recurso, não há garantia de que o dispositivo dê suporte ao sombreador de computação 4.1. Os aplicativos devem estar preparados para fazer fallback para um sombreador de computação 4.0 se ID3D11Device::CreateComputeShader gerar uma exceção com um programa de sombreador de computação 4.1.

Funcionalidades opcionais para o nível de recurso 9

Os seguintes recursos são adicionados para o nível de recurso 9 começando no Windows 8:

D3D11_FEATURE_DATA_D3D9_OPTIONS: Indica suporte para endereçamento de textura de encapsulamento com texturas sem potência de 2. Se houver suporte para isso, D3D11_TEXTURE_ADDRESS_MODE_WRAP poderá ser usado com essas texturas.

D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT: Indica suporte para amostradores de comparação no nível de recurso do modelo de sombreador 4.0 9_x sombreadores. Isso é usado para testes de profundidade em sombreadores de pixel, permitindo suporte para técnicas comuns, como mapeamento de sombra e estênceis.

O recurso a seguir foi adicionado para dispositivos de nível de recurso 9 começando no Windows 8.1:

D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT: Indica suporte para recursos simples de instanciação que podem estar disponíveis no hardware de 9 níveis do DirectX. Instancamento simples significa que todos os membros InstanceDataStepRate das estruturas de D3D11_INPUT_ELEMENT_DESC usadas para definir o layout de entrada devem ser iguais a 1. Os dispositivos que dão suporte ao nível de recurso 9.3 ou superior já incluem suporte total para instanciação.

Suporte opcional de precisão de ponto flutuante para programas de sombreador

D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT: Os campos neste struct indicam o comprimento dos números de ponto flutuante quando a precisão mínima está habilitada ou 0 se houver suporte apenas para precisão completa de ponto flutuante de 32 bits.

Para dispositivos de nível de recurso 9, a precisão mínima para o sombreador de vértice pode ser diferente do sombreador de pixel. A precisão do sombreador de vértice é indicada no campo AllOtherShaderStagesMinPrecision .

D3D11_FEATURE_DATA_DOUBLES: Os dispositivos de nível de recurso 11 podem dar suporte a cálculos de precisão dupla em programas do modelo de sombreador 5.0. O suporte para cálculos de precisão dupla dentro do sombreador significa que os floats podem ser convertidos em duplas dentro do programa de sombreador de computação, fornecendo o benefício da computação de precisão mais alta dentro de cada passagem de sombreador. Os números de precisão dupla devem ser convertidos novamente em floats antes de serem gravados no buffer de saída. Observe que a divisão de precisão dupla não é necessariamente compatível.

Recursos adicionais para Direct3D 11.2

O Direct3D 11.2 adiciona quatro novos recursos opcionais que podem ser compatíveis com dispositivos Direct3D 11. Esses recursos estão na estrutura D3D11_FEATURE_DATA_D3D11_OPTIONS1 :

TiledResourcesTier: Indica suporte para recursos em bloco e indica o nível de camada com suporte.

MinMaxFiltering: Indica suporte para opções de filtragem D3D11_FILTER_MINIMUM_* e D3D11_FILTER_MAXIMUM_*, que comparam o resultado da filtragem com o valor mínimo (ou máximo). Consulte D3D11_FILTER.

ClearViewAlsoSupportsDepthOnlyFormats: Indica suporte para limpar exibições de recursos de buffer de profundidade.

MapOnDefaultBuffers: Indica suporte para buffers de destino de renderização de mapeamento criados com o sinalizador D3D11_USAGE_DEFAULT .

Renderização baseada em bloco

D3D11_FEATURE_DATA_ARCHITECTURE_INFO: Indica se os lotes de dispositivos gráficos renderizam comandos e executam a renderização baseada em bloco por padrão. Isso pode ser usado como uma dica para otimização do mecanismo gráfico.

Recursos opcionais para desenvolvimento e depuração

D3D11_FEATURE_DATA_D3D11_OPTIONS::D iscardAPIsSeenByDriver: Você pode monitorar esse membro durante o desenvolvimento para descartar drivers herdados no hardware em que DiscardView e DiscardResource poderiam ter sido benéficos.

D3D11_FEATURE_DATA_MARKER_SUPPORT: Isso terá suporte se o hardware e o driver derem suporte à marcação de dados para criação de perfil de GPU.

Dispositivos