Direct3D Feature Levels

In various forums and discussion threads of late, I've seen some confusion about the difference between "DirectX 11" the API and "DirectX 11" the class of video hardware. The key to this is the concept of a "Feature Level" for devices which simplifies the old Direct3D 9 "sea of capabilities bits" to an increasingly capable group of level-sets for video hardware. An application requests a particular feature level (or a set of feature levels where the application can optionally use more advanced features if present), and the majority of the capabilities are known already. There are some specific optional features and format usages that may or may not be present (and thus require the use of CheckFormatSupport or CheckFeatureSupport), but most things can just be assumed based on the current device's Feature Level. This makes writing games and applications much simpler, and more importantly if something works for Feature Level X, then you can assume it will work for Feature Level X+1. This simplifies fallbacks as well, where the application only has to handle a few discrete cases. The HLSL shader profiles are designed so that a shader compiled for 4_0_level_9_1 will work on all feature levels, and a shader compiled for 4_0 will work on Feature Level 10.0, 10.1, 11.0, or 11.1 devices to limit the combinatorial explosion problem of shader permutations.

The concept of Feature Levels was actually introduced back in Direct3D 10.1, but at the time there were only two of them: 10.0 and 10.1. With DirectX 11, we introduced both an 11.0 feature level and the "10level9" technology for running on many Direct3D 9 era Shader Model 2.0 and 3.0 parts via the 9.1, 9.2, and 9.3 feature levels. DirectX 11.1 supports the same set of feature levels, and adds a new 11.1 feature level. The concept of feature levels was one of my key talking points for my Gamefest 2010 / GDC 2010 presentation DirectX 11 Technology Update. I've also filed a lot of documentation bugs to get this topic well-covered on MSDN.

This is an important topic for Windows Store apps (a.k.a. Metro style apps) as "DirectX 11" the API is required for these applications, but you will see potentially a wide range of feature levels on machines running Windows 8. See the GDC 2012 presentation Developing Metro Style Games on the Full Range of Windows 8 Devices. With the guidelines presented in the Windows 8 Hardware Certification Requirements document, most new desktop systems sold with Windows 8 will have Feature Level 10.0 or greater hardware--actually most gaming systems are likely to have Feature Level 11.0 or 11.1 even newer laptops with integrated graphics. For tablet form-factor systems, particularly those running Windows RT, most will be Feature Level 9.1 or Feature Level 9.3 at least in the near-term. To support any system running Windows 8 including upgraded machines, you have to support Feature Level 9.1 which may be sufficient for some kinds of applications but not others.

In my Gamefest 2010 talk I tried to make this a bit more concrete with a table. Here is the table updated with some new information. Note that the listed video cards are examples and not an exhaustive list of video cards that support that feature level.

(e.g. Intel G965 Express Chipset;
Surface RT; Surface 2)Implies a WDDM 1.0 or later driver
Direct3D 9 hardware: must support Shader Model 2.0 (vs_2_0/ps_2_0), 2K textures, volume textures, event queries, BC1-3 (aka DXTn), and a few other specific capabilities.
(e.g. ATI Radeon 9500)
Direct3D 9 hardware: must support Shader Model 2.0 (vs_2_0/ps_2_0), occlusion queries, floating-point formats (no blending), extended caps, all 9_1 features.
(e.g. NVidia GeForce 6600;
ATI Radeon X1300)
Direct3D 9 hardware: must support Shader Model 2.0 (vs_2_0/ps_2_x) with instancing and additional shader caps, 4K textures, multiple render targets (4 MRTs), floating-point blending (limited), all 9_2 features.

Windows phone 8.x developers have access to this feature level.

(e.g. ATI Radeon HD 2000;
NVIDIA GeForce 8/9;
Intel G965M Express Chipset, HD Graphics "Arrandale/Clarkdale")
Direct3D 10 hardware: Shader Model 4.0, geometry shader, stream out, alpha-to-coverage, 8K textures, MSAA textures, 2-sided stencil, general render target views, texture arrays, BC4/BC5, optional DirectCompute (CS 4.0), full floating-point format support, all 9_3 features.

Xbox One ADK developers have access to this feature level.

(e.g. ATI Radeon HD 3000/4000;
NVIDIA GeForce  GTX 300;
Intel HD Graphics 3000/2000 “Sandy
Direct3D 10.1 hardware: Shader Model 4.1, cubemap arrays, extended MSAA, optional DirectCompute (CS 4.1), all 10_0 features.
(e.g. ATI Radeon HD 5000-7000;
NVIDIA Geforce GTX 400-700;
Intel HD Graphics 4000/2500 “Ivy Bridge”; Surface Pro)Implies a WDDM 1.1 or later driver
Direct3D 11 hardware: Shader Model 5.0, hull & domain shaders, mandatory DirectCompute (CS 5.0), 16K textures, BC6H/BC7, all 10_1 features.
(e.g. AMD Radeon HD 8000; NVIDIA GeForce GTX 900;
Intel HD Graphics 5000/4x00 "Haswell"; Intel "Broadwell"; Surface 3, Surface Pro 2, Surface Pro 3, Xbox One, HoloLens)Implies a WDDM 1.2 or later driver
Direct3D 11.1 hardware: Shader Model 5.0 with optional extensions, Logical blend operations, Target-independent rasterization, UAVs at every stage, Constant buffer offsetting and partial updates, UAV only rendering with force sample count, all 11_0 features.

Note: This feature level is only available on Windows 8.x / Windows Server 2012 or later. DirectX 11.1 on Windows 7 does not support this feature level.

Xbox One XDK developers have access to this feature level plus additional platform-specific APIs.

See Advanced DirectX12 Graphics and Performance (GDC 2015)

Note: These feature levels are only available on Windows 10.

See Direct3D feature levels, and the various Hardware Support for Direct3D9 X Formats pages in the DXGI documentation.

By default, if you call D3D11CreateDevice or D3D11CreateDeviceAndSwapChain with the pFeatureLevels parameter set to NULL (or better yet nullptr for VS 2010 and VS 2012 developers!), then the system will try to create a device using the highest feature level available. Note for compatibility reasons, this does not include Feature Level 11.1 on machines with the DirectX 11.1 runtime installed. If you try to use D3D_FEATURE_LEVEL_11_1 on a system with only the DirectX 11.0 runtime installed, it fails immediately. The solution is covered in Anatomy of Direct3D 11 Create Device--the retry isn't needed for Windows Store apps where you can assume DirectX 11.1 runtime is always available.

WARP supports Feature Level 9.1, 9.2, 9.3, 10, and 10.1 on systems with the DirectX 11.0 runtime. On a system with the DirectX 11.1 runtime, it supports 11.0 and 11.1 as well. Note that on Windows 7 SP1 with DirectX 11.1, WARP supports 11.0, but not 11.1.

A few quirks of this system you should be aware of:

  • For technical reasons, you should prefer using Feature Level 10.0 or later when working with DirectX 10 class or later hardware. They typically support Feature Levels 9.1 - 9.3 as well, but it is more efficient to avoid using the "10level9" layer that emulates some aspects of Direct3D 10+ for Direct3D 9 devices.
  • Most hardware that supports a given feature level supports all the feature levels below it, but that is not actually required behavior. There are a few older integrated graphics parts that only support Feature Level 9.1 and Feature Level 10.0, but not 9.2 or 9.3. This also means that while most 10.x or 11.x class cards will also have support for Feature Level 9.1, 9.2, and 9.3 through the Direct3D 9 "10level9" layer, they aren't required to.
  • While compiling an HLSL shader using one of the 4_0_level_9_? profiles, the shader is actually compiled twice. Once using a Shader Model 2.0 profile and again using the Shader Model 4.0 profile. This generally means you have to live with the limitations of the Shader Model 2.0 profile for these shaders. Note that these shaders are not actually written as legacy Shader Model 2.0 shaders and instead should use the modern HLSL syntax, but the limits on complexity and features from the older Shader Model 2.0 profiles will apply.
  • You will note there is no feature level which exposes Shader Model 3.0 profiles. Feature Level 9.3 does imply the hardware is actually a Shader Model 3.0 compliant device since it requires instancing. The ps_2_x profile with additional shader capabilties is supported but not the full Shader Model 3.0 profiles. This design was driven by the fact that not all Shader Model 3.0 cards really had the same feature set (notably ATI cards were "Shader Model 3.0" but didn't support vertex shader texture fetch, while other vendors did), and the rule that Shader Model 3.0 vertex and pixel shaders can't be mixed with 2.0 shaders which would have broken the general model for always being able to use a 'lower' profile shader on a 'higher' feature level. You have to use Feature Level 10.0 or later to get vertex shader texture fetch support.
  • There is no way for a given device to expose more features than those defined for a given feature level, with the exception of the few specific optional features defined for that level. For example, Feature Level 9.3 devices can optionally support texture filtering for R16G16B16A16_FLOAT formats, but cannot do so for other _FLOAT formats that are only supported for point sampling in the Feature Level 9.3 definition. You have to use Feature Level 10.0 or later to get full-featured floating-point resource support.
  • The one exception to the previous note is that maximum supported resource sizes (i.e. maximum texure width, height, or depth) is a minimum for a given feature level, but a device could support larger sizes which you can determine by trying to create a larger sized texture and it will return a failure.

XNA 4 Note: None of these feature levels directly maps to the XNA "Reach" or "HiDef" profiles. "Reach" is very similiar to Feature Level 9.1, and "HiDef" is designed for the Shader Model 3.0 capabilities of the Xbox 360 so it's a bit more than Feature Level 9.3 offers but not as much as Feature Level 10.0.

Note: "10level9" feature levels require WDDM drivers and do not support legacy XPDM drivers--XPDM drivers are not supported at all on Windows 8.

Windows Store apps: See Publishing Direct3D Windows Store apps to the Windows Store for some details on the Feature Level policies for Windows Store on Windows RT (ARM) and Windows 8 (x86/x64).

Windows Phone 8: Windows phone 8 devices are Feature Level 9.3.

Detecting Feature Levels: Generally speaking, you determe if a device supports a given feature level by trying to create the device. There isn't an API that lets you enumerate feature level support from devices in DirectX 11. See Anatomy of Direct3D 11 Create Device.

DirectX 12: To date, all Direct3D 12 supporting drivers are Feature Level 11.0 or later. For this reason, all Direct3D 12 samples use D3D_FEATURE_LEVEL_11_0 as the MinimumFeatureLevel. If support for 9.x, 10.0, or 10.1 Direct3D feature level hardware is required, applications needs to make use of Direct3D 11. In DirectX 12, you create a device with a 'minimum' feature level, and then use CheckFeatureSupport to determine if the device supports any higher feature levels. See Anatomy of Direct3D 12 Create Device.

Related: Getting Started with Direct3D 11, Getting Started with Direct3D 12

Comments (17)

  1. MikeBMcL says:

    Will using shaders compiled for a 4_0_level_9_? profile trigger any of the quirks you mentioned in the first bullet point, assuming you request and get a FL 10_0 or higher device, or is it fine to just always compile for the lowest shader model you need for your shader code?

  2. If you use a 4_0_level_9_? profile to compile, then the resulting 'shader blob' actually contains both a SM 2.0 and a SM 4.0 shader. On Feature Level 10+ targets, it uses the SM 4.0 version. If it is a "10level9" feature level, it uses the SM 2.0 version.

    The big thing the first note indicates is that if you creating a "10level9" feature level on a Direct3D 10+ class device, it is actually communicating with it as if it was a Direct3D 9 device through legacy Direct3D 9 DDI interfaces. It is much more efficient to talk to that device through the Direct3D 10+ DDI interfaces which happens when using it as a Fetaure Level 10+ device.

  3. Guest says:


    >(cards not yet publicly announced)

    Any one?

    Not even AMD Radeon 7XXX or/and NVidia GeForce 6XX series?

  4. You need to contact the hardware vendors for information about FL 11.1 capable video hardware. Various game press sites have rumors about the upcoming AMD "Tahiti", NVIDIA "Kepler", and Intel "Haswell" chipsets but I'm not aware of any announced hardware that supports D3D_FEATURE_LEVEL_11_1

  5. Guest says:

    Thank for answer Chuck.

    I know about AMD that 7XXX support it.

    For nVidia (say about on sample GeforceGTX 680) they say that only DirectX 11 it only support.

    But from DirectX 11.1 not support only few non gaming function:

    Target-Independent Rasterization (2D rendering only).

    16xMSAA Rasterization (2D rendering only).

    Orthogonal Line Rendering Mode.

    UAV in non-pixel-shader stages.

    But new 3d rending function is supported:

    Partial constant buffer updates

    Logic operations in the Output Merger

    16bpp rendering

    UAV-only rendering

    Partial clears

    Large constant buffers

    It looks like in DirectX 10.1 time, when AMD was first with full support.

    source Russian magazines –…/626473

  6. Guest says:


    GPU-Z say that GeForce GTX 6XX (660TI/670/680/690) have full support of 11.1.

    Maybe it check only gaming function.

  7. DavidS says:

    Thanks for all the good info.  However, I am very concerned about the lack of Shader Model 3 support for 9.3.  I can live without vertex shader textures and mix and match profiles, but I really need more vertex temp registers and things like the ability to pass floats outside the range of 0 to 1 between vertex and pixel shaders, and probably some other things that shader model 3 gave me that I am forgetting.  I am worried that I won't be able to support a still large market of 9.3 card users under DX11 that I did under DX9.  Any chance of this changing?

  8. As noted, Feature Level 9.3 is basically Shader Model 3.0 hardware. You just have to use the Shader Model 2.0 shader profile with it. As noted in the link I cited, you already have 32 temps, 24 depth dynamic flow control, etc. implied by FL 9.3.

    If you need shader features not supported in SM 2.0, you have to move to Shader Model 4.0 (FL 10.0 or greater). There's no intermediate step in the DirectX 11 model.

  9. DavidS says:

    Thanks for the clarification, that sounds more promising then.  Do you know then if the range limit of 0 to 1 of data between shaders would still apply or not to Feature Level 9.3 then?  I remember that being a big issue for us in D3D9 shader 2 that was taken care of by shader model 3.

  10. James says:

    Is it possible to write programs that mix DirectX9 APIs together with DirectX10 or 11 api? For example use DirectX9's Device Manager in Video Accelerator (DXVA) and use that with newer DirectX Device such as DirectX 10?

    Is it possible to run Directx9 code on a machine with DirectX10 installed with an underlying hardware that supports DirectX10?

  11. @James – Most of the scenarios where you'd want to have different generations of Direct3D APIs running at the same time are covered in the DXGI Surface Sharing for interop. With the DirectX 11.1 Runtime, the interop is more seamless, but this is the approach you have to take older versions of Windows to use Direct2D or DirectWrite with Direct3D 11, or using DXVA with Direct3D 11, etc.

    Most DirectX 10 and DirectX 11 era cards still expose older Direct3D 9 compatible WDDM interfaces to support legacy Direct3D 9 applications

  12. wp8lover says:

    does windows phone 8(Feature Level 9.3) support antialiasing?

    In another topic about antialiasing(…/jj681697(v=vs.105).aspx),it indicated how to enable antialiasing on windows phone 8.

    But I found it on device(Lumia920)  antialiasing is not enabled,but on emulator, antialiasing is enabled.

  13. wp8lover:  Windows Phone hardware supports 2x and 4x MSAA using the code shown in that article.

    What is going wrong for you when you try that?

  14. wp8lover says:


    What happened is such that:

    I change my code as the article in my PhoneDirect3DApp1 project.

    Firstly I run the project on Emulator WVGA and observe the rotating Cube.I found the sawtooth phenomenon is very weak because I use 4×MSAA(desc.SampleDesc.Count = 4; // 4x MSAA).

    Secondly I run it on my devices(Lumia920 etc), I found the sawtooth phenomenon is obvious .The edge of the cube is full of sawtooth.

    Lastly I make it back to Emulator WVGA and change my code like this  


    D3D_FEATURE_LEVEL featureLevels[] =








    ////////////// to make sure the Level is 9_3 on Emulator WVGA. I found the sawtooth phenomenon is obvious as same as on Lumia920.

    I didnt change any other code durning my process.So I think it is Level9_3 makes the antialising lose efficacy.

    Is that means we should change more code in PhoneDirect3DApp1 project except the article (…/jj681697(v=vs.105).aspx) decribed?

  15. Mike says:

    Cannot find any information concerning support of MRT with enabled AA render target with feature level 9.3?

    I'm trying to write depth in additional render target encoded to RGBA (since I cannot use original depth-stencil texture), but it doesn't work (no writes into both buffers color). It's working fine if I increase feature level or disable AA for all render targets.


  16. Roger says:

    Direct 3D with Feature Level 9_3 or Greater comes on screen which prevents me assessing Facebook using windows 10. Cure Please

    1. What feature level is your system’s video card? Run DXDIAG and check the Display tab. Look to the right for the list of “Feature Levels”.

Skip to main content