This seams like a no brainer to me.  The Xserver!  It would be a good
place to intercept vblanks, if it dosen't allready, and connects to
clients and card any way.  A little more beef for the "?2d driver? or X
server" to keep track of pending swaps for all dri clients, but if it were
GLX it would be doing that any way.

--- Ian Romanick <[EMAIL PROTECTED]> wrote:
> I'd like to discuss / revisit what it will take to implement
> asynchronous swapping.  By this I mean glXSwapBuffers returns
> immediately even if the driver needs to wait several frames (due to the
> swap interval or whatever) to actually do the swap.
> 
> I've thought of a couple ways to do this, but they all have issues.
> Perhaps other people can think of some alternatives?
> 
> - Implement the wait in the kernel.  The driver calls a new swap ioctl
> that takes the 'target' frame as a parameter.  The kernel mainains a
> queue of pending swaps that is checked each time a vblank interrupt is
> handled.  A mechanism for the driver to determine if the swap had
> actually happened would also be need.
> 
> I don't like this method because it would make it more difficult to add
> support for gang-swapping (i.e., GLX_SGIX_swap_group).
> 
> - Keep the queue of pending swaps in the user-space driver.  Add an
> ioctl for the kernel to deliver a signal to the app / driver when a
> specified vblank has occured.
> 
> I don't like this method for two reasons.  First, it requires the use of
> a signal from a library without the knowledge of the application.
> That's pretty evil.  Second, I don't think the driver could dispatch the
> swap (or do much else useful) from the signal handler.
> 
> - Keep the queue of pending swaps in the user-space driver.  Spawn a
> second thread that *only* performs swaps.  It blocks on a futuex or
> similar the gets uped each time a vblank occurs.  When the required
> vblank has happend, it calls the existing ioctl to perform the swap.
> 
> I think I like this option the best, but using an extra thread just
> feels wrong.  At the same time, it would be easy to encapsulate all of
> the knowledge about when to perform a swap in that extra thread.
> 
> All of these options would require extra logic in the driver to prevent
> rendering operations (but certain state-changes should be okay?) while a
> swap was pending.  Some of this could be mitigated by implementing
> triple buffering for windows & pbuffers, but that would require
> per-window backbuffers and a bunch of other stuff.  Actually, given
> enough memory, each time a swap happened the driver could just allocate
> a new backbuffer to render to.  When the swap happened the old
> backbuffer would be freed.  Nevermind that tangent for now... ;)
> 


__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you’re looking for faster
http://search.yahoo.com


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
--
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to