From: Mark V. <MVo...@nv...> - 2002-06-26 21:00:09
|
On Wed, 26 Jun 2002, H}kan Hjort wrote: > Wed Jun 26 2002, Mark Vojkovich wrote: > > On Wed, 26 Jun 2002, H}kan Hjort wrote: > > > When we have you attention and XV_DOUBLE_BUFFER is on the subject. > > > > > > We have some weird issues with it in Ogle. If it's enabled then you > > > get a really bad picture that jumps backwards/forwards in time and > > > tears. (I think you get the front/back buffers messed up somehow). > > > Switching it off (setting it to 0) make it all go away. This seems to > > > happen on really fast machines 1.7GHz with the latest NVIDIA drivers. > > > It not just a fluke either, have heard about this from at least four > > > different sources. > > > > This will only happen if you send frames quicker than the retrace. > > When the driver has already collected as many flips as the hardware can > > queue, it has two choices: spin until the next buffer is free, or > > forget about syncing to the retrace and overwrite one of the pending > > buffers. XFree86 drivers have mostly settled on the second behavior > > to avoid performance problems due to spinning. > > We only send a new frame every 1/24, 1/25 or 1/29 of a second i.e. > some where between every 35-42 milliseconds. This was with a refresh > rate of 76 / 85 Hz. So there should never have been more than the > current overlay and one image in the queue. These where GeForce4 cards. > (and yes we wait for the shm completion event before modifying the > xvimage again) You can never guarantee that. The X-server might not have even been scheduled when you made those request. Even at 1/24 the X-server might wake up to find that it has 3 frames in its queue. Linux and it's coarse scheduling are not well suited for multimedia. The server is definitely in the position where it has more frames to process than the hardware can queue. That's the only time this kind of thing can happen. I can get rid of the backwards moving artifact with a more careful choice of which buffer I overwrite, but you'll still get a shear when this happens unless I spin until the next free buffer. Mark. |