PDA

View Full Version : triple buffering, vsync, tearing .. any suggestions!?


dnottis
07-24-04, 11:54 AM
From the other threads I'm seeing NVIDIA doesn't allow triple buffering unless it's supported by the application? I'm seeing some choppines in games like GTA VA, NHL 2004 and other older d3d applications. Some of this is cleared up by turning on vsync. GTA VC is still not smooth when turning or cornering - framerate is fine it just seems to jump or tear. I've been using ATI hardware for awhile now and these games mentioned are very smooth for me with ATI - not as fast but easily more playable since they run smoother. I'm not trying to start a :fanboy: war but was just curiously asking why this is and if anyone else noticed this as well?

Another problem I have is in MS Rallisport Challenge (which is one of the TWIMTPB games) that turns into slide show (6-7 fps) after about 30 seconds into the race. This happens with 4aa/8af enabled and is easily reproducable with many of the latest sets of drivers.

I have a AMD3400+, k8t800 (MSI) motherboard, 1 GB Corsair XMS 3200 XL, SB Audigy 2, Antec True Control 550 Watt PSU, EVGA 6800 GT, XP w/ SP1a (tried with dx9.0b and 9.0c same results) and have tried driver revisions back to 61.71 with no major differences.

Thanks for any suggestions!

SmuvMoney
07-24-04, 12:48 PM
I don't know what to tell you about the OpenGL triple buffering issue except that I have it as well on my BFG 6800GT. I can't seem to enable it at all - my thread is somewhere in this forum. It is an issue with OpenGL only IIRC. Direct3D requires that the game support triple buffering so the driver is not directly involved in its implementation. OpenGL controls it via the driver, which seems to be where the problem lies. I have tried a couple of tweakers to no avail. I can see the registry setting being put in, but the drivers seem to ignore it (unless it's actually incorrect). I may have to call BFG technical support and see if I can start an informal petition if it can't be turned on.

I don't have Rallisport Challenge so I can't comment on the problems you're having there. I hope you get down to the bottom of that one.

MingtonHall
07-24-04, 04:33 PM
How do you tell if it's on or off?

Trick question ok fair enough :)

-but you can test it directly/reliably maybe, knowing what to look for

More on that when you tell me how you can tell. You may know something, we can trade :)

Ming

SmuvMoney
07-24-04, 04:59 PM
Ming,

Here is how I test for it with Quake 3 Arena on my 6800 GT. Note your refresh rate for any resolutions that you use in 3D gaming as they are key to knowing to whether or not triple buffering is active. In my case, I check this with 1280x960 @ 120Hz or 1600x1200 @ 100 Hz. RefreshForce handles the refresh rate override. That being said, here is the test I have been using:

In the nVidia control panel, set your antialiasing and anisotropic filtering to their max. In my case, this is 8xS AA and 16x AF. I can duplicate it with 4xAA/16xAF, but it is much easier with 8xS due to the super sampling hit. Also, set your vsync to application controlled. Click OK and close the control panel.

From there, start fraps if you have it. Then start Quake 3 Arena.

Change your resolution to whatever resolution you want to test if it isn't set already - the higher the better. This can be done through the ingame options. I'll use 1280x960 @ 120 Hz in this example.

If you haven't turned on vsync ingame, go to the console by typing ` or ~. Once it is open, type /r_swapinterval 1 and hit Enter.

If you don't have fraps, turn on the ingame frame counter by typing /cg_drawfps 1 in the console. You won't see the counter until you start a map.

Start your favorite map. For example, I normally use Q3DM12 so I have to type /map q3dm12.

Once you get into the map, you may or may not have your framerate equal to your refresh rate. If you walk around, you should notice in certain spots of the map that your frame rate is half or a third of your refresh rate or worse. This is with nothing else going on onscreen. If you do not notice this immediately, venture into larger areas or increase the resolution. You should definitely see your framerate change from going to a small area to a large area or if you shoot certain weapons. Rocket launcher and lightning gun are the best ones for this. In my case, I went from 120 frames/sec to 60 frames/sec. This was viewable in both the ingame counter and fraps. At 1600x1200, I would sometimes go from 100 to 50 to even 33 frames/second.

Once you find a spot where you are locked at 1/n * refresh rate, turn off vsync by typing /r_swapinterval 0 in the console. Your framerate should shoot up to the actual value it should have been if triple buffering was on. In my case, it was actually around 80-90 frames/sec.

On my ATi card, I would sometimes have dips into the 90s or 100s, but when this happens on my nV card, I get 60 frames/second automatically. Don't get me wrong - I'm not complaining about 60 frames/second. However, without triple buffering, I don't have a choice of the framerate. I get either 120, 60, 40, 30, 20, etc. (1/n * refresh rate) with no choices in between. Triple buffering corrects this, allowing for smoother fluctuations in framerate. Feel free to test it to see if you can duplicate it as well. Any OpenGL game that allows you to change vsync on the fly without a restart can be used. Quake 3 Arena was the easiest example I could think of.

dnottis
07-24-04, 05:28 PM
does anyone else have issues with the games I mentioned?

SigmaOrionis
07-25-04, 05:07 AM
To get rid of tearing you could try a couple of options.

1. Lower your Refresh Rate to something your vid card can always maintain and enable Vsync.

2. Increase your Refresh Rate to a high enough setting that your vid card wont always be above this setting. You could increase your quality settings to the point that you are always below your refresh rate. This is getting pretty tough with the new cards:).

This is why I like for games to have framerate limiters like Bf1942. I dont know why people remove these. Thats why I'm glad that Doom3 is going to be capped at 60fps as long as your refresh rate is above 60hz you'll never see tearing.

Wish I could help you more. I hate tearing and find it very distracting when I'm playing especially in FPS games.

habicht
08-13-04, 08:19 AM
Doom3 seems to be a big problem with "jumping" and tearing ...

i run it at 1600x1200 NoAA 8xAF with high details

everytime i strafe around the screen seems to tear off ... with vsync on it is no problem

but ... the framerate difference (above settings):
vsync off: 56 fps
vsanc on : 39 fps

(timedemo1, second run)

system:
Athlon64 3.0
1 Gig ram (Corsair)
GF 6800 GT (Leadtek)


it seems that this problem can only be solved with triple buffering support for openGL by the nvidia drivers .... this perfomance decrease is not acceptable for the actual graphic cards

i hope nvida will solve the problem soon .... because the x800 xt ati cards seems to be not so good in benchmarks ... but all benchmarks are made with vsync off and you can't play doom3 with vsync off (only nvidia cards !!) ... so the direct comparison of the ati-nvidia benchmarks are obsolete ... it seems that it is no problem with triple buffering in openGL for the ati's, so no need to enable vsnyc ....

pls tell me if i'am wrong ...

oozish
08-13-04, 09:02 AM
I HAD tearing in doom, until I locked the refresh rates in display properties and enabled r_displayrefresh "85" in doomconfig.

Perfromance is much better with vsynch off and I get no tearing now.

jimmyjames123
08-13-04, 09:03 AM
I have mentioned this before, but here it is again:

This is why NVIDIA does not support triple buffering in their drivers:

"NVIDIA hasn't ever supported triple buffering in the OpenGL driver. It adds a reasonable amount of driver complexity, an additional frame of lag / latency (for twitch games like Quake / UT, the additional time to see the response to your mouse/kbd movements can be very annoying), and no large OpenGL titles have requested it since 1998."

Source:

http://www.beyond3d.com/forum/viewtopic.php?t=14427&highlight=