From: Bogdan Costescu (bcostescu_at_gmail.com)
Date: Tue Mar 05 2013 - 14:01:21 CST

Hi!

I seem to have a very similar problem with the one described in a
previous thread starting at:

http://www.ks.uiuc.edu/Research/vmd/mailing_list/vmd-l/21064.html

VMD updates the OpenGL window significantly slower than before;
display frame rate drops from several tens or even higher than 100 to
less than 10, independent of the representation (tested with lines,
new cartoon and new ribbons), with a rather small system of 30K atoms
of protein in water box.

I have initially discovered it when upgrading to recent Fedora
releases (17 & 18) and the latest versions of nVidia drivers (310.xx).
As previously I had Fedora 14 and a 280.xx driver which worked fine, I
used F14 as a basis and changed only the nVidia driver. VMD was in all
tests version 1.9.1 for 64-bit Linux, which displays at
initialization:

Info) Detected 1 available CUDA accelerator:
Info) [0] GeForce 9400 GT 4 SM_1.1 @ 1.38 GHz, 511MB RAM, KTO, OIO, ZCP
Info) OpenGL renderer: GeForce 9400 GT/PCIe/SSE2
Info) Features: STENCIL MSAA(4) MDE CVA MTX NPOT PP PS GLSL(OVFG)
Info) Full GLSL rendering mode is available.
Info) Textures: 2-D (8192x8192), 3-D (2048x2048x2048), Multitexture (4)

I have also tested VMD 1.9 and 1.8.7 for some of the driver versions,
with no change. I have disabled composite extension for these tests,
but on the working configuration (F14 + nVidia 2xx.xx) it was enabled
without any side effects. Within VMD, I have tested with and without
GLSL, also with no change in outcome.

The results:

- nVidia drivers 2xx.xx (tested 280.13 and several 295.xx up to the
most recent 295.75) work fine
- nVidia drivers 3xx.xx (tested 302.07, 304.64, 310.32, 313.09)
reproduce the slowness

In all cases, I've also tested pymol and I could not see any
significant degradation of its display speed, which makes me think
that it's specific to VMD. Unlike in the previous thread, I do not see
improvement with more recent 3xx.xx drivers. The VMD-specificity seems
to be supported by the highly non-scientific glxgears figures which
vary slightly around 3000fps for all tested driver versions.

I have then realized that the display of Features line shows a slight
difference: working drivers have MSAA(4) while slow ones have
MSAA(16). Setting the corresponding environment variable:

export __GL_FSAA_MODE=5

(which according to docs corresponds to 4x AA, though it's not clear
to me what the value reported by VMD is) before starting VMD, made it
run with its normal speed. Yey!

Some funny things:
- any setting of this variable makes it run faster than not setting it
! Obviously higher settings are slower than lower ones, as more AA is
done at higher settings; at highest documented setting (12), the
OpenGL window is still updated at ~25fps. Only by unsetting this
variable, I could recover the default slowness with 3xx.xx drivers.
- the docs say that 'nvidia-settings --assign FSAA=5' should have the
same effect as setting the environment variable - but this doesn't
work at all for me, it's as if I didn't run it, although a
'nvidia-settings --query=fsaa --verbose' reports the change.
- the value reported by VMD - MSAA(16) - doesn't seem to depend on the
__GL_FSAA_MODE.

I also tested some of the 304.xx drivers on a newer generation nVidia
card (GT 640). The same MSAA(16) is reported by VMD, but because the
card is faster, the default speed is several tens of fps. Setting
__GL_FSAA_MODE=5 brings the speed to 400+ fps, while setting it to 12
brings it to ~200fps. So it seems to me that the problem exists also
on the newer cards but, because they are generally faster, it's more
difficult to observe it.

Now some questions: what could have changed in the drivers to make VMD
run slower on newer drivers ? Anything that can be done in VMD to make
it play nicer with the newer drivers ? Are there going to be any
noticeable AA artifacts in VMD if setting this variable to something
like 5 ? Does the answer to the previous question change whether GLSL
is enabled ? What does VMD do differently from other OpenGL programs,
like pymol, to make it sensitive to this change in driver ?

Cheers,
Bogdan