XF86dri.c revision 82dfd4b71f932f46e116743b204d0077a0875ab8
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 <X11/extensions/Xext.h> 4382dfd4b71f932f46e116743b204d0077a0875ab8Brian Paul#include <X11/extensions/extutil.h> 444890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam Jackson#include "glheader.h" 451074eae704f4f68a721cfb9810cd0fde3d3aed07Adam Jackson#include "xf86dristr.h" 46cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 47cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XExtensionInfo _xf86dri_info_data; 48cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XExtensionInfo *xf86dri_info = &_xf86dri_info_data; 495dd18e95d9aba8cc444a511808a1df15ca7a037aAdam Jacksonstatic char xf86dri_extension_name[] = XF86DRINAME; 50cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 51cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define XF86DRICheckExtension(dpy,i,val) \ 52cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XextCheckExtension (dpy, i, xf86dri_extension_name, val) 53cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 54cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/***************************************************************************** 55cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 56cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * private utility routines * 57cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 58cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *****************************************************************************/ 59cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 60cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic int close_display(Display *dpy, XExtCodes *extCodes); 61cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic /* const */ XExtensionHooks xf86dri_extension_hooks = { 62cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* create_gc */ 63cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* copy_gc */ 64cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* flush_gc */ 65cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* free_gc */ 66cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* create_font */ 67cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* free_font */ 68cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson close_display, /* close_display */ 69cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* wire_to_event */ 70cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* event_to_wire */ 71cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* error */ 72cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson NULL, /* error_string */ 73cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}; 74cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 75cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XEXT_GENERATE_FIND_DISPLAY (find_display, xf86dri_info, 76cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xf86dri_extension_name, 77cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson &xf86dri_extension_hooks, 78cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 0, NULL) 79cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 80cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XEXT_GENERATE_CLOSE_DISPLAY (close_display, xf86dri_info) 81cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 82cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 83cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/***************************************************************************** 84cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 85cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * public XFree86-DRI Extension routines * 86cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * * 87cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *****************************************************************************/ 88cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 89cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#if 0 90cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include <stdio.h> 91cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define TRACE(msg) fprintf(stderr,"XF86DRI%s\n", msg); 92cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#else 93cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define TRACE(msg) 94cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 95cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 96cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 974890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIQueryExtension (dpy, event_basep, error_basep) 98cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display *dpy; 99cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int *event_basep, *error_basep; 100cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 101cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 102cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 103cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryExtension..."); 104cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (XextHasExtension(info)) { 105cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *event_basep = info->codes->first_event; 106cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *error_basep = info->codes->first_error; 107cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryExtension... return True"); 108cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 109cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 110cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryExtension... return False"); 111cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 112cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 113cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 114cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 1154890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIQueryVersion(dpy, majorVersion, minorVersion, patchVersion) 116cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 117cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* majorVersion; 118cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* minorVersion; 119cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* patchVersion; 120cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 121cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 122cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryVersionReply rep; 123cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryVersionReq *req; 124cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 125cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryVersion..."); 126cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 127cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 128cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 129cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIQueryVersion, req); 130cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 131cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIQueryVersion; 132cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 133cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 134cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 135cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryVersion... return False"); 136cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 137cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 138cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *majorVersion = rep.majorVersion; 139cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *minorVersion = rep.minorVersion; 140cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *patchVersion = rep.patchVersion; 141cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 142cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 143cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryVersion... return True"); 144cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 145cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 146cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 1474890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIQueryDirectRenderingCapable(dpy, screen, isCapable) 148cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 149cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 150cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Bool* isCapable; 151cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 152cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 153cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryDirectRenderingCapableReply rep; 154cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIQueryDirectRenderingCapableReq *req; 155cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 156cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryDirectRenderingCapable..."); 157cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 158cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 159cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 160cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIQueryDirectRenderingCapable, req); 161cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 162cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIQueryDirectRenderingCapable; 163cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 164cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 165cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 166cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 167cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryDirectRenderingCapable... return False"); 168cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 169cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 170cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *isCapable = rep.isCapable; 171cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 172cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 173cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("QueryDirectRenderingCapable... return True"); 174cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 175cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 176cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 1774890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIOpenConnection(dpy, screen, hSAREA, busIdString) 178cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 179cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 180cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_handle_t * hSAREA; 181cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson char **busIdString; 182cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 183cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 184cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIOpenConnectionReply rep; 185cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIOpenConnectionReq *req; 186cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 187cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection..."); 188cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 189cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 190cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 191cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIOpenConnection, req); 192cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 193cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIOpenConnection; 194cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 195cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 196cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 197cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 198cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection... return False"); 199cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 200cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 201cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 202cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hSAREA = rep.hSAREALow; 203cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#ifdef LONG64 204cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hSAREA |= ((drm_handle_t)rep.hSAREAHigh) << 32; 205cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 206cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 207cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length) { 208cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!(*busIdString = (char *)Xcalloc(rep.busIdStringLength + 1, 1))) { 209cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, ((rep.busIdStringLength+3) & ~3)); 210cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 211cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 212cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection... return False"); 213cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 214cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 215cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XReadPad(dpy, *busIdString, rep.busIdStringLength); 216cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 217cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *busIdString = NULL; 218cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 219cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 220cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 221cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("OpenConnection... return True"); 222cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 223cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 224cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 2254890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIAuthConnection(dpy, screen, magic) 226cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 227cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 228cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_magic_t magic; 229cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 230cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 231cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIAuthConnectionReq *req; 232cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIAuthConnectionReply rep; 233cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 234cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("AuthConnection..."); 235cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 236cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 237cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 238cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIAuthConnection, req); 239cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 240cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIAuthConnection; 241cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 242cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->magic = magic; 243cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson rep.authenticated = 0; 244cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse) || !rep.authenticated) { 245cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 246cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 247cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("AuthConnection... return False"); 248cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 249cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 250cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 251cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 252cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("AuthConnection... return True"); 253cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 254cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 255cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 2564890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRICloseConnection(dpy, screen) 257cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 258cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 259cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 260cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 261cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICloseConnectionReq *req; 262cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 263cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CloseConnection..."); 264cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 265cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 266cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 267cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 268cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRICloseConnection, req); 269cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 270cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRICloseConnection; 271cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 272cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 273cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 274cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CloseConnection... return True"); 275cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 276cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 277cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 2784890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIGetClientDriverName(dpy, screen, ddxDriverMajorVersion, 279cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson ddxDriverMinorVersion, ddxDriverPatchVersion, clientDriverName) 280cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 281cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 282cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* ddxDriverMajorVersion; 283cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* ddxDriverMinorVersion; 284cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* ddxDriverPatchVersion; 285cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson char** clientDriverName; 286cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 287cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 288cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetClientDriverNameReply rep; 289cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetClientDriverNameReq *req; 290cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 291cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName..."); 292cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 293cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 294cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 295cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIGetClientDriverName, req); 296cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 297cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIGetClientDriverName; 298cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 299cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 300cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 301cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 302cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName... return False"); 303cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 304cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 305cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 306cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *ddxDriverMajorVersion = rep.ddxDriverMajorVersion; 307cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *ddxDriverMinorVersion = rep.ddxDriverMinorVersion; 308cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *ddxDriverPatchVersion = rep.ddxDriverPatchVersion; 309cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 310cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length) { 311cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!(*clientDriverName = (char *)Xcalloc(rep.clientDriverNameLength + 1, 1))) { 312cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, ((rep.clientDriverNameLength+3) & ~3)); 313cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 314cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 315cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName... return False"); 316cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 317cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 318cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength); 319cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 320cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *clientDriverName = NULL; 321cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 322cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 323cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 324cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetClientDriverName... return True"); 325cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 326cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 327cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 3284890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRICreateContextWithConfig(dpy, screen, configID, context, 3294890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam Jackson hHWContext) 330cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 331cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 332cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int configID; 333cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XID* context; 334cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_context_t * hHWContext; 335cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 336cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 337cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateContextReply rep; 338cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateContextReq *req; 339cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 340cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateContext..."); 341cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 342cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 343cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 344cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRICreateContext, req); 345cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 346cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRICreateContext; 347cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->visual = configID; 348cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 349cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *context = XAllocID(dpy); 350cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->context = *context; 351cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 352cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 353cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 354cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateContext... return False"); 355cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 356cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 357cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hHWContext = rep.hHWContext; 358cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 359cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 360cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateContext... return True"); 361cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 362cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 363cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 3644890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRICreateContext(dpy, screen, visual, context, hHWContext) 365cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 366cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 367cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Visual* visual; 368cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XID* context; 369cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_context_t * hHWContext; 370cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 371cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return XF86DRICreateContextWithConfig( dpy, screen, visual->visualid, 372cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson context, hHWContext ); 373cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 374cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 3754890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC GLboolean XF86DRIDestroyContext( __DRInativeDisplay * ndpy, int screen, 376cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson __DRIid context ) 377cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 378cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display * const dpy = (Display *) ndpy; 379cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 380cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIDestroyContextReq *req; 381cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 382cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyContext..."); 383cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 384cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 385cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 386cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIDestroyContext, req); 387cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 388cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIDestroyContext; 389cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 390cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->context = context; 391cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 392cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 393cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyContext... return True"); 394cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 395cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 396cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 3974890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC GLboolean XF86DRICreateDrawable( __DRInativeDisplay * ndpy, int screen, 398cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson __DRIid drawable, drm_drawable_t * hHWDrawable ) 399cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 400cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display * const dpy = (Display *) ndpy; 401cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 402cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateDrawableReply rep; 403cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRICreateDrawableReq *req; 404cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 405cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateDrawable..."); 406cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 407cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 408cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 409cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRICreateDrawable, req); 410cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 411cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRICreateDrawable; 412cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 413cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->drawable = drawable; 414cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 415cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 416cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 417cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateDrawable... return False"); 418cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 419cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 420cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hHWDrawable = rep.hHWDrawable; 421cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 422cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 423cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("CreateDrawable... return True"); 424cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 425cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 426cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 4274890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC GLboolean XF86DRIDestroyDrawable( __DRInativeDisplay * ndpy, int screen, 428cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson __DRIid drawable ) 429cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 430cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display * const dpy = (Display *) ndpy; 431cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 432cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIDestroyDrawableReq *req; 433cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 434cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyDrawable..."); 435cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 436cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 437cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 438cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIDestroyDrawable, req); 439cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 440cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIDestroyDrawable; 441cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 442cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->drawable = drawable; 443cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 444cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 445cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("DestroyDrawable... return True"); 446cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 447cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 448cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 4494890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIGetDrawableInfo(Display* dpy, int screen, Drawable drawable, 450cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson unsigned int* index, unsigned int* stamp, 451cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* X, int* Y, int* W, int* H, 452cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* numClipRects, drm_clip_rect_t ** pClipRects, 453cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* backX, int* backY, 454cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* numBackClipRects, drm_clip_rect_t ** pBackClipRects ) 455cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 456cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 457cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDrawableInfoReply rep; 458cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDrawableInfoReq *req; 459cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int total_rects; 460cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 461cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo..."); 462cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 463cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 464cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 465cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIGetDrawableInfo, req); 466cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 467cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIGetDrawableInfo; 468cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 469cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->drawable = drawable; 470cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 471cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 1, xFalse)) 472cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson { 473cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 474cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 475cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo... return False"); 476cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 477cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 478cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *index = rep.drawableTableIndex; 479cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *stamp = rep.drawableTableStamp; 480cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *X = (int)rep.drawableX; 481cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *Y = (int)rep.drawableY; 482cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *W = (int)rep.drawableWidth; 483cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *H = (int)rep.drawableHeight; 484cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *numClipRects = rep.numClipRects; 485cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson total_rects = *numClipRects; 486cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 487cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *backX = rep.backX; 488cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *backY = rep.backY; 489cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *numBackClipRects = rep.numBackClipRects; 490cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson total_rects += *numBackClipRects; 491cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 492cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#if 0 493cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks 494cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * backwards compatibility (Because of the >> 2 shift) but the fix 495cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * enables multi-threaded apps to work. 496cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */ 497cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length != ((((SIZEOF(xXF86DRIGetDrawableInfoReply) - 498cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SIZEOF(xGenericReply) + 499cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson total_rects * sizeof(drm_clip_rect_t)) + 3) & ~3) >> 2)) { 500cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, rep.length); 501cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 502cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 503cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo... return False"); 504cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 505cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 506cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 507cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 508cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*numClipRects) { 509cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int len = sizeof(drm_clip_rect_t) * (*numClipRects); 510cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 511cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); 512cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*pClipRects) 513cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XRead(dpy, (char*)*pClipRects, len); 514cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 515cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pClipRects = NULL; 516cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 517cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 518cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*numBackClipRects) { 519cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int len = sizeof(drm_clip_rect_t) * (*numBackClipRects); 520cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 521cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pBackClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); 522cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (*pBackClipRects) 523cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XRead(dpy, (char*)*pBackClipRects, len); 524cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 525cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pBackClipRects = NULL; 526cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 527cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 528cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 529cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 530cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDrawableInfo... return True"); 531cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 532cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 533cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 5344890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIGetDeviceInfo(dpy, screen, hFrameBuffer, 535cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson fbOrigin, fbSize, fbStride, devPrivateSize, pDevPrivate) 536cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 537cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 538cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson drm_handle_t * hFrameBuffer; 539cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* fbOrigin; 540cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* fbSize; 541cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* fbStride; 542cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int* devPrivateSize; 543cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson void** pDevPrivate; 544cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 545cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XExtDisplayInfo *info = find_display (dpy); 546cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDeviceInfoReply rep; 547cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson xXF86DRIGetDeviceInfoReq *req; 548cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 549cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo..."); 550cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson XF86DRICheckExtension (dpy, info, False); 551cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 552cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson LockDisplay(dpy); 553cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson GetReq(XF86DRIGetDeviceInfo, req); 554cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->reqType = info->codes->major_opcode; 555cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->driReqType = X_XF86DRIGetDeviceInfo; 556cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson req->screen = screen; 557cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 558cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 559cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 560cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo... return False"); 561cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 562cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 563cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 564cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hFrameBuffer = rep.hFrameBufferLow; 565cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#ifdef LONG64 566cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *hFrameBuffer |= ((drm_handle_t)rep.hFrameBufferHigh) << 32; 567cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif 568cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 569cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *fbOrigin = rep.framebufferOrigin; 570cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *fbSize = rep.framebufferSize; 571cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *fbStride = rep.framebufferStride; 572cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *devPrivateSize = rep.devPrivateSize; 573cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 574cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (rep.length) { 575cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson if (!(*pDevPrivate = (void *)Xcalloc(rep.devPrivateSize, 1))) { 576cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XEatData(dpy, ((rep.devPrivateSize+3) & ~3)); 577cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 578cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 579cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo... return False"); 580cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 581cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 582cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson _XRead(dpy, (char*)*pDevPrivate, rep.devPrivateSize); 583cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } else { 584cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *pDevPrivate = NULL; 585cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson } 586cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 587cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson UnlockDisplay(dpy); 588cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson SyncHandle(); 589cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson TRACE("GetDeviceInfo... return True"); 590cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 591cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 592cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 5934890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRIOpenFullScreen(dpy, screen, drawable) 594cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 595cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 596cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Drawable drawable; 597cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 598cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson /* This function and the underlying X protocol are deprecated. 599cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */ 600cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) dpy; 601cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) screen; 602cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) drawable; 603cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return False; 604cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 605cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson 6064890f2605ea7f0d8ad157add2ca0dc2d3b19e848Adam JacksonPUBLIC Bool XF86DRICloseFullScreen(dpy, screen, drawable) 607cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Display* dpy; 608cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson int screen; 609cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson Drawable drawable; 610cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{ 611cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson /* This function and the underlying X protocol are deprecated. 612cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */ 613cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) dpy; 614cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) screen; 615cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson (void) drawable; 616cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson return True; 617cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson} 618