Question

how can you detect if the directx version on a windows 7 machine is 11 or 11.1 ?

preferably using a .NET language maybe via PInvoke or SharpDX?

Was it helpful?

Solution

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 not nullptr, 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:

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top