From: Dorosky, Christopher G (christopher.g.dorosky++at++lmco.com)
Date: 04/09/2003 13:25:54
Here is the simple answer.
Performer has it's clock, which it uses for frame timing.
NVIDIA has it's clock, which it uses for vertical refresh.
These clocks are NOT connected. You get drift.
You are being synced by both of these clocks, when you run lock, and the
__GL_SYNC_TO_VBLANK.
Since the clocks are out of phase, and drifting, you will get hiccups.
You need to eliminate the multiple syncs to have any hope of reliable 60hz
performance.
-----Original Message-----
From: Hartwig Distler [mailto:vrtainment++at++web.de]
Sent: Wednesday, April 09, 2003 2:17 PM
To: info-performer++at++sgi.com
Subject: [info-performer] Phase Locking
Hi,
I had send this question some time ago, but did not receive feedback so far.
Here is some more detail now ...
I am running a Ti4800-card, Linux-kernel 2.4.20 and latest nVidia-drivers
for linux ... page flipping is enabled as well as __GL_SYNC_TO_VBLANK is
enabled ... modeline is adjusted such that refresh rate is 60 HZ. The
application I am working on is very time critical (60Hz, but actually does
not spend too much time drawing less then 6 ms per frame). Since we are
rotating the observer inside a textured cylinder, every kind of jerkyness
can be detected easily ...
Given the above configuration of the graphics environment, I ran several
different types of phase locking and experienced results which I cannot
explain at all ...
When adjusting pfPhase to FREE_RUN, and target frame rate to 60 HZ, I
observer a constant system load in the statistics at a very high level ....
changing the target frame rate to 30 or 20 Hz result in a significant
reduction in load (????) -> actual frame rate is still 60 Hz ... As
mentioned before we should have enouigh resources in our application to keep
a constant frame rate of 60 Hz ... however, under this conditions the
smallest changes in load result in a wobble ...
Now changing the phase to either LOCK, LIMIT OR FLOAT I observer the
following ... under all conditions I have a significant reduction in load as
compared to the free run condition. However, we no longer have a constant
load. The load over some period increases until it reaches a critical level,
and then completely drops (which is acommpanied by a jerk) ... then the load
increases again, etc ... Depending on the phase selected, the increase in
load is reflected by an increase in drawing time or application time ,
though the scene does not change at all.
Another interesting oberservation is that when I am switching refresh and
frame rate to 78 HZ, I oberserve the same behaviour of increasing load and
rapid drop, however, the increase is much much slower than at 60 Hz ...
Overall the application runs much smoother at 78 Hz than at 60 Hz, which at
least to me is really strange ...
Since the application is featuring lots of gl-code in draw callbacks I
thought that this might be the reason. To check, I first of all ran the same
tests in perfly (observing the same behaviour) and using a min. application,
which does clear the channel and draw an empty scene. Even there I observe
the same increase and drop stuff ...
What am I doing wrong? Is there a way to use SYNC_TO_VBLANK and PFPHASE_LOCK
and receive a constant load ? SYNC_TO_VBLANK seems to be mandatory since
without I get tearing.
regards,
Hartwig
Hartwig Distler
VRtainment
http://www.vrtainment.de
____________________________________________________________________________
__
UNICEF bittet um Spenden fur die Kinder im Irak! Hier online an
UNICEF spenden: https://spenden.web.de/unicef/special/?mc=021101
-----------------------------------------------------------------------
List Archives, Info, FAQ: http://www.sgi.com/software/performer/
Open Development Project: http://oss.sgi.com/projects/performer/
Submissions: info-performer++at++sgi.com
Admin. requests: info-performer-request++at++sgi.com
-----------------------------------------------------------------------
This archive was generated by hypermail 2b29 : Wed Apr 09 2003 - 13:32:27 PDT