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