The Problem of DirectX


Going to detract a bit and have a very technical post than usual. I apologize in advance. Since the background is rather wordy, I’m going to start with the assertions, then the context under the cut.

The Point of This Post:

Users of Windows 7 will still need to run programs in DX10 and DX9. There’s no reason why the OS should be updated to the latest of DirectX; Especially when the updates are over four years old.

Windows 7 must include a fully patched DirectX installation.

Windows Update needs to include DirectX as apart of updatable software.

Of all the ‘optional’ and ‘critical’ software that Windows Update includes, updating a core API as DirectX is to Windows should be one of them. Updating DirectX is crucial for any graphics intensive program, especially Games for Windows. Why not include it, even as an ‘optional’ update?

DirectX needs real version identification

Did you know there are at least 17 versions of DirectX 9.0c and 8 versions of DirectX 10? All of which report with only on version number?

Did you also know that Vista still needs updates to DirectX9, but wasn’t included when Vista was released?

This makes it very hard to do technical support when no one can decree a realistic version number.

The Context:

For anyone who’s played games on Windows, you may be familiar with Microsoft® DirectX. DirectX is an API and acts as a bridge between software with advanced sound and visual needs and the array of devices and drivers on your computer. There are others¹ for other and operating systems and platforms, but these problems are for DirectX specifically.

Without these APIs, each software would need to program for every possible graphics and audio card in existence individually. With an API, software needs only to work with the API and drivers of devices needs only to work on the API. From there, new software or new hardware can be released and still work without massive overhaul.

For Strong Bad’s Cool Game for Attractive People, the engineering team developed what I nicknamed a “Flash” shader in order to achieve the similar look of the Flash animation into 3D graphics. The graphics would work on Windows so long as the user’s Windows computer had at least DirectX 9.0c – Aug 2007 installed.

I have to include the date with this version number as Microsoft stopped incrementing version numbers, even though releases were made after 9.0c on a bi-monthly and now quarterly bases. Yet any callable version number are all listed under “9.0c” or “4.09.00.0904”, which is the primary version for Windows XP SP2, released in August 2004. Even when you update DirectX, the same version number is reported.

The problem: We needed users to have August 2007’s release or later. Upon research, I found a form of version numbering with DirectX. If you look in “C:\Windows\System32\”, you’ll see a series of files named “d2dx9_**.dll”, the ** being a range of numbers starting at 24. The ’27’ being the August 2007 DX9.

Windows XP (RTM / SP0) included DirectX 8.1. Windows XP SP2 included DirectX 9.0c. Only after SP2 did the “_**” updates start. To add more insult to injury, Windows Update doesn’t check or update DirectX. Ever. While they’ll include optional software and Office updates, DirectX gets the shaft.

My saving grace is the DirectX updaters will update all versions on all platforms of Windows in one installer. There are two flavors, one large installer for off-line updating, and one small and web-based. The web installer downloading the components needed at the time of install. I included this with the Strong Bad episodes. It’s worked out, but it adds a step in the install process by asking to do an install one doesn’t expect.

By now you may be thinking: “But Vista is on DirectX 10 and Windows 7 on DirectX 11. Certainly there isn’t an issue because it’s later version!” Oh how I wish this was true. Normally when one thinks of software version numbers, the higher number replaces the lower numbers. In the land of DirectX, the version numbers are modes that run independently of each other. While you have Vista, you still run DirectX 9 unless the software specifically requests DirectX 10. Since DirectX 10 doesn’t run in Windows XP, very few games run in 10. If they do, there’s a DX9 version along side it. Even with DX10, there’s quarterly updates. Still, this isn’t updated via Windows Update. Meanwhile, users still need to update DX9 and DX10.

Try explaining all of the above to users with Vista. “But I have DirectX10 which is more up to date than 9!” Yes you have DX10, but you don’t have the latest DX9 which you still use. The DirectX installers I mentioned above work on all platforms, which is something. However, it’s still left trying to instruct users to run the installer, which goes upstream from conventional thinking.

So in light of all of this, I tried the Windows 7 beta (using VirtualBox on my MBP). You would expect the latest released updates of DX9 and DX10 right? Wrong. What ships is the DX9.0c before the updates, and DX10 from the original Vista RTM release. Since DX11 is still in beta so there are no quarterly updates to speak of. I honestly can’t fathom why they wouldn’t roll the updates in at this point. It’s inexcusable.

¹ Other APIs like OpenGL, OpenAL, etc exist and do a great job, but require a full client-side install on Windows.


2 responses to “The Problem of DirectX”

  1. Awesome post, and I finally understand what you were tweeting about. I didn’t realize that one major version didn’t update the previous, but they do the same thing with .NET, so I guess I shouldn’t be too surprised. And the impossible versioning is inexcusable – they should at least have build numbers. My only thought with that (since they don’t seem to be continuing that awful trend in DX10) is that perhaps there is an error with how some legacy games view the version, and anything different from 4.09.00.0904 would bork it up somehow.

    The following is all speculation by someone who is not in the game industry and stuff you probably thought of days ago:

    My thoughts on the versions released with Windows 7 beta is that they are using “legacy” releases for compatibility-only purposes at this point, with up-to-date versions slated for internal testing and release candidates: after all, the public beta is something of a PR release too, and if the updates don’t mesh, it won’t look good. I’m curious if they release a separate version to developers, or if you (or your company) could get a custom build with alpha-level but up-to-date DX support.

    As far as updates go, the general rule is security and stability updates in monthly windows updates, and feature updates (and, starting with vista, secure development cycle-triggered code changes) in service packs. The way the release schedule looks, directx must be a feature update in their eyes, and they decided to put the onus on the developer to bundle a new release to take advantage of a certain feature before the general release. It may also be an “if it ain’t broke, don’t fix it” mentality, as unrequested updates could nuke certain pieces of previously fully functional games.

    Again, that’s all sleepy speculation. Thanks for laying it out for me – I can finally wrap my head around it.

  2. @Ken

    The thing is with the bi-monthly DirectX updates is that they don’t ‘hurt’ the older versions. If anything, they improve driver support of older games.

    Case in point: With Strong Bad, we found that people who had ‘_27’ but nothing further would sometimes have the ‘missing eyes’ bug. This is where some textures wouldn’t show up, most commonly eyes ( A very scary looking Homestar, I must say! ). Even with the latest drivers installed, same problem. Once they updated DirectX, the eyes were fixed. No one has reported any funny business with other games besides performing better in some cases, so I don’t think including the latest is a backwards compatibility risk.

    I wish I knew a better venue to have this discussion. I’ve used the ‘send feedback’ button in Windows 7, but I might as well piss in the wind doing that. If part of the Windows strategy is to encourage gaming on Windows, a little help on the tech would be nice.