Direct3D feature levels discussion

Most likely only nvidia Gameworks titles will use 12.1 features as they are not present in consoles.

Most ports will use DX12 FL 11_0 I think.
 
FWIW: I don't think supporting 12_1 or not don't matter a whole lot...
I dunno, I think the division is pretty good. Both 12_0 (bindless) and 12_1 (better rasterization/ROP control) are important. 12_1 enables stuff like efficient OIT, volumetric shadows (AVSM), voxelization, user-space tiling/binning, etc. Are games all of a sudden going to require all of these features? Of course not, but the sooner the majority of hardware has them the sooner we can push those more future-looking techniques forward. Of course consoles will hold things back a bit, but that's always the case.

Level 12_0 mostly leverages on GCN features. Nvidia cards before Maxwell 2 will emulate some features in software.
Which features of 12_0 do you think are going to be "emulated"? Bindless isn't really something you can emulate per se. Typed UAVs you kind of can, although not necessarily efficiently in the presence of bindless.

12.1 was created for Maxwell 2
At least one of the main features in 12_1 showed up much earlier in non-NVIDIA hardware; and remember that there are tiers of several of the features :)
 
So rather than pushing forward DX12 and bringing a high level of feature support to consoles, AMD has ended up holding us back from what developers really want in DX12 :)
 
So rather than pushing forward DX12 and bringing a high level of feature support to consoles, AMD has ended up holding us back from what developers really want in DX12 :)
Welp. It is what it is. Consoles generally dictate the overall features we see in game engines.

*cough* UE4 Elemental
 
So rather than pushing forward DX12 and bringing a high level of feature support to consoles, AMD has ended up holding us back from what developers really want in DX12 :)
It may not be so bad. There are three levels of support for both ROV and CR. My understanding is that each tier improves on addressing on fringe/special cases that previous tier could not. Tier 3 would be that ideal feature level such that if consoles were to refresh when tier 3 variants would be released it would be good timing to get into it.
 
There are three levels of support for both ROV ...
ROVs don't have tiers, they either work or they don't :) Unfortunately there are very few alternatives for algorithms that need ROVs on hardware that doesn't support them (consoles). That's one of the reasons why we pushed so hard for other hardware vendors to support them and for them to be exposed in DirectX.
 
Last edited:
So rather than pushing forward DX12 and bringing a high level of feature support to consoles, AMD has ended up holding us back from what developers really want in DX12 :)
AMD supports feature level 12.0. This brings some highly important features such as typed UAV load and bindless resources.

I can't count how many times during the last month alone our graphics programmers have cursed the lack of typed UAV load in DX11 (on PC). Without typed UAV load, in-place modification of textures is impossible (unless the texture is using 32 bit per channel format = eats the BW alive, incurs 4x+ sampling cost multiplier). Sampling integer textures (with for example gather4) is not allowed, so bit packing is out of the question. Also bit packing + filtering do not work. Texture/buffer view rules do not allow aliasing 32 bit integer texture/buffer on top of 16 bit int/float or 8888 or 11f-11f-10f etc. So you often need to perform unnecessary extra copies and allocate temp storage to perform read+modify+write style operations. This costs performance and complicates the code quite a bit. Typed UAV load makes compute shaders much more useful.

Bindless is going to be huge in the long run. I already have designed many algorithms only doable with bindless. You can avoid bindless in many cases, but often at a big cost of program complexity and flexibility (and sometimes also performance, because bindless allows single pass implementation). Tiled resources are now finally supported in a major DirectX API revision. 11.2 had tiled resource support, but only a handful of hardware supported 11.2 and Windows 8 was not widely adopted either. Tiled resources allow sparse data structures efficiently, also with proper anisotropic filtering.

I would say that 12.0 brings slightly more important features than 12.1. Both are excellent additions. But even the baseline DX12 (fl 11.0) adds lots of important features, such as executeIndirect, async compute, VS RT output index and a new (awesome) resource binding (and barrier) model. Plus explicit multiadapter support.
 
Last edited:
I have updated the Wikipedia article with my own version of a basic Direct3D 12 feature matrix table (and some revisions to the main feature level table):
https://en.wikipedia.org/wiki/Direct3D#Direct3D_12_levels

I used reports by Ryan (both dxcapsview and my app) and this post by Andrew, but any additional comments and suggestions will be appreciated, especially D3D12 capability reports for Nvidia Fermi and Intel Haswell/Broadwell/Skylake.

I'm particularily interested in anything related to UAV-only rendering and UAVs at every stage, since D3D12 CheckFeatureSupport does not provide these options anymore...

I assume these are now assumed mandatory on the basic feature level 11_0, since they seem to be supported by all Direct3D 12 capable cards even on level 11_0. Unfortunately MSDN docs are still not up to date on Direct3D 12 levels 12_x and 11_x ...


BTW Ryan.
Anandtech forum suffers the fanboy attack on AMD for not being "full DX 12.1" - and what's funny, they repost messages from this thread to flame their war! Maybe it's time to clear some (I'd say much) confusion with a proper article explaining practical effects of feature levels and other optional capabilities in Direct3D 12 on both performance and rendering quality?

No-one outside this thread seems to understand that AMD level 11_1 cards differ from 12_0 cards only by a very minor feature, that is Tier 2 vs Tier 1 for Tiled Resources, or that NVidia level 11_0 cards support all the important features from level 11_1 - maybe even more than can be exposed with optional caps in Direct3D 11.x...
 
Last edited:
I have updated the Wikipedia article with my own version of a basic Direct3D 12 feature matrix table (and some revisions to the main feature level table):
https://en.wikipedia.org/wiki/Direct3D#Direct3D_12_levels

I used reports by Ryan (both dxcapsview and my app) and this post by Andrew, but any additional comments and suggestions will be appreciated, especially D3D12 capability reports for Nvidia Fermi and Intel Haswell/Broadwell/Skylake.

Would it be appropriate to include async compute and async copy in that table? That's an often misunderstood feature in terms of support IMO. In fact if it wasn't for @Ryan Smith's deep dive on it at Anandtech I'd have had no ideal that Kepler doesn't support async compute.

EDIT: Great table btw.
 
Maybe it's time to clear some (I'd say much) confusion with a proper article explaining practical effects of feature levels and other optional capabilities in Direct3D 12 on both performance and rendering quality?

No-one outside this thread seems to understand that AMD level 11_1 cards differ from 12_0 cards only by a very minor feature, that is Tier 2 vs Tier 1 for Tiled Resources, or that NVidia level 11_0 cards support all the important features from level 11_1 - maybe even more than can be exposed with optional caps in Direct3D 11.x...
I have something in mind, but I need to wait for everyone to get back from Computex (and likely their post-Computex vacations). So it won't happen for a little bit. But overall I agree with you, the rabbling has only gotten worse

Though I've tried explaining feature levels in some depth before and it hasn't caught on as well as I would have hoped. Between DirectX versions, feature levels, cap bits, and now resource tiers, it hasn't gotten any easier. Nor has the weird silence on feature level support until very recently helped matters (this was something I wanted to sort out post-GDC, but everyone declined to discuss it).
 
Last edited:
I'm too dumb to understand everything of the Wikipedia article, but from my first reading of the feature level tables, did I get it right that feature level 11_0 for D3D11 is not exactly the same as 11_0 for D3D12? (The latter seems to be a superset?)
I knew it was confusing, but the more I read about it, the worse it gets...
 
I wasn't overly serious on my comment regarding AMD and DX12, it was more a humorous observation based on the last few pages of information. I can't wait for the DX12 era to come in full force and I hope it will be a lot faster adoption than DX10/11 was.
 
ROVs don't have tiers, they either work or they don't :) Unfortunately there are very few alternatives for algorithms that need ROVs on hardware that doesn't support them (consoles). That's one of the reasons why we pushed so hard for other hardware vendors to support them and for them to be exposed in DirectX.
I just made a quick test with Intel OIT sample, I did a quick check the sources and as far i understand it uses GL_INTEL_fragment_shader_ordering extension for AOIT rendering mode.
AOIT mode work well with AMD hardware on my system.

I also got a warning stating that my system/driver does not support UAV serialization extension.

How much differs D3D12 ROVs from GL_INTEL_fragment_shader_ordering extension? If they are more or less the same and it ROVs do not require UAV serialization extension equivalent, I do not understand why AMD hardware does not support ROVs on D3D12...
I have updated the Wikipedia article with my own version of a basic Direct3D 12 feature matrix table (and some revisions to the main feature level table):
https://en.wikipedia.org/wiki/Direct3D#Direct3D_12_levels

I used reports by Ryan (both dxcapsview and my app) and this post by Andrew, but any additional comments and suggestions will be appreciated, especially D3D12 capability reports for Nvidia Fermi and Intel Haswell/Broadwell/Skylake.

I'm particularily interested in anything related to UAV-only rendering and UAVs at every stage, since D3D12 CheckFeatureSupport does not provide these options anymore... I assume these could be promoted to the basic feature level 11_0, since they seem to be supported by all Direct3D 12 capable cards, but MSDN docs are still not up to date on Direct3D 12 levels 12_x and 11_x .


BTW Ryan.
Anandtech forum suffers the fanboy attack on AMD for not being "full DX 12.1" - and what's funny, they repost messages from this thread to flame their war! Maybe it's time to clear some (I'd say much) confusion with a proper article explaining practical effects of feature levels and other optional capabilities in Direct3D 12 on both performance and rendering quality?

No-one outside this thread seems to understand that AMD level 11_1 cards differ from 12_0 cards only by a very minor feature, that is Tier 2 vs Tier 1 for Tiled Resources, or that NVidia level 11_0 cards support all the important features from level 11_1 - maybe even more than can be exposed with optional caps in Direct3D 11.x...

You forgot the funny "VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation" and "ResourceHeapTier".

The first should be supported by all AMD and NV hardware (Intel hardware not as far I know, but intel iGPs are the only with a decent geometry shader back-end ^_^), the second I know only the value for AMD HW (tier 2).
 
Since it seems I cannot edit a message, I want to state that VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation should not be supported by all current drivers.
 
I just made a quick test with Intel OIT sample, I did a quick check the sources and as far i understand it uses GL_INTEL_fragment_shader_ordering extension for AOIT rendering mode.
AOIT mode work well with AMD hardware on my system.
It's a DirectX sample - it doesn't use the OpenGL extension :) If you're not running on Intel hardware then it will not show you the pixel synchronization option in the dropdown. By default the application just runs in alpha blend mode (with incorrect output). You have to change it to DX11 linked lists or pixel sync via the dropdown.
 
It's a DirectX sample - it doesn't use the OpenGL extension :) If you're not running on Intel hardware then it will not show you the pixel synchronization option in the dropdown. By default the application just runs in alpha blend mode (with incorrect output). You have to change it to DX11 linked lists or pixel sync via the dropdown.
My bad, I didn't notice that IntelExt_BeginPixelShaderOrdering was just a shader XD
However the GL extension is still exposed by AMD drivers.
 
Intel Sandy Bridge is WDDM 1.2 but FL 10.1. What other advantages does WDDM 1.2 bring?
WDDM 1.2 and Direct3D 11.1 introduce optional features for levels 10_x and up - specifically DirectCompute (CS4.x), extended pixel formata, logic ops in output merger, etc.

https://msdn.microsoft.com/en-us/library/windows/desktop/ff476876(v=vs.85).aspx#Overview
https://msdn.microsoft.com/en-us/library/windows/hardware/jj583805(v=vs.85).aspx


I'm too dumb to understand everything of the Wikipedia article, but from my first reading of the feature level tables, did I get it right that feature level 11_0 for D3D11 is not exactly the same as 11_0 for D3D12?
As I said in the post above, this is the effect of Direct3D 12 hardware either supporting feature level 11_1 or supporting most level 11_1 features as optional on level 11_0 - as specifically Fermi/Kepler/Maxwell-1 were designed to work.

So minimum supported hardware is a superset of level 11_0 and so these features are not optional anymore in Direct3D 12 - they are not even present in D3D12_FEATURE_DATA_D3D12_OPTIONS.

I've changed the table to reflect that these features were optional in Direct3D 11.1/11.2 ....


You forgot the funny "VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation" and "ResourceHeapTier".
I don't have statistics for these two features yet - we need someone to run the latest D3D12 feature check tool on all supported AMD, NVidia and Intel cards and report the results.

Also, the first feature is too technical to explain in a Wikipedia article, and Resource Heap tier is not documented on MSDN yet.

I didn't notice that IntelExt_BeginPixelShaderOrdering was just a shader
Maybe references to Direct3D 11 or HLSL on the description page would ring the bell? :p
 
Last edited:
Back
Top