On Fri, 4 Apr 2003, Billy Biggs wrote: > David N. ([EMAIL PROTECTED]): > > > The other part of my problem is that I'm trying to grab complete > > images off of the screen using XShmGetImage(). Despite synchronizing > > on with vertical refresh like you suggested, I'm finding that the > > buffers that I capture with XShmGetImage() have tearing in them - i.e. > > it looks like the next frame is getting drawn into X's buffer before > > XShmGetImage is done retrieving them. > > > > In these cases I notice that XShmGetImage is taking longer than 13.3ms > > to complete. Do you have any ideas on a quicker way to get a copy of > > X's output buffer? > > I am not an expert in this area, but I can tell you that reading from > video memory is extremely slow for most, if not all, consumer video > cards. The path is not optimized and can take well longer than a frame > to grab a copy of the framebuffer. > > Rumor has it that some cards, like newer nVidia cards, can use their > DMA engine to transfer from video memory back into system memory, which > would be useful for many applications which want to, say, render 3D > graphics in realtime for some other purpose than display on the screen > (like hardware accellerated raytracing). However, I do not believe that > this is currently implemented in the nVidia binary drivers for > XShmGetImage, or anywhere else by anyone else for that matter. > > I'd love to be proved wrong. >
NVIDIA binary drivers use DMA to copy from the framebuffer for XShmGetImage. There's no benchmark for XShmGetImage in x11perf but I get over 100 MB/sec with XGetImage if there's nothing else going on. This has been supported on all cards the NVIDIA binary drivers support for at least a year. Mark. _______________________________________________ XFree86 mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/xfree86