Procedura: Ottenere il livello di funzionalità del dispositivo

Questo argomento illustra come ottenere il massimo livello di funzionalità supportato da un dispositivo. I dispositivi Direct3D 11 supportano un set fisso di livelli di funzionalità definiti nell'enumerazione D3D_FEATURE_LEVEL . Quando si conosce il livello di funzionalità più alto supportato da un dispositivo, è possibile eseguire percorsi di codice appropriati per tale dispositivo.

Per ottenere il livello di funzionalità del dispositivo

  1. Chiamare la funzione D3D11CreateDevice o le funzioni D3D11CreateDeviceAndSwapChain specificando NULL per il parametro ppDevice . È possibile eseguire questa operazione prima della creazione del dispositivo.

    - oppure -

    Chiamare ID3D11Device::GetFeatureLevel dopo la creazione del dispositivo.

  2. Esaminare il valore dell'enumerazione D3D_FEATURE_LEVEL restituita dall'ultimo passaggio per determinare il livello di funzionalità supportato.

L'esempio di codice seguente illustra come determinare il livello di funzionalità supportato più alto chiamando la funzione D3D11CreateDevice . D3D11CreateDevice archivia il livello di funzionalità supportato più alto nella variabile FeatureLevel. È possibile usare questo codice per esaminare il valore del tipo enumerato D3D_FEATURE_LEVEL restituito da D3D11CreateDevice . Si noti che questo codice elenca in modo esplicito tutti i livelli di funzionalità (per Direct3D 11.1 e Direct3D 11.2).

Nota

Se il runtime Direct3D 11.1 è presente nel computer e pFeatureLevels è impostato su NULL, questa funzione non creerà un dispositivo D3D_FEATURE_LEVEL_11_1 . Per creare un dispositivo D3D_FEATURE_LEVEL_11_1 , è necessario specificare in modo esplicito una matrice di D3D_FEATURE_LEVEL che include D3D_FEATURE_LEVEL_11_1. Se si specifica una matrice di D3D_FEATURE_LEVEL che contiene D3D_FEATURE_LEVEL_11_1 in un computer in cui non è installato il runtime Direct3D 11.1, questa funzione ha immediatamente esito negativo con 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 sezione 10Level9 Reference elenca le differenze tra il comportamento dei vari metodi ID3D11Device e ID3D11DeviceContext a vari livelli di funzionalità 10Level9.

Direct3D 11 su hardware di livello inferiore

Come usare Direct3D 11