如何:获取设备功能级别
本主题演示如何获取设备支持的最高功能级别。 Direct3D 11 设备支持 D3D_FEATURE_LEVEL枚举中 定义的一组固定功能级别。 如果知道设备支持的最高 功能级别 ,则可以运行适用于该设备的代码路径。
获取设备功能级别
调用 D3D11CreateDevice 函数或 D3D11CreateDeviceAndSwapChain 函数,同时为 ppDevice 参数指定 NULL。 可以在创建设备之前执行此操作。
- 或 -
创建设备后调用 ID3D11Device::GetFeatureLevel 。
检查从最后一步返回 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_1的D3D_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 参考部分列出了各种 ID3D11Device 和 ID3D11DeviceContext 方法在各种 10Level9 功能级别上的行为差异。
相关主题