For the last weeks, the fact that DirectX 11.1 isnít supported in Windows 7 has been getting a lot of attention. We have now learned that the GeForce GTX 600s simply donít support this API! Our analysis followsÖ
DirectX, the flagship graphics API for PCs, was updated to version 11.1 for Windows 8. People often refer erroneously to DirectX when theyíre talking about its 3D component, Direct3D. DirectX is in fact a group of APIs. Here are the main graphics components:
- Direct3D for 3D rendering
- Direct2D for 2D graphics drawing
- DirectWrite for text drawing
- DirectCompute for massively parallel computing on the GPU
- DXGI for low level tasks and to interface with WDDM drivers
DirectX 11.1: whatís new?
Version 1.2 of DXGI and the WDDM drivers are used in Windows 8 along with version 11.1 of Direct3D. Version 11.1 of Direct3D is backwards compatible in the same way as Direct3D 11 was: different levels of features allow this API to support all GPUs as of the DirectX 9 generation introduced in 2002. This backwards compatibility is often a source of confusion (even in Microsoft documents!) as you have to differentiate 11.1, the version of the API, and 11.1, its maximum level of hardware functionality. As in the API features and to avoid confusion, weíll use 11_1 as our notation when talking about the level of functionality.
Before going into detail on the question of which platforms support DirectX 11.1, or rather which donít support it, we wanted to go back over the developments it introduces. These developments can be grouped into three categories:
- Those that reduce the cost of the APIs and enable mobile peripheral support
- Those that facilitate the work of developers
- Those that pursue the development of graphics features
Efficiency, mobility, Windows RT and ARM SoCs
The first category is by far the most important for Microsoft because it allows them to position Windows in the mobile world and, above all, allows Windows RT to exist. In practice this serves as a guarantee of the smoothness and responsiveness of the interface, brings energy consumption down by discharging the CPU and supports the GPUs used in ARM SoCs.
Microsoft has set itself the objectives of maintaining the interface display at 60 fps, reducing occasional jumpiness (glitch count), accelerating the time to first frame, reducing memory utilisation and reducing CPU utilisation. DirectX 11.1 thus introduces its lot of structural improvements to the APIs which make it up, with the goal of reducing their overhead, notably by reducing the cost of certain functions. This gains a few milliwatts here and there and reduces load in the ARM CPU cores, which have relatively modest performance in comparison to the x86 cores traditionally used in the Windows environment.
Microsoft quotes a few examples
with the performance gains obtained through the improvement of the Direct3D, Direct2D and DirectWrite APIs: + 130 to +300% for text drawing and +180 to +400% when rendering standard geometric shapes. This means the system can be at idle more often. These improvements are independent of the level of hardware functionality.
An additional optimisation is however linked to the 11_1 level of the latest graphics cards. Itís called Target Independant Rasterization
and enables to move the processing of irregular geometric shapes from the CPU to the GPU. For this a more flexible rasterizer (a GPU unit that breaks geometric shapes down into pixels) is required, which explains why we're restricted to the most evolved hardware currently available here. Microsoft is talking about gains of between +150% and +500% on various vector shapes.
With Direct3D 11.1 Microsoft has reintroduced low precision processing on GPUs. You may recall Direct3D 9 allowed the use of FP16 (half) for shader processing. This format was abandoned with Direct3D 10 and while it may still be there in the code for compatibility reasons, the compiler systematically replaces it with FP32 (double). Given the importance of reducing the energy consumption of peripherals, along with the introduction of GPUs that are faster at low precision in certain SoCs, Microsoft has now reintroduced a similar option and developers can use several new types of data:
- min16float: minimum 16-bit floating point value
- min10float: minimum 10-bit floating point value
- min16int: minimum 16-bit signed integer
- min12int: minimum 12-bit signed integer
- min16uint : minimum 16-bit unsigned integer
If a GPU and its graphics driver support these formats, they can benefit from the option, otherwise they can use the first format up that they do support. Therefore, when using these types of data, the processing format isnít guaranteed and developers must avoid basing themselves on the specificities of a particular format (the maximum value for example). For example, if min16float is used, a Radeon HD 7000 will process the operation in FP32 while a Tegra 3 will process it in FP20. Direct3D 11.1 allows graphics drivers to expose support for one or more of these formats and, when it comes to 9_x levels of functionality, to differentiate this support for vertex and pixel shaders.
Direct3D 11.1 introduces three new 16-bit per pixel formats, namely 4 or 5 bits per colour: B5G6R5, B5G5R5A1, B4G4R4A4. Support is optional with the exception of B5G6R5, which is mandatory in the 11_1 feature level. They enable the reduction of energy consumption and the memory space used.
With Direct3D 11, clip planes werenít available for the DirectX 9 generation hardware. Clip planes allow you to define areas outside of which the rendering of objects can be skipped, either because they are outside the field of vision or because theyíre too far away. Additional flexibility introduced as of Direct3D 10 in the definition of clip planes and used again in Direct3D 11, made its support incompatible with the oldest hardware. Direct3D 11.1 with 9_x levels can now reinterpret certain clip planes in a format supported by DirectX 9 hardware.
Finally Direct3D 11.1 can detect the type of GPU architecture and tell the rendering engine if a tile based deferred renderer (TBDR) model is being used in place of a standard GPU with immediate or forward rendering. Various rendering techniques or optimisations may not be compatible or efficient with both these architectures and it is therefore important for developers to plan for both possibilities in Windows RT because certain SoCs will use TBDR type GPUs, such as ImgTech PowerVR ones.
Simplifying the use of APIs
Microsoft also wanted to make the work of developers easier. To this end Direct3D 11.1 now handles all GPU resources, making it easier to use the different DirectX 11.1 APIs (Direct3D, Direct2D, DirectWrite, DirectCompute) simultaneously. The interoperability of these APIs is also facilitated through the sharing of common resources. This sharing of resources also benefits videos, more simple access to which will be accorded to pixel shaders.
Various minor improvements have been made to the compiler, allowing Direct3D 11.1 to enable shader tracing and make code debugging easier.
Direct3D 11.1 supports the creation of constant buffers that are larger than the maximum constant buffer size that a shader can access (4096 4x32-bit component constants, namely 64 KB). Instead of juggling with several of these buffers or trying to remain within the maximum allowed, a very big buffer can be generated, only attributing a segment to a given shader.
Direct3D 11.1 lets you use logical operations instead of blending for render targets, a feature that weíve seen in OpenGL for years and which gives more flexibility to developers. Its support is mandatory in the 11_1 feature level and optional as of 10_0.
Of course Direct3D 11.1 also introduces new features designed to follow and inspire GPU developments. These are however relatively minor with this release in comparison to the introduction of tessellation or compute shaders in Direct3D 11.
With the 11_1 feature level, DirectCompute and the compute shaders can access 64 UAVs (Unordered Acess Views), the buffers with flexible reads/writes on which they work, as opposed to 8 previously. Whatís more, all types of shaders can access these UAVs and not just the pixel shaders as before. This opens the way to new rendering techniques that may call on the compute shaders to help with or replace any stage in the DirectX 3D pipeline.
The SAD4 (sum of absolute differences) instruction, which was introduced with the Radeon HD 5000s and is mainly used in video processing, can now be called directly in shader model 5.0. Previously the driver compiler had to detect and replace with SAD4 the sequence of operations it represents (12 additions). It can thus be used in a more straightforward way on GPUs that support it.
As with Direct3D 11, double precision support for shader model 5.0 is optional in Direct3D 11.1. This development of the API however adds an additional option: extended double with support for RCP, DIV and FMA instructions in double precision - these were previously absent.
Finally, 3D stereo is supported natively by DirectX 11.1 as of feature level 10_0, which allows developers to work on a standardised version more easily.
7 feature levels
Synthesising the various hardware feature levels offered by Direct3D 11.1, as well as all the innovations that the API has introduced, is a tough ask given the way that Microsoft has spread the information around its documentation, including a few small errors. Here's what we've managed:
There are several important points to consider with respect to the way these levels work:
- A GPU that supports a certain level doesnít necessarily support lower levels. For example, level 10_x and 11_x Intel GPUs donít support levels 9_2 and 9_3.
- Once a level is supported by a GPU, all the most recent models from the same manufacturer will also support it.
- You canít go beyond the options on offer with each level, even if the GPU can. For example, a GPU that supports level 10_0 wonít be able to filter FP16 textures in level 9_1. One exception to this is that the maximum size of textures may be bigger.
- We have grouped mandatory MSAA 16x support for level 11_1 with Target Independant Rasterization because it only concerns 2D and not 3D rendering.
- Level 9_3 uses vertex shader 2.a and pixel shader 2.x and not shader 3.0. The reason for this is an old rule that doesnít allow a mix of shader model 2.x and 3.0, while Direct3D 11.1 allows all types of supported shaders to be mixed. There are also small differences with the shader model 3.0 support between the Radeon X1000s and the GeForce 6s, while Microsoft did want to avoid options on introduction of the 9_x levels. As a result there's no direct correspondence between a level in Direct3D 11.1 and Direct3D 9.0c, which is a reference (especially as it's very close to the Xbox 360 HiDef rendering profile).
- The 9_x levels work through a 10_x level sub-layer, which makes them a little less efficient than native Direct3D 9. As a result, unless theyíre targeting support of older hardware, developers will be encouraged to use at least level 10_0, even if the targeted rendering could make do with level 9_3.
- The "16bpp formats" and "logical operations in a render target" options can be supported quite easily by all the GPUs with updated drivers as they already supported it in OpenGL.
- The larger constant buffers can be supported on all levels as of 10_0 with new drivers. They are however automatically supported on the 9_x levels as they are in fact then emulated.
- All levels optionally support lower precision processing.
- Level 9_1 corresponds to the minimum hardware specifications for Windows RT.
- Level 9_3 corresponds to the minimum hardware specifications for a new Windows 8 PC and for Windows Phone 8.
With DirectX 11.1, WARP (Windows Advanced Rasterization Platform) support has been extended. To recap, WARP is a Microsoft software rendering engine optimised for real time and which can replace the GPU so as to allow developers to test their rendering engine or to power systems without graphics cards (for example a remote access server). The new WARP supports levels 11_0 and 11_1 as well as DirectCompute but not double precision calculations or videos.
After this long explanation of what DirectX 11.1 actually is, itís time to get to the nub: its support.
DirectX 11.1, for which OS?
Windows 8 and Windows RT support DirectX 11.1 but what about Windows 7? This is an important question and Microsoft has never answered it very clearly officially. "Currently there are no plans to port DirectX 11.1 to Windows 7" is probably the closest weíve come to a definite answer. The problem is that developers planning their engine around Direct3D 11.1 and its SDK would risk finding themselves with a piece of software that is incompatible with Windows 7.
On the other hand, while Windows 7 and Windows 8 also support Direct3D 11, 10 and 9 APIs, Windows RT only supports Direct3D 11.1. In other words, without Direct3D 11.1 in Windows 7, it would be impossible to support the three operating systems.
Discreetly however, with the Preview Release of Internet Explorer 10 for Windows 7 and then with a standalone update
, Microsoft has just started to distribute a Platform Update for Windows 7 SP1. This is a platform that introduces bits of DirectX 11.1 to Windows 7 without yet documenting them (except by vaguely saying that Direct3D, Direct2D and DirectWrite are affected).
In contrast to the Platform Update designed for Windows Vista, this one isnít a major update as WDDM and DXGI havenít been developed and are still in their 1.1 versions, though versions 1.2 of Windows 8 are linked to several Direct3D 11.1 innovations (stereo 3D, 16bpp formats...). Microsoft says however that the DirectX 11 SDK is no longer compatible once the Platform Update has been installed on Windows 7 and that the Windows 8 SDK must be used in its place.
It seems obvious therefore that Microsoft is porting the DirectX 11.1 base to Windows 7 to ensure compatibility between this OS and engines that use the latest version of its graphics APIs, at the same time taking care to reserve the new features for Windows 8. It has to be said that the part optimised for mobile peripherals doesnít really add anything in Windows 7. Level 11_1 however wonít be included and itís doubtful, though possible, that the new options for lower levels (constant buffers, SAD4 instructions, logical operations on RTs) will be introduced on Windows 7. If these options are included in Windows 7, it would mean that probably the most essential features for gamers are available in this OS. If they arenít, Microsoft will, in spite of everything, have limited the damage by ensuring compatibility.
DirectX 11.1, which GPU?
While working on this report, we were able to observe that the 11_1 feature level was functional in Windows 8 with a Radeon HD 7000 but not with a GeForce 600. This made us suspect that it was not supported by Kepler GPUs even if it was still possible that the problem was linked to lack of support in the Nvidia drivers. We held out for this option at the same time as starting to call it into doubt. Our colleagues at Heise.de
then confirmed with Nvidia that level 11_1, namely what most people think of when they read about DirectX 11.1 in specs, isnít supported on the GeForce 600s.
We have however been telling you for six months that these graphics cards support DirectX 11.1, meaning of course the maximum level of DirectX 11.1. Has Nvidia been pulling the wool over our eyes? During the launch presentation of the card, Nvidia played on the use of the ambiguous terminology between DirectX 11.1, the API and 11_1, the feature level. At an interview which followed, we asked Nvidia about this more specifically to get confirmation that they were talking about feature level 11_1 and we got a positive answer.
When contacted on this, Nvidia said that they had neither attempted to highlight this gap in support, nor hide it and the person we had spoken to probably wasn't sure of the official line when replying to us. In other words it suited Nvidia that most journalists were making the same mistake but that by asking the question later or to the right person, we would have had the correct answer. To add to the confusion, in its latest drivers (including in Windows 7!) Nvidia has added a note saying that thereís DirectX: 11.1 support.
We could also say that the GeForce GTX 680 doesnít support DirectX 11.1 anymore than the GeForce FX 5800 does! Joking apart, like all the DirectX 9, DirectX 10 and DirectX 11 GPUs, the GeForce 600s do support the DirectX 11.1 API, but with a reduced level of features. The GeForce 600s however support most of the new level 11_0 and lower optional features: the logical operations on RTs, the new constant buffers and the 16bpp formats. These are above all taken care of through a software update and donít really require any new hardware.
The level 11_1 hardware features that arenít supported are linked on the one hand to the optimisation of 2D rendering and on the other to the opening up of future possibilities for developers in terms of a graphics pipeline customised with DirectCompute. While their complete support is welcomed, it is not indispensable for gamers at this point.
Only the Radeon HD 7700s, 7800s and 7900s based on GCN architecture currently give full DirectX 11.1 support. The graphics core of the Haswell CPUs will do the same if the drivers are developed in line with Intel's objectives. We also imagine that full support will be included on the GeForce 700s.
Windows RT, Surface and Tegra 3, a potential issue?
To bring this analysis to a close, we have a short comment to make on Windows RT. Microsoft is imposing several rules on developers, firstly concerning the mandatory use of Direct3D 11.1 for 3D rendering, as OpenGL ES support, which is used on iOS and Android, is excluded.
Next, in choosing the Tegra 3 for the Windows RT reference platform as well as for its own Surface tablet, Microsoft may have chosen an efficient GPU but it has also gone for one that is not particularly evolved: the Tegra 3 GPU is limited to level 9_1. As Microsoft doesnít intend to allow an application not to support its own tablet, even though other ARM SoCs with a more evolved GPU will be used in Windows RT, developers wonít be allowed to bring out applications that donít support level 9_1. Other levels have to be optional. Moreover, when an application exists in both ARM and x86 versions, the x86 version will also have to support level 9_1 in Windows 8. Remember than Windows Phone 8 doesnít suffer from this limitation because it is based on a Qualcomm platform which supports level 9_3.
Itís reasonable to suppose that within a few months, Qualcomm ARM SoCs or Nvidia Tegra 4s with 9_3 or higher support will land in Windows RT peripherals. If a game uses a graphics engine which canít go below level 9_3, as is the case for many x86 PC titles, it quite simply wonít be allowed to be ported to an ARM version for Windows RT.
This is an intriguing choice from Microsoft, which is either doing everything it can to put its weight behind its own Surface tablet or doesnít believe in a video game potential for Windows RT and ARM SoC.