diff options
| author | Andrew Gallant <jamslam@gmail.com> | 2013-08-11 20:43:26 -0400 | 
|---|---|---|
| committer | Přemysl Janouch <p@janouch.name> | 2018-09-08 16:49:17 +0200 | 
| commit | 0685fb57e14104ee4ad9f70ec94f787a9a22c028 (patch) | |
| tree | c52429c82379c154c95dbfafcfc52460ec9168c0 /nexgb/dri2 | |
| parent | 4b20ffaf4f4cc756832a6d064d5dfe182f16b0e9 (diff) | |
| download | haven-0685fb57e14104ee4ad9f70ec94f787a9a22c028.tar.gz haven-0685fb57e14104ee4ad9f70ec94f787a9a22c028.tar.xz haven-0685fb57e14104ee4ad9f70ec94f787a9a22c028.zip | |
Update to latest xproto XML.
Diffstat (limited to 'nexgb/dri2')
| -rw-r--r-- | nexgb/dri2/dri2.go | 894 | 
1 files changed, 497 insertions, 397 deletions
| diff --git a/nexgb/dri2/dri2.go b/nexgb/dri2/dri2.go index f047e54..3c63af5 100644 --- a/nexgb/dri2/dri2.go +++ b/nexgb/dri2/dri2.go @@ -2,7 +2,7 @@  package dri2  /* -	This file was generated by dri2.xml on Jun 5 2012 12:11:59am EDT. +	This file was generated by dri2.xml on Aug 11 2013 8:39:43pm EDT.  	This file is automatically generated. Edit at your peril!  */ @@ -40,130 +40,6 @@ func init() {  	xgb.NewExtErrorFuncs["DRI2"] = make(map[int]xgb.NewErrorFun)  } -// Skipping definition for base type 'Card16' - -// Skipping definition for base type 'Char' - -// Skipping definition for base type 'Card32' - -// Skipping definition for base type 'Double' - -// Skipping definition for base type 'Bool' - -// Skipping definition for base type 'Float' - -// Skipping definition for base type 'Card8' - -// Skipping definition for base type 'Int16' - -// Skipping definition for base type 'Int32' - -// Skipping definition for base type 'Void' - -// Skipping definition for base type 'Byte' - -// Skipping definition for base type 'Int8' - -const ( -	AttachmentBufferFrontLeft      = 0 -	AttachmentBufferBackLeft       = 1 -	AttachmentBufferFrontRight     = 2 -	AttachmentBufferBackRight      = 3 -	AttachmentBufferDepth          = 4 -	AttachmentBufferStencil        = 5 -	AttachmentBufferAccum          = 6 -	AttachmentBufferFakeFrontLeft  = 7 -	AttachmentBufferFakeFrontRight = 8 -	AttachmentBufferDepthStencil   = 9 -	AttachmentBufferHiz            = 10 -) - -const ( -	DriverTypeDri   = 0 -	DriverTypeVdpau = 1 -) - -const ( -	EventTypeExchangeComplete = 1 -	EventTypeBlitComplete     = 2 -	EventTypeFlipComplete     = 3 -) - -type DRI2Buffer struct { -	Attachment uint32 -	Name       uint32 -	Pitch      uint32 -	Cpp        uint32 -	Flags      uint32 -} - -// DRI2BufferRead reads a byte slice into a DRI2Buffer value. -func DRI2BufferRead(buf []byte, v *DRI2Buffer) int { -	b := 0 - -	v.Attachment = xgb.Get32(buf[b:]) -	b += 4 - -	v.Name = xgb.Get32(buf[b:]) -	b += 4 - -	v.Pitch = xgb.Get32(buf[b:]) -	b += 4 - -	v.Cpp = xgb.Get32(buf[b:]) -	b += 4 - -	v.Flags = xgb.Get32(buf[b:]) -	b += 4 - -	return b -} - -// DRI2BufferReadList reads a byte slice into a list of DRI2Buffer values. -func DRI2BufferReadList(buf []byte, dest []DRI2Buffer) int { -	b := 0 -	for i := 0; i < len(dest); i++ { -		dest[i] = DRI2Buffer{} -		b += DRI2BufferRead(buf[b:], &dest[i]) -	} -	return xgb.Pad(b) -} - -// Bytes writes a DRI2Buffer value to a byte slice. -func (v DRI2Buffer) Bytes() []byte { -	buf := make([]byte, 20) -	b := 0 - -	xgb.Put32(buf[b:], v.Attachment) -	b += 4 - -	xgb.Put32(buf[b:], v.Name) -	b += 4 - -	xgb.Put32(buf[b:], v.Pitch) -	b += 4 - -	xgb.Put32(buf[b:], v.Cpp) -	b += 4 - -	xgb.Put32(buf[b:], v.Flags) -	b += 4 - -	return buf -} - -// DRI2BufferListBytes writes a list of DRI2Buffer values to a byte slice. -func DRI2BufferListBytes(buf []byte, list []DRI2Buffer) int { -	b := 0 -	var structBytes []byte -	for _, item := range list { -		structBytes = item.Bytes() -		copy(buf[b:], structBytes) -		b += xgb.Pad(len(structBytes)) -	} -	return b -} -  type AttachFormat struct {  	Attachment uint32  	Format     uint32 @@ -218,6 +94,20 @@ func AttachFormatListBytes(buf []byte, list []AttachFormat) int {  	return b  } +const ( +	AttachmentBufferFrontLeft      = 0 +	AttachmentBufferBackLeft       = 1 +	AttachmentBufferFrontRight     = 2 +	AttachmentBufferBackRight      = 3 +	AttachmentBufferDepth          = 4 +	AttachmentBufferStencil        = 5 +	AttachmentBufferAccum          = 6 +	AttachmentBufferFakeFrontLeft  = 7 +	AttachmentBufferFakeFrontRight = 8 +	AttachmentBufferDepthStencil   = 9 +	AttachmentBufferHiz            = 10 +) +  // BufferSwapComplete is the event number for a BufferSwapCompleteEvent.  const BufferSwapComplete = 0 @@ -334,6 +224,92 @@ func init() {  	xgb.NewExtEventFuncs["DRI2"][0] = BufferSwapCompleteEventNew  } +type DRI2Buffer struct { +	Attachment uint32 +	Name       uint32 +	Pitch      uint32 +	Cpp        uint32 +	Flags      uint32 +} + +// DRI2BufferRead reads a byte slice into a DRI2Buffer value. +func DRI2BufferRead(buf []byte, v *DRI2Buffer) int { +	b := 0 + +	v.Attachment = xgb.Get32(buf[b:]) +	b += 4 + +	v.Name = xgb.Get32(buf[b:]) +	b += 4 + +	v.Pitch = xgb.Get32(buf[b:]) +	b += 4 + +	v.Cpp = xgb.Get32(buf[b:]) +	b += 4 + +	v.Flags = xgb.Get32(buf[b:]) +	b += 4 + +	return b +} + +// DRI2BufferReadList reads a byte slice into a list of DRI2Buffer values. +func DRI2BufferReadList(buf []byte, dest []DRI2Buffer) int { +	b := 0 +	for i := 0; i < len(dest); i++ { +		dest[i] = DRI2Buffer{} +		b += DRI2BufferRead(buf[b:], &dest[i]) +	} +	return xgb.Pad(b) +} + +// Bytes writes a DRI2Buffer value to a byte slice. +func (v DRI2Buffer) Bytes() []byte { +	buf := make([]byte, 20) +	b := 0 + +	xgb.Put32(buf[b:], v.Attachment) +	b += 4 + +	xgb.Put32(buf[b:], v.Name) +	b += 4 + +	xgb.Put32(buf[b:], v.Pitch) +	b += 4 + +	xgb.Put32(buf[b:], v.Cpp) +	b += 4 + +	xgb.Put32(buf[b:], v.Flags) +	b += 4 + +	return buf +} + +// DRI2BufferListBytes writes a list of DRI2Buffer values to a byte slice. +func DRI2BufferListBytes(buf []byte, list []DRI2Buffer) int { +	b := 0 +	var structBytes []byte +	for _, item := range list { +		structBytes = item.Bytes() +		copy(buf[b:], structBytes) +		b += xgb.Pad(len(structBytes)) +	} +	return b +} + +const ( +	DriverTypeDri   = 0 +	DriverTypeVdpau = 1 +) + +const ( +	EventTypeExchangeComplete = 1 +	EventTypeBlitComplete     = 2 +	EventTypeFlipComplete     = 3 +) +  // InvalidateBuffers is the event number for a InvalidateBuffersEvent.  const InvalidateBuffers = 1 @@ -397,44 +373,67 @@ func init() {  	xgb.NewExtEventFuncs["DRI2"][1] = InvalidateBuffersEventNew  } -// QueryVersionCookie is a cookie used only for QueryVersion requests. -type QueryVersionCookie struct { +// Skipping definition for base type 'Bool' + +// Skipping definition for base type 'Byte' + +// Skipping definition for base type 'Card8' + +// Skipping definition for base type 'Char' + +// Skipping definition for base type 'Void' + +// Skipping definition for base type 'Double' + +// Skipping definition for base type 'Float' + +// Skipping definition for base type 'Int16' + +// Skipping definition for base type 'Int32' + +// Skipping definition for base type 'Int8' + +// Skipping definition for base type 'Card16' + +// Skipping definition for base type 'Card32' + +// AuthenticateCookie is a cookie used only for Authenticate requests. +type AuthenticateCookie struct {  	*xgb.Cookie  } -// QueryVersion sends a checked request. -// If an error occurs, it will be returned with the reply by calling QueryVersionCookie.Reply() -func QueryVersion(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie { +// Authenticate sends a checked request. +// If an error occurs, it will be returned with the reply by calling AuthenticateCookie.Reply() +func Authenticate(c *xgb.Conn, Window xproto.Window, Magic uint32) AuthenticateCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'Authenticate' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(true, true) -	c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie) -	return QueryVersionCookie{cookie} +	c.NewRequest(authenticateRequest(c, Window, Magic), cookie) +	return AuthenticateCookie{cookie}  } -// QueryVersionUnchecked sends an unchecked request. +// AuthenticateUnchecked sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func QueryVersionUnchecked(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie { +func AuthenticateUnchecked(c *xgb.Conn, Window xproto.Window, Magic uint32) AuthenticateCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'Authenticate' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(false, true) -	c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie) -	return QueryVersionCookie{cookie} +	c.NewRequest(authenticateRequest(c, Window, Magic), cookie) +	return AuthenticateCookie{cookie}  } -// QueryVersionReply represents the data returned from a QueryVersion request. -type QueryVersionReply struct { +// AuthenticateReply represents the data returned from a Authenticate request. +type AuthenticateReply struct {  	Sequence uint16 // sequence number of the request for this reply  	Length   uint32 // number of bytes in this reply  	// padding: 1 bytes -	MajorVersion uint32 -	MinorVersion uint32 +	Authenticated uint32  } -// Reply blocks and returns the reply data for a QueryVersion request. -func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) { +// Reply blocks and returns the reply data for a Authenticate request. +func (cook AuthenticateCookie) Reply() (*AuthenticateReply, error) {  	buf, err := cook.Cookie.Reply()  	if err != nil {  		return nil, err @@ -442,12 +441,12 @@ func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) {  	if buf == nil {  		return nil, nil  	} -	return queryVersionReply(buf), nil +	return authenticateReply(buf), nil  } -// queryVersionReply reads a byte slice into a QueryVersionReply value. -func queryVersionReply(buf []byte) *QueryVersionReply { -	v := new(QueryVersionReply) +// authenticateReply reads a byte slice into a AuthenticateReply value. +func authenticateReply(buf []byte) *AuthenticateReply { +	v := new(AuthenticateReply)  	b := 1 // skip reply determinant  	b += 1 // padding @@ -458,18 +457,15 @@ func queryVersionReply(buf []byte) *QueryVersionReply {  	v.Length = xgb.Get32(buf[b:]) // 4-byte units  	b += 4 -	v.MajorVersion = xgb.Get32(buf[b:]) -	b += 4 - -	v.MinorVersion = xgb.Get32(buf[b:]) +	v.Authenticated = xgb.Get32(buf[b:])  	b += 4  	return v  } -// Write request to wire for QueryVersion -// queryVersionRequest writes a QueryVersion request to a byte slice. -func queryVersionRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) []byte { +// Write request to wire for Authenticate +// authenticateRequest writes a Authenticate request to a byte slice. +func authenticateRequest(c *xgb.Conn, Window xproto.Window, Magic uint32) []byte {  	size := 12  	b := 0  	buf := make([]byte, size) @@ -477,16 +473,16 @@ func queryVersionRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32)  	buf[b] = c.Extensions["DRI2"]  	b += 1 -	buf[b] = 0 // request opcode +	buf[b] = 2 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units  	b += 2 -	xgb.Put32(buf[b:], MajorVersion) +	xgb.Put32(buf[b:], uint32(Window))  	b += 4 -	xgb.Put32(buf[b:], MinorVersion) +	xgb.Put32(buf[b:], Magic)  	b += 4  	return buf @@ -611,43 +607,42 @@ func connectRequest(c *xgb.Conn, Window xproto.Window, DriverType uint32) []byte  	return buf  } -// AuthenticateCookie is a cookie used only for Authenticate requests. -type AuthenticateCookie struct { +// CopyRegionCookie is a cookie used only for CopyRegion requests. +type CopyRegionCookie struct {  	*xgb.Cookie  } -// Authenticate sends a checked request. -// If an error occurs, it will be returned with the reply by calling AuthenticateCookie.Reply() -func Authenticate(c *xgb.Conn, Window xproto.Window, Magic uint32) AuthenticateCookie { +// CopyRegion sends a checked request. +// If an error occurs, it will be returned with the reply by calling CopyRegionCookie.Reply() +func CopyRegion(c *xgb.Conn, Drawable xproto.Drawable, Region uint32, Dest uint32, Src uint32) CopyRegionCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'Authenticate' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'CopyRegion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(true, true) -	c.NewRequest(authenticateRequest(c, Window, Magic), cookie) -	return AuthenticateCookie{cookie} +	c.NewRequest(copyRegionRequest(c, Drawable, Region, Dest, Src), cookie) +	return CopyRegionCookie{cookie}  } -// AuthenticateUnchecked sends an unchecked request. +// CopyRegionUnchecked sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func AuthenticateUnchecked(c *xgb.Conn, Window xproto.Window, Magic uint32) AuthenticateCookie { +func CopyRegionUnchecked(c *xgb.Conn, Drawable xproto.Drawable, Region uint32, Dest uint32, Src uint32) CopyRegionCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'Authenticate' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'CopyRegion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(false, true) -	c.NewRequest(authenticateRequest(c, Window, Magic), cookie) -	return AuthenticateCookie{cookie} +	c.NewRequest(copyRegionRequest(c, Drawable, Region, Dest, Src), cookie) +	return CopyRegionCookie{cookie}  } -// AuthenticateReply represents the data returned from a Authenticate request. -type AuthenticateReply struct { +// CopyRegionReply represents the data returned from a CopyRegion request. +type CopyRegionReply struct {  	Sequence uint16 // sequence number of the request for this reply  	Length   uint32 // number of bytes in this reply  	// padding: 1 bytes -	Authenticated uint32  } -// Reply blocks and returns the reply data for a Authenticate request. -func (cook AuthenticateCookie) Reply() (*AuthenticateReply, error) { +// Reply blocks and returns the reply data for a CopyRegion request. +func (cook CopyRegionCookie) Reply() (*CopyRegionReply, error) {  	buf, err := cook.Cookie.Reply()  	if err != nil {  		return nil, err @@ -655,12 +650,12 @@ func (cook AuthenticateCookie) Reply() (*AuthenticateReply, error) {  	if buf == nil {  		return nil, nil  	} -	return authenticateReply(buf), nil +	return copyRegionReply(buf), nil  } -// authenticateReply reads a byte slice into a AuthenticateReply value. -func authenticateReply(buf []byte) *AuthenticateReply { -	v := new(AuthenticateReply) +// copyRegionReply reads a byte slice into a CopyRegionReply value. +func copyRegionReply(buf []byte) *CopyRegionReply { +	v := new(CopyRegionReply)  	b := 1 // skip reply determinant  	b += 1 // padding @@ -671,32 +666,35 @@ func authenticateReply(buf []byte) *AuthenticateReply {  	v.Length = xgb.Get32(buf[b:]) // 4-byte units  	b += 4 -	v.Authenticated = xgb.Get32(buf[b:]) -	b += 4 -  	return v  } -// Write request to wire for Authenticate -// authenticateRequest writes a Authenticate request to a byte slice. -func authenticateRequest(c *xgb.Conn, Window xproto.Window, Magic uint32) []byte { -	size := 12 +// Write request to wire for CopyRegion +// copyRegionRequest writes a CopyRegion request to a byte slice. +func copyRegionRequest(c *xgb.Conn, Drawable xproto.Drawable, Region uint32, Dest uint32, Src uint32) []byte { +	size := 20  	b := 0  	buf := make([]byte, size)  	buf[b] = c.Extensions["DRI2"]  	b += 1 -	buf[b] = 2 // request opcode +	buf[b] = 6 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units  	b += 2 -	xgb.Put32(buf[b:], uint32(Window)) +	xgb.Put32(buf[b:], uint32(Drawable))  	b += 4 -	xgb.Put32(buf[b:], Magic) +	xgb.Put32(buf[b:], Region) +	b += 4 + +	xgb.Put32(buf[b:], Dest) +	b += 4 + +	xgb.Put32(buf[b:], Src)  	b += 4  	return buf @@ -924,42 +922,47 @@ func getBuffersRequest(c *xgb.Conn, Drawable xproto.Drawable, Count uint32, Atta  	return buf  } -// CopyRegionCookie is a cookie used only for CopyRegion requests. -type CopyRegionCookie struct { +// GetBuffersWithFormatCookie is a cookie used only for GetBuffersWithFormat requests. +type GetBuffersWithFormatCookie struct {  	*xgb.Cookie  } -// CopyRegion sends a checked request. -// If an error occurs, it will be returned with the reply by calling CopyRegionCookie.Reply() -func CopyRegion(c *xgb.Conn, Drawable xproto.Drawable, Region uint32, Dest uint32, Src uint32) CopyRegionCookie { +// GetBuffersWithFormat sends a checked request. +// If an error occurs, it will be returned with the reply by calling GetBuffersWithFormatCookie.Reply() +func GetBuffersWithFormat(c *xgb.Conn, Drawable xproto.Drawable, Count uint32, Attachments []AttachFormat) GetBuffersWithFormatCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'CopyRegion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetBuffersWithFormat' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(true, true) -	c.NewRequest(copyRegionRequest(c, Drawable, Region, Dest, Src), cookie) -	return CopyRegionCookie{cookie} +	c.NewRequest(getBuffersWithFormatRequest(c, Drawable, Count, Attachments), cookie) +	return GetBuffersWithFormatCookie{cookie}  } -// CopyRegionUnchecked sends an unchecked request. +// GetBuffersWithFormatUnchecked sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func CopyRegionUnchecked(c *xgb.Conn, Drawable xproto.Drawable, Region uint32, Dest uint32, Src uint32) CopyRegionCookie { +func GetBuffersWithFormatUnchecked(c *xgb.Conn, Drawable xproto.Drawable, Count uint32, Attachments []AttachFormat) GetBuffersWithFormatCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'CopyRegion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetBuffersWithFormat' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(false, true) -	c.NewRequest(copyRegionRequest(c, Drawable, Region, Dest, Src), cookie) -	return CopyRegionCookie{cookie} +	c.NewRequest(getBuffersWithFormatRequest(c, Drawable, Count, Attachments), cookie) +	return GetBuffersWithFormatCookie{cookie}  } -// CopyRegionReply represents the data returned from a CopyRegion request. -type CopyRegionReply struct { +// GetBuffersWithFormatReply represents the data returned from a GetBuffersWithFormat request. +type GetBuffersWithFormatReply struct {  	Sequence uint16 // sequence number of the request for this reply  	Length   uint32 // number of bytes in this reply  	// padding: 1 bytes +	Width  uint32 +	Height uint32 +	Count  uint32 +	// padding: 12 bytes +	Buffers []DRI2Buffer // size: xgb.Pad((int(Count) * 20))  } -// Reply blocks and returns the reply data for a CopyRegion request. -func (cook CopyRegionCookie) Reply() (*CopyRegionReply, error) { +// Reply blocks and returns the reply data for a GetBuffersWithFormat request. +func (cook GetBuffersWithFormatCookie) Reply() (*GetBuffersWithFormatReply, error) {  	buf, err := cook.Cookie.Reply()  	if err != nil {  		return nil, err @@ -967,12 +970,12 @@ func (cook CopyRegionCookie) Reply() (*CopyRegionReply, error) {  	if buf == nil {  		return nil, nil  	} -	return copyRegionReply(buf), nil +	return getBuffersWithFormatReply(buf), nil  } -// copyRegionReply reads a byte slice into a CopyRegionReply value. -func copyRegionReply(buf []byte) *CopyRegionReply { -	v := new(CopyRegionReply) +// getBuffersWithFormatReply reads a byte slice into a GetBuffersWithFormatReply value. +func getBuffersWithFormatReply(buf []byte) *GetBuffersWithFormatReply { +	v := new(GetBuffersWithFormatReply)  	b := 1 // skip reply determinant  	b += 1 // padding @@ -983,20 +986,34 @@ func copyRegionReply(buf []byte) *CopyRegionReply {  	v.Length = xgb.Get32(buf[b:]) // 4-byte units  	b += 4 +	v.Width = xgb.Get32(buf[b:]) +	b += 4 + +	v.Height = xgb.Get32(buf[b:]) +	b += 4 + +	v.Count = xgb.Get32(buf[b:]) +	b += 4 + +	b += 12 // padding + +	v.Buffers = make([]DRI2Buffer, v.Count) +	b += DRI2BufferReadList(buf[b:], v.Buffers) +  	return v  } -// Write request to wire for CopyRegion -// copyRegionRequest writes a CopyRegion request to a byte slice. -func copyRegionRequest(c *xgb.Conn, Drawable xproto.Drawable, Region uint32, Dest uint32, Src uint32) []byte { -	size := 20 +// Write request to wire for GetBuffersWithFormat +// getBuffersWithFormatRequest writes a GetBuffersWithFormat request to a byte slice. +func getBuffersWithFormatRequest(c *xgb.Conn, Drawable xproto.Drawable, Count uint32, Attachments []AttachFormat) []byte { +	size := xgb.Pad((12 + xgb.Pad((len(Attachments) * 8))))  	b := 0  	buf := make([]byte, size)  	buf[b] = c.Extensions["DRI2"]  	b += 1 -	buf[b] = 6 // request opcode +	buf[b] = 7 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units @@ -1005,59 +1022,56 @@ func copyRegionRequest(c *xgb.Conn, Drawable xproto.Drawable, Region uint32, Des  	xgb.Put32(buf[b:], uint32(Drawable))  	b += 4 -	xgb.Put32(buf[b:], Region) -	b += 4 - -	xgb.Put32(buf[b:], Dest) +	xgb.Put32(buf[b:], Count)  	b += 4 -	xgb.Put32(buf[b:], Src) -	b += 4 +	b += AttachFormatListBytes(buf[b:], Attachments)  	return buf  } -// GetBuffersWithFormatCookie is a cookie used only for GetBuffersWithFormat requests. -type GetBuffersWithFormatCookie struct { +// GetMSCCookie is a cookie used only for GetMSC requests. +type GetMSCCookie struct {  	*xgb.Cookie  } -// GetBuffersWithFormat sends a checked request. -// If an error occurs, it will be returned with the reply by calling GetBuffersWithFormatCookie.Reply() -func GetBuffersWithFormat(c *xgb.Conn, Drawable xproto.Drawable, Count uint32, Attachments []AttachFormat) GetBuffersWithFormatCookie { +// GetMSC sends a checked request. +// If an error occurs, it will be returned with the reply by calling GetMSCCookie.Reply() +func GetMSC(c *xgb.Conn, Drawable xproto.Drawable) GetMSCCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'GetBuffersWithFormat' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetMSC' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(true, true) -	c.NewRequest(getBuffersWithFormatRequest(c, Drawable, Count, Attachments), cookie) -	return GetBuffersWithFormatCookie{cookie} +	c.NewRequest(getMSCRequest(c, Drawable), cookie) +	return GetMSCCookie{cookie}  } -// GetBuffersWithFormatUnchecked sends an unchecked request. +// GetMSCUnchecked sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func GetBuffersWithFormatUnchecked(c *xgb.Conn, Drawable xproto.Drawable, Count uint32, Attachments []AttachFormat) GetBuffersWithFormatCookie { +func GetMSCUnchecked(c *xgb.Conn, Drawable xproto.Drawable) GetMSCCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'GetBuffersWithFormat' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetMSC' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(false, true) -	c.NewRequest(getBuffersWithFormatRequest(c, Drawable, Count, Attachments), cookie) -	return GetBuffersWithFormatCookie{cookie} +	c.NewRequest(getMSCRequest(c, Drawable), cookie) +	return GetMSCCookie{cookie}  } -// GetBuffersWithFormatReply represents the data returned from a GetBuffersWithFormat request. -type GetBuffersWithFormatReply struct { +// GetMSCReply represents the data returned from a GetMSC request. +type GetMSCReply struct {  	Sequence uint16 // sequence number of the request for this reply  	Length   uint32 // number of bytes in this reply  	// padding: 1 bytes -	Width  uint32 -	Height uint32 -	Count  uint32 -	// padding: 12 bytes -	Buffers []DRI2Buffer // size: xgb.Pad((int(Count) * 20)) +	UstHi uint32 +	UstLo uint32 +	MscHi uint32 +	MscLo uint32 +	SbcHi uint32 +	SbcLo uint32  } -// Reply blocks and returns the reply data for a GetBuffersWithFormat request. -func (cook GetBuffersWithFormatCookie) Reply() (*GetBuffersWithFormatReply, error) { +// Reply blocks and returns the reply data for a GetMSC request. +func (cook GetMSCCookie) Reply() (*GetMSCReply, error) {  	buf, err := cook.Cookie.Reply()  	if err != nil {  		return nil, err @@ -1065,12 +1079,12 @@ func (cook GetBuffersWithFormatCookie) Reply() (*GetBuffersWithFormatReply, erro  	if buf == nil {  		return nil, nil  	} -	return getBuffersWithFormatReply(buf), nil +	return getMSCReply(buf), nil  } -// getBuffersWithFormatReply reads a byte slice into a GetBuffersWithFormatReply value. -func getBuffersWithFormatReply(buf []byte) *GetBuffersWithFormatReply { -	v := new(GetBuffersWithFormatReply) +// getMSCReply reads a byte slice into a GetMSCReply value. +func getMSCReply(buf []byte) *GetMSCReply { +	v := new(GetMSCReply)  	b := 1 // skip reply determinant  	b += 1 // padding @@ -1081,34 +1095,38 @@ func getBuffersWithFormatReply(buf []byte) *GetBuffersWithFormatReply {  	v.Length = xgb.Get32(buf[b:]) // 4-byte units  	b += 4 -	v.Width = xgb.Get32(buf[b:]) +	v.UstHi = xgb.Get32(buf[b:])  	b += 4 -	v.Height = xgb.Get32(buf[b:]) +	v.UstLo = xgb.Get32(buf[b:])  	b += 4 -	v.Count = xgb.Get32(buf[b:]) +	v.MscHi = xgb.Get32(buf[b:])  	b += 4 -	b += 12 // padding +	v.MscLo = xgb.Get32(buf[b:]) +	b += 4 -	v.Buffers = make([]DRI2Buffer, v.Count) -	b += DRI2BufferReadList(buf[b:], v.Buffers) +	v.SbcHi = xgb.Get32(buf[b:]) +	b += 4 + +	v.SbcLo = xgb.Get32(buf[b:]) +	b += 4  	return v  } -// Write request to wire for GetBuffersWithFormat -// getBuffersWithFormatRequest writes a GetBuffersWithFormat request to a byte slice. -func getBuffersWithFormatRequest(c *xgb.Conn, Drawable xproto.Drawable, Count uint32, Attachments []AttachFormat) []byte { -	size := xgb.Pad((12 + xgb.Pad((len(Attachments) * 8)))) +// Write request to wire for GetMSC +// getMSCRequest writes a GetMSC request to a byte slice. +func getMSCRequest(c *xgb.Conn, Drawable xproto.Drawable) []byte { +	size := 8  	b := 0  	buf := make([]byte, size)  	buf[b] = c.Extensions["DRI2"]  	b += 1 -	buf[b] = 7 // request opcode +	buf[b] = 9 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units @@ -1117,10 +1135,200 @@ func getBuffersWithFormatRequest(c *xgb.Conn, Drawable xproto.Drawable, Count ui  	xgb.Put32(buf[b:], uint32(Drawable))  	b += 4 -	xgb.Put32(buf[b:], Count) +	return buf +} + +// GetParamCookie is a cookie used only for GetParam requests. +type GetParamCookie struct { +	*xgb.Cookie +} + +// GetParam sends a checked request. +// If an error occurs, it will be returned with the reply by calling GetParamCookie.Reply() +func GetParam(c *xgb.Conn, Drawable xproto.Drawable, Param uint32) GetParamCookie { +	if _, ok := c.Extensions["DRI2"]; !ok { +		panic("Cannot issue request 'GetParam' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +	} +	cookie := c.NewCookie(true, true) +	c.NewRequest(getParamRequest(c, Drawable, Param), cookie) +	return GetParamCookie{cookie} +} + +// GetParamUnchecked sends an unchecked request. +// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. +func GetParamUnchecked(c *xgb.Conn, Drawable xproto.Drawable, Param uint32) GetParamCookie { +	if _, ok := c.Extensions["DRI2"]; !ok { +		panic("Cannot issue request 'GetParam' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +	} +	cookie := c.NewCookie(false, true) +	c.NewRequest(getParamRequest(c, Drawable, Param), cookie) +	return GetParamCookie{cookie} +} + +// GetParamReply represents the data returned from a GetParam request. +type GetParamReply struct { +	Sequence          uint16 // sequence number of the request for this reply +	Length            uint32 // number of bytes in this reply +	IsParamRecognized bool +	ValueHi           uint32 +	ValueLo           uint32 +} + +// Reply blocks and returns the reply data for a GetParam request. +func (cook GetParamCookie) Reply() (*GetParamReply, error) { +	buf, err := cook.Cookie.Reply() +	if err != nil { +		return nil, err +	} +	if buf == nil { +		return nil, nil +	} +	return getParamReply(buf), nil +} + +// getParamReply reads a byte slice into a GetParamReply value. +func getParamReply(buf []byte) *GetParamReply { +	v := new(GetParamReply) +	b := 1 // skip reply determinant + +	if buf[b] == 1 { +		v.IsParamRecognized = true +	} else { +		v.IsParamRecognized = false +	} +	b += 1 + +	v.Sequence = xgb.Get16(buf[b:]) +	b += 2 + +	v.Length = xgb.Get32(buf[b:]) // 4-byte units  	b += 4 -	b += AttachFormatListBytes(buf[b:], Attachments) +	v.ValueHi = xgb.Get32(buf[b:]) +	b += 4 + +	v.ValueLo = xgb.Get32(buf[b:]) +	b += 4 + +	return v +} + +// Write request to wire for GetParam +// getParamRequest writes a GetParam request to a byte slice. +func getParamRequest(c *xgb.Conn, Drawable xproto.Drawable, Param uint32) []byte { +	size := 12 +	b := 0 +	buf := make([]byte, size) + +	buf[b] = c.Extensions["DRI2"] +	b += 1 + +	buf[b] = 13 // request opcode +	b += 1 + +	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units +	b += 2 + +	xgb.Put32(buf[b:], uint32(Drawable)) +	b += 4 + +	xgb.Put32(buf[b:], Param) +	b += 4 + +	return buf +} + +// QueryVersionCookie is a cookie used only for QueryVersion requests. +type QueryVersionCookie struct { +	*xgb.Cookie +} + +// QueryVersion sends a checked request. +// If an error occurs, it will be returned with the reply by calling QueryVersionCookie.Reply() +func QueryVersion(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie { +	if _, ok := c.Extensions["DRI2"]; !ok { +		panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +	} +	cookie := c.NewCookie(true, true) +	c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie) +	return QueryVersionCookie{cookie} +} + +// QueryVersionUnchecked sends an unchecked request. +// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. +func QueryVersionUnchecked(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie { +	if _, ok := c.Extensions["DRI2"]; !ok { +		panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +	} +	cookie := c.NewCookie(false, true) +	c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie) +	return QueryVersionCookie{cookie} +} + +// QueryVersionReply represents the data returned from a QueryVersion request. +type QueryVersionReply struct { +	Sequence uint16 // sequence number of the request for this reply +	Length   uint32 // number of bytes in this reply +	// padding: 1 bytes +	MajorVersion uint32 +	MinorVersion uint32 +} + +// Reply blocks and returns the reply data for a QueryVersion request. +func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) { +	buf, err := cook.Cookie.Reply() +	if err != nil { +		return nil, err +	} +	if buf == nil { +		return nil, nil +	} +	return queryVersionReply(buf), nil +} + +// queryVersionReply reads a byte slice into a QueryVersionReply value. +func queryVersionReply(buf []byte) *QueryVersionReply { +	v := new(QueryVersionReply) +	b := 1 // skip reply determinant + +	b += 1 // padding + +	v.Sequence = xgb.Get16(buf[b:]) +	b += 2 + +	v.Length = xgb.Get32(buf[b:]) // 4-byte units +	b += 4 + +	v.MajorVersion = xgb.Get32(buf[b:]) +	b += 4 + +	v.MinorVersion = xgb.Get32(buf[b:]) +	b += 4 + +	return v +} + +// Write request to wire for QueryVersion +// queryVersionRequest writes a QueryVersion request to a byte slice. +func queryVersionRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) []byte { +	size := 12 +	b := 0 +	buf := make([]byte, size) + +	buf[b] = c.Extensions["DRI2"] +	b += 1 + +	buf[b] = 0 // request opcode +	b += 1 + +	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units +	b += 2 + +	xgb.Put32(buf[b:], MajorVersion) +	b += 4 + +	xgb.Put32(buf[b:], MinorVersion) +	b += 4  	return buf  } @@ -1235,103 +1443,50 @@ func swapBuffersRequest(c *xgb.Conn, Drawable xproto.Drawable, TargetMscHi uint3  	return buf  } -// GetMSCCookie is a cookie used only for GetMSC requests. -type GetMSCCookie struct { +// SwapIntervalCookie is a cookie used only for SwapInterval requests. +type SwapIntervalCookie struct {  	*xgb.Cookie  } -// GetMSC sends a checked request. -// If an error occurs, it will be returned with the reply by calling GetMSCCookie.Reply() -func GetMSC(c *xgb.Conn, Drawable xproto.Drawable) GetMSCCookie { -	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'GetMSC' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") -	} -	cookie := c.NewCookie(true, true) -	c.NewRequest(getMSCRequest(c, Drawable), cookie) -	return GetMSCCookie{cookie} -} - -// GetMSCUnchecked sends an unchecked request. +// SwapInterval sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func GetMSCUnchecked(c *xgb.Conn, Drawable xproto.Drawable) GetMSCCookie { +func SwapInterval(c *xgb.Conn, Drawable xproto.Drawable, Interval uint32) SwapIntervalCookie {  	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'GetMSC' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") +		panic("Cannot issue request 'SwapInterval' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	} -	cookie := c.NewCookie(false, true) -	c.NewRequest(getMSCRequest(c, Drawable), cookie) -	return GetMSCCookie{cookie} -} - -// GetMSCReply represents the data returned from a GetMSC request. -type GetMSCReply struct { -	Sequence uint16 // sequence number of the request for this reply -	Length   uint32 // number of bytes in this reply -	// padding: 1 bytes -	UstHi uint32 -	UstLo uint32 -	MscHi uint32 -	MscLo uint32 -	SbcHi uint32 -	SbcLo uint32 +	cookie := c.NewCookie(false, false) +	c.NewRequest(swapIntervalRequest(c, Drawable, Interval), cookie) +	return SwapIntervalCookie{cookie}  } -// Reply blocks and returns the reply data for a GetMSC request. -func (cook GetMSCCookie) Reply() (*GetMSCReply, error) { -	buf, err := cook.Cookie.Reply() -	if err != nil { -		return nil, err -	} -	if buf == nil { -		return nil, nil +// SwapIntervalChecked sends a checked request. +// If an error occurs, it can be retrieved using SwapIntervalCookie.Check() +func SwapIntervalChecked(c *xgb.Conn, Drawable xproto.Drawable, Interval uint32) SwapIntervalCookie { +	if _, ok := c.Extensions["DRI2"]; !ok { +		panic("Cannot issue request 'SwapInterval' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.")  	} -	return getMSCReply(buf), nil +	cookie := c.NewCookie(true, false) +	c.NewRequest(swapIntervalRequest(c, Drawable, Interval), cookie) +	return SwapIntervalCookie{cookie}  } -// getMSCReply reads a byte slice into a GetMSCReply value. -func getMSCReply(buf []byte) *GetMSCReply { -	v := new(GetMSCReply) -	b := 1 // skip reply determinant - -	b += 1 // padding - -	v.Sequence = xgb.Get16(buf[b:]) -	b += 2 - -	v.Length = xgb.Get32(buf[b:]) // 4-byte units -	b += 4 - -	v.UstHi = xgb.Get32(buf[b:]) -	b += 4 - -	v.UstLo = xgb.Get32(buf[b:]) -	b += 4 - -	v.MscHi = xgb.Get32(buf[b:]) -	b += 4 - -	v.MscLo = xgb.Get32(buf[b:]) -	b += 4 - -	v.SbcHi = xgb.Get32(buf[b:]) -	b += 4 - -	v.SbcLo = xgb.Get32(buf[b:]) -	b += 4 - -	return v +// Check returns an error if one occurred for checked requests that are not expecting a reply. +// This cannot be called for requests expecting a reply, nor for unchecked requests. +func (cook SwapIntervalCookie) Check() error { +	return cook.Cookie.Check()  } -// Write request to wire for GetMSC -// getMSCRequest writes a GetMSC request to a byte slice. -func getMSCRequest(c *xgb.Conn, Drawable xproto.Drawable) []byte { -	size := 8 +// Write request to wire for SwapInterval +// swapIntervalRequest writes a SwapInterval request to a byte slice. +func swapIntervalRequest(c *xgb.Conn, Drawable xproto.Drawable, Interval uint32) []byte { +	size := 12  	b := 0  	buf := make([]byte, size)  	buf[b] = c.Extensions["DRI2"]  	b += 1 -	buf[b] = 9 // request opcode +	buf[b] = 12 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units @@ -1340,6 +1495,9 @@ func getMSCRequest(c *xgb.Conn, Drawable xproto.Drawable) []byte {  	xgb.Put32(buf[b:], uint32(Drawable))  	b += 4 +	xgb.Put32(buf[b:], Interval) +	b += 4 +  	return buf  } @@ -1582,61 +1740,3 @@ func waitSBCRequest(c *xgb.Conn, Drawable xproto.Drawable, TargetSbcHi uint32, T  	return buf  } - -// SwapIntervalCookie is a cookie used only for SwapInterval requests. -type SwapIntervalCookie struct { -	*xgb.Cookie -} - -// SwapInterval sends an unchecked request. -// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func SwapInterval(c *xgb.Conn, Drawable xproto.Drawable, Interval uint32) SwapIntervalCookie { -	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'SwapInterval' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") -	} -	cookie := c.NewCookie(false, false) -	c.NewRequest(swapIntervalRequest(c, Drawable, Interval), cookie) -	return SwapIntervalCookie{cookie} -} - -// SwapIntervalChecked sends a checked request. -// If an error occurs, it can be retrieved using SwapIntervalCookie.Check() -func SwapIntervalChecked(c *xgb.Conn, Drawable xproto.Drawable, Interval uint32) SwapIntervalCookie { -	if _, ok := c.Extensions["DRI2"]; !ok { -		panic("Cannot issue request 'SwapInterval' using the uninitialized extension 'DRI2'. dri2.Init(connObj) must be called first.") -	} -	cookie := c.NewCookie(true, false) -	c.NewRequest(swapIntervalRequest(c, Drawable, Interval), cookie) -	return SwapIntervalCookie{cookie} -} - -// Check returns an error if one occurred for checked requests that are not expecting a reply. -// This cannot be called for requests expecting a reply, nor for unchecked requests. -func (cook SwapIntervalCookie) Check() error { -	return cook.Cookie.Check() -} - -// Write request to wire for SwapInterval -// swapIntervalRequest writes a SwapInterval request to a byte slice. -func swapIntervalRequest(c *xgb.Conn, Drawable xproto.Drawable, Interval uint32) []byte { -	size := 12 -	b := 0 -	buf := make([]byte, size) - -	buf[b] = c.Extensions["DRI2"] -	b += 1 - -	buf[b] = 12 // request opcode -	b += 1 - -	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units -	b += 2 - -	xgb.Put32(buf[b:], uint32(Drawable)) -	b += 4 - -	xgb.Put32(buf[b:], Interval) -	b += 4 - -	return buf -} | 
