From Evolution to Expansion and Multi-Threading: The Mile High Overview
The November DirectX SDK update was the first to include some DirectX 11 features for developers to try out. Of course, there is no DX11 hardware yet, but what is included will run on the current DX10 setup with DX10 hardware under Vista and the beta Windows 7. This combined with the fact that Khronos finished the OpenCL specification last month mark two major developments on the path to more general purpose computing on the GPU. Of course, DX11 is more geared toward realtime 3D and OpenCL is targeted at real general purpose data parallel programming (across multiple CPUs and GPUs) distinct from graphics, but these two programming APIs are major milestones in the future history of computing.
There is more than just the compute shader included in DX11, and since our first real briefing about it at this year's NVISION, we've had the chance to do a little more research, reading slides and listening to presentations from SIGGRAPH and GameFest 2008 (from which we've included slides to help illustrate this article). The most interesting things to us are more subtle than just the inclusion of a tessellator or the addition of the Compute Shader, and the introduction of DX11 will also bring benefits to owners of current DX10 and DX10.1 hardware, provided AMD and NVIDIA keep up with appropriate driver support anyway.
Many of the new aspects of DirectX 11 seem to indicate to us that the landscape is ripe for a fairly quick adoption, especially if Microsoft brings Windows 7 out sooner rather than later. There have been adjustments to the HLSL (high-level shader language) that should make it much more attractive to developers, the fact that DX10 is a subset of DX11 has some good transitional implications, and changes that make parallel programming much easier should all go a long way to helping developers pick up the API quickly. DirectX 11 will be available for Vista, so there won't be as many complications from a lack of users upgrading, and Windows 7 may also inspire Windows XP gamers to upgrade, meaning a larger install base for developers to target as well.
The bottom line is that while DirectX 10 promised features that could bring a revolution in visual fidelity and rendering techniques, DirectX 11 may actually deliver the goods while helping developers make the API transition faster than we've seen in the past. We might not see techniques that take advantage of the exclusive DirectX 11 features right off the bat, but adoption of the new version of the API itself will go a long way to inspiring amazing advances in realtime 3D graphics.
From DirectX 6 through DirectX 9, Microsoft steadily evolved their graphics programming API from a fixed function vehicle for setting state and moving data structures around to a rich, programmable environment enabling deep control of graphics hardware. The step from DX9 to DX10 was the final break in the old ways, opening up and expanding on the programmability in DX9 to add more depth and flexibility enabled by newer hardware. Microsoft also forced a shift in the driver model with the DX10 transition to leave the rest of the legacy behind and try and help increase stability and flexibility when using DX10 hardware. But DirectX 11 is different.
Rather than throwing out old constructs in order to move towards more programmability, Microsoft has built DirectX 11 as a strict superset of DirectX 10/10.1, which enables some curious possibilities. Essentially, DX10 code will be DX11 code that chooses not to implement some of the advanced features. On the flipside, DX11 will be able to run on down level hardware. Of course, all of the features of DX11 will not be available, but it does mean that developers can stick with DX11 and target both DX10 and DX11 hardware without the need for two completely separate implementations: they're both the same but one targets a subset of functionality. Different code paths will be necessary if something DX11 only (like the tessellator or compute shader) is used, but this will still definitely be a benefit in transitioning to DX11 from DX10.
Running on lower spec'd hardware will be important, and this could make the transition from DX10 to DX11 one of the fastest we have ever seen. In fact, with lethargic movement away from DX9 (both by developers and consumers), the rush to bring out Windows 7, and slow adoption of Vista, we could end up looking back at DX10 as merely a transitional API rather than the revolutionary paradigm shift it could have been. Of course, Microsoft continues to push that the fastest route to DX11 is to start developing DX10.1 code today. With DX11 as a superset of DX10, this is certainly true, but developer time will very likely be better spent putting the bulk of their effort into a high quality DX9 path with minimal DX10 bells and whistles while saving the truly fundamental shifts in technique made possible by DX10 for games targeted at the DX11 hardware and timeframe.
We are especially hopeful about a faster shift to DX11 because of the added advantages it will bring even to DX10 hardware. The major benefit I'm talking about here is multi-threading. Yes, eventually everything will need to be drawn, rasterized, and displayed (linearly and synchronously), but DX11 adds multi-threading support that allows applications to simultaneously create resources or manage state and issue draw commands, all from an arbitrary number of threads. This may not significantly speed up the graphics subsystem (especially if we are already very GPU limited), but this does increase the ability to more easily explicitly massively thread a game and take advantage of the increasing number of CPU cores on the desktop.
With 8 and 16 logical processor systems coming soon to a system near you, we need developers to push beyond the very coarse grained and heavy threads they are currently using that run well on two core systems. The cost/benefit of developing a game that is significantly assisted by the availability of more than two cores is very poor at this point. It is too difficult to extract enough parallelism to matter on quad core and beyond in most video games. But enabling simple parallel creation of resources and display lists by multiple threads could really open up opportunities for parallelizing game code that would otherwise have remained single threaded. Rather than one thread to handle all the DX state change and draw calls (or very well behaved and heavily synchronized threads sharing the responsibility), developers can more naturally create threads to manage types or groups of objects or parts of a world, opening up the path to the future where every object or entity can be managed by it's own thread (which would be necessary to extract performance when we eventually expand into hundreds of logical cores).
The fact that Microsoft has planned multi-threading support for DX11 games running on DX10 hardware is a major bonus. The only caveat here is that AMD and NVIDIA will need to do a little driver work for their existing DX10 hardware to make this work to its fullest extent (it will "work" but not as well even without a driver change). Of course, we expect that NVIDIA and especially AMD (as they are also a multi-core CPU company) will be very interested in making this happen. And, again, this provides major incentives for game developers to target DX11 even before DX11 hardware is widely available or deployed.
All this is stacking up to make DX11 look like the go-to technology. The additions to and expansions of DX10, the timing, and the ability to run on down level hardware could create a perfect storm for a relatively quick uptake. By relatively quick, we are still looking at years for pervasive use of DX11, but we expect that the attractiveness of the new features and benefit to the existing install base will provide a bigger motivation for game developers to transition than we've seen before.
If only Microsoft would (and could) back-port DX11 to Windows XP, there would be no reason for game developers to maintain legacy code paths. I know, I know, that'll never (and can't by design) happen. While we wholeheartedly applaud the idea of imposing strict minimum requirements on hardware for a new operating system, unnecessarily cutting off an older OS at the knees is not the way to garner support. If Windows 7 ends up being a more expensive Vista in a shiny package, we may still have some pull towards DX9, especially for very mainstream or casual games that tend to lag a bit anyway (and as some readers have pointed out because consoles will still be DX9 for the next few years). It's in these incredibly simple but popular games and console games that the true value of amazing realtime 3D graphics could be brought to the general computing populous, but craptacular low end hardware and limiting API accessibility on popular operating systems further contribute to the retardation of graphics in the mainstream.
But that's the overview. Let's take some time to drill down a bit further into some of the technology.
109 Comments
View All Comments
ssj4Gogeta - Saturday, January 31, 2009 - link
oh ok. thanks. :)PrinceGaz - Friday, January 30, 2009 - link
I was aware of the idea of the Tesselator in AMD's DX10.1 hardware, but this article was excellent in putting everything together in how it will (or might) function in the DX11 pipeline, and everything else associated with the additions DX11 builds on top of DX10, and the reasons behind what has been done and the implications of it.This is definitely up there with the best of the articles Anand himself posts here; well done Derek. It was the sort of article that first made AT my favourite site to visit first for reviews-- in depth and written by someone who knew what he was talking about. Thankyou.
PrinceGaz - Friday, January 30, 2009 - link
Just because you don't use like it doesn't mean that lots of people are using it day-in day-out on PCs it was pre-installed on. Admittedly I dual-boot Vista and XP, and 99 times out of 100 it is XP (the Vista installation is only used either to help my father when speaking on the phone and who bought a laptop with Vista last year, or to run 3DMark Vantage), but Vista is very popular with most people who use it. My father hasn't any complaints with it (okay so he hasn't used any other O/S, but does that matter).Personally, I intend to jump from XP to Win7 SP1 when it is released. My current Vista installation is 64-bit Ultimate SP1 and it works, but with only 2GB of RAM, I find that XP does everything just as well or better. I would say Vista is very successful though, as almost all computers sold with Windows today have Vista installed rather than XP. There are probably more computers now sold with irrelevant OS's like Linux or OS/X, than there are those that come shipped with XP (netbooks excluded).
PS: actually I like some Linux distros, so if you found the previous paragraph at all offensive, I apologise. But the average user isn't going to want a PC with a Linux distro, unless it comes fully pre-configured with every app they need pre-installed.
ameatypie - Tuesday, February 3, 2009 - link
sorry, but i completly disagree with this. Vista is RUBBISH. If you use it on your average comuter, it is slow. If you use it on a computer worse then that, it is worse then slow - it is useless. If you use it on a fast computer, it wastes half the reasorces that get thrown at it and it doesnt use the other half efficantly enough.The only reason people now days are using vista is because they are forced to with new computers - espically laptops.
I have seen the windows 7 beta, and THAT is going to be pretty good........ But vista is still RUBBISH. :P
just4U - Wednesday, February 4, 2009 - link
No one is FORCED to use Vista and it's certainly NOT rubbish. It is definitely a step way up from XP. I am using the Win7 Beta right now and it's a improvement but why anyone would say its pretty good and Vista is not is beyond me as they are very similiar.I really do think all the Vista bashing has come from people who just don't use it or never really gave it much of a chance. NO instead they go back to (what one user said..) That Bastion of security and stability ... Windows XP. Note the sarcasm. Xp was good for it's time but Vista blows it out of the water.
nilepez - Wednesday, February 4, 2009 - link
By average, do you mean a processor slower than a Athlon 64 3000+ and a 4 year old graphics card?Just curious, because I've got a machine like that that has no problems running Vista (and gets an Vista Experience score between 4 and 5).
Clearly your idea of average is a machine that was, at best, average 4 years ago.
Zoomer - Monday, February 2, 2009 - link
Well, if you throw lots of ram (8GB), fast new graphics card, and use nLite to remove/disable crap like UAC, Defender, firewall, readyboost, and make programs run with administrator privileges by default, it's usable.Nothing like Ubuntu though. However, Ubuntu doesn't run games, or rather, developers don't write mainstream 3D games for it, so I just use VMs or remote connections.
One thing I have not figured out is to change the mouse behavior in windows to more closely resemble linux: mouse wheel should scroll the window the pointer is hovering over, regardless of the active window. Unfortunately, it doesn't seem possible. Therefore, Vista sucks. ;p
gochichi - Thursday, February 19, 2009 - link
Ubuntu is also bloated. I mean, I can't get my hard drive to stop making noises on Ubuntu.. NOR on Vista... which annoys me to no end. I was finally able to stop the noises in Vista but Ubuntu still grinds it away.Ubuntu is the stuff though. I run Office 2003 on it using Wine and that runs great. But the truth is that Office 2007 is actually better and so Vista is better. you start taking games into account and Windows is clearly the best period... consoles and everything... I'll take a Windows box anyday.
Ubuntu is here to stay, it's getting better every six months. Because Windows XP hasn't died and refuses to die... it gives the open source community time to play catch up. Like Wine, it can reach Windows XP status and if it does (when it does, hopefully before Windows XP is totally dead) it'll be a great option.
Ubuntu is always a great option, the problem is that Microsoft OSs are as "free" money-wise because they come preloaded on 99% of PCs. They only people buying separate versions of Microsoft OSs are Apple users (the irony! OH THE IRONY!) and the handful of people builiding their own systems.
The typical case is like my laptop. By default Vista Home Premium... and it does dual boot to Ubuntu sometimes mostly for my Unix class. I think it's a joy to use it either way, but Ubuntu doesn't have any price advantage at all. And it never will because it's cheaper for Dell (in this case) to pay Microsoft the OEM fee for Vista (or Windows 7 in the near future) than it is to offer the technical support on Ubuntu. Vista (even Vista) also gives the system synergy and enhances the value of the hardware which more than justifies the OEM fee. I like dual booting, and I know that I'd get better at Ubuntu if I didn't have Vista but I find dual booting too irresistible.
So Ubuntu is great, it can't be denied. And one of these days Wine (the windows "not" emulator) might catch up enough so that productivity software can run better on Ubuntu than on Windows XP. Windows XP is Microsoft's Achile's Heel.
Because if new Macs didn't run Windows XP in a virtual machine as well as they do, they wouldn't be so widely adopted.
Windows XP symbolizes the overall lack of progress in the industry, and other companies are approaching its usability or swallowing it whole (like through a VW like with Macs and Fusion etc).
Overall, the computer industry has stagnated. Windows 7 might help, and DirectX11 might help, but I think it'll just keep things from slowing down so rapidly. So they'll continue to slow down, just less quickly.
ameatypie - Tuesday, February 3, 2009 - link
but then, how many people apart from myself and a few select others are going to throw 8GB of RAM, an 8800GT or higher series graphics card, and a beefy quad core at it? not many, if any.nilepez - Wednesday, February 4, 2009 - link
1. You don't need that for Vista.2. 8GB of ram can be had for under 100 bucks
3. Vista would run fine on a $20.00 PCI-e card
4. Vista ran fine with a 6600gt or a X800 card (both over 2 years old by the time Vista was generally available).
If you're talking about a card for gaming, well that has little to do with Vista and most tests now show that games run about the same on XP and Vista. This is no different htan XP upon release. It took a year or 2 before games ran about as well on XP as 9x.