Direct3D feature levels discussion

DmitryKo

Veteran
I thought the announcement stuff for Broadwell said it was DX12 ready? It support for 11.2, up from 11.1 on Haswell.
Direct3D 11.2 runtime in Windows 8.1 - not feature level 11_2, which does not really exist in Direct3D 11.2!
https://msdn.microsoft.com/en-us/library/windows/desktop/ff476876

_____
I do plan to move to GitHub but first I want to convert from printf() to STL <format> and this requires Visual Studio 2022 v.17 2019 v16.10 Preview 3, which should be released by Summer.

For now, you have to download the ZIP file attached to the original forum post:
https://forum.beyond3d.com/posts/1840641/
 
Last edited by a moderator:
The separate API version and feature level are quite confusing. It doesn't help that the GPU marketing teams intentionally mix them when it makes their product look better. Every DX API revision has added new GPU features (requiring hardware support). For example 11_1 hardware feature level was included in DirectX 11.1 API. However all the new hardware features in DX 11.2 API (such as tiled resources tier 2) were optional features. Thus there is no 11_2 feature level.

DirectX 11.3 API will bring several new hardware features:
http://wccftech.com/directx-11-3-api/

It will be interesting to see whether all of these are optional features (of 11_1) or whether these form feature level 11_3. Feature level 11_3 would be an odd name, since there is no feature level 11_2. But it would be even more confusing if the new DX 11.3 API hardware features were called feature level 11_2.
 
The separate API version and feature level are quite confusing. It doesn't help that the GPU marketing teams intentionally mix them when it makes their product look better
Yes, marketing talk about runtime versions instead of hardware feature levels is highly confusing.

Feature level 11_3 would be an odd name, since there is no feature level 11_2. But it would be even more confusing if the new DX 11.3 API hardware features were called feature level 11_2.
They can name it 11_2, 11_3, or 12_0 - it doesn't matter as long as each higher level is a strict superset of the lower levels.

The hardware is not actually required to support all existing feature levels in a linear succession. It can support only the highest DDI level and the Direct3D runtime will use this DDI even for lower layers - see "Feature level upgrade" https://social.msdn.microsoft.com/F.../thread/a1cc57e4-4f26-4fc4-934d-30e1c1c681c5/

This feature didn't work down to 9_x levels in Direct3D 11.1, but I'd imagine it will work in Direct3D 11.3/12 and WDDM 2.0, since they require 11_0 hardware - so it makes perfect sense to just expose the highest possible feature set supported by the hardware, and let the runtime make necessary translations for applications that request lower levels.
 

Ugh I cannot believe Microsoft found a way to make Direct3D even more confusing than OpenGL's extensions. I'm impressed with the speed in which they did it too. Bring back dx10's all or nothing approach! Oh well, I guess this is getting slightly off-topic...
 
Ugh I cannot believe Microsoft found a way to make Direct3D even more confusing than OpenGL's extensions. I'm impressed with the speed in which they did it too. Bring back dx10's all or nothing approach! Oh well, I guess this is getting slightly off-topic...

As far as i remember it have allways been like that, you have hardware features ( who need specific hardware features for work ), you have some hardware features who can be "emulated" by software ( the optional one ), and some who just need to be included in softwares.. this have permit them to make evolve DirectX features stack without completely break the compatibility with old hardware and without be limited to only hardware change.. ( you cant not support a features on the hardware level, but you can emulated it on the software level ( with a cost on performance )..

Hopefully we have only 3 actors on the gpu PC market. ( intel, AMD, Nvidia )
 
As far as i remember it have allways been like that, you have hardware features ( who need specific hardware features for work ), you have some hardware features who can be "emulated" by software ( the optional one ), and some who just need to be included in softwares.. this have permit them to make evolve DirectX features stack without completely break the compatibility with old hardware and without be limited to only hardware change.. ( you cant not support a features on the hardware level, but you can emulated it on the software level ( with a cost on performance )..

Hopefully we have only 3 actors on the gpu PC market. ( intel, AMD, Nvidia )

No it wasn't like that in DirectX 10. DirectX 9 had caps which were more or less optional features. But DirectX 10 was truly an all or nothing approach. If a gpu was sm 4.0 or 4.1, you knew exactly what features it supported. No additional queries were required. With DirectX 11 they introduced feature levels/optional features/tiers/etc. that retroactively brought optional features to Direct3D 10 gpus, but there was a window in which DirectX was crystal clear. Now we have IHVs and hardware sites talking about supporting a feature level that doesn't even exist! The whole situation is a complete mess. And unfortunately it looks to be only getting worse.
 
True for DX10.0 , not for DX10.1 .... where only AMD was support the full features on hardware level, when Nvidia was exploit the software way. Im not sure MS is more responsible of this mess than the hardware manufacturer.
 
That was NVAPI (or whatever) and not part of the official DirectX specification. Some nvidia cards were actually Direct3D 10.1 (mostly oem iirc).
 
DirectX 10 was truly an all or nothing approach. If a gpu was sm 4.0 or 4.1, you knew exactly what features it supported. No additional queries were required. With DirectX 11 they introduced feature levels/optional features/tiers/etc. that retroactively brought optional features to Direct3D 10 gpus
Feature levels 10_0 and 10_1 were introduced in Direct3D 10.1, Direct3D 11.0 expanded them with levels 11_0 and 9_1/9_2/9_3, and Direct3D 11.1 (Windows 8) introduced level 11_1 and optional capabilities through CheckFeatureSupport.

https://msdn.microsoft.com/en-us/library/windows/desktop/jj863687.aspx

Ugh I cannot believe Microsoft found a way to make Direct3D even more confusing than OpenGL's extensions.
Now we have IHVs and hardware sites talking about supporting a feature level that doesn't even exist! The whole situation is a complete mess.
How so? There are feature levels which encapsulate hardware features in strict supersets, and there are a few optional features that apply to all feature levels (in Direct3D 11.3/WDDM 2.0).

you have some hardware features who can be "emulated" by software ( the optional one ), and some who just need to be included in softwares
Hardware features can't be emulated by CPU, though there can be improvements either to in the internals of the Direct3D runtime and WDDM, or the Direct3D API itself, which can apply to most hardware.
 
Feature levels 10_0 and 10_1 were introduced in Direct3D 10.1, Direct3D 11.0 expanded them with levels 11_0 and 9_1/9_2/9_3, and Direct3D 11.1 (Windows 8) introduced level 11_1 and optional capabilities through CheckFeatureSupport.

I don't believe this is correct or at least to the broader point I was making. Direct3D 10.1 didn't introduce new optional features (only new required features), but DirectX 11 retroactively brought optional features to Direct3D 10.x gpus (e.g. compute shaders).

How so? There are feature levels which encapsulate hardware features in strict supersets, and there are a few optional features that apply to all feature levels (in Direct3D 11.3/WDDM 2.0).

Because I shouldn't have to spend significant amount of time researching what % of gpus currently support y feature (or worse z tier on y feature). For example, there are some obscure optional features today (well last time I checked) that Nvidia supports on Windows 8.x but mysteriously not on Windows 7 (and yes Windows 7 supported those optional features). So it's actually quite difficult to get an accurate picture of who supports what. This "retroactive approach" only adds to the ever growing matrix of what exactly does a feature level 11_x gpu support. Basically I'm unhappy that it creates more fragmentation within a feature level.
 
Last edited:
I don't believe this is correct or at least to the broader point I was making
You said it's not correct, and then basically just recited my post... what's the point?

This "retroactive approach" only adds to the ever growing matrix of what exactly does a feature level 11_x gpu support
Actually Direct3D 11.1 and WDDM 1.2 made most mandatory features on level 11_1 optional for levels 10_x and 11_0.
I'd think optional features introduced with Direct3D 11.2 and 11.3 will be promoted to a new feature level at one point.

there are some obscure optional features today (well last time I checked) that Nvidia supports on Windows 8.x but mysteriously not on Windows 7
This is probably because Windows 7 doesn't actually support Direct3D 11.1 features that depend on WDDM 1.2.

Max McMullen explained in another thread why he had to disable WDDM 1.2 in Windows 7 Platform Update.
 
Last edited:
You said it's not correct, and then basically just recited my post... what's the point?

The point is you seemed to disagree that DirectX 10 was all or nothing. Perhaps I just misunderstood.
Actually most optional features in Direct3D 11.0 were promoted to feature level 11_1 in Direct3D 11.1; optional features introduced with Direct3D 11.2 and 11.3 will likewise be promoted to a new feature level at one point.

While true that doesn't change the fragmentation problem. There are plenty of Windows 7 users that have an otherwise feature level 11_1 capable gpu.


I actually tried editing my post for this (not fast enough :p), but the feature was supported in Windows 7.
 
DmitryKo said:
Actually most optional features in Direct3D 11.0 were promoted to feature level 11_1 in Direct3D 11.1; optional features introduced with Direct3D 11.2 and 11.3 will likewise be promoted to a new feature level at one point.

I actually addressed this rather poorly in the previous post. The problem is not whether or not these features will one day become mandatory, but rather what does the market currently support. These optional features and tiers require further effort and research to determine if they are worth supporting.
 
The point is you seemed to disagree that DirectX 10 was all or nothing
I disagreed that feature levels were introduced in Direct3D 11.0 - they were first introduced in Direct3D 10.1.

While true that doesn't change the fragmentation problem. There are plenty of Windows 7 users that have an otherwise feature level 11_1 capable gpu.
That's exaclty why Microsoft announced a free upgrade offer for all Windows 7/8/8.1 users. Eurogamer has a great round-up on this - they even try to (unsuccessfully) cite Max McMullen's post above:
http://www.eurogamer.net/articles/digitalfoundry-2015-gdc-preview-windows-10-vs-steam-os


the feature was supported in Windows 7.
You said "there are some obscure optional features... that Nvidia supports on Windows 8.x but mysteriously not on Windows 7"

Optional features were introduced in Direct3D 11.1 with CheckFeatureSupport function - most of those features described by D3D11_FEATURE_DATA_D3D11_OPTIONS are actually a requirement on feature level 11_1, so they all will be TRUE when queried on a device opened with that feature level. BUT they were also made available as optional for level 11_0, probably because current NVidia hardware does not fully support feature level 11_1.

HOWEVER since Direct3D 11.1 and feature level 11_1 require a new version of DDI11 that comes with WDDM 1.2, and WDDM 1.2 is not available in Windows 7 as I said above - there is actually no technical way to expose these optional features on Windows 7 for NVidia hardware, even though they are fully supported in Windows 8 which does supprot WDDM 1.2.


These optional features and tiers require further effort and research to determine if they are worth supporting.
Well, the same can be said about top feature levels...

Microsoft learned the hard way that levels defined only for certain vendor's cards - that is 10_1 and 11_1 which were only available on AMD cards - are largely a waste of development effort, since no-one codes for them... So yes, it's unfortunate that hardware vendors cannot yet agree on a unified feature set for a new level, but they eventually will.
 
I disagreed that feature levels were introduced in Direct3D 11.0 - they were first introduced in Direct3D 10.1.

Then it's my mistake, I thought you were disagreeing with the broader point I was making.
That's exaclty why Microsoft announced a free upgrade offer for all Windows 7/8/8.1 users. Eurogamer has a great round-up on this - they even try to (unsuccessfully) cite Max McMullen's post above:
http://www.eurogamer.net/articles/digitalfoundry-2015-gdc-preview-windows-10-vs-steam-os

You said "there are some obscure optional features... that Nvidia supports on Windows 8.x but mysteriously not on Windows 7"

Optional features were introduced in Direct3D 11.1 with CheckFeatureSupport function - most of those features described by D3D11_FEATURE_DATA_D3D11_OPTIONS are actually a requirement on feature level 11_1, so they all will be TRUE when queried on a device opened with that feature level. BUT they were also made available as optional for level 11_0, probably because current NVidia hardware does not fully support feature level 11_1.

HOWEVER since Direct3D 11.1 and feature level 11_1 require a new version of DDI11 that comes with WDDM 1.2, and WDDM 1.2 is not available in Windows 7 as I said above - there is actually no technical way to expose these optional features on Windows 7 for NVidia hardware, even though they are fully supported in Windows 8 which does supprot WDDM 1.2.


Well, the same can be said about top feature levels...

Microsoft learned the hard way that levels defined only for certain vendor's cards - that is 10_1 and 11_1 which were only available on AMD cards - are largely a waste of development effort, since no-one codes for them... So yes, it's unfortunate that hardware vendors cannot yet agree on a unified feature set for a new level, but they eventually will.

I don't think I'm being clear. I'm talking about something like logical ops which should be supported on Windows 7 with the platform upgrade. When I checked dxcaps on a kepler Windows 7 machine at work (with the platform upgrade) the entry showed up but the feature was unsupported. However at home both my fermi and maxwell cards supported the feature on Windows 8.1. Perhaps it was just a driver quirk, but regardless the original point I was trying to make was this latest trend of retroactively adding optional features has greatly increased confusion about DirectX. I've found in practice it hasn't worked out as well as it should have. I also gave DirectX 10 as an example of something I prefer (all or nothing). I guess if you don't find the current situation confusing, we'll just have to agree to disagree.

Not really related, but Nvidia did release Direct3D 10.1 cards. I assume you don't count this, but maxwell (not the original) is also 11_1.
 
retroactively adding optional features.

Great point ... In the past it was always the API catching up to what the HW had to offer, but doing it in a way that tried to make it platform/hw agnostic for the millions of windows devs ..


... but now with DX12's low-level-api being sold to us as

1. high-level-API/runtime getting out of the way allowing developers access to the underlying HW
2. Over time if an approach becomes main-stream, it may somehow make it's way back into the a high-level-api to make it easier for the masses of mediocre devs..

It's going to be interesting to see how this pans out
 
Last edited:
I'm talking about something like logical ops which should be supported on Windows 7 with the platform upgrade. When I checked dxcaps on a kepler Windows 7 machine at work (with the platform upgrade) the entry showed up but the feature was unsupported.
Well, logical ops in a render stage in Direct3D 11.1 do in fact require WDDM 1.2 - so they can't work in Windows 7 Platform Update, though unfortunately this is not reflected in the Direct3D documentation.

the original point I was trying to make was this latest trend of retroactively adding optional features has greatly increased confusion about DirectX
This wouldn't happen if NVidia bothered to support x.1 versions... and this goes back as far as DX8 if you recall.
 
Back
Top