glxcmdsswap.c revision f7df2e56
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 ClientPtr client = cl->client; 60 xGLXCreateContextReq *req = (xGLXCreateContextReq *) pc; 61 62 __GLX_DECLARE_SWAP_VARIABLES; 63 64 REQUEST_SIZE_MATCH(xGLXCreateContextReq); 65 66 __GLX_SWAP_SHORT(&req->length); 67 __GLX_SWAP_INT(&req->context); 68 __GLX_SWAP_INT(&req->visual); 69 __GLX_SWAP_INT(&req->screen); 70 __GLX_SWAP_INT(&req->shareList); 71 72 return __glXDisp_CreateContext(cl, pc); 73} 74 75int 76__glXDispSwap_CreateNewContext(__GLXclientState * cl, GLbyte * pc) 77{ 78 ClientPtr client = cl->client; 79 xGLXCreateNewContextReq *req = (xGLXCreateNewContextReq *) pc; 80 81 __GLX_DECLARE_SWAP_VARIABLES; 82 83 REQUEST_SIZE_MATCH(xGLXCreateNewContextReq); 84 85 __GLX_SWAP_SHORT(&req->length); 86 __GLX_SWAP_INT(&req->context); 87 __GLX_SWAP_INT(&req->fbconfig); 88 __GLX_SWAP_INT(&req->screen); 89 __GLX_SWAP_INT(&req->renderType); 90 __GLX_SWAP_INT(&req->shareList); 91 92 return __glXDisp_CreateNewContext(cl, pc); 93} 94 95int 96__glXDispSwap_CreateContextWithConfigSGIX(__GLXclientState * cl, GLbyte * pc) 97{ 98 ClientPtr client = cl->client; 99 xGLXCreateContextWithConfigSGIXReq *req = 100 (xGLXCreateContextWithConfigSGIXReq *) pc; 101 __GLX_DECLARE_SWAP_VARIABLES; 102 103 REQUEST_SIZE_MATCH(xGLXCreateContextWithConfigSGIXReq); 104 105 __GLX_SWAP_SHORT(&req->length); 106 __GLX_SWAP_INT(&req->context); 107 __GLX_SWAP_INT(&req->fbconfig); 108 __GLX_SWAP_INT(&req->screen); 109 __GLX_SWAP_INT(&req->renderType); 110 __GLX_SWAP_INT(&req->shareList); 111 112 return __glXDisp_CreateContextWithConfigSGIX(cl, pc); 113} 114 115int 116__glXDispSwap_DestroyContext(__GLXclientState * cl, GLbyte * pc) 117{ 118 ClientPtr client = cl->client; 119 xGLXDestroyContextReq *req = (xGLXDestroyContextReq *) pc; 120 121 __GLX_DECLARE_SWAP_VARIABLES; 122 123 REQUEST_SIZE_MATCH(xGLXDestroyContextReq); 124 125 __GLX_SWAP_SHORT(&req->length); 126 __GLX_SWAP_INT(&req->context); 127 128 return __glXDisp_DestroyContext(cl, pc); 129} 130 131int 132__glXDispSwap_MakeCurrent(__GLXclientState * cl, GLbyte * pc) 133{ 134 ClientPtr client = cl->client; 135 xGLXMakeCurrentReq *req = (xGLXMakeCurrentReq *) pc; 136 137 __GLX_DECLARE_SWAP_VARIABLES; 138 139 REQUEST_SIZE_MATCH(xGLXMakeCurrentReq); 140 141 __GLX_SWAP_SHORT(&req->length); 142 __GLX_SWAP_INT(&req->drawable); 143 __GLX_SWAP_INT(&req->context); 144 __GLX_SWAP_INT(&req->oldContextTag); 145 146 return __glXDisp_MakeCurrent(cl, pc); 147} 148 149int 150__glXDispSwap_MakeContextCurrent(__GLXclientState * cl, GLbyte * pc) 151{ 152 ClientPtr client = cl->client; 153 xGLXMakeContextCurrentReq *req = (xGLXMakeContextCurrentReq *) pc; 154 155 __GLX_DECLARE_SWAP_VARIABLES; 156 157 REQUEST_SIZE_MATCH(xGLXMakeContextCurrentReq); 158 159 __GLX_SWAP_SHORT(&req->length); 160 __GLX_SWAP_INT(&req->drawable); 161 __GLX_SWAP_INT(&req->readdrawable); 162 __GLX_SWAP_INT(&req->context); 163 __GLX_SWAP_INT(&req->oldContextTag); 164 165 return __glXDisp_MakeContextCurrent(cl, pc); 166} 167 168int 169__glXDispSwap_MakeCurrentReadSGI(__GLXclientState * cl, GLbyte * pc) 170{ 171 ClientPtr client = cl->client; 172 xGLXMakeCurrentReadSGIReq *req = (xGLXMakeCurrentReadSGIReq *) pc; 173 174 __GLX_DECLARE_SWAP_VARIABLES; 175 176 REQUEST_SIZE_MATCH(xGLXMakeCurrentReadSGIReq); 177 178 __GLX_SWAP_SHORT(&req->length); 179 __GLX_SWAP_INT(&req->drawable); 180 __GLX_SWAP_INT(&req->readable); 181 __GLX_SWAP_INT(&req->context); 182 __GLX_SWAP_INT(&req->oldContextTag); 183 184 return __glXDisp_MakeCurrentReadSGI(cl, pc); 185} 186 187int 188__glXDispSwap_IsDirect(__GLXclientState * cl, GLbyte * pc) 189{ 190 ClientPtr client = cl->client; 191 xGLXIsDirectReq *req = (xGLXIsDirectReq *) pc; 192 193 __GLX_DECLARE_SWAP_VARIABLES; 194 195 REQUEST_SIZE_MATCH(xGLXIsDirectReq); 196 197 __GLX_SWAP_SHORT(&req->length); 198 __GLX_SWAP_INT(&req->context); 199 200 return __glXDisp_IsDirect(cl, pc); 201} 202 203int 204__glXDispSwap_QueryVersion(__GLXclientState * cl, GLbyte * pc) 205{ 206 ClientPtr client = cl->client; 207 xGLXQueryVersionReq *req = (xGLXQueryVersionReq *) pc; 208 209 __GLX_DECLARE_SWAP_VARIABLES; 210 211 REQUEST_SIZE_MATCH(xGLXQueryVersionReq); 212 213 __GLX_SWAP_SHORT(&req->length); 214 __GLX_SWAP_INT(&req->majorVersion); 215 __GLX_SWAP_INT(&req->minorVersion); 216 217 return __glXDisp_QueryVersion(cl, pc); 218} 219 220int 221__glXDispSwap_WaitGL(__GLXclientState * cl, GLbyte * pc) 222{ 223 ClientPtr client = cl->client; 224 xGLXWaitGLReq *req = (xGLXWaitGLReq *) pc; 225 226 __GLX_DECLARE_SWAP_VARIABLES; 227 228 REQUEST_SIZE_MATCH(xGLXWaitGLReq); 229 230 __GLX_SWAP_SHORT(&req->length); 231 __GLX_SWAP_INT(&req->contextTag); 232 233 return __glXDisp_WaitGL(cl, pc); 234} 235 236int 237__glXDispSwap_WaitX(__GLXclientState * cl, GLbyte * pc) 238{ 239 ClientPtr client = cl->client; 240 xGLXWaitXReq *req = (xGLXWaitXReq *) pc; 241 242 __GLX_DECLARE_SWAP_VARIABLES; 243 244 REQUEST_SIZE_MATCH(xGLXWaitXReq); 245 246 __GLX_SWAP_SHORT(&req->length); 247 __GLX_SWAP_INT(&req->contextTag); 248 249 return __glXDisp_WaitX(cl, pc); 250} 251 252int 253__glXDispSwap_CopyContext(__GLXclientState * cl, GLbyte * pc) 254{ 255 ClientPtr client = cl->client; 256 xGLXCopyContextReq *req = (xGLXCopyContextReq *) pc; 257 258 __GLX_DECLARE_SWAP_VARIABLES; 259 260 REQUEST_SIZE_MATCH(xGLXCopyContextReq); 261 262 __GLX_SWAP_SHORT(&req->length); 263 __GLX_SWAP_INT(&req->source); 264 __GLX_SWAP_INT(&req->dest); 265 __GLX_SWAP_INT(&req->mask); 266 267 return __glXDisp_CopyContext(cl, pc); 268} 269 270int 271__glXDispSwap_GetVisualConfigs(__GLXclientState * cl, GLbyte * pc) 272{ 273 ClientPtr client = cl->client; 274 xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) pc; 275 276 __GLX_DECLARE_SWAP_VARIABLES; 277 278 REQUEST_SIZE_MATCH(xGLXGetVisualConfigsReq); 279 280 __GLX_SWAP_INT(&req->screen); 281 return __glXDisp_GetVisualConfigs(cl, pc); 282} 283 284int 285__glXDispSwap_GetFBConfigs(__GLXclientState * cl, GLbyte * pc) 286{ 287 ClientPtr client = cl->client; 288 xGLXGetFBConfigsReq *req = (xGLXGetFBConfigsReq *) pc; 289 290 __GLX_DECLARE_SWAP_VARIABLES; 291 292 REQUEST_SIZE_MATCH(xGLXGetFBConfigsReq); 293 294 __GLX_SWAP_INT(&req->screen); 295 return __glXDisp_GetFBConfigs(cl, pc); 296} 297 298int 299__glXDispSwap_GetFBConfigsSGIX(__GLXclientState * cl, GLbyte * pc) 300{ 301 ClientPtr client = cl->client; 302 xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *) pc; 303 304 __GLX_DECLARE_SWAP_VARIABLES; 305 306 REQUEST_AT_LEAST_SIZE(xGLXGetFBConfigsSGIXReq); 307 308 __GLX_SWAP_INT(&req->screen); 309 return __glXDisp_GetFBConfigsSGIX(cl, pc); 310} 311 312int 313__glXDispSwap_CreateGLXPixmap(__GLXclientState * cl, GLbyte * pc) 314{ 315 ClientPtr client = cl->client; 316 xGLXCreateGLXPixmapReq *req = (xGLXCreateGLXPixmapReq *) pc; 317 318 __GLX_DECLARE_SWAP_VARIABLES; 319 320 REQUEST_SIZE_MATCH(xGLXCreateGLXPixmapReq); 321 322 __GLX_SWAP_SHORT(&req->length); 323 __GLX_SWAP_INT(&req->screen); 324 __GLX_SWAP_INT(&req->visual); 325 __GLX_SWAP_INT(&req->pixmap); 326 __GLX_SWAP_INT(&req->glxpixmap); 327 328 return __glXDisp_CreateGLXPixmap(cl, pc); 329} 330 331int 332__glXDispSwap_CreatePixmap(__GLXclientState * cl, GLbyte * pc) 333{ 334 ClientPtr client = cl->client; 335 xGLXCreatePixmapReq *req = (xGLXCreatePixmapReq *) pc; 336 CARD32 *attribs; 337 338 __GLX_DECLARE_SWAP_VARIABLES; 339 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 340 341 REQUEST_AT_LEAST_SIZE(xGLXCreatePixmapReq); 342 343 __GLX_SWAP_SHORT(&req->length); 344 __GLX_SWAP_INT(&req->screen); 345 __GLX_SWAP_INT(&req->fbconfig); 346 __GLX_SWAP_INT(&req->pixmap); 347 __GLX_SWAP_INT(&req->glxpixmap); 348 __GLX_SWAP_INT(&req->numAttribs); 349 350 if (req->numAttribs > (UINT32_MAX >> 3)) { 351 client->errorValue = req->numAttribs; 352 return BadValue; 353 } 354 REQUEST_FIXED_SIZE(xGLXCreatePixmapReq, req->numAttribs << 3); 355 attribs = (CARD32 *) (req + 1); 356 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 357 358 return __glXDisp_CreatePixmap(cl, pc); 359} 360 361int 362__glXDispSwap_CreateGLXPixmapWithConfigSGIX(__GLXclientState * cl, GLbyte * pc) 363{ 364 ClientPtr client = cl->client; 365 xGLXCreateGLXPixmapWithConfigSGIXReq *req = 366 (xGLXCreateGLXPixmapWithConfigSGIXReq *) pc; 367 __GLX_DECLARE_SWAP_VARIABLES; 368 369 REQUEST_SIZE_MATCH(xGLXCreateGLXPixmapWithConfigSGIXReq); 370 371 __GLX_SWAP_SHORT(&req->length); 372 __GLX_SWAP_INT(&req->screen); 373 __GLX_SWAP_INT(&req->fbconfig); 374 __GLX_SWAP_INT(&req->pixmap); 375 __GLX_SWAP_INT(&req->glxpixmap); 376 377 return __glXDisp_CreateGLXPixmapWithConfigSGIX(cl, pc); 378} 379 380int 381__glXDispSwap_DestroyGLXPixmap(__GLXclientState * cl, GLbyte * pc) 382{ 383 ClientPtr client = cl->client; 384 xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc; 385 386 __GLX_DECLARE_SWAP_VARIABLES; 387 388 REQUEST_SIZE_MATCH(xGLXDestroyGLXPixmapReq); 389 390 __GLX_SWAP_SHORT(&req->length); 391 __GLX_SWAP_INT(&req->glxpixmap); 392 393 return __glXDisp_DestroyGLXPixmap(cl, pc); 394} 395 396int 397__glXDispSwap_DestroyPixmap(__GLXclientState * cl, GLbyte * pc) 398{ 399 ClientPtr client = cl->client; 400 xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc; 401 402 __GLX_DECLARE_SWAP_VARIABLES; 403 404 REQUEST_AT_LEAST_SIZE(xGLXDestroyGLXPixmapReq); 405 406 __GLX_SWAP_SHORT(&req->length); 407 __GLX_SWAP_INT(&req->glxpixmap); 408 409 return __glXDisp_DestroyGLXPixmap(cl, pc); 410} 411 412int 413__glXDispSwap_QueryContext(__GLXclientState * cl, GLbyte * pc) 414{ 415 ClientPtr client = cl->client; 416 xGLXQueryContextReq *req = (xGLXQueryContextReq *) pc; 417 418 __GLX_DECLARE_SWAP_VARIABLES; 419 420 REQUEST_SIZE_MATCH(xGLXQueryContextReq); 421 422 __GLX_SWAP_INT(&req->context); 423 424 return __glXDisp_QueryContext(cl, pc); 425} 426 427int 428__glXDispSwap_CreatePbuffer(__GLXclientState * cl, GLbyte * pc) 429{ 430 ClientPtr client = cl->client; 431 xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *) pc; 432 433 __GLX_DECLARE_SWAP_VARIABLES; 434 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 435 CARD32 *attribs; 436 437 REQUEST_AT_LEAST_SIZE(xGLXCreatePbufferReq); 438 439 __GLX_SWAP_INT(&req->screen); 440 __GLX_SWAP_INT(&req->fbconfig); 441 __GLX_SWAP_INT(&req->pbuffer); 442 __GLX_SWAP_INT(&req->numAttribs); 443 444 if (req->numAttribs > (UINT32_MAX >> 3)) { 445 client->errorValue = req->numAttribs; 446 return BadValue; 447 } 448 REQUEST_FIXED_SIZE(xGLXCreatePbufferReq, req->numAttribs << 3); 449 attribs = (CARD32 *) (req + 1); 450 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 451 452 return __glXDisp_CreatePbuffer(cl, pc); 453} 454 455int 456__glXDispSwap_CreateGLXPbufferSGIX(__GLXclientState * cl, GLbyte * pc) 457{ 458 ClientPtr client = cl->client; 459 xGLXCreateGLXPbufferSGIXReq *req = (xGLXCreateGLXPbufferSGIXReq *) pc; 460 461 __GLX_DECLARE_SWAP_VARIABLES; 462 463 REQUEST_AT_LEAST_SIZE(xGLXCreateGLXPbufferSGIXReq); 464 465 __GLX_SWAP_INT(&req->screen); 466 __GLX_SWAP_INT(&req->fbconfig); 467 __GLX_SWAP_INT(&req->pbuffer); 468 __GLX_SWAP_INT(&req->width); 469 __GLX_SWAP_INT(&req->height); 470 471 return __glXDisp_CreateGLXPbufferSGIX(cl, pc); 472} 473 474int 475__glXDispSwap_DestroyPbuffer(__GLXclientState * cl, GLbyte * pc) 476{ 477 ClientPtr client = cl->client; 478 xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) pc; 479 480 __GLX_DECLARE_SWAP_VARIABLES; 481 482 REQUEST_SIZE_MATCH(xGLXDestroyPbufferReq); 483 484 __GLX_SWAP_INT(&req->pbuffer); 485 486 return __glXDisp_DestroyPbuffer(cl, pc); 487} 488 489int 490__glXDispSwap_DestroyGLXPbufferSGIX(__GLXclientState * cl, GLbyte * pc) 491{ 492 ClientPtr client = cl->client; 493 xGLXDestroyGLXPbufferSGIXReq *req = (xGLXDestroyGLXPbufferSGIXReq *) pc; 494 495 __GLX_DECLARE_SWAP_VARIABLES; 496 497 REQUEST_SIZE_MATCH(xGLXDestroyGLXPbufferSGIXReq); 498 499 __GLX_SWAP_INT(&req->pbuffer); 500 501 return __glXDisp_DestroyGLXPbufferSGIX(cl, pc); 502} 503 504int 505__glXDispSwap_ChangeDrawableAttributes(__GLXclientState * cl, GLbyte * pc) 506{ 507 ClientPtr client = cl->client; 508 xGLXChangeDrawableAttributesReq *req = 509 (xGLXChangeDrawableAttributesReq *) pc; 510 __GLX_DECLARE_SWAP_VARIABLES; 511 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 512 CARD32 *attribs; 513 514 REQUEST_AT_LEAST_SIZE(xGLXChangeDrawableAttributesReq); 515 516 __GLX_SWAP_INT(&req->drawable); 517 __GLX_SWAP_INT(&req->numAttribs); 518 519 if (req->numAttribs > (UINT32_MAX >> 3)) { 520 client->errorValue = req->numAttribs; 521 return BadValue; 522 } 523 if (((sizeof(xGLXChangeDrawableAttributesReq) + 524 (req->numAttribs << 3)) >> 2) < client->req_len) 525 return BadLength; 526 527 attribs = (CARD32 *) (req + 1); 528 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 529 530 return __glXDisp_ChangeDrawableAttributes(cl, pc); 531} 532 533int 534__glXDispSwap_ChangeDrawableAttributesSGIX(__GLXclientState * cl, GLbyte * pc) 535{ 536 ClientPtr client = cl->client; 537 xGLXChangeDrawableAttributesSGIXReq *req = 538 (xGLXChangeDrawableAttributesSGIXReq *) pc; 539 __GLX_DECLARE_SWAP_VARIABLES; 540 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 541 CARD32 *attribs; 542 543 REQUEST_AT_LEAST_SIZE(xGLXChangeDrawableAttributesSGIXReq); 544 545 __GLX_SWAP_INT(&req->drawable); 546 __GLX_SWAP_INT(&req->numAttribs); 547 548 if (req->numAttribs > (UINT32_MAX >> 3)) { 549 client->errorValue = req->numAttribs; 550 return BadValue; 551 } 552 REQUEST_FIXED_SIZE(xGLXChangeDrawableAttributesSGIXReq, 553 req->numAttribs << 3); 554 attribs = (CARD32 *) (req + 1); 555 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 556 557 return __glXDisp_ChangeDrawableAttributesSGIX(cl, pc); 558} 559 560int 561__glXDispSwap_CreateWindow(__GLXclientState * cl, GLbyte * pc) 562{ 563 ClientPtr client = cl->client; 564 xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc; 565 566 __GLX_DECLARE_SWAP_VARIABLES; 567 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 568 CARD32 *attribs; 569 570 REQUEST_AT_LEAST_SIZE(xGLXCreateWindowReq); 571 572 __GLX_SWAP_INT(&req->screen); 573 __GLX_SWAP_INT(&req->fbconfig); 574 __GLX_SWAP_INT(&req->window); 575 __GLX_SWAP_INT(&req->glxwindow); 576 __GLX_SWAP_INT(&req->numAttribs); 577 578 if (req->numAttribs > (UINT32_MAX >> 3)) { 579 client->errorValue = req->numAttribs; 580 return BadValue; 581 } 582 REQUEST_FIXED_SIZE(xGLXCreateWindowReq, req->numAttribs << 3); 583 attribs = (CARD32 *) (req + 1); 584 __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1); 585 586 return __glXDisp_CreateWindow(cl, pc); 587} 588 589int 590__glXDispSwap_DestroyWindow(__GLXclientState * cl, GLbyte * pc) 591{ 592 ClientPtr client = cl->client; 593 xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc; 594 595 __GLX_DECLARE_SWAP_VARIABLES; 596 597 REQUEST_AT_LEAST_SIZE(xGLXDestroyWindowReq); 598 599 __GLX_SWAP_INT(&req->glxwindow); 600 601 return __glXDisp_DestroyWindow(cl, pc); 602} 603 604int 605__glXDispSwap_SwapBuffers(__GLXclientState * cl, GLbyte * pc) 606{ 607 ClientPtr client = cl->client; 608 xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc; 609 610 __GLX_DECLARE_SWAP_VARIABLES; 611 612 REQUEST_SIZE_MATCH(xGLXSwapBuffersReq); 613 614 __GLX_SWAP_SHORT(&req->length); 615 __GLX_SWAP_INT(&req->contextTag); 616 __GLX_SWAP_INT(&req->drawable); 617 618 return __glXDisp_SwapBuffers(cl, pc); 619} 620 621int 622__glXDispSwap_UseXFont(__GLXclientState * cl, GLbyte * pc) 623{ 624 ClientPtr client = cl->client; 625 xGLXUseXFontReq *req = (xGLXUseXFontReq *) pc; 626 627 __GLX_DECLARE_SWAP_VARIABLES; 628 629 REQUEST_SIZE_MATCH(xGLXUseXFontReq); 630 631 __GLX_SWAP_SHORT(&req->length); 632 __GLX_SWAP_INT(&req->contextTag); 633 __GLX_SWAP_INT(&req->font); 634 __GLX_SWAP_INT(&req->first); 635 __GLX_SWAP_INT(&req->count); 636 __GLX_SWAP_INT(&req->listBase); 637 638 return __glXDisp_UseXFont(cl, pc); 639} 640 641int 642__glXDispSwap_QueryExtensionsString(__GLXclientState * cl, GLbyte * pc) 643{ 644 ClientPtr client = cl->client; 645 xGLXQueryExtensionsStringReq *req = (xGLXQueryExtensionsStringReq *) pc; 646 647 __GLX_DECLARE_SWAP_VARIABLES; 648 649 REQUEST_SIZE_MATCH(xGLXQueryExtensionsStringReq); 650 651 __GLX_SWAP_SHORT(&req->length); 652 __GLX_SWAP_INT(&req->screen); 653 654 return __glXDisp_QueryExtensionsString(cl, pc); 655} 656 657int 658__glXDispSwap_QueryServerString(__GLXclientState * cl, GLbyte * pc) 659{ 660 ClientPtr client = cl->client; 661 xGLXQueryServerStringReq *req = (xGLXQueryServerStringReq *) pc; 662 663 __GLX_DECLARE_SWAP_VARIABLES; 664 665 REQUEST_SIZE_MATCH(xGLXQueryServerStringReq); 666 667 __GLX_SWAP_SHORT(&req->length); 668 __GLX_SWAP_INT(&req->screen); 669 __GLX_SWAP_INT(&req->name); 670 671 return __glXDisp_QueryServerString(cl, pc); 672} 673 674int 675__glXDispSwap_ClientInfo(__GLXclientState * cl, GLbyte * pc) 676{ 677 ClientPtr client = cl->client; 678 xGLXClientInfoReq *req = (xGLXClientInfoReq *) pc; 679 680 __GLX_DECLARE_SWAP_VARIABLES; 681 682 REQUEST_AT_LEAST_SIZE(xGLXClientInfoReq); 683 684 __GLX_SWAP_SHORT(&req->length); 685 __GLX_SWAP_INT(&req->major); 686 __GLX_SWAP_INT(&req->minor); 687 __GLX_SWAP_INT(&req->numbytes); 688 689 return __glXDisp_ClientInfo(cl, pc); 690} 691 692int 693__glXDispSwap_QueryContextInfoEXT(__GLXclientState * cl, GLbyte * pc) 694{ 695 ClientPtr client = cl->client; 696 xGLXQueryContextInfoEXTReq *req = (xGLXQueryContextInfoEXTReq *) pc; 697 698 __GLX_DECLARE_SWAP_VARIABLES; 699 700 REQUEST_SIZE_MATCH(xGLXQueryContextInfoEXTReq); 701 702 __GLX_SWAP_SHORT(&req->length); 703 __GLX_SWAP_INT(&req->context); 704 705 return __glXDisp_QueryContextInfoEXT(cl, pc); 706} 707 708int 709__glXDispSwap_BindTexImageEXT(__GLXclientState * cl, GLbyte * pc) 710{ 711 ClientPtr client = cl->client; 712 xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc; 713 GLXDrawable *drawId; 714 int *buffer; 715 CARD32 *num_attribs; 716 717 __GLX_DECLARE_SWAP_VARIABLES; 718 719 if ((sizeof(xGLXVendorPrivateReq) + 12) >> 2 > client->req_len) 720 return BadLength; 721 722 pc += __GLX_VENDPRIV_HDR_SIZE; 723 724 drawId = ((GLXDrawable *) (pc)); 725 buffer = ((int *) (pc + 4)); 726 num_attribs = ((CARD32 *) (pc + 8)); 727 728 __GLX_SWAP_SHORT(&req->length); 729 __GLX_SWAP_INT(&req->contextTag); 730 __GLX_SWAP_INT(drawId); 731 __GLX_SWAP_INT(buffer); 732 __GLX_SWAP_INT(num_attribs); 733 734 return __glXDisp_BindTexImageEXT(cl, (GLbyte *) pc); 735} 736 737int 738__glXDispSwap_ReleaseTexImageEXT(__GLXclientState * cl, GLbyte * pc) 739{ 740 ClientPtr client = cl->client; 741 xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc; 742 GLXDrawable *drawId; 743 int *buffer; 744 745 __GLX_DECLARE_SWAP_VARIABLES; 746 747 REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 8); 748 749 pc += __GLX_VENDPRIV_HDR_SIZE; 750 751 drawId = ((GLXDrawable *) (pc)); 752 buffer = ((int *) (pc + 4)); 753 754 __GLX_SWAP_SHORT(&req->length); 755 __GLX_SWAP_INT(&req->contextTag); 756 __GLX_SWAP_INT(drawId); 757 __GLX_SWAP_INT(buffer); 758 759 return __glXDisp_ReleaseTexImageEXT(cl, (GLbyte *) pc); 760} 761 762int 763__glXDispSwap_CopySubBufferMESA(__GLXclientState * cl, GLbyte * pc) 764{ 765 ClientPtr client = cl->client; 766 xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc; 767 GLXDrawable *drawId; 768 int *buffer; 769 770 __GLX_DECLARE_SWAP_VARIABLES; 771 772 REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 20); 773 774 (void) drawId; 775 (void) buffer; 776 777 pc += __GLX_VENDPRIV_HDR_SIZE; 778 779 __GLX_SWAP_SHORT(&req->length); 780 __GLX_SWAP_INT(&req->contextTag); 781 __GLX_SWAP_INT(pc); 782 __GLX_SWAP_INT(pc + 4); 783 __GLX_SWAP_INT(pc + 8); 784 __GLX_SWAP_INT(pc + 12); 785 __GLX_SWAP_INT(pc + 16); 786 787 return __glXDisp_CopySubBufferMESA(cl, pc); 788 789} 790 791int 792__glXDispSwap_GetDrawableAttributesSGIX(__GLXclientState * cl, GLbyte * pc) 793{ 794 ClientPtr client = cl->client; 795 xGLXVendorPrivateWithReplyReq *req = (xGLXVendorPrivateWithReplyReq *) pc; 796 CARD32 *data; 797 798 __GLX_DECLARE_SWAP_VARIABLES; 799 800 REQUEST_SIZE_MATCH(xGLXGetDrawableAttributesSGIXReq); 801 802 data = (CARD32 *) (req + 1); 803 __GLX_SWAP_SHORT(&req->length); 804 __GLX_SWAP_INT(&req->contextTag); 805 __GLX_SWAP_INT(data); 806 807 return __glXDisp_GetDrawableAttributesSGIX(cl, pc); 808} 809 810int 811__glXDispSwap_GetDrawableAttributes(__GLXclientState * cl, GLbyte * pc) 812{ 813 ClientPtr client = cl->client; 814 xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *) pc; 815 816 __GLX_DECLARE_SWAP_VARIABLES; 817 818 REQUEST_AT_LEAST_SIZE(xGLXGetDrawableAttributesReq); 819 820 __GLX_SWAP_SHORT(&req->length); 821 __GLX_SWAP_INT(&req->drawable); 822 823 return __glXDisp_GetDrawableAttributes(cl, pc); 824} 825 826/************************************************************************/ 827 828/* 829** Swap replies. 830*/ 831 832void 833__glXSwapMakeCurrentReply(ClientPtr client, xGLXMakeCurrentReply * reply) 834{ 835 __GLX_DECLARE_SWAP_VARIABLES; 836 __GLX_SWAP_SHORT(&reply->sequenceNumber); 837 __GLX_SWAP_INT(&reply->length); 838 __GLX_SWAP_INT(&reply->contextTag); 839 WriteToClient(client, sz_xGLXMakeCurrentReply, reply); 840} 841 842void 843__glXSwapIsDirectReply(ClientPtr client, xGLXIsDirectReply * reply) 844{ 845 __GLX_DECLARE_SWAP_VARIABLES; 846 __GLX_SWAP_SHORT(&reply->sequenceNumber); 847 __GLX_SWAP_INT(&reply->length); 848 WriteToClient(client, sz_xGLXIsDirectReply, reply); 849} 850 851void 852__glXSwapQueryVersionReply(ClientPtr client, xGLXQueryVersionReply * reply) 853{ 854 __GLX_DECLARE_SWAP_VARIABLES; 855 __GLX_SWAP_SHORT(&reply->sequenceNumber); 856 __GLX_SWAP_INT(&reply->length); 857 __GLX_SWAP_INT(&reply->majorVersion); 858 __GLX_SWAP_INT(&reply->minorVersion); 859 WriteToClient(client, sz_xGLXQueryVersionReply, reply); 860} 861 862void 863glxSwapQueryExtensionsStringReply(ClientPtr client, 864 xGLXQueryExtensionsStringReply * reply, 865 char *buf) 866{ 867 int length = reply->length; 868 869 __GLX_DECLARE_SWAP_VARIABLES; 870 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 871 __GLX_SWAP_SHORT(&reply->sequenceNumber); 872 __GLX_SWAP_INT(&reply->length); 873 __GLX_SWAP_INT(&reply->n); 874 WriteToClient(client, sz_xGLXQueryExtensionsStringReply, reply); 875 __GLX_SWAP_INT_ARRAY((int *) buf, length); 876 WriteToClient(client, length << 2, buf); 877} 878 879void 880glxSwapQueryServerStringReply(ClientPtr client, 881 xGLXQueryServerStringReply * reply, char *buf) 882{ 883 int length = reply->length; 884 885 __GLX_DECLARE_SWAP_VARIABLES; 886 __GLX_SWAP_SHORT(&reply->sequenceNumber); 887 __GLX_SWAP_INT(&reply->length); 888 __GLX_SWAP_INT(&reply->n); 889 WriteToClient(client, sz_xGLXQueryServerStringReply, reply); 890 /** no swap is needed for an array of chars **/ 891 /* __GLX_SWAP_INT_ARRAY((int *)buf, length); */ 892 WriteToClient(client, length << 2, buf); 893} 894 895void 896__glXSwapQueryContextInfoEXTReply(ClientPtr client, 897 xGLXQueryContextInfoEXTReply * reply, 898 int *buf) 899{ 900 int length = reply->length; 901 902 __GLX_DECLARE_SWAP_VARIABLES; 903 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 904 __GLX_SWAP_SHORT(&reply->sequenceNumber); 905 __GLX_SWAP_INT(&reply->length); 906 __GLX_SWAP_INT(&reply->n); 907 WriteToClient(client, sz_xGLXQueryContextInfoEXTReply, reply); 908 __GLX_SWAP_INT_ARRAY((int *) buf, length); 909 WriteToClient(client, length << 2, buf); 910} 911 912void 913__glXSwapGetDrawableAttributesReply(ClientPtr client, 914 xGLXGetDrawableAttributesReply * reply, 915 CARD32 *buf) 916{ 917 int length = reply->length; 918 919 __GLX_DECLARE_SWAP_VARIABLES; 920 __GLX_DECLARE_SWAP_ARRAY_VARIABLES; 921 __GLX_SWAP_SHORT(&reply->sequenceNumber); 922 __GLX_SWAP_INT(&reply->length); 923 __GLX_SWAP_INT(&reply->numAttribs); 924 WriteToClient(client, sz_xGLXGetDrawableAttributesReply, reply); 925 __GLX_SWAP_INT_ARRAY((int *) buf, length); 926 WriteToClient(client, length << 2, buf); 927} 928 929/************************************************************************/ 930 931/* 932** Render and Renderlarge are not in the GLX API. They are used by the GLX 933** client library to send batches of GL rendering commands. 934*/ 935 936int 937__glXDispSwap_Render(__GLXclientState * cl, GLbyte * pc) 938{ 939 return __glXDisp_Render(cl, pc); 940} 941 942/* 943** Execute a large rendering request (one that spans multiple X requests). 944*/ 945int 946__glXDispSwap_RenderLarge(__GLXclientState * cl, GLbyte * pc) 947{ 948 return __glXDisp_RenderLarge(cl, pc); 949} 950 951/************************************************************************/ 952 953/* 954** No support is provided for the vendor-private requests other than 955** allocating these entry points in the dispatch table. 956*/ 957 958int 959__glXDispSwap_VendorPrivate(__GLXclientState * cl, GLbyte * pc) 960{ 961 ClientPtr client = cl->client; 962 xGLXVendorPrivateReq *req; 963 GLint vendorcode; 964 __GLXdispatchVendorPrivProcPtr proc; 965 966 __GLX_DECLARE_SWAP_VARIABLES; 967 REQUEST_AT_LEAST_SIZE(xGLXVendorPrivateReq); 968 969 req = (xGLXVendorPrivateReq *) pc; 970 __GLX_SWAP_SHORT(&req->length); 971 __GLX_SWAP_INT(&req->vendorCode); 972 973 vendorcode = req->vendorCode; 974 975 proc = (__GLXdispatchVendorPrivProcPtr) 976 __glXGetProtocolDecodeFunction(&VendorPriv_dispatch_info, 977 vendorcode, 1); 978 if (proc != NULL) { 979 (*proc) (cl, (GLbyte *) req); 980 return Success; 981 } 982 983 cl->client->errorValue = req->vendorCode; 984 return __glXError(GLXUnsupportedPrivateRequest); 985} 986 987int 988__glXDispSwap_VendorPrivateWithReply(__GLXclientState * cl, GLbyte * pc) 989{ 990 ClientPtr client = cl->client; 991 xGLXVendorPrivateWithReplyReq *req; 992 GLint vendorcode; 993 __GLXdispatchVendorPrivProcPtr proc; 994 995 __GLX_DECLARE_SWAP_VARIABLES; 996 REQUEST_AT_LEAST_SIZE(xGLXVendorPrivateWithReplyReq); 997 998 req = (xGLXVendorPrivateWithReplyReq *) pc; 999 __GLX_SWAP_SHORT(&req->length); 1000 __GLX_SWAP_INT(&req->vendorCode); 1001 1002 vendorcode = req->vendorCode; 1003 1004 proc = (__GLXdispatchVendorPrivProcPtr) 1005 __glXGetProtocolDecodeFunction(&VendorPriv_dispatch_info, 1006 vendorcode, 1); 1007 if (proc != NULL) { 1008 return (*proc) (cl, (GLbyte *) req); 1009 } 1010 1011 cl->client->errorValue = req->vendorCode; 1012 return __glXError(GLXUnsupportedPrivateRequest); 1013} 1014