DmitryKo
Veteran
FYI the idea of strict feature sets tied to each major release of DirectX was abandoned some 12 years ago during the development of Windows 8.
First, a bit of historical overview that kind of sums up this entire thread. The original Direct3D 10 API released in Windows Longhorn/Vista did not use feature levels - these were first introduced with Direct3D 10.1 update, which required additional features on top of 10.0 requirements. Direct3D 10 runtime also required a new user-mode Display Driver Interface (DDI), so it would not work with DX9-class cards and drivers. More than that, you couldn't even use any of the updated 10.1 APIs on 10.0 hardware.
This design approach wasn't very developer-friendly. The new API has been refactored and cleaned-up, making it source-code incompatible (Microsoft even considered renaming it Windows Graphics Foundation (WGF) during the development of Longhorn / Windows Vista). But since developers had to support older Direct3D9 hardware, they needed to maintain separate rendering front-ends for Direct3D10 and Direct3D9. WDDM drivers also had to provide two separate user-mode DDIs to support Direct3D 9 and 10 runtimes and applications.
Windows 7 came with Direct3D 11 which wasn't a refactoring like Direct3D 10 before, but rather an update and extension of the existing Direct3D 10 APIs, so it would run on existing Direct3D 10 hardware. Feature level 11_0 was added as a superset to existing levels 10_0 and 10_1 to allow the use of new APIs and hardware features.
Then Direct3D 11.1 runtime in Windows 8 introduced a new feature level 11_1 with a few optional features on level 11_0 (and 10_0/10_1), because both NVidia Fermi and NVidia Kepler did not qualify for level 11_1, with only 8 memory descriptors, or 'UAV slots' in all stages by Direct3D 11 speak (BTW Fermi also had other quirks which had to be worked around in drivers during the transition to WDDM 2.0 and Direct3D12, but driver support was removed very soon).
Direct3D 11.1 also added what they called "10 level 9", a subset of DIrect3D 10 APIs that could run on top of features provided by DX9-class hardware, with three new 'downlevel' feature levels 9_1, 9_2 and 9_3 corresponding to shader model 2.0/3.0 hardware; to make it possible, the Direct3D 11.1 runtime directly called DDI9 interfaces in the WDDM drivers.
It also used emulation of lower feature levels, the so-called 'feature level upgrade', so the WDDM driver would only implement the highest supported feature level, instead of explicitly supporting every feature level possible with DDI10, and the runtime would automatically convert API calls and data structures.
Windows 8.x didn't really take off with its controversial changes to the user interface, so Windows 7 remained the most used version - unfortunately it was stuck with feature level 11_0, because Microsoft couldn't backport WDDM 1.2 there. Therefore developers couldn't use significant new Direct3D 11.x features like uniform memory access (Unordered Access Views, or UAVs, and Shader resource views, or SRVs) and tiled resources (virtual GPU memory paging).
When Direct3D 12 in Windows 10 refactored the Direct3D 11 API to remove almost all data processing in the Direct3D runtime, making most APIs and features just a thin layer over DDI12 calls in the user-mode driver, this required redefining the basic feature set of Direct3D 11 hardware to support GPUMMU / IOMMU virtual memory models (which BTW has been in the making since WinHEC 2006 announcement of WDDM 2.x).
As a result, the difference between levels 11_0, 11_1 and the baseline level 12_0 is small in Direct3D 12, because most recent hardware at the time was capable of a great share of features required on level 12_0 so these were exposed as optional on lower levels 11_0 and 11_1. And level 12_1 was primarily about requiring rasterizer-ordered views, which didn't really take off in real-word usage.
So it's not nearly like it used to be during Direct3D 7/8/9 era, when hardware vendors could skip entire parts of the rendering pipeline by setting 'capability bits' (caps) which were counted by the hundreds and made life of both end users and Direct3D developers quite miserable...
Feature level 12_2 from 2021 remains the most significant upgrade that provides raytracing to improve lighting calculations, mesh shaders to improve geometry processing, and also sampler feedback and tiled resources to improve handling of large textures which is part of what Microsoft calls the 'Xbox Velocity Architecture' (see GameStack 2021 Live 'Game Asset Streaming' demo).
First, a bit of historical overview that kind of sums up this entire thread. The original Direct3D 10 API released in Windows Longhorn/Vista did not use feature levels - these were first introduced with Direct3D 10.1 update, which required additional features on top of 10.0 requirements. Direct3D 10 runtime also required a new user-mode Display Driver Interface (DDI), so it would not work with DX9-class cards and drivers. More than that, you couldn't even use any of the updated 10.1 APIs on 10.0 hardware.
This design approach wasn't very developer-friendly. The new API has been refactored and cleaned-up, making it source-code incompatible (Microsoft even considered renaming it Windows Graphics Foundation (WGF) during the development of Longhorn / Windows Vista). But since developers had to support older Direct3D9 hardware, they needed to maintain separate rendering front-ends for Direct3D10 and Direct3D9. WDDM drivers also had to provide two separate user-mode DDIs to support Direct3D 9 and 10 runtimes and applications.
Windows 7 came with Direct3D 11 which wasn't a refactoring like Direct3D 10 before, but rather an update and extension of the existing Direct3D 10 APIs, so it would run on existing Direct3D 10 hardware. Feature level 11_0 was added as a superset to existing levels 10_0 and 10_1 to allow the use of new APIs and hardware features.
Then Direct3D 11.1 runtime in Windows 8 introduced a new feature level 11_1 with a few optional features on level 11_0 (and 10_0/10_1), because both NVidia Fermi and NVidia Kepler did not qualify for level 11_1, with only 8 memory descriptors, or 'UAV slots' in all stages by Direct3D 11 speak (BTW Fermi also had other quirks which had to be worked around in drivers during the transition to WDDM 2.0 and Direct3D12, but driver support was removed very soon).
Direct3D 11.1 also added what they called "10 level 9", a subset of DIrect3D 10 APIs that could run on top of features provided by DX9-class hardware, with three new 'downlevel' feature levels 9_1, 9_2 and 9_3 corresponding to shader model 2.0/3.0 hardware; to make it possible, the Direct3D 11.1 runtime directly called DDI9 interfaces in the WDDM drivers.
It also used emulation of lower feature levels, the so-called 'feature level upgrade', so the WDDM driver would only implement the highest supported feature level, instead of explicitly supporting every feature level possible with DDI10, and the runtime would automatically convert API calls and data structures.
Windows 8.x didn't really take off with its controversial changes to the user interface, so Windows 7 remained the most used version - unfortunately it was stuck with feature level 11_0, because Microsoft couldn't backport WDDM 1.2 there. Therefore developers couldn't use significant new Direct3D 11.x features like uniform memory access (Unordered Access Views, or UAVs, and Shader resource views, or SRVs) and tiled resources (virtual GPU memory paging).
When Direct3D 12 in Windows 10 refactored the Direct3D 11 API to remove almost all data processing in the Direct3D runtime, making most APIs and features just a thin layer over DDI12 calls in the user-mode driver, this required redefining the basic feature set of Direct3D 11 hardware to support GPUMMU / IOMMU virtual memory models (which BTW has been in the making since WinHEC 2006 announcement of WDDM 2.x).
As a result, the difference between levels 11_0, 11_1 and the baseline level 12_0 is small in Direct3D 12, because most recent hardware at the time was capable of a great share of features required on level 12_0 so these were exposed as optional on lower levels 11_0 and 11_1. And level 12_1 was primarily about requiring rasterizer-ordered views, which didn't really take off in real-word usage.
So it's not nearly like it used to be during Direct3D 7/8/9 era, when hardware vendors could skip entire parts of the rendering pipeline by setting 'capability bits' (caps) which were counted by the hundreds and made life of both end users and Direct3D developers quite miserable...
Feature level 12_2 from 2021 remains the most significant upgrade that provides raytracing to improve lighting calculations, mesh shaders to improve geometry processing, and also sampler feedback and tiled resources to improve handling of large textures which is part of what Microsoft calls the 'Xbox Velocity Architecture' (see GameStack 2021 Live 'Game Asset Streaming' demo).
Last edited: