Cómo: Obtener el nivel de característica del dispositivo

En este tema se muestra cómo obtener el nivel de característica más alto admitido por un dispositivo. Los dispositivos Direct3D 11 admiten un conjunto fijo de niveles de características que se definen en la enumeración D3D_FEATURE_LEVEL . Cuando conozca el nivel de característica más alto admitido por un dispositivo, puede ejecutar rutas de acceso de código adecuadas para ese dispositivo.

Para obtener el nivel de característica del dispositivo

  1. Llame a la función D3D11CreateDevice o a las funciones D3D11CreateDeviceAndSwapChain mientras especifica NULL para el parámetro ppDevice . Puede hacerlo antes de la creación del dispositivo.

    O bien

    Llame a ID3D11Device::GetFeatureLevel después de la creación del dispositivo.

  2. Examine el valor de la enumeración de D3D_FEATURE_LEVEL devuelta del último paso para determinar el nivel de característica admitido.

En el ejemplo de código siguiente se muestra cómo determinar el nivel de característica admitido más alto mediante una llamada a la función D3D11CreateDevice . D3D11CreateDevice almacena el nivel de característica más alto admitido en la variable FeatureLevel. Puede usar este código para examinar el valor del tipo enumerado D3D_FEATURE_LEVEL que devuelve D3D11CreateDevice . Tenga en cuenta que este código enumera todos los niveles de características explícitamente (para Direct3D 11.1 y Direct3D 11.2).

Nota:

Si el entorno de ejecución de Direct3D 11.1 está presente en el equipo y pFeatureLevels está establecido en NULL, esta función no creará un dispositivo D3D_FEATURE_LEVEL_11_1 . Para crear un dispositivo D3D_FEATURE_LEVEL_11_1 , debe proporcionar explícitamente una matriz de D3D_FEATURE_LEVEL que incluya D3D_FEATURE_LEVEL_11_1. Si proporciona una matriz de D3D_FEATURE_LEVEL que contiene D3D_FEATURE_LEVEL_11_1 en un equipo que no tiene instalado el entorno de ejecución de Direct3D 11.1, esta función produce un error inmediato 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;
}

En la sección 10Level9 Reference (Referencia de 10Level9 ) se enumeran las diferencias entre la forma en que se comportan varios métodos ID3D11DeviceContext en varios niveles de características de ID3D11Device y ID3D11DeviceContext .

Direct3D 11 en hardware de nivel inferior

Cómo usar Direct3D 11