AMD Radeon HD 3800: ATI Strikes Back

Direct3D 10.1: Incompatible?

With its new range of GPUs, the Radeon HD 3000, AMD is the first to support the next version of Direct3D: Direct3D 10.1. But what does this new revision of Microsoft's API has in store for us?


When the first pieces of information on Direct3D 10.1 first leaked this summer, some websites echoed a troubling rumor; this new version would be incompatible with the previous one! Immediately, angry reactions were expressed throughout the web. As a matter of fact, Microsoft was reaping what it sowed with the buzz generated around Direct 3D. Indeed, gamers had had to accept that this version wouldn't be compatible with the previous ones and that it would specifically be linked to Redmond's latest OS: Vista. Microsoft had nevertheless promised that it was inevitable in order to guaranty a new future-proof API. And yet, a couple of months later, here are talks about a revision that dared be, once more, incompatible. For many, enough was enough.

Instancing 10: the demo of the Direct3D 10 SDK

However, as is often the case on the web, it all came to nothing, as Direct3D 10.1 is fully compatible with its predecessor. But let's dig deeper into what we mean when we talk about compatible versions of an API. Up until the ninth version, the various DirectX iterations followed one another and kept descending compatibility; when you installed a new DirectX version, you could play all of your older games that used previous versions. Similarly, it was possible for a game to create a DirectX 9 interface, but only use it as a DirectX 8 interface. Among other things, this allowed developers to only have to maintain one piece of code to support two kinds of cards; setting aside advanced features support for cards that truly handled DirectX 9. To do this, programmers had access to a structure that gave a detailed list of the card's real abilities. Inversely, this compatibility no longer exists in Direct3D 10. To ensure older games ran on Vista, Microsoft integrated both APIs in its latest OS.

Windows Vista APIs

In a similar fashion, a Direct3D 10 interface doesn't grant access to the ninth version APIs, as many were deleted. If a developer wishes a game to support Direct3D 9 and 10, it's compelled to plan for two distinct version of a game, which isn't really different from what he had to do if he had wanted to support OpenGL and Direct3D. We talk of incompatible APIs in this particular case.

Inversely, it's quite possible to create a Direct3D 10.1 interface on a card that's only Direct3D 10, the new API being a strict superset of the latter. Everything found in Direct3D 10 is also found in its big brother. The developer's only duty is to ensure that he doesn't call features only present in Direct3D 10.1 on a Direct3D 10 card, which was already a necessity with previous versions of the API.

Obviously, the already available Direct3D 10 GPUs (G8x, G9x and R6x0) don't support the latest API's add-ons, which seems to be a no brainer and yet this point has generated a lot of confusion. Actually, in regards to older GPU support, Microsoft had promised the death of Caps bits with Direct3D 10 and has kept its word... well, sort of; from now on, Caps bits no longer exist, but have been replaced by what Microsoft calls Feature Level. The main difference is that it's no longer necessary to ensure that each feature is individually supported; one needs only check if the feature level is Direct3D 10 or Direct3D 10.1, which is enough to determine precisely what is supported by the GPU.