glxcmdsswap.c revision 7e31ba66
1/* 2 * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) 3 * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice including the dates of first publication and 13 * either this permission notice or a reference to 14 * http://oss.sgi.com/projects/FreeB/ 15 * shall be included in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 22 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 * SOFTWARE. 24 * 25 * Except as contained in this notice, the name of Silicon Graphics, Inc. 26 * shall not be used in advertising or otherwise to promote the sale, use or 27 * other dealings in this Software without prior written authorization from 28 * Silicon Graphics, Inc. 29 */ 30 31#ifdef HAVE_DIX_CONFIG_H 32#include <dix-config.h> 33#endif 34 35#include <string.h> 36#include "glxserver.h" 37#include "glxutil.h" 38#include <GL/glxtokens.h> 39#include <unpack.h> 40#include <pixmapstr.h> 41#include <windowstr.h> 42#include "glxext.h" 43#include "indirect_dispatch.h" 44#include "indirect_table.h" 45#include "indirect_util.h" 46 47/************************************************************************/ 48 49/* 50** Byteswapping versions of GLX commands. In most cases they just swap 51** the incoming arguments and then call the unswapped routine. For commands 52** that have replies, a separate swapping routine for the reply is provided; 53** it is called at the end of the unswapped routine. 54*/ 55 56int 57__glXDispSwap_CreateContext(__GLXclientState * cl, GLbyte * pc) 58{ 59 xGLXCreateContextReq *req = (xGLXCreateContextReq *) pc; 60 61 __GLX_DECLARE_SWAP_VARIABLES; 62 63 __GLX_SWAP_SHORT(&req->length); 64 __GLX_SWAP_INT(&req->context); 65 __GLX_SWAP_INT(&req->visual); 66 __GLX_SWAP_INT(&req->screen); 67 __GLX_SWAP_INT(&req->shareList); 68 69 return __glXDisp_CreateContext(cl, pc); 70} 71 72int 73__glXDispSwap_CreateNewContext(__GLXclientState * cl, GLbyte * pc) 74{ 75 xGLXCreateNewContextReq *req = (xGLXCreateNewContextReq *) pc; 76 77 __GLX_DECLARE_SWAP_VARIABLES; 78 79 __GLX_SWAP_SHORT(&req->length); 80 __GLX_SWAP_INT(&req->context); 81 __GLX_SWAP_INT(&req->fbconfig); 82 __GLX_SWAP_INT(&req->screen); 83 __GLX_SWAP_INT(&req->renderType); 84 __GLX_SWAP_INT(&req->shareList); 85 86 return __glXDisp_CreateNewContext(cl, pc); 87} 88 89int 90__glXDispSwap_CreateContextWithConfigSGIX(__GLXclientState * cl, GLbyte * pc) 91{ 92 ClientPtr client = cl->client; 93 xGLXCreateContextWithConfigSGIXReq *req = 94 (xGLXCreateContextWithConfigSGIXReq *) pc; 95 __GLX_DECLARE_SWAP_VARIABLES; 96 97 REQUEST_SIZE_MATCH(xGLXCreateContextWithConfigSGIXReq); 98 99 __GLX_SWAP_SHORT(&req->length); 100 __GLX_SWAP_INT(&req->context); 101 __GLX_SWAP_INT(&req->fbconfig); 102 __GLX_SWAP_INT(&req->screen); 103 __GLX_SWAP_INT(&req->renderType); 104 __GLX_SWAP_INT(&req->shareList); 105 106 return __glXDisp_CreateContextWithConfigSGIX(cl, pc); 107} 108 109int 110__glXDispSwap_DestroyContext(__GLXclientState * cl, GLbyte * pc) 111{ 112 xGLXDestroyContextReq *req = (xGLXDestroyContextReq *) pc; 113 114 __GLX_DECLARE_SWAP_VARIABLES; 115 116 __GLX_SWAP_SHORT(&req->length); 117 __GLX_SWAP_INT(&req->context); 118 119 return __glXDisp_DestroyContext(cl, pc); 120} 121 122int 123__glXDispSwap_MakeCurrent(__GLXclientState * cl, GLbyte * pc) 124{ 125 return BadImplementation; 126} 127 128int 129__glXDispSwap_MakeContextCurrent(__GLXclientState * cl, GLbyte * pc) 130{ 131 return BadImplementation; 132} 133 134int 135__glXDispSwap_MakeCurrentReadSGI(__GLXclientState * cl, GLbyte * pc) 136{ 137 return BadImplementation; 138} 139 140int 141__glXDispSwap_IsDirect(__GLXclientState * cl, GLbyte * pc) 142{ 143 xGLXIsDirectReq *req = (xGLXIsDirectReq *) pc; 144 145 __GLX_DECLARE_SWAP_VARIABLES; 146 147 __GLX_SWAP_SHORT(&req->length); 148 __GLX_SWAP_INT(&req->context); 149 150 return __glXDisp_IsDirect(cl, pc); 151} 152 153int 154__glXDispSwap_QueryVersion(__GLXclientState * cl, GLbyte * pc) 155{ 156 xGLXQueryVersionReq *req = (xGLXQueryVersionReq *) pc; 157 158 __GLX_DECLARE_SWAP_VARIABLES; 159 160 __GLX_SWAP_SHORT(&req->length); 161 __GLX_SWAP_INT(&req->majorVersion); 162 __GLX_SWAP_INT(&req->minorVersion); 163 164 return __glXDisp_QueryVersion(cl, pc); 165} 166 167int 168__glXDispSwap_WaitGL(__GLXclientState * cl, GLbyte * pc) 169{ 170 xGLXWaitGLReq *req = (xGLXWaitGLReq *) pc; 171 172 __GLX_DECLARE_SWAP_VARIABLES; 173 174 __GLX_SWAP_SHORT(&req->length); 175 __GLX_SWAP_INT(&req->contextTag); 176 177 return __glXDisp_WaitGL(cl, pc); 178} 179 180int 181__glXDispSwap_WaitX(__GLXclientState * cl, GLbyte * pc) 182{ 183 xGLXWaitXReq *req = (xGLXWaitXReq *) pc; 184 185 __GLX_DECLARE_SWAP_VARIABLES; 186 187 __GLX_SWAP_SHORT(&req->length); 188 __GLX_SWAP_INT(&req->contextTag); 189 190 return __glXDisp_WaitX(cl, pc); 191} 192 193int 194__glXDispSwap_CopyContext(__GLXclientState * cl, GLbyte * pc) 195{ 196 xGLXCopyContextReq *req = (xGLXCopyContextReq *) pc; 197 198 __GLX_DECLARE_SWAP_VARIABLES; 199 200 __GLX_SWAP_SHORT(&req->length); 201 __GLX_SWAP_INT(&req->source); 202 __GLX_SWAP_INT(&req->dest); 203 __GLX_SWAP_INT(&req->mask); 204 205 return __glXDisp_CopyContext(cl, pc); 206} 207 208int 209__glXDispSwap_GetVisualConfigs(__GLXclientState * cl, GLbyte * pc) 210{ 211 xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) pc; 212 213 __GLX_DECLARE_SWAP_VARIABLES; 214 215 __GLX_SWAP_INT(&req->screen); 216 return __glXDisp_GetVisualConfigs(cl, pc); 217} 218 219int 220__glXDispSwap_GetFBConfigs(__GLXclientState * cl, GLbyte * pc) 221{ 222 xGLXGetFBConfigsReq *req = (xGLXGetFBConfigsReq *) pc; 223 224 __GLX_DECLARE_SWAP_VARIABLES; 225 226 __GLX_SWAP_INT(&req->screen); 227 return __glXDisp_GetFBConfigs(cl, pc); 228} 229 230int 231__glXDispSwap_GetFBConfigsSGIX(__GLXclientState * cl, GLbyte * pc) 232{ 233 ClientPtr client = cl->client; 234 xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *) pc; 235 236 __GLX_DECLARE_SWAP_VARIABLES; 237 238 REQUEST_AT_LEAST_SIZE(xGLXGetFBConfigsSGIXReq); 239 240 __GLX_SWAP_INT(&req->screen); 241 return __glXDisp_GetFBConfigsSGIX(cl, pc); 242} 243 244int 245__glXDispSwap_CreateGLXPixmap(__GLXclientState * cl, GLbyte * pc) 246{ 247 xGLXCreateGLXPixmapReq *req = (xGLXCreateGLXPixmapReq *) pc; 248 249 __GLX_DECLARE_SWAP_VARIABLES; 250 251 __GLX_SWAP_SHORT(&req->length); 252 __GLX_SWAP_INT(&req->screen); 253 __GLX_SWAP_INT(&req->visual); 254 __GLX_SWAP_INT(&req->pixmap); 255 __GLX_SWAP_INT(&req->glxpixmap); 256 257 return __glXDisp_CreateGLXPixmap(cl, pc); 258} 259 260int 261__glXDispSwap_CreatePixmap(__GLXclientState * cl, GLbyte * pc) 262{ 263 ClientPtr client = cl->client; 264 xGLXCreatePixmapReq *req = (xGLXCreatePixmapReq *) pc; 265 CARD32 *attribs; 266 267 __GLX_DECLARE_SWAP_VARIABLES; 268 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 269 270 REQUEST_AT_LEAST_SIZE(xGLXCreatePixmapReq); 271 272 __GLX_SWAP_SHORT(&req->length); 273 __GLX_SWAP_INT(&req->screen); 274 __GLX_SWAP_INT(&req->fbconfig); 275 __GLX_SWAP_INT(&req->pixmap); 276 __GLX_SWAP_INT(&req->glxpixmap); 277 __GLX_SWAP_INT(&req->numAttribs); 278 279 if (req->numAttribs > (UINT32_MAX >> 3)) { 280 client->errorValue = req->numAttribs; 281 return BadValue; 282 } 283 REQUEST_FIXED_SIZE(xGLXCreatePixmapReq, req->numAttribs << 3); 284 attribs = (CARD32 *) (req + 1); 285 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 286 287 return __glXDisp_CreatePixmap(cl, pc); 288} 289 290int 291__glXDispSwap_CreateGLXPixmapWithConfigSGIX(__GLXclientState * cl, GLbyte * pc) 292{ 293 ClientPtr client = cl->client; 294 xGLXCreateGLXPixmapWithConfigSGIXReq *req = 295 (xGLXCreateGLXPixmapWithConfigSGIXReq *) pc; 296 __GLX_DECLARE_SWAP_VARIABLES; 297 298 REQUEST_SIZE_MATCH(xGLXCreateGLXPixmapWithConfigSGIXReq); 299 300 __GLX_SWAP_SHORT(&req->length); 301 __GLX_SWAP_INT(&req->screen); 302 __GLX_SWAP_INT(&req->fbconfig); 303 __GLX_SWAP_INT(&req->pixmap); 304 __GLX_SWAP_INT(&req->glxpixmap); 305 306 return __glXDisp_CreateGLXPixmapWithConfigSGIX(cl, pc); 307} 308 309int 310__glXDispSwap_DestroyGLXPixmap(__GLXclientState * cl, GLbyte * pc) 311{ 312 xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc; 313 314 __GLX_DECLARE_SWAP_VARIABLES; 315 316 __GLX_SWAP_SHORT(&req->length); 317 __GLX_SWAP_INT(&req->glxpixmap); 318 319 return __glXDisp_DestroyGLXPixmap(cl, pc); 320} 321 322int 323__glXDispSwap_DestroyPixmap(__GLXclientState * cl, GLbyte * pc) 324{ 325 ClientPtr client = cl->client; 326 xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc; 327 328 __GLX_DECLARE_SWAP_VARIABLES; 329 330 REQUEST_AT_LEAST_SIZE(xGLXDestroyGLXPixmapReq); 331 332 __GLX_SWAP_SHORT(&req->length); 333 __GLX_SWAP_INT(&req->glxpixmap); 334 335 return __glXDisp_DestroyGLXPixmap(cl, pc); 336} 337 338int 339__glXDispSwap_QueryContext(__GLXclientState * cl, GLbyte * pc) 340{ 341 xGLXQueryContextReq *req = (xGLXQueryContextReq *) pc; 342 343 __GLX_DECLARE_SWAP_VARIABLES; 344 345 __GLX_SWAP_INT(&req->context); 346 347 return __glXDisp_QueryContext(cl, pc); 348} 349 350int 351__glXDispSwap_CreatePbuffer(__GLXclientState * cl, GLbyte * pc) 352{ 353 ClientPtr client = cl->client; 354 xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *) pc; 355 356 __GLX_DECLARE_SWAP_VARIABLES; 357 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 358 CARD32 *attribs; 359 360 REQUEST_AT_LEAST_SIZE(xGLXCreatePbufferReq); 361 362 __GLX_SWAP_INT(&req->screen); 363 __GLX_SWAP_INT(&req->fbconfig); 364 __GLX_SWAP_INT(&req->pbuffer); 365 __GLX_SWAP_INT(&req->numAttribs); 366 367 if (req->numAttribs > (UINT32_MAX >> 3)) { 368 client->errorValue = req->numAttribs; 369 return BadValue; 370 } 371 REQUEST_FIXED_SIZE(xGLXCreatePbufferReq, req->numAttribs << 3); 372 attribs = (CARD32 *) (req + 1); 373 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 374 375 return __glXDisp_CreatePbuffer(cl, pc); 376} 377 378int 379__glXDispSwap_CreateGLXPbufferSGIX(__GLXclientState * cl, GLbyte * pc) 380{ 381 ClientPtr client = cl->client; 382 xGLXCreateGLXPbufferSGIXReq *req = (xGLXCreateGLXPbufferSGIXReq *) pc; 383 384 __GLX_DECLARE_SWAP_VARIABLES; 385 386 REQUEST_AT_LEAST_SIZE(xGLXCreateGLXPbufferSGIXReq); 387 388 __GLX_SWAP_INT(&req->screen); 389 __GLX_SWAP_INT(&req->fbconfig); 390 __GLX_SWAP_INT(&req->pbuffer); 391 __GLX_SWAP_INT(&req->width); 392 __GLX_SWAP_INT(&req->height); 393 394 return __glXDisp_CreateGLXPbufferSGIX(cl, pc); 395} 396 397int 398__glXDispSwap_DestroyPbuffer(__GLXclientState * cl, GLbyte * pc) 399{ 400 xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) pc; 401 402 __GLX_DECLARE_SWAP_VARIABLES; 403 404 __GLX_SWAP_INT(&req->pbuffer); 405 406 return __glXDisp_DestroyPbuffer(cl, pc); 407} 408 409int 410__glXDispSwap_DestroyGLXPbufferSGIX(__GLXclientState * cl, GLbyte * pc) 411{ 412 ClientPtr client = cl->client; 413 xGLXDestroyGLXPbufferSGIXReq *req = (xGLXDestroyGLXPbufferSGIXReq *) pc; 414 415 __GLX_DECLARE_SWAP_VARIABLES; 416 417 REQUEST_SIZE_MATCH(xGLXDestroyGLXPbufferSGIXReq); 418 419 __GLX_SWAP_INT(&req->pbuffer); 420 421 return __glXDisp_DestroyGLXPbufferSGIX(cl, pc); 422} 423 424int 425__glXDispSwap_ChangeDrawableAttributes(__GLXclientState * cl, GLbyte * pc) 426{ 427 ClientPtr client = cl->client; 428 xGLXChangeDrawableAttributesReq *req = 429 (xGLXChangeDrawableAttributesReq *) pc; 430 __GLX_DECLARE_SWAP_VARIABLES; 431 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 432 CARD32 *attribs; 433 434 REQUEST_AT_LEAST_SIZE(xGLXChangeDrawableAttributesReq); 435 436 __GLX_SWAP_INT(&req->drawable); 437 __GLX_SWAP_INT(&req->numAttribs); 438 439 if (req->numAttribs > (UINT32_MAX >> 3)) { 440 client->errorValue = req->numAttribs; 441 return BadValue; 442 } 443 if (((sizeof(xGLXChangeDrawableAttributesReq) + 444 (req->numAttribs << 3)) >> 2) < client->req_len) 445 return BadLength; 446 447 attribs = (CARD32 *) (req + 1); 448 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 449 450 return __glXDisp_ChangeDrawableAttributes(cl, pc); 451} 452 453int 454__glXDispSwap_ChangeDrawableAttributesSGIX(__GLXclientState * cl, GLbyte * pc) 455{ 456 ClientPtr client = cl->client; 457 xGLXChangeDrawableAttributesSGIXReq *req = 458 (xGLXChangeDrawableAttributesSGIXReq *) pc; 459 __GLX_DECLARE_SWAP_VARIABLES; 460 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 461 CARD32 *attribs; 462 463 REQUEST_AT_LEAST_SIZE(xGLXChangeDrawableAttributesSGIXReq); 464 465 __GLX_SWAP_INT(&req->drawable); 466 __GLX_SWAP_INT(&req->numAttribs); 467 468 if (req->numAttribs > (UINT32_MAX >> 3)) { 469 client->errorValue = req->numAttribs; 470 return BadValue; 471 } 472 REQUEST_FIXED_SIZE(xGLXChangeDrawableAttributesSGIXReq, 473 req->numAttribs << 3); 474 attribs = (CARD32 *) (req + 1); 475 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 476 477 return __glXDisp_ChangeDrawableAttributesSGIX(cl, pc); 478} 479 480int 481__glXDispSwap_CreateWindow(__GLXclientState * cl, GLbyte * pc) 482{ 483 ClientPtr client = cl->client; 484 xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc; 485 486 __GLX_DECLARE_SWAP_VARIABLES; 487 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 488 CARD32 *attribs; 489 490 REQUEST_AT_LEAST_SIZE(xGLXCreateWindowReq); 491 492 __GLX_SWAP_INT(&req->screen); 493 __GLX_SWAP_INT(&req->fbconfig); 494 __GLX_SWAP_INT(&req->window); 495 __GLX_SWAP_INT(&req->glxwindow); 496 __GLX_SWAP_INT(&req->numAttribs); 497 498 if (req->numAttribs > (UINT32_MAX >> 3)) { 499 client->errorValue = req->numAttribs; 500 return BadValue; 501 } 502 REQUEST_FIXED_SIZE(xGLXCreateWindowReq, req->numAttribs << 3); 503 attribs = (CARD32 *) (req + 1); 504 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 505 506 return __glXDisp_CreateWindow(cl, pc); 507} 508 509int 510__glXDispSwap_DestroyWindow(__GLXclientState * cl, GLbyte * pc) 511{ 512 ClientPtr client = cl->client; 513 xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc; 514 515 __GLX_DECLARE_SWAP_VARIABLES; 516 517 REQUEST_AT_LEAST_SIZE(xGLXDestroyWindowReq); 518 519 __GLX_SWAP_INT(&req->glxwindow); 520 521 return __glXDisp_DestroyWindow(cl, pc); 522} 523 524int 525__glXDispSwap_SwapBuffers(__GLXclientState * cl, GLbyte * pc) 526{ 527 xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc; 528 529 __GLX_DECLARE_SWAP_VARIABLES; 530 531 __GLX_SWAP_SHORT(&req->length); 532 __GLX_SWAP_INT(&req->contextTag); 533 __GLX_SWAP_INT(&req->drawable); 534 535 return __glXDisp_SwapBuffers(cl, pc); 536} 537 538int 539__glXDispSwap_UseXFont(__GLXclientState * cl, GLbyte * pc) 540{ 541 xGLXUseXFontReq *req = (xGLXUseXFontReq *) pc; 542 543 __GLX_DECLARE_SWAP_VARIABLES; 544 545 __GLX_SWAP_SHORT(&req->length); 546 __GLX_SWAP_INT(&req->contextTag); 547 __GLX_SWAP_INT(&req->font); 548 __GLX_SWAP_INT(&req->first); 549 __GLX_SWAP_INT(&req->count); 550 __GLX_SWAP_INT(&req->listBase); 551 552 return __glXDisp_UseXFont(cl, pc); 553} 554 555int 556__glXDispSwap_QueryExtensionsString(__GLXclientState * cl, GLbyte * pc) 557{ 558 xGLXQueryExtensionsStringReq *req = (xGLXQueryExtensionsStringReq *) pc; 559 560 __GLX_DECLARE_SWAP_VARIABLES; 561 562 __GLX_SWAP_SHORT(&req->length); 563 __GLX_SWAP_INT(&req->screen); 564 565 return __glXDisp_QueryExtensionsString(cl, pc); 566} 567 568int 569__glXDispSwap_QueryServerString(__GLXclientState * cl, GLbyte * pc) 570{ 571 xGLXQueryServerStringReq *req = (xGLXQueryServerStringReq *) pc; 572 573 __GLX_DECLARE_SWAP_VARIABLES; 574 575 __GLX_SWAP_SHORT(&req->length); 576 __GLX_SWAP_INT(&req->screen); 577 __GLX_SWAP_INT(&req->name); 578 579 return __glXDisp_QueryServerString(cl, pc); 580} 581 582int 583__glXDispSwap_ClientInfo(__GLXclientState * cl, GLbyte * pc) 584{ 585 ClientPtr client = cl->client; 586 xGLXClientInfoReq *req = (xGLXClientInfoReq *) pc; 587 588 __GLX_DECLARE_SWAP_VARIABLES; 589 590 REQUEST_AT_LEAST_SIZE(xGLXClientInfoReq); 591 592 __GLX_SWAP_SHORT(&req->length); 593 __GLX_SWAP_INT(&req->major); 594 __GLX_SWAP_INT(&req->minor); 595 __GLX_SWAP_INT(&req->numbytes); 596 597 return __glXDisp_ClientInfo(cl, pc); 598} 599 600int 601__glXDispSwap_QueryContextInfoEXT(__GLXclientState * cl, GLbyte * pc) 602{ 603 ClientPtr client = cl->client; 604 xGLXQueryContextInfoEXTReq *req = (xGLXQueryContextInfoEXTReq *) pc; 605 606 __GLX_DECLARE_SWAP_VARIABLES; 607 608 REQUEST_SIZE_MATCH(xGLXQueryContextInfoEXTReq); 609 610 __GLX_SWAP_SHORT(&req->length); 611 __GLX_SWAP_INT(&req->context); 612 613 return __glXDisp_QueryContextInfoEXT(cl, pc); 614} 615 616int 617__glXDispSwap_BindTexImageEXT(__GLXclientState * cl, GLbyte * pc) 618{ 619 ClientPtr client = cl->client; 620 xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc; 621 GLXDrawable *drawId; 622 int *buffer; 623 CARD32 *num_attribs; 624 625 __GLX_DECLARE_SWAP_VARIABLES; 626 627 if ((sizeof(xGLXVendorPrivateReq) + 12) >> 2 > client->req_len) 628 return BadLength; 629 630 pc += __GLX_VENDPRIV_HDR_SIZE; 631 632 drawId = ((GLXDrawable *) (pc)); 633 buffer = ((int *) (pc + 4)); 634 num_attribs = ((CARD32 *) (pc + 8)); 635 636 __GLX_SWAP_SHORT(&req->length); 637 __GLX_SWAP_INT(&req->contextTag); 638 __GLX_SWAP_INT(drawId); 639 __GLX_SWAP_INT(buffer); 640 __GLX_SWAP_INT(num_attribs); 641 642 return __glXDisp_BindTexImageEXT(cl, (GLbyte *) pc); 643} 644 645int 646__glXDispSwap_ReleaseTexImageEXT(__GLXclientState * cl, GLbyte * pc) 647{ 648 ClientPtr client = cl->client; 649 xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc; 650 GLXDrawable *drawId; 651 int *buffer; 652 653 __GLX_DECLARE_SWAP_VARIABLES; 654 655 REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 8); 656 657 pc += __GLX_VENDPRIV_HDR_SIZE; 658 659 drawId = ((GLXDrawable *) (pc)); 660 buffer = ((int *) (pc + 4)); 661 662 __GLX_SWAP_SHORT(&req->length); 663 __GLX_SWAP_INT(&req->contextTag); 664 __GLX_SWAP_INT(drawId); 665 __GLX_SWAP_INT(buffer); 666 667 return __glXDisp_ReleaseTexImageEXT(cl, (GLbyte *) pc); 668} 669 670int 671__glXDispSwap_CopySubBufferMESA(__GLXclientState * cl, GLbyte * pc) 672{ 673 ClientPtr client = cl->client; 674 xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc; 675 GLXDrawable *drawId; 676 int *buffer; 677 678 __GLX_DECLARE_SWAP_VARIABLES; 679 680 REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 20); 681 682 (void) drawId; 683 (void) buffer; 684 685 pc += __GLX_VENDPRIV_HDR_SIZE; 686 687 __GLX_SWAP_SHORT(&req->length); 688 __GLX_SWAP_INT(&req->contextTag); 689 __GLX_SWAP_INT(pc); 690 __GLX_SWAP_INT(pc + 4); 691 __GLX_SWAP_INT(pc + 8); 692 __GLX_SWAP_INT(pc + 12); 693 __GLX_SWAP_INT(pc + 16); 694 695 return __glXDisp_CopySubBufferMESA(cl, pc); 696 697} 698 699int 700__glXDispSwap_GetDrawableAttributesSGIX(__GLXclientState * cl, GLbyte * pc) 701{ 702 ClientPtr client = cl->client; 703 xGLXVendorPrivateWithReplyReq *req = (xGLXVendorPrivateWithReplyReq *) pc; 704 CARD32 *data; 705 706 __GLX_DECLARE_SWAP_VARIABLES; 707 708 REQUEST_SIZE_MATCH(xGLXGetDrawableAttributesSGIXReq); 709 710 data = (CARD32 *) (req + 1); 711 __GLX_SWAP_SHORT(&req->length); 712 __GLX_SWAP_INT(&req->contextTag); 713 __GLX_SWAP_INT(data); 714 715 return __glXDisp_GetDrawableAttributesSGIX(cl, pc); 716} 717 718int 719__glXDispSwap_GetDrawableAttributes(__GLXclientState * cl, GLbyte * pc) 720{ 721 ClientPtr client = cl->client; 722 xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *) pc; 723 724 __GLX_DECLARE_SWAP_VARIABLES; 725 726 REQUEST_AT_LEAST_SIZE(xGLXGetDrawableAttributesReq); 727 728 __GLX_SWAP_SHORT(&req->length); 729 __GLX_SWAP_INT(&req->drawable); 730 731 return __glXDisp_GetDrawableAttributes(cl, pc); 732} 733 734/************************************************************************/ 735 736/* 737** Render and Renderlarge are not in the GLX API. They are used by the GLX 738** client library to send batches of GL rendering commands. 739*/ 740 741int 742__glXDispSwap_Render(__GLXclientState * cl, GLbyte * pc) 743{ 744 return __glXDisp_Render(cl, pc); 745} 746 747/* 748** Execute a large rendering request (one that spans multiple X requests). 749*/ 750int 751__glXDispSwap_RenderLarge(__GLXclientState * cl, GLbyte * pc) 752{ 753 return __glXDisp_RenderLarge(cl, pc); 754} 755 756/************************************************************************/ 757 758/* 759** No support is provided for the vendor-private requests other than 760** allocating these entry points in the dispatch table. 761*/ 762 763int 764__glXDispSwap_VendorPrivate(__GLXclientState * cl, GLbyte * pc) 765{ 766 ClientPtr client = cl->client; 767 xGLXVendorPrivateReq *req; 768 GLint vendorcode; 769 __GLXdispatchVendorPrivProcPtr proc; 770 771 __GLX_DECLARE_SWAP_VARIABLES; 772 REQUEST_AT_LEAST_SIZE(xGLXVendorPrivateReq); 773 774 req = (xGLXVendorPrivateReq *) pc; 775 __GLX_SWAP_SHORT(&req->length); 776 __GLX_SWAP_INT(&req->vendorCode); 777 778 vendorcode = req->vendorCode; 779 780 proc = (__GLXdispatchVendorPrivProcPtr) 781 __glXGetProtocolDecodeFunction(&VendorPriv_dispatch_info, 782 vendorcode, 1); 783 if (proc != NULL) { 784 return (*proc) (cl, (GLbyte *) req); 785 } 786 787 cl->client->errorValue = req->vendorCode; 788 return __glXError(GLXUnsupportedPrivateRequest); 789} 790 791int 792__glXDispSwap_VendorPrivateWithReply(__GLXclientState * cl, GLbyte * pc) 793{ 794 ClientPtr client = cl->client; 795 xGLXVendorPrivateWithReplyReq *req; 796 GLint vendorcode; 797 __GLXdispatchVendorPrivProcPtr proc; 798 799 __GLX_DECLARE_SWAP_VARIABLES; 800 REQUEST_AT_LEAST_SIZE(xGLXVendorPrivateWithReplyReq); 801 802 req = (xGLXVendorPrivateWithReplyReq *) pc; 803 __GLX_SWAP_SHORT(&req->length); 804 __GLX_SWAP_INT(&req->vendorCode); 805 806 vendorcode = req->vendorCode; 807 808 proc = (__GLXdispatchVendorPrivProcPtr) 809 __glXGetProtocolDecodeFunction(&VendorPriv_dispatch_info, 810 vendorcode, 1); 811 if (proc != NULL) { 812 return (*proc) (cl, (GLbyte *) req); 813 } 814 815 cl->client->errorValue = req->vendorCode; 816 return __glXError(GLXUnsupportedPrivateRequest); 817} 818