Поделиться через


Как получить уровень возможностей устройства

В этом разделе показано, как получить высший уровень возможностей , поддерживаемый устройством . Устройства Direct3D 11 поддерживают фиксированный набор уровней компонентов, определенных в перечислении D3D_FEATURE_LEVEL. Если вы знаете самый высокий уровень компонентов , поддерживаемых устройством, можно запускать пути кода, подходящие для этого устройства.

Чтобы получить уровень возможностей устройства

  1. Вызовите функциюD3D11CreateDevice или функцию D3D11CreateDeviceAndSwapChain, указав NULL для параметра ppDevice. Это можно сделать до создания устройства.

    -или-

    Вызовите ID3D11Device::GetFeatureLevel после создания устройства.

  2. Проверьте значение возвращаемого D3D_FEATURE_LEVEL перечисления на последнем шаге, чтобы определить поддерживаемый уровень компонентов.

В следующем примере кода показано, как определить самый высокий поддерживаемый уровень функций, вызвав функцию D3D11CreateDevice. D3D11CreateDevice сохраняет самый высокий поддерживаемый уровень компонентов в переменной FeatureLevel. Этот код можно использовать для проверки значения перечисленного типа D3D_FEATURE_LEVEL, возвращаемого D3D11CreateDevice. Обратите внимание, что этот код явно перечисляет все уровни функций (для Direct3D 11.1 и Direct3D 11.2).

Заметка

Если среда выполнения Direct3D 11.1 присутствует на компьютере и pFeatureLevels имеет значение NULL, эта функция не создаст устройство D3D_FEATURE_LEVEL_11_1. Чтобы создать устройство D3D_FEATURE_LEVEL_11_1, необходимо явно указать массив D3D_FEATURE_LEVEL, включающий D3D_FEATURE_LEVEL_11_1. Если на компьютере, где не установлена среда выполнения Direct3D 11.1, вы предоставляете массив D3D_FEATURE_LEVEL, содержащий D3D_FEATURE_LEVEL_11_1, эта функция немедленно завершается ошибкой 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;
}

В разделе 10Level9 Reference перечислены различия между поведением различных методов ID3D11Device и ID3D11DeviceContext на различных уровнях функций 10Level9.

Direct3D 11 на оборудовании низкого уровня

Использование Direct3D 11