Forcing Triple Buffering?

Triple buffering is what Vertical Sync needs and there's no option in game, yet VSync is forced by the game for rift users. Does anyone think forcing TB it through the NVCP would be beneficial? Or maybe forcing VSync off? I'm willing to try but it's very hard to benchmark on the rift. Wondering if anyone's tried, or knows the relationship between the drivers and the game?
 
I've found the only way to get TB to work in E:D is through D3DOverrider, which is part of RivaTuner. Although RivaTuner itself is quite dated and should not be used, D3DOverrider still works just fine.

http://downloads.guru3d.com/download.php?det=163

You don't need to install it, just extract RivaTuner224c-[Guru3D.com].exe, extract the included RivaTuner224MSIMOA2009Edition.exe, open the "Setup\Tools\" subdirectory and you'll see the "D3dOverrider" folder. Run it, make a profile for the E:D executable (EliteDangerous32.exe), set Force VSync and Force triple buffering to on and you should be all set.
 
I force TB through the nvcp as I read somewhere that it's a performance booster when vsync is active
Tbh I can't say I've noticed the difference with it on or off but every little helps right ?
 
I've found the only way to get TB to work in E:D is through D3DOverrider, which is part of RivaTuner. Although RivaTuner itself is quite dated and should not be used, D3DOverrider still works just fine.

http://downloads.guru3d.com/download.php?det=163

You don't need to install it, just extract RivaTuner224c-[Guru3D.com].exe, extract the included RivaTuner224MSIMOA2009Edition.exe, open the "Setup\Tools\" subdirectory and you'll see the "D3dOverrider" folder. Run it, make a profile for the E:D executable (EliteDangerous32.exe), set Force VSync and Force triple buffering to on and you should be all set.

Before I try this, would just like to know what makes you sure this actually works? NVCP, and Nvidia Inspector (the heir to Rivatuner) have the ability to force these things too, and as Karnath has pointed out, doing so doesn't seem to make much difference. Have you got some empirical evidence that doing it your way forces TB?

I force TB through the nvcp as I read somewhere that it's a performance booster when vsync is active
Tbh I can't say I've noticed the difference with it on or off but every little helps right ?

My thinking exactly
 
Thanks for making me check again. As it turns out what I perceived earlier as the effect of the enabled triple buffer is in fact D3DOverrider's dynamic VSync. When checking VRAM consumption there is no indication whatsoever of a third buffer. Same goes for trying to force TB through Nvidia Inspector.
 
Thanks for rechecking. Shame about that :(

Regardless, can I ask you, is the dynamic Vsync something worth applying?
 
It depends on which of the downsides you're more willing to live with.

With normal VSync, if FPS can't keep up with your screen's refresh rate, FPS will drop to "refresh rate / N" where N is any positive integer. If there isn't enough juice for 60FPS, it'll drop to 30, then to 20, to 15, to 12, to 10 and so on. But at least you won't see any tearing.

With dynamic or adaptive VSync, if the FPS can't keep up with the screen's refresh rate FPS won't drop as they do with normal VSync. Instead the GPU will try to render images as quickly as possible, but whenever the screen is ready to display a new image the GPU will always put out what it has, whether it's finished or not. This results in tearing as an older image is overlaid with an only partially rendered newer image.

Freesync and G-Sync are methods from AMD and Nvidia respectively to get rid of the negative effects of dynamic VSync, but they aren't exactly widely available as each of them depends on one thing or another.
 
It depends on which of the downsides you're more willing to live with.

With normal VSync, if FPS can't keep up with your screen's refresh rate, FPS will drop to "refresh rate / N" where N is any positive integer. If there isn't enough juice for 60FPS, it'll drop to 30, then to 20, to 15, to 12, to 10 and so on. But at least you won't see any tearing.

With dynamic or adaptive VSync, if the FPS can't keep up with the screen's refresh rate FPS won't drop as they do with normal VSync. Instead the GPU will try to render images as quickly as possible, but whenever the screen is ready to display a new image the GPU will always put out what it has, whether it's finished or not. This results in tearing as an older image is overlaid with an only partially rendered newer image.

Freesync and G-Sync are methods from AMD and Nvidia respectively to get rid of the negative effects of dynamic VSync, but they aren't exactly widely available as each of them depends on one thing or another.

That's a very brilliant explanation, rep~ to you.

Ok and to double your rep, (and I will stick it in the DK2 Improvement Compendium in my sig), could you detail exactly how to enable Dynamic VSync? I have a feeling that it will be a brilliant solution for a lot of people
 
To enable dynamic / adaptive VSync you can try either Nvidia Inspector or Nvidia Control Panel. AMD should also have a setting in the Catalyst Control Center but it's been a while since my last Radeon card. There's also the aforementioned D3DOverrider that still seems to be able to provide us with adaptive VSync (just checked).
 
To enable dynamic / adaptive VSync you can try either Nvidia Inspector or Nvidia Control Panel. AMD should also have a setting in the Catalyst Control Center but it's been a while since my last Radeon card. There's also the aforementioned D3DOverrider that still seems to be able to provide us with adaptive VSync (just checked).


Ok thanks man. This has worked so well for me. See the first point "0" in this thread. I've explained it, why it helps, and thanked you and asked people to rep you.

https://forums.frontier.co.uk/showthread.php?t=121355
 
I'm a big fun of D3DOverride. With ED work really well. I hope Frontier implement the TripleBuffer in the graphics engine itself.
 


short answer: d3doverrider can easily detect Elite Dangerous and enable triple buffer for it.

extended answer: For good VR you need low latency in the input-to-rendering path but you need also VSync ON to avoid tearing that in VR it's a very bad thing.
Elite seems to have a good low latency but it can be better because it freeze for few frames so often, very annoying.
back to vsync, so when vsync it's enabled there are 2 buffers involved in the rendering path, front and back buffers. The gpu render on the back buffer and the display scanout from the front buffer at a fixed frame rate, 75fps in thw case of the DK2. A signal from the display to the gpu, the vsync signal, allow the gpu to swap the 2 buffers in the exact moment a new refresh of the display must happen. this is the sync part.

if the gpu can keep up rendering 75 new images every second, one every 13.3ms, this is what happens:
- from the t=0 to t<13.3ms a new image is rendered into back buffer and in the same slot of time the previous rendered image is scanout to the display from the front buffer.
- at t=13.3ms the vsync signal swap the 2 buffer so the rendered image is scanout from the front buffer to the display and the game engine can begin to render another one into the back buffer.

so the gpu and the game engine are in sync with the display, if the rendering of a new image require less than 13.3ms the gpu just wait the vsync to begin the rendering of a new one, a waste of time.

what if the rendering of an image take more than 13.3ms? for example it takes 15ms.
at t=13.3ms the gpu refuse to swap the 2 buffers because it can't show an incomplete image so the display scanout the previuos image again, the rendering will be completed at t=15ms but the new image will start to be scanout only on the next vsync signal, at t=26.6ms.
if every images require more than 13.3ms to be renndered a display that run at 75hz will show only 37.5 new images every second, very bad for VR.
when the display show the same image for 2 or more times in a row we get very bad VR experience with double or triple images and a lot of stutter.

The triple buffer architecture use 2 back buffers to decouple the rendering loop from the vsync signal. At the end of a rendering the gpu can start rendering a new image on the second backbuffer without wait the vsync.
with vsync on you can have 75fps or 37.5fps, with triple buffer you get an avg fps between 37.5fps and 75fps, higher then vsync on, maybe 65fps or 70fps or 74.5fps, without drop to half the rafresh rate of the display.
triple buffer allow you to use all the power from your gpu, there is no waiting for the vsync signal before start rendering the next image.

Triple buffer option in the nvidia control panel is valid only for OpenGL application. why it's not valid for D3D applications? because d3d implement a deep buffer stack just because it can render a lot of images in advance, just for fun, queuing up to 8 images.
This is very bad for VR, it's useless and introduces so much latency, up to 100ms.

Triple buffer do not queuing images more than VSyncOn and in general can increse the fps without introduces latency.

it's possible to configure the D3D deep buffer stack to work like Triple Buffer, the developers can do this but most of the times no one does, D3DOverrider do this at runtime.

Triple buffer is the right way to do vsync, please Frontier implement it in ED.

edit: I correct some syntax error.
 
Last edited:
adaptivesync it's not good for VR because it disable the vsync if your gpu can't render at 75fps. if your avg fps is below 75hz it's like vsync is always off and you get tearing.
triple buffer give you the best of vsync on
( no tearing ) and vsync off ( using all power from your gpu ).
 
Does triple buffering need particular hardware or a particular performance capability for it to work well or could anyone benefit from it if implemented?

There are some really good explanations in this thread. I feel like I've been educated before I've gotten out of bed.

[edit] sounds like it comes at a cost of extra video memory, which I suspect most people these days can handle. Must try D3Doverrider in the meantime. FD devs should have proper triple buffering patched and implemented by mid morning. No rush :)
 
Last edited:
Does triple buffering need particular hardware or a particular performance capability for it to work well or could anyone benefit from it if implemented?

There are some really good explanations in this thread. I feel like I've been educated before I've gotten out of bed.

[edit] sounds like it comes at a cost of extra video memory, which I suspect most people these days can handle. Must try D3Doverrider in the meantime. FD devs should have proper triple buffering patched and implemented by mid morning. No rush :)


no particular hardware it's required just few megabytes of video memory and a solid understand of directx to configure it in the right way.
edit:directx it's a mess, the next graphics apis, vulkan and dx12, should let the developers control everything and do nothing in the background that the developer don't know. this is good for the future of VR.
 
Last edited:
Would be interested to know what application graphics settings should be set when using D3DOverrider & Elite. Particularly - what do you set the vsync refresh rate to? Leave it at 75?

So presumably D3Doverride set to medium with triple buffering on and Vsync on.

What would you set in game? Vsync on or off? If on, what would you do with the refresh rate?

What will happen to Low persistence I wonder?
 
Last edited:
I force TB through the nvcp as I read somewhere that it's a performance booster when vsync is active
Tbh I can't say I've noticed the difference with it on or off but every little helps right ?
This is designed to work with a standard monitor, where latency is not an issue.

It boosts framerate, in regards to VR, it's only going to hurt performance.

- - - - - Additional Content Posted / Auto Merge - - - - -

While we are at it, I am not seeing tearing in VR at all.

The rift draws a frame, holds it for X ms, then blanks the screen. It's pretty hard to display tearing even if it's happening. I drop below 75 fps often, with no vsync at all, and have never seen tearing in the rift, only minor stuttering.
 
Except that D3DOverrider does not force a 3rd buffer in E:D. If a 3rd buffer was active, VRAM consumption would go up. Unfortunately that doesn't happen. Likewise, trying to force triple buffering through Nvidia Inspector or the Nvidia Control Panel also has zero effect on E:D.
 
Last edited:
Except that D3DOverrider does not force a 3rd buffer in E:D. If a 3rd buffer was active, VRAM consumption would go up. Unfortunately that doesn't happen. Likewise, trying to force triple buffering through Nvidia Inspector or the Nvidia Control Panel also has zero effect on E:D.

AhhhHhhhh. I see. So what tools are you using to check the buffering behaviour? What in game setting did you use when you tested this?

I wondered whether disabling vsync in game and allowing D3D to manage it exclusively would avoid conflict and enable triple buff - but I suspect that you're way ahead of me on this.
 
Back
Top Bottom