Procédure : obtenir le niveau de fonctionnalité de l’appareil

Cette rubrique montre comment obtenir le niveau de fonctionnalité le plus élevé pris en charge par un appareil. Les appareils Direct3D 11 prennent en charge un ensemble fixe de niveaux de fonctionnalités définis dans l’énumération D3D_FEATURE_LEVEL . Lorsque vous connaissez le niveau de fonctionnalité le plus élevé pris en charge par un appareil, vous pouvez exécuter des chemins de code appropriés pour cet appareil.

Pour obtenir le niveau de fonctionnalité de l’appareil

  1. Appelez la fonction D3D11CreateDevice ou les fonctions D3D11CreateDeviceAndSwapChain tout en spécifiant NULL pour le paramètre ppDevice . Pour ce faire, avant la création de l’appareil.

    - ou -

    Appelez ID3D11Device::GetFeatureLevel après la création de l’appareil.

  2. Examinez la valeur de l’énumération D3D_FEATURE_LEVEL retournée à partir de la dernière étape pour déterminer le niveau de fonctionnalité pris en charge.

L’exemple de code suivant montre comment déterminer le niveau de fonctionnalité pris en charge le plus élevé en appelant la fonction D3D11CreateDevice . D3D11CreateDevice stocke le niveau de fonctionnalité pris en charge le plus élevé dans la variable FeatureLevel. Vous pouvez utiliser ce code pour examiner la valeur de l’D3D_FEATURE_LEVEL type énuméré que D3D11CreateDevice retourne. Notez que ce code répertorie explicitement tous les niveaux de fonctionnalités (pour Direct3D 11.1 et Direct3D 11.2).

Notes

Si le runtime Direct3D 11.1 est présent sur l’ordinateur et pFeatureLevels est défini sur NULL, cette fonction ne crée pas d’appareil D3D_FEATURE_LEVEL_11_1 . Pour créer un appareil D3D_FEATURE_LEVEL_11_1 , vous devez fournir explicitement un tableau D3D_FEATURE_LEVEL qui inclut D3D_FEATURE_LEVEL_11_1. Si vous fournissez un tableau D3D_FEATURE_LEVEL qui contient D3D_FEATURE_LEVEL_11_1 sur un ordinateur qui n’a pas le runtime Direct3D 11.1 installé, cette fonction échoue immédiatement avec 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;
}

La section référence 10Level9 répertorie les différences entre la façon dont les différentes méthodes ID3D11Device et ID3D11DeviceContext se comportent à différents niveaux de caractéristiques 10Level9.

Direct3D 11 sur le matériel de bas niveau

Utilisation de Direct3D 11