Initial DRI3000 protocol specs available

Keith Packard keithp at keithp.com
Tue Feb 19 19:46:22 PST 2013


And here's the Swap extension

			  The Swap Extension
			      Version 1.0
			      2013-2-14
      
			    Keith Packard
			  keithp at keithp.com
			  Intel Corporation

1. Introduction

The Swap extension provides GL SwapBuffers semantics to move pixels
From a pixmap to a drawable. This can be used by OpenGL
implementations or directly by regular applications.

1.1. Acknowledgments

Eric Anholt <eric at anholt.net>
Dave Airlie <airlied at redhat.com>
Kristian Høgsberg <krh at bitplanet.net>

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄ 

2. Data Types

The server side region support specified in the Xfixes extension
version 2 is used in the SwapRegion request.

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄ 

4. Errors

No errors are defined by the Swap extension.

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄ 

5. Events

The Swap extension provides a new event, SwapComplete, to signal when
a swap operation has finished.

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄ 


6. Protocol Types

SWAPSELECTMASK { SwapCompleteMask }

	Used with SwapSelectInput to specify which events a client is
	to receive.

SWAPIDLE {
	pixmap: PIXMAP
	valid: BOOL
	swap-hi: CARD32
	swap-lo: CARD32
}

	This structure contains information about a pixmap which had
	been used in a SwapRegion request and which the server is now
	finished with. If valid is TRUE, swap-hi/swap-lo form a 64-bit
	swap count value from the SwapRegion request which matches the
	data that the pixmap currently contains. If valid is FALSE,
	then the contents of the pixmap are undefined.

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄ 

7. Extension Initialization

The name of this extension is "Swap".

┌───
    SwapQueryVersion
	client-major-version:	CARD32
	client-minor-version:	CARD32
      ▶
	major-version:		CARD32
	minor-version:		CARD32
└───

	The client sends the highest supported version to the server
	and the server sends the highest version it supports, but no
	higher than the requested version. Major versions changes can
	introduce incompatibilities in existing functionality, minor
	version changes introduce only backward compatible changes.
	It is the clients responsibility to ensure that the server
	supports a version which is compatible with its expectations.

	Backwards compatible changes included addition of new
	requests.


			     ❄ ❄ ❄  ❄  ❄ ❄ ❄ 

8. Extension Requests

┌───
    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
└───
	Errors: Pixmap, Drawable, Region, Value

	Schedule a swap of the specified region from the source pixmap
	to the destination drawable.

	region specifies the region within the destination to be
	swapped from the source.

	src-off-x and src-off-y specify the offset to be added to
	region to align it with the source pixmap.

	swap-interval specifies the minimum number of frames since the
	last SwapRegion request.

	target_msc_hi/target_msc_lo form a 64-bit value marking the
	target media stamp count for the swap request. When non-zero,
	these mark the desired time where the data should be
	presented.

	divisor_hi/divisor_lo form a 64-bit value marking the desired
	media stamp count interval between swaps.

	remainder_hi/remainder_lo form a 64-bite value marking the
	desired offset within the divisor_hi/divisor_lo swap interval.

	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)).

	suggested-width and suggested-height offer a hint as to the
	best pixmap size to use for full-sized swaps in the
	future. suggested-x-off and suggested-y-off provide a hint as
	to where the window contents should be placed within that
	allocation for future swaps.

	idle provides a list of pixmaps which were passed in previous
	SwapRegion requests by this client targeting the same destination.

┌───
    SwapSelectInput
	drawable: DRAWABLE
	mask: SETofSWAPSELECTMASK
└───
	Errors: Drawable

	Selects which Swap events are to be delivered to the
	requesting client.

┌───
    SwapGetMSC
	drawable: DRAWABLE
      ▶
	ust, msc, sbc: CARD64
└───
	Errors: Window

	Get the current media stamp counter (MSC) and swap buffer count (SBC)
	along with the unadjusted system time (UST) when the MSC was last
	incremented.

┌───
    SwapWaitMSC
	drawable: DRAWABLE
	target_msc: two CARD32s
	divisor: two CARD32s
	remainder: two CARD32s
      ▶
	ust, msc, sbc: CARD64
└───
	Errors: Window

	Blocks the client until either the frame count reaches target_msc or,
	if the frame count is already greater than target_msc when the request
	is received, until the frame count % divisor = remainder.  If divisor
	is 0, the client will be unblocked if the frame count is greater than
	or equal to the target_msc.

	Returns the current media stamp counter (MSC) and swap buffer count
	(SBC) along with the unadjusted system time (UST) when the MSC was last
	incremented.

┌───
    SwapWaitSBC
	drawable: DRAWABLE
	target_sbc: two CARD32s
      ▶
	ust, msc, sbc: CARD64
└───
	Errors: Window

	Blocks the client until the swap buffer count reaches target_sbc.  If
	the swap buffer count is already greater than or equal to target_sbc
	when the request is recieved, this request will return immediately.

	If target_sbc is 0, this request will block the client until all
	previous DRI2SwapBuffers requests have completed.

	Returns the current media stamp counter (MSC) and swap buffer count
	(SBC) along with the unadjusted system time (UST) when the MSC was last
	incremented.

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄ 

9. Extension Events

┌───
    SwapComplete
      ▶

	drawable: CARD32
	ust: CARD64
	msc: CARD64
	sbc: CARD64
└───

	This event is delivered when a SwapRegion operation
	completes. Note that this may be later than when the
	SwapRegion request is executed as the operation itself may be
	delayed until the correct frame count has been reached.


			     ❄ ❄ ❄  ❄  ❄ ❄ ❄

10. Extension Versioning

The Swap extension is adapted from pieces of the DRI2 extension

	1.0: First published version
			     ❄ ❄ ❄  ❄  ❄ ❄ ❄


11. Relationship with other extensions

As an extension designed to support other extensions, there is
naturally some interactions with other extensions.


11.1 GLX

GLX has no direct relation with Swap, but a direct rendering OpenGL
application may use GLX to discover 

11.2 DRI3

DRI3 provides a mechanism for connecting direct rendering
applications with X pixmaps. Those pixmaps can then be used with Swap
to provide a complete direct rendering solution for OpenGL or other APIs.

11.3 DRI2

Swap provides similar functionality to the DRI2CopyRegion and
DRI2SwapBuffers requests, but uses regular X resources for both source
and destination pixel buffers instead of defining new resources.

Swap and DRI3 are designed in conjunction to replace DRI2

11.2 XvMC / Xv

We might add a DRI2_BUFFER_YUV to do vsynced colorspace conversion
blits.

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄

Appendix A. Protocol Encoding

Syntactic Conventions

This document uses the same syntactic conventions as the core X
protocol encoding document.


A.1 Common Types

┌───
    SWAPIDLE
	4	PIXMAP	pixmap
	1	BOOL	valid
	3		unused
	4	CARD32	swap-hi
	4	CARD32	swap-lo
└───

A.2 Protocol Requests

┌───
    SwapQueryVersion
	1	CARD8			major opcode
	1	0			Swap opcode
	2	3			length
	4	CARD32			major version
	4	CARD32			minor version
      ▶
	1	1			Reply
        1				unused
	2	CARD16			sequence number
	4	0			reply length
	4	CARD32			major version
        4	CARD32			minor version
	16				unused	
└───


┌───
    SwapRegion
	1	CARD8			major opcode
	1	1			Swap opcode
	2	11			length
	4	DRAWABLE		destination
	4	REGION			region
	2	INT16			src-off-x
	2	INT16			src-off-y
	4	CARD32			swap-interval
	4	CARD32			target_msc_hi
	4	CARD32			target_msc_lo
	4	CARD32			divisor_hi
	4	CARD32			divisor_lo
	4	CARD32			remainder_hi
	4	CARD32			remainder_lo
      ▶	
	1	1			Reply
        1				unused
	2	CARD16			sequence number
	4	4n			reply length
	4	CARD32			swap-hi
	4	CARD32			swap-lo
	2	INT16			suggested-x-off
	2	INT16			suggested-y-off
	2	CARD16			suggested-width
	2	CARD16			suggested-height
	8				unused	
	16n	LISTofSWAPIDLE		idle
└───

┌───
    SwapGetMSC
	1	CARD8			major opcode
	1	9			Swap opcode
	2	8			length
	4	DRAWABLE		drawable
      ▶
	1	1			Reply
        1				unused
	2	CARD16			sequence number
	4	0			reply length
	4	CARD32			ust_hi
	4	CARD32			ust_lo
	4	CARD32			msc_hi
	4	CARD32			msc_lo
	4	CARD32			sbc_hi
	4	CARD32			sbc_lo
└───

┌───
    SwapWaitMSC
	1	CARD8			major opcode
	1	10			Swap opcode
	2	8			length
	4	DRAWABLE		drawable
	4	CARD32			target_msc_hi
	4	CARD32			target_msc_lo
	4	CARD32			divisor_hi
	4	CARD32			divisor_lo
	4	CARD32			remainder_hi
	4	CARD32			remainder_lo
      ▶
	1	1			Reply
        1				unused
	2	CARD16			sequence number
	4	0			reply length
	4	CARD32			ust_hi
	4	CARD32			ust_lo
	4	CARD32			msc_hi
	4	CARD32			msc_lo
	4	CARD32			sbc_hi
	4	CARD32			sbc_lo
└───

┌───
    SwapWaitSBC
	1	CARD8			major opcode
	1	11			Swap opcode
	2	8			length
	4	DRAWABLE		drawable
 	4	CARD32			swap_hi
	4	CARD32			swap_lo
     ▶
	1	1			Reply
        1				unused
	2	CARD16			sequence number
	4	0			reply length
	4	CARD32			ust_hi
	4	CARD32			ust_lo
	4	CARD32			msc_hi
	4	CARD32			msc_lo
	4	CARD32			sbc_hi
	4	CARD32			sbc_lo
└───


A.3 Protocol Events

The Swap extension specifies the SwapComplete event.

┌───
    SwapComplete
	1	CARD8			type
	1	CARD8			extension
	2	CARD16			sequenceNumber
	4	DRAWABLE		drawable
	4	CARD32			ust_hi
	4	CARD32			ust_lo
	4	CARD32			msc_hi
	4	CARD32			msc_lo
	4	CARD32			sbc_hi
	4	CARD32			sbc_lo
└───

A.4 Protocol Errors

The Swap extension specifies no errors.

			     ❄ ❄ ❄  ❄  ❄ ❄ ❄

-- 
keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20130219/f6c1581c/attachment.pgp>


More information about the xorg-devel mailing list