1706f2543Smrg/*
2706f2543Smrg * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3706f2543Smrg * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
4706f2543Smrg *
5706f2543Smrg * Permission is hereby granted, free of charge, to any person obtaining a
6706f2543Smrg * copy of this software and associated documentation files (the "Software"),
7706f2543Smrg * to deal in the Software without restriction, including without limitation
8706f2543Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9706f2543Smrg * and/or sell copies of the Software, and to permit persons to whom the
10706f2543Smrg * Software is furnished to do so, subject to the following conditions:
11706f2543Smrg *
12706f2543Smrg * The above copyright notice including the dates of first publication and
13706f2543Smrg * either this permission notice or a reference to
14706f2543Smrg * http://oss.sgi.com/projects/FreeB/
15706f2543Smrg * shall be included in all copies or substantial portions of the Software.
16706f2543Smrg *
17706f2543Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18706f2543Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19706f2543Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20706f2543Smrg * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21706f2543Smrg * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
22706f2543Smrg * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23706f2543Smrg * SOFTWARE.
24706f2543Smrg *
25706f2543Smrg * Except as contained in this notice, the name of Silicon Graphics, Inc.
26706f2543Smrg * shall not be used in advertising or otherwise to promote the sale, use or
27706f2543Smrg * other dealings in this Software without prior written authorization from
28706f2543Smrg * Silicon Graphics, Inc.
29706f2543Smrg */
30706f2543Smrg
31706f2543Smrg#ifdef HAVE_DIX_CONFIG_H
32706f2543Smrg#include <dix-config.h>
33706f2543Smrg#endif
34706f2543Smrg
35706f2543Smrg#include <string.h>
36706f2543Smrg#include "glxserver.h"
37706f2543Smrg#include "glxutil.h"
38706f2543Smrg#include <GL/glxtokens.h>
39706f2543Smrg#include <unpack.h>
40706f2543Smrg#include <pixmapstr.h>
41706f2543Smrg#include <windowstr.h>
42706f2543Smrg#include "glxext.h"
43706f2543Smrg#include "glapitable.h"
44706f2543Smrg#include "glapi.h"
45706f2543Smrg#include "glthread.h"
46706f2543Smrg#include "dispatch.h"
47706f2543Smrg#include "indirect_dispatch.h"
48706f2543Smrg#include "indirect_table.h"
49706f2543Smrg#include "indirect_util.h"
50706f2543Smrg
51706f2543Smrg
52706f2543Smrg/************************************************************************/
53706f2543Smrg
54706f2543Smrg/*
55706f2543Smrg** Byteswapping versions of GLX commands.  In most cases they just swap
56706f2543Smrg** the incoming arguments and then call the unswapped routine.  For commands
57706f2543Smrg** that have replies, a separate swapping routine for the reply is provided;
58706f2543Smrg** it is called at the end of the unswapped routine.
59706f2543Smrg*/
60706f2543Smrg
61706f2543Smrgint __glXDispSwap_CreateContext(__GLXclientState *cl, GLbyte *pc)
62706f2543Smrg{
63706f2543Smrg    ClientPtr client = cl->client;
64706f2543Smrg    xGLXCreateContextReq *req = (xGLXCreateContextReq *) pc;
65706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
66706f2543Smrg
67706f2543Smrg    REQUEST_SIZE_MATCH(xGLXCreateContextReq);
68706f2543Smrg
69706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
70706f2543Smrg    __GLX_SWAP_INT(&req->context);
71706f2543Smrg    __GLX_SWAP_INT(&req->visual);
72706f2543Smrg    __GLX_SWAP_INT(&req->screen);
73706f2543Smrg    __GLX_SWAP_INT(&req->shareList);
74706f2543Smrg
75706f2543Smrg    return __glXDisp_CreateContext(cl, pc);
76706f2543Smrg}
77706f2543Smrg
78706f2543Smrgint __glXDispSwap_CreateNewContext(__GLXclientState *cl, GLbyte *pc)
79706f2543Smrg{
80706f2543Smrg    ClientPtr client = cl->client;
81706f2543Smrg    xGLXCreateNewContextReq *req = (xGLXCreateNewContextReq *) pc;
82706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
83706f2543Smrg
84706f2543Smrg    REQUEST_SIZE_MATCH(xGLXCreateNewContextReq);
85706f2543Smrg
86706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
87706f2543Smrg    __GLX_SWAP_INT(&req->context);
88706f2543Smrg    __GLX_SWAP_INT(&req->fbconfig);
89706f2543Smrg    __GLX_SWAP_INT(&req->screen);
90706f2543Smrg    __GLX_SWAP_INT(&req->renderType);
91706f2543Smrg    __GLX_SWAP_INT(&req->shareList);
92706f2543Smrg
93706f2543Smrg    return __glXDisp_CreateNewContext(cl, pc);
94706f2543Smrg}
95706f2543Smrg
96706f2543Smrgint __glXDispSwap_CreateContextWithConfigSGIX(__GLXclientState *cl, GLbyte *pc)
97706f2543Smrg{
98706f2543Smrg    ClientPtr client = cl->client;
99706f2543Smrg    xGLXCreateContextWithConfigSGIXReq *req =
100706f2543Smrg	(xGLXCreateContextWithConfigSGIXReq *) pc;
101706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
102706f2543Smrg
103706f2543Smrg    REQUEST_SIZE_MATCH(xGLXCreateContextWithConfigSGIXReq);
104706f2543Smrg
105706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
106706f2543Smrg    __GLX_SWAP_INT(&req->context);
107706f2543Smrg    __GLX_SWAP_INT(&req->fbconfig);
108706f2543Smrg    __GLX_SWAP_INT(&req->screen);
109706f2543Smrg    __GLX_SWAP_INT(&req->renderType);
110706f2543Smrg    __GLX_SWAP_INT(&req->shareList);
111706f2543Smrg
112706f2543Smrg    return __glXDisp_CreateContextWithConfigSGIX(cl, pc);
113706f2543Smrg}
114706f2543Smrg
115706f2543Smrgint __glXDispSwap_DestroyContext(__GLXclientState *cl, GLbyte *pc)
116706f2543Smrg{
117706f2543Smrg    ClientPtr client = cl->client;
118706f2543Smrg    xGLXDestroyContextReq *req = (xGLXDestroyContextReq *) pc;
119706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
120706f2543Smrg
121706f2543Smrg    REQUEST_SIZE_MATCH(xGLXDestroyContextReq);
122706f2543Smrg
123706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
124706f2543Smrg    __GLX_SWAP_INT(&req->context);
125706f2543Smrg
126706f2543Smrg    return __glXDisp_DestroyContext(cl, pc);
127706f2543Smrg}
128706f2543Smrg
129706f2543Smrgint __glXDispSwap_MakeCurrent(__GLXclientState *cl, GLbyte *pc)
130706f2543Smrg{
131706f2543Smrg    ClientPtr client = cl->client;
132706f2543Smrg    xGLXMakeCurrentReq *req = (xGLXMakeCurrentReq *) pc;
133706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
134706f2543Smrg
135706f2543Smrg    REQUEST_SIZE_MATCH(xGLXMakeCurrentReq);
136706f2543Smrg
137706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
138706f2543Smrg    __GLX_SWAP_INT(&req->drawable);
139706f2543Smrg    __GLX_SWAP_INT(&req->context);
140706f2543Smrg    __GLX_SWAP_INT(&req->oldContextTag);
141706f2543Smrg
142706f2543Smrg    return __glXDisp_MakeCurrent(cl, pc);
143706f2543Smrg}
144706f2543Smrg
145706f2543Smrgint __glXDispSwap_MakeContextCurrent(__GLXclientState *cl, GLbyte *pc)
146706f2543Smrg{
147706f2543Smrg    ClientPtr client = cl->client;
148706f2543Smrg    xGLXMakeContextCurrentReq *req = (xGLXMakeContextCurrentReq *) pc;
149706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
150706f2543Smrg
151706f2543Smrg    REQUEST_SIZE_MATCH(xGLXMakeContextCurrentReq);
152706f2543Smrg
153706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
154706f2543Smrg    __GLX_SWAP_INT(&req->drawable);
155706f2543Smrg    __GLX_SWAP_INT(&req->readdrawable);
156706f2543Smrg    __GLX_SWAP_INT(&req->context);
157706f2543Smrg    __GLX_SWAP_INT(&req->oldContextTag);
158706f2543Smrg
159706f2543Smrg    return __glXDisp_MakeContextCurrent(cl, pc);
160706f2543Smrg}
161706f2543Smrg
162706f2543Smrgint __glXDispSwap_MakeCurrentReadSGI(__GLXclientState *cl, GLbyte *pc)
163706f2543Smrg{
164706f2543Smrg    ClientPtr client = cl->client;
165706f2543Smrg    xGLXMakeCurrentReadSGIReq *req = (xGLXMakeCurrentReadSGIReq *) pc;
166706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
167706f2543Smrg
168706f2543Smrg    REQUEST_SIZE_MATCH(xGLXMakeCurrentReadSGIReq);
169706f2543Smrg
170706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
171706f2543Smrg    __GLX_SWAP_INT(&req->drawable);
172706f2543Smrg    __GLX_SWAP_INT(&req->readable);
173706f2543Smrg    __GLX_SWAP_INT(&req->context);
174706f2543Smrg    __GLX_SWAP_INT(&req->oldContextTag);
175706f2543Smrg
176706f2543Smrg    return __glXDisp_MakeCurrentReadSGI(cl, pc);
177706f2543Smrg}
178706f2543Smrg
179706f2543Smrgint __glXDispSwap_IsDirect(__GLXclientState *cl, GLbyte *pc)
180706f2543Smrg{
181706f2543Smrg    ClientPtr client = cl->client;
182706f2543Smrg    xGLXIsDirectReq *req = (xGLXIsDirectReq *) pc;
183706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
184706f2543Smrg
185706f2543Smrg    REQUEST_SIZE_MATCH(xGLXIsDirectReq);
186706f2543Smrg
187706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
188706f2543Smrg    __GLX_SWAP_INT(&req->context);
189706f2543Smrg
190706f2543Smrg    return __glXDisp_IsDirect(cl, pc);
191706f2543Smrg}
192706f2543Smrg
193706f2543Smrgint __glXDispSwap_QueryVersion(__GLXclientState *cl, GLbyte *pc)
194706f2543Smrg{
195706f2543Smrg    ClientPtr client = cl->client;
196706f2543Smrg    xGLXQueryVersionReq *req = (xGLXQueryVersionReq *) pc;
197706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
198706f2543Smrg
199706f2543Smrg    REQUEST_SIZE_MATCH(xGLXQueryVersionReq);
200706f2543Smrg
201706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
202706f2543Smrg    __GLX_SWAP_INT(&req->majorVersion);
203706f2543Smrg    __GLX_SWAP_INT(&req->minorVersion);
204706f2543Smrg
205706f2543Smrg    return __glXDisp_QueryVersion(cl, pc);
206706f2543Smrg}
207706f2543Smrg
208706f2543Smrgint __glXDispSwap_WaitGL(__GLXclientState *cl, GLbyte *pc)
209706f2543Smrg{
210706f2543Smrg    ClientPtr client = cl->client;
211706f2543Smrg    xGLXWaitGLReq *req = (xGLXWaitGLReq *) pc;
212706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
213706f2543Smrg
214706f2543Smrg    REQUEST_SIZE_MATCH(xGLXWaitGLReq);
215706f2543Smrg
216706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
217706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
218706f2543Smrg
219706f2543Smrg    return __glXDisp_WaitGL(cl, pc);
220706f2543Smrg}
221706f2543Smrg
222706f2543Smrgint __glXDispSwap_WaitX(__GLXclientState *cl, GLbyte *pc)
223706f2543Smrg{
224706f2543Smrg    ClientPtr client = cl->client;
225706f2543Smrg    xGLXWaitXReq *req = (xGLXWaitXReq *) pc;
226706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
227706f2543Smrg
228706f2543Smrg    REQUEST_SIZE_MATCH(xGLXWaitXReq);
229706f2543Smrg
230706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
231706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
232706f2543Smrg
233706f2543Smrg    return __glXDisp_WaitX(cl, pc);
234706f2543Smrg}
235706f2543Smrg
236706f2543Smrgint __glXDispSwap_CopyContext(__GLXclientState *cl, GLbyte *pc)
237706f2543Smrg{
238706f2543Smrg    ClientPtr client = cl->client;
239706f2543Smrg    xGLXCopyContextReq *req = (xGLXCopyContextReq *) pc;
240706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
241706f2543Smrg
242706f2543Smrg    REQUEST_SIZE_MATCH(xGLXCopyContextReq);
243706f2543Smrg
244706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
245706f2543Smrg    __GLX_SWAP_INT(&req->source);
246706f2543Smrg    __GLX_SWAP_INT(&req->dest);
247706f2543Smrg    __GLX_SWAP_INT(&req->mask);
248706f2543Smrg
249706f2543Smrg    return __glXDisp_CopyContext(cl, pc);
250706f2543Smrg}
251706f2543Smrg
252706f2543Smrgint __glXDispSwap_GetVisualConfigs(__GLXclientState *cl, GLbyte *pc)
253706f2543Smrg{
254706f2543Smrg    ClientPtr client = cl->client;
255706f2543Smrg    xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) pc;
256706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
257706f2543Smrg
258706f2543Smrg    REQUEST_SIZE_MATCH(xGLXGetVisualConfigsReq);
259706f2543Smrg
260706f2543Smrg    __GLX_SWAP_INT(&req->screen);
261706f2543Smrg    return __glXDisp_GetVisualConfigs(cl, pc);
262706f2543Smrg}
263706f2543Smrg
264706f2543Smrgint __glXDispSwap_GetFBConfigs(__GLXclientState *cl, GLbyte *pc)
265706f2543Smrg{
266706f2543Smrg    ClientPtr client = cl->client;
267706f2543Smrg    xGLXGetFBConfigsReq *req = (xGLXGetFBConfigsReq *) pc;
268706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
269706f2543Smrg
270706f2543Smrg    REQUEST_SIZE_MATCH(xGLXGetFBConfigsReq);
271706f2543Smrg
272706f2543Smrg    __GLX_SWAP_INT(&req->screen);
273706f2543Smrg    return __glXDisp_GetFBConfigs(cl, pc);
274706f2543Smrg}
275706f2543Smrg
276706f2543Smrgint __glXDispSwap_GetFBConfigsSGIX(__GLXclientState *cl, GLbyte *pc)
277706f2543Smrg{
278706f2543Smrg    ClientPtr client = cl->client;
279706f2543Smrg    xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *) pc;
280706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
281706f2543Smrg
282706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXGetFBConfigsSGIXReq);
283706f2543Smrg
284706f2543Smrg    __GLX_SWAP_INT(&req->screen);
285706f2543Smrg    return __glXDisp_GetFBConfigsSGIX(cl, pc);
286706f2543Smrg}
287706f2543Smrg
288706f2543Smrgint __glXDispSwap_CreateGLXPixmap(__GLXclientState *cl, GLbyte *pc)
289706f2543Smrg{
290706f2543Smrg    ClientPtr client = cl->client;
291706f2543Smrg    xGLXCreateGLXPixmapReq *req = (xGLXCreateGLXPixmapReq *) pc;
292706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
293706f2543Smrg
294706f2543Smrg    REQUEST_SIZE_MATCH(xGLXCreateGLXPixmapReq);
295706f2543Smrg
296706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
297706f2543Smrg    __GLX_SWAP_INT(&req->screen);
298706f2543Smrg    __GLX_SWAP_INT(&req->visual);
299706f2543Smrg    __GLX_SWAP_INT(&req->pixmap);
300706f2543Smrg    __GLX_SWAP_INT(&req->glxpixmap);
301706f2543Smrg
302706f2543Smrg    return __glXDisp_CreateGLXPixmap(cl, pc);
303706f2543Smrg}
304706f2543Smrg
305706f2543Smrgint __glXDispSwap_CreatePixmap(__GLXclientState *cl, GLbyte *pc)
306706f2543Smrg{
307706f2543Smrg    ClientPtr client = cl->client;
308706f2543Smrg    xGLXCreatePixmapReq *req = (xGLXCreatePixmapReq *) pc;
309706f2543Smrg    CARD32 *attribs;
310706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
311706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
312706f2543Smrg
313706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXCreatePixmapReq);
314706f2543Smrg
315706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
316706f2543Smrg    __GLX_SWAP_INT(&req->screen);
317706f2543Smrg    __GLX_SWAP_INT(&req->fbconfig);
318706f2543Smrg    __GLX_SWAP_INT(&req->pixmap);
319706f2543Smrg    __GLX_SWAP_INT(&req->glxpixmap);
320706f2543Smrg    __GLX_SWAP_INT(&req->numAttribs);
321706f2543Smrg
322706f2543Smrg    if (req->numAttribs > (UINT32_MAX >> 3)) {
323706f2543Smrg	client->errorValue = req->numAttribs;
324706f2543Smrg	return BadValue;
325706f2543Smrg    }
326706f2543Smrg    REQUEST_FIXED_SIZE(xGLXCreatePixmapReq, req->numAttribs << 3);
327706f2543Smrg    attribs = (CARD32*)(req + 1);
328706f2543Smrg    __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1);
329706f2543Smrg
330706f2543Smrg    return __glXDisp_CreatePixmap(cl, pc);
331706f2543Smrg}
332706f2543Smrg
333706f2543Smrgint __glXDispSwap_CreateGLXPixmapWithConfigSGIX(__GLXclientState *cl, GLbyte *pc)
334706f2543Smrg{
335706f2543Smrg    ClientPtr client = cl->client;
336706f2543Smrg    xGLXCreateGLXPixmapWithConfigSGIXReq *req =
337706f2543Smrg	(xGLXCreateGLXPixmapWithConfigSGIXReq *) pc;
338706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
339706f2543Smrg
340706f2543Smrg    REQUEST_SIZE_MATCH(xGLXCreateGLXPixmapWithConfigSGIXReq);
341706f2543Smrg
342706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
343706f2543Smrg    __GLX_SWAP_INT(&req->screen);
344706f2543Smrg    __GLX_SWAP_INT(&req->fbconfig);
345706f2543Smrg    __GLX_SWAP_INT(&req->pixmap);
346706f2543Smrg    __GLX_SWAP_INT(&req->glxpixmap);
347706f2543Smrg
348706f2543Smrg    return __glXDisp_CreateGLXPixmapWithConfigSGIX(cl, pc);
349706f2543Smrg}
350706f2543Smrg
351706f2543Smrgint __glXDispSwap_DestroyGLXPixmap(__GLXclientState *cl, GLbyte *pc)
352706f2543Smrg{
353706f2543Smrg    ClientPtr client = cl->client;
354706f2543Smrg    xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
355706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
356706f2543Smrg
357706f2543Smrg    REQUEST_SIZE_MATCH(xGLXDestroyGLXPixmapReq);
358706f2543Smrg
359706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
360706f2543Smrg    __GLX_SWAP_INT(&req->glxpixmap);
361706f2543Smrg
362706f2543Smrg    return __glXDisp_DestroyGLXPixmap(cl, pc);
363706f2543Smrg}
364706f2543Smrg
365706f2543Smrgint __glXDispSwap_DestroyPixmap(__GLXclientState *cl, GLbyte *pc)
366706f2543Smrg{
367706f2543Smrg    ClientPtr client = cl->client;
368706f2543Smrg    xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
369706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
370706f2543Smrg
371706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXDestroyGLXPixmapReq);
372706f2543Smrg
373706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
374706f2543Smrg    __GLX_SWAP_INT(&req->glxpixmap);
375706f2543Smrg
376706f2543Smrg    return __glXDisp_DestroyGLXPixmap(cl, pc);
377706f2543Smrg}
378706f2543Smrg
379706f2543Smrgint __glXDispSwap_QueryContext(__GLXclientState *cl, GLbyte *pc)
380706f2543Smrg{
381706f2543Smrg    ClientPtr client = cl->client;
382706f2543Smrg    xGLXQueryContextReq *req = (xGLXQueryContextReq *) pc;
383706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
384706f2543Smrg
385706f2543Smrg    REQUEST_SIZE_MATCH(xGLXQueryContextReq);
386706f2543Smrg
387706f2543Smrg    __GLX_SWAP_INT(&req->context);
388706f2543Smrg
389706f2543Smrg    return __glXDisp_QueryContext(cl, pc);
390706f2543Smrg}
391706f2543Smrg
392706f2543Smrgint __glXDispSwap_CreatePbuffer(__GLXclientState *cl, GLbyte *pc)
393706f2543Smrg{
394706f2543Smrg    ClientPtr client = cl->client;
395706f2543Smrg    xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *) pc;
396706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
397706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
398706f2543Smrg    CARD32 *attribs;
399706f2543Smrg
400706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXCreatePbufferReq);
401706f2543Smrg
402706f2543Smrg    __GLX_SWAP_INT(&req->screen);
403706f2543Smrg    __GLX_SWAP_INT(&req->fbconfig);
404706f2543Smrg    __GLX_SWAP_INT(&req->pbuffer);
405706f2543Smrg    __GLX_SWAP_INT(&req->numAttribs);
406706f2543Smrg
407706f2543Smrg    if (req->numAttribs > (UINT32_MAX >> 3)) {
408706f2543Smrg	client->errorValue = req->numAttribs;
409706f2543Smrg	return BadValue;
410706f2543Smrg    }
411706f2543Smrg    REQUEST_FIXED_SIZE(xGLXCreatePbufferReq, req->numAttribs << 3);
412706f2543Smrg    attribs = (CARD32*)(req + 1);
413706f2543Smrg    __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1);
414706f2543Smrg
415706f2543Smrg    return __glXDisp_CreatePbuffer(cl, pc);
416706f2543Smrg}
417706f2543Smrg
418706f2543Smrgint __glXDispSwap_CreateGLXPbufferSGIX(__GLXclientState *cl, GLbyte *pc)
419706f2543Smrg{
420706f2543Smrg    ClientPtr client = cl->client;
421706f2543Smrg    xGLXCreateGLXPbufferSGIXReq *req = (xGLXCreateGLXPbufferSGIXReq *) pc;
422706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
423706f2543Smrg
424706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXCreateGLXPbufferSGIXReq);
425706f2543Smrg
426706f2543Smrg    __GLX_SWAP_INT(&req->screen);
427706f2543Smrg    __GLX_SWAP_INT(&req->fbconfig);
428706f2543Smrg    __GLX_SWAP_INT(&req->pbuffer);
429706f2543Smrg    __GLX_SWAP_INT(&req->width);
430706f2543Smrg    __GLX_SWAP_INT(&req->height);
431706f2543Smrg
432706f2543Smrg    return __glXDisp_CreateGLXPbufferSGIX(cl, pc);
433706f2543Smrg}
434706f2543Smrg
435706f2543Smrgint __glXDispSwap_DestroyPbuffer(__GLXclientState *cl, GLbyte *pc)
436706f2543Smrg{
437706f2543Smrg    ClientPtr client = cl->client;
438706f2543Smrg    xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) pc;
439706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
440706f2543Smrg
441706f2543Smrg    REQUEST_SIZE_MATCH(xGLXDestroyPbufferReq);
442706f2543Smrg
443706f2543Smrg    __GLX_SWAP_INT(&req->pbuffer);
444706f2543Smrg
445706f2543Smrg    return __glXDisp_DestroyPbuffer(cl, pc);
446706f2543Smrg}
447706f2543Smrg
448706f2543Smrgint __glXDispSwap_DestroyGLXPbufferSGIX(__GLXclientState *cl, GLbyte *pc)
449706f2543Smrg{
450706f2543Smrg    ClientPtr client = cl->client;
451706f2543Smrg    xGLXDestroyGLXPbufferSGIXReq *req = (xGLXDestroyGLXPbufferSGIXReq *) pc;
452706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
453706f2543Smrg
454706f2543Smrg    REQUEST_SIZE_MATCH(xGLXDestroyGLXPbufferSGIXReq);
455706f2543Smrg
456706f2543Smrg    __GLX_SWAP_INT(&req->pbuffer);
457706f2543Smrg
458706f2543Smrg    return __glXDisp_DestroyGLXPbufferSGIX(cl, pc);
459706f2543Smrg}
460706f2543Smrg
461706f2543Smrgint __glXDispSwap_ChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
462706f2543Smrg{
463706f2543Smrg    ClientPtr client = cl->client;
464706f2543Smrg    xGLXChangeDrawableAttributesReq *req =
465706f2543Smrg	(xGLXChangeDrawableAttributesReq *) pc;
466706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
467706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
468706f2543Smrg    CARD32 *attribs;
469706f2543Smrg
470706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXChangeDrawableAttributesReq);
471706f2543Smrg
472706f2543Smrg    __GLX_SWAP_INT(&req->drawable);
473706f2543Smrg    __GLX_SWAP_INT(&req->numAttribs);
474706f2543Smrg
475706f2543Smrg    if (req->numAttribs > (UINT32_MAX >> 3)) {
476706f2543Smrg	client->errorValue = req->numAttribs;
477706f2543Smrg	return BadValue;
478706f2543Smrg    }
479706f2543Smrg    if (((sizeof(xGLXChangeDrawableAttributesReq) + (req->numAttribs << 3)) >> 2) < client->req_len)
480706f2543Smrg	return BadLength;
481706f2543Smrg
482706f2543Smrg    attribs = (CARD32*)(req + 1);
483706f2543Smrg    __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1);
484706f2543Smrg
485706f2543Smrg    return __glXDisp_ChangeDrawableAttributes(cl, pc);
486706f2543Smrg}
487706f2543Smrg
488706f2543Smrgint __glXDispSwap_ChangeDrawableAttributesSGIX(__GLXclientState *cl,
489706f2543Smrg					       GLbyte *pc)
490706f2543Smrg{
491706f2543Smrg    ClientPtr client = cl->client;
492706f2543Smrg    xGLXChangeDrawableAttributesSGIXReq *req =
493706f2543Smrg	(xGLXChangeDrawableAttributesSGIXReq *) pc;
494706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
495706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
496706f2543Smrg    CARD32 *attribs;
497706f2543Smrg
498706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXChangeDrawableAttributesSGIXReq);
499706f2543Smrg
500706f2543Smrg    __GLX_SWAP_INT(&req->drawable);
501706f2543Smrg    __GLX_SWAP_INT(&req->numAttribs);
502706f2543Smrg
503706f2543Smrg    if (req->numAttribs > (UINT32_MAX >> 3)) {
504706f2543Smrg	client->errorValue = req->numAttribs;
505706f2543Smrg	return BadValue;
506706f2543Smrg    }
507706f2543Smrg    REQUEST_FIXED_SIZE(xGLXChangeDrawableAttributesSGIXReq, req->numAttribs << 3);
508706f2543Smrg    attribs = (CARD32*)(req + 1);
509706f2543Smrg    __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1);
510706f2543Smrg
511706f2543Smrg    return __glXDisp_ChangeDrawableAttributesSGIX(cl, pc);
512706f2543Smrg}
513706f2543Smrg
514706f2543Smrgint __glXDispSwap_CreateWindow(__GLXclientState *cl, GLbyte *pc)
515706f2543Smrg{
516706f2543Smrg    ClientPtr client = cl->client;
517706f2543Smrg    xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc;
518706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
519706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
520706f2543Smrg    CARD32 *attribs;
521706f2543Smrg
522706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXCreateWindowReq);
523706f2543Smrg
524706f2543Smrg    __GLX_SWAP_INT(&req->screen);
525706f2543Smrg    __GLX_SWAP_INT(&req->fbconfig);
526706f2543Smrg    __GLX_SWAP_INT(&req->window);
527706f2543Smrg    __GLX_SWAP_INT(&req->glxwindow);
528706f2543Smrg    __GLX_SWAP_INT(&req->numAttribs);
529706f2543Smrg
530706f2543Smrg    if (req->numAttribs > (UINT32_MAX >> 3)) {
531706f2543Smrg	client->errorValue = req->numAttribs;
532706f2543Smrg	return BadValue;
533706f2543Smrg    }
534706f2543Smrg    REQUEST_FIXED_SIZE(xGLXCreateWindowReq, req->numAttribs << 3);
535706f2543Smrg    attribs = (CARD32*)(req + 1);
536706f2543Smrg    __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1);
537706f2543Smrg
538706f2543Smrg    return __glXDisp_CreateWindow(cl, pc);
539706f2543Smrg}
540706f2543Smrg
541706f2543Smrgint __glXDispSwap_DestroyWindow(__GLXclientState *cl, GLbyte *pc)
542706f2543Smrg{
543706f2543Smrg    ClientPtr client = cl->client;
544706f2543Smrg    xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
545706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
546706f2543Smrg
547706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXDestroyWindowReq);
548706f2543Smrg
549706f2543Smrg    __GLX_SWAP_INT(&req->glxwindow);
550706f2543Smrg
551706f2543Smrg    return __glXDisp_DestroyWindow(cl, pc);
552706f2543Smrg}
553706f2543Smrg
554706f2543Smrgint __glXDispSwap_SwapBuffers(__GLXclientState *cl, GLbyte *pc)
555706f2543Smrg{
556706f2543Smrg    ClientPtr client = cl->client;
557706f2543Smrg    xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc;
558706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
559706f2543Smrg
560706f2543Smrg    REQUEST_SIZE_MATCH(xGLXSwapBuffersReq);
561706f2543Smrg
562706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
563706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
564706f2543Smrg    __GLX_SWAP_INT(&req->drawable);
565706f2543Smrg
566706f2543Smrg    return __glXDisp_SwapBuffers(cl, pc);
567706f2543Smrg}
568706f2543Smrg
569706f2543Smrgint __glXDispSwap_UseXFont(__GLXclientState *cl, GLbyte *pc)
570706f2543Smrg{
571706f2543Smrg    ClientPtr client = cl->client;
572706f2543Smrg    xGLXUseXFontReq *req = (xGLXUseXFontReq *) pc;
573706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
574706f2543Smrg
575706f2543Smrg    REQUEST_SIZE_MATCH(xGLXUseXFontReq);
576706f2543Smrg
577706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
578706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
579706f2543Smrg    __GLX_SWAP_INT(&req->font);
580706f2543Smrg    __GLX_SWAP_INT(&req->first);
581706f2543Smrg    __GLX_SWAP_INT(&req->count);
582706f2543Smrg    __GLX_SWAP_INT(&req->listBase);
583706f2543Smrg
584706f2543Smrg    return __glXDisp_UseXFont(cl, pc);
585706f2543Smrg}
586706f2543Smrg
587706f2543Smrg
588706f2543Smrgint __glXDispSwap_QueryExtensionsString(__GLXclientState *cl, GLbyte *pc)
589706f2543Smrg{
590706f2543Smrg    ClientPtr client = cl->client;
591706f2543Smrg    xGLXQueryExtensionsStringReq *req = (xGLXQueryExtensionsStringReq *)pc;
592706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
593706f2543Smrg
594706f2543Smrg    REQUEST_SIZE_MATCH(xGLXQueryExtensionsStringReq);
595706f2543Smrg
596706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
597706f2543Smrg    __GLX_SWAP_INT(&req->screen);
598706f2543Smrg
599706f2543Smrg    return __glXDisp_QueryExtensionsString(cl, pc);
600706f2543Smrg}
601706f2543Smrg
602706f2543Smrgint __glXDispSwap_QueryServerString(__GLXclientState *cl, GLbyte *pc)
603706f2543Smrg{
604706f2543Smrg    ClientPtr client = cl->client;
605706f2543Smrg    xGLXQueryServerStringReq *req = (xGLXQueryServerStringReq *)pc;
606706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
607706f2543Smrg
608706f2543Smrg    REQUEST_SIZE_MATCH(xGLXQueryServerStringReq);
609706f2543Smrg
610706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
611706f2543Smrg    __GLX_SWAP_INT(&req->screen);
612706f2543Smrg    __GLX_SWAP_INT(&req->name);
613706f2543Smrg
614706f2543Smrg    return __glXDisp_QueryServerString(cl, pc);
615706f2543Smrg}
616706f2543Smrg
617706f2543Smrgint __glXDispSwap_ClientInfo(__GLXclientState *cl, GLbyte *pc)
618706f2543Smrg{
619706f2543Smrg    ClientPtr client = cl->client;
620706f2543Smrg    xGLXClientInfoReq *req = (xGLXClientInfoReq *)pc;
621706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
622706f2543Smrg
623706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXClientInfoReq);
624706f2543Smrg
625706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
626706f2543Smrg    __GLX_SWAP_INT(&req->major);
627706f2543Smrg    __GLX_SWAP_INT(&req->minor);
628706f2543Smrg    __GLX_SWAP_INT(&req->numbytes);
629706f2543Smrg
630706f2543Smrg    return __glXDisp_ClientInfo(cl, pc);
631706f2543Smrg}
632706f2543Smrg
633706f2543Smrgint __glXDispSwap_QueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc)
634706f2543Smrg{
635706f2543Smrg    ClientPtr client = cl->client;
636706f2543Smrg    xGLXQueryContextInfoEXTReq *req = (xGLXQueryContextInfoEXTReq *) pc;
637706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
638706f2543Smrg
639706f2543Smrg    REQUEST_SIZE_MATCH(xGLXQueryContextInfoEXTReq);
640706f2543Smrg
641706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
642706f2543Smrg    __GLX_SWAP_INT(&req->context);
643706f2543Smrg
644706f2543Smrg    return __glXDisp_QueryContextInfoEXT(cl, pc);
645706f2543Smrg}
646706f2543Smrg
647706f2543Smrgint __glXDispSwap_BindTexImageEXT(__GLXclientState *cl, GLbyte *pc)
648706f2543Smrg{
649706f2543Smrg    ClientPtr client = cl->client;
650706f2543Smrg    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
651706f2543Smrg    GLXDrawable		 *drawId;
652706f2543Smrg    int			 *buffer;
653706f2543Smrg    CARD32		 *num_attribs;
654706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
655706f2543Smrg
656706f2543Smrg    if ((sizeof(xGLXVendorPrivateReq) + 12) >> 2 > client->req_len)
657706f2543Smrg	return BadLength;
658706f2543Smrg
659706f2543Smrg    pc += __GLX_VENDPRIV_HDR_SIZE;
660706f2543Smrg
661706f2543Smrg    drawId = ((GLXDrawable *) (pc));
662706f2543Smrg    buffer = ((int *)	      (pc + 4));
663706f2543Smrg    num_attribs = ((CARD32 *) (pc + 8));
664706f2543Smrg
665706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
666706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
667706f2543Smrg    __GLX_SWAP_INT(drawId);
668706f2543Smrg    __GLX_SWAP_INT(buffer);
669706f2543Smrg    __GLX_SWAP_INT(num_attribs);
670706f2543Smrg
671706f2543Smrg    return __glXDisp_BindTexImageEXT(cl, (GLbyte *)pc);
672706f2543Smrg}
673706f2543Smrg
674706f2543Smrgint __glXDispSwap_ReleaseTexImageEXT(__GLXclientState *cl, GLbyte *pc)
675706f2543Smrg{
676706f2543Smrg    ClientPtr client = cl->client;
677706f2543Smrg    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
678706f2543Smrg    GLXDrawable		 *drawId;
679706f2543Smrg    int			 *buffer;
680706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
681706f2543Smrg
682706f2543Smrg    REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 8);
683706f2543Smrg
684706f2543Smrg    pc += __GLX_VENDPRIV_HDR_SIZE;
685706f2543Smrg
686706f2543Smrg    drawId = ((GLXDrawable *) (pc));
687706f2543Smrg    buffer = ((int *)	      (pc + 4));
688706f2543Smrg
689706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
690706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
691706f2543Smrg    __GLX_SWAP_INT(drawId);
692706f2543Smrg    __GLX_SWAP_INT(buffer);
693706f2543Smrg
694706f2543Smrg    return __glXDisp_ReleaseTexImageEXT(cl, (GLbyte *)pc);
695706f2543Smrg}
696706f2543Smrg
697706f2543Smrgint __glXDispSwap_CopySubBufferMESA(__GLXclientState *cl, GLbyte *pc)
698706f2543Smrg{
699706f2543Smrg    ClientPtr client = cl->client;
700706f2543Smrg    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
701706f2543Smrg    GLXDrawable		 *drawId;
702706f2543Smrg    int			 *buffer;
703706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
704706f2543Smrg
705706f2543Smrg    REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 20);
706706f2543Smrg
707706f2543Smrg    (void) drawId;
708706f2543Smrg    (void) buffer;
709706f2543Smrg
710706f2543Smrg    pc += __GLX_VENDPRIV_HDR_SIZE;
711706f2543Smrg
712706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
713706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
714706f2543Smrg    __GLX_SWAP_INT(pc);
715706f2543Smrg    __GLX_SWAP_INT(pc + 4);
716706f2543Smrg    __GLX_SWAP_INT(pc + 8);
717706f2543Smrg    __GLX_SWAP_INT(pc + 12);
718706f2543Smrg    __GLX_SWAP_INT(pc + 16);
719706f2543Smrg
720706f2543Smrg    return __glXDisp_CopySubBufferMESA(cl, pc);
721706f2543Smrg
722706f2543Smrg}
723706f2543Smrg
724706f2543Smrgint __glXDispSwap_GetDrawableAttributesSGIX(__GLXclientState *cl, GLbyte *pc)
725706f2543Smrg{
726706f2543Smrg    ClientPtr client = cl->client;
727706f2543Smrg    xGLXVendorPrivateWithReplyReq *req = (xGLXVendorPrivateWithReplyReq *)pc;
728706f2543Smrg    CARD32 *data;
729706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
730706f2543Smrg
731706f2543Smrg    REQUEST_SIZE_MATCH(xGLXGetDrawableAttributesSGIXReq);
732706f2543Smrg
733706f2543Smrg    data = (CARD32 *) (req + 1);
734706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
735706f2543Smrg    __GLX_SWAP_INT(&req->contextTag);
736706f2543Smrg    __GLX_SWAP_INT(data);
737706f2543Smrg
738706f2543Smrg    return __glXDisp_GetDrawableAttributesSGIX(cl, pc);
739706f2543Smrg}
740706f2543Smrg
741706f2543Smrgint __glXDispSwap_GetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
742706f2543Smrg{
743706f2543Smrg    ClientPtr client = cl->client;
744706f2543Smrg    xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *)pc;
745706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
746706f2543Smrg
747706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXGetDrawableAttributesReq);
748706f2543Smrg
749706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
750706f2543Smrg    __GLX_SWAP_INT(&req->drawable);
751706f2543Smrg
752706f2543Smrg    return __glXDisp_GetDrawableAttributes(cl, pc);
753706f2543Smrg}
754706f2543Smrg
755706f2543Smrg
756706f2543Smrg/************************************************************************/
757706f2543Smrg
758706f2543Smrg/*
759706f2543Smrg** Swap replies.
760706f2543Smrg*/
761706f2543Smrg
762706f2543Smrgvoid __glXSwapMakeCurrentReply(ClientPtr client, xGLXMakeCurrentReply *reply)
763706f2543Smrg{
764706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
765706f2543Smrg    __GLX_SWAP_SHORT(&reply->sequenceNumber);
766706f2543Smrg    __GLX_SWAP_INT(&reply->length);
767706f2543Smrg    __GLX_SWAP_INT(&reply->contextTag);
768706f2543Smrg    WriteToClient(client, sz_xGLXMakeCurrentReply, (char *)reply);
769706f2543Smrg}
770706f2543Smrg
771706f2543Smrgvoid __glXSwapIsDirectReply(ClientPtr client, xGLXIsDirectReply *reply)
772706f2543Smrg{
773706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
774706f2543Smrg    __GLX_SWAP_SHORT(&reply->sequenceNumber);
775706f2543Smrg    __GLX_SWAP_INT(&reply->length);
776706f2543Smrg    WriteToClient(client, sz_xGLXIsDirectReply, (char *)reply);
777706f2543Smrg}
778706f2543Smrg
779706f2543Smrgvoid __glXSwapQueryVersionReply(ClientPtr client, xGLXQueryVersionReply *reply)
780706f2543Smrg{
781706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
782706f2543Smrg    __GLX_SWAP_SHORT(&reply->sequenceNumber);
783706f2543Smrg    __GLX_SWAP_INT(&reply->length);
784706f2543Smrg    __GLX_SWAP_INT(&reply->majorVersion);
785706f2543Smrg    __GLX_SWAP_INT(&reply->minorVersion);
786706f2543Smrg    WriteToClient(client, sz_xGLXQueryVersionReply, (char *)reply);
787706f2543Smrg}
788706f2543Smrg
789706f2543Smrgvoid glxSwapQueryExtensionsStringReply(ClientPtr client,
790706f2543Smrg				       xGLXQueryExtensionsStringReply *reply, char *buf)
791706f2543Smrg{
792706f2543Smrg    int length = reply->length;
793706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
794706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
795706f2543Smrg    __GLX_SWAP_SHORT(&reply->sequenceNumber);
796706f2543Smrg    __GLX_SWAP_INT(&reply->length);
797706f2543Smrg    __GLX_SWAP_INT(&reply->n);
798706f2543Smrg    WriteToClient(client, sz_xGLXQueryExtensionsStringReply, (char *)reply);
799706f2543Smrg    __GLX_SWAP_INT_ARRAY((int *)buf, length);
800706f2543Smrg    WriteToClient(client, length << 2, buf);
801706f2543Smrg}
802706f2543Smrg
803706f2543Smrgvoid glxSwapQueryServerStringReply(ClientPtr client,
804706f2543Smrg				   xGLXQueryServerStringReply *reply, char *buf)
805706f2543Smrg{
806706f2543Smrg    int length = reply->length;
807706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
808706f2543Smrg    __GLX_SWAP_SHORT(&reply->sequenceNumber);
809706f2543Smrg    __GLX_SWAP_INT(&reply->length);
810706f2543Smrg    __GLX_SWAP_INT(&reply->n);
811706f2543Smrg    WriteToClient(client, sz_xGLXQueryServerStringReply, (char *)reply);
812706f2543Smrg    /** no swap is needed for an array of chars **/
813706f2543Smrg    /* __GLX_SWAP_INT_ARRAY((int *)buf, length); */
814706f2543Smrg    WriteToClient(client, length << 2, buf);
815706f2543Smrg}
816706f2543Smrg
817706f2543Smrgvoid __glXSwapQueryContextInfoEXTReply(ClientPtr client, xGLXQueryContextInfoEXTReply *reply, int *buf)
818706f2543Smrg{
819706f2543Smrg    int length = reply->length;
820706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
821706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
822706f2543Smrg    __GLX_SWAP_SHORT(&reply->sequenceNumber);
823706f2543Smrg    __GLX_SWAP_INT(&reply->length);
824706f2543Smrg    __GLX_SWAP_INT(&reply->n);
825706f2543Smrg    WriteToClient(client, sz_xGLXQueryContextInfoEXTReply, (char *)reply);
826706f2543Smrg    __GLX_SWAP_INT_ARRAY((int *)buf, length);
827706f2543Smrg    WriteToClient(client, length << 2, (char *)buf);
828706f2543Smrg}
829706f2543Smrg
830706f2543Smrgvoid __glXSwapGetDrawableAttributesReply(ClientPtr client,
831706f2543Smrg					 xGLXGetDrawableAttributesReply *reply, CARD32 *buf)
832706f2543Smrg{
833706f2543Smrg    int length = reply->length;
834706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
835706f2543Smrg    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
836706f2543Smrg    __GLX_SWAP_SHORT(&reply->sequenceNumber);
837706f2543Smrg    __GLX_SWAP_INT(&reply->length);
838706f2543Smrg    __GLX_SWAP_INT(&reply->numAttribs);
839706f2543Smrg    WriteToClient(client, sz_xGLXGetDrawableAttributesReply, (char *)reply);
840706f2543Smrg    __GLX_SWAP_INT_ARRAY((int *)buf, length);
841706f2543Smrg    WriteToClient(client, length << 2, (char *)buf);
842706f2543Smrg}
843706f2543Smrg
844706f2543Smrg/************************************************************************/
845706f2543Smrg
846706f2543Smrg/*
847706f2543Smrg** Render and Renderlarge are not in the GLX API.  They are used by the GLX
848706f2543Smrg** client library to send batches of GL rendering commands.
849706f2543Smrg*/
850706f2543Smrg
851706f2543Smrgint __glXDispSwap_Render(__GLXclientState *cl, GLbyte *pc)
852706f2543Smrg{
853706f2543Smrg    return __glXDisp_Render(cl, pc);
854706f2543Smrg}
855706f2543Smrg
856706f2543Smrg/*
857706f2543Smrg** Execute a large rendering request (one that spans multiple X requests).
858706f2543Smrg*/
859706f2543Smrgint __glXDispSwap_RenderLarge(__GLXclientState *cl, GLbyte *pc)
860706f2543Smrg{
861706f2543Smrg    return __glXDisp_RenderLarge(cl, pc);
862706f2543Smrg}
863706f2543Smrg
864706f2543Smrg/************************************************************************/
865706f2543Smrg
866706f2543Smrg/*
867706f2543Smrg** No support is provided for the vendor-private requests other than
868706f2543Smrg** allocating these entry points in the dispatch table.
869706f2543Smrg*/
870706f2543Smrg
871706f2543Smrgint __glXDispSwap_VendorPrivate(__GLXclientState *cl, GLbyte *pc)
872706f2543Smrg{
873706f2543Smrg    ClientPtr client = cl->client;
874706f2543Smrg    xGLXVendorPrivateReq *req;
875706f2543Smrg    GLint vendorcode;
876706f2543Smrg    __GLXdispatchVendorPrivProcPtr proc;
877706f2543Smrg
878706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
879706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXVendorPrivateReq);
880706f2543Smrg
881706f2543Smrg    req = (xGLXVendorPrivateReq *) pc;
882706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
883706f2543Smrg    __GLX_SWAP_INT(&req->vendorCode);
884706f2543Smrg
885706f2543Smrg    vendorcode = req->vendorCode;
886706f2543Smrg
887706f2543Smrg    proc = (__GLXdispatchVendorPrivProcPtr)
888706f2543Smrg      __glXGetProtocolDecodeFunction(& VendorPriv_dispatch_info,
889706f2543Smrg				     vendorcode, 1);
890706f2543Smrg    if (proc != NULL) {
891706f2543Smrg	(*proc)(cl, (GLbyte*)req);
892706f2543Smrg	return Success;
893706f2543Smrg    }
894706f2543Smrg
895706f2543Smrg    cl->client->errorValue = req->vendorCode;
896706f2543Smrg    return __glXError(GLXUnsupportedPrivateRequest);
897706f2543Smrg}
898706f2543Smrg
899706f2543Smrg
900706f2543Smrgint __glXDispSwap_VendorPrivateWithReply(__GLXclientState *cl, GLbyte *pc)
901706f2543Smrg{
902706f2543Smrg    ClientPtr client = cl->client;
903706f2543Smrg    xGLXVendorPrivateWithReplyReq *req;
904706f2543Smrg    GLint vendorcode;
905706f2543Smrg    __GLXdispatchVendorPrivProcPtr proc;
906706f2543Smrg
907706f2543Smrg    __GLX_DECLARE_SWAP_VARIABLES;
908706f2543Smrg    REQUEST_AT_LEAST_SIZE(xGLXVendorPrivateWithReplyReq);
909706f2543Smrg
910706f2543Smrg    req = (xGLXVendorPrivateWithReplyReq *) pc;
911706f2543Smrg    __GLX_SWAP_SHORT(&req->length);
912706f2543Smrg    __GLX_SWAP_INT(&req->vendorCode);
913706f2543Smrg
914706f2543Smrg    vendorcode = req->vendorCode;
915706f2543Smrg
916706f2543Smrg    proc = (__GLXdispatchVendorPrivProcPtr)
917706f2543Smrg      __glXGetProtocolDecodeFunction(& VendorPriv_dispatch_info,
918706f2543Smrg				     vendorcode, 1);
919706f2543Smrg    if (proc != NULL) {
920706f2543Smrg	return (*proc)(cl, (GLbyte*)req);
921706f2543Smrg    }
922706f2543Smrg
923706f2543Smrg    cl->client->errorValue = req->vendorCode;
924706f2543Smrg    return __glXError(GLXUnsupportedPrivateRequest);
925706f2543Smrg}
926