Guide pratique pour 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 . Vous pouvez le 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é le plus élevé pris en charge en appelant la fonction D3D11CreateDevice . D3D11CreateDevice stocke le niveau de fonctionnalité le plus élevé pris en charge dans la variable FeatureLevel. Vous pouvez utiliser ce code pour examiner la valeur du 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 que pFeatureLevels a la valeur 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 des D3D_FEATURE_LEVEL_11_1 sur un ordinateur sur lequel le runtime Direct3D 11.1 n’est pas 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 le comportement des différentes méthodes ID3D11Device et ID3D11DeviceContext à différents niveaux de fonctionnalité 10Level9.

Direct3D 11 sur le matériel de niveau inférieur

Utilisation de Direct3D 11