With Direct3D 11, a new paradigm is introduced called feature levels. A feature level is a well-defined set of GPU functionality. For instance, the 9_1 feature level implements the functionality that was implemented in Microsoft Direct3D 9, which exposes the capabilities of shader models ps_2_x and vs_2_x, while the 11_0 feature level implements the functionality that was implemented in Direct3D 11.
Now when you create a device, you can attempt to create a device for the feature level that you want to request. If the device creation works, that feature level exists, if not, the hardware does not support that feature level. You can either try to recreate a device at a lower feature level or you can choose to exit the application. For more info about creating a device, see the D3D11CreateDevice function.
Using feature levels, you can develop an application for Direct3D 9, Microsoft Direct3D 10, or Direct3D 11, and then run it on 9, 10 or 11 hardware (with some exceptions; for example, new 11 features will not run on an existing 9 card). Here is a couple of other basic properties of feature levels:
The following features are available for the feature levels listed. The headings across the top row are Direct3D 12 feature levels. The headings in the left-hand column are features. Also see Footnotes for the tables.
The following features are available for the feature levels listed. The headings across the top row are Direct3D 11 feature levels. The headings in the left-hand column are features. Also see Footnotes for the tables.
2 Shader model 5.0 and above can optionally support double-precision shaders, extended double-precision shaders, the SAD4 shader instruction, and partial-precision shaders. To determine the shader model 5.0 options that are available for DirectX 11, call ID3D11Device::CheckFeatureSupport. Some compatibility depends on what hardware you are running on. Shader model 5.1 and above are only supported through the DirectX 12 API, regardless of the feature level that's being used. DirectX 11 only supports up to shader model 5.0. The DirectX 12 API only goes down to feature level 11_0.
3 At feature levels 9_1, 9_2 and 9_3, the display device supports the use of 2-D textures with dimensions that are not powers of two under two conditions. First, only one MIP-map level for each texture can be created, and second, no wrap sampler modes for textures are allowed (that is, the AddressU, AddressV, and AddressW members of D3D11_SAMPLER_DESC cannot be set to D3D11_TEXTURE_ADDRESS_WRAP).
Feature levels in Direct3D define strict sets of features required by certain versions of the Direct3D API and runtime, as well as additional optional feature levels available within the same API version.
Feature levels encapsulate hardware-specific capabilities that exist on top of common mandatory requirements and features in a particular version of the API. The levels are grouped in strict supersets of each other, so each higher level includes all features required on every lower level.
Some feature levels include previously optional hardware features which are promoted to a mandatory status with new revisions of the API to better expose newer hardware. More advanced features such as new shader models and rendering stages are only exposed on up-level hardware,[1][2] however the hardware is not required to support all of these feature levels[3] and the Direct3D runtime will make the necessary translations.
Separate capabilities exist to indicate support for specific texture operations and resource formats; these are usually specified per each texture format using a combination of capability flags, but some of these optional features are promoted to mandatory on upper feature levels.[5]
There are seven feature levels provided by D3D_FEATURE_LEVEL structure; levels 9_1, 9_2 and 9_3 (collectively known as Direct3D 10 Level 9) re-encapsulate various features of popular Direct3D 9 cards conforming to Shader Model 2.0, while levels 10_0, 10_1, 11_0 and 11_1 refer to respective versions of the Direct3D API.[1] "10 Level 9" feature levels contain a subset of the Direct3D 10/11 API[9] and require shaders to be written in HLSL conforming to Shader Model 4.0 4_0_LEVEL_9_x compiler profiles, and not in the actual "shader assembly" language[10] of Shader Model 1.1/2.0; SM 3.0 (vs_3_0/ps_3_0) has been omitted deliberately in Direct3D 10 Level 9.[3]
Since Direct3D 11.1 for Windows 8, some mandatory features introduced for level 11_1 are available as optional on levels 10_0, 10_1 and 11_0 - these features can be checked individually via CheckFeatureSupport function[11] however feature level 11_1 and optional features are not available in Direct3D 11.1 for Windows 7 platform update[12] because it does not support WDDM 1.2.[13]
There are two new feature levels, 12_0 and 12_1, which include some features that are optional on levels 11_0 and 11_1.[27] Due to the restructuring of the API, some previously optional features are realigned as baseline on levels 11_0 and 11_1.
Direct3D 12 introduces a revamped resource binding model, allowing explicit control of memory. Abstract resource "view" objects[35] which allowed random read/write access are now represented by resource descriptors, which are allocated using memory heaps and tables.[36] This model is supported on majority of existing desktop GPU architectures and requires WDDM 2.0 drivers. Supported hardware is divided into three Resource Binding tiers, which define maximum numbers of descriptors that can be used for CBV (constant buffer view), SRV (shader resource view) and UAV (unordered access view); CBVs and SRVs per pipeline stage; UAVs for all pipeline stages; samplers per stage; and the number of SRV descriptor tables. Tier 3 hardware such as AMD GCN and, Intel Skylake has no limitations, allowing fully bindless resources only limited by the size of the descriptor heap, while Tier 1 (Nvidia Fermi, Intel Haswell/Broadwell) and Tier 2 (Nvidia Kepler) hardware impose some limits on the number of descriptors ("views") that can be used simultaneously. Additionally, buffers and textures can mixed together in the same resource heap only on hardware supporting Resource Heap Tier 2, while Tier 1 hardware requires separate memory heaps for buffers, textures, and render-target and depth stencil surfaces. Resource binding tier 1 and resource heap tier 1 are required for all supporting hardware.
You can use #pragma directives to indicate that a shaderA program that runs on the GPU. More info
See in Glossary requires certain GPU features. At runtime, Unity uses this information to determine whether a shader program is compatible with the current hardware.
You can specify individual GPU features with the #pragma require directive, or specify a shader model with the #pragma target directive. A shader model is a shorthand for a group of GPU features; internally, it is the same as a #pragma require directive with the same list of features.
It is important to correctly describe the GPU features that your shader requires. If your shader uses features that are not included in the list of requirements, this can result in either compile time errors, or in devices failing to support shaders at runtime.
It's confusing, but I guess what it could mean that if a GPU/driver supports only all mandatory features of 12_1 eg, it could still have some of the newer 12_2 features but maybe missing some other features of that tier that would be mandatory for "full" feature level 12_2 support?
-determining-hardware-supported-directx-level.283972/#post-4552164
Create a context and check feature levels. This will give you what the current system supports, not what the underlying hardware supports.
As for API restrictions at the OS level and in order to know whether all the features are available in Windows 10, it would be better to ask Microsoft about this since they will take care of adding the functionality if possible.
Given that DX9-level hardware is getting rare for anyone running Vista up these days, I tend to just stick with shader model 4.0 as a minimum. That said, you may feel differently. At least one source indicates that 20% of gamers can't run DX10 either due to hardware or OS, though it doesn't qualify that with market demographics.
DirectX 11 and 12 have what is known as "feature levels" where they indicate that the driver supports being spoken to using the DirectX 11/12 API, but then can specify what DirectX version "hardware" features are fully supported by the card.
You are using Shader Model but with Level 9_1 feature set, which is designed either to use Direct3D11 API on older cards that do not support "real" feature level 4.0, or embedded devices (read here, phones mostly).
According to Tech power up intel HD graphics have direct x 11 (feature level 11, shader mode 5.0). I ran dxdiag command, and my system shows I have DirectX 11, but the feature level is 10_1. isn't it supposed to have feature level 11 with me having intel HD graphics? or it's just my graphics card got some problems? could you please read the info below and give me a solution? I ran some Windows updates and downloaded DirectX 11 from the ms store (ig). what should I do?
Feature level defined by the capabilities of DirectX 12 hardware feature level 12_2 with Shader Model 6.5 Raytracing Tier 1.1 Mesh and Amplification shaders Variable rate shading Sampler feedback Resource binding tier 3
these are named after graphics API's like ES3 but a feature level can be used with a different API (eg ERHIFeatureLevel::ES3.1 on D3D11) As long as the graphics API supports all the features of the feature level (eg no ERHIFeatureLevel::SM5 on OpenGL ES3.1)
The shader model can be identified using a Microsoft utility called DirectX Capabilities Viewer. If the shader model is older than version 6, but the graphics card or chip is fairly new, the display driver may need to be updated.