XF86dri.c revision 2b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405
1cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/**************************************************************************
2cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
3cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
4cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonCopyright 2000 VA Linux Systems, Inc.
5cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonAll Rights Reserved.
6cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
7cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonPermission is hereby granted, free of charge, to any person obtaining a
8cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksoncopy of this software and associated documentation files (the
9cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson"Software"), to deal in the Software without restriction, including
10cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonwithout limitation the rights to use, copy, modify, merge, publish,
11cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksondistribute, sub license, and/or sell copies of the Software, and to
12cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonpermit persons to whom the Software is furnished to do so, subject to
13cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonthe following conditions:
14cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
15cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonThe above copyright notice and this permission notice (including the
16cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonnext paragraph) shall be included in all copies or substantial portions
17cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonof the Software.
18cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
19cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
23cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25cb3610e37c4c0a40520441b8515d044dabcc8854Adam JacksonSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
27cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson**************************************************************************/
28cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
29cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/*
30cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson * Authors:
31cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *   Kevin E. Martin <martin@valinux.com>
32cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *   Jens Owen <jens@tungstengraphics.com>
33cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *   Rickard E. (Rik) Faith <faith@valinux.com>
34cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *
35cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson */
36cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
37cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/* THIS IS NOT AN X CONSORTIUM STANDARD */
38cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
3980b280db883edc9550484dba03bd5c124b6a9bf9Jeremy Huddleston#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
40be85fde82b148c4fc3639fcf3cfedb5de9381fc8Adam Jackson
41cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include <X11/Xlibint.h>
4238c51a76533a90cf2c9381c99247cfac45fe70ebKristian Høgsberg#include <X11/Xfuncproto.h>
43cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include <X11/extensions/Xext.h>
4482dfd4b71f932f46e116743b204d0077a0875ab8Brian Paul#include <X11/extensions/extutil.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
604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic int close_display(Display * dpy, XExtCodes * extCodes);
61cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic /* const */ XExtensionHooks xf86dri_extension_hooks = {
624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* create_gc */
634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* copy_gc */
644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* flush_gc */
654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* free_gc */
664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* create_font */
674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* free_font */
684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   close_display,               /* close_display */
694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* wire_to_event */
704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* event_to_wire */
714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* error */
724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* error_string */
73cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson};
74cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic
764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXEXT_GENERATE_FIND_DISPLAY(find_display, xf86dri_info,
774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           xf86dri_extension_name,
784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           &xf86dri_extension_hooks, 0, NULL)
79cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic
814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXEXT_GENERATE_CLOSE_DISPLAY(close_display, xf86dri_info)
82cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
83cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
84cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/*****************************************************************************
85cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *                                                                           *
86cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *		    public XFree86-DRI Extension routines                    *
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
96697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIQueryExtension(Display * dpy, int *event_basep,
984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                      int *error_basep)
99cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryExtension...");
1034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (XextHasExtension(info)) {
1044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *event_basep = info->codes->first_event;
1054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *error_basep = info->codes->first_error;
1064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryExtension... return True");
1074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return True;
1084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
1104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryExtension... return False");
1114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
113cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
114cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
115697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
1164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIQueryVersion(Display * dpy, int *majorVersion, int *minorVersion,
1174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                    int *patchVersion)
118cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1204d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryVersionReply rep;
1214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryVersionReq *req;
1224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryVersion...");
1244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
1254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1264d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
1274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIQueryVersion, req);
1284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
1294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIQueryVersion;
1304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
1314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
1324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
1334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryVersion... return False");
1344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *majorVersion = rep.majorVersion;
1374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *minorVersion = rep.minorVersion;
1384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *patchVersion = rep.patchVersion;
1394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
1404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
1414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryVersion... return True");
1424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
143cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
144cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
145697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
1464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIQueryDirectRenderingCapable(Display * dpy, int screen,
1474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                                   Bool * isCapable)
148cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1494d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryDirectRenderingCapableReply rep;
1514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryDirectRenderingCapableReq *req;
1524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1534d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryDirectRenderingCapable...");
1544d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
1554d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
1574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIQueryDirectRenderingCapable, req);
1584d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
1594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIQueryDirectRenderingCapable;
1604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
1614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
1624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
1634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
1644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryDirectRenderingCapable... return False");
1654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *isCapable = rep.isCapable;
1684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
1694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
1704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryDirectRenderingCapable... return True");
1714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
172cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
173cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
174697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
1754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIOpenConnection(Display * dpy, int screen, drm_handle_t * hSAREA,
1764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                      char **busIdString)
177cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIOpenConnectionReply rep;
1804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIOpenConnectionReq *req;
1814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("OpenConnection...");
1834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
1844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
1864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIOpenConnection, req);
1874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
1884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIOpenConnection;
1894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
1904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
1914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
1924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
1934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("OpenConnection... return False");
1944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hSAREA = rep.hSAREALow;
1984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (sizeof(drm_handle_t) == 8) {
1994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int shift = 32;           /* var to prevent warning on next line */
2004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *hSAREA |= ((drm_handle_t) rep.hSAREAHigh) << shift;
2014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length) {
2042b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner      if (!(*busIdString = calloc(rep.busIdStringLength + 1, 1))) {
2054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XEatData(dpy, ((rep.busIdStringLength + 3) & ~3));
2064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         UnlockDisplay(dpy);
2074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         SyncHandle();
2084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         TRACE("OpenConnection... return False");
2094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         return False;
2104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      }
2114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XReadPad(dpy, *busIdString, rep.busIdStringLength);
2124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
2144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *busIdString = NULL;
2154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
2174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
2184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("OpenConnection... return True");
2194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
220cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
221cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
222697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
2234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIAuthConnection(Display * dpy, int screen, drm_magic_t magic)
224cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
2254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
2264d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIAuthConnectionReq *req;
2274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIAuthConnectionReply rep;
2284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("AuthConnection...");
2304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
2314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
2334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIAuthConnection, req);
2344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
2354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIAuthConnection;
2364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
2374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->magic = magic;
2384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   rep.authenticated = 0;
2394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse) || !rep.authenticated) {
2404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
2414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
2424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("AuthConnection... return False");
2434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
2444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
2464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
2474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("AuthConnection... return True");
2484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
249cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
250cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
251697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
2524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICloseConnection(Display * dpy, int screen)
253cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
2544d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
2554d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICloseConnectionReq *req;
2564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CloseConnection...");
2584d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
2604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
2624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRICloseConnection, req);
2634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
2644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRICloseConnection;
2654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
2664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
2674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
2684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CloseConnection... return True");
2694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
270cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
271cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
272697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
2734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIGetClientDriverName(Display * dpy, int screen,
2744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           int *ddxDriverMajorVersion,
2754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           int *ddxDriverMinorVersion,
2764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           int *ddxDriverPatchVersion,
2774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           char **clientDriverName)
278cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
2794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
2804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetClientDriverNameReply rep;
2814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetClientDriverNameReq *req;
2824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetClientDriverName...");
2844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
2854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
2874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIGetClientDriverName, req);
2884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
2894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIGetClientDriverName;
2904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
2914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
2924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
2934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
2944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetClientDriverName... return False");
2954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
2964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *ddxDriverMajorVersion = rep.ddxDriverMajorVersion;
2994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *ddxDriverMinorVersion = rep.ddxDriverMinorVersion;
3004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *ddxDriverPatchVersion = rep.ddxDriverPatchVersion;
3014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length) {
3034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      if (!
3044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf          (*clientDriverName =
3052b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner           calloc(rep.clientDriverNameLength + 1, 1))) {
3064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XEatData(dpy, ((rep.clientDriverNameLength + 3) & ~3));
3074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         UnlockDisplay(dpy);
3084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         SyncHandle();
3094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         TRACE("GetClientDriverName... return False");
3104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         return False;
3114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      }
3124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength);
3134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
3144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
3154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *clientDriverName = NULL;
3164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
3174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
3184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
3194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetClientDriverName... return True");
3204d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
321cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
322cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
323697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICreateContextWithConfig(Display * dpy, int screen, int configID,
3254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                               XID * context, drm_context_t * hHWContext)
326cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
3284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateContextReply rep;
3294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateContextReq *req;
3304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateContext...");
3324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
3334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
3354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRICreateContext, req);
3364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
3374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRICreateContext;
3384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->visual = configID;
3394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
3404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *context = XAllocID(dpy);
3414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->context = *context;
3424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
3434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
3444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
3454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("CreateContext... return False");
3464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
3474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
3484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hHWContext = rep.hHWContext;
3494d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
3504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
3514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateContext... return True");
3524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
353cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
354cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
355697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICreateContext(Display * dpy, int screen, Visual * visual,
3574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                     XID * context, drm_context_t * hHWContext)
358cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return XF86DRICreateContextWithConfig(dpy, screen, visual->visualid,
3604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                                         context, hHWContext);
361cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
362cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
363697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIDestroyContext(Display * dpy, int screen, XID context)
365cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
3674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIDestroyContextReq *req;
3684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyContext...");
3704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
3714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
3734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIDestroyContext, req);
3744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
3754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIDestroyContext;
3764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
3774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->context = context;
3784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
3794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
3804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyContext... return True");
3814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
382cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
383cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
384697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICreateDrawable(Display * dpy, int screen,
3864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                      XID drawable, drm_drawable_t * hHWDrawable)
387cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
3894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateDrawableReply rep;
3904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateDrawableReq *req;
3914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateDrawable...");
3934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
3944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
3964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRICreateDrawable, req);
3974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
3984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRICreateDrawable;
3994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
4004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->drawable = drawable;
4014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
4024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
4034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
4044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("CreateDrawable... return False");
4054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
4064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
4074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hHWDrawable = rep.hHWDrawable;
4084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
4094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
4104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateDrawable... return True");
4114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
412cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
413cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
4144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic int
4154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófnoopErrorHandler(Display * dpy, XErrorEvent * xerr)
4164a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsberg{
4174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return 0;
4184a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsberg}
4194a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsberg
420697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
4214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIDestroyDrawable(Display * dpy, int screen, XID drawable)
422cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
4234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
4244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIDestroyDrawableReq *req;
4254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   int (*oldXErrorHandler) (Display *, XErrorEvent *);
4264d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyDrawable...");
4284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
4294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* This is called from the DRI driver, which used call it like this
4314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *
4324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *   if (windowExists(drawable))
4334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *     destroyDrawable(drawable);
4344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *
4354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * which is a textbook race condition - the window may disappear
4364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * from the server between checking for its existance and
4374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * destroying it.  Instead we change the semantics of
4384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * __DRIinterfaceMethodsRec::destroyDrawable() to succeed even if
4394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * the windows is gone, by wrapping the destroy call in an error
4404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * handler. */
4414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XSync(dpy, False);
4434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   oldXErrorHandler = XSetErrorHandler(noopErrorHandler);
4444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
4464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIDestroyDrawable, req);
4474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
4484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIDestroyDrawable;
4494d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
4504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->drawable = drawable;
4514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
4524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
4534d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4544d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XSetErrorHandler(oldXErrorHandler);
4554d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyDrawable... return True");
4574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
458cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
459cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
460697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
4614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIGetDrawableInfo(Display * dpy, int screen, Drawable drawable,
4624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       unsigned int *index, unsigned int *stamp,
4634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *X, int *Y, int *W, int *H,
4644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *numClipRects, drm_clip_rect_t ** pClipRects,
4654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *backX, int *backY,
4664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *numBackClipRects,
4674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       drm_clip_rect_t ** pBackClipRects)
468cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
4694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
4704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDrawableInfoReply rep;
4714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDrawableInfoReq *req;
4724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   int total_rects;
4734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDrawableInfo...");
4754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
4764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
4784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIGetDrawableInfo, req);
4794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
4804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIGetDrawableInfo;
4814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
4824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->drawable = drawable;
4834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 1, xFalse)) {
4854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
4864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
4874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetDrawableInfo... return False");
4884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
4894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
4904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *index = rep.drawableTableIndex;
4914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *stamp = rep.drawableTableStamp;
4924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *X = (int) rep.drawableX;
4934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *Y = (int) rep.drawableY;
4944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *W = (int) rep.drawableWidth;
4954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *H = (int) rep.drawableHeight;
4964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *numClipRects = rep.numClipRects;
4974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   total_rects = *numClipRects;
4984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *backX = rep.backX;
5004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *backY = rep.backY;
5014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *numBackClipRects = rep.numBackClipRects;
5024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   total_rects += *numBackClipRects;
503cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
504cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#if 0
5054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks
5064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * backwards compatibility (Because of the >> 2 shift) but the fix
5074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * enables multi-threaded apps to work.
5084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    */
5094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length != ((((SIZEOF(xXF86DRIGetDrawableInfoReply) -
5104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                         SIZEOF(xGenericReply) +
5114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                         total_rects * sizeof(drm_clip_rect_t)) +
5124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                        3) & ~3) >> 2)) {
5134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XEatData(dpy, rep.length);
5144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
5154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
5164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetDrawableInfo... return False");
5174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
5184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
519cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif
520cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
5214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (*numClipRects) {
5224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int len = sizeof(drm_clip_rect_t) * (*numClipRects);
5234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5242b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner      *pClipRects = calloc(len, 1);
5254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      if (*pClipRects)
5264d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XRead(dpy, (char *) *pClipRects, len);
5274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
5294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *pClipRects = NULL;
5304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (*numBackClipRects) {
5334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int len = sizeof(drm_clip_rect_t) * (*numBackClipRects);
5344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5352b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner      *pBackClipRects = calloc(len, 1);
5364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      if (*pBackClipRects)
5374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XRead(dpy, (char *) *pBackClipRects, len);
5384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
5404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *pBackClipRects = NULL;
5414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
5444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
5454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDrawableInfo... return True");
5464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
547cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
548cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
549697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
5504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIGetDeviceInfo(Display * dpy, int screen, drm_handle_t * hFrameBuffer,
5514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                     int *fbOrigin, int *fbSize, int *fbStride,
5524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                     int *devPrivateSize, void **pDevPrivate)
553cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
5544d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
5554d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDeviceInfoReply rep;
5564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDeviceInfoReq *req;
5574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5584d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDeviceInfo...");
5594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
5604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
5624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIGetDeviceInfo, req);
5634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
5644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIGetDeviceInfo;
5654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
5664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
5674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
5684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
5694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetDeviceInfo... return False");
5704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
5714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hFrameBuffer = rep.hFrameBufferLow;
5744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (sizeof(drm_handle_t) == 8) {
5754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int shift = 32;           /* var to prevent warning on next line */
5764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *hFrameBuffer |= ((drm_handle_t) rep.hFrameBufferHigh) << shift;
5774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *fbOrigin = rep.framebufferOrigin;
5804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *fbSize = rep.framebufferSize;
5814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *fbStride = rep.framebufferStride;
5824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *devPrivateSize = rep.devPrivateSize;
5834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length) {
5852b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner      if (!(*pDevPrivate = calloc(rep.devPrivateSize, 1))) {
5864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XEatData(dpy, ((rep.devPrivateSize + 3) & ~3));
5874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         UnlockDisplay(dpy);
5884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         SyncHandle();
5894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         TRACE("GetDeviceInfo... return False");
5904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         return False;
5914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      }
5924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XRead(dpy, (char *) *pDevPrivate, rep.devPrivateSize);
5934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
5954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *pDevPrivate = NULL;
5964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
5994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
6004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDeviceInfo... return True");
6014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
602cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
603cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
604697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
6054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIOpenFullScreen(Display * dpy, int screen, Drawable drawable)
606cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
6074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* This function and the underlying X protocol are deprecated.
6084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    */
6094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) dpy;
6104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) screen;
6114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) drawable;
6124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return False;
613cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
614cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
615697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
6164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICloseFullScreen(Display * dpy, int screen, Drawable drawable)
617cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
6184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* This function and the underlying X protocol are deprecated.
6194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    */
6204d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) dpy;
6214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) screen;
6224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) drawable;
6234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
624cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
625be85fde82b148c4fc3639fcf3cfedb5de9381fc8Adam Jackson
626be85fde82b148c4fc3639fcf3cfedb5de9381fc8Adam Jackson#endif /* GLX_DIRECT_RENDERING */
627