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>
32877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca *   Jens Owen <jowen@vmware.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"
462e5a268f18be30df15aed0b44b01a18a37fb5df4Alan Coopersmith#include <limits.h>
47cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
48cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XExtensionInfo _xf86dri_info_data;
49cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic XExtensionInfo *xf86dri_info = &_xf86dri_info_data;
505dd18e95d9aba8cc444a511808a1df15ca7a037aAdam Jacksonstatic char xf86dri_extension_name[] = XF86DRINAME;
51cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
52cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define XF86DRICheckExtension(dpy,i,val) \
53cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson  XextCheckExtension (dpy, i, xf86dri_extension_name, val)
54cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
55cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/*****************************************************************************
56cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *                                                                           *
57cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *			   private utility routines                          *
58cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *                                                                           *
59cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *****************************************************************************/
60cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic int close_display(Display * dpy, XExtCodes * extCodes);
62cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jacksonstatic /* const */ XExtensionHooks xf86dri_extension_hooks = {
634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* create_gc */
644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* copy_gc */
654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* flush_gc */
664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* free_gc */
674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* create_font */
684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* free_font */
694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   close_display,               /* close_display */
704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* wire_to_event */
714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* event_to_wire */
724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* error */
734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   NULL,                        /* error_string */
74cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson};
75cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic
774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXEXT_GENERATE_FIND_DISPLAY(find_display, xf86dri_info,
784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           xf86dri_extension_name,
794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           &xf86dri_extension_hooks, 0, NULL)
80cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic
824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXEXT_GENERATE_CLOSE_DISPLAY(close_display, xf86dri_info)
83cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
84cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
85cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/*****************************************************************************
86cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *                                                                           *
87cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *		    public XFree86-DRI Extension routines                    *
88cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *                                                                           *
89cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson *****************************************************************************/
90cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#if 0
91cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include <stdio.h>
92cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define TRACE(msg)  fprintf(stderr,"XF86DRI%s\n", msg);
93cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#else
94cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#define TRACE(msg)
95cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif
96cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
97697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIQueryExtension(Display * dpy, int *event_basep,
994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                      int *error_basep)
100cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryExtension...");
1044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (XextHasExtension(info)) {
1054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *event_basep = info->codes->first_event;
1064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *error_basep = info->codes->first_error;
1074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryExtension... return True");
1084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return True;
1094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
1114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryExtension... return False");
1124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
114cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
115cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
116697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
1174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIQueryVersion(Display * dpy, int *majorVersion, int *minorVersion,
1184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                    int *patchVersion)
119cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1204d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryVersionReply rep;
1224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryVersionReq *req;
1234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryVersion...");
1254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
1264d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
1284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIQueryVersion, req);
1294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
1304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIQueryVersion;
1314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
1324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
1334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
1344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryVersion... return False");
1354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *majorVersion = rep.majorVersion;
1384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *minorVersion = rep.minorVersion;
1394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *patchVersion = rep.patchVersion;
1404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
1414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
1424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryVersion... return True");
1434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
144cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
145cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
146697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
1474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIQueryDirectRenderingCapable(Display * dpy, int screen,
1484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                                   Bool * isCapable)
149cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryDirectRenderingCapableReply rep;
1524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIQueryDirectRenderingCapableReq *req;
1534d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1544d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryDirectRenderingCapable...");
1554d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
1564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
1584d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIQueryDirectRenderingCapable, req);
1594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
1604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIQueryDirectRenderingCapable;
1614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
1624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
1634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
1644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
1654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("QueryDirectRenderingCapable... return False");
1664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *isCapable = rep.isCapable;
1694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
1704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
1714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("QueryDirectRenderingCapable... return True");
1724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
173cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
174cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
175697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
1764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIOpenConnection(Display * dpy, int screen, drm_handle_t * hSAREA,
1774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                      char **busIdString)
178cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
1794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
1804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIOpenConnectionReply rep;
1814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIOpenConnectionReq *req;
1824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("OpenConnection...");
1844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
1854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
1874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIOpenConnection, req);
1884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
1894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIOpenConnection;
1904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
1914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
1924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
1934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
1944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("OpenConnection... return False");
1954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
1964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
1974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
1984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hSAREA = rep.hSAREALow;
1994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (sizeof(drm_handle_t) == 8) {
2004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int shift = 32;           /* var to prevent warning on next line */
2014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *hSAREA |= ((drm_handle_t) rep.hSAREAHigh) << shift;
2024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length) {
2052e5a268f18be30df15aed0b44b01a18a37fb5df4Alan Coopersmith      if (rep.busIdStringLength < INT_MAX)
2062e5a268f18be30df15aed0b44b01a18a37fb5df4Alan Coopersmith         *busIdString = calloc(rep.busIdStringLength + 1, 1);
2072e5a268f18be30df15aed0b44b01a18a37fb5df4Alan Coopersmith      else
2082e5a268f18be30df15aed0b44b01a18a37fb5df4Alan Coopersmith         *busIdString = NULL;
2092e5a268f18be30df15aed0b44b01a18a37fb5df4Alan Coopersmith      if (*busIdString == NULL) {
2104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XEatData(dpy, ((rep.busIdStringLength + 3) & ~3));
2114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         UnlockDisplay(dpy);
2124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         SyncHandle();
2134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         TRACE("OpenConnection... return False");
2144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         return False;
2154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      }
2164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XReadPad(dpy, *busIdString, rep.busIdStringLength);
2174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
2194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *busIdString = NULL;
2204d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
2224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
2234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("OpenConnection... return True");
2244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
225cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
226cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
227697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
2284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIAuthConnection(Display * dpy, int screen, drm_magic_t magic)
229cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
2304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
2314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIAuthConnectionReq *req;
2324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIAuthConnectionReply rep;
2334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("AuthConnection...");
2354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
2364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
2384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIAuthConnection, req);
2394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
2404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIAuthConnection;
2414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
2424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->magic = magic;
2434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   rep.authenticated = 0;
2444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse) || !rep.authenticated) {
2454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
2464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
2474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("AuthConnection... return False");
2484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
2494d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
2504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
2514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
2524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("AuthConnection... return True");
2534d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
254cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
255cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
256697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
2574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICloseConnection(Display * dpy, int screen)
258cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
2594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
2604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICloseConnectionReq *req;
2614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CloseConnection...");
2634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
2654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
2674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRICloseConnection, req);
2684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
2694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRICloseConnection;
2704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
2714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
2724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
2734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CloseConnection... return True");
2744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
275cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
276cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
277697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
2784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIGetClientDriverName(Display * dpy, int screen,
2794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           int *ddxDriverMajorVersion,
2804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           int *ddxDriverMinorVersion,
2814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           int *ddxDriverPatchVersion,
2824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                           char **clientDriverName)
283cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
2844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
2854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetClientDriverNameReply rep;
2864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetClientDriverNameReq *req;
2874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetClientDriverName...");
2894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
2904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
2914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
2924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIGetClientDriverName, req);
2934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
2944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIGetClientDriverName;
2954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
2964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
2974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
2984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
2994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetClientDriverName... return False");
3004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
3014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
3024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *ddxDriverMajorVersion = rep.ddxDriverMajorVersion;
3044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *ddxDriverMinorVersion = rep.ddxDriverMinorVersion;
3054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *ddxDriverPatchVersion = rep.ddxDriverPatchVersion;
3064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length) {
308306f630e676eb901789dd09a0f30d7e7fa941ebeAlan Coopersmith      if (rep.clientDriverNameLength < INT_MAX)
309306f630e676eb901789dd09a0f30d7e7fa941ebeAlan Coopersmith         *clientDriverName = calloc(rep.clientDriverNameLength + 1, 1);
310306f630e676eb901789dd09a0f30d7e7fa941ebeAlan Coopersmith      else
311306f630e676eb901789dd09a0f30d7e7fa941ebeAlan Coopersmith         *clientDriverName = NULL;
312306f630e676eb901789dd09a0f30d7e7fa941ebeAlan Coopersmith      if (*clientDriverName == NULL) {
3134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XEatData(dpy, ((rep.clientDriverNameLength + 3) & ~3));
3144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         UnlockDisplay(dpy);
3154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         SyncHandle();
3164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         TRACE("GetClientDriverName... return False");
3174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         return False;
3184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      }
3194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength);
3204d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
3214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
3224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *clientDriverName = NULL;
3234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
3244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
3254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
3264d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetClientDriverName... return True");
3274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
328cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
329cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
330697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICreateContextWithConfig(Display * dpy, int screen, int configID,
3324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                               XID * context, drm_context_t * hHWContext)
333cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
3354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateContextReply rep;
3364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateContextReq *req;
3374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateContext...");
3394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
3404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
3424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRICreateContext, req);
3434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
3444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRICreateContext;
3454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->visual = configID;
3464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
3474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *context = XAllocID(dpy);
3484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->context = *context;
3494d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
3504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
3514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
3524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("CreateContext... return False");
3534d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
3544d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
3554d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hHWContext = rep.hHWContext;
3564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
3574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
3584d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateContext... return True");
3594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
360cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
361cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
362697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICreateContext(Display * dpy, int screen, Visual * visual,
3644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                     XID * context, drm_context_t * hHWContext)
365cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return XF86DRICreateContextWithConfig(dpy, screen, visual->visualid,
3674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                                         context, hHWContext);
368cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
369cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
370697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIDestroyContext(Display * dpy, int screen, XID context)
372cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
3744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIDestroyContextReq *req;
3754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyContext...");
3774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
3784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
3804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIDestroyContext, req);
3814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
3824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIDestroyContext;
3834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
3844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->context = context;
3854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
3864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
3874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyContext... return True");
3884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
389cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
390cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
391697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
3924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICreateDrawable(Display * dpy, int screen,
3934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                      XID drawable, drm_drawable_t * hHWDrawable)
394cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
3954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
3964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateDrawableReply rep;
3974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRICreateDrawableReq *req;
3984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
3994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateDrawable...");
4004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
4014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
4034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRICreateDrawable, req);
4044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
4054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRICreateDrawable;
4064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
4074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->drawable = drawable;
4084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
4094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
4104d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
4114d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("CreateDrawable... return False");
4124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
4134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
4144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hHWDrawable = rep.hHWDrawable;
4154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
4164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
4174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("CreateDrawable... return True");
4184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
419cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
420cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
4214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristófstatic int
4224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófnoopErrorHandler(Display * dpy, XErrorEvent * xerr)
4234a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsberg{
4244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return 0;
4254a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsberg}
4264a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsberg
427697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
4284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIDestroyDrawable(Display * dpy, int screen, XID drawable)
429cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
4304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
4314d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIDestroyDrawableReq *req;
4324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   int (*oldXErrorHandler) (Display *, XErrorEvent *);
4334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyDrawable...");
4354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
4364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* This is called from the DRI driver, which used call it like this
4384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *
4394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *   if (windowExists(drawable))
4404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *     destroyDrawable(drawable);
4414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    *
4424d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * which is a textbook race condition - the window may disappear
44305e7f7f4388bde882b7ce74124000a4d435affffZoë Blade    * from the server between checking for its existence and
4444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * destroying it.  Instead we change the semantics of
4454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * __DRIinterfaceMethodsRec::destroyDrawable() to succeed even if
4464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * the windows is gone, by wrapping the destroy call in an error
4474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * handler. */
4484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4494d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XSync(dpy, False);
4504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   oldXErrorHandler = XSetErrorHandler(noopErrorHandler);
4514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
4534d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIDestroyDrawable, req);
4544d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
4554d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIDestroyDrawable;
4564d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
4574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->drawable = drawable;
4584d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
4594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
4604d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XSetErrorHandler(oldXErrorHandler);
4624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("DestroyDrawable... return True");
4644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
465cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
466cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
467697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
4684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIGetDrawableInfo(Display * dpy, int screen, Drawable drawable,
4694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       unsigned int *index, unsigned int *stamp,
4704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *X, int *Y, int *W, int *H,
4714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *numClipRects, drm_clip_rect_t ** pClipRects,
4724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *backX, int *backY,
4734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       int *numBackClipRects,
4744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                       drm_clip_rect_t ** pBackClipRects)
475cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
4764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
4774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDrawableInfoReply rep;
4784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDrawableInfoReq *req;
4794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   int total_rects;
4804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDrawableInfo...");
4824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
4834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
4854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIGetDrawableInfo, req);
4864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
4874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIGetDrawableInfo;
4884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
4894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->drawable = drawable;
4904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
4914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 1, xFalse)) {
4924d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
4934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
4944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetDrawableInfo... return False");
4954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
4964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
4974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *index = rep.drawableTableIndex;
4984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *stamp = rep.drawableTableStamp;
4994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *X = (int) rep.drawableX;
5004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *Y = (int) rep.drawableY;
5014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *W = (int) rep.drawableWidth;
5024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *H = (int) rep.drawableHeight;
5034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *numClipRects = rep.numClipRects;
5044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   total_rects = *numClipRects;
5054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *backX = rep.backX;
5074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *backY = rep.backY;
5084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *numBackClipRects = rep.numBackClipRects;
5094d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   total_rects += *numBackClipRects;
510cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
511cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#if 0
5124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks
5134d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * backwards compatibility (Because of the >> 2 shift) but the fix
5144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    * enables multi-threaded apps to work.
5154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    */
5164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length != ((((SIZEOF(xXF86DRIGetDrawableInfoReply) -
5174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                         SIZEOF(xGenericReply) +
5184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                         total_rects * sizeof(drm_clip_rect_t)) +
5194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                        3) & ~3) >> 2)) {
5204d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XEatData(dpy, rep.length);
5214d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
5224d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
5234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetDrawableInfo... return False");
5244d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
5254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
526cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif
527cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
5284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (*numClipRects) {
5294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int len = sizeof(drm_clip_rect_t) * (*numClipRects);
5304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5312b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner      *pClipRects = calloc(len, 1);
5324d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      if (*pClipRects)
5334d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XRead(dpy, (char *) *pClipRects, len);
5344d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5354d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
5364d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *pClipRects = NULL;
5374d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5384d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5394d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (*numBackClipRects) {
5404d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int len = sizeof(drm_clip_rect_t) * (*numBackClipRects);
5414d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5422b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner      *pBackClipRects = calloc(len, 1);
5434d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      if (*pBackClipRects)
5444d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XRead(dpy, (char *) *pBackClipRects, len);
5454d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5464d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
5474d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *pBackClipRects = NULL;
5484d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5494d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5504d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
5514d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
5524d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDrawableInfo... return True");
5534d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
554cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
555cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
556697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
5574d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIGetDeviceInfo(Display * dpy, int screen, drm_handle_t * hFrameBuffer,
5584d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                     int *fbOrigin, int *fbSize, int *fbStride,
5594d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf                     int *devPrivateSize, void **pDevPrivate)
560cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
5614d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XExtDisplayInfo *info = find_display(dpy);
5624d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDeviceInfoReply rep;
5634d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   xXF86DRIGetDeviceInfoReq *req;
5644d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5654d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDeviceInfo...");
5664d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   XF86DRICheckExtension(dpy, info, False);
5674d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5684d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   LockDisplay(dpy);
5694d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   GetReq(XF86DRIGetDeviceInfo, req);
5704d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->reqType = info->codes->major_opcode;
5714d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->driReqType = X_XF86DRIGetDeviceInfo;
5724d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   req->screen = screen;
5734d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
5744d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      UnlockDisplay(dpy);
5754d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      SyncHandle();
5764d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      TRACE("GetDeviceInfo... return False");
5774d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      return False;
5784d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5794d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5804d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *hFrameBuffer = rep.hFrameBufferLow;
5814d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (sizeof(drm_handle_t) == 8) {
5824d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      int shift = 32;           /* var to prevent warning on next line */
5834d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *hFrameBuffer |= ((drm_handle_t) rep.hFrameBufferHigh) << shift;
5844d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
5854d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5864d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *fbOrigin = rep.framebufferOrigin;
5874d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *fbSize = rep.framebufferSize;
5884d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *fbStride = rep.framebufferStride;
5894d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   *devPrivateSize = rep.devPrivateSize;
5904d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
5914d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   if (rep.length) {
5922b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner      if (!(*pDevPrivate = calloc(rep.devPrivateSize, 1))) {
5934d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         _XEatData(dpy, ((rep.devPrivateSize + 3) & ~3));
5944d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         UnlockDisplay(dpy);
5954d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         SyncHandle();
5964d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         TRACE("GetDeviceInfo... return False");
5974d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf         return False;
5984d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      }
5994d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      _XRead(dpy, (char *) *pDevPrivate, rep.devPrivateSize);
6004d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
6014d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   else {
6024d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf      *pDevPrivate = NULL;
6034d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   }
6044d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf
6054d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   UnlockDisplay(dpy);
6064d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   SyncHandle();
6074d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   TRACE("GetDeviceInfo... return True");
6084d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
609cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
610cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
611697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
6124d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRIOpenFullScreen(Display * dpy, int screen, Drawable drawable)
613cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
6144d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* This function and the underlying X protocol are deprecated.
6154d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    */
6164d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) dpy;
6174d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) screen;
6184d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) drawable;
6194d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return False;
620cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
621cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
622697e22146def0a14915d83901063e2068c9980aeKristian HøgsbergBool
6234d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, KristófXF86DRICloseFullScreen(Display * dpy, int screen, Drawable drawable)
624cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
6254d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   /* This function and the underlying X protocol are deprecated.
6264d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf    */
6274d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) dpy;
6284d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) screen;
6294d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   (void) drawable;
6304d2a381114353e061a6dfbcc1ac3881bb1c3e4c5RALOVICH, Kristóf   return True;
631cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
632be85fde82b148c4fc3639fcf3cfedb5de9381fc8Adam Jackson
633be85fde82b148c4fc3639fcf3cfedb5de9381fc8Adam Jackson#endif /* GLX_DIRECT_RENDERING */
634