DirectX is a programming interface that allows programs (like games) to talk with your PC hardware (like your video card). There are several DirectX versions available and in this short tutorial we will explain what the main differences between them are.
Imagine that your computer is a sandwich. The hardware is one of the bread slices and the software is the other. What go between these slices are the drivers and the programming interfaces (API). This stuffing makes the “translation” of the communication between the software and the hardware. So, instead a programmer writing programs to a specific hardware, s/he writes programs for the operating system, in which a driver will translate what the program wants and will access the hardware according to what was requested. The program can also be written for a programming interface that serves the same purpose. The advantage of this technique is that the programmer doesn’t need to know the specifics of the hardware the user has; the programming interface converts what the programmer wants into a command that is compatible with the hardware the user has.
DirectX and OpenGL are currently the most popular programming interfaces for video cards. Instead of writing a game for a specific hardware, it is written using DirectX (or OpenGL) commands that will convert the commands sent by the game into instructions that the hardware (such as the video card and the sound card) understands.
There are several versions of the DirectX. When we say that a game is DirectX 9, for instance, it means this game uses DirectX version 9.0 instructions. You must have DirectX version 9.0 or superior installed in your machine to run this game, and preferentially hardware of the same generation or superior, too. If you, for instance, have a DirectX 9 game in your PC and a video card whose graphic chip is DirectX 8, when the game requests a command that DirectX knows your video card won’t understand, it will make an emulation to execute the command. Of course this emulation is not perfect and the final result will be that the game won’t have the same image quality as if it were run in a genuinely DirectX 9 hardware.
It is advisable to have the latest DirectX version installed in the computer. Unfortunately the lastest version available, 10, is only available for Windows Vista (it comes embedded with this operating system). If you have other operating system, like Windows XP, you will have to stick with the latest version before the 10th, 9.0c. This version is included in Service Packs 2 and 3 for this operating system. So install Service Pack 3 to have DirectX 9.0c on your Windows XP plus several other security fixes. If you have a DirectX 10-based video card and a DirectX 10 game you will have to upgrade to Windows Vista to take full advantage of DirectX 10 graphics (i.e., better image quality). Otherwise the game will run in DirectX 9.0c mode. If you use Windows Vista, you will have to install Service Pack 1 to upgrade DirectX to 10.1.
To discover the DirectX version that is installed in your PC, go to Start, Run (all Programs, Accessories, Run on Windows Vista) and enter Dxdiag. In the last line of the main window of the DirectX Diagnosis Tool you will see the DirectX version the system is using right now. On Windows Vista you will have to pay attention to the last line on this screen (“DxDiag 6.0.600x.xxxxx”) to determine that you have DirectX 10 or DirectX 10.1 installed on your system, since both of them will report “DirectX 10” on the “DirectX Version” like – compare the number your system is reporting there with the number presented in the table below. On other operating systems clicking in the DirectX Files tab you will see details of all DirectX in the machine and if there is any type of conflict in your machine, in the field “Notes.”
In the table below we compiled all DirectX versions that have already been launched. We indicate in the table which DirectX version is standard in each Windows operating system. For instance, Windows XP comes with DirectX 8.1. As you can see, all Windows systems besidesWindows Server 2008 require you to update the DirectX to get the best performance possible and enable all graphics features your video card can deliver.
|DirectX Version||Version Number||Operating System|
|DirectX 2.0 / 2.0a||4.03.00.1096||Windows 95 OSR2 and NT 4.0|
|DirectX 3.0 / 3.0a||4.04.0068 / 69||Windows NT 4.0 SP3|
|DirectX 4.0||Never Launched|
|DirectX 5.0||4.05.01.1721 / 1998||Windows 98|
|DirectX 6.0||4.06.02.0436||Windows 98 SE and ME|
|DirectX 7.0||4.07.00.0700||Windows 2000|
|DirectX 8.1||4.08.01.08104.08.01.0881||Windows XP and Server 2003|
|DirectX 9.0c||4.09.0000.0904||Windows XP SP2, Windows Server 2003 SP1|
|DirectX 10||6.00.6000.16386||Windows Vista|
|DirectX 10.1||6.00.6001.18000||Windows Vista SP1 and Windows Server 2008|
[nextpage title=”The Main Differences”]
In the previous page we listed all DirectX versions that have already been launched, but we did not explain the difference among them. For instance, what makes the DirectX 7 better than the DirectX 6?
In general a new version is launched to permit the system to recognize the most modern features of the graphic chips, so it can use these features in case your video card have them, increasing both the 3D performance of the machine and the image quality.
DirectX 6 brought as its main innovation the resource of environment mapped bump mapping. With this resource it is possible to create imperfections on the surface of 3D object more easily, making them more realistic.
Since the GeForce256, graphic chips started to make part of the necessary calculations for the generation of three-dimensional objects, a task that was previously exclusive of the system processor. These stages are for transformation and lightning, abbreviated as T&L. DirectX 7 was launched to recognize this feature and to transfer the stages of transformation and lightning from the system processor to the graphics chip. DirectX 7 graphic chips include all GeForce 2, GeForce 4 MX, GeForce MX, GeForce PCX 4300, Radeon 7000, Radeon 7200, and Radeon 7500 series.
With DirectX 8 two new features now very well-known became available, making 3D images much more realistic: Pixel Shader and Vertex Shader. 3D Objects are created using hundreds or even thousands of polygons, such as triangles and squares. Over those triangles or squares texture are applied (surfaces) or colors, forming the three-dimensional object. With Vertex Shader the 3D program is capable of changing the characteristics of each vertex of each object polygon. With Pixel Shader the program is capable of changing the characteristics of each pixel (dot) of each polygon. Before those resources existed, the change of those characteristics was not possible, in other words, it was only possible to change the characteristics of the whole polygon, which affected all its points at the same time. Thus, with these two new features the images became much more realistic, for each point of each polygon became programmable.
DirectX 8.0 allowed Pixel Shader to be programmed with up to 12 instructions at a time. This limit was considered insufficient and soon DirectX was reviewed for the 8.1 version, to allow the use of 22 instructions at a time. Graphic chips based on this model include GeForce 3, GeForce 4 Ti, and Radeon 8500, Radeon 9000, Radeon 9100, Radeon 9200 and Radeon 9250.
To enhance the performance and the increase the quality of three-dimensional objects, DirectX 9.0 was launched supporting Shader 2.0, where Pixel Shader can use up to 96 instructions at a time. Several graphics chips use this model, as those from the GeForce FX series and the ones from the Radeon 9500 through 9800 series and Radeon X300 through X800 series.
Shader 3.0 was introduced with DirectX 9.0c and permits the use of up to 65,535 instructions at a time. Graphics chips that are based on this version are GeForce series 6 (e.g., GeForce 6600, 6800, etc) and 7 (e.g., GeForce 7600, 7800, etc) and Radeon series X1000 (e.g., Radeon X1600, X1900, etc).
DirectX 10 brought Shader 4.0 model. This model brought an important change in the architecture of graphics chips. Up to DirectX 9.0c-based graphics chips, the chip has separated processing units for processing pixel shaders and vertex shaders. In some circumstances all pixel shader units were being used, the vertex shader units were idle and new pixel shader instructions needed to wait, because all pixel shader processors were busy, even though the vertex shader processors were idle. On DirectX 10-based graphics chips the processing units are generic and can be used to process any kind of information, solving the problem we’ve just explained: on DirectX 10-based video cards instructions need to wait only when all processors are busy, regardless of the kind of instruction. This architecture is called Unified Shader Architecture. DirectX 10 also introduced a new shader type, geometry, and other features to transfer more processing from the system CPU to the graphics chip. An in-depth explanation of all main new features introduced by DirectX 10 can be found in NVIDIA’s DirectX 10 technical brief.
Graphics chips that are based on this architecture include GeForce series 8 (e.g., GeForce 8600, 8800, etc), 9 (e.g., GeForce 9600, 9800, etc) and 200 (e.g., GeForce GTX 260, GTX 280) and Radeon HD 2000 series (e.g., Radeon HD 2600, HD 2900).
You can see below the main differences between DirectX 9 and DirectX 10.
|Resources||DirectX 9||DirectX 10|
|Constant Registers||256||16 x 4,096|
|Maximum Texture Size||4,048 x 4,048||8,096 x 8,096|
In the table below you see a comparison between shader models 1.0 (DirectX 8.1), 2.0 (DirectX 9.0), 3.0 (DirectX 9.0c) and 4.0 (DirectX 10).
|Shader 1.x||Shader 2.0||Shader 3.0||Shader 4.0|
|Vertex Instructions||128||256||512||65,536 *|
|Pixel Instructions||4+8||32+64||512||65,536 *|
|Vertex Constants||96||256||256||16 x 4,096 *|
|Pixel Constants||8||32||224||16 x 4,096 *|
|Vertex Temps||16||16||16||4,096 *|
|Pixel Temps||2||12||32||4,096 *|
|Vertex Textures||–||–||4||128 *|
|Pixel Textures||8||16||16||128 *|
|2D Texture Size||–||–||2,048 x 2,048||8,192 x 8,192|
|Vertex Flow Control||–||Static||Static/Dynamic||Dynamic *|
|Pixel Flow Control||–||–||Static/Dynamic||Dynamic *|
* As DirectX 10 implements unfied architecture, this number is the total for the whole unified architecture and not for this individual spec.
DirectX 10.1 brought small enhancements. Currently only video cards from Radeon HD 3000 (e.g., Radeon HD 3450, HD 3870, etc) and HD 4000 (e.g., Radeon HD 4850, HD 4870, etc) families are based on DirectX 10.1. The slide below summarizes the differences between DirectX 10 and DirectX 10.1. Further information can be found on AMD’s DirectX 10.1 whitepaper.
We summarize all DirectX versions in the table below.
|DirectX 6||Environment mapped Bump Mapping|
|DirectX 7||Transformation and Lightning in the graphic chip|
|DirectX 8||Shader 1.0, 1.1 and 1.2|
|DirectX 8.1||Shader 1.3 and 1.4|
|DirectX 9.0||Shader 2.0|
|DirectX 9.0c||Shader 3.0|
|DirectX 10||Shader 4.0, Unified Shader Architecture|
|DirectX 10.1||Shader 4.1|
You can learn what DirectX version your video card is based on by taking a look at these two other tutorials: