Originally posted by: xtknight
what are the definitions of compliant and compatible?  a gf4 isn't dx9 "compatible" or "compliant".  the DX9 spec is an API that is only on cards that include it.  techically, the gf4 doesn't include dx9 support of any kind.  games will run on it because they can fallback on dx8.  ...am I wrong?  I'm not quite sure what you're trying to say with compliant/compatible, LTC8K6.  Does DX9.0C only use functions that have been available since DX8 or something?  Then why's it a new DX?
		
		
	 
It helps if you expand the terms out a bit, to "API compatible", and "hardware feature compliant". Then it makes a bit more sense. The applications, talk to the DirectX system runtimes on the system. The application is written to a certain revision of the DirectX API spec. The application *requires* at least that version of the DirectX runtime present on the system to operate. Note that this hasn't even gotten to the hardware yet - this is purely an issue of the high-level software APIs. All DirectX system runtimes, being based on MS's OLE/COM technology, are also backwards-compatible. So if you have an an app that uses the DX9.0C API, then you 
have to have the DX9.0C runtime on your system. However, an older game app that only uses DX5.0, should also run fine on top of the DX9.0C runtime, because the runtime is backwards-compatible and includes the COM interfaces from the older API versions. In fact, some applications can themselves, detect if the DX9.0C runtime is present, and if not, fallback to attempting to use older DX interfaces. Generally though, if the app doesn't have any code-paths to use the features exposed in the newer interfaces, then it should simply be built to use the older DX API interfaces, period.
Ok, now onto the hardware side. Hardware is always evolving, and adding new features. However, the DX spec is standardized, at various revision levels. (That's one of the drawbacks of DX, as compared to OpenGL that has a provision for allowing access to vendor-specific non-standardized features. In the DX world, apps have to wait for a new DX API version instead. Thus DX will always (theoretically) be behind OpenGL in terms of supporting new hardware features... but I digress.) These represent incremental hardware-feature support levels, more or less, along with some API cleanup along the way.
So, let's look at it this way. You're writing a game, using DX, and the newest hardware includes some new whiz-bang feature that you would like your game to take advantage of in your game, to appear "cutting edge". Let's assume that prior versions of the DirectX API don't support this new hardware feature, and neither did prev-gen hardware. A new DX API standard was just released to take advantage of this feature. 
Since you want to be able to use this new hardware feature, you wouldn't want to write your app to the prior DX API spec, because that one doesn't support it. So you code for the newest spec. But in DX, every feature, is (generally) available, whether or not the hardware actually supports it. It provides "device caps" to allow your app to find out if the feature is implimented in hardware (fast), or emulated by the DirectX runtime instead (slow). So in this case, you could either code your app expecting it to only be run on cards that are "hardware feature compliant" with the newest DX API spec, and thus it would require that hardware to run efficiently, or you could code your app to detect, using the newer DX API spec, whether or not the underlying hardware supported that feature, or if it was being emulated, so you could code around it. (Not use that graphical special-effect, for example.) That would be the case if you were running an older graphics card, that was not "hardware feature compliant", but was installed on a system with the newest DX runtime, with drivers that supported the newest DX runtime. (DDI interface version, I think, if you check using DXDIAG.EXE)
	
	
		
		
			Originally posted by: xtknight
No GeForce4 MX card will have those, so it doesn't support them.  If a game engine asks for these functions, it's not going to get them.  It will have to fallback to something else.
		
		
	 
Well, the game can ask for them, and get them, but they may not be in hardware, so the game will run hella slow. So generally if a feature is a performance-critical to the game, and not critical overall, the game code will detect if the feature is in hardware, and work around it if not.
	
	
		
		
			Originally posted by: xtknight
From what I understand, DirectX(9.x) is a set of APIs that either IS or IS NOT implemented on a video chip.  If it's not, the game ISN'T using DX9.x.  It's falling back to the latest DirectX version that the chip (or reference rasterizer for that matter :evil: ) supports.
		
		
	 
No, chips don't impliment DX at all. DirectX is implimented by the runtime (high-level APIs), and the video card drivers (low-level APIs). It helps, of course, if the actual chip hardware supports the same sort of data formats as the APIs do, because that eliminates any potential overhead from translating the data between what DirectX understands, and what the hardware understands. Some things though, like shaders, are implimented by the app using DX's HLSL, and then translated into a more hardware-specific format, by a driver-level "shader compilier". (Actually, there are two - one in the DirectX high-level runtime, and another in the low-level drivers, at least in NVidia's case.) But that's what it means when you hear "DirectX 8.1 hardware compliant" - it means that the hardware 
itself is compatible, both in terms of data-formats, and in terms of supported features, in the DX 8.1 spec. (And additionally, "compliant" usually means "fully (100%) compatible", whereas "compatible" means "partially compatible". Example - a Voodoo3 card, it doesn't impliment T&L in hardware, so it wouldn't be "DirectX 6.1 compliant", but it would be compatible, because it can run in a system, with a DX 6.1 runtime, running games written to use the DX6.1 API spec version. It's just that the T&L API functions, are emulated in software for those games.)
	
	
		
		
			Originally posted by: xtknight
...and now I'm more confused than when I started this post. 
		 
		
	 
I hope all of that made it less confusing, and not more... I hope. 
