DirectX 9.0c support: Hardware vs Driver vs Software

najevi

Distinguished
Oct 18, 2002
6
0
18,510
At another thread I asked for opinions about the choice of a graphics card upgrade. This thread has a different purpose.

I'd like someone who understands Direct3D features to explain what is going on in the (presumably common) situation where you have an older graphics card that does not boast support for DirectX 9.0c and yet you have successfully installed the DirectX9.0c software during a Windows Update session at some time.

Is such a PC now considered to support DirectX9.0c or is DX9.0c gimped in some way?

I appreciate that each new DirectX version number heralds support for some new feature (whether that be Direct3D, DirectSound, DirectDraw or something else) and I have studied these two ATI and nVidia GPU comparison tables at wikipedia for some insight into that.

Please assume that the latest driver for whatever video card has been installed. So in your explanation please try to educate me (and I hope this is of interest to other readers as well) as to if/where/how each new Direct3D feature, that is implied by a higher DirectX version number, get's implemented.

■Is it in the hardware? - probably not!
■Is it in the driver? - maybe - I don't know.
■Is it in the DX API?
■Is it just that the game code never really relied on all features of DX9.0c in the first place? - I would not be surprised!
■Is it that the game code provided an alternative method of implementing some desired behavior using OpenGL?

What I have found is that a game title that specifies DX9.0c support will play very well on a machine that uses a video card which only advertises support for DX9.0b. In the process of trying to understanding "why is it so?" it puzzled me that DirectX9.0c software update from Microsoft can be successfully installed on a machine with such a video card.

I wrote above that a particular game title plays very well. In fact the occasional system crash does occur and it is generally preceded by the display briefly going a solid shade of orange and then black. So I began to wonder if perhaps the lack of video card support for DX9.0c at the video hardware level is the root cause for these, albeit infrequent, crashes.

In the process of answering this if you can also explain what one should look for the in the dxdiag diagnostic report to either eliminate or pinpoint the video hardware and firmware as a possible root cause.

I found this article on studying a system kernel dump very insightful and have enabled kernel dumping to better diagnose any future crashes that I might experience.
 
Simple as this: if the card you bought says "DirectX 9c", then it has hardware support for that. Otherwise, you won't be able to have those "new" things.

GPUs are like CPUs nowadays and like you hear "MMX" or "SSE", there's the OpenGL/DirectX counter part for video cards GPUs. So going from DirectX 8.1 to DirectX 9c will imply that you need a new GPU to handle those "calls" to the GPU.

You can emulate features though, but i haven't heard of anything of the like. In old times it was called "Software Rendering", but not quite like it was back then, lol.

And no, you shouldn't have crashed from upgrading DirectX, but we now M$ is doing that, so... Anyway, the promise is "there is backwards compatability" wich shouldn't give "free" crashes. And there is nothing in DXDiag that can help you on that matter.

Esop!
 

kamel5547

Distinguished
Jan 4, 2006
585
0
18,990
Before the rest... 9.0c isn't a big deal at this point and may never be... I believe most of this to be correct, but I'm a little shaky on the drivers role in the whole thing. The other statements are generally correct (meaning you may find an exception but for most API functions it will hold true). Hopefully someone can qualify my statements...

DirecX requires that its version be supported at the Hardware and Software level.

Firstly the API (Applciaiton Programming Interface) serves as the functions that third parties can use to execute the supported commands. It abstaracts the execution (i.e. a programer using it only knows what the particular function takes as an argument and what it returns, they do not know how the result is created). It is purely in existence for programmers to create a standard platform and avoid function recreation.

The next requirement is that the application must use the code, usually there is some adoption period, and particular functions may be used minimally or not at all.

Hardware usually must add support for various versions of DirectX, usually the changes require additional calculations be performed by the GPU or that calculations be performed differently. As special purpose cards, GPU's are not as flexible in their execution as most of the items are hard wired per say. Also some funtions may change the way they are executed for performance benefits.

Drivers must also add support for the additional functions I believe. At a minimum they may need to know how to deal with unsupported commands, just because a certain version of directx is implemented in an application does not need it must be used, usually many of the changes can be downgraded by reducing the graphics quality to a prior version or simply not using it at all. Thus a game written to use DirectX 9.0c features may only require that you have 9.0a hardware.

Basically you can install the most Direct X version, this DOES NOT mean its features are being used, the driver should handle unsupported execution by transforming it (executing an alternate function) or discarding it. Hence the reason many games will run on older cards using older versions of Direct X albeight at a lower performance or graphical quality.
 
I'll address some thingys i don't find quite true Kamel...



Well, the only major DX10 games atm are Crysis, Crysis Warhead and the 2 STALKER's, so DX9c is very important still... The X-Box is DX9c also... So dropping DirectX 9c is not something i'd say is a smart move... And yes, there has to be software that USES the goodies from the API like you said.



Hardware never "adds" support for DirectX, it's MADE for a particular version of it. As well for OpenGL. The API must tell you (the GPU manufacturer) what to get in and what to get out from the GPU's instruction calls, the rest is up to the person that gives you the API, in DX's case, Microsoft and in OpenGL's case, Khronos Group (i think, lol).



Actually, i've never heard that new drivers "add support" for a new version of either API, i might be wrong, but what i know is this: Drivers only make the card's features to work correctly, so when the CPU calls the card, the cards works the instruction call like it's supposed to. If the feature is supported in the hardware, they can add it later on, wich might be the thing you point out.



Newer games run on older cards just because of the game's engine. If the games cut off SM1.0 (for instance) and the DX API doesn't give an alternative to that, then the game won't run on any SM1.0 only card.

And like i said, there is emulation and like you said, work arounds, but the thing is: if the hardware doesn't support it, then there's no way a driver can help you there (without emulation, that is).

Esop!