I attended Gamefest 2008 last week. Gamefest (formerly called Meltdown) is a Microsoft-run Windows and Xbox 360 game development conference. This year there were two notable announcements: XNA Community games (discussed in a previous blog post) and the first public disclosure of Direct3D 11.
Direct3D is, of course, the API used by most Windows games, but its importance extends beyond Windows. Direct3D features guide the development of graphics hardware in general, so these features are bound to show up in future consoles, as well as in OpenGL.
The announcement that Direct3D 11 would not be tied to the next version of Windows (as many had feared), and would be available on Windows Vista was very significant to Windows developers, many of whom complained about the tying of Direct3D 10 to Windows Vista. Direct3D 11 will also be available on Direct3D 9, 10, and 10.1 level graphics hardware (although the new features will not be available there, with the exception of some multithreading enhancements).
The fact that the Direct3D 11 API is a strict superset of the 10/10.1 API is also cause for relief among game developers. From Direct3D 9 to 10, the API went through extensive changes. These changes were mostly long-overdue cleanups and improvements, but they left developers supporting two very different APIs if they wanted to support the many customers using Windows XP and also expose the new Direct3D 10 hardware features.
This is the first part of a multi-part post which will summarize the essential facts about Direct3D 11, as known from the Gamefest slides. Eventually, the slides should show up on the XNA Presentations page.
Full disclosure of Direct3D 11 should occur later this year – the November 2008 DirectX SDK release will feature a preview version of the API, including full documentation and code samples.
“Direct3D 11 will also be available on Direct3D 9, 10, and 10.1 level graphics hardware” – is that actually true? (that DX11 will be available on DX9 level hardware)
Quoting from one of their slides:
* Direct3D 11 will run on down-level hardware
– Multithreading!
– Direct3D 10.1, 10, and 9 hardware / drivers
– Full functionality (for example, tessellation) will require Direct3D 11 hardware
There has been some confusion over what “D3D11 will run on down-level hardware” means and what the significance is. Of course, D3D11 will not expose features the hardware does not have (no software emulation here!). So D3D10 or D3D9 parts will not have any compute shaders, tessellation stages, new texture compression modes, etc. even when accessed through a D3D11 interface.
So why is this important? There is one new feature older hardware will have, which is multithreaded rendering (although for best performance new drivers will be needed). The most significant fact is that D3D11 will allow a developer to target all hardware on Vista (or later) with one API. This was not the case with D3D10 (which did not support D3D9 hardware), and since the API changed drastically going from D3D9 to D3D10, this required developers to support two very different code paths to support older hardware.
The situation with D3D11 is not ideal, since the D3D9 code path is still needed to support users running Windows XP. But at least supporting users on post-XP Windows OSes can be done with one API, regardless of the hardware they are using.