The release highlights for the just-released NVIDIA 313.09 Linux beta include display reprobing upon VT switching to X, unofficial GLX protocol support for new extensions, cursor bug-fixes, support for the GLX_EXT_buffer_age extension, improving the performance of glDrawPixels() command by up to 450%, a libnvidia-encode.so library fix, improving the performance of OpenGL frame-buffer object binds with Xinerama by up to 2000~3000%, and fixing performance issues when using some versions of HyperMesh with Quadro GPUs.
The newly-added unofficial GLX protocol support covers ARB_vertex_array_object and the OpenGL 3.0 commands of ClearBufferfi, ClearBufferfv, ClearBufferiv, ClearBufferuiv, and GetStringi.
While there's quite a few worthwhile changes in this release, the performance improvements for the NVIDIA 313.09 driver stand out quite a bit after NVIDIA already made impressive OpenGL performance improvements with their 310.xx driver series.
With the 310.09 driver also introducing support for the GLX_EXT_buffer_age extension, it might help fix tearing problems.
The Khronos specification describes the buffer age extension as:
The aim of this extension is to expose enough information to applications about how the driver manages the set of front and back buffers associated with a given surface to allow applications to re-use the contents of old frames and minimize how much must be redrawn for the next frame.The NVIDIA 313.09 Linux graphics driver beta can be downloaded from NVIDIA.com.
There are lots of different ways for a driver to manage these buffers, from double buffering, different styles of triple buffering and even n-buffering or simply single buffer rendering. We also need to consider that power management events or memory pressure events might also result in some of the buffers not currently in-use being freed.
This extension lets applications query the age of the back buffer contents for a GLX surface as the number of frames elapsed since the contents were most recently defined. The back buffer can either be reported as invalid (has an age of 0) or it may be reported to contain the contents from n frames prior to the current frame.
Once the application has queried the buffer age, the age of contents remains valid until the end of the frame for all pixels that continue to pass the pixel ownership test.