Just try to create a device with a specific feature level (along with other parameters).
In native code (use one of the
D3D11CreateDevice*
functions) . If function will not succeed - feature level is not supported. To make it easier, we usually pass array of feature levels, and then, if device is notnullptr
, we can check which one is highest supported:const D3D_FEATURE_LEVEL arrFeatLevels[] = { 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, }; const unsigned int nFeatLevels = _countof(arrFeatLevels); D3D11CreateDeviceAndSwapChain(..., arrFeatLevels, nFeatLevels, ..., &m_Device, &featureLevel, &m_Context); if (m_Device && m_Context) { featureLevel // you can access to highest supported feature level here
In SharpDX you will need to use constructor, which accepts specific feature levels:
Device(DriverType, DeviceCreationFlags, FeatureLevel[])
if device creation succeeded, then check
Device.FeatureLevel
property.
Happy coding!
Edit
I think I misinterpret your question. You asked about detecting of which version is supported by OS, not by OS + graphics card + driver all together. Maximum supported version are preinstalled with OS, so you only need to know which OS are you on:
OS version Version of DX runtime
Windows Vista DirectX 10
Windows Vista SP1/SP2 DirectX 10.1
Windows Vista SP2 DirectX 11.0
Windows 7 DirectX 11.0
Windows 7 SP1 DirectX 11.0
Windows 7 SP1 with KB2670838 DirectX 11.1
Windows 8 / Windows RT DirectX 11.1
Windows 8.1 / Windows RT DirectX 11.2
sources:
You can also query version of d3d11.dll
and compare with those which are on wiki page.
See: