|
From: Antonino D. <ad...@po...> - 2003-01-11 12:08:20
|
On Sat, 2003-01-11 at 19:21, Xanthakis Stelios wrote:
>
> Is there WAITRETRACE available in fb?
>
> It seems that there used to be because svgalib sais:
>
> static void fbdev_waitretrace(void)
> {
> /* This is from SDL */
> #ifdef FBIOWAITRETRACE
> ioctl(console_fd, FBIOWAITRETRACE, 0);
> #endif
> }
>
There is an FBIO_GETVBLANK that gives information on the current status
of the display (such as if it's currently in hsync/vsync, the current
vsync count since boot etc). However, only matroxfb implements this
ioctl.
There is an unofficial patch (also for matroxfb), FBIO_VSYNCIRQ, which
waits for the retrace by sleeping on a vsync interrupt.
> But I can't find such a value in the headers.
> Seems like WAITRETRACE call is implemented in svga by:
>
> while (!(inb(0x3da) & 8));
> while (inb(0x3da) & 8);
>
>
> *I know very little on how video hardware works*
>
It's a standard polling code for waiting for the retrace interval on VGA
hardware. Most graphics hardware will still work. However, it eats CPU
cycles. The sleeping on an interrupt way is better.
> The goal is to attempt some smooth scrolling.
> Back in the MS-DOS days there used to be a program
> called smooth editor which was amazing (so amazing that
> I used to do Page up/Down all the time w/o doing
> any work). I was thinking if I could have some similar
> smooth scrolling in my linux fb console.
>
You can accomplish the same effect using the above code, provide the
hardware mode supports it, and provided you are not doing too many tasks
at one time, else you'll experience frame skips, sound stutters etc.
> I recall that smooth editor explained that smooth scrolling
> was achieved by "synchronizing with the video refresh"
> (horizontal?, vertical? I don't remember). That's retrace yes?
Yes, it's vertical.
>
> So, can we by some way do waitretrace at each \n?
> Should this be userland or kernelland?
>
Depends. The polling code can be done in userland. However, newer
hardware has better ways of waiting for the retrace. In these cases, it
has to be done within the driver. See how the matroxfb patch does that.
It's in the DirectFB package (www.directfb.org). Also, you may want to
check the DRI mailing list archives (dri.sourceforge.net). They have
discussions on that.
Tony
|