Initial DRI3000 protocol specs available

Chris Wilson chris at chris-wilson.co.uk
Wed Feb 20 02:46:37 PST 2013


On Tue, Feb 19, 2013 at 07:46:22PM -0800, Keith Packard wrote:
> ┌───
>     SwapRegion
> 	destination: DRAWABLE
> 	region: REGION
> 	src-off-x,src-off-y: INT16
> 	source: PIXMAP
> 	swap-interval: CARD32
> 	target_msc_hi: CARD32
> 	target_msc_lo: CARD32
> 	divisor_hi: CARD32
> 	divisor_lo: CARD32
> 	remainder_hi: CARD32
> 	remainder_lo: CARD32
>> 	swap_hi: CARD32
> 	swap_lo: CARD32
> 	suggested-x-off,suggested-y-off: INT16
> 	suggested-width,suggested-height: CARD16
> 	idle: LISTofSWAPIDLE
> └───

What I don't see here is how the client instructs the server to
handle a missed swap. For example, with the typical use of
  swap-interval > 0, divisor = 0, target <= current
we can choose to either emit this SwapRegion synchronously, or
asynchronously (to risk tearing but allow the client catch up to its
target framerate). Actually, there isn't a mention of whether this
should be synchronized to the display at all (and how to handle
synchronisation across multiple scanouts).

What happens for a delayed error?

> 	In the reply, swap_hi/swap_lo form a 64-bit swap count value
> 	when the swap will actually occur (e.g.  the last queued swap
> 	count + (pending swap count * swap interval)).

I'm not sure exactly what SBC is meant to be. Is it a simple seqno of
the SwapRegion in this Drawable's swap queue (why then does
swap_interval matter), or is it meant to correlate with the vblank
counter (in which case it is merely a predicted value)?
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the xorg-devel mailing list