1ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.12 2001/08/27 17:40:57 dawes Exp $ */
2ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/**************************************************************************
3ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
4ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
5ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonCopyright 2000 VA Linux Systems, Inc.
6ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonCopyright (c) 2002, 2008 Apple Computer, Inc.
7ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonAll Rights Reserved.
8ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
9ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonPermission is hereby granted, free of charge, to any person obtaining a
10ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestoncopy of this software and associated documentation files (the
11ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston"Software"), to deal in the Software without restriction, including
12ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonwithout limitation the rights to use, copy, modify, merge, publish,
13ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestondistribute, sub license, and/or sell copies of the Software, and to
14ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonpermit persons to whom the Software is furnished to do so, subject to
15ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonthe following conditions:
16ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
17ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonThe above copyright notice and this permission notice (including the
18ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonnext paragraph) shall be included in all copies or substantial portions
19ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonof the Software.
20ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
21ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
24ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
25ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
29ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston**************************************************************************/
30ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
31ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/*
32ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * Authors:
33ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *   Kevin E. Martin <martin@valinux.com>
34ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *   Jens Owen <jens@valinux.com>
35ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *   Rickard E. (Rik) Faith <faith@valinux.com>
36ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *
37ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston */
38ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
39ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* THIS IS NOT AN X CONSORTIUM STANDARD */
40ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
41ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <X11/Xlibint.h>
42ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include "appledristr.h"
43ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <X11/extensions/Xext.h>
44ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <X11/extensions/extutil.h>
45ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <stdio.h>
46ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
47ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic XExtensionInfo _appledri_info_data;
48ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic XExtensionInfo *appledri_info = &_appledri_info_data;
49ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic char *appledri_extension_name = APPLEDRINAME;
50ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
51ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#define AppleDRICheckExtension(dpy,i,val) \
52ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston  XextCheckExtension (dpy, i, appledri_extension_name, val)
53ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
54ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/*****************************************************************************
55ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *                                                                           *
56ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *			   private utility routines                          *
57ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *                                                                           *
58ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *****************************************************************************/
59ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
60ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic int close_display(Display * dpy, XExtCodes * extCodes);
61ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic Bool wire_to_event(Display * dpy, XEvent * re, xEvent * event);
62ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
63ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic /* const */ XExtensionHooks appledri_extension_hooks = {
64ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* create_gc */
65ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* copy_gc */
66ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* flush_gc */
67ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* free_gc */
68ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* create_font */
69ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* free_font */
70ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   close_display,               /* close_display */
71ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   wire_to_event,               /* wire_to_event */
72ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* event_to_wire */
73ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* error */
74ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   NULL,                        /* error_string */
75ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
76ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
77ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic
78ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXEXT_GENERATE_FIND_DISPLAY(find_display, appledri_info,
79ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                           appledri_extension_name,
80ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                           &appledri_extension_hooks,
81ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                           AppleDRINumberEvents, NULL)
82ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
83ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     static XEXT_GENERATE_CLOSE_DISPLAY(close_display, appledri_info)
84ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
85ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     static void (*surface_notify_handler) ();
86ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
87ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     void *XAppleDRISetSurfaceNotifyHandler(void (*fun) ())
88ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
89ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void *old = surface_notify_handler;
90ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   surface_notify_handler = fun;
91ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return old;
92ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
93ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
94ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstatic Bool
95ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonwire_to_event(Display *dpy, XEvent *re, xEvent *event)
96ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
97ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
98ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRINotifyEvent *sevent;
99ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
100ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
101ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
102ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   switch ((event->u.u.type & 0x7f) - info->codes->first_event) {
103ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   case AppleDRISurfaceNotify:
104ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      sevent = (xAppleDRINotifyEvent *) event;
105ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      if (surface_notify_handler != NULL) {
106ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston         (*surface_notify_handler) (dpy, (unsigned int) sevent->arg,
107ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                                    (int) sevent->kind);
108ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      }
109ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
110ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
111ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return False;
112ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
113ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
114ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/*****************************************************************************
115ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *                                                                           *
116ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *		    public Apple-DRI Extension routines                      *
117ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *                                                                           *
118ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston *****************************************************************************/
119ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
120ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#if 0
121ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <stdio.h>
122ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#define TRACE(msg)  fprintf(stderr, "AppleDRI%s\n", msg);
123ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#else
124ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#define TRACE(msg)
125ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#endif
126ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
127ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
128ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
129ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRIQueryExtension(dpy, event_basep, error_basep)
130ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Display *dpy;
131ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int *event_basep, *error_basep;
132ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
133ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
134ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
135ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("QueryExtension...");
136ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (XextHasExtension(info)) {
137ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *event_basep = info->codes->first_event;
138ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *error_basep = info->codes->first_error;
139ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      TRACE("QueryExtension... return True");
140ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return True;
141ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
142ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   else {
143ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      TRACE("QueryExtension... return False");
144ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
145ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
146ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
147ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
148ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
149ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRIQueryVersion(dpy, majorVersion, minorVersion, patchVersion)
150ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Display *dpy;
151ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int *majorVersion;
152ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int *minorVersion;
153ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int *patchVersion;
154ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
155ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
156ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIQueryVersionReply rep;
157ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIQueryVersionReq *req;
158ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
159ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("QueryVersion...");
160ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
161ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
162ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
163ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRIQueryVersion, req);
164ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
165ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRIQueryVersion;
166ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
167ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
168ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
169ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      TRACE("QueryVersion... return False");
170ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
171ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
172ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   *majorVersion = rep.majorVersion;
173ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   *minorVersion = rep.minorVersion;
174ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   *patchVersion = rep.patchVersion;
175ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
176ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
177ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("QueryVersion... return True");
178ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
179ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
180ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
181ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
182ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRIQueryDirectRenderingCapable(dpy, screen, isCapable)
183ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Display *dpy;
184ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int screen;
185ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Bool *isCapable;
186ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
187ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
188ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIQueryDirectRenderingCapableReply rep;
189ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIQueryDirectRenderingCapableReq *req;
190ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
191ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("QueryDirectRenderingCapable...");
192ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
193ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
194ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
195ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRIQueryDirectRenderingCapable, req);
196ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
197ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRIQueryDirectRenderingCapable;
198ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->screen = screen;
199ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
200ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
201ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
202ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      TRACE("QueryDirectRenderingCapable... return False");
203ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
204ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
205ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   *isCapable = rep.isCapable;
206ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
207ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
208ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("QueryDirectRenderingCapable... return True");
209ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
210ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
211ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
212ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
213ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRIAuthConnection(dpy, screen, magic)
214ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Display *dpy;
215ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int screen;
216ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     unsigned int magic;
217ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
218ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
219ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIAuthConnectionReq *req;
220ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIAuthConnectionReply rep;
221ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
222ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("AuthConnection...");
223ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
224ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
225ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
226ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRIAuthConnection, req);
227ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
228ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRIAuthConnection;
229ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->screen = screen;
230ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->magic = magic;
231ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   rep.authenticated = 0;
232ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse) || !rep.authenticated) {
233ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
234ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
235ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      TRACE("AuthConnection... return False");
236ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
237ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
238ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
239ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
240ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("AuthConnection... return True");
241ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
242ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
243ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
244ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
245ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRICreateSurface(dpy, screen, drawable, client_id, key, uid)
246ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Display *dpy;
247ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int screen;
248ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Drawable drawable;
249ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     unsigned int client_id;
250ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     unsigned int *key;
251ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     unsigned int *uid;
252ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
253ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
254ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRICreateSurfaceReply rep;
255ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRICreateSurfaceReq *req;
256ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
257ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("CreateSurface...");
258ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
259ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
260ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
261ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRICreateSurface, req);
262ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
263ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRICreateSurface;
264ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->screen = screen;
265ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->drawable = drawable;
266ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->client_id = client_id;
267ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   rep.key_0 = rep.key_1 = rep.uid = 0;
268ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse) || !rep.key_0) {
269ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
270ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
271ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      TRACE("CreateSurface... return False");
272ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
273ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
274ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   key[0] = rep.key_0;
275ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   key[1] = rep.key_1;
276ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   *uid = rep.uid;
277ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
278ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
279ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("CreateSurface... return True");
280ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
281ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
282ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
283ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
284ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRIDestroySurface(dpy, screen, drawable)
285ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Display *dpy;
286ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     int screen;
287ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     Drawable drawable;
288ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
289ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
290ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIDestroySurfaceReq *req;
291ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
292ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("DestroySurface...");
293ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
294ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
295ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
296ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRIDestroySurface, req);
297ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
298ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRIDestroySurface;
299ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->screen = screen;
300ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->drawable = drawable;
301ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
302ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
303ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   TRACE("DestroySurface... return True");
304ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
305ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
306ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
307ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
308ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRICreateSharedBuffer(Display * dpy, int screen, Drawable drawable,
309ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                            Bool doubleSwap, char *path, size_t pathlen,
310ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                            int *width, int *height)
311ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
312ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
313ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRICreateSharedBufferReq *req;
314ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRICreateSharedBufferReply rep;
315ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
316ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
317ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
318ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
319ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRICreateSharedBuffer, req);
320ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
321ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRICreateSharedBuffer;
322ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->screen = screen;
323ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->drawable = drawable;
324ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->doubleSwap = doubleSwap;
325ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
326ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
327ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
328ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      puts("REPLY ERROR");
329ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
330ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
331ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
332ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
333ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
334ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
335098ecfad83a63bd8eb04c37f268c18d8744dff2cJeremy Huddleston   /* printf("rep.stringLength %d\n", (int) rep.stringLength); */
336ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
337ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (rep.stringLength > 0 && rep.stringLength <= pathlen) {
338ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      _XReadPad(dpy, path, rep.stringLength);
339ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
340098ecfad83a63bd8eb04c37f268c18d8744dff2cJeremy Huddleston      /* printf("path: %s\n", path); */
341ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
342ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *width = rep.width;
343ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *height = rep.height;
344ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
345ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
346ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
347ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return True;
348ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
349ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
350ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
351ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
352ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
353ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return False;
354ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
355ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
356ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
357ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRISwapBuffers(Display * dpy, int screen, Drawable drawable)
358ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
359ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
360ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRISwapBuffersReq *req;
361ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
362ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
363ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
364ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
365ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRISwapBuffers, req);
366ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
367ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRISwapBuffers;
368ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->screen = screen;
369ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->drawable = drawable;
370ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
371ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
372ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
373ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
374ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
375ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
376ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
377ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRICreatePixmap(Display * dpy, int screen, Drawable drawable,
378ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                      int *width, int *height, int *pitch, int *bpp,
379ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                      size_t * size, char *bufname, size_t bufnamesize)
380ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
381ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
382ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRICreatePixmapReq *req;
383ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRICreatePixmapReply rep;
384ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
385ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
386ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
387ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
388ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRICreatePixmap, req);
389ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
390ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRICreatePixmap;
391ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->screen = screen;
392ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->drawable = drawable;
393ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
394ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
395ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
396ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
397ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return False;
398ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
399ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
400ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   /*
401ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      printf("rep.stringLength %d\n", (int) rep.stringLength);
402ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston    */
403ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
404ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   if (rep.stringLength > 0 && rep.stringLength <= bufnamesize) {
405ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      _XReadPad(dpy, bufname, rep.stringLength);
406ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
407098ecfad83a63bd8eb04c37f268c18d8744dff2cJeremy Huddleston      /* printf("path: %s\n", bufname); */
408ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
409ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *width = rep.width;
410ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *height = rep.height;
411ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *pitch = rep.pitch;
412ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *bpp = rep.bpp;
413ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      *size = rep.size;
414ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
415ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      UnlockDisplay(dpy);
416ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      SyncHandle();
417ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      return True;
418ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
419ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   else if (rep.stringLength > 0) {
420ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      _XEatData(dpy, rep.stringLength);
421ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   }
422ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
423ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
424ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
425ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
426ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
427ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
428ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
429ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/*
430ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * Call it a drawable, because we really don't know what it is
431ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * until it reaches the server, and we should keep that in mind.
432ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston */
433ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonBool
434ad503c41557606d15b0420c824369456f6d20a8fJeremy HuddlestonXAppleDRIDestroyPixmap(Display * dpy, Pixmap drawable)
435ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
436ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   XExtDisplayInfo *info = find_display(dpy);
437ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xAppleDRIDestroyPixmapReq *req;
438ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
439ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   AppleDRICheckExtension(dpy, info, False);
440ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
441ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   LockDisplay(dpy);
442ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GetReq(AppleDRIDestroyPixmap, req);
443ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->reqType = info->codes->major_opcode;
444ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->driReqType = X_AppleDRIDestroyPixmap;
445ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   req->drawable = drawable;
446ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   UnlockDisplay(dpy);
447ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   SyncHandle();
448ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
449ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   return True;
450ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}
451