13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgCopyright 2000 VA Linux Systems, Inc. 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAll Rights Reserved. 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgPermission is hereby granted, free of charge, to any person obtaining a 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgcopy of this software and associated documentation files (the 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org"Software"), to deal in the Software without restriction, including 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgwithout limitation the rights to use, copy, modify, merge, publish, 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgdistribute, sub license, and/or sell copies of the Software, and to 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgpermit persons to whom the Software is furnished to do so, subject to 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgthe following conditions: 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgThe above copyright notice and this permission notice (including the 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgnext paragraph) shall be included in all copies or substantial portions 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgof the Software. 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org**************************************************************************/ 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Authors: 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Kevin E. Martin <martin@valinux.com> 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Jens Owen <jens@tungstengraphics.com> 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Rickard E. (Rik) Faith <faith@valinux.com> 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* THIS IS NOT AN X CONSORTIUM STANDARD */ 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 39760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include <X11/Xlibint.h> 42760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include <X11/Xfuncproto.h> 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include <X11/extensions/Xext.h> 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include <X11/extensions/extutil.h> 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "xf86dristr.h" 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic XExtensionInfo _xf86dri_info_data; 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic XExtensionInfo *xf86dri_info = &_xf86dri_info_data; 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic char xf86dri_extension_name[] = XF86DRINAME; 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define XF86DRICheckExtension(dpy,i,val) \ 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XextCheckExtension (dpy, i, xf86dri_extension_name, val) 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/***************************************************************************** 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * * 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * private utility routines * 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * * 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *****************************************************************************/ 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int close_display(Display * dpy, XExtCodes * extCodes); 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic /* const */ XExtensionHooks xf86dri_extension_hooks = { 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* create_gc */ 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* copy_gc */ 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* flush_gc */ 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* free_gc */ 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* create_font */ 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* free_font */ 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org close_display, /* close_display */ 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* wire_to_event */ 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* event_to_wire */ 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* error */ 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NULL, /* error_string */ 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXEXT_GENERATE_FIND_DISPLAY(find_display, xf86dri_info, 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xf86dri_extension_name, 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org &xf86dri_extension_hooks, 0, NULL) 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXEXT_GENERATE_CLOSE_DISPLAY(close_display, xf86dri_info) 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/***************************************************************************** 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * * 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * public XFree86-DRI Extension routines * 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * * 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *****************************************************************************/ 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#if 0 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include <stdio.h> 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define TRACE(msg) fprintf(stderr,"XF86DRI%s\n", msg); 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#else 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define TRACE(msg) 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 96760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIQueryExtension(Display * dpy, int *event_basep, 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *error_basep) 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryExtension..."); 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (XextHasExtension(info)) { 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *event_basep = info->codes->first_event; 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *error_basep = info->codes->first_error; 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryExtension... return True"); 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryExtension... return False"); 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 115760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIQueryVersion(Display * dpy, int *majorVersion, int *minorVersion, 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *patchVersion) 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIQueryVersionReply rep; 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIQueryVersionReq *req; 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryVersion..."); 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIQueryVersion, req); 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIQueryVersion; 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) { 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryVersion... return False"); 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *majorVersion = rep.majorVersion; 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *minorVersion = rep.minorVersion; 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *patchVersion = rep.patchVersion; 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryVersion... return True"); 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 145760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIQueryDirectRenderingCapable(Display * dpy, int screen, 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Bool * isCapable) 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIQueryDirectRenderingCapableReply rep; 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIQueryDirectRenderingCapableReq *req; 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryDirectRenderingCapable..."); 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIQueryDirectRenderingCapable, req); 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIQueryDirectRenderingCapable; 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) { 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryDirectRenderingCapable... return False"); 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *isCapable = rep.isCapable; 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("QueryDirectRenderingCapable... return True"); 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 174760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIOpenConnection(Display * dpy, int screen, drm_handle_t * hSAREA, 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org char **busIdString) 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIOpenConnectionReply rep; 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIOpenConnectionReq *req; 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("OpenConnection..."); 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIOpenConnection, req); 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIOpenConnection; 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) { 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("OpenConnection... return False"); 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *hSAREA = rep.hSAREALow; 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (sizeof(drm_handle_t) == 8) { 1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int shift = 32; /* var to prevent warning on next line */ 2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *hSAREA |= ((drm_handle_t) rep.hSAREAHigh) << shift; 2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (rep.length) { 2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!(*busIdString = (char *) Xcalloc(rep.busIdStringLength + 1, 1))) { 2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XEatData(dpy, ((rep.busIdStringLength + 3) & ~3)); 2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("OpenConnection... return False"); 2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XReadPad(dpy, *busIdString, rep.busIdStringLength); 2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *busIdString = NULL; 2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("OpenConnection... return True"); 2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 222760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIAuthConnection(Display * dpy, int screen, drm_magic_t magic) 2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIAuthConnectionReq *req; 2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIAuthConnectionReply rep; 2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("AuthConnection..."); 2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIAuthConnection, req); 2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIAuthConnection; 2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->magic = magic; 2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org rep.authenticated = 0; 2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse) || !rep.authenticated) { 2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 2413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("AuthConnection... return False"); 2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("AuthConnection... return True"); 2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 251760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 2523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRICloseConnection(Display * dpy, int screen) 2533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 2553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRICloseConnectionReq *req; 2563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CloseConnection..."); 2583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 2603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 2623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRICloseConnection, req); 2633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 2643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRICloseConnection; 2653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 2663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 2673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 2683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CloseConnection... return True"); 2693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 2703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 272760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 2733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIGetClientDriverName(Display * dpy, int screen, 2743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *ddxDriverMajorVersion, 2753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *ddxDriverMinorVersion, 2763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *ddxDriverPatchVersion, 2773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org char **clientDriverName) 2783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 2803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIGetClientDriverNameReply rep; 2813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIGetClientDriverNameReq *req; 2823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetClientDriverName..."); 2843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 2853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 2873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIGetClientDriverName, req); 2883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 2893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIGetClientDriverName; 2903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 2913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) { 2923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 2933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 2943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetClientDriverName... return False"); 2953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 2963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *ddxDriverMajorVersion = rep.ddxDriverMajorVersion; 2993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *ddxDriverMinorVersion = rep.ddxDriverMinorVersion; 3003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *ddxDriverPatchVersion = rep.ddxDriverPatchVersion; 3013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (rep.length) { 3033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (! 3043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (*clientDriverName = 3053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (char *) Xcalloc(rep.clientDriverNameLength + 1, 1))) { 3063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XEatData(dpy, ((rep.clientDriverNameLength + 3) & ~3)); 3073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 3083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 3093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetClientDriverName... return False"); 3103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 3113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength); 3133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 3153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *clientDriverName = NULL; 3163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 3183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 3193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetClientDriverName... return True"); 3203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 3213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 323760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 3243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRICreateContextWithConfig(Display * dpy, int screen, int configID, 3253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XID * context, drm_context_t * hHWContext) 3263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 3283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRICreateContextReply rep; 3293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRICreateContextReq *req; 3303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CreateContext..."); 3323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 3333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 3353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRICreateContext, req); 3363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 3373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRICreateContext; 3383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->visual = configID; 3393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 3403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *context = XAllocID(dpy); 3413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->context = *context; 3423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) { 3433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 3443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 3453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CreateContext... return False"); 3463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 3473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *hHWContext = rep.hHWContext; 3493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 3503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 3513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CreateContext... return True"); 3523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 3533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 355760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 3563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRICreateContext(Display * dpy, int screen, Visual * visual, 3573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XID * context, drm_context_t * hHWContext) 3583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return XF86DRICreateContextWithConfig(dpy, screen, visual->visualid, 3603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org context, hHWContext); 3613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 363760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 3643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIDestroyContext(Display * dpy, int screen, XID context) 3653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 3673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIDestroyContextReq *req; 3683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("DestroyContext..."); 3703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 3713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 3733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIDestroyContext, req); 3743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 3753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIDestroyContext; 3763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 3773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->context = context; 3783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 3793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 3803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("DestroyContext... return True"); 3813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 3823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 384760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 3853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRICreateDrawable(Display * dpy, int screen, 3863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XID drawable, drm_drawable_t * hHWDrawable) 3873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 3893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRICreateDrawableReply rep; 3903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRICreateDrawableReq *req; 3913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CreateDrawable..."); 3933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 3943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 3963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRICreateDrawable, req); 3973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 3983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRICreateDrawable; 3993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 4003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->drawable = drawable; 4013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) { 4023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 4033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 4043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CreateDrawable... return False"); 4053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 4063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *hHWDrawable = rep.hHWDrawable; 4083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 4093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 4103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("CreateDrawable... return True"); 4113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 4123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int 4153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgnoopErrorHandler(Display * dpy, XErrorEvent * xerr) 4163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 4173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 4183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 420760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 4213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIDestroyDrawable(Display * dpy, int screen, XID drawable) 4223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 4233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 4243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIDestroyDrawableReq *req; 4253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int (*oldXErrorHandler) (Display *, XErrorEvent *); 4263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("DestroyDrawable..."); 4283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 4293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* This is called from the DRI driver, which used call it like this 4313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 4323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * if (windowExists(drawable)) 4333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * destroyDrawable(drawable); 4343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 4353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * which is a textbook race condition - the window may disappear 4363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * from the server between checking for its existance and 4373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * destroying it. Instead we change the semantics of 4383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * __DRIinterfaceMethodsRec::destroyDrawable() to succeed even if 4393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the windows is gone, by wrapping the destroy call in an error 4403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * handler. */ 4413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XSync(dpy, False); 4433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org oldXErrorHandler = XSetErrorHandler(noopErrorHandler); 4443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 4463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIDestroyDrawable, req); 4473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 4483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIDestroyDrawable; 4493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 4503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->drawable = drawable; 4513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 4523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 4533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XSetErrorHandler(oldXErrorHandler); 4553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("DestroyDrawable... return True"); 4573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 4583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 460760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 4613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIGetDrawableInfo(Display * dpy, int screen, Drawable drawable, 4623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org unsigned int *index, unsigned int *stamp, 4633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *X, int *Y, int *W, int *H, 4643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *numClipRects, drm_clip_rect_t ** pClipRects, 4653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *backX, int *backY, 4663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *numBackClipRects, 4673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_clip_rect_t ** pBackClipRects) 4683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 4693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 4703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIGetDrawableInfoReply rep; 4713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIGetDrawableInfoReq *req; 4723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int total_rects; 4733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDrawableInfo..."); 4753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 4763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 4783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIGetDrawableInfo, req); 4793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 4803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIGetDrawableInfo; 4813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 4823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->drawable = drawable; 4833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 1, xFalse)) { 4853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 4863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 4873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDrawableInfo... return False"); 4883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 4893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *index = rep.drawableTableIndex; 4913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *stamp = rep.drawableTableStamp; 4923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *X = (int) rep.drawableX; 4933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *Y = (int) rep.drawableY; 4943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *W = (int) rep.drawableWidth; 4953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *H = (int) rep.drawableHeight; 4963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *numClipRects = rep.numClipRects; 4973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_rects = *numClipRects; 4983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *backX = rep.backX; 5003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *backY = rep.backY; 5013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *numBackClipRects = rep.numBackClipRects; 5023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_rects += *numBackClipRects; 5033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#if 0 5053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks 5063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * backwards compatibility (Because of the >> 2 shift) but the fix 5073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * enables multi-threaded apps to work. 5083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 5093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (rep.length != ((((SIZEOF(xXF86DRIGetDrawableInfoReply) - 5103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SIZEOF(xGenericReply) + 5113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_rects * sizeof(drm_clip_rect_t)) + 5123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3) & ~3) >> 2)) { 5133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XEatData(dpy, rep.length); 5143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 5153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 5163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDrawableInfo... return False"); 5173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 5183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 5203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (*numClipRects) { 5223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int len = sizeof(drm_clip_rect_t) * (*numClipRects); 5233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *pClipRects = (drm_clip_rect_t *) Xcalloc(len, 1); 5253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (*pClipRects) 5263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XRead(dpy, (char *) *pClipRects, len); 5273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 5293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *pClipRects = NULL; 5303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (*numBackClipRects) { 5333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int len = sizeof(drm_clip_rect_t) * (*numBackClipRects); 5343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *pBackClipRects = (drm_clip_rect_t *) Xcalloc(len, 1); 5363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (*pBackClipRects) 5373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XRead(dpy, (char *) *pBackClipRects, len); 5383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 5403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *pBackClipRects = NULL; 5413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 5443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 5453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDrawableInfo... return True"); 5463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 5473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 5483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 549760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 5503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIGetDeviceInfo(Display * dpy, int screen, drm_handle_t * hFrameBuffer, 5513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *fbOrigin, int *fbSize, int *fbStride, 5523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *devPrivateSize, void **pDevPrivate) 5533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 5543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XExtDisplayInfo *info = find_display(dpy); 5553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIGetDeviceInfoReply rep; 5563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xXF86DRIGetDeviceInfoReq *req; 5573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDeviceInfo..."); 5593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org XF86DRICheckExtension(dpy, info, False); 5603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LockDisplay(dpy); 5623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GetReq(XF86DRIGetDeviceInfo, req); 5633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->reqType = info->codes->major_opcode; 5643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->driReqType = X_XF86DRIGetDeviceInfo; 5653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org req->screen = screen; 5663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) { 5673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 5683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 5693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDeviceInfo... return False"); 5703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 5713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *hFrameBuffer = rep.hFrameBufferLow; 5743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (sizeof(drm_handle_t) == 8) { 5753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int shift = 32; /* var to prevent warning on next line */ 5763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *hFrameBuffer |= ((drm_handle_t) rep.hFrameBufferHigh) << shift; 5773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *fbOrigin = rep.framebufferOrigin; 5803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *fbSize = rep.framebufferSize; 5813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *fbStride = rep.framebufferStride; 5823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *devPrivateSize = rep.devPrivateSize; 5833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (rep.length) { 5853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!(*pDevPrivate = (void *) Xcalloc(rep.devPrivateSize, 1))) { 5863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XEatData(dpy, ((rep.devPrivateSize + 3) & ~3)); 5873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 5883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 5893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDeviceInfo... return False"); 5903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 5913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XRead(dpy, (char *) *pDevPrivate, rep.devPrivateSize); 5933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 5953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *pDevPrivate = NULL; 5963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org UnlockDisplay(dpy); 5993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SyncHandle(); 6003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TRACE("GetDeviceInfo... return True"); 6013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 6023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 6033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 604760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 6053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRIOpenFullScreen(Display * dpy, int screen, Drawable drawable) 6063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 6073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* This function and the underlying X protocol are deprecated. 6083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 6093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (void) dpy; 6103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (void) screen; 6113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (void) drawable; 6123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return False; 6133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 6143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 615760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgBool 6163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgXF86DRICloseFullScreen(Display * dpy, int screen, Drawable drawable) 6173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 6183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* This function and the underlying X protocol are deprecated. 6193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 6203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (void) dpy; 6213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (void) screen; 6223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (void) drawable; 6233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return True; 6243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 6253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif /* GLX_DIRECT_RENDERING */ 627