Como obter o nível de recurso do dispositivo

Este tópico mostra como obter o nível de recurso mais alto com suporte de um dispositivo. Os dispositivos Direct3D 11 dão suporte a um conjunto fixo de níveis de recursos definidos na enumeração D3D_FEATURE_LEVEL . Quando você souber o nível de recurso mais alto com suporte por um dispositivo, poderá executar caminhos de código apropriados para esse dispositivo.

Para obter o nível de recurso do dispositivo

  1. Chame a função D3D11CreateDevice ou as funções D3D11CreateDeviceAndSwapChain ao especificar NULL para o parâmetro ppDevice . Você pode fazer isso antes da criação do dispositivo.

    - ou -

    Chame ID3D11Device::GetFeatureLevel após a criação do dispositivo.

  2. Examine o valor da enumeração D3D_FEATURE_LEVEL retornada da última etapa para determinar o nível de recurso com suporte.

O exemplo de código a seguir demonstra como determinar o nível de recurso com suporte mais alto chamando a função D3D11CreateDevice . D3D11CreateDevice armazena o nível de recurso mais alto com suporte na variável FeatureLevel. Você pode usar esse código para examinar o valor do D3D_FEATURE_LEVEL tipo enumerado que D3D11CreateDevice retorna. Observe que esse código lista todos os níveis de recursos explicitamente (para Direct3D 11.1 e Direct3D 11.2).

Observação

Se o runtime do Direct3D 11.1 estiver presente no computador e pFeatureLevels estiver definido como NULL, essa função não criará um dispositivo D3D_FEATURE_LEVEL_11_1 . Para criar um dispositivo D3D_FEATURE_LEVEL_11_1 , você deve fornecer explicitamente uma matriz de D3D_FEATURE_LEVEL que inclua D3D_FEATURE_LEVEL_11_1. Se você fornecer uma matriz D3D_FEATURE_LEVEL que contenha D3D_FEATURE_LEVEL_11_1 em um computador que não tenha o runtime do Direct3D 11.1 instalado, essa função falhará imediatamente com E_INVALIDARG.

 

HRESULT hr = E_FAIL;
D3D_FEATURE_LEVEL MaxSupportedFeatureLevel = D3D_FEATURE_LEVEL_9_1;
D3D_FEATURE_LEVEL FeatureLevels[] = {
    D3D_FEATURE_LEVEL_11_1,
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_3,
    D3D_FEATURE_LEVEL_9_2,
    D3D_FEATURE_LEVEL_9_1
    };

hr = D3D11CreateDevice(
    NULL,
    D3D_DRIVER_TYPE_HARDWARE,
    NULL, 
    0, 
    &FeatureLevels, 
    ARRAYSIZE(FeatureLevels), 
    D3D11_SDK_VERSION, 
    NULL, 
    &MaxSupportedFeatureLevel, 
    NULL 
    );

if(FAILED(hr))
{
    return hr;
}

A seção 10Level9 Reference lista as diferenças entre como vários métodos ID3D11Device e ID3D11DeviceContext se comportam em vários níveis de recursos 10Level9.

Direct3D 11 no hardware de nível inferior

Como usar o Direct3D 11