10d429e5bSmrg /*
20d429e5bSmrg * This file generated automatically from dri2.xml by c_client.py.
30d429e5bSmrg * Edit at your peril.
40d429e5bSmrg */
50d429e5bSmrg
6ed2038faSmrg #ifdef HAVE_CONFIG_H
7ed2038faSmrg #include "config.h"
8ed2038faSmrg #endif
9ed2038faSmrg #include <stdlib.h>
100d429e5bSmrg #include <string.h>
110d429e5bSmrg #include <assert.h>
12ed2038faSmrg #include <stddef.h> /* for offsetof() */
130d429e5bSmrg #include "xcbext.h"
140d429e5bSmrg #include "dri2.h"
15ed2038faSmrg
16ed2038faSmrg #define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)
170d429e5bSmrg #include "xproto.h"
180d429e5bSmrg
190d429e5bSmrg xcb_extension_t xcb_dri2_id = { "DRI2", 0 };
200d429e5bSmrg
210d429e5bSmrg void
xcb_dri2_dri2_buffer_next(xcb_dri2_dri2_buffer_iterator_t * i)22*ba6321feSmrg xcb_dri2_dri2_buffer_next (xcb_dri2_dri2_buffer_iterator_t *i)
230d429e5bSmrg {
240d429e5bSmrg --i->rem;
250d429e5bSmrg ++i->data;
260d429e5bSmrg i->index += sizeof(xcb_dri2_dri2_buffer_t);
270d429e5bSmrg }
280d429e5bSmrg
290d429e5bSmrg xcb_generic_iterator_t
xcb_dri2_dri2_buffer_end(xcb_dri2_dri2_buffer_iterator_t i)30*ba6321feSmrg xcb_dri2_dri2_buffer_end (xcb_dri2_dri2_buffer_iterator_t i)
310d429e5bSmrg {
320d429e5bSmrg xcb_generic_iterator_t ret;
330d429e5bSmrg ret.data = i.data + i.rem;
340d429e5bSmrg ret.index = i.index + ((char *) ret.data - (char *) i.data);
350d429e5bSmrg ret.rem = 0;
360d429e5bSmrg return ret;
370d429e5bSmrg }
380d429e5bSmrg
390d429e5bSmrg void
xcb_dri2_attach_format_next(xcb_dri2_attach_format_iterator_t * i)40*ba6321feSmrg xcb_dri2_attach_format_next (xcb_dri2_attach_format_iterator_t *i)
410d429e5bSmrg {
420d429e5bSmrg --i->rem;
430d429e5bSmrg ++i->data;
440d429e5bSmrg i->index += sizeof(xcb_dri2_attach_format_t);
450d429e5bSmrg }
460d429e5bSmrg
470d429e5bSmrg xcb_generic_iterator_t
xcb_dri2_attach_format_end(xcb_dri2_attach_format_iterator_t i)48*ba6321feSmrg xcb_dri2_attach_format_end (xcb_dri2_attach_format_iterator_t i)
490d429e5bSmrg {
500d429e5bSmrg xcb_generic_iterator_t ret;
510d429e5bSmrg ret.data = i.data + i.rem;
520d429e5bSmrg ret.index = i.index + ((char *) ret.data - (char *) i.data);
530d429e5bSmrg ret.rem = 0;
540d429e5bSmrg return ret;
550d429e5bSmrg }
560d429e5bSmrg
570d429e5bSmrg xcb_dri2_query_version_cookie_t
xcb_dri2_query_version(xcb_connection_t * c,uint32_t major_version,uint32_t minor_version)58*ba6321feSmrg xcb_dri2_query_version (xcb_connection_t *c,
59*ba6321feSmrg uint32_t major_version,
60*ba6321feSmrg uint32_t minor_version)
610d429e5bSmrg {
620d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
63*ba6321feSmrg .count = 2,
64*ba6321feSmrg .ext = &xcb_dri2_id,
65*ba6321feSmrg .opcode = XCB_DRI2_QUERY_VERSION,
66*ba6321feSmrg .isvoid = 0
670d429e5bSmrg };
680d429e5bSmrg
690d429e5bSmrg struct iovec xcb_parts[4];
700d429e5bSmrg xcb_dri2_query_version_cookie_t xcb_ret;
710d429e5bSmrg xcb_dri2_query_version_request_t xcb_out;
720d429e5bSmrg
730d429e5bSmrg xcb_out.major_version = major_version;
740d429e5bSmrg xcb_out.minor_version = minor_version;
750d429e5bSmrg
760d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
770d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
780d429e5bSmrg xcb_parts[3].iov_base = 0;
790d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
80ed2038faSmrg
810d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
820d429e5bSmrg return xcb_ret;
830d429e5bSmrg }
840d429e5bSmrg
850d429e5bSmrg xcb_dri2_query_version_cookie_t
xcb_dri2_query_version_unchecked(xcb_connection_t * c,uint32_t major_version,uint32_t minor_version)86*ba6321feSmrg xcb_dri2_query_version_unchecked (xcb_connection_t *c,
87*ba6321feSmrg uint32_t major_version,
88*ba6321feSmrg uint32_t minor_version)
890d429e5bSmrg {
900d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
91*ba6321feSmrg .count = 2,
92*ba6321feSmrg .ext = &xcb_dri2_id,
93*ba6321feSmrg .opcode = XCB_DRI2_QUERY_VERSION,
94*ba6321feSmrg .isvoid = 0
950d429e5bSmrg };
960d429e5bSmrg
970d429e5bSmrg struct iovec xcb_parts[4];
980d429e5bSmrg xcb_dri2_query_version_cookie_t xcb_ret;
990d429e5bSmrg xcb_dri2_query_version_request_t xcb_out;
1000d429e5bSmrg
1010d429e5bSmrg xcb_out.major_version = major_version;
1020d429e5bSmrg xcb_out.minor_version = minor_version;
1030d429e5bSmrg
1040d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1050d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1060d429e5bSmrg xcb_parts[3].iov_base = 0;
1070d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
108ed2038faSmrg
1090d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1100d429e5bSmrg return xcb_ret;
1110d429e5bSmrg }
1120d429e5bSmrg
1130d429e5bSmrg xcb_dri2_query_version_reply_t *
xcb_dri2_query_version_reply(xcb_connection_t * c,xcb_dri2_query_version_cookie_t cookie,xcb_generic_error_t ** e)114*ba6321feSmrg xcb_dri2_query_version_reply (xcb_connection_t *c,
1150d429e5bSmrg xcb_dri2_query_version_cookie_t cookie /**< */,
116*ba6321feSmrg xcb_generic_error_t **e)
1170d429e5bSmrg {
1180d429e5bSmrg return (xcb_dri2_query_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1190d429e5bSmrg }
1200d429e5bSmrg
121ed2038faSmrg int
xcb_dri2_connect_sizeof(const void * _buffer)122*ba6321feSmrg xcb_dri2_connect_sizeof (const void *_buffer)
123ed2038faSmrg {
124ed2038faSmrg char *xcb_tmp = (char *)_buffer;
125ed2038faSmrg const xcb_dri2_connect_reply_t *_aux = (xcb_dri2_connect_reply_t *)_buffer;
126ed2038faSmrg unsigned int xcb_buffer_len = 0;
127ed2038faSmrg unsigned int xcb_block_len = 0;
128ed2038faSmrg unsigned int xcb_pad = 0;
1296f16f8b8Smrg unsigned int xcb_align_to = 0;
130ed2038faSmrg
131ed2038faSmrg
132ed2038faSmrg xcb_block_len += sizeof(xcb_dri2_connect_reply_t);
133ed2038faSmrg xcb_tmp += xcb_block_len;
1346f16f8b8Smrg xcb_buffer_len += xcb_block_len;
1356f16f8b8Smrg xcb_block_len = 0;
136ed2038faSmrg /* driver_name */
137ed2038faSmrg xcb_block_len += _aux->driver_name_length * sizeof(char);
138ed2038faSmrg xcb_tmp += xcb_block_len;
139ed2038faSmrg xcb_align_to = ALIGNOF(char);
140ed2038faSmrg /* insert padding */
141ed2038faSmrg xcb_pad = -xcb_block_len & (xcb_align_to - 1);
142ed2038faSmrg xcb_buffer_len += xcb_block_len + xcb_pad;
143ed2038faSmrg if (0 != xcb_pad) {
144ed2038faSmrg xcb_tmp += xcb_pad;
145ed2038faSmrg xcb_pad = 0;
146ed2038faSmrg }
147ed2038faSmrg xcb_block_len = 0;
148ed2038faSmrg /* alignment_pad */
149ed2038faSmrg xcb_block_len += (((_aux->driver_name_length + 3) & (~3)) - _aux->driver_name_length) * sizeof(char);
150ed2038faSmrg xcb_tmp += xcb_block_len;
151ed2038faSmrg xcb_align_to = ALIGNOF(char);
152ed2038faSmrg /* insert padding */
153ed2038faSmrg xcb_pad = -xcb_block_len & (xcb_align_to - 1);
154ed2038faSmrg xcb_buffer_len += xcb_block_len + xcb_pad;
155ed2038faSmrg if (0 != xcb_pad) {
156ed2038faSmrg xcb_tmp += xcb_pad;
157ed2038faSmrg xcb_pad = 0;
158ed2038faSmrg }
159ed2038faSmrg xcb_block_len = 0;
160ed2038faSmrg /* device_name */
161ed2038faSmrg xcb_block_len += _aux->device_name_length * sizeof(char);
162ed2038faSmrg xcb_tmp += xcb_block_len;
163ed2038faSmrg xcb_align_to = ALIGNOF(char);
164ed2038faSmrg /* insert padding */
165ed2038faSmrg xcb_pad = -xcb_block_len & (xcb_align_to - 1);
166ed2038faSmrg xcb_buffer_len += xcb_block_len + xcb_pad;
167ed2038faSmrg if (0 != xcb_pad) {
168ed2038faSmrg xcb_tmp += xcb_pad;
169ed2038faSmrg xcb_pad = 0;
170ed2038faSmrg }
171ed2038faSmrg xcb_block_len = 0;
172ed2038faSmrg
173ed2038faSmrg return xcb_buffer_len;
174ed2038faSmrg }
175ed2038faSmrg
1760d429e5bSmrg xcb_dri2_connect_cookie_t
xcb_dri2_connect(xcb_connection_t * c,xcb_window_t window,uint32_t driver_type)177*ba6321feSmrg xcb_dri2_connect (xcb_connection_t *c,
178*ba6321feSmrg xcb_window_t window,
179*ba6321feSmrg uint32_t driver_type)
1800d429e5bSmrg {
1810d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
182*ba6321feSmrg .count = 2,
183*ba6321feSmrg .ext = &xcb_dri2_id,
184*ba6321feSmrg .opcode = XCB_DRI2_CONNECT,
185*ba6321feSmrg .isvoid = 0
1860d429e5bSmrg };
1870d429e5bSmrg
1880d429e5bSmrg struct iovec xcb_parts[4];
1890d429e5bSmrg xcb_dri2_connect_cookie_t xcb_ret;
1900d429e5bSmrg xcb_dri2_connect_request_t xcb_out;
1910d429e5bSmrg
1920d429e5bSmrg xcb_out.window = window;
1930d429e5bSmrg xcb_out.driver_type = driver_type;
1940d429e5bSmrg
1950d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1960d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1970d429e5bSmrg xcb_parts[3].iov_base = 0;
1980d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
199ed2038faSmrg
2000d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2010d429e5bSmrg return xcb_ret;
2020d429e5bSmrg }
2030d429e5bSmrg
2040d429e5bSmrg xcb_dri2_connect_cookie_t
xcb_dri2_connect_unchecked(xcb_connection_t * c,xcb_window_t window,uint32_t driver_type)205*ba6321feSmrg xcb_dri2_connect_unchecked (xcb_connection_t *c,
206*ba6321feSmrg xcb_window_t window,
207*ba6321feSmrg uint32_t driver_type)
2080d429e5bSmrg {
2090d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
210*ba6321feSmrg .count = 2,
211*ba6321feSmrg .ext = &xcb_dri2_id,
212*ba6321feSmrg .opcode = XCB_DRI2_CONNECT,
213*ba6321feSmrg .isvoid = 0
2140d429e5bSmrg };
2150d429e5bSmrg
2160d429e5bSmrg struct iovec xcb_parts[4];
2170d429e5bSmrg xcb_dri2_connect_cookie_t xcb_ret;
2180d429e5bSmrg xcb_dri2_connect_request_t xcb_out;
2190d429e5bSmrg
2200d429e5bSmrg xcb_out.window = window;
2210d429e5bSmrg xcb_out.driver_type = driver_type;
2220d429e5bSmrg
2230d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
2240d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
2250d429e5bSmrg xcb_parts[3].iov_base = 0;
2260d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
227ed2038faSmrg
2280d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2290d429e5bSmrg return xcb_ret;
2300d429e5bSmrg }
2310d429e5bSmrg
2320d429e5bSmrg char *
xcb_dri2_connect_driver_name(const xcb_dri2_connect_reply_t * R)233*ba6321feSmrg xcb_dri2_connect_driver_name (const xcb_dri2_connect_reply_t *R)
2340d429e5bSmrg {
2350d429e5bSmrg return (char *) (R + 1);
2360d429e5bSmrg }
2370d429e5bSmrg
2380d429e5bSmrg int
xcb_dri2_connect_driver_name_length(const xcb_dri2_connect_reply_t * R)239*ba6321feSmrg xcb_dri2_connect_driver_name_length (const xcb_dri2_connect_reply_t *R)
2400d429e5bSmrg {
2410d429e5bSmrg return R->driver_name_length;
2420d429e5bSmrg }
2430d429e5bSmrg
2440d429e5bSmrg xcb_generic_iterator_t
xcb_dri2_connect_driver_name_end(const xcb_dri2_connect_reply_t * R)245*ba6321feSmrg xcb_dri2_connect_driver_name_end (const xcb_dri2_connect_reply_t *R)
2460d429e5bSmrg {
2470d429e5bSmrg xcb_generic_iterator_t i;
2480d429e5bSmrg i.data = ((char *) (R + 1)) + (R->driver_name_length);
2490d429e5bSmrg i.rem = 0;
2500d429e5bSmrg i.index = (char *) i.data - (char *) R;
2510d429e5bSmrg return i;
2520d429e5bSmrg }
2530d429e5bSmrg
254ed2038faSmrg void *
xcb_dri2_connect_alignment_pad(const xcb_dri2_connect_reply_t * R)255*ba6321feSmrg xcb_dri2_connect_alignment_pad (const xcb_dri2_connect_reply_t *R)
256ed2038faSmrg {
257ed2038faSmrg xcb_generic_iterator_t prev = xcb_dri2_connect_driver_name_end(R);
258ed2038faSmrg return (void *) ((char *) prev.data + XCB_TYPE_PAD(char, prev.index) + 0);
259ed2038faSmrg }
260ed2038faSmrg
261ed2038faSmrg int
xcb_dri2_connect_alignment_pad_length(const xcb_dri2_connect_reply_t * R)262*ba6321feSmrg xcb_dri2_connect_alignment_pad_length (const xcb_dri2_connect_reply_t *R)
263ed2038faSmrg {
264ed2038faSmrg return (((R->driver_name_length + 3) & (~3)) - R->driver_name_length);
265ed2038faSmrg }
266ed2038faSmrg
267ed2038faSmrg xcb_generic_iterator_t
xcb_dri2_connect_alignment_pad_end(const xcb_dri2_connect_reply_t * R)268*ba6321feSmrg xcb_dri2_connect_alignment_pad_end (const xcb_dri2_connect_reply_t *R)
269ed2038faSmrg {
270ed2038faSmrg xcb_generic_iterator_t i;
271*ba6321feSmrg xcb_generic_iterator_t prev = xcb_dri2_connect_driver_name_end(R);
272*ba6321feSmrg i.data = ((char *) ((char*) prev.data + XCB_TYPE_PAD(char, prev.index))) + ((((R->driver_name_length + 3) & (~3)) - R->driver_name_length));
273ed2038faSmrg i.rem = 0;
274ed2038faSmrg i.index = (char *) i.data - (char *) R;
275ed2038faSmrg return i;
276ed2038faSmrg }
277ed2038faSmrg
2780d429e5bSmrg char *
xcb_dri2_connect_device_name(const xcb_dri2_connect_reply_t * R)279*ba6321feSmrg xcb_dri2_connect_device_name (const xcb_dri2_connect_reply_t *R)
2800d429e5bSmrg {
281ed2038faSmrg xcb_generic_iterator_t prev = xcb_dri2_connect_alignment_pad_end(R);
2820d429e5bSmrg return (char *) ((char *) prev.data + XCB_TYPE_PAD(char, prev.index) + 0);
2830d429e5bSmrg }
2840d429e5bSmrg
2850d429e5bSmrg int
xcb_dri2_connect_device_name_length(const xcb_dri2_connect_reply_t * R)286*ba6321feSmrg xcb_dri2_connect_device_name_length (const xcb_dri2_connect_reply_t *R)
2870d429e5bSmrg {
2880d429e5bSmrg return R->device_name_length;
2890d429e5bSmrg }
2900d429e5bSmrg
2910d429e5bSmrg xcb_generic_iterator_t
xcb_dri2_connect_device_name_end(const xcb_dri2_connect_reply_t * R)292*ba6321feSmrg xcb_dri2_connect_device_name_end (const xcb_dri2_connect_reply_t *R)
2930d429e5bSmrg {
2940d429e5bSmrg xcb_generic_iterator_t i;
295*ba6321feSmrg xcb_generic_iterator_t prev = xcb_dri2_connect_alignment_pad_end(R);
296*ba6321feSmrg i.data = ((char *) ((char*) prev.data + XCB_TYPE_PAD(char, prev.index))) + (R->device_name_length);
2970d429e5bSmrg i.rem = 0;
2980d429e5bSmrg i.index = (char *) i.data - (char *) R;
2990d429e5bSmrg return i;
3000d429e5bSmrg }
3010d429e5bSmrg
3020d429e5bSmrg xcb_dri2_connect_reply_t *
xcb_dri2_connect_reply(xcb_connection_t * c,xcb_dri2_connect_cookie_t cookie,xcb_generic_error_t ** e)303*ba6321feSmrg xcb_dri2_connect_reply (xcb_connection_t *c,
3040d429e5bSmrg xcb_dri2_connect_cookie_t cookie /**< */,
305*ba6321feSmrg xcb_generic_error_t **e)
3060d429e5bSmrg {
3070d429e5bSmrg return (xcb_dri2_connect_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
3080d429e5bSmrg }
3090d429e5bSmrg
3100d429e5bSmrg xcb_dri2_authenticate_cookie_t
xcb_dri2_authenticate(xcb_connection_t * c,xcb_window_t window,uint32_t magic)311*ba6321feSmrg xcb_dri2_authenticate (xcb_connection_t *c,
312*ba6321feSmrg xcb_window_t window,
313*ba6321feSmrg uint32_t magic)
3140d429e5bSmrg {
3150d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
316*ba6321feSmrg .count = 2,
317*ba6321feSmrg .ext = &xcb_dri2_id,
318*ba6321feSmrg .opcode = XCB_DRI2_AUTHENTICATE,
319*ba6321feSmrg .isvoid = 0
3200d429e5bSmrg };
3210d429e5bSmrg
3220d429e5bSmrg struct iovec xcb_parts[4];
3230d429e5bSmrg xcb_dri2_authenticate_cookie_t xcb_ret;
3240d429e5bSmrg xcb_dri2_authenticate_request_t xcb_out;
3250d429e5bSmrg
3260d429e5bSmrg xcb_out.window = window;
3270d429e5bSmrg xcb_out.magic = magic;
3280d429e5bSmrg
3290d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
3300d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
3310d429e5bSmrg xcb_parts[3].iov_base = 0;
3320d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
333ed2038faSmrg
3340d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
3350d429e5bSmrg return xcb_ret;
3360d429e5bSmrg }
3370d429e5bSmrg
3380d429e5bSmrg xcb_dri2_authenticate_cookie_t
xcb_dri2_authenticate_unchecked(xcb_connection_t * c,xcb_window_t window,uint32_t magic)339*ba6321feSmrg xcb_dri2_authenticate_unchecked (xcb_connection_t *c,
340*ba6321feSmrg xcb_window_t window,
341*ba6321feSmrg uint32_t magic)
3420d429e5bSmrg {
3430d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
344*ba6321feSmrg .count = 2,
345*ba6321feSmrg .ext = &xcb_dri2_id,
346*ba6321feSmrg .opcode = XCB_DRI2_AUTHENTICATE,
347*ba6321feSmrg .isvoid = 0
3480d429e5bSmrg };
3490d429e5bSmrg
3500d429e5bSmrg struct iovec xcb_parts[4];
3510d429e5bSmrg xcb_dri2_authenticate_cookie_t xcb_ret;
3520d429e5bSmrg xcb_dri2_authenticate_request_t xcb_out;
3530d429e5bSmrg
3540d429e5bSmrg xcb_out.window = window;
3550d429e5bSmrg xcb_out.magic = magic;
3560d429e5bSmrg
3570d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
3580d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
3590d429e5bSmrg xcb_parts[3].iov_base = 0;
3600d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
361ed2038faSmrg
3620d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
3630d429e5bSmrg return xcb_ret;
3640d429e5bSmrg }
3650d429e5bSmrg
3660d429e5bSmrg xcb_dri2_authenticate_reply_t *
xcb_dri2_authenticate_reply(xcb_connection_t * c,xcb_dri2_authenticate_cookie_t cookie,xcb_generic_error_t ** e)367*ba6321feSmrg xcb_dri2_authenticate_reply (xcb_connection_t *c,
3680d429e5bSmrg xcb_dri2_authenticate_cookie_t cookie /**< */,
369*ba6321feSmrg xcb_generic_error_t **e)
3700d429e5bSmrg {
3710d429e5bSmrg return (xcb_dri2_authenticate_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
3720d429e5bSmrg }
3730d429e5bSmrg
3740d429e5bSmrg xcb_void_cookie_t
xcb_dri2_create_drawable_checked(xcb_connection_t * c,xcb_drawable_t drawable)375*ba6321feSmrg xcb_dri2_create_drawable_checked (xcb_connection_t *c,
376*ba6321feSmrg xcb_drawable_t drawable)
3770d429e5bSmrg {
3780d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
379*ba6321feSmrg .count = 2,
380*ba6321feSmrg .ext = &xcb_dri2_id,
381*ba6321feSmrg .opcode = XCB_DRI2_CREATE_DRAWABLE,
382*ba6321feSmrg .isvoid = 1
3830d429e5bSmrg };
3840d429e5bSmrg
3850d429e5bSmrg struct iovec xcb_parts[4];
3860d429e5bSmrg xcb_void_cookie_t xcb_ret;
3870d429e5bSmrg xcb_dri2_create_drawable_request_t xcb_out;
3880d429e5bSmrg
3890d429e5bSmrg xcb_out.drawable = drawable;
3900d429e5bSmrg
3910d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
3920d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
3930d429e5bSmrg xcb_parts[3].iov_base = 0;
3940d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
395ed2038faSmrg
3960d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
3970d429e5bSmrg return xcb_ret;
3980d429e5bSmrg }
3990d429e5bSmrg
4000d429e5bSmrg xcb_void_cookie_t
xcb_dri2_create_drawable(xcb_connection_t * c,xcb_drawable_t drawable)401*ba6321feSmrg xcb_dri2_create_drawable (xcb_connection_t *c,
402*ba6321feSmrg xcb_drawable_t drawable)
4030d429e5bSmrg {
4040d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
405*ba6321feSmrg .count = 2,
406*ba6321feSmrg .ext = &xcb_dri2_id,
407*ba6321feSmrg .opcode = XCB_DRI2_CREATE_DRAWABLE,
408*ba6321feSmrg .isvoid = 1
4090d429e5bSmrg };
4100d429e5bSmrg
4110d429e5bSmrg struct iovec xcb_parts[4];
4120d429e5bSmrg xcb_void_cookie_t xcb_ret;
4130d429e5bSmrg xcb_dri2_create_drawable_request_t xcb_out;
4140d429e5bSmrg
4150d429e5bSmrg xcb_out.drawable = drawable;
4160d429e5bSmrg
4170d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
4180d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
4190d429e5bSmrg xcb_parts[3].iov_base = 0;
4200d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
421ed2038faSmrg
4220d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4230d429e5bSmrg return xcb_ret;
4240d429e5bSmrg }
4250d429e5bSmrg
4260d429e5bSmrg xcb_void_cookie_t
xcb_dri2_destroy_drawable_checked(xcb_connection_t * c,xcb_drawable_t drawable)427*ba6321feSmrg xcb_dri2_destroy_drawable_checked (xcb_connection_t *c,
428*ba6321feSmrg xcb_drawable_t drawable)
4290d429e5bSmrg {
4300d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
431*ba6321feSmrg .count = 2,
432*ba6321feSmrg .ext = &xcb_dri2_id,
433*ba6321feSmrg .opcode = XCB_DRI2_DESTROY_DRAWABLE,
434*ba6321feSmrg .isvoid = 1
4350d429e5bSmrg };
4360d429e5bSmrg
4370d429e5bSmrg struct iovec xcb_parts[4];
4380d429e5bSmrg xcb_void_cookie_t xcb_ret;
4390d429e5bSmrg xcb_dri2_destroy_drawable_request_t xcb_out;
4400d429e5bSmrg
4410d429e5bSmrg xcb_out.drawable = drawable;
4420d429e5bSmrg
4430d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
4440d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
4450d429e5bSmrg xcb_parts[3].iov_base = 0;
4460d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
447ed2038faSmrg
4480d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
4490d429e5bSmrg return xcb_ret;
4500d429e5bSmrg }
4510d429e5bSmrg
4520d429e5bSmrg xcb_void_cookie_t
xcb_dri2_destroy_drawable(xcb_connection_t * c,xcb_drawable_t drawable)453*ba6321feSmrg xcb_dri2_destroy_drawable (xcb_connection_t *c,
454*ba6321feSmrg xcb_drawable_t drawable)
4550d429e5bSmrg {
4560d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
457*ba6321feSmrg .count = 2,
458*ba6321feSmrg .ext = &xcb_dri2_id,
459*ba6321feSmrg .opcode = XCB_DRI2_DESTROY_DRAWABLE,
460*ba6321feSmrg .isvoid = 1
4610d429e5bSmrg };
4620d429e5bSmrg
4630d429e5bSmrg struct iovec xcb_parts[4];
4640d429e5bSmrg xcb_void_cookie_t xcb_ret;
4650d429e5bSmrg xcb_dri2_destroy_drawable_request_t xcb_out;
4660d429e5bSmrg
4670d429e5bSmrg xcb_out.drawable = drawable;
4680d429e5bSmrg
4690d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
4700d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
4710d429e5bSmrg xcb_parts[3].iov_base = 0;
4720d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
473ed2038faSmrg
4740d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4750d429e5bSmrg return xcb_ret;
4760d429e5bSmrg }
4770d429e5bSmrg
478ed2038faSmrg int
xcb_dri2_get_buffers_sizeof(const void * _buffer,uint32_t attachments_len)479*ba6321feSmrg xcb_dri2_get_buffers_sizeof (const void *_buffer,
480*ba6321feSmrg uint32_t attachments_len)
481ed2038faSmrg {
482ed2038faSmrg char *xcb_tmp = (char *)_buffer;
483ed2038faSmrg unsigned int xcb_buffer_len = 0;
484ed2038faSmrg unsigned int xcb_block_len = 0;
485ed2038faSmrg unsigned int xcb_pad = 0;
4866f16f8b8Smrg unsigned int xcb_align_to = 0;
487ed2038faSmrg
488ed2038faSmrg
489ed2038faSmrg xcb_block_len += sizeof(xcb_dri2_get_buffers_request_t);
490ed2038faSmrg xcb_tmp += xcb_block_len;
4916f16f8b8Smrg xcb_buffer_len += xcb_block_len;
4926f16f8b8Smrg xcb_block_len = 0;
493ed2038faSmrg /* attachments */
494ed2038faSmrg xcb_block_len += attachments_len * sizeof(uint32_t);
495ed2038faSmrg xcb_tmp += xcb_block_len;
496ed2038faSmrg xcb_align_to = ALIGNOF(uint32_t);
497ed2038faSmrg /* insert padding */
498ed2038faSmrg xcb_pad = -xcb_block_len & (xcb_align_to - 1);
499ed2038faSmrg xcb_buffer_len += xcb_block_len + xcb_pad;
500ed2038faSmrg if (0 != xcb_pad) {
501ed2038faSmrg xcb_tmp += xcb_pad;
502ed2038faSmrg xcb_pad = 0;
503ed2038faSmrg }
504ed2038faSmrg xcb_block_len = 0;
505ed2038faSmrg
506ed2038faSmrg return xcb_buffer_len;
507ed2038faSmrg }
508ed2038faSmrg
5090d429e5bSmrg xcb_dri2_get_buffers_cookie_t
xcb_dri2_get_buffers(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t count,uint32_t attachments_len,const uint32_t * attachments)510*ba6321feSmrg xcb_dri2_get_buffers (xcb_connection_t *c,
511*ba6321feSmrg xcb_drawable_t drawable,
512*ba6321feSmrg uint32_t count,
513*ba6321feSmrg uint32_t attachments_len,
514*ba6321feSmrg const uint32_t *attachments)
5150d429e5bSmrg {
5160d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
517*ba6321feSmrg .count = 4,
518*ba6321feSmrg .ext = &xcb_dri2_id,
519*ba6321feSmrg .opcode = XCB_DRI2_GET_BUFFERS,
520*ba6321feSmrg .isvoid = 0
5210d429e5bSmrg };
5220d429e5bSmrg
5230d429e5bSmrg struct iovec xcb_parts[6];
5240d429e5bSmrg xcb_dri2_get_buffers_cookie_t xcb_ret;
5250d429e5bSmrg xcb_dri2_get_buffers_request_t xcb_out;
5260d429e5bSmrg
5270d429e5bSmrg xcb_out.drawable = drawable;
5280d429e5bSmrg xcb_out.count = count;
5290d429e5bSmrg
5300d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
5310d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
5320d429e5bSmrg xcb_parts[3].iov_base = 0;
5330d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
534ed2038faSmrg /* uint32_t attachments */
5350d429e5bSmrg xcb_parts[4].iov_base = (char *) attachments;
5360d429e5bSmrg xcb_parts[4].iov_len = attachments_len * sizeof(uint32_t);
5370d429e5bSmrg xcb_parts[5].iov_base = 0;
5380d429e5bSmrg xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
539ed2038faSmrg
5400d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
5410d429e5bSmrg return xcb_ret;
5420d429e5bSmrg }
5430d429e5bSmrg
5440d429e5bSmrg xcb_dri2_get_buffers_cookie_t
xcb_dri2_get_buffers_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t count,uint32_t attachments_len,const uint32_t * attachments)545*ba6321feSmrg xcb_dri2_get_buffers_unchecked (xcb_connection_t *c,
546*ba6321feSmrg xcb_drawable_t drawable,
547*ba6321feSmrg uint32_t count,
548*ba6321feSmrg uint32_t attachments_len,
549*ba6321feSmrg const uint32_t *attachments)
5500d429e5bSmrg {
5510d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
552*ba6321feSmrg .count = 4,
553*ba6321feSmrg .ext = &xcb_dri2_id,
554*ba6321feSmrg .opcode = XCB_DRI2_GET_BUFFERS,
555*ba6321feSmrg .isvoid = 0
5560d429e5bSmrg };
5570d429e5bSmrg
5580d429e5bSmrg struct iovec xcb_parts[6];
5590d429e5bSmrg xcb_dri2_get_buffers_cookie_t xcb_ret;
5600d429e5bSmrg xcb_dri2_get_buffers_request_t xcb_out;
5610d429e5bSmrg
5620d429e5bSmrg xcb_out.drawable = drawable;
5630d429e5bSmrg xcb_out.count = count;
5640d429e5bSmrg
5650d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
5660d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
5670d429e5bSmrg xcb_parts[3].iov_base = 0;
5680d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
569ed2038faSmrg /* uint32_t attachments */
5700d429e5bSmrg xcb_parts[4].iov_base = (char *) attachments;
5710d429e5bSmrg xcb_parts[4].iov_len = attachments_len * sizeof(uint32_t);
5720d429e5bSmrg xcb_parts[5].iov_base = 0;
5730d429e5bSmrg xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
574ed2038faSmrg
5750d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
5760d429e5bSmrg return xcb_ret;
5770d429e5bSmrg }
5780d429e5bSmrg
5790d429e5bSmrg xcb_dri2_dri2_buffer_t *
xcb_dri2_get_buffers_buffers(const xcb_dri2_get_buffers_reply_t * R)580*ba6321feSmrg xcb_dri2_get_buffers_buffers (const xcb_dri2_get_buffers_reply_t *R)
5810d429e5bSmrg {
5820d429e5bSmrg return (xcb_dri2_dri2_buffer_t *) (R + 1);
5830d429e5bSmrg }
5840d429e5bSmrg
5850d429e5bSmrg int
xcb_dri2_get_buffers_buffers_length(const xcb_dri2_get_buffers_reply_t * R)586*ba6321feSmrg xcb_dri2_get_buffers_buffers_length (const xcb_dri2_get_buffers_reply_t *R)
5870d429e5bSmrg {
5880d429e5bSmrg return R->count;
5890d429e5bSmrg }
5900d429e5bSmrg
5910d429e5bSmrg xcb_dri2_dri2_buffer_iterator_t
xcb_dri2_get_buffers_buffers_iterator(const xcb_dri2_get_buffers_reply_t * R)592*ba6321feSmrg xcb_dri2_get_buffers_buffers_iterator (const xcb_dri2_get_buffers_reply_t *R)
5930d429e5bSmrg {
5940d429e5bSmrg xcb_dri2_dri2_buffer_iterator_t i;
5950d429e5bSmrg i.data = (xcb_dri2_dri2_buffer_t *) (R + 1);
5960d429e5bSmrg i.rem = R->count;
5970d429e5bSmrg i.index = (char *) i.data - (char *) R;
5980d429e5bSmrg return i;
5990d429e5bSmrg }
6000d429e5bSmrg
6010d429e5bSmrg xcb_dri2_get_buffers_reply_t *
xcb_dri2_get_buffers_reply(xcb_connection_t * c,xcb_dri2_get_buffers_cookie_t cookie,xcb_generic_error_t ** e)602*ba6321feSmrg xcb_dri2_get_buffers_reply (xcb_connection_t *c,
6030d429e5bSmrg xcb_dri2_get_buffers_cookie_t cookie /**< */,
604*ba6321feSmrg xcb_generic_error_t **e)
6050d429e5bSmrg {
6060d429e5bSmrg return (xcb_dri2_get_buffers_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
6070d429e5bSmrg }
6080d429e5bSmrg
6090d429e5bSmrg xcb_dri2_copy_region_cookie_t
xcb_dri2_copy_region(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t region,uint32_t dest,uint32_t src)610*ba6321feSmrg xcb_dri2_copy_region (xcb_connection_t *c,
611*ba6321feSmrg xcb_drawable_t drawable,
612*ba6321feSmrg uint32_t region,
613*ba6321feSmrg uint32_t dest,
614*ba6321feSmrg uint32_t src)
6150d429e5bSmrg {
6160d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
617*ba6321feSmrg .count = 2,
618*ba6321feSmrg .ext = &xcb_dri2_id,
619*ba6321feSmrg .opcode = XCB_DRI2_COPY_REGION,
620*ba6321feSmrg .isvoid = 0
6210d429e5bSmrg };
6220d429e5bSmrg
6230d429e5bSmrg struct iovec xcb_parts[4];
6240d429e5bSmrg xcb_dri2_copy_region_cookie_t xcb_ret;
6250d429e5bSmrg xcb_dri2_copy_region_request_t xcb_out;
6260d429e5bSmrg
6270d429e5bSmrg xcb_out.drawable = drawable;
6280d429e5bSmrg xcb_out.region = region;
6290d429e5bSmrg xcb_out.dest = dest;
6300d429e5bSmrg xcb_out.src = src;
6310d429e5bSmrg
6320d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
6330d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
6340d429e5bSmrg xcb_parts[3].iov_base = 0;
6350d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
636ed2038faSmrg
6370d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
6380d429e5bSmrg return xcb_ret;
6390d429e5bSmrg }
6400d429e5bSmrg
6410d429e5bSmrg xcb_dri2_copy_region_cookie_t
xcb_dri2_copy_region_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t region,uint32_t dest,uint32_t src)642*ba6321feSmrg xcb_dri2_copy_region_unchecked (xcb_connection_t *c,
643*ba6321feSmrg xcb_drawable_t drawable,
644*ba6321feSmrg uint32_t region,
645*ba6321feSmrg uint32_t dest,
646*ba6321feSmrg uint32_t src)
6470d429e5bSmrg {
6480d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
649*ba6321feSmrg .count = 2,
650*ba6321feSmrg .ext = &xcb_dri2_id,
651*ba6321feSmrg .opcode = XCB_DRI2_COPY_REGION,
652*ba6321feSmrg .isvoid = 0
6530d429e5bSmrg };
6540d429e5bSmrg
6550d429e5bSmrg struct iovec xcb_parts[4];
6560d429e5bSmrg xcb_dri2_copy_region_cookie_t xcb_ret;
6570d429e5bSmrg xcb_dri2_copy_region_request_t xcb_out;
6580d429e5bSmrg
6590d429e5bSmrg xcb_out.drawable = drawable;
6600d429e5bSmrg xcb_out.region = region;
6610d429e5bSmrg xcb_out.dest = dest;
6620d429e5bSmrg xcb_out.src = src;
6630d429e5bSmrg
6640d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
6650d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
6660d429e5bSmrg xcb_parts[3].iov_base = 0;
6670d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
668ed2038faSmrg
6690d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
6700d429e5bSmrg return xcb_ret;
6710d429e5bSmrg }
6720d429e5bSmrg
6730d429e5bSmrg xcb_dri2_copy_region_reply_t *
xcb_dri2_copy_region_reply(xcb_connection_t * c,xcb_dri2_copy_region_cookie_t cookie,xcb_generic_error_t ** e)674*ba6321feSmrg xcb_dri2_copy_region_reply (xcb_connection_t *c,
6750d429e5bSmrg xcb_dri2_copy_region_cookie_t cookie /**< */,
676*ba6321feSmrg xcb_generic_error_t **e)
6770d429e5bSmrg {
6780d429e5bSmrg return (xcb_dri2_copy_region_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
6790d429e5bSmrg }
6800d429e5bSmrg
681ed2038faSmrg int
xcb_dri2_get_buffers_with_format_sizeof(const void * _buffer,uint32_t attachments_len)682*ba6321feSmrg xcb_dri2_get_buffers_with_format_sizeof (const void *_buffer,
683*ba6321feSmrg uint32_t attachments_len)
684ed2038faSmrg {
685ed2038faSmrg char *xcb_tmp = (char *)_buffer;
686ed2038faSmrg unsigned int xcb_buffer_len = 0;
687ed2038faSmrg unsigned int xcb_block_len = 0;
688ed2038faSmrg unsigned int xcb_pad = 0;
6896f16f8b8Smrg unsigned int xcb_align_to = 0;
690ed2038faSmrg
691ed2038faSmrg
692ed2038faSmrg xcb_block_len += sizeof(xcb_dri2_get_buffers_with_format_request_t);
693ed2038faSmrg xcb_tmp += xcb_block_len;
6946f16f8b8Smrg xcb_buffer_len += xcb_block_len;
6956f16f8b8Smrg xcb_block_len = 0;
696ed2038faSmrg /* attachments */
697ed2038faSmrg xcb_block_len += attachments_len * sizeof(xcb_dri2_attach_format_t);
698ed2038faSmrg xcb_tmp += xcb_block_len;
699ed2038faSmrg xcb_align_to = ALIGNOF(xcb_dri2_attach_format_t);
700ed2038faSmrg /* insert padding */
701ed2038faSmrg xcb_pad = -xcb_block_len & (xcb_align_to - 1);
702ed2038faSmrg xcb_buffer_len += xcb_block_len + xcb_pad;
703ed2038faSmrg if (0 != xcb_pad) {
704ed2038faSmrg xcb_tmp += xcb_pad;
705ed2038faSmrg xcb_pad = 0;
706ed2038faSmrg }
707ed2038faSmrg xcb_block_len = 0;
708ed2038faSmrg
709ed2038faSmrg return xcb_buffer_len;
710ed2038faSmrg }
711ed2038faSmrg
7120d429e5bSmrg xcb_dri2_get_buffers_with_format_cookie_t
xcb_dri2_get_buffers_with_format(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t count,uint32_t attachments_len,const xcb_dri2_attach_format_t * attachments)713*ba6321feSmrg xcb_dri2_get_buffers_with_format (xcb_connection_t *c,
714*ba6321feSmrg xcb_drawable_t drawable,
715*ba6321feSmrg uint32_t count,
716*ba6321feSmrg uint32_t attachments_len,
717*ba6321feSmrg const xcb_dri2_attach_format_t *attachments)
7180d429e5bSmrg {
7190d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
720*ba6321feSmrg .count = 4,
721*ba6321feSmrg .ext = &xcb_dri2_id,
722*ba6321feSmrg .opcode = XCB_DRI2_GET_BUFFERS_WITH_FORMAT,
723*ba6321feSmrg .isvoid = 0
7240d429e5bSmrg };
7250d429e5bSmrg
7260d429e5bSmrg struct iovec xcb_parts[6];
7270d429e5bSmrg xcb_dri2_get_buffers_with_format_cookie_t xcb_ret;
7280d429e5bSmrg xcb_dri2_get_buffers_with_format_request_t xcb_out;
7290d429e5bSmrg
7300d429e5bSmrg xcb_out.drawable = drawable;
7310d429e5bSmrg xcb_out.count = count;
7320d429e5bSmrg
7330d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
7340d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
7350d429e5bSmrg xcb_parts[3].iov_base = 0;
7360d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
737ed2038faSmrg /* xcb_dri2_attach_format_t attachments */
7380d429e5bSmrg xcb_parts[4].iov_base = (char *) attachments;
7390d429e5bSmrg xcb_parts[4].iov_len = attachments_len * sizeof(xcb_dri2_attach_format_t);
7400d429e5bSmrg xcb_parts[5].iov_base = 0;
7410d429e5bSmrg xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
742ed2038faSmrg
7430d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
7440d429e5bSmrg return xcb_ret;
7450d429e5bSmrg }
7460d429e5bSmrg
7470d429e5bSmrg xcb_dri2_get_buffers_with_format_cookie_t
xcb_dri2_get_buffers_with_format_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t count,uint32_t attachments_len,const xcb_dri2_attach_format_t * attachments)748*ba6321feSmrg xcb_dri2_get_buffers_with_format_unchecked (xcb_connection_t *c,
749*ba6321feSmrg xcb_drawable_t drawable,
750*ba6321feSmrg uint32_t count,
751*ba6321feSmrg uint32_t attachments_len,
752*ba6321feSmrg const xcb_dri2_attach_format_t *attachments)
7530d429e5bSmrg {
7540d429e5bSmrg static const xcb_protocol_request_t xcb_req = {
755*ba6321feSmrg .count = 4,
756*ba6321feSmrg .ext = &xcb_dri2_id,
757*ba6321feSmrg .opcode = XCB_DRI2_GET_BUFFERS_WITH_FORMAT,
758*ba6321feSmrg .isvoid = 0
7590d429e5bSmrg };
7600d429e5bSmrg
7610d429e5bSmrg struct iovec xcb_parts[6];
7620d429e5bSmrg xcb_dri2_get_buffers_with_format_cookie_t xcb_ret;
7630d429e5bSmrg xcb_dri2_get_buffers_with_format_request_t xcb_out;
7640d429e5bSmrg
7650d429e5bSmrg xcb_out.drawable = drawable;
7660d429e5bSmrg xcb_out.count = count;
7670d429e5bSmrg
7680d429e5bSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
7690d429e5bSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
7700d429e5bSmrg xcb_parts[3].iov_base = 0;
7710d429e5bSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
772ed2038faSmrg /* xcb_dri2_attach_format_t attachments */
7730d429e5bSmrg xcb_parts[4].iov_base = (char *) attachments;
7740d429e5bSmrg xcb_parts[4].iov_len = attachments_len * sizeof(xcb_dri2_attach_format_t);
7750d429e5bSmrg xcb_parts[5].iov_base = 0;
7760d429e5bSmrg xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
777ed2038faSmrg
7780d429e5bSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
7790d429e5bSmrg return xcb_ret;
7800d429e5bSmrg }
7810d429e5bSmrg
7820d429e5bSmrg xcb_dri2_dri2_buffer_t *
xcb_dri2_get_buffers_with_format_buffers(const xcb_dri2_get_buffers_with_format_reply_t * R)783*ba6321feSmrg xcb_dri2_get_buffers_with_format_buffers (const xcb_dri2_get_buffers_with_format_reply_t *R)
7840d429e5bSmrg {
7850d429e5bSmrg return (xcb_dri2_dri2_buffer_t *) (R + 1);
7860d429e5bSmrg }
7870d429e5bSmrg
7880d429e5bSmrg int
xcb_dri2_get_buffers_with_format_buffers_length(const xcb_dri2_get_buffers_with_format_reply_t * R)789*ba6321feSmrg xcb_dri2_get_buffers_with_format_buffers_length (const xcb_dri2_get_buffers_with_format_reply_t *R)
7900d429e5bSmrg {
7910d429e5bSmrg return R->count;
7920d429e5bSmrg }
7930d429e5bSmrg
7940d429e5bSmrg xcb_dri2_dri2_buffer_iterator_t
xcb_dri2_get_buffers_with_format_buffers_iterator(const xcb_dri2_get_buffers_with_format_reply_t * R)795*ba6321feSmrg xcb_dri2_get_buffers_with_format_buffers_iterator (const xcb_dri2_get_buffers_with_format_reply_t *R)
7960d429e5bSmrg {
7970d429e5bSmrg xcb_dri2_dri2_buffer_iterator_t i;
7980d429e5bSmrg i.data = (xcb_dri2_dri2_buffer_t *) (R + 1);
7990d429e5bSmrg i.rem = R->count;
8000d429e5bSmrg i.index = (char *) i.data - (char *) R;
8010d429e5bSmrg return i;
8020d429e5bSmrg }
8030d429e5bSmrg
8040d429e5bSmrg xcb_dri2_get_buffers_with_format_reply_t *
xcb_dri2_get_buffers_with_format_reply(xcb_connection_t * c,xcb_dri2_get_buffers_with_format_cookie_t cookie,xcb_generic_error_t ** e)805*ba6321feSmrg xcb_dri2_get_buffers_with_format_reply (xcb_connection_t *c,
8060d429e5bSmrg xcb_dri2_get_buffers_with_format_cookie_t cookie /**< */,
807*ba6321feSmrg xcb_generic_error_t **e)
8080d429e5bSmrg {
8090d429e5bSmrg return (xcb_dri2_get_buffers_with_format_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
8100d429e5bSmrg }
8110d429e5bSmrg
812ed2038faSmrg xcb_dri2_swap_buffers_cookie_t
xcb_dri2_swap_buffers(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t target_msc_hi,uint32_t target_msc_lo,uint32_t divisor_hi,uint32_t divisor_lo,uint32_t remainder_hi,uint32_t remainder_lo)813*ba6321feSmrg xcb_dri2_swap_buffers (xcb_connection_t *c,
814*ba6321feSmrg xcb_drawable_t drawable,
815*ba6321feSmrg uint32_t target_msc_hi,
816*ba6321feSmrg uint32_t target_msc_lo,
817*ba6321feSmrg uint32_t divisor_hi,
818*ba6321feSmrg uint32_t divisor_lo,
819*ba6321feSmrg uint32_t remainder_hi,
820*ba6321feSmrg uint32_t remainder_lo)
821ed2038faSmrg {
822ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
823*ba6321feSmrg .count = 2,
824*ba6321feSmrg .ext = &xcb_dri2_id,
825*ba6321feSmrg .opcode = XCB_DRI2_SWAP_BUFFERS,
826*ba6321feSmrg .isvoid = 0
827ed2038faSmrg };
828ed2038faSmrg
829ed2038faSmrg struct iovec xcb_parts[4];
830ed2038faSmrg xcb_dri2_swap_buffers_cookie_t xcb_ret;
831ed2038faSmrg xcb_dri2_swap_buffers_request_t xcb_out;
832ed2038faSmrg
833ed2038faSmrg xcb_out.drawable = drawable;
834ed2038faSmrg xcb_out.target_msc_hi = target_msc_hi;
835ed2038faSmrg xcb_out.target_msc_lo = target_msc_lo;
836ed2038faSmrg xcb_out.divisor_hi = divisor_hi;
837ed2038faSmrg xcb_out.divisor_lo = divisor_lo;
838ed2038faSmrg xcb_out.remainder_hi = remainder_hi;
839ed2038faSmrg xcb_out.remainder_lo = remainder_lo;
840ed2038faSmrg
841ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
842ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
843ed2038faSmrg xcb_parts[3].iov_base = 0;
844ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
845ed2038faSmrg
846ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
847ed2038faSmrg return xcb_ret;
848ed2038faSmrg }
849ed2038faSmrg
850ed2038faSmrg xcb_dri2_swap_buffers_cookie_t
xcb_dri2_swap_buffers_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t target_msc_hi,uint32_t target_msc_lo,uint32_t divisor_hi,uint32_t divisor_lo,uint32_t remainder_hi,uint32_t remainder_lo)851*ba6321feSmrg xcb_dri2_swap_buffers_unchecked (xcb_connection_t *c,
852*ba6321feSmrg xcb_drawable_t drawable,
853*ba6321feSmrg uint32_t target_msc_hi,
854*ba6321feSmrg uint32_t target_msc_lo,
855*ba6321feSmrg uint32_t divisor_hi,
856*ba6321feSmrg uint32_t divisor_lo,
857*ba6321feSmrg uint32_t remainder_hi,
858*ba6321feSmrg uint32_t remainder_lo)
859ed2038faSmrg {
860ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
861*ba6321feSmrg .count = 2,
862*ba6321feSmrg .ext = &xcb_dri2_id,
863*ba6321feSmrg .opcode = XCB_DRI2_SWAP_BUFFERS,
864*ba6321feSmrg .isvoid = 0
865ed2038faSmrg };
866ed2038faSmrg
867ed2038faSmrg struct iovec xcb_parts[4];
868ed2038faSmrg xcb_dri2_swap_buffers_cookie_t xcb_ret;
869ed2038faSmrg xcb_dri2_swap_buffers_request_t xcb_out;
870ed2038faSmrg
871ed2038faSmrg xcb_out.drawable = drawable;
872ed2038faSmrg xcb_out.target_msc_hi = target_msc_hi;
873ed2038faSmrg xcb_out.target_msc_lo = target_msc_lo;
874ed2038faSmrg xcb_out.divisor_hi = divisor_hi;
875ed2038faSmrg xcb_out.divisor_lo = divisor_lo;
876ed2038faSmrg xcb_out.remainder_hi = remainder_hi;
877ed2038faSmrg xcb_out.remainder_lo = remainder_lo;
878ed2038faSmrg
879ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
880ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
881ed2038faSmrg xcb_parts[3].iov_base = 0;
882ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
883ed2038faSmrg
884ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
885ed2038faSmrg return xcb_ret;
886ed2038faSmrg }
887ed2038faSmrg
888ed2038faSmrg xcb_dri2_swap_buffers_reply_t *
xcb_dri2_swap_buffers_reply(xcb_connection_t * c,xcb_dri2_swap_buffers_cookie_t cookie,xcb_generic_error_t ** e)889*ba6321feSmrg xcb_dri2_swap_buffers_reply (xcb_connection_t *c,
890ed2038faSmrg xcb_dri2_swap_buffers_cookie_t cookie /**< */,
891*ba6321feSmrg xcb_generic_error_t **e)
892ed2038faSmrg {
893ed2038faSmrg return (xcb_dri2_swap_buffers_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
894ed2038faSmrg }
895ed2038faSmrg
896ed2038faSmrg xcb_dri2_get_msc_cookie_t
xcb_dri2_get_msc(xcb_connection_t * c,xcb_drawable_t drawable)897*ba6321feSmrg xcb_dri2_get_msc (xcb_connection_t *c,
898*ba6321feSmrg xcb_drawable_t drawable)
899ed2038faSmrg {
900ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
901*ba6321feSmrg .count = 2,
902*ba6321feSmrg .ext = &xcb_dri2_id,
903*ba6321feSmrg .opcode = XCB_DRI2_GET_MSC,
904*ba6321feSmrg .isvoid = 0
905ed2038faSmrg };
906ed2038faSmrg
907ed2038faSmrg struct iovec xcb_parts[4];
908ed2038faSmrg xcb_dri2_get_msc_cookie_t xcb_ret;
909ed2038faSmrg xcb_dri2_get_msc_request_t xcb_out;
910ed2038faSmrg
911ed2038faSmrg xcb_out.drawable = drawable;
912ed2038faSmrg
913ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
914ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
915ed2038faSmrg xcb_parts[3].iov_base = 0;
916ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
917ed2038faSmrg
918ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
919ed2038faSmrg return xcb_ret;
920ed2038faSmrg }
921ed2038faSmrg
922ed2038faSmrg xcb_dri2_get_msc_cookie_t
xcb_dri2_get_msc_unchecked(xcb_connection_t * c,xcb_drawable_t drawable)923*ba6321feSmrg xcb_dri2_get_msc_unchecked (xcb_connection_t *c,
924*ba6321feSmrg xcb_drawable_t drawable)
925ed2038faSmrg {
926ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
927*ba6321feSmrg .count = 2,
928*ba6321feSmrg .ext = &xcb_dri2_id,
929*ba6321feSmrg .opcode = XCB_DRI2_GET_MSC,
930*ba6321feSmrg .isvoid = 0
931ed2038faSmrg };
932ed2038faSmrg
933ed2038faSmrg struct iovec xcb_parts[4];
934ed2038faSmrg xcb_dri2_get_msc_cookie_t xcb_ret;
935ed2038faSmrg xcb_dri2_get_msc_request_t xcb_out;
936ed2038faSmrg
937ed2038faSmrg xcb_out.drawable = drawable;
938ed2038faSmrg
939ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
940ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
941ed2038faSmrg xcb_parts[3].iov_base = 0;
942ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
943ed2038faSmrg
944ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
945ed2038faSmrg return xcb_ret;
946ed2038faSmrg }
947ed2038faSmrg
948ed2038faSmrg xcb_dri2_get_msc_reply_t *
xcb_dri2_get_msc_reply(xcb_connection_t * c,xcb_dri2_get_msc_cookie_t cookie,xcb_generic_error_t ** e)949*ba6321feSmrg xcb_dri2_get_msc_reply (xcb_connection_t *c,
950ed2038faSmrg xcb_dri2_get_msc_cookie_t cookie /**< */,
951*ba6321feSmrg xcb_generic_error_t **e)
952ed2038faSmrg {
953ed2038faSmrg return (xcb_dri2_get_msc_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
954ed2038faSmrg }
955ed2038faSmrg
956ed2038faSmrg xcb_dri2_wait_msc_cookie_t
xcb_dri2_wait_msc(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t target_msc_hi,uint32_t target_msc_lo,uint32_t divisor_hi,uint32_t divisor_lo,uint32_t remainder_hi,uint32_t remainder_lo)957*ba6321feSmrg xcb_dri2_wait_msc (xcb_connection_t *c,
958*ba6321feSmrg xcb_drawable_t drawable,
959*ba6321feSmrg uint32_t target_msc_hi,
960*ba6321feSmrg uint32_t target_msc_lo,
961*ba6321feSmrg uint32_t divisor_hi,
962*ba6321feSmrg uint32_t divisor_lo,
963*ba6321feSmrg uint32_t remainder_hi,
964*ba6321feSmrg uint32_t remainder_lo)
965ed2038faSmrg {
966ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
967*ba6321feSmrg .count = 2,
968*ba6321feSmrg .ext = &xcb_dri2_id,
969*ba6321feSmrg .opcode = XCB_DRI2_WAIT_MSC,
970*ba6321feSmrg .isvoid = 0
971ed2038faSmrg };
972ed2038faSmrg
973ed2038faSmrg struct iovec xcb_parts[4];
974ed2038faSmrg xcb_dri2_wait_msc_cookie_t xcb_ret;
975ed2038faSmrg xcb_dri2_wait_msc_request_t xcb_out;
976ed2038faSmrg
977ed2038faSmrg xcb_out.drawable = drawable;
978ed2038faSmrg xcb_out.target_msc_hi = target_msc_hi;
979ed2038faSmrg xcb_out.target_msc_lo = target_msc_lo;
980ed2038faSmrg xcb_out.divisor_hi = divisor_hi;
981ed2038faSmrg xcb_out.divisor_lo = divisor_lo;
982ed2038faSmrg xcb_out.remainder_hi = remainder_hi;
983ed2038faSmrg xcb_out.remainder_lo = remainder_lo;
984ed2038faSmrg
985ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
986ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
987ed2038faSmrg xcb_parts[3].iov_base = 0;
988ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
989ed2038faSmrg
990ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
991ed2038faSmrg return xcb_ret;
992ed2038faSmrg }
993ed2038faSmrg
994ed2038faSmrg xcb_dri2_wait_msc_cookie_t
xcb_dri2_wait_msc_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t target_msc_hi,uint32_t target_msc_lo,uint32_t divisor_hi,uint32_t divisor_lo,uint32_t remainder_hi,uint32_t remainder_lo)995*ba6321feSmrg xcb_dri2_wait_msc_unchecked (xcb_connection_t *c,
996*ba6321feSmrg xcb_drawable_t drawable,
997*ba6321feSmrg uint32_t target_msc_hi,
998*ba6321feSmrg uint32_t target_msc_lo,
999*ba6321feSmrg uint32_t divisor_hi,
1000*ba6321feSmrg uint32_t divisor_lo,
1001*ba6321feSmrg uint32_t remainder_hi,
1002*ba6321feSmrg uint32_t remainder_lo)
1003ed2038faSmrg {
1004ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
1005*ba6321feSmrg .count = 2,
1006*ba6321feSmrg .ext = &xcb_dri2_id,
1007*ba6321feSmrg .opcode = XCB_DRI2_WAIT_MSC,
1008*ba6321feSmrg .isvoid = 0
1009ed2038faSmrg };
1010ed2038faSmrg
1011ed2038faSmrg struct iovec xcb_parts[4];
1012ed2038faSmrg xcb_dri2_wait_msc_cookie_t xcb_ret;
1013ed2038faSmrg xcb_dri2_wait_msc_request_t xcb_out;
1014ed2038faSmrg
1015ed2038faSmrg xcb_out.drawable = drawable;
1016ed2038faSmrg xcb_out.target_msc_hi = target_msc_hi;
1017ed2038faSmrg xcb_out.target_msc_lo = target_msc_lo;
1018ed2038faSmrg xcb_out.divisor_hi = divisor_hi;
1019ed2038faSmrg xcb_out.divisor_lo = divisor_lo;
1020ed2038faSmrg xcb_out.remainder_hi = remainder_hi;
1021ed2038faSmrg xcb_out.remainder_lo = remainder_lo;
1022ed2038faSmrg
1023ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1024ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1025ed2038faSmrg xcb_parts[3].iov_base = 0;
1026ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1027ed2038faSmrg
1028ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1029ed2038faSmrg return xcb_ret;
1030ed2038faSmrg }
1031ed2038faSmrg
1032ed2038faSmrg xcb_dri2_wait_msc_reply_t *
xcb_dri2_wait_msc_reply(xcb_connection_t * c,xcb_dri2_wait_msc_cookie_t cookie,xcb_generic_error_t ** e)1033*ba6321feSmrg xcb_dri2_wait_msc_reply (xcb_connection_t *c,
1034ed2038faSmrg xcb_dri2_wait_msc_cookie_t cookie /**< */,
1035*ba6321feSmrg xcb_generic_error_t **e)
1036ed2038faSmrg {
1037ed2038faSmrg return (xcb_dri2_wait_msc_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1038ed2038faSmrg }
1039ed2038faSmrg
1040ed2038faSmrg xcb_dri2_wait_sbc_cookie_t
xcb_dri2_wait_sbc(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t target_sbc_hi,uint32_t target_sbc_lo)1041*ba6321feSmrg xcb_dri2_wait_sbc (xcb_connection_t *c,
1042*ba6321feSmrg xcb_drawable_t drawable,
1043*ba6321feSmrg uint32_t target_sbc_hi,
1044*ba6321feSmrg uint32_t target_sbc_lo)
1045ed2038faSmrg {
1046ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
1047*ba6321feSmrg .count = 2,
1048*ba6321feSmrg .ext = &xcb_dri2_id,
1049*ba6321feSmrg .opcode = XCB_DRI2_WAIT_SBC,
1050*ba6321feSmrg .isvoid = 0
1051ed2038faSmrg };
1052ed2038faSmrg
1053ed2038faSmrg struct iovec xcb_parts[4];
1054ed2038faSmrg xcb_dri2_wait_sbc_cookie_t xcb_ret;
1055ed2038faSmrg xcb_dri2_wait_sbc_request_t xcb_out;
1056ed2038faSmrg
1057ed2038faSmrg xcb_out.drawable = drawable;
1058ed2038faSmrg xcb_out.target_sbc_hi = target_sbc_hi;
1059ed2038faSmrg xcb_out.target_sbc_lo = target_sbc_lo;
1060ed2038faSmrg
1061ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1062ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1063ed2038faSmrg xcb_parts[3].iov_base = 0;
1064ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1065ed2038faSmrg
1066ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1067ed2038faSmrg return xcb_ret;
1068ed2038faSmrg }
1069ed2038faSmrg
1070ed2038faSmrg xcb_dri2_wait_sbc_cookie_t
xcb_dri2_wait_sbc_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t target_sbc_hi,uint32_t target_sbc_lo)1071*ba6321feSmrg xcb_dri2_wait_sbc_unchecked (xcb_connection_t *c,
1072*ba6321feSmrg xcb_drawable_t drawable,
1073*ba6321feSmrg uint32_t target_sbc_hi,
1074*ba6321feSmrg uint32_t target_sbc_lo)
1075ed2038faSmrg {
1076ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
1077*ba6321feSmrg .count = 2,
1078*ba6321feSmrg .ext = &xcb_dri2_id,
1079*ba6321feSmrg .opcode = XCB_DRI2_WAIT_SBC,
1080*ba6321feSmrg .isvoid = 0
1081ed2038faSmrg };
1082ed2038faSmrg
1083ed2038faSmrg struct iovec xcb_parts[4];
1084ed2038faSmrg xcb_dri2_wait_sbc_cookie_t xcb_ret;
1085ed2038faSmrg xcb_dri2_wait_sbc_request_t xcb_out;
1086ed2038faSmrg
1087ed2038faSmrg xcb_out.drawable = drawable;
1088ed2038faSmrg xcb_out.target_sbc_hi = target_sbc_hi;
1089ed2038faSmrg xcb_out.target_sbc_lo = target_sbc_lo;
1090ed2038faSmrg
1091ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1092ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1093ed2038faSmrg xcb_parts[3].iov_base = 0;
1094ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1095ed2038faSmrg
1096ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1097ed2038faSmrg return xcb_ret;
1098ed2038faSmrg }
1099ed2038faSmrg
1100ed2038faSmrg xcb_dri2_wait_sbc_reply_t *
xcb_dri2_wait_sbc_reply(xcb_connection_t * c,xcb_dri2_wait_sbc_cookie_t cookie,xcb_generic_error_t ** e)1101*ba6321feSmrg xcb_dri2_wait_sbc_reply (xcb_connection_t *c,
1102ed2038faSmrg xcb_dri2_wait_sbc_cookie_t cookie /**< */,
1103*ba6321feSmrg xcb_generic_error_t **e)
1104ed2038faSmrg {
1105ed2038faSmrg return (xcb_dri2_wait_sbc_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1106ed2038faSmrg }
1107ed2038faSmrg
1108ed2038faSmrg xcb_void_cookie_t
xcb_dri2_swap_interval_checked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t interval)1109*ba6321feSmrg xcb_dri2_swap_interval_checked (xcb_connection_t *c,
1110*ba6321feSmrg xcb_drawable_t drawable,
1111*ba6321feSmrg uint32_t interval)
1112ed2038faSmrg {
1113ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
1114*ba6321feSmrg .count = 2,
1115*ba6321feSmrg .ext = &xcb_dri2_id,
1116*ba6321feSmrg .opcode = XCB_DRI2_SWAP_INTERVAL,
1117*ba6321feSmrg .isvoid = 1
1118ed2038faSmrg };
1119ed2038faSmrg
1120ed2038faSmrg struct iovec xcb_parts[4];
1121ed2038faSmrg xcb_void_cookie_t xcb_ret;
1122ed2038faSmrg xcb_dri2_swap_interval_request_t xcb_out;
1123ed2038faSmrg
1124ed2038faSmrg xcb_out.drawable = drawable;
1125ed2038faSmrg xcb_out.interval = interval;
1126ed2038faSmrg
1127ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1128ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1129ed2038faSmrg xcb_parts[3].iov_base = 0;
1130ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1131ed2038faSmrg
1132ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1133ed2038faSmrg return xcb_ret;
1134ed2038faSmrg }
1135ed2038faSmrg
1136ed2038faSmrg xcb_void_cookie_t
xcb_dri2_swap_interval(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t interval)1137*ba6321feSmrg xcb_dri2_swap_interval (xcb_connection_t *c,
1138*ba6321feSmrg xcb_drawable_t drawable,
1139*ba6321feSmrg uint32_t interval)
1140ed2038faSmrg {
1141ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
1142*ba6321feSmrg .count = 2,
1143*ba6321feSmrg .ext = &xcb_dri2_id,
1144*ba6321feSmrg .opcode = XCB_DRI2_SWAP_INTERVAL,
1145*ba6321feSmrg .isvoid = 1
1146ed2038faSmrg };
1147ed2038faSmrg
1148ed2038faSmrg struct iovec xcb_parts[4];
1149ed2038faSmrg xcb_void_cookie_t xcb_ret;
1150ed2038faSmrg xcb_dri2_swap_interval_request_t xcb_out;
1151ed2038faSmrg
1152ed2038faSmrg xcb_out.drawable = drawable;
1153ed2038faSmrg xcb_out.interval = interval;
1154ed2038faSmrg
1155ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1156ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1157ed2038faSmrg xcb_parts[3].iov_base = 0;
1158ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1159ed2038faSmrg
1160ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1161ed2038faSmrg return xcb_ret;
1162ed2038faSmrg }
1163ed2038faSmrg
1164ed2038faSmrg xcb_dri2_get_param_cookie_t
xcb_dri2_get_param(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t param)1165*ba6321feSmrg xcb_dri2_get_param (xcb_connection_t *c,
1166*ba6321feSmrg xcb_drawable_t drawable,
1167*ba6321feSmrg uint32_t param)
1168ed2038faSmrg {
1169ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
1170*ba6321feSmrg .count = 2,
1171*ba6321feSmrg .ext = &xcb_dri2_id,
1172*ba6321feSmrg .opcode = XCB_DRI2_GET_PARAM,
1173*ba6321feSmrg .isvoid = 0
1174ed2038faSmrg };
1175ed2038faSmrg
1176ed2038faSmrg struct iovec xcb_parts[4];
1177ed2038faSmrg xcb_dri2_get_param_cookie_t xcb_ret;
1178ed2038faSmrg xcb_dri2_get_param_request_t xcb_out;
1179ed2038faSmrg
1180ed2038faSmrg xcb_out.drawable = drawable;
1181ed2038faSmrg xcb_out.param = param;
1182ed2038faSmrg
1183ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1184ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1185ed2038faSmrg xcb_parts[3].iov_base = 0;
1186ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1187ed2038faSmrg
1188ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1189ed2038faSmrg return xcb_ret;
1190ed2038faSmrg }
1191ed2038faSmrg
1192ed2038faSmrg xcb_dri2_get_param_cookie_t
xcb_dri2_get_param_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,uint32_t param)1193*ba6321feSmrg xcb_dri2_get_param_unchecked (xcb_connection_t *c,
1194*ba6321feSmrg xcb_drawable_t drawable,
1195*ba6321feSmrg uint32_t param)
1196ed2038faSmrg {
1197ed2038faSmrg static const xcb_protocol_request_t xcb_req = {
1198*ba6321feSmrg .count = 2,
1199*ba6321feSmrg .ext = &xcb_dri2_id,
1200*ba6321feSmrg .opcode = XCB_DRI2_GET_PARAM,
1201*ba6321feSmrg .isvoid = 0
1202ed2038faSmrg };
1203ed2038faSmrg
1204ed2038faSmrg struct iovec xcb_parts[4];
1205ed2038faSmrg xcb_dri2_get_param_cookie_t xcb_ret;
1206ed2038faSmrg xcb_dri2_get_param_request_t xcb_out;
1207ed2038faSmrg
1208ed2038faSmrg xcb_out.drawable = drawable;
1209ed2038faSmrg xcb_out.param = param;
1210ed2038faSmrg
1211ed2038faSmrg xcb_parts[2].iov_base = (char *) &xcb_out;
1212ed2038faSmrg xcb_parts[2].iov_len = sizeof(xcb_out);
1213ed2038faSmrg xcb_parts[3].iov_base = 0;
1214ed2038faSmrg xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1215ed2038faSmrg
1216ed2038faSmrg xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1217ed2038faSmrg return xcb_ret;
1218ed2038faSmrg }
1219ed2038faSmrg
1220ed2038faSmrg xcb_dri2_get_param_reply_t *
xcb_dri2_get_param_reply(xcb_connection_t * c,xcb_dri2_get_param_cookie_t cookie,xcb_generic_error_t ** e)1221*ba6321feSmrg xcb_dri2_get_param_reply (xcb_connection_t *c,
1222ed2038faSmrg xcb_dri2_get_param_cookie_t cookie /**< */,
1223*ba6321feSmrg xcb_generic_error_t **e)
1224ed2038faSmrg {
1225ed2038faSmrg return (xcb_dri2_get_param_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1226ed2038faSmrg }
1227ed2038faSmrg
1228