1 /* 2 * This file generated automatically from dri3.xml by c_client.py. 3 * Edit at your peril. 4 */ 5 6 #ifdef HAVE_CONFIG_H 7 #include "config.h" 8 #endif 9 #include <stdlib.h> 10 #include <string.h> 11 #include <assert.h> 12 #include <stddef.h> /* for offsetof() */ 13 #include "xcbext.h" 14 #include "dri3.h" 15 16 #define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member) 17 #include "xproto.h" 18 19 xcb_extension_t xcb_dri3_id = { "DRI3", 0 }; 20 21 xcb_dri3_query_version_cookie_t 22 xcb_dri3_query_version (xcb_connection_t *c, 23 uint32_t major_version, 24 uint32_t minor_version) 25 { 26 static const xcb_protocol_request_t xcb_req = { 27 .count = 2, 28 .ext = &xcb_dri3_id, 29 .opcode = XCB_DRI3_QUERY_VERSION, 30 .isvoid = 0 31 }; 32 33 struct iovec xcb_parts[4]; 34 xcb_dri3_query_version_cookie_t xcb_ret; 35 xcb_dri3_query_version_request_t xcb_out; 36 37 xcb_out.major_version = major_version; 38 xcb_out.minor_version = minor_version; 39 40 xcb_parts[2].iov_base = (char *) &xcb_out; 41 xcb_parts[2].iov_len = sizeof(xcb_out); 42 xcb_parts[3].iov_base = 0; 43 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 44 45 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req); 46 return xcb_ret; 47 } 48 49 xcb_dri3_query_version_cookie_t 50 xcb_dri3_query_version_unchecked (xcb_connection_t *c, 51 uint32_t major_version, 52 uint32_t minor_version) 53 { 54 static const xcb_protocol_request_t xcb_req = { 55 .count = 2, 56 .ext = &xcb_dri3_id, 57 .opcode = XCB_DRI3_QUERY_VERSION, 58 .isvoid = 0 59 }; 60 61 struct iovec xcb_parts[4]; 62 xcb_dri3_query_version_cookie_t xcb_ret; 63 xcb_dri3_query_version_request_t xcb_out; 64 65 xcb_out.major_version = major_version; 66 xcb_out.minor_version = minor_version; 67 68 xcb_parts[2].iov_base = (char *) &xcb_out; 69 xcb_parts[2].iov_len = sizeof(xcb_out); 70 xcb_parts[3].iov_base = 0; 71 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 72 73 xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req); 74 return xcb_ret; 75 } 76 77 xcb_dri3_query_version_reply_t * 78 xcb_dri3_query_version_reply (xcb_connection_t *c, 79 xcb_dri3_query_version_cookie_t cookie /**< */, 80 xcb_generic_error_t **e) 81 { 82 return (xcb_dri3_query_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e); 83 } 84 85 xcb_dri3_open_cookie_t 86 xcb_dri3_open (xcb_connection_t *c, 87 xcb_drawable_t drawable, 88 uint32_t provider) 89 { 90 static const xcb_protocol_request_t xcb_req = { 91 .count = 2, 92 .ext = &xcb_dri3_id, 93 .opcode = XCB_DRI3_OPEN, 94 .isvoid = 0 95 }; 96 97 struct iovec xcb_parts[4]; 98 xcb_dri3_open_cookie_t xcb_ret; 99 xcb_dri3_open_request_t xcb_out; 100 101 xcb_out.drawable = drawable; 102 xcb_out.provider = provider; 103 104 xcb_parts[2].iov_base = (char *) &xcb_out; 105 xcb_parts[2].iov_len = sizeof(xcb_out); 106 xcb_parts[3].iov_base = 0; 107 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 108 109 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED|XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 110 return xcb_ret; 111 } 112 113 xcb_dri3_open_cookie_t 114 xcb_dri3_open_unchecked (xcb_connection_t *c, 115 xcb_drawable_t drawable, 116 uint32_t provider) 117 { 118 static const xcb_protocol_request_t xcb_req = { 119 .count = 2, 120 .ext = &xcb_dri3_id, 121 .opcode = XCB_DRI3_OPEN, 122 .isvoid = 0 123 }; 124 125 struct iovec xcb_parts[4]; 126 xcb_dri3_open_cookie_t xcb_ret; 127 xcb_dri3_open_request_t xcb_out; 128 129 xcb_out.drawable = drawable; 130 xcb_out.provider = provider; 131 132 xcb_parts[2].iov_base = (char *) &xcb_out; 133 xcb_parts[2].iov_len = sizeof(xcb_out); 134 xcb_parts[3].iov_base = 0; 135 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 136 137 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 138 return xcb_ret; 139 } 140 141 xcb_dri3_open_reply_t * 142 xcb_dri3_open_reply (xcb_connection_t *c, 143 xcb_dri3_open_cookie_t cookie /**< */, 144 xcb_generic_error_t **e) 145 { 146 return (xcb_dri3_open_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e); 147 } 148 149 int * 150 xcb_dri3_open_reply_fds (xcb_connection_t *c /**< */, 151 xcb_dri3_open_reply_t *reply) 152 { 153 return xcb_get_reply_fds(c, reply, sizeof(xcb_dri3_open_reply_t) + 4 * reply->length); 154 } 155 156 xcb_void_cookie_t 157 xcb_dri3_pixmap_from_buffer_checked (xcb_connection_t *c, 158 xcb_pixmap_t pixmap, 159 xcb_drawable_t drawable, 160 uint32_t size, 161 uint16_t width, 162 uint16_t height, 163 uint16_t stride, 164 uint8_t depth, 165 uint8_t bpp, 166 int32_t pixmap_fd) 167 { 168 static const xcb_protocol_request_t xcb_req = { 169 .count = 2, 170 .ext = &xcb_dri3_id, 171 .opcode = XCB_DRI3_PIXMAP_FROM_BUFFER, 172 .isvoid = 1 173 }; 174 175 struct iovec xcb_parts[4]; 176 xcb_void_cookie_t xcb_ret; 177 xcb_dri3_pixmap_from_buffer_request_t xcb_out; 178 int fds[1]; 179 int fd_index = 0; 180 181 xcb_out.pixmap = pixmap; 182 xcb_out.drawable = drawable; 183 xcb_out.size = size; 184 xcb_out.width = width; 185 xcb_out.height = height; 186 xcb_out.stride = stride; 187 xcb_out.depth = depth; 188 xcb_out.bpp = bpp; 189 190 xcb_parts[2].iov_base = (char *) &xcb_out; 191 xcb_parts[2].iov_len = sizeof(xcb_out); 192 xcb_parts[3].iov_base = 0; 193 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 194 195 fds[fd_index++] = pixmap_fd; 196 xcb_ret.sequence = xcb_send_request_with_fds(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req, 1, fds); 197 return xcb_ret; 198 } 199 200 xcb_void_cookie_t 201 xcb_dri3_pixmap_from_buffer (xcb_connection_t *c, 202 xcb_pixmap_t pixmap, 203 xcb_drawable_t drawable, 204 uint32_t size, 205 uint16_t width, 206 uint16_t height, 207 uint16_t stride, 208 uint8_t depth, 209 uint8_t bpp, 210 int32_t pixmap_fd) 211 { 212 static const xcb_protocol_request_t xcb_req = { 213 .count = 2, 214 .ext = &xcb_dri3_id, 215 .opcode = XCB_DRI3_PIXMAP_FROM_BUFFER, 216 .isvoid = 1 217 }; 218 219 struct iovec xcb_parts[4]; 220 xcb_void_cookie_t xcb_ret; 221 xcb_dri3_pixmap_from_buffer_request_t xcb_out; 222 int fds[1]; 223 int fd_index = 0; 224 225 xcb_out.pixmap = pixmap; 226 xcb_out.drawable = drawable; 227 xcb_out.size = size; 228 xcb_out.width = width; 229 xcb_out.height = height; 230 xcb_out.stride = stride; 231 xcb_out.depth = depth; 232 xcb_out.bpp = bpp; 233 234 xcb_parts[2].iov_base = (char *) &xcb_out; 235 xcb_parts[2].iov_len = sizeof(xcb_out); 236 xcb_parts[3].iov_base = 0; 237 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 238 239 fds[fd_index++] = pixmap_fd; 240 xcb_ret.sequence = xcb_send_request_with_fds(c, 0, xcb_parts + 2, &xcb_req, 1, fds); 241 return xcb_ret; 242 } 243 244 xcb_dri3_buffer_from_pixmap_cookie_t 245 xcb_dri3_buffer_from_pixmap (xcb_connection_t *c, 246 xcb_pixmap_t pixmap) 247 { 248 static const xcb_protocol_request_t xcb_req = { 249 .count = 2, 250 .ext = &xcb_dri3_id, 251 .opcode = XCB_DRI3_BUFFER_FROM_PIXMAP, 252 .isvoid = 0 253 }; 254 255 struct iovec xcb_parts[4]; 256 xcb_dri3_buffer_from_pixmap_cookie_t xcb_ret; 257 xcb_dri3_buffer_from_pixmap_request_t xcb_out; 258 259 xcb_out.pixmap = pixmap; 260 261 xcb_parts[2].iov_base = (char *) &xcb_out; 262 xcb_parts[2].iov_len = sizeof(xcb_out); 263 xcb_parts[3].iov_base = 0; 264 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 265 266 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED|XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 267 return xcb_ret; 268 } 269 270 xcb_dri3_buffer_from_pixmap_cookie_t 271 xcb_dri3_buffer_from_pixmap_unchecked (xcb_connection_t *c, 272 xcb_pixmap_t pixmap) 273 { 274 static const xcb_protocol_request_t xcb_req = { 275 .count = 2, 276 .ext = &xcb_dri3_id, 277 .opcode = XCB_DRI3_BUFFER_FROM_PIXMAP, 278 .isvoid = 0 279 }; 280 281 struct iovec xcb_parts[4]; 282 xcb_dri3_buffer_from_pixmap_cookie_t xcb_ret; 283 xcb_dri3_buffer_from_pixmap_request_t xcb_out; 284 285 xcb_out.pixmap = pixmap; 286 287 xcb_parts[2].iov_base = (char *) &xcb_out; 288 xcb_parts[2].iov_len = sizeof(xcb_out); 289 xcb_parts[3].iov_base = 0; 290 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 291 292 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 293 return xcb_ret; 294 } 295 296 xcb_dri3_buffer_from_pixmap_reply_t * 297 xcb_dri3_buffer_from_pixmap_reply (xcb_connection_t *c, 298 xcb_dri3_buffer_from_pixmap_cookie_t cookie /**< */, 299 xcb_generic_error_t **e) 300 { 301 return (xcb_dri3_buffer_from_pixmap_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e); 302 } 303 304 int * 305 xcb_dri3_buffer_from_pixmap_reply_fds (xcb_connection_t *c /**< */, 306 xcb_dri3_buffer_from_pixmap_reply_t *reply) 307 { 308 return xcb_get_reply_fds(c, reply, sizeof(xcb_dri3_buffer_from_pixmap_reply_t) + 4 * reply->length); 309 } 310 311 xcb_void_cookie_t 312 xcb_dri3_fence_from_fd_checked (xcb_connection_t *c, 313 xcb_drawable_t drawable, 314 uint32_t fence, 315 uint8_t initially_triggered, 316 int32_t fence_fd) 317 { 318 static const xcb_protocol_request_t xcb_req = { 319 .count = 2, 320 .ext = &xcb_dri3_id, 321 .opcode = XCB_DRI3_FENCE_FROM_FD, 322 .isvoid = 1 323 }; 324 325 struct iovec xcb_parts[4]; 326 xcb_void_cookie_t xcb_ret; 327 xcb_dri3_fence_from_fd_request_t xcb_out; 328 int fds[1]; 329 int fd_index = 0; 330 331 xcb_out.drawable = drawable; 332 xcb_out.fence = fence; 333 xcb_out.initially_triggered = initially_triggered; 334 memset(xcb_out.pad0, 0, 3); 335 336 xcb_parts[2].iov_base = (char *) &xcb_out; 337 xcb_parts[2].iov_len = sizeof(xcb_out); 338 xcb_parts[3].iov_base = 0; 339 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 340 341 fds[fd_index++] = fence_fd; 342 xcb_ret.sequence = xcb_send_request_with_fds(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req, 1, fds); 343 return xcb_ret; 344 } 345 346 xcb_void_cookie_t 347 xcb_dri3_fence_from_fd (xcb_connection_t *c, 348 xcb_drawable_t drawable, 349 uint32_t fence, 350 uint8_t initially_triggered, 351 int32_t fence_fd) 352 { 353 static const xcb_protocol_request_t xcb_req = { 354 .count = 2, 355 .ext = &xcb_dri3_id, 356 .opcode = XCB_DRI3_FENCE_FROM_FD, 357 .isvoid = 1 358 }; 359 360 struct iovec xcb_parts[4]; 361 xcb_void_cookie_t xcb_ret; 362 xcb_dri3_fence_from_fd_request_t xcb_out; 363 int fds[1]; 364 int fd_index = 0; 365 366 xcb_out.drawable = drawable; 367 xcb_out.fence = fence; 368 xcb_out.initially_triggered = initially_triggered; 369 memset(xcb_out.pad0, 0, 3); 370 371 xcb_parts[2].iov_base = (char *) &xcb_out; 372 xcb_parts[2].iov_len = sizeof(xcb_out); 373 xcb_parts[3].iov_base = 0; 374 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 375 376 fds[fd_index++] = fence_fd; 377 xcb_ret.sequence = xcb_send_request_with_fds(c, 0, xcb_parts + 2, &xcb_req, 1, fds); 378 return xcb_ret; 379 } 380 381 xcb_dri3_fd_from_fence_cookie_t 382 xcb_dri3_fd_from_fence (xcb_connection_t *c, 383 xcb_drawable_t drawable, 384 uint32_t fence) 385 { 386 static const xcb_protocol_request_t xcb_req = { 387 .count = 2, 388 .ext = &xcb_dri3_id, 389 .opcode = XCB_DRI3_FD_FROM_FENCE, 390 .isvoid = 0 391 }; 392 393 struct iovec xcb_parts[4]; 394 xcb_dri3_fd_from_fence_cookie_t xcb_ret; 395 xcb_dri3_fd_from_fence_request_t xcb_out; 396 397 xcb_out.drawable = drawable; 398 xcb_out.fence = fence; 399 400 xcb_parts[2].iov_base = (char *) &xcb_out; 401 xcb_parts[2].iov_len = sizeof(xcb_out); 402 xcb_parts[3].iov_base = 0; 403 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 404 405 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED|XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 406 return xcb_ret; 407 } 408 409 xcb_dri3_fd_from_fence_cookie_t 410 xcb_dri3_fd_from_fence_unchecked (xcb_connection_t *c, 411 xcb_drawable_t drawable, 412 uint32_t fence) 413 { 414 static const xcb_protocol_request_t xcb_req = { 415 .count = 2, 416 .ext = &xcb_dri3_id, 417 .opcode = XCB_DRI3_FD_FROM_FENCE, 418 .isvoid = 0 419 }; 420 421 struct iovec xcb_parts[4]; 422 xcb_dri3_fd_from_fence_cookie_t xcb_ret; 423 xcb_dri3_fd_from_fence_request_t xcb_out; 424 425 xcb_out.drawable = drawable; 426 xcb_out.fence = fence; 427 428 xcb_parts[2].iov_base = (char *) &xcb_out; 429 xcb_parts[2].iov_len = sizeof(xcb_out); 430 xcb_parts[3].iov_base = 0; 431 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 432 433 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 434 return xcb_ret; 435 } 436 437 xcb_dri3_fd_from_fence_reply_t * 438 xcb_dri3_fd_from_fence_reply (xcb_connection_t *c, 439 xcb_dri3_fd_from_fence_cookie_t cookie /**< */, 440 xcb_generic_error_t **e) 441 { 442 return (xcb_dri3_fd_from_fence_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e); 443 } 444 445 int * 446 xcb_dri3_fd_from_fence_reply_fds (xcb_connection_t *c /**< */, 447 xcb_dri3_fd_from_fence_reply_t *reply) 448 { 449 return xcb_get_reply_fds(c, reply, sizeof(xcb_dri3_fd_from_fence_reply_t) + 4 * reply->length); 450 } 451 452 int 453 xcb_dri3_get_supported_modifiers_sizeof (const void *_buffer) 454 { 455 char *xcb_tmp = (char *)_buffer; 456 const xcb_dri3_get_supported_modifiers_reply_t *_aux = (xcb_dri3_get_supported_modifiers_reply_t *)_buffer; 457 unsigned int xcb_buffer_len = 0; 458 unsigned int xcb_block_len = 0; 459 unsigned int xcb_pad = 0; 460 unsigned int xcb_align_to = 0; 461 462 463 xcb_block_len += sizeof(xcb_dri3_get_supported_modifiers_reply_t); 464 xcb_tmp += xcb_block_len; 465 xcb_buffer_len += xcb_block_len; 466 xcb_block_len = 0; 467 /* window_modifiers */ 468 xcb_block_len += _aux->num_window_modifiers * sizeof(uint64_t); 469 xcb_tmp += xcb_block_len; 470 xcb_align_to = ALIGNOF(uint64_t); 471 /* insert padding */ 472 xcb_pad = -xcb_block_len & (xcb_align_to - 1); 473 xcb_buffer_len += xcb_block_len + xcb_pad; 474 if (0 != xcb_pad) { 475 xcb_tmp += xcb_pad; 476 xcb_pad = 0; 477 } 478 xcb_block_len = 0; 479 /* screen_modifiers */ 480 xcb_block_len += _aux->num_screen_modifiers * sizeof(uint64_t); 481 xcb_tmp += xcb_block_len; 482 xcb_align_to = ALIGNOF(uint64_t); 483 /* insert padding */ 484 xcb_pad = -xcb_block_len & (xcb_align_to - 1); 485 xcb_buffer_len += xcb_block_len + xcb_pad; 486 if (0 != xcb_pad) { 487 xcb_tmp += xcb_pad; 488 xcb_pad = 0; 489 } 490 xcb_block_len = 0; 491 492 return xcb_buffer_len; 493 } 494 495 xcb_dri3_get_supported_modifiers_cookie_t 496 xcb_dri3_get_supported_modifiers (xcb_connection_t *c, 497 uint32_t window, 498 uint8_t depth, 499 uint8_t bpp) 500 { 501 static const xcb_protocol_request_t xcb_req = { 502 .count = 2, 503 .ext = &xcb_dri3_id, 504 .opcode = XCB_DRI3_GET_SUPPORTED_MODIFIERS, 505 .isvoid = 0 506 }; 507 508 struct iovec xcb_parts[4]; 509 xcb_dri3_get_supported_modifiers_cookie_t xcb_ret; 510 xcb_dri3_get_supported_modifiers_request_t xcb_out; 511 512 xcb_out.window = window; 513 xcb_out.depth = depth; 514 xcb_out.bpp = bpp; 515 memset(xcb_out.pad0, 0, 2); 516 517 xcb_parts[2].iov_base = (char *) &xcb_out; 518 xcb_parts[2].iov_len = sizeof(xcb_out); 519 xcb_parts[3].iov_base = 0; 520 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 521 522 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req); 523 return xcb_ret; 524 } 525 526 xcb_dri3_get_supported_modifiers_cookie_t 527 xcb_dri3_get_supported_modifiers_unchecked (xcb_connection_t *c, 528 uint32_t window, 529 uint8_t depth, 530 uint8_t bpp) 531 { 532 static const xcb_protocol_request_t xcb_req = { 533 .count = 2, 534 .ext = &xcb_dri3_id, 535 .opcode = XCB_DRI3_GET_SUPPORTED_MODIFIERS, 536 .isvoid = 0 537 }; 538 539 struct iovec xcb_parts[4]; 540 xcb_dri3_get_supported_modifiers_cookie_t xcb_ret; 541 xcb_dri3_get_supported_modifiers_request_t xcb_out; 542 543 xcb_out.window = window; 544 xcb_out.depth = depth; 545 xcb_out.bpp = bpp; 546 memset(xcb_out.pad0, 0, 2); 547 548 xcb_parts[2].iov_base = (char *) &xcb_out; 549 xcb_parts[2].iov_len = sizeof(xcb_out); 550 xcb_parts[3].iov_base = 0; 551 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 552 553 xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req); 554 return xcb_ret; 555 } 556 557 uint64_t * 558 xcb_dri3_get_supported_modifiers_window_modifiers (const xcb_dri3_get_supported_modifiers_reply_t *R) 559 { 560 return (uint64_t *) (R + 1); 561 } 562 563 int 564 xcb_dri3_get_supported_modifiers_window_modifiers_length (const xcb_dri3_get_supported_modifiers_reply_t *R) 565 { 566 return R->num_window_modifiers; 567 } 568 569 xcb_generic_iterator_t 570 xcb_dri3_get_supported_modifiers_window_modifiers_end (const xcb_dri3_get_supported_modifiers_reply_t *R) 571 { 572 xcb_generic_iterator_t i; 573 i.data = ((uint64_t *) (R + 1)) + (R->num_window_modifiers); 574 i.rem = 0; 575 i.index = (char *) i.data - (char *) R; 576 return i; 577 } 578 579 uint64_t * 580 xcb_dri3_get_supported_modifiers_screen_modifiers (const xcb_dri3_get_supported_modifiers_reply_t *R) 581 { 582 xcb_generic_iterator_t prev = xcb_dri3_get_supported_modifiers_window_modifiers_end(R); 583 return (uint64_t *) ((char *) prev.data + XCB_TYPE_PAD(uint64_t, prev.index) + 0); 584 } 585 586 int 587 xcb_dri3_get_supported_modifiers_screen_modifiers_length (const xcb_dri3_get_supported_modifiers_reply_t *R) 588 { 589 return R->num_screen_modifiers; 590 } 591 592 xcb_generic_iterator_t 593 xcb_dri3_get_supported_modifiers_screen_modifiers_end (const xcb_dri3_get_supported_modifiers_reply_t *R) 594 { 595 xcb_generic_iterator_t i; 596 xcb_generic_iterator_t prev = xcb_dri3_get_supported_modifiers_window_modifiers_end(R); 597 i.data = ((uint64_t *) ((char*) prev.data + XCB_TYPE_PAD(uint64_t, prev.index))) + (R->num_screen_modifiers); 598 i.rem = 0; 599 i.index = (char *) i.data - (char *) R; 600 return i; 601 } 602 603 xcb_dri3_get_supported_modifiers_reply_t * 604 xcb_dri3_get_supported_modifiers_reply (xcb_connection_t *c, 605 xcb_dri3_get_supported_modifiers_cookie_t cookie /**< */, 606 xcb_generic_error_t **e) 607 { 608 return (xcb_dri3_get_supported_modifiers_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e); 609 } 610 611 xcb_void_cookie_t 612 xcb_dri3_pixmap_from_buffers_checked (xcb_connection_t *c, 613 xcb_pixmap_t pixmap, 614 xcb_window_t window, 615 uint8_t num_buffers, 616 uint16_t width, 617 uint16_t height, 618 uint32_t stride0, 619 uint32_t offset0, 620 uint32_t stride1, 621 uint32_t offset1, 622 uint32_t stride2, 623 uint32_t offset2, 624 uint32_t stride3, 625 uint32_t offset3, 626 uint8_t depth, 627 uint8_t bpp, 628 uint64_t modifier, 629 const int32_t *buffers) 630 { 631 static const xcb_protocol_request_t xcb_req = { 632 .count = 2, 633 .ext = &xcb_dri3_id, 634 .opcode = XCB_DRI3_PIXMAP_FROM_BUFFERS, 635 .isvoid = 1 636 }; 637 638 struct iovec xcb_parts[4]; 639 xcb_void_cookie_t xcb_ret; 640 xcb_dri3_pixmap_from_buffers_request_t xcb_out; 641 unsigned int i; 642 int fds[num_buffers]; 643 int fd_index = 0; 644 645 xcb_out.pixmap = pixmap; 646 xcb_out.window = window; 647 xcb_out.num_buffers = num_buffers; 648 memset(xcb_out.pad0, 0, 3); 649 xcb_out.width = width; 650 xcb_out.height = height; 651 xcb_out.stride0 = stride0; 652 xcb_out.offset0 = offset0; 653 xcb_out.stride1 = stride1; 654 xcb_out.offset1 = offset1; 655 xcb_out.stride2 = stride2; 656 xcb_out.offset2 = offset2; 657 xcb_out.stride3 = stride3; 658 xcb_out.offset3 = offset3; 659 xcb_out.depth = depth; 660 xcb_out.bpp = bpp; 661 memset(xcb_out.pad1, 0, 2); 662 xcb_out.modifier = modifier; 663 664 xcb_parts[2].iov_base = (char *) &xcb_out; 665 xcb_parts[2].iov_len = sizeof(xcb_out); 666 xcb_parts[3].iov_base = 0; 667 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 668 669 for (i = 0; i < num_buffers; i++) 670 fds[fd_index++] = buffers[i]; 671 xcb_ret.sequence = xcb_send_request_with_fds(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req, num_buffers, fds); 672 return xcb_ret; 673 } 674 675 xcb_void_cookie_t 676 xcb_dri3_pixmap_from_buffers (xcb_connection_t *c, 677 xcb_pixmap_t pixmap, 678 xcb_window_t window, 679 uint8_t num_buffers, 680 uint16_t width, 681 uint16_t height, 682 uint32_t stride0, 683 uint32_t offset0, 684 uint32_t stride1, 685 uint32_t offset1, 686 uint32_t stride2, 687 uint32_t offset2, 688 uint32_t stride3, 689 uint32_t offset3, 690 uint8_t depth, 691 uint8_t bpp, 692 uint64_t modifier, 693 const int32_t *buffers) 694 { 695 static const xcb_protocol_request_t xcb_req = { 696 .count = 2, 697 .ext = &xcb_dri3_id, 698 .opcode = XCB_DRI3_PIXMAP_FROM_BUFFERS, 699 .isvoid = 1 700 }; 701 702 struct iovec xcb_parts[4]; 703 xcb_void_cookie_t xcb_ret; 704 xcb_dri3_pixmap_from_buffers_request_t xcb_out; 705 unsigned int i; 706 int fds[num_buffers]; 707 int fd_index = 0; 708 709 xcb_out.pixmap = pixmap; 710 xcb_out.window = window; 711 xcb_out.num_buffers = num_buffers; 712 memset(xcb_out.pad0, 0, 3); 713 xcb_out.width = width; 714 xcb_out.height = height; 715 xcb_out.stride0 = stride0; 716 xcb_out.offset0 = offset0; 717 xcb_out.stride1 = stride1; 718 xcb_out.offset1 = offset1; 719 xcb_out.stride2 = stride2; 720 xcb_out.offset2 = offset2; 721 xcb_out.stride3 = stride3; 722 xcb_out.offset3 = offset3; 723 xcb_out.depth = depth; 724 xcb_out.bpp = bpp; 725 memset(xcb_out.pad1, 0, 2); 726 xcb_out.modifier = modifier; 727 728 xcb_parts[2].iov_base = (char *) &xcb_out; 729 xcb_parts[2].iov_len = sizeof(xcb_out); 730 xcb_parts[3].iov_base = 0; 731 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 732 733 for (i = 0; i < num_buffers; i++) 734 fds[fd_index++] = buffers[i]; 735 xcb_ret.sequence = xcb_send_request_with_fds(c, 0, xcb_parts + 2, &xcb_req, num_buffers, fds); 736 return xcb_ret; 737 } 738 739 int 740 xcb_dri3_buffers_from_pixmap_sizeof (const void *_buffer, 741 int32_t buffers) 742 { 743 char *xcb_tmp = (char *)_buffer; 744 const xcb_dri3_buffers_from_pixmap_reply_t *_aux = (xcb_dri3_buffers_from_pixmap_reply_t *)_buffer; 745 unsigned int xcb_buffer_len = 0; 746 unsigned int xcb_block_len = 0; 747 unsigned int xcb_pad = 0; 748 unsigned int xcb_align_to = 0; 749 750 751 xcb_block_len += sizeof(xcb_dri3_buffers_from_pixmap_reply_t); 752 xcb_tmp += xcb_block_len; 753 xcb_buffer_len += xcb_block_len; 754 xcb_block_len = 0; 755 /* strides */ 756 xcb_block_len += _aux->nfd * sizeof(uint32_t); 757 xcb_tmp += xcb_block_len; 758 xcb_align_to = ALIGNOF(uint32_t); 759 /* insert padding */ 760 xcb_pad = -xcb_block_len & (xcb_align_to - 1); 761 xcb_buffer_len += xcb_block_len + xcb_pad; 762 if (0 != xcb_pad) { 763 xcb_tmp += xcb_pad; 764 xcb_pad = 0; 765 } 766 xcb_block_len = 0; 767 /* offsets */ 768 xcb_block_len += _aux->nfd * sizeof(uint32_t); 769 xcb_tmp += xcb_block_len; 770 xcb_align_to = ALIGNOF(uint32_t); 771 /* insert padding */ 772 xcb_pad = -xcb_block_len & (xcb_align_to - 1); 773 xcb_buffer_len += xcb_block_len + xcb_pad; 774 if (0 != xcb_pad) { 775 xcb_tmp += xcb_pad; 776 xcb_pad = 0; 777 } 778 xcb_block_len = 0; 779 780 return xcb_buffer_len; 781 } 782 783 xcb_dri3_buffers_from_pixmap_cookie_t 784 xcb_dri3_buffers_from_pixmap (xcb_connection_t *c, 785 xcb_pixmap_t pixmap) 786 { 787 static const xcb_protocol_request_t xcb_req = { 788 .count = 2, 789 .ext = &xcb_dri3_id, 790 .opcode = XCB_DRI3_BUFFERS_FROM_PIXMAP, 791 .isvoid = 0 792 }; 793 794 struct iovec xcb_parts[4]; 795 xcb_dri3_buffers_from_pixmap_cookie_t xcb_ret; 796 xcb_dri3_buffers_from_pixmap_request_t xcb_out; 797 798 xcb_out.pixmap = pixmap; 799 800 xcb_parts[2].iov_base = (char *) &xcb_out; 801 xcb_parts[2].iov_len = sizeof(xcb_out); 802 xcb_parts[3].iov_base = 0; 803 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 804 805 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED|XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 806 return xcb_ret; 807 } 808 809 xcb_dri3_buffers_from_pixmap_cookie_t 810 xcb_dri3_buffers_from_pixmap_unchecked (xcb_connection_t *c, 811 xcb_pixmap_t pixmap) 812 { 813 static const xcb_protocol_request_t xcb_req = { 814 .count = 2, 815 .ext = &xcb_dri3_id, 816 .opcode = XCB_DRI3_BUFFERS_FROM_PIXMAP, 817 .isvoid = 0 818 }; 819 820 struct iovec xcb_parts[4]; 821 xcb_dri3_buffers_from_pixmap_cookie_t xcb_ret; 822 xcb_dri3_buffers_from_pixmap_request_t xcb_out; 823 824 xcb_out.pixmap = pixmap; 825 826 xcb_parts[2].iov_base = (char *) &xcb_out; 827 xcb_parts[2].iov_len = sizeof(xcb_out); 828 xcb_parts[3].iov_base = 0; 829 xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; 830 831 xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req); 832 return xcb_ret; 833 } 834 835 uint32_t * 836 xcb_dri3_buffers_from_pixmap_strides (const xcb_dri3_buffers_from_pixmap_reply_t *R) 837 { 838 return (uint32_t *) (R + 1); 839 } 840 841 int 842 xcb_dri3_buffers_from_pixmap_strides_length (const xcb_dri3_buffers_from_pixmap_reply_t *R) 843 { 844 return R->nfd; 845 } 846 847 xcb_generic_iterator_t 848 xcb_dri3_buffers_from_pixmap_strides_end (const xcb_dri3_buffers_from_pixmap_reply_t *R) 849 { 850 xcb_generic_iterator_t i; 851 i.data = ((uint32_t *) (R + 1)) + (R->nfd); 852 i.rem = 0; 853 i.index = (char *) i.data - (char *) R; 854 return i; 855 } 856 857 uint32_t * 858 xcb_dri3_buffers_from_pixmap_offsets (const xcb_dri3_buffers_from_pixmap_reply_t *R) 859 { 860 xcb_generic_iterator_t prev = xcb_dri3_buffers_from_pixmap_strides_end(R); 861 return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0); 862 } 863 864 int 865 xcb_dri3_buffers_from_pixmap_offsets_length (const xcb_dri3_buffers_from_pixmap_reply_t *R) 866 { 867 return R->nfd; 868 } 869 870 xcb_generic_iterator_t 871 xcb_dri3_buffers_from_pixmap_offsets_end (const xcb_dri3_buffers_from_pixmap_reply_t *R) 872 { 873 xcb_generic_iterator_t i; 874 xcb_generic_iterator_t prev = xcb_dri3_buffers_from_pixmap_strides_end(R); 875 i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->nfd); 876 i.rem = 0; 877 i.index = (char *) i.data - (char *) R; 878 return i; 879 } 880 881 int32_t * 882 xcb_dri3_buffers_from_pixmap_buffers (const xcb_dri3_buffers_from_pixmap_reply_t *R) 883 { 884 xcb_generic_iterator_t prev = xcb_dri3_buffers_from_pixmap_offsets_end(R); 885 return (int32_t *) ((char *) prev.data + XCB_TYPE_PAD(int32_t, prev.index) + 0); 886 } 887 888 int 889 xcb_dri3_buffers_from_pixmap_buffers_length (const xcb_dri3_buffers_from_pixmap_reply_t *R) 890 { 891 return R->nfd; 892 } 893 894 xcb_generic_iterator_t 895 xcb_dri3_buffers_from_pixmap_buffers_end (const xcb_dri3_buffers_from_pixmap_reply_t *R) 896 { 897 xcb_generic_iterator_t i; 898 xcb_generic_iterator_t prev = xcb_dri3_buffers_from_pixmap_offsets_end(R); 899 i.data = ((int32_t *) ((char*) prev.data + XCB_TYPE_PAD(int32_t, prev.index))) + (R->nfd); 900 i.rem = 0; 901 i.index = (char *) i.data - (char *) R; 902 return i; 903 } 904 905 xcb_dri3_buffers_from_pixmap_reply_t * 906 xcb_dri3_buffers_from_pixmap_reply (xcb_connection_t *c, 907 xcb_dri3_buffers_from_pixmap_cookie_t cookie /**< */, 908 xcb_generic_error_t **e) 909 { 910 return (xcb_dri3_buffers_from_pixmap_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e); 911 } 912 913 int * 914 xcb_dri3_buffers_from_pixmap_reply_fds (xcb_connection_t *c /**< */, 915 xcb_dri3_buffers_from_pixmap_reply_t *reply) 916 { 917 return xcb_get_reply_fds(c, reply, sizeof(xcb_dri3_buffers_from_pixmap_reply_t) + 4 * reply->length); 918 } 919 920