如何:获取设备功能级别

本主题演示如何获取设备支持的最高功能级别。 Direct3D 11 设备支持 D3D_FEATURE_LEVEL枚举中 定义的一组固定功能级别。 如果知道设备支持的最高 功能级别 ,则可以运行适用于该设备的代码路径。

获取设备功能级别

  1. 调用 D3D11CreateDevice 函数或 D3D11CreateDeviceAndSwapChain 函数,同时为 ppDevice 参数指定 NULL。 可以在创建设备之前执行此操作。

    - 或 -

    创建设备后调用 ID3D11Device::GetFeatureLevel

  2. 检查从最后一步返回 D3D_FEATURE_LEVEL 枚举的值,以确定支持的功能级别。

下面的代码示例演示如何通过调用 D3D11CreateDevice 函数来确定支持的最高功能级别。 D3D11CreateDevice 将支持的最高功能级别存储在 FeatureLevel 变量中。 可以使用此代码检查 D3D11CreateDevice 返回的D3D_FEATURE_LEVEL枚举类型的值。 请注意,此代码列出了 direct3D 11.1 和 Direct3D 11.2) 显式 (的所有功能级别。

注意

如果计算机上存在 Direct3D 11.1 运行时,并且 pFeatureLevels 设置为 NULL,则此函数不会创建 D3D_FEATURE_LEVEL_11_1 设备。 若要创建D3D_FEATURE_LEVEL_11_1设备,必须显式提供包含D3D_FEATURE_LEVEL_11_1的D3D_FEATURE_LEVEL数组。 如果在未安装 Direct3D 11.1 运行时的计算机上提供包含D3D_FEATURE_LEVEL_11_1D3D_FEATURE_LEVEL数组,则此函数将立即失败并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 参考部分列出了各种 ID3D11DeviceID3D11DeviceContext 方法在各种 10Level9 功能级别上的行为差异。

下层硬件上的 Direct3D 11

如何使用 Direct3D 11