XF86dri.c revision 5dd18e95d9aba8cc444a511808a1df15ca7a037a
1cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.13 2002/10/30 12:51:25 alanh Exp $ */ 2cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/************************************************************************** 3cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 4cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 5cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonCopyright 2000 VA Linux Systems, Inc. 6cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonAll Rights Reserved. 7cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 8cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonPermission is hereby granted, free of charge, to any person obtaining a 9cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksoncopy of this software and associated documentation files (the 10cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson"Software"), to deal in the Software without restriction, including 11cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonwithout limitation the rights to use, copy, modify, merge, publish, 12cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksondistribute, sub license, and/or sell copies of the Software, and to 13cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonpermit persons to whom the Software is furnished to do so, subject to 14cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonthe following conditions: 15cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 16cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonThe above copyright notice and this permission notice (including the 17cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonnext paragraph) shall be included in all copies or substantial portions 18cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonof the Software. 19cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 20cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 21cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 23cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 24cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 25cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 26cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 28cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson**************************************************************************/ 29cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 30cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/* 31cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * Authors: 32cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * Kevin E. Martin <martin@valinux.com> 33cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * Jens Owen <jens@tungstengraphics.com> 34cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * Rickard E. (Rik) Faith <faith@valinux.com> 35cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * 36cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */ 37cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 38cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/* THIS IS NOT AN X CONSORTIUM STANDARD */ 39cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 40cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define NEED_REPLIES 41cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include <X11/Xlibint.h> 42cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include "xf86dristr.h" 43cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include <X11/extensions/Xext.h> 44cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include "extutil.h" 45cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 46cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XExtensionInfo _xf86dri_info_data; 47cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XExtensionInfo *xf86dri_info = &_xf86dri_info_data; 485dd18e95d9aba8cc444a511808a1df15ca7a037aAdam Jacksonstatic char xf86dri_extension_name[] = XF86DRINAME; 49cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 50cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define XF86DRICheckExtension(dpy,i,val) \ 51cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XextCheckExtension (dpy, i, xf86dri_extension_name, val) 52cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 53cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/***************************************************************************** 54cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 55cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * private utility routines * 56cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 57cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *****************************************************************************/ 58cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 59cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic int close_display(Display *dpy, XExtCodes *extCodes); 60cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic /* const */ XExtensionHooks xf86dri_extension_hooks = { 61cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* create_gc */ 62cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* copy_gc */ 63cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* flush_gc */ 64cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* free_gc */ 65cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* create_font */ 66cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* free_font */ 67cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson close_display, /* close_display */ 68cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* wire_to_event */ 69cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* event_to_wire */ 70cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* error */ 71cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* error_string */ 72cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}; 73cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 74cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XEXT_GENERATE_FIND_DISPLAY (find_display, xf86dri_info, 75cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xf86dri_extension_name, 76cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson &xf86dri_extension_hooks, 77cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 0, NULL) 78cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 79cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XEXT_GENERATE_CLOSE_DISPLAY (close_display, xf86dri_info) 80cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 81cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 82cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/***************************************************************************** 83cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 84cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * public XFree86-DRI Extension routines * 85cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 86cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *****************************************************************************/ 87cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 88cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#if 0 89cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include <stdio.h> 90cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define TRACE(msg) fprintf(stderr,"XF86DRI%s\n", msg); 91cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#else 92cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define TRACE(msg) 93cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 94cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 95cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 96cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIQueryExtension (dpy, event_basep, error_basep) 97cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display *dpy; 98cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int *event_basep, *error_basep; 99cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 100cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 101cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 102cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryExtension..."); 103cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (XextHasExtension(info)) { 104cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *event_basep = info->codes->first_event; 105cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *error_basep = info->codes->first_error; 106cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryExtension... return True"); 107cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 108cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 109cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryExtension... return False"); 110cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 111cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 112cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 113cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 114cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIQueryVersion(dpy, majorVersion, minorVersion, patchVersion) 115cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 116cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* majorVersion; 117cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* minorVersion; 118cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* patchVersion; 119cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 120cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 121cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryVersionReply rep; 122cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryVersionReq *req; 123cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 124cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryVersion..."); 125cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 126cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 127cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 128cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIQueryVersion, req); 129cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 130cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIQueryVersion; 131cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 132cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 133cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 134cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryVersion... return False"); 135cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 136cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 137cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *majorVersion = rep.majorVersion; 138cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *minorVersion = rep.minorVersion; 139cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *patchVersion = rep.patchVersion; 140cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 141cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 142cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryVersion... return True"); 143cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 144cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 145cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 146cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIQueryDirectRenderingCapable(dpy, screen, isCapable) 147cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 148cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 149cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Bool* isCapable; 150cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 151cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 152cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryDirectRenderingCapableReply rep; 153cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryDirectRenderingCapableReq *req; 154cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 155cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryDirectRenderingCapable..."); 156cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 157cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 158cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 159cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIQueryDirectRenderingCapable, req); 160cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 161cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIQueryDirectRenderingCapable; 162cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 163cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 164cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 165cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 166cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryDirectRenderingCapable... return False"); 167cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 168cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 169cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *isCapable = rep.isCapable; 170cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 171cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 172cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryDirectRenderingCapable... return True"); 173cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 174cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 175cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 176cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIOpenConnection(dpy, screen, hSAREA, busIdString) 177cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 178cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 179cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_handle_t * hSAREA; 180cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson char **busIdString; 181cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 182cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 183cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIOpenConnectionReply rep; 184cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIOpenConnectionReq *req; 185cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 186cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection..."); 187cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 188cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 189cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 190cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIOpenConnection, req); 191cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 192cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIOpenConnection; 193cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 194cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 195cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 196cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 197cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection... return False"); 198cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 199cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 200cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 201cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hSAREA = rep.hSAREALow; 202cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#ifdef LONG64 203cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hSAREA |= ((drm_handle_t)rep.hSAREAHigh) << 32; 204cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 205cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 206cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length) { 207cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!(*busIdString = (char *)Xcalloc(rep.busIdStringLength + 1, 1))) { 208cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, ((rep.busIdStringLength+3) & ~3)); 209cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 210cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 211cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection... return False"); 212cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 213cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 214cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XReadPad(dpy, *busIdString, rep.busIdStringLength); 215cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 216cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *busIdString = NULL; 217cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 218cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 219cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 220cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection... return True"); 221cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 222cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 223cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 224cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIAuthConnection(dpy, screen, magic) 225cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 226cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 227cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_magic_t magic; 228cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 229cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 230cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIAuthConnectionReq *req; 231cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIAuthConnectionReply rep; 232cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 233cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("AuthConnection..."); 234cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 235cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 236cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 237cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIAuthConnection, req); 238cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 239cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIAuthConnection; 240cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 241cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->magic = magic; 242cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson rep.authenticated = 0; 243cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse) || !rep.authenticated) { 244cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 245cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 246cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("AuthConnection... return False"); 247cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 248cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 249cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 250cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 251cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("AuthConnection... return True"); 252cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 253cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 254cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 255cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRICloseConnection(dpy, screen) 256cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 257cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 258cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 259cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 260cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICloseConnectionReq *req; 261cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 262cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CloseConnection..."); 263cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 264cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 265cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 266cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 267cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRICloseConnection, req); 268cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 269cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRICloseConnection; 270cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 271cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 272cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 273cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CloseConnection... return True"); 274cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 275cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 276cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 277cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIGetClientDriverName(dpy, screen, ddxDriverMajorVersion, 278cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson ddxDriverMinorVersion, ddxDriverPatchVersion, clientDriverName) 279cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 280cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 281cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* ddxDriverMajorVersion; 282cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* ddxDriverMinorVersion; 283cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* ddxDriverPatchVersion; 284cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson char** clientDriverName; 285cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 286cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 287cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetClientDriverNameReply rep; 288cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetClientDriverNameReq *req; 289cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 290cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName..."); 291cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 292cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 293cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 294cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIGetClientDriverName, req); 295cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 296cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIGetClientDriverName; 297cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 298cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 299cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 300cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 301cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName... return False"); 302cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 303cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 304cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 305cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *ddxDriverMajorVersion = rep.ddxDriverMajorVersion; 306cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *ddxDriverMinorVersion = rep.ddxDriverMinorVersion; 307cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *ddxDriverPatchVersion = rep.ddxDriverPatchVersion; 308cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 309cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length) { 310cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!(*clientDriverName = (char *)Xcalloc(rep.clientDriverNameLength + 1, 1))) { 311cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, ((rep.clientDriverNameLength+3) & ~3)); 312cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 313cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 314cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName... return False"); 315cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 316cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 317cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength); 318cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 319cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *clientDriverName = NULL; 320cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 321cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 322cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 323cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName... return True"); 324cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 325cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 326cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 327cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRICreateContextWithConfig(dpy, screen, configID, context, hHWContext) 328cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 329cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 330cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int configID; 331cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XID* context; 332cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_context_t * hHWContext; 333cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 334cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 335cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateContextReply rep; 336cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateContextReq *req; 337cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 338cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateContext..."); 339cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 340cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 341cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 342cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRICreateContext, req); 343cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 344cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRICreateContext; 345cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->visual = configID; 346cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 347cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *context = XAllocID(dpy); 348cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->context = *context; 349cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 350cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 351cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 352cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateContext... return False"); 353cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 354cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 355cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hHWContext = rep.hHWContext; 356cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 357cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 358cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateContext... return True"); 359cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 360cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 361cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 362cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRICreateContext(dpy, screen, visual, context, hHWContext) 363cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 364cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 365cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Visual* visual; 366cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XID* context; 367cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_context_t * hHWContext; 368cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 369cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return XF86DRICreateContextWithConfig( dpy, screen, visual->visualid, 370cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson context, hHWContext ); 371cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 372cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 373cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonGLboolean XF86DRIDestroyContext( __DRInativeDisplay * ndpy, int screen, 374cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson __DRIid context ) 375cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 376cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display * const dpy = (Display *) ndpy; 377cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 378cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIDestroyContextReq *req; 379cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 380cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyContext..."); 381cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 382cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 383cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 384cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIDestroyContext, req); 385cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 386cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIDestroyContext; 387cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 388cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->context = context; 389cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 390cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 391cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyContext... return True"); 392cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 393cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 394cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 395cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonGLboolean XF86DRICreateDrawable( __DRInativeDisplay * ndpy, int screen, 396cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson __DRIid drawable, drm_drawable_t * hHWDrawable ) 397cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 398cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display * const dpy = (Display *) ndpy; 399cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 400cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateDrawableReply rep; 401cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateDrawableReq *req; 402cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 403cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateDrawable..."); 404cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 405cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 406cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 407cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRICreateDrawable, req); 408cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 409cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRICreateDrawable; 410cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 411cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->drawable = drawable; 412cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 413cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 414cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 415cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateDrawable... return False"); 416cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 417cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 418cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hHWDrawable = rep.hHWDrawable; 419cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 420cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 421cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateDrawable... return True"); 422cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 423cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 424cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 425cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonGLboolean XF86DRIDestroyDrawable( __DRInativeDisplay * ndpy, int screen, 426cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson __DRIid drawable ) 427cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 428cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display * const dpy = (Display *) ndpy; 429cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 430cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIDestroyDrawableReq *req; 431cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 432cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyDrawable..."); 433cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 434cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 435cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 436cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIDestroyDrawable, req); 437cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 438cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIDestroyDrawable; 439cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 440cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->drawable = drawable; 441cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 442cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 443cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyDrawable... return True"); 444cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 445cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 446cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 447cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIGetDrawableInfo(Display* dpy, int screen, Drawable drawable, 448cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson unsigned int* index, unsigned int* stamp, 449cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* X, int* Y, int* W, int* H, 450cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* numClipRects, drm_clip_rect_t ** pClipRects, 451cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* backX, int* backY, 452cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* numBackClipRects, drm_clip_rect_t ** pBackClipRects ) 453cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 454cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 455cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDrawableInfoReply rep; 456cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDrawableInfoReq *req; 457cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int total_rects; 458cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 459cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo..."); 460cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 461cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 462cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 463cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIGetDrawableInfo, req); 464cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 465cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIGetDrawableInfo; 466cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 467cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->drawable = drawable; 468cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 469cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 1, xFalse)) 470cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson { 471cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 472cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 473cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo... return False"); 474cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 475cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 476cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *index = rep.drawableTableIndex; 477cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *stamp = rep.drawableTableStamp; 478cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *X = (int)rep.drawableX; 479cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *Y = (int)rep.drawableY; 480cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *W = (int)rep.drawableWidth; 481cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *H = (int)rep.drawableHeight; 482cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *numClipRects = rep.numClipRects; 483cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson total_rects = *numClipRects; 484cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 485cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *backX = rep.backX; 486cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *backY = rep.backY; 487cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *numBackClipRects = rep.numBackClipRects; 488cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson total_rects += *numBackClipRects; 489cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 490cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#if 0 491cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks 492cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * backwards compatibility (Because of the >> 2 shift) but the fix 493cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * enables multi-threaded apps to work. 494cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */ 495cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length != ((((SIZEOF(xXF86DRIGetDrawableInfoReply) - 496cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SIZEOF(xGenericReply) + 497cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson total_rects * sizeof(drm_clip_rect_t)) + 3) & ~3) >> 2)) { 498cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, rep.length); 499cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 500cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 501cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo... return False"); 502cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 503cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 504cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 505cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 506cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*numClipRects) { 507cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int len = sizeof(drm_clip_rect_t) * (*numClipRects); 508cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 509cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); 510cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*pClipRects) 511cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XRead(dpy, (char*)*pClipRects, len); 512cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 513cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pClipRects = NULL; 514cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 515cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 516cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*numBackClipRects) { 517cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int len = sizeof(drm_clip_rect_t) * (*numBackClipRects); 518cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 519cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pBackClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); 520cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*pBackClipRects) 521cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XRead(dpy, (char*)*pBackClipRects, len); 522cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 523cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pBackClipRects = NULL; 524cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 525cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 526cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 527cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 528cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo... return True"); 529cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 530cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 531cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 532cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIGetDeviceInfo(dpy, screen, hFrameBuffer, 533cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson fbOrigin, fbSize, fbStride, devPrivateSize, pDevPrivate) 534cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 535cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 536cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_handle_t * hFrameBuffer; 537cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* fbOrigin; 538cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* fbSize; 539cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* fbStride; 540cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* devPrivateSize; 541cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson void** pDevPrivate; 542cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 543cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 544cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDeviceInfoReply rep; 545cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDeviceInfoReq *req; 546cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 547cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo..."); 548cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 549cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 550cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 551cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIGetDeviceInfo, req); 552cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 553cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIGetDeviceInfo; 554cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 555cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 556cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 557cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 558cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo... return False"); 559cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 560cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 561cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 562cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hFrameBuffer = rep.hFrameBufferLow; 563cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#ifdef LONG64 564cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hFrameBuffer |= ((drm_handle_t)rep.hFrameBufferHigh) << 32; 565cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 566cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 567cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *fbOrigin = rep.framebufferOrigin; 568cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *fbSize = rep.framebufferSize; 569cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *fbStride = rep.framebufferStride; 570cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *devPrivateSize = rep.devPrivateSize; 571cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 572cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length) { 573cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!(*pDevPrivate = (void *)Xcalloc(rep.devPrivateSize, 1))) { 574cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, ((rep.devPrivateSize+3) & ~3)); 575cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 576cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 577cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo... return False"); 578cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 579cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 580cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XRead(dpy, (char*)*pDevPrivate, rep.devPrivateSize); 581cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 582cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pDevPrivate = NULL; 583cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 584cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 585cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 586cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 587cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo... return True"); 588cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 589cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 590cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 591cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRIOpenFullScreen(dpy, screen, drawable) 592cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 593cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 594cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Drawable drawable; 595cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 596cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson /* This function and the underlying X protocol are deprecated. 597cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */ 598cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) dpy; 599cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) screen; 600cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) drawable; 601cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 602cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 603cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 604cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonBool XF86DRICloseFullScreen(dpy, screen, drawable) 605cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 606cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 607cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Drawable drawable; 608cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 609cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson /* This function and the underlying X protocol are deprecated. 610cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */ 611cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) dpy; 612cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) screen; 613cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) drawable; 614cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 615cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 616