DirectX9 Beta3 released

Status
Not open for further replies.
Derek Smart [3000AD said:
]FP Z buffer is not supported in ANY of the current ATI drivers. Period. And even under DX9, I can't use it.

Well, what about texm3x2depth (PS1.3) or texdepth (PS1.4)? Both are available in DX8.1 and allows depth values to be outputted via the pixel shader. With this you should be able to store whatever floating point value you want in the depth component of the pixel. This could be a ratio of z/w (to get the "normal" z value for the pixel in floating point form) or whatever you want to compute in the shader. The vertex shader could move vertex z and w into texcoords and they would be interpolated before inputting them into the pixel shader. You can then compute z/w, as I mentioned above, to get the z value.

Now, granted, on < DX9 hardware the values would be converted to fixed point as they didn’t support float pipelines, however 9700 does support floats throughout the pipeline so it should be possible to get floating point Z buffer accuracy without the need for DX9 driver support and it could be done under current DX8.1 drivers, the only drawback being the Z buffer optimizations would probably go out the window.
 
texdepth kills Early-Z for one. Secondly, the z-compare hardware is going to treat the Z values the same, whether or not you stored them using a custom format. It won't know about the exponent. I suppose you could store the exponent in the MSB and get away with a integer compare.
 
DemoCoder said:
Secondly, the z-compare hardware is going to treat the Z values the same, whether or not you stored them using a custom format. It won't know about the exponent. I suppose you could store the exponent in the MSB and get away with a integer compare.
Let me give the IEEE 32-bit float format:
1 sign bit
8 bits exponent
23 bits mantissa

The exponent is special, however, as the values are biased by 128. For example, an exponent of 0 would be stored as 128. The reason this is done is so that you can compare floating point values as unsigned integers, as long as they have the same sign. If your biased exponent is 0, then you hit some special cases, which I am too lazy to look up and see if the comparison works the same way here or not :)
 
With IEEE, you can always** compare two floats as if they were integers and the test will work provided they aren't both negative (in which case you have to reverse the decision).

I used to do to this all the time in C in the PCX1/2 drivers because the ix86 FP compare was dreadful.


**Hmm. Except possibly NaNs and you also have +0.0 and -0.0 but I don't that matters....
 
Well, looks like speccy, Democoder and OpenGL guy have pretty much covered it all. Anything I add would just be repetitive.

As it stands, floating Z is useless to me. Now and in the foreseeable future.

While the game I'm working on is DX8 compliant, I don't have any plans to incorporate any DX9 specific features - because it doesn't contain anything useful to me at this time.

BUT, I'm not particularly concerned about the game (BCG) I'm working on. I'm concerned about the last game (BCM) and all future games which will be working on DX8 for sometime to come. But hey, the only consolation is that the 9700PRO is only one card. I'm not going to beat myself up about it. But my concern is that it starts with this card - and I'm sure future Radeon cards will still be missing a W buffer component.

The fact is, I no longer have the benefit of a W buffer. I tried the shader suggestion without much success and conveyed this to ATI. Around the end (9/23) of Sept. they promised to have one of the devs actually prove this theory with sample code (just like nVidia would) in case I was missing something. I'm still waiting for it. In the meantime, BC gamers have to put up with the artifacts.

Further, the problem with the terrain rendering was reviewed by the ATI devs, who on 09/16, came up with several suggestions - most of which (a) I was already doing (b) didn't work.

Here is a snippet from the conclusion rather lengthy email. Some pretty useful stuff were in that email actually (e.g. a suggestion about premodulating the water texturing for rendering).

The Z fighting is happening between steps 5 and 6. It's not a problem with multitexture at all. The trouble is that step 5 is drawn with triangle lists and step 6 (using the same vertices) is drawn with triangle strips.

While these will have the same rasterization when not clipped, things will go awry (as we are seeing) when clipping is involved. In order to characterize this, I disabled TcL and the rasterization guardband. This forces the SWTL path in D3D to clip everything and we then see the same sort of Z fighting. Z compare is set to less-equal but this doesn't prevent Z fighting on co-planar polygons.

Why don't we see this problem on nvidia? One thing I see is that nvidia reports a very large guardband. It's quite possible that they are not clipping in this case so they don't have any problems here.

Possible solutions:

- Render steps 5 and 6 with the same primitive types. This should guarantee invariance even with clipping.
- Render step 6 with a Z bias between 0 and 16 then render step 8 with a higher value. Thus, 8 could be used at step 6 and 16 at step 8
- Render the base texture with the detail maps at the same time. This will completely resolve Z fighting issues and alleviates the need for Z bias. I.e. multitexturing.

Note the highlighted parts. Ignore everything else because its all speculation and I already explained the process to them. Anyway, the bolded part is where I personally think the problem is and thats in the progress of being checked out - again - with code designed to alleviate this problem on these boards. Naturally, it works fine on every single graphics card to date - except the 9700 Pro. They suggest that it has something to do with the guardband. I have no idea, because I don't care about excuses. I want solutions and they seem to be trying to come up with one. Right now, they're just waiting for me to tell them if the suggesting (in bold) works or not.

Oh, did I mention that I put in shadows and it works fine on every card but is flat out busted on the 9700PRO? No? Go see Mafia for an idea. Naturally, I can't do anything about it until the previous problem is solved, because they might be related. At this point, I don't have a clue.

XBox here I come :rolleyes:
 
Derek,
I don't know if this is the cause of your problem (or whether it even occurs on 9700) but IIRC on an earlier ATI card, it appeared they used different maths for the transform step depending on whether lighting was turned on or off. If an application did multi-pass texturing with different lighting all sorts of strange Z artefacts appeared.

Of course this may not be the case with the 9700 drivers (and it may have been fixed with the earlier card's) but it might be worthwhile checking.
 
Simon F said:
Derek,
I don't know if this is the cause of your problem (or whether it even occurs on 9700) but IIRC on an earlier ATI card, it appeared they used different maths for the transform step depending on whether lighting was turned on or off. If an application did multi-pass texturing with different lighting all sorts of strange Z artefacts appeared.

Of course this may not be the case with the 9700 drivers (and it may have been fixed with the earlier card's) but it might be worthwhile checking.

Yeah, I checked that out Simon (funny you should mention that - good catch!) but thats not the case. In fact, there was a problem also associated with this, several drivers back - in which the drivers were still lighting tris they weren't supposed to during a specular pass (or some nonsense like that). They fixed that one.

I have a gut feeling that the dev's suggestion above, might be the problem. But I have yet to try that suggestion, due to other things on my plate right now.

In the interim, I ripped out the 9700 PRO from my primary dev machine and put in another GF4 Ti 4600 that nVidia sent me. The 9700 PRO is sitting in a test machine for now. And I have a sinking feeling that its never going back in my primary dev machine (which, until the 9700 PRO came along, hosted a 1228MB 8500) again. Ever. The next time I change this GF4 card out, will be when I get my NV30 dev unit. I sick of this bullshit. I truly am. And its not getting any better. At least not as far as I can see.

But I give the driver devs credit for trying harder though - because it seems as if they really are. We'll just have to see if at all they actually resolve the bugs in the 7500/8500 by the time the 9000/9700 mature in time for the next suite of cards. I have no idea why problems just keep piling up, being carried forward and propagating onward from there across future cards. Its just boggling to me.

An excellent, excellent piece of hardware, mired with the same problem that has plagued ATI boards for so long (drivers) is truly a travesty, no matter what anyone tells me.

Time will tell I suppose.
 
Derek Smart [3000AD said:
]The fact is, I no longer have the benefit of a W buffer. I tried the shader suggestion without much success and conveyed this to ATI. Around the end (9/23) of Sept. they promised to have one of the devs actually prove this theory with sample code (just like nVidia would) in case I was missing something. I'm still waiting for it. In the meantime, BC gamers have to put up with the artifacts.

apropos, i, too, would be curious to see what that sample code looked like in case it had any quirks that generally would be overlooked. thanks in advance.

Here is a snippet from the conclusion rather lengthy email. Some pretty useful stuff were in that email actually (e.g. a suggestion about premodulating the water texturing for rendering).

The Z fighting is happening between steps 5 and 6. It's not a problem with multitexture at all. The trouble is that step 5 is drawn with triangle lists and step 6 (using the same vertices) is drawn with triangle strips.

While these will have the same rasterization when not clipped, things will go awry (as we are seeing) when clipping is involved. In order to characterize this, I disabled TcL and the rasterization guardband. This forces the SWTL path in D3D to clip everything and we then see the same sort of Z fighting. Z compare is set to less-equal but this doesn't prevent Z fighting on co-planar polygons.

Why don't we see this problem on nvidia? One thing I see is that nvidia reports a very large guardband. It's quite possible that they are not clipping in this case so they don't have any problems here.

Possible solutions:

- Render steps 5 and 6 with the same primitive types. This should guarantee invariance even with clipping.
- Render step 6 with a Z bias between 0 and 16 then render step 8 with a higher value. Thus, 8 could be used at step 6 and 16 at step 8
- Render the base texture with the detail maps at the same time. This will completely resolve Z fighting issues and alleviates the need for Z bias. I.e. multitexturing.

Note the highlighted parts. Ignore everything else because its all speculation and I already explained the process to them. Anyway, the bolded part is where I personally think the problem is and thats in the progress of being checked out - again - with code designed to alleviate this problem on these boards. Naturally, it works fine on every single graphics card to date - except the 9700 Pro. They suggest that it has something to do with the guardband. I have no idea, because I don't care about excuses.

actually from what i can read they suggest it has something to do with clipping vs. no clipping, and the numerical errors imposed by the that. but nevermind. i'm curious of one thing: is that geometry that you pass in steps 5 and 6 topologically the same - do verts from the two meshes have the same connectivity?
[edit] doh, they cannot have the same topology even if you tried real hard. scrap that qustion.
 
Derek Smart [3000AD said:
]
In the interim, I ripped out the 9700 PRO from my primary dev machine and put in another GF4 Ti 4600 that nVidia sent me. The 9700 PRO is sitting in a test machine for now. And I have a sinking feeling that its never going back in my primary dev machine (which, until the 9700 PRO came along, hosted a 1228MB 8500) again. Ever. The next time I change this GF4 card out, will be when I get my NV30 dev unit. I sick of this bullshit. I truly am. And its not getting any better. At least not as far as I can see.

For my primary gaming machine at home I've done the opposite--ripped out the GF4 4600 and put it into the wife's box (she doesn't much care what's in it) and am plugging along beautifully with the 9700--I can't imagine the scenario which might develop that would cause me to do the reverse, and I've yet to run the game the 9700 doesn't run better than my former GF4 (from an IQ standpoint there's literally no comparison.)


An excellent, excellent piece of hardware, mired with the same problem that has plagued ATI boards for so long (drivers) is truly a travesty, no matter what anyone tells me.

Time will tell I suppose.

From my standpoint the 9700 release ranks right up there among the best new-architecture 3D card releases I've ever seen, especially in the driver area. I was most impressed with ATI's efforts in this regard--a far cry from the long months it took nVidia to to poke the original GF1 to better performance than a TNT2--not to mention the bugs galore in that architecture release. Compared to that, the 9700 release is Nirvana. Also, you're not thinking of the fact that nVidia has literally been honing the GF-series drivers for years--and ATI hardly has 2 months of shipping the 9700. And yet functionally with the ~30-odd 3D games I've tested the 9700 with it runs just as stable as the GF4 4600 running the 30.82 Dets. I think that's remarkable.

The last ATI card I owned prior to this one I returned in under two weeks and swore I've never buy another ATI product (never say never, right?) That was a Rage Fury--and you want to talk driver problems, there you are. The 9700 is not remotely comparable with that ATI product release--indeed, with practically any other ATI product release I've participated in (I completely overlooked the 8500) the ATI drivers were always the achilles heel. I think you'll find you're in the solid minority in thinking that the 9700 release is like earlier ATI 3D product releases--it's not in any way that I can see.
 
Let's not make this another debate about the relative merits of ATI's drivers. The 9700 has been comparable to other new architectures at launch in that certain games (some of them very popular) experience serious problems. If the games you are most concerned with have these issues, you are not going to see it as an outstandingly successful launch, and you could conceivably be quite frustrated with the state of the drivers. Of the 6 games I've tried on the 9700, all but one have had driver issues, mostly acknowledged by ATI:

Sacrifice (random system lock-ups)
Medieval Total War (doesn't work--ATI has fix in the works)
Aliens vs. Predator 2 (metallic surfaces rendered incorrectly)
World War II On-Line (text rendering and z buffer errors, fixed by latest driver release)
Wizardry 8 (stuttering video and mouse lag)

UT2003 demo was the only one that worked like a charm

On the other hand, every newly released graphics card architecture that I've seen has had the same kinds of problems, and they get fixed by driver updates eventually. I expected this when I bought the card, so I haven't been (too) disappointed, especially since the card lives up to all its performance claims.
 
antlers4 said:
Wizardry 8 (stuttering video and mouse lag)

UT2003 demo was the only one that worked like a charm

On the other hand, every newly released graphics card architecture that I've seen has had the same kinds of problems, and they get fixed by driver updates eventually. I expected this when I bought the card, so I haven't been (too) disappointed, especially since the card lives up to all its performance claims.

Wizardry 8 ran like dream for me, no stuttering or mouse lag (that wasn't fixable by disabling vsync--had the same problem with my GF products when vsync was acting as a governor on frame rates and disabling it took care of the stuttering there, too)--it took me awhile to get over the difference with my former Ti4600, frankly. (Don't have any of the other games you mention.)

The 9700 product launch is head and shoulders above previous new-architecture launches by ATI, and better than nVidia's GF1 launch by far. If you care to look at virtually every single product review of the 9700 to date they all pretty much say the same thing--that's the best launch ever for an ATI 3D product. I think you are minimizing it too much, frankly.

And as I said, I've run the card extensively with ~30 3D games, old and new, D3d and OpenGL, and not had a major problem with any of them. The list of 3D games that run successfully with the 9700 ROOB is far, far longer than the list of games which don't--is the point here. ANd with the next driver release or two there won't be many at all which have problems with it. I just think that's great for a 3D card with a brand new architecture, especially one as complex as the 9700. ATI's done something noteworthy here and I don't think deserves to be short changed. It's *not* just like the release of any old 3D card--that's the point and why so many aside from me are impressed with it, too.
 
..back on topic

As I said in a post on the previous page....

Derek Smart [3000AD said:
]The suggestion to fix the above problem, is to switch the detail texturing to use triangle lists instead of strips. Thats supposed to fix the problem (it just might) and all the ZBIAS settings can also probably be finally removed.

Looks like I was right in my assumption that changing the detail texturing to use lists instead of strips (to match the pre-stage), might fix it. Probably because I wasn't convinced, I didn't bother to touch the code.

Well, guess what? Just like the GTA3 and Mafia specific fixes which fixed some issues in my games on these boards, today I downloaded the NHL2003 bug fix (778 - 6.13.10.6193) and installed it. On a whim, I decided to check out my game's terrain engine to see if, by the off-chance, these drivers fixed anything.

Well, you can see the results here and here

Looks like it wasn't any of the issues that the devs pointed out, ended up being the problem. Whatever the problem was, it has been fixed in these latest drivers. God forbid if ATI ever releases a list of what their drivers actually fix so that at least us devs know wtf is going on. This hit or miss fix strategy is my #2 complaint (#1 being the piss poor drivers) with ATI driver dev.

Just imagine, I would have wasted quite a bit of time, changing my code to test out - yet another theory - which would have ended up being another dead-end. :rolleyes:

I can't wait to hear the explanation for this one.
 
I have a question regarding the ATI 9700.
Is the card DX9 compatible or is it DX9 compliant?

I found out a few years ago that if you buy a gfx-card before a new DX is released and they claim that it supports it or is compatible it´s not certain that all new DX features will work.

Perhaps I am wrong but I guess there is a difference between a card that is 100% compliant and one that supports a new version of Dx.

Regards!
 
Its fully DX9 compliant. They had time to get the DX9 specs down pat and outside of the final driver + api release (we're currently at Beta 3), there won't be any hardware changes.
 
Alright, who are you and what have you done with Derek Smart?

Just had to say that. I'm glad to see you have found your sense of humor. I for one, like the new attitude. Keep it up and you may actually become likeable. ;)
 
The Z fighting is happening between steps 5 and 6. It's not a problem with multitexture at all. The trouble is that step 5 is drawn with triangle lists and step 6 (using the same vertices) is drawn with triangle strips.

<snip>

Possible solutions:

- Render steps 5 and 6 with the same primitive types. This should guarantee invariance even with clipping.

I'm curious to what the API specifies. I know OpenGL requires repeatability, the same operations must always generate the same results. In this case however, you're not repeating the same operation, so I don't think you can expect the same Z value to be generated. You are however drawing the exact same triangles, but with another method, but I don't think the API specifies anything at that level (anyone knows for sure?)
 
jjayb said:
Alright, who are you and what have you done with Derek Smart?

lol, I was thinking the same thing. :D

I'm actually looking forward to more quality posts, and the opportunity to learn something from Derek.
 
Status
Not open for further replies.
Back
Top