Initial DRI3000 protocol specs available

Aaron Plattner aplattner at nvidia.com
Wed Feb 20 19:13:50 PST 2013


On 02/19/13 19:45, Keith Packard wrote:
> * PGP Signed by an unknown key
>
>
> Here's the spec for DRI3:
>
> 			  The DRI3 Extension
> 			      Version 1.0
> 			      2013-2-19
>
> 			    Keith Packard
> 			  keithp at keithp.com
> 			  Intel Corporation
>
> 1. Introduction
>
> The DRI3 extension provides mechanisms to translate between direct
> rendered buffers and X pixmaps. When combined with the Swap extension,
> a complete direct rendering solution for OpenGL is provided.
>
> The direct rendered buffers are passed across the protocol via
> standard POSIX file descriptor passing mechanisms. On Linux, these
> buffers are DMA-BUF objects.
>
> 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 DRI3 extension uses the RandR extension Provider to select among
> multiple GPUs on a single screen.
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 4. Errors
>
> No errors are defined by the DRI3 extension.
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 5. Events
>
> No events are defined by the DRI3 extension.
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 6. Protocol Types
>
> DRI3DRIVER { DRI3DriverDRI
> 	     DRI3DriverVDPAU }
>
> 	These values describe the type of driver the client will want
> 	to load.  The server sends back the name of the driver to use
> 	for the screen in question.
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 7. Extension Initialization
>
> The name of this extension is "DRI3" (third time is the charm?).
>
> ┌───
>      DRI3QueryVersion
> 	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
>
> ┌───
>      DRI3Open
> 	drawable: DRAWABLE
> 	driverType: DRI3DRIVER
> 	provider: PROVIDER
>> 	driver: STRING
> 	device: FD
> └───
> 	Errors: Drawable, Value, Match
>
> 	This requests that the X server open the direct rendering
> 	device associated with drawable, driverType and RandR
> 	provider. The provider must support SourceOutput or SourceOffload.
>
> 	The direct rendering library used to implement the specified
> 	driverType is returned in the driver value. The file
> 	descriptor for the device is returned in FD.
>
> ┌───
>      DRI3PixmapFromBuffer
> 	pixmap: PIXMAP
> 	drawable: DRAWABLE
> 	width, height, stride: CARD16

Why is there a stride here if all it is is an indirect way of 
calculating a total size?  If the total size is what the server cares 
about, then it seems like the client should just send that.

Not all tiled formats fit nicely into a height * "stride" = total 
equation with "stride" being an integer.

> 	depth, bpp: CARD8
> 	buffer: FD
> └───
> 	Errors: Alloc, Drawable, IDChoice, Value, Match
>
> 	Creates a pixmap for the direct rendering object associated
> 	with buffer. width, height and stride specify the geometry (in
> 	pixels) of the underlying buffer. The pixels within the buffer
> 	may not be arranged in a simple linear fashion, but the total
> 	byte size of the buffer must be height * stride * bpp /
> 	8. Precisely how any additional information about the buffer
> 	is shared is outside the scope of this extension.
>
> 	If buffer cannot be used with the screen associated with
> 	drawable, a Match error is returned.
>
> 	If depth or bpp are not supported by the screen, a Value error
> 	is returned.
>
> ┌───
>      DRI3BufferFromPixmap
> 	pixmap: PIXMAP
>> 	depth: CARD8
> 	width, height, stride: CARD16
> 	depth, bpp: CARD8
> 	buffer: FD
> └───
> 	Errors: Pixmap, Match
>
> 	Pass back a direct rendering object associated with
> 	pixmap. Future changes to pixmap will be visible in that
> 	direct rendered object.
>
> 	The pixel format and geometry of the buffer are returned along
> 	with a file descriptor referencing the underlying direct
> 	rendering object.
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 9. Extension Events
>
> The DRI3 extension defines no events
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 10. Extension Versioning
>
> The DRI3 extension is adapted from 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 DRI3, but a direct rendering OpenGL
> application will presumably use both, and target
>
> 11.2 Swap
>
> The Swap extension provides a way to synchronize the display of pixmap
> contents to the screen. When used in conjunction with DRI3, they
> provide a complete direct rendering solution for OpenGL or other APIs.
>
> 11.3 DRI2
>
> DRI3 provides similar functionality to the DRI2Connect and
> DRI2GetBuffersWithFormat requests, however DRI3 uses file descriptors
> to refer to the direct rendering device and buffers.
>
> Swap and DRI3 are designed in conjunction to replace DRI2
>
> 11.2 XvMC / Xv
>
> It might be nice to be able to reference YUV formatted direct rendered
> objects from the X server.
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> Appendix A. Protocol Encoding
>
> Syntactic Conventions
>
> This document uses the same syntactic conventions as the core X
> protocol encoding document.
>
>
> A.1 Common Types
>
> ┌───
>      DRI3DRIVER
> 	0x0	DRI3DriverDRI
> 	0x1	DRI3DriverVDPAU
> └───
>
> 	Note that these match the DRI2 values.
>
> A.2 Protocol Requests
>
> ┌───
>      DRI3QueryVersion
> 	1	CARD8			major opcode
> 	1	0			DRI3 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	
> └───
>
>
> ┌───
>      DRI3Open
> 	1	CARD8			major opcode
> 	1	1			DRI3 opcode
> 	2	4			length
> 	4	DRAWABLE		drawable
> 	4	PROVIDER		provider
> 	4	CARD32			driver type
>> 	1	1			Reply
>          1	CARD8			n
> 	2	CARD16			sequence number
> 	4	(n + p) / 4		reply length
> 	n	CARD8			driver name
> 	p				unused, p=pad(n)
>
> 	0	FD			device
> └───
>
> ┌───
>      DRI3PixmapFromBuffer
> 	1	CARD8			major opcode
> 	1	2			DRI3 opcode
> 	2	5			length
> 	4	Pixmap			pixmap
> 	4	Drawable		drawable
> 	2	CARD16			width
> 	2	CARD16			height
> 	2	CARD16			stride
> 	1	CARD8			depth
> 	1	CARD8			bpp
>
> 	0	FD			buffer
> └───
>
> ┌───
>      DRI3BufferFromPixmap
> 	1	CARD8			major opcode
> 	1	3			DRI3 opcode
> 	2				length
> 	4	Pixmap			pixmap
>> 	1	1			Reply
>          1				unused
> 	2	CARD16			sequence number
> 	4	0			reply length
> 	2	CARD16			width
> 	2	CARD16			height
> 	2	CARD16			stride
> 	1	CARD8			depth
> 	1	CARD8			bpp
> 	16				unused
>
> 	0	FD			buffer
> └───
>
>
> A.3 Protocol Events
>
> The DRI3 extension defines no events
>
> A.4 Protocol Errors
>
> The Swap extension defines no errors.
>
> 			     ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> * Unknown Key
> * 0xD693AF2A
>



More information about the xorg-devel mailing list