VOGONS


First post, by bytesaber

User metadata
Rank Member
Rank
Member

Does it make any sense to purposely downgrade to a Geforce 4 card to try and see what life was like before DirectX 9 showed up? Geforce 4 is listed as a DirectX 8.0 supported chip. So if I wanted to taste life before DirectX 9.0c, is it just a simple matter of installing the older card, install Windows XP, and don't upgrade it beyond DirectX 8.1 and try a game? And if so, what is a DirectX 8.0 - 8.1 specific game? What works of art are out there that cherished 8.0 - 8.1 ?

I found 2 other threads with valuable information.
best windows 98 agp card
Best Video Card for DirectX 7 and 8

How does one determine what DirectX version a game was designed for? Games don't typically list "this was designed by developers using DirectX 8.0". Instead it usually lists minimum supported cards. Which could just be "sure it will still work on an older card, you just won't see everything we programmed the game to do." But they still don't say which DirectX version it's really intended for. It seems to leave speculation open. Is there a solid way to determine a game's D3D platform version?

Would getting an old DirectX 8.0 game running on newer Windows, with a newer GPU, show me the same thing? Is it true that newer DirectX versions emulate older version instruction, and if so, "might look and feel different" because it's kinda being emulated?

Is there a way to test DX specific effects? Such as some kind of 3DMark that demonstrates "now that you have an 8.0 capable card, let me you show you this cool fog effect your DX7 card never could."

Could DirectX 8.0 effects be shown on DirectX 7 or DirectX 6 cards but just perform really bad? Meaning... you can still see newer D3D version "stuff" but just not actually enjoy performance?

I'm not sure if these questions really make sense. I welcome being told that I'm way off base or just being silly. In general, I'm trying to see if there is a nice hard edge of visual experience to directly look at and enjoy exploring for different levels of DirectX gaming. Or if it's just always a grey area of general acceptance we never really could corner.

Reply 1 of 18, by leileilol

User metadata
Rank l33t++
Rank
l33t++

You're pretty safe (until 04-05) for the most part. The GF4MX was a very popular OEM card (As is the GF2MX which is p much the same but much slower and blurrier) and the unfortunate GeforceFX series blundering its DX9 support helped keep use of D3D7 and D3D8 going for a bit longer in the mainstream.

The typical major real-world use of DX7/8 hardware was always about vertex processing to speed up those vectors on the hardware side with HW T&L and vertex shaders to reach parity with multiplatform 6th-gen console ports and the like. Then HL2 came out and "invented" reflective water (despite prior games doing so, it didn't catch on in shader form for a while). and then there was framebuffer bloom and everything wanted to have it

Last edited by leileilol on 2018-03-04, 23:37. Edited 3 times in total.

apsosig.png
long live PCem

Reply 2 of 18, by Baoran

User metadata
Rank l33t
Rank
l33t

I remember that most games used to come with the directx version it was designed for. Pretty much all of them had installer who asked if you want to install directx. Also when you search for minimum system requirement for a game online, it often says the directx version required. Also the graphics card that is in minimum requirements for the game usually gives also a hint because it was usually the highest directx version that the minimum required card supported that the game was designed for.

Reply 4 of 18, by bytesaber

User metadata
Rank Member
Rank
Member
Baoran wrote:

Pretty much all of them had installer who asked if you want to install directx. Also when you search for minimum system requirement for a game online, it often says the directx version required. Also the graphics card that is in minimum requirements for the game usually gives also a hint because it was usually the highest directx version that the minimum required card supported that the game was designed for.

Well, I'm looking for Maximum supported DirectX in a game. Not the minimum. Though in many cases, as you explain, it may have been the same answer for most games. But there are demonstrations you can find on youtube that show the same game being compared with older vs newer DirectX versions. So it's really a hunt for what would be the max supported in a game.

Reply 5 of 18, by bytesaber

User metadata
Rank Member
Rank
Member
squiggly wrote:

Just wondering why 2001? The first DX8 cards from Nvidia did not come out until 2002. So there would certainly not be any DX8 support in a 2001 game upon release. Is this right?

Reply 6 of 18, by leileilol

User metadata
Rank l33t++
Rank
l33t++
bytesaber wrote:

The first DX8 cards from Nvidia did not come out until 2002.

Geforce3 supported DX8 and came out in early '01.... 2002 was the year for DX9 hardware to launch.

and then there's the confusing late 2000 DX8+Radeon7200 launch that led assumptions of pixel shader support (not helped by their tech demo showing off per-pixel refracted real-time reflections) and all that and other details I don't exactly remember well off the top of my head, premature is a word summed up best for that.

apsosig.png
long live PCem

Reply 7 of 18, by bytesaber

User metadata
Rank Member
Rank
Member
leileilol wrote:

Geforce3 supported DX8 and came out in early '01

Ah!

leileilol wrote:

and then there's the confusing late 2000 DX8+Radeon7200 launch that led assumptions of pixel shader support...

I love the plethora of info you and others have. Good stuff 😁

Reply 8 of 18, by Scali

User metadata
Rank l33t
Rank
l33t
bytesaber wrote:

How does one determine what DirectX version a game was designed for? Games don't typically list "this was designed by developers using DirectX 8.0".

Depending on your interpretation of "designed for"... with D3D8 and later you can at least look at the DLLs that are being imported.
You can use Dependency Walker for that, for example (or just temporarily rename/delete some of your D3D DLLs and see if it still works or not):
dependencywalker.com/
Each version has its own DLL:
d3d8.dll
d3d9.dll
d3d10.dll
d3d10_1.dll
d3d11.dll
d3d12.dll

So if you see a game importing d3d8.dll, you know it uses DirectX 8.
Of course this does not say anything about what features of the API it actually uses.

bytesaber wrote:

Would getting an old DirectX 8.0 game running on newer Windows, with a newer GPU, show me the same thing? Is it true that newer DirectX versions emulate older version instruction, and if so, "might look and feel different" because it's kinda being emulated?

This is a pet peeve of mine, that nobody seems to understand how DirectX (or COM interfaces in general) works.
For other APIs, such as OpenGL, there is only one API, so newer versions need to be backward-compatible with older ones, and this may lead to problems.

Microsoft however, actually knows a thing or two about software architecture. Which is why they use COM interfaces. Each new version of Direct3D gets its own interface (and since version 8, they even get their own DLLs).
This means that the application always *specifically* talks to the interface of the API version it is designed for.
So newer versions of DirectX have absolutely no effect on older applications. They simply don't talk to the newer interface at all (they don't even load the DLL to begin with).

In theory, newer versions of Windows should not have an effect either. The devil is in the details of course.
But what probably has the most effect is the actual driver (and GPU): a newer driver may implement certain features/effects in a slightly different way from an older driver.
There can also be a difference between GPUs. Especially with these older APIs (rendering has become more tightly defined since D3D10, so different GPUs need to follow stricter rules, and variations between them are smaller). The internal workings of different GPUs are just different.
So indeed, a GeForce 4 may do something slightly different under D3D8 than a GeForce 1080.
I don't think 'emulation' is the correct term. It's just that the specs of D3D leave room for interpretation on how you implement them.
So, for example, newer GPUs have higher internal precision than these old generations. So in some cases you can actually see small rendering differences.
And don't get me started on all sorts of 'optimizations' (read: cheats) with texture compression, filtering, shader replacements and whatnot.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 9 of 18, by Baoran

User metadata
Rank l33t
Rank
l33t
bytesaber wrote:
Baoran wrote:

Pretty much all of them had installer who asked if you want to install directx. Also when you search for minimum system requirement for a game online, it often says the directx version required. Also the graphics card that is in minimum requirements for the game usually gives also a hint because it was usually the highest directx version that the minimum required card supported that the game was designed for.

Well, I'm looking for Maximum supported DirectX in a game. Not the minimum. Though in many cases, as you explain, it may have been the same answer for most games. But there are demonstrations you can find on youtube that show the same game being compared with older vs newer DirectX versions. So it's really a hunt for what would be the max supported in a game.

Minimum required directx version is usually the directx version the game was designed for. Because it means that it doesn't need any features from later directx versions. The exception is when a game has 2 different dx modes and lets you choose mode, but if there are no modes it is the minimum one you should look for.

Reply 10 of 18, by Scali

User metadata
Rank l33t
Rank
l33t
Baoran wrote:

Minimum required directx version is usually the directx version the game was designed for. Because it means that it doesn't need any features from later directx versions. The exception is when a game has 2 different dx modes and lets you choose mode, but if there are no modes it is the minimum one you should look for.

Again we have to split two things here:
1) The DirectX API version that is being used
2) The DirectX feature level that is being used

Regarding 1), it is very uncommon that games use multiple API versions. This basically requires a game to have multiple game engine cores.
This mainly occurred during the DX9/DX10 era, because DX10 required Windows Vista and a fully DX10-capable GPU. For this reason, games included a DX9 mode, for older hardware and/or Windows XP.

Regarding 2), it is is common to associate a given DirectX version (or subversion, such as DX9.0c etc) with a specific featureset, or feature level.
Some games advertise this feature level as requirement. Half-Life 2 is a good example of this, you can select a 'Hardware DirectX level':
hl2-2.jpg

It supports DX7 (no shaders, GF2/Radeon DDR level), DX8 (GF3/GF4), DX8.1 (Radeon 8500) and DX9.
But for all these modes, it only uses one API: DirectX 9.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 11 of 18, by bakemono

User metadata
Rank Oldbie
Rank
Oldbie

Microsoft however, actually knows a thing or two about software architecture. Which is why they use COM interfaces.

Funny... but Microsoft's love of keeping around multiple APIs for the same thing is entirely separate from their choice to use COM for DirectX.

Reply 12 of 18, by Azarien

User metadata
Rank Oldbie
Rank
Oldbie
Scali wrote:

For other APIs, such as OpenGL, there is only one API, so newer versions need to be backward-compatible with older ones, and this may lead to problems.

Since OpenGL 3.2 (or so) applications should ask for specific GL version. Not doing so (i.e. initializing using the old way) guarantees only 2.1 context, but in practice - at least on PCs - by default the driver will give you "compatibility context", a monster that supports everything since 1.0 through latest 4.x.

Reply 14 of 18, by Scali

User metadata
Rank l33t
Rank
l33t
bakemono wrote:

Microsoft however, actually knows a thing or two about software architecture. Which is why they use COM interfaces.

Funny... but Microsoft's love of keeping around multiple APIs for the same thing is entirely separate from their choice to use COM for DirectX.

How so?
COM is just one of various ways to support multiple interfaces (or multiple versions of an interface).
They could have used something other than COM, but that was not the point. They wanted multiple interfaces. COM is one way to do that. A nice advantage of COM over native interfaces of languages is that COM is language-independent. Had they used C++ objects for example, you'd only be able to use it with the specific C++ compiler that they used, because of name mangling and calling convention issues.
COM standardizes these things, so you can use DirectX in C++, C, Delphi, VB, even assembly, or what other language you want.

Also, why only make a half statement like this? Why not explain exactly what you mean?

Last edited by Scali on 2018-03-07, 10:31. Edited 1 time in total.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 15 of 18, by Scali

User metadata
Rank l33t
Rank
l33t
Azarien wrote:
Scali wrote:

For other APIs, such as OpenGL, there is only one API, so newer versions need to be backward-compatible with older ones, and this may lead to problems.

Since OpenGL 3.2 (or so) applications should ask for specific GL version. Not doing so (i.e. initializing using the old way) guarantees only 2.1 context, but in practice - at least on PCs - by default the driver will give you "compatibility context", a monster that supports everything since 1.0 through latest 4.x.

I know how OpenGL works, thank you.
But as you say yourself, they have created a 'monster'.
The problem with OpenGL is that you only have a single interface. Depending on the context you initialize, the exact same functions will get different behaviour. To make it even more complicated, certain extensions may change the behaviour of functions as well.

DirectX doesn't even supply the exact same functions in the first place. They use an object-oriented design, where each version has its own interface. Even if some functions are (almost) the same in different versions, they are explicitly separate.

So even with the versioned contexts that OpenGL now has, it still does not provide a strict isolation of code from different versions.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 16 of 18, by STX

User metadata
Rank Member
Rank
Member
bytesaber wrote:

Does it make any sense to purposely downgrade to a Geforce 4 card to try and see what life was like before DirectX 9 showed up?

If it makes you happy, then Yes. (Be sure to use a GeForce 4 Ti though. The GeForce 4 MX is actually a DirectX 7 card.)

bytesaber wrote:

....So if I wanted to taste life before DirectX 9.0c, is it just a simple matter of installing the older card, install Windows XP, and don't upgrade it beyond DirectX 8.1 and try a game?

Yes, but ensure that the version of Windows XP is Windows XP SP1 (32-bit) because later service packs bundled DirectX 9. The 30.82 drivers would be period-appropriate and can be downloaded from nVidia at this URL:
http://www.nvidia.com/object/winxp-2k_30.82

bytesaber wrote:

And if so, what is a DirectX 8.0 - 8.1 specific game? What works of art are out there that cherished 8.0 - 8.1 ?...How does one determine what DirectX version a game was designed for?...Is there a solid way to determine a game's D3D platform version?

The Game Browser at MobyGames has a "Minimum DirectX Version Required" filter that gives a mostly correct answer to your question.
DirectX 8.0: http://www.mobygames.com/browse/games/windows/tic,62/ti,167/
DirectX 8.1: http://www.mobygames.com/browse/games/windows/tic,62/ti,404/

bytesaber wrote:

Would getting an old DirectX 8.0 game running on newer Windows, with a newer GPU, show me the same thing?

Yes, basically. Any perceptible difference would be no more significant than the slight graphical variations between different driver versions, driver configuration settings or DirectX 8 GPUs.

bytesaber wrote:

Is it true that newer DirectX versions emulate older version instruction, and if so, "might look and feel different" because it's kinda being emulated?

Yes, but the difference would not be significant, in my opinion. The bigger question is whether or not the older DirectX version would work at all. As newer GPU hardware and drivers are produced, compatibility with older versions of DirectX will tend to decrease. For example, during the second half of 2017, AMD's most up-to-date Adrenalin driver stopped working with some DirectX 9 games. This was fixed only recently. See http://www.tomshardware.com/news/amd-releases … sues,36365.html
Another concern that is alleviated by the use of a dedicated retro Windows XP PC is compatibility with SafeDisc, SecuROM and StarForce DRM. Many games from the early 2000's won't work on Windows Vista or newer because these newer operating systems' more secure designs prevent these DRM programs from running. (Other work-arounds include re-buying the game from GOG and dodgy No-CD cracks, which may or may not be available.)

bytesaber wrote:

Is there a way to test DX specific effects? Such as some kind of 3DMark that demonstrates "now that you have an 8.0 capable card, let me you show you this cool fog effect your DX7 card never could."

Game 4 from 3DMark2001 will not run without DirectX 8 programmable shader support. Here's the article where I found this fact:
https://books.google.com/books?id=3AEAAAAAMBA … epage&q&f=false

bytesaber wrote:

Could DirectX 8.0 effects be shown on DirectX 7 or DirectX 6 cards but just perform really bad? Meaning... you can still see newer D3D version "stuff" but just not actually enjoy performance?

That depends on how the game was programmed, so Yes or No, depending on the game.