2010-11-18

DirectX 9 vs. DirectX 10

Today, most computers can run DirectX 9. We are slowly starting to move to DirectX 10. We would have been there long ago, but people aren’t very satisfied about Windows Vista and Windows 7, so it’s taking a little longer than expected. I would recommend you upgrade to DirectX 10 if your hardware and software can handle it. If not, stay with DirectX 9, wait until we advance a bit more! I wouldn’t upgrade just for DirectX 10. Anyway, DirectX 10 is the API currently used on the Xbox 360. So this article is comparing DirectX 9 with DirectX 10 from both a gamers and developers point of view. For those of you interested, here are some comparison shots of DirectX 9 and DirectX 10.

DirectX 9

DirectX 10



Microsoft’s flight emulator


Call of Juarez
It’s pretty clear who the winner is in each category. DirectX 10 not only looks better, but also performs faster and makes everything a heck of a lot easier for developers! If you don’t think DirectX 10 is that much better than DirectX 9, just stay with DirectX 9 for a while, it’s still mostly used. Even the newest games support DirectX 9.

So why use DirectX10?
From a gamers point of view. It looks better and performs better. From a technical point of view... There are a lot of reasons.

1. DirectX 10 features a highly optimized runtime, powerful geometry shaders, texture arrays and numerous other features.
A big problem with DirectX is that is uses up a lot of CPU power. DirectX 10 really did a wonderful job in using much less CPU power.
For example:
DirectX 9 validates resources for every use. So it is validated several times at the end of the day. DirectX 10 only validates resources once. Not millions of times like DirectX 9, only once.

2. Switching between multiple textures incurred a high state-change cost.
What artist done was stitched together several small textures in one huge texture, this is known as a texture atlas. This allowed developers to use multiple textures without paying the cost of creating and managing multiple textures. The problem was that DirectX 9 only permitted a texture whose size was no bigger than 4048 x 4048. So this made that approach fairly limited. DirectX 10 has a solution for this problem. It has a new construct called a texture array. It allows up to 512 textures to be stored in an array structure. Included is an instruction that allows a shader program to dynamically index into the texture array.

3. Predicated draw no longer requires CPU intervention.
In most 3D scenes, many objects are entirely overlapped by other objects. This will mean that while the object is still calculated and drawn, it will have no effect on what you see on the screen. This is defiantly a huge waste! Advanced GPU’s have methods to detect and avoid processing of those pixels, but, like most things in life, it does not always work so great. So to avoid such a big waste, developers use a technique called predicated draw. With this technique, complex objects are drawn using a simple box approximation. If drawing this simple box has no effect on the final image, that object is simply not drawn. Previously, this was done using the CPU and the GPU. Now with DirectX 10 this process is done entirely on the GPU. Meaning less strain on the CPU.

4. More than 100 times the amount of resources available
In previous versions of DirectX, Developers had to carefully manage register resources. Thanks to the Shader Model 4.0, DirectX 10 provides much much more resources.

The amount of temporary registers has increased from 32 to 4096.
Constant registers from 256 to 65 536.
Textures from 16 to 128.
Render targets from 4 to 8.
Maximum texture size from 4048 x 4048 to 8096 x 8096.
Now what does this mean? It means better graphics ofcourse! With much less trouble!

5. Speed is also greatly increased.
Some features could be more than 10, or even 100 times faster. And I’m not exaggerating!

This chart shows the tests done by Nvidia, not me or some other amateur.

6. New High Dynamic-range rendering formats
HDR became popular thanks to the support of floating point color formats in DirectX 9. This however, does take up more space than integer representation. DirectX 10 has two new HDR formats that offers this at half the storage! Won’t go into that too much, that’s getting way to technical!

High Dynamic Range formats, new algorithms and many many more which is sure to make the programmers life much easier and the result hundreds of times better.

I think I said enough to make you consider using DirectX 10 over DirectX 9!

The Future
With technology growing as fast as it is, there might not be that much more of a future. Research shows that computers average speed doubles every 12 – 18 months. We are only a few years away from photorealistic real time graphics. We are pretty damn close to it! Photorealistic images can be rendered in less than half a second on professionals PC. Actually, it is speculated, that there might only be nine generations of consoles. We are currently in the eight. Technology is growing so fast that at this rate, in 5 or 6 years when new console models are released, the technology will be so good that there will be no need for upgrading! That would be really interesting to see!

I think that’s too far in the future! The above is 5 – 8 years in the future. 1 – 3 years in the future, we have, bigger, better, faster games. DirectX 11 is already released! Though it is not that popular, I think we are still migrating to that. I won’t go in detail with DirectX 11 though. Maby in a later article I might talk about DirectX 11.

As far as I have heard, DirectX 12 isn’t even in development yet. So it looks like we are going to have to wait a while to see what the future holds.

Conclusion
In the previous article I have explained to you what DirectX is, it’s main components and it’s history. In this article I gave you a technical brief of DirectX from a developers point of view, comparison shots and finally some information about DirectX 11. You now have a wealth of information, so go out there and show off your superior smartitude!

References:
Microsoft.com
Wikipedia.org
DirectX 10 Technical brief from Nvida
Several professional game programmers
Winmatric.com
IGN.com

2 comments:

  1. Why compare DX9 and DX10 in the first place? The comparison should be DX9 against DX11 if any at all, as many games and developers completely skipped DX10 with DX11 being a super set run on the same hardware as DX10.

    FYI the Xbox 360 does not use DX10, the closest publicly available version to it would be DX9

    ReplyDelete
  2. Oh you!
    As I stated in my introduction, most people are using DX10.

    I am assuming that everyone reading this can count. So here is a link to list of games compatible with DX10 technology: http://en.wikipedia.org/wiki/List_of_games_with_DirectX_10_support

    Here is a link with games compatible with DX11 technology: http://en.wikipedia.org/wiki/List_of_games_with_DirectX_11_support

    Now, some one tell me which one is the most?
    So after you count that, do you still feel that DX10 is being completely skipped? Ofcourse not! There are much more DX10 compatible games than DX11. So no, I am afraid you are wrong. DX10 has not been skipped. Plus, I compared DX9 with DX10 because DX10 is a much bigger migration from DX9 than from DX11. DX10 and DX11 are not to far apart. So I used DX10 because the most information and technical specifications can be found on that. And if you read the article, you would have known what a big difference it makes, programmer wise.

    As for the Xbox thing. Little details that you shouldn't worry about. You focus on one sentence in 15 paragraphs! It hardly has anything to do with the article!

    (Not aimed at you)
    The problem with a lot of people is that they always look for the bad/wrong stuff, and then attack you about it. How much better would the world be if they focused on the good instead of the bad?

    Now, when I wrote this article, is was meant for the person who does not care about technical details. I thought it was obvious, but if you really care about the technical details so much:

    Xbox does not use DX10. The Xbox uses a version of DX which is designed specifically for the Xbox to use all of the Xbox's features. If you want to compare it, say an advanced version of DX9, who's memory export can enable DX10 class functionality such as stream-out. So lets compromise, a highly advanced DX9 API which supports DX10 features in order to enable the consoles full potential. Happy?

    Come on man, you really do not need to focus on the negative stuff the whole time.

    ReplyDelete