aboutsummaryrefslogtreecommitdiff
path: root/nexgb/xf86dri/xf86dri.go
diff options
context:
space:
mode:
authorPřemysl Janouch <p@janouch.name>2018-09-08 16:54:17 +0200
committerPřemysl Janouch <p@janouch.name>2018-09-08 16:54:17 +0200
commit3173202cc1e08762c6e156a8fffd23269a5ddb2b (patch)
tree95c4a06f8384d41b15e9c22afac0a387de79dc51 /nexgb/xf86dri/xf86dri.go
parent632b3ae494d45755525644fe5d04475c95aae364 (diff)
parent3906399e7c2a40fbaf355de572cf50a314083f64 (diff)
downloadhaven-3173202cc1e08762c6e156a8fffd23269a5ddb2b.tar.gz
haven-3173202cc1e08762c6e156a8fffd23269a5ddb2b.tar.xz
haven-3173202cc1e08762c6e156a8fffd23269a5ddb2b.zip
Merge aarzilli/xgb, branch xcb1.12 as nexgb
History has been linearized and rewritten to stay under the new subdirectory. I want to make changes incompatible to BurntSushi/xgb. The history begs for being thrown away entirely because of its quality and because it doesn't cover the Google period but it is still useful for copyright tracking.
Diffstat (limited to 'nexgb/xf86dri/xf86dri.go')
-rw-r--r--nexgb/xf86dri/xf86dri.go1301
1 files changed, 1301 insertions, 0 deletions
diff --git a/nexgb/xf86dri/xf86dri.go b/nexgb/xf86dri/xf86dri.go
new file mode 100644
index 0000000..06f49a0
--- /dev/null
+++ b/nexgb/xf86dri/xf86dri.go
@@ -0,0 +1,1301 @@
+// Package xf86dri is the X client API for the XFree86-DRI extension.
+package xf86dri
+
+// This file is automatically generated from xf86dri.xml. Edit at your peril!
+
+import (
+ "github.com/BurntSushi/xgb"
+
+ "github.com/BurntSushi/xgb/xproto"
+)
+
+// Init must be called before using the XFree86-DRI extension.
+func Init(c *xgb.Conn) error {
+ reply, err := xproto.QueryExtension(c, 11, "XFree86-DRI").Reply()
+ switch {
+ case err != nil:
+ return err
+ case !reply.Present:
+ return xgb.Errorf("No extension named XFree86-DRI could be found on on the server.")
+ }
+
+ c.ExtLock.Lock()
+ c.Extensions["XFree86-DRI"] = reply.MajorOpcode
+ c.ExtLock.Unlock()
+ for evNum, fun := range xgb.NewExtEventFuncs["XFree86-DRI"] {
+ xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun
+ }
+ for errNum, fun := range xgb.NewExtErrorFuncs["XFree86-DRI"] {
+ xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun
+ }
+ return nil
+}
+
+func init() {
+ xgb.NewExtEventFuncs["XFree86-DRI"] = make(map[int]xgb.NewEventFun)
+ xgb.NewExtErrorFuncs["XFree86-DRI"] = make(map[int]xgb.NewErrorFun)
+}
+
+type DrmClipRect struct {
+ X1 int16
+ Y1 int16
+ X2 int16
+ X3 int16
+}
+
+// DrmClipRectRead reads a byte slice into a DrmClipRect value.
+func DrmClipRectRead(buf []byte, v *DrmClipRect) int {
+ b := 0
+
+ v.X1 = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.Y1 = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.X2 = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.X3 = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ return b
+}
+
+// DrmClipRectReadList reads a byte slice into a list of DrmClipRect values.
+func DrmClipRectReadList(buf []byte, dest []DrmClipRect) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = DrmClipRect{}
+ b += DrmClipRectRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a DrmClipRect value to a byte slice.
+func (v DrmClipRect) Bytes() []byte {
+ buf := make([]byte, 8)
+ b := 0
+
+ xgb.Put16(buf[b:], uint16(v.X1))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(v.Y1))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(v.X2))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(v.X3))
+ b += 2
+
+ return buf[:b]
+}
+
+// DrmClipRectListBytes writes a list of DrmClipRect values to a byte slice.
+func DrmClipRectListBytes(buf []byte, list []DrmClipRect) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+// 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'
+
+// AuthConnectionCookie is a cookie used only for AuthConnection requests.
+type AuthConnectionCookie struct {
+ *xgb.Cookie
+}
+
+// AuthConnection sends a checked request.
+// If an error occurs, it will be returned with the reply by calling AuthConnectionCookie.Reply()
+func AuthConnection(c *xgb.Conn, Screen uint32, Magic uint32) AuthConnectionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'AuthConnection' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(authConnectionRequest(c, Screen, Magic), cookie)
+ return AuthConnectionCookie{cookie}
+}
+
+// AuthConnectionUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func AuthConnectionUnchecked(c *xgb.Conn, Screen uint32, Magic uint32) AuthConnectionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'AuthConnection' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(authConnectionRequest(c, Screen, Magic), cookie)
+ return AuthConnectionCookie{cookie}
+}
+
+// AuthConnectionReply represents the data returned from a AuthConnection request.
+type AuthConnectionReply 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 AuthConnection request.
+func (cook AuthConnectionCookie) Reply() (*AuthConnectionReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return authConnectionReply(buf), nil
+}
+
+// authConnectionReply reads a byte slice into a AuthConnectionReply value.
+func authConnectionReply(buf []byte) *AuthConnectionReply {
+ v := new(AuthConnectionReply)
+ 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.Authenticated = xgb.Get32(buf[b:])
+ b += 4
+
+ return v
+}
+
+// Write request to wire for AuthConnection
+// authConnectionRequest writes a AuthConnection request to a byte slice.
+func authConnectionRequest(c *xgb.Conn, Screen uint32, Magic uint32) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 11 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ xgb.Put32(buf[b:], Magic)
+ b += 4
+
+ return buf
+}
+
+// CloseConnectionCookie is a cookie used only for CloseConnection requests.
+type CloseConnectionCookie struct {
+ *xgb.Cookie
+}
+
+// CloseConnection sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func CloseConnection(c *xgb.Conn, Screen uint32) CloseConnectionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'CloseConnection' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(closeConnectionRequest(c, Screen), cookie)
+ return CloseConnectionCookie{cookie}
+}
+
+// CloseConnectionChecked sends a checked request.
+// If an error occurs, it can be retrieved using CloseConnectionCookie.Check()
+func CloseConnectionChecked(c *xgb.Conn, Screen uint32) CloseConnectionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'CloseConnection' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(closeConnectionRequest(c, Screen), cookie)
+ return CloseConnectionCookie{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 CloseConnectionCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for CloseConnection
+// closeConnectionRequest writes a CloseConnection request to a byte slice.
+func closeConnectionRequest(c *xgb.Conn, Screen uint32) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 3 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ return buf
+}
+
+// CreateContextCookie is a cookie used only for CreateContext requests.
+type CreateContextCookie struct {
+ *xgb.Cookie
+}
+
+// CreateContext sends a checked request.
+// If an error occurs, it will be returned with the reply by calling CreateContextCookie.Reply()
+func CreateContext(c *xgb.Conn, Screen uint32, Visual uint32, Context uint32) CreateContextCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'CreateContext' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(createContextRequest(c, Screen, Visual, Context), cookie)
+ return CreateContextCookie{cookie}
+}
+
+// CreateContextUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func CreateContextUnchecked(c *xgb.Conn, Screen uint32, Visual uint32, Context uint32) CreateContextCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'CreateContext' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(createContextRequest(c, Screen, Visual, Context), cookie)
+ return CreateContextCookie{cookie}
+}
+
+// CreateContextReply represents the data returned from a CreateContext request.
+type CreateContextReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ HwContext uint32
+}
+
+// Reply blocks and returns the reply data for a CreateContext request.
+func (cook CreateContextCookie) Reply() (*CreateContextReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return createContextReply(buf), nil
+}
+
+// createContextReply reads a byte slice into a CreateContextReply value.
+func createContextReply(buf []byte) *CreateContextReply {
+ v := new(CreateContextReply)
+ 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.HwContext = xgb.Get32(buf[b:])
+ b += 4
+
+ return v
+}
+
+// Write request to wire for CreateContext
+// createContextRequest writes a CreateContext request to a byte slice.
+func createContextRequest(c *xgb.Conn, Screen uint32, Visual uint32, Context uint32) []byte {
+ size := 16
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 5 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ xgb.Put32(buf[b:], Visual)
+ b += 4
+
+ xgb.Put32(buf[b:], Context)
+ b += 4
+
+ return buf
+}
+
+// CreateDrawableCookie is a cookie used only for CreateDrawable requests.
+type CreateDrawableCookie struct {
+ *xgb.Cookie
+}
+
+// CreateDrawable sends a checked request.
+// If an error occurs, it will be returned with the reply by calling CreateDrawableCookie.Reply()
+func CreateDrawable(c *xgb.Conn, Screen uint32, Drawable uint32) CreateDrawableCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'CreateDrawable' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(createDrawableRequest(c, Screen, Drawable), cookie)
+ return CreateDrawableCookie{cookie}
+}
+
+// CreateDrawableUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func CreateDrawableUnchecked(c *xgb.Conn, Screen uint32, Drawable uint32) CreateDrawableCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'CreateDrawable' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(createDrawableRequest(c, Screen, Drawable), cookie)
+ return CreateDrawableCookie{cookie}
+}
+
+// CreateDrawableReply represents the data returned from a CreateDrawable request.
+type CreateDrawableReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ HwDrawableHandle uint32
+}
+
+// Reply blocks and returns the reply data for a CreateDrawable request.
+func (cook CreateDrawableCookie) Reply() (*CreateDrawableReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return createDrawableReply(buf), nil
+}
+
+// createDrawableReply reads a byte slice into a CreateDrawableReply value.
+func createDrawableReply(buf []byte) *CreateDrawableReply {
+ v := new(CreateDrawableReply)
+ 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.HwDrawableHandle = xgb.Get32(buf[b:])
+ b += 4
+
+ return v
+}
+
+// Write request to wire for CreateDrawable
+// createDrawableRequest writes a CreateDrawable request to a byte slice.
+func createDrawableRequest(c *xgb.Conn, Screen uint32, Drawable uint32) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 7 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ xgb.Put32(buf[b:], Drawable)
+ b += 4
+
+ return buf
+}
+
+// DestroyContextCookie is a cookie used only for DestroyContext requests.
+type DestroyContextCookie struct {
+ *xgb.Cookie
+}
+
+// DestroyContext sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func DestroyContext(c *xgb.Conn, Screen uint32, Context uint32) DestroyContextCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'DestroyContext' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(destroyContextRequest(c, Screen, Context), cookie)
+ return DestroyContextCookie{cookie}
+}
+
+// DestroyContextChecked sends a checked request.
+// If an error occurs, it can be retrieved using DestroyContextCookie.Check()
+func DestroyContextChecked(c *xgb.Conn, Screen uint32, Context uint32) DestroyContextCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'DestroyContext' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(destroyContextRequest(c, Screen, Context), cookie)
+ return DestroyContextCookie{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 DestroyContextCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for DestroyContext
+// destroyContextRequest writes a DestroyContext request to a byte slice.
+func destroyContextRequest(c *xgb.Conn, Screen uint32, Context uint32) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ 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:], Screen)
+ b += 4
+
+ xgb.Put32(buf[b:], Context)
+ b += 4
+
+ return buf
+}
+
+// DestroyDrawableCookie is a cookie used only for DestroyDrawable requests.
+type DestroyDrawableCookie struct {
+ *xgb.Cookie
+}
+
+// DestroyDrawable sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func DestroyDrawable(c *xgb.Conn, Screen uint32, Drawable uint32) DestroyDrawableCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'DestroyDrawable' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(destroyDrawableRequest(c, Screen, Drawable), cookie)
+ return DestroyDrawableCookie{cookie}
+}
+
+// DestroyDrawableChecked sends a checked request.
+// If an error occurs, it can be retrieved using DestroyDrawableCookie.Check()
+func DestroyDrawableChecked(c *xgb.Conn, Screen uint32, Drawable uint32) DestroyDrawableCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'DestroyDrawable' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(destroyDrawableRequest(c, Screen, Drawable), cookie)
+ return DestroyDrawableCookie{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 DestroyDrawableCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for DestroyDrawable
+// destroyDrawableRequest writes a DestroyDrawable request to a byte slice.
+func destroyDrawableRequest(c *xgb.Conn, Screen uint32, Drawable uint32) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 8 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ xgb.Put32(buf[b:], Drawable)
+ b += 4
+
+ return buf
+}
+
+// GetClientDriverNameCookie is a cookie used only for GetClientDriverName requests.
+type GetClientDriverNameCookie struct {
+ *xgb.Cookie
+}
+
+// GetClientDriverName sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetClientDriverNameCookie.Reply()
+func GetClientDriverName(c *xgb.Conn, Screen uint32) GetClientDriverNameCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'GetClientDriverName' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getClientDriverNameRequest(c, Screen), cookie)
+ return GetClientDriverNameCookie{cookie}
+}
+
+// GetClientDriverNameUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetClientDriverNameUnchecked(c *xgb.Conn, Screen uint32) GetClientDriverNameCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'GetClientDriverName' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getClientDriverNameRequest(c, Screen), cookie)
+ return GetClientDriverNameCookie{cookie}
+}
+
+// GetClientDriverNameReply represents the data returned from a GetClientDriverName request.
+type GetClientDriverNameReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ ClientDriverMajorVersion uint32
+ ClientDriverMinorVersion uint32
+ ClientDriverPatchVersion uint32
+ ClientDriverNameLen uint32
+ // padding: 8 bytes
+ ClientDriverName string // size: xgb.Pad((int(ClientDriverNameLen) * 1))
+}
+
+// Reply blocks and returns the reply data for a GetClientDriverName request.
+func (cook GetClientDriverNameCookie) Reply() (*GetClientDriverNameReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getClientDriverNameReply(buf), nil
+}
+
+// getClientDriverNameReply reads a byte slice into a GetClientDriverNameReply value.
+func getClientDriverNameReply(buf []byte) *GetClientDriverNameReply {
+ v := new(GetClientDriverNameReply)
+ 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.ClientDriverMajorVersion = xgb.Get32(buf[b:])
+ b += 4
+
+ v.ClientDriverMinorVersion = xgb.Get32(buf[b:])
+ b += 4
+
+ v.ClientDriverPatchVersion = xgb.Get32(buf[b:])
+ b += 4
+
+ v.ClientDriverNameLen = xgb.Get32(buf[b:])
+ b += 4
+
+ b += 8 // padding
+
+ {
+ byteString := make([]byte, v.ClientDriverNameLen)
+ copy(byteString[:v.ClientDriverNameLen], buf[b:])
+ v.ClientDriverName = string(byteString)
+ b += int(v.ClientDriverNameLen)
+ }
+
+ return v
+}
+
+// Write request to wire for GetClientDriverName
+// getClientDriverNameRequest writes a GetClientDriverName request to a byte slice.
+func getClientDriverNameRequest(c *xgb.Conn, Screen uint32) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 4 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ return buf
+}
+
+// GetDeviceInfoCookie is a cookie used only for GetDeviceInfo requests.
+type GetDeviceInfoCookie struct {
+ *xgb.Cookie
+}
+
+// GetDeviceInfo sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetDeviceInfoCookie.Reply()
+func GetDeviceInfo(c *xgb.Conn, Screen uint32) GetDeviceInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'GetDeviceInfo' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getDeviceInfoRequest(c, Screen), cookie)
+ return GetDeviceInfoCookie{cookie}
+}
+
+// GetDeviceInfoUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetDeviceInfoUnchecked(c *xgb.Conn, Screen uint32) GetDeviceInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'GetDeviceInfo' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getDeviceInfoRequest(c, Screen), cookie)
+ return GetDeviceInfoCookie{cookie}
+}
+
+// GetDeviceInfoReply represents the data returned from a GetDeviceInfo request.
+type GetDeviceInfoReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ FramebufferHandleLow uint32
+ FramebufferHandleHigh uint32
+ FramebufferOriginOffset uint32
+ FramebufferSize uint32
+ FramebufferStride uint32
+ DevicePrivateSize uint32
+ DevicePrivate []uint32 // size: xgb.Pad((int(DevicePrivateSize) * 4))
+}
+
+// Reply blocks and returns the reply data for a GetDeviceInfo request.
+func (cook GetDeviceInfoCookie) Reply() (*GetDeviceInfoReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getDeviceInfoReply(buf), nil
+}
+
+// getDeviceInfoReply reads a byte slice into a GetDeviceInfoReply value.
+func getDeviceInfoReply(buf []byte) *GetDeviceInfoReply {
+ v := new(GetDeviceInfoReply)
+ 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.FramebufferHandleLow = xgb.Get32(buf[b:])
+ b += 4
+
+ v.FramebufferHandleHigh = xgb.Get32(buf[b:])
+ b += 4
+
+ v.FramebufferOriginOffset = xgb.Get32(buf[b:])
+ b += 4
+
+ v.FramebufferSize = xgb.Get32(buf[b:])
+ b += 4
+
+ v.FramebufferStride = xgb.Get32(buf[b:])
+ b += 4
+
+ v.DevicePrivateSize = xgb.Get32(buf[b:])
+ b += 4
+
+ v.DevicePrivate = make([]uint32, v.DevicePrivateSize)
+ for i := 0; i < int(v.DevicePrivateSize); i++ {
+ v.DevicePrivate[i] = xgb.Get32(buf[b:])
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for GetDeviceInfo
+// getDeviceInfoRequest writes a GetDeviceInfo request to a byte slice.
+func getDeviceInfoRequest(c *xgb.Conn, Screen uint32) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 10 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ return buf
+}
+
+// GetDrawableInfoCookie is a cookie used only for GetDrawableInfo requests.
+type GetDrawableInfoCookie struct {
+ *xgb.Cookie
+}
+
+// GetDrawableInfo sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetDrawableInfoCookie.Reply()
+func GetDrawableInfo(c *xgb.Conn, Screen uint32, Drawable uint32) GetDrawableInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'GetDrawableInfo' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getDrawableInfoRequest(c, Screen, Drawable), cookie)
+ return GetDrawableInfoCookie{cookie}
+}
+
+// GetDrawableInfoUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetDrawableInfoUnchecked(c *xgb.Conn, Screen uint32, Drawable uint32) GetDrawableInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'GetDrawableInfo' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getDrawableInfoRequest(c, Screen, Drawable), cookie)
+ return GetDrawableInfoCookie{cookie}
+}
+
+// GetDrawableInfoReply represents the data returned from a GetDrawableInfo request.
+type GetDrawableInfoReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ DrawableTableIndex uint32
+ DrawableTableStamp uint32
+ DrawableOriginX int16
+ DrawableOriginY int16
+ DrawableSizeW int16
+ DrawableSizeH int16
+ NumClipRects uint32
+ BackX int16
+ BackY int16
+ NumBackClipRects uint32
+ ClipRects []DrmClipRect // size: xgb.Pad((int(NumClipRects) * 8))
+ BackClipRects []DrmClipRect // size: xgb.Pad((int(NumBackClipRects) * 8))
+}
+
+// Reply blocks and returns the reply data for a GetDrawableInfo request.
+func (cook GetDrawableInfoCookie) Reply() (*GetDrawableInfoReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getDrawableInfoReply(buf), nil
+}
+
+// getDrawableInfoReply reads a byte slice into a GetDrawableInfoReply value.
+func getDrawableInfoReply(buf []byte) *GetDrawableInfoReply {
+ v := new(GetDrawableInfoReply)
+ 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.DrawableTableIndex = xgb.Get32(buf[b:])
+ b += 4
+
+ v.DrawableTableStamp = xgb.Get32(buf[b:])
+ b += 4
+
+ v.DrawableOriginX = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.DrawableOriginY = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.DrawableSizeW = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.DrawableSizeH = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.NumClipRects = xgb.Get32(buf[b:])
+ b += 4
+
+ v.BackX = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.BackY = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.NumBackClipRects = xgb.Get32(buf[b:])
+ b += 4
+
+ v.ClipRects = make([]DrmClipRect, v.NumClipRects)
+ b += DrmClipRectReadList(buf[b:], v.ClipRects)
+
+ v.BackClipRects = make([]DrmClipRect, v.NumBackClipRects)
+ b += DrmClipRectReadList(buf[b:], v.BackClipRects)
+
+ return v
+}
+
+// Write request to wire for GetDrawableInfo
+// getDrawableInfoRequest writes a GetDrawableInfo request to a byte slice.
+func getDrawableInfoRequest(c *xgb.Conn, Screen uint32, Drawable uint32) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 9 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ b += 4
+
+ xgb.Put32(buf[b:], Drawable)
+ b += 4
+
+ return buf
+}
+
+// OpenConnectionCookie is a cookie used only for OpenConnection requests.
+type OpenConnectionCookie struct {
+ *xgb.Cookie
+}
+
+// OpenConnection sends a checked request.
+// If an error occurs, it will be returned with the reply by calling OpenConnectionCookie.Reply()
+func OpenConnection(c *xgb.Conn, Screen uint32) OpenConnectionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'OpenConnection' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(openConnectionRequest(c, Screen), cookie)
+ return OpenConnectionCookie{cookie}
+}
+
+// OpenConnectionUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func OpenConnectionUnchecked(c *xgb.Conn, Screen uint32) OpenConnectionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'OpenConnection' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(openConnectionRequest(c, Screen), cookie)
+ return OpenConnectionCookie{cookie}
+}
+
+// OpenConnectionReply represents the data returned from a OpenConnection request.
+type OpenConnectionReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ SareaHandleLow uint32
+ SareaHandleHigh uint32
+ BusIdLen uint32
+ // padding: 12 bytes
+ BusId string // size: xgb.Pad((int(BusIdLen) * 1))
+}
+
+// Reply blocks and returns the reply data for a OpenConnection request.
+func (cook OpenConnectionCookie) Reply() (*OpenConnectionReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return openConnectionReply(buf), nil
+}
+
+// openConnectionReply reads a byte slice into a OpenConnectionReply value.
+func openConnectionReply(buf []byte) *OpenConnectionReply {
+ v := new(OpenConnectionReply)
+ 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.SareaHandleLow = xgb.Get32(buf[b:])
+ b += 4
+
+ v.SareaHandleHigh = xgb.Get32(buf[b:])
+ b += 4
+
+ v.BusIdLen = xgb.Get32(buf[b:])
+ b += 4
+
+ b += 12 // padding
+
+ {
+ byteString := make([]byte, v.BusIdLen)
+ copy(byteString[:v.BusIdLen], buf[b:])
+ v.BusId = string(byteString)
+ b += int(v.BusIdLen)
+ }
+
+ return v
+}
+
+// Write request to wire for OpenConnection
+// openConnectionRequest writes a OpenConnection request to a byte slice.
+func openConnectionRequest(c *xgb.Conn, Screen uint32) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ 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:], Screen)
+ b += 4
+
+ return buf
+}
+
+// QueryDirectRenderingCapableCookie is a cookie used only for QueryDirectRenderingCapable requests.
+type QueryDirectRenderingCapableCookie struct {
+ *xgb.Cookie
+}
+
+// QueryDirectRenderingCapable sends a checked request.
+// If an error occurs, it will be returned with the reply by calling QueryDirectRenderingCapableCookie.Reply()
+func QueryDirectRenderingCapable(c *xgb.Conn, Screen uint32) QueryDirectRenderingCapableCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'QueryDirectRenderingCapable' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(queryDirectRenderingCapableRequest(c, Screen), cookie)
+ return QueryDirectRenderingCapableCookie{cookie}
+}
+
+// QueryDirectRenderingCapableUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func QueryDirectRenderingCapableUnchecked(c *xgb.Conn, Screen uint32) QueryDirectRenderingCapableCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'QueryDirectRenderingCapable' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(queryDirectRenderingCapableRequest(c, Screen), cookie)
+ return QueryDirectRenderingCapableCookie{cookie}
+}
+
+// QueryDirectRenderingCapableReply represents the data returned from a QueryDirectRenderingCapable request.
+type QueryDirectRenderingCapableReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ IsCapable bool
+}
+
+// Reply blocks and returns the reply data for a QueryDirectRenderingCapable request.
+func (cook QueryDirectRenderingCapableCookie) Reply() (*QueryDirectRenderingCapableReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return queryDirectRenderingCapableReply(buf), nil
+}
+
+// queryDirectRenderingCapableReply reads a byte slice into a QueryDirectRenderingCapableReply value.
+func queryDirectRenderingCapableReply(buf []byte) *QueryDirectRenderingCapableReply {
+ v := new(QueryDirectRenderingCapableReply)
+ 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
+
+ if buf[b] == 1 {
+ v.IsCapable = true
+ } else {
+ v.IsCapable = false
+ }
+ b += 1
+
+ return v
+}
+
+// Write request to wire for QueryDirectRenderingCapable
+// queryDirectRenderingCapableRequest writes a QueryDirectRenderingCapable request to a byte slice.
+func queryDirectRenderingCapableRequest(c *xgb.Conn, Screen uint32) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 1 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], Screen)
+ 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) QueryVersionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(queryVersionRequest(c), 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) QueryVersionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["XFree86-DRI"]; !ok {
+ panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'XFree86-DRI'. xf86dri.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(queryVersionRequest(c), 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
+ DriMajorVersion uint16
+ DriMinorVersion uint16
+ DriMinorPatch 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.DriMajorVersion = xgb.Get16(buf[b:])
+ b += 2
+
+ v.DriMinorVersion = xgb.Get16(buf[b:])
+ b += 2
+
+ v.DriMinorPatch = 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) []byte {
+ size := 4
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["XFree86-DRI"]
+ c.ExtLock.RUnlock()
+ 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
+
+ return buf
+}