1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3*4882a593Smuzhiyun * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Permission is hereby granted, free of charge, to any person obtaining a
6*4882a593Smuzhiyun * copy of this software and associated documentation files (the "Software"),
7*4882a593Smuzhiyun * to deal in the Software without restriction, including without limitation
8*4882a593Smuzhiyun * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*4882a593Smuzhiyun * and/or sell copies of the Software, and to permit persons to whom the
10*4882a593Smuzhiyun * Software is furnished to do so, subject to the following conditions:
11*4882a593Smuzhiyun *
12*4882a593Smuzhiyun * The above copyright notice including the dates of first publication and
13*4882a593Smuzhiyun * either this permission notice or a reference to
14*4882a593Smuzhiyun * http://oss.sgi.com/projects/FreeB/
15*4882a593Smuzhiyun * shall be included in all copies or substantial portions of the Software.
16*4882a593Smuzhiyun *
17*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18*4882a593Smuzhiyun * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20*4882a593Smuzhiyun * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21*4882a593Smuzhiyun * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
22*4882a593Smuzhiyun * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23*4882a593Smuzhiyun * SOFTWARE.
24*4882a593Smuzhiyun *
25*4882a593Smuzhiyun * Except as contained in this notice, the name of Silicon Graphics, Inc.
26*4882a593Smuzhiyun * shall not be used in advertising or otherwise to promote the sale, use or
27*4882a593Smuzhiyun * other dealings in this Software without prior written authorization from
28*4882a593Smuzhiyun * Silicon Graphics, Inc.
29*4882a593Smuzhiyun */
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun #include "glxserver.h"
32*4882a593Smuzhiyun #include "glxutil.h"
33*4882a593Smuzhiyun #include <g_disptab.h>
34*4882a593Smuzhiyun #include <pixmapstr.h>
35*4882a593Smuzhiyun #include <windowstr.h>
36*4882a593Smuzhiyun #include "unpack.h"
37*4882a593Smuzhiyun #include "glxcmds.h"
38*4882a593Smuzhiyun #include "glxext.h"
39*4882a593Smuzhiyun #include "glxvendor.h"
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun int __glXSwapGetFBConfigsSGIX(__GLXclientState * cl, GLbyte * pc);
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun /************************************************************************/
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun /*
46*4882a593Smuzhiyun ** Byteswapping versions of GLX commands. In most cases they just swap
47*4882a593Smuzhiyun ** the incoming arguments and then call the unswapped routine. For commands
48*4882a593Smuzhiyun ** that have replies, a separate swapping routine for the reply is provided;
49*4882a593Smuzhiyun ** it is called at the end of the unswapped routine.
50*4882a593Smuzhiyun */
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun int
__glXSwapCreateContext(__GLXclientState * cl,GLbyte * pc)53*4882a593Smuzhiyun __glXSwapCreateContext(__GLXclientState * cl, GLbyte * pc)
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun xGLXCreateContextReq *req = (xGLXCreateContextReq *) pc;
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
60*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
61*4882a593Smuzhiyun __GLX_SWAP_INT(&req->visual);
62*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
63*4882a593Smuzhiyun __GLX_SWAP_INT(&req->shareList);
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun return __glXCreateContext(cl, pc);
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun int
__glXSwapCreateNewContext(__GLXclientState * cl,GLbyte * pc)69*4882a593Smuzhiyun __glXSwapCreateNewContext(__GLXclientState * cl, GLbyte * pc)
70*4882a593Smuzhiyun {
71*4882a593Smuzhiyun xGLXCreateNewContextReq *req = (xGLXCreateNewContextReq *) pc;
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
76*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
77*4882a593Smuzhiyun __GLX_SWAP_INT(&req->fbconfig);
78*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
79*4882a593Smuzhiyun __GLX_SWAP_INT(&req->shareList);
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun return __glXCreateNewContext(cl, pc);
82*4882a593Smuzhiyun }
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun int
__glXSwapCreateContextWithConfigSGIX(__GLXclientState * cl,GLbyte * pc)85*4882a593Smuzhiyun __glXSwapCreateContextWithConfigSGIX(__GLXclientState * cl, GLbyte * pc)
86*4882a593Smuzhiyun {
87*4882a593Smuzhiyun xGLXCreateContextWithConfigSGIXReq *req =
88*4882a593Smuzhiyun (xGLXCreateContextWithConfigSGIXReq *) pc;
89*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
92*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
93*4882a593Smuzhiyun __GLX_SWAP_INT(&req->fbconfig);
94*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
95*4882a593Smuzhiyun __GLX_SWAP_INT(&req->shareList);
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun return __glXCreateContextWithConfigSGIX(cl, pc);
98*4882a593Smuzhiyun }
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun int
__glXSwapQueryMaxSwapBarriersSGIX(__GLXclientState * cl,GLbyte * pc)101*4882a593Smuzhiyun __glXSwapQueryMaxSwapBarriersSGIX(__GLXclientState * cl, GLbyte * pc)
102*4882a593Smuzhiyun {
103*4882a593Smuzhiyun xGLXQueryMaxSwapBarriersSGIXReq *req =
104*4882a593Smuzhiyun (xGLXQueryMaxSwapBarriersSGIXReq *) pc;
105*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
108*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun return __glXQueryMaxSwapBarriersSGIX(cl, pc);
111*4882a593Smuzhiyun }
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun int
__glXSwapBindSwapBarrierSGIX(__GLXclientState * cl,GLbyte * pc)114*4882a593Smuzhiyun __glXSwapBindSwapBarrierSGIX(__GLXclientState * cl, GLbyte * pc)
115*4882a593Smuzhiyun {
116*4882a593Smuzhiyun xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *) pc;
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
121*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
122*4882a593Smuzhiyun __GLX_SWAP_INT(&req->barrier);
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun return __glXBindSwapBarrierSGIX(cl, pc);
125*4882a593Smuzhiyun }
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun int
__glXSwapJoinSwapGroupSGIX(__GLXclientState * cl,GLbyte * pc)128*4882a593Smuzhiyun __glXSwapJoinSwapGroupSGIX(__GLXclientState * cl, GLbyte * pc)
129*4882a593Smuzhiyun {
130*4882a593Smuzhiyun xGLXJoinSwapGroupSGIXReq *req = (xGLXJoinSwapGroupSGIXReq *) pc;
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
135*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
136*4882a593Smuzhiyun __GLX_SWAP_INT(&req->member);
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun return __glXJoinSwapGroupSGIX(cl, pc);
139*4882a593Smuzhiyun }
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun int
__glXSwapDestroyContext(__GLXclientState * cl,GLbyte * pc)142*4882a593Smuzhiyun __glXSwapDestroyContext(__GLXclientState * cl, GLbyte * pc)
143*4882a593Smuzhiyun {
144*4882a593Smuzhiyun xGLXDestroyContextReq *req = (xGLXDestroyContextReq *) pc;
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
149*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun return __glXDestroyContext(cl, pc);
152*4882a593Smuzhiyun }
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun int
__glXSwapMakeCurrent(__GLXclientState * cl,GLbyte * pc)155*4882a593Smuzhiyun __glXSwapMakeCurrent(__GLXclientState * cl, GLbyte * pc)
156*4882a593Smuzhiyun {
157*4882a593Smuzhiyun xGLXMakeCurrentReq *req = (xGLXMakeCurrentReq *) pc;
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
162*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
163*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
164*4882a593Smuzhiyun __GLX_SWAP_INT(&req->oldContextTag);
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun return __glXMakeCurrent(cl, pc);
167*4882a593Smuzhiyun }
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun int
__glXSwapMakeContextCurrent(__GLXclientState * cl,GLbyte * pc)170*4882a593Smuzhiyun __glXSwapMakeContextCurrent(__GLXclientState * cl, GLbyte * pc)
171*4882a593Smuzhiyun {
172*4882a593Smuzhiyun xGLXMakeContextCurrentReq *req = (xGLXMakeContextCurrentReq *) pc;
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
177*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
178*4882a593Smuzhiyun __GLX_SWAP_INT(&req->readdrawable);
179*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
180*4882a593Smuzhiyun __GLX_SWAP_INT(&req->oldContextTag);
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun return __glXMakeContextCurrent(cl, pc);
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun int
__glXSwapMakeCurrentReadSGI(__GLXclientState * cl,GLbyte * pc)186*4882a593Smuzhiyun __glXSwapMakeCurrentReadSGI(__GLXclientState * cl, GLbyte * pc)
187*4882a593Smuzhiyun {
188*4882a593Smuzhiyun xGLXMakeCurrentReadSGIReq *req = (xGLXMakeCurrentReadSGIReq *) pc;
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
193*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
194*4882a593Smuzhiyun __GLX_SWAP_INT(&req->readable);
195*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
196*4882a593Smuzhiyun __GLX_SWAP_INT(&req->oldContextTag);
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun return __glXMakeCurrentReadSGI(cl, pc);
199*4882a593Smuzhiyun }
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun int
__glXSwapIsDirect(__GLXclientState * cl,GLbyte * pc)202*4882a593Smuzhiyun __glXSwapIsDirect(__GLXclientState * cl, GLbyte * pc)
203*4882a593Smuzhiyun {
204*4882a593Smuzhiyun xGLXIsDirectReq *req = (xGLXIsDirectReq *) pc;
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
209*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun return __glXIsDirect(cl, pc);
212*4882a593Smuzhiyun }
213*4882a593Smuzhiyun
214*4882a593Smuzhiyun int
__glXSwapQueryVersion(__GLXclientState * cl,GLbyte * pc)215*4882a593Smuzhiyun __glXSwapQueryVersion(__GLXclientState * cl, GLbyte * pc)
216*4882a593Smuzhiyun {
217*4882a593Smuzhiyun xGLXQueryVersionReq *req = (xGLXQueryVersionReq *) pc;
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
222*4882a593Smuzhiyun __GLX_SWAP_INT(&req->majorVersion);
223*4882a593Smuzhiyun __GLX_SWAP_INT(&req->minorVersion);
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun return __glXQueryVersion(cl, pc);
226*4882a593Smuzhiyun }
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun int
__glXSwapWaitGL(__GLXclientState * cl,GLbyte * pc)229*4882a593Smuzhiyun __glXSwapWaitGL(__GLXclientState * cl, GLbyte * pc)
230*4882a593Smuzhiyun {
231*4882a593Smuzhiyun xGLXWaitGLReq *req = (xGLXWaitGLReq *) pc;
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
236*4882a593Smuzhiyun __GLX_SWAP_INT(&req->contextTag);
237*4882a593Smuzhiyun
238*4882a593Smuzhiyun return __glXWaitGL(cl, pc);
239*4882a593Smuzhiyun }
240*4882a593Smuzhiyun
241*4882a593Smuzhiyun int
__glXSwapWaitX(__GLXclientState * cl,GLbyte * pc)242*4882a593Smuzhiyun __glXSwapWaitX(__GLXclientState * cl, GLbyte * pc)
243*4882a593Smuzhiyun {
244*4882a593Smuzhiyun xGLXWaitXReq *req = (xGLXWaitXReq *) pc;
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
249*4882a593Smuzhiyun __GLX_SWAP_INT(&req->contextTag);
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun return __glXWaitX(cl, pc);
252*4882a593Smuzhiyun }
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun int
__glXSwapCopyContext(__GLXclientState * cl,GLbyte * pc)255*4882a593Smuzhiyun __glXSwapCopyContext(__GLXclientState * cl, GLbyte * pc)
256*4882a593Smuzhiyun {
257*4882a593Smuzhiyun xGLXCopyContextReq *req = (xGLXCopyContextReq *) pc;
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
262*4882a593Smuzhiyun __GLX_SWAP_INT(&req->source);
263*4882a593Smuzhiyun __GLX_SWAP_INT(&req->dest);
264*4882a593Smuzhiyun __GLX_SWAP_INT(&req->mask);
265*4882a593Smuzhiyun
266*4882a593Smuzhiyun return __glXCopyContext(cl, pc);
267*4882a593Smuzhiyun }
268*4882a593Smuzhiyun
269*4882a593Smuzhiyun int
__glXSwapGetVisualConfigs(__GLXclientState * cl,GLbyte * pc)270*4882a593Smuzhiyun __glXSwapGetVisualConfigs(__GLXclientState * cl, GLbyte * pc)
271*4882a593Smuzhiyun {
272*4882a593Smuzhiyun ClientPtr client = cl->client;
273*4882a593Smuzhiyun xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) pc;
274*4882a593Smuzhiyun xGLXGetVisualConfigsReply reply;
275*4882a593Smuzhiyun __GLXscreenInfo *pGlxScreen;
276*4882a593Smuzhiyun __GLXvisualConfig *pGlxVisual;
277*4882a593Smuzhiyun CARD32 buf[__GLX_TOTAL_CONFIG];
278*4882a593Smuzhiyun unsigned int screen;
279*4882a593Smuzhiyun int i, p;
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
282*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
285*4882a593Smuzhiyun screen = req->screen;
286*4882a593Smuzhiyun if (screen >= screenInfo.numScreens) {
287*4882a593Smuzhiyun /* The client library must send a valid screen number. */
288*4882a593Smuzhiyun client->errorValue = screen;
289*4882a593Smuzhiyun return BadValue;
290*4882a593Smuzhiyun }
291*4882a593Smuzhiyun pGlxScreen = &__glXActiveScreens[screen];
292*4882a593Smuzhiyun
293*4882a593Smuzhiyun reply = (xGLXGetVisualConfigsReply) {
294*4882a593Smuzhiyun .type = X_Reply,
295*4882a593Smuzhiyun .sequenceNumber = client->sequence,
296*4882a593Smuzhiyun .length = (pGlxScreen->numGLXVisuals * __GLX_SIZE_CARD32 *
297*4882a593Smuzhiyun __GLX_TOTAL_CONFIG) >> 2,
298*4882a593Smuzhiyun .numVisuals = pGlxScreen->numGLXVisuals,
299*4882a593Smuzhiyun .numProps = __GLX_TOTAL_CONFIG
300*4882a593Smuzhiyun };
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply.sequenceNumber);
303*4882a593Smuzhiyun __GLX_SWAP_INT(&reply.length);
304*4882a593Smuzhiyun __GLX_SWAP_INT(&reply.numVisuals);
305*4882a593Smuzhiyun __GLX_SWAP_INT(&reply.numProps);
306*4882a593Smuzhiyun WriteToClient(client, sz_xGLXGetVisualConfigsReply, &reply);
307*4882a593Smuzhiyun
308*4882a593Smuzhiyun for (i = 0; i < pGlxScreen->numVisuals; i++) {
309*4882a593Smuzhiyun pGlxVisual = &pGlxScreen->pGlxVisual[i];
310*4882a593Smuzhiyun if (!pGlxScreen->isGLXvis[i] || pGlxVisual->vid == 0) {
311*4882a593Smuzhiyun /* not a usable visual */
312*4882a593Smuzhiyun continue;
313*4882a593Smuzhiyun }
314*4882a593Smuzhiyun p = 0;
315*4882a593Smuzhiyun buf[p++] = pGlxVisual->vid;
316*4882a593Smuzhiyun buf[p++] = pGlxVisual->class;
317*4882a593Smuzhiyun buf[p++] = pGlxVisual->rgba;
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun buf[p++] = pGlxVisual->redSize;
320*4882a593Smuzhiyun buf[p++] = pGlxVisual->greenSize;
321*4882a593Smuzhiyun buf[p++] = pGlxVisual->blueSize;
322*4882a593Smuzhiyun buf[p++] = pGlxVisual->alphaSize;
323*4882a593Smuzhiyun buf[p++] = pGlxVisual->accumRedSize;
324*4882a593Smuzhiyun buf[p++] = pGlxVisual->accumGreenSize;
325*4882a593Smuzhiyun buf[p++] = pGlxVisual->accumBlueSize;
326*4882a593Smuzhiyun buf[p++] = pGlxVisual->accumAlphaSize;
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun buf[p++] = pGlxVisual->doubleBuffer;
329*4882a593Smuzhiyun buf[p++] = pGlxVisual->stereo;
330*4882a593Smuzhiyun
331*4882a593Smuzhiyun buf[p++] = pGlxVisual->bufferSize;
332*4882a593Smuzhiyun buf[p++] = pGlxVisual->depthSize;
333*4882a593Smuzhiyun buf[p++] = pGlxVisual->stencilSize;
334*4882a593Smuzhiyun buf[p++] = pGlxVisual->auxBuffers;
335*4882a593Smuzhiyun buf[p++] = pGlxVisual->level;
336*4882a593Smuzhiyun /*
337*4882a593Smuzhiyun ** Add token/value pairs for extensions.
338*4882a593Smuzhiyun */
339*4882a593Smuzhiyun buf[p++] = GLX_VISUAL_CAVEAT_EXT;
340*4882a593Smuzhiyun buf[p++] = pGlxVisual->visualRating;
341*4882a593Smuzhiyun buf[p++] = GLX_TRANSPARENT_TYPE_EXT;
342*4882a593Smuzhiyun buf[p++] = pGlxVisual->transparentPixel;
343*4882a593Smuzhiyun buf[p++] = GLX_TRANSPARENT_RED_VALUE_EXT;
344*4882a593Smuzhiyun buf[p++] = pGlxVisual->transparentRed;
345*4882a593Smuzhiyun buf[p++] = GLX_TRANSPARENT_GREEN_VALUE_EXT;
346*4882a593Smuzhiyun buf[p++] = pGlxVisual->transparentGreen;
347*4882a593Smuzhiyun buf[p++] = GLX_TRANSPARENT_BLUE_VALUE_EXT;
348*4882a593Smuzhiyun buf[p++] = pGlxVisual->transparentBlue;
349*4882a593Smuzhiyun buf[p++] = GLX_TRANSPARENT_ALPHA_VALUE_EXT;
350*4882a593Smuzhiyun buf[p++] = pGlxVisual->transparentAlpha;
351*4882a593Smuzhiyun buf[p++] = GLX_TRANSPARENT_INDEX_VALUE_EXT;
352*4882a593Smuzhiyun buf[p++] = pGlxVisual->transparentIndex;
353*4882a593Smuzhiyun
354*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY(buf, __GLX_TOTAL_CONFIG);
355*4882a593Smuzhiyun WriteToClient(client, __GLX_SIZE_CARD32 * __GLX_TOTAL_CONFIG, buf);
356*4882a593Smuzhiyun }
357*4882a593Smuzhiyun return Success;
358*4882a593Smuzhiyun }
359*4882a593Smuzhiyun
360*4882a593Smuzhiyun int
__glXSwapCreateGLXPixmap(__GLXclientState * cl,GLbyte * pc)361*4882a593Smuzhiyun __glXSwapCreateGLXPixmap(__GLXclientState * cl, GLbyte * pc)
362*4882a593Smuzhiyun {
363*4882a593Smuzhiyun xGLXCreateGLXPixmapReq *req = (xGLXCreateGLXPixmapReq *) pc;
364*4882a593Smuzhiyun
365*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
366*4882a593Smuzhiyun
367*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
368*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
369*4882a593Smuzhiyun __GLX_SWAP_INT(&req->visual);
370*4882a593Smuzhiyun __GLX_SWAP_INT(&req->pixmap);
371*4882a593Smuzhiyun __GLX_SWAP_INT(&req->glxpixmap);
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun return __glXCreateGLXPixmap(cl, pc);
374*4882a593Smuzhiyun }
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun int
__glXSwapCreatePixmap(__GLXclientState * cl,GLbyte * pc)377*4882a593Smuzhiyun __glXSwapCreatePixmap(__GLXclientState * cl, GLbyte * pc)
378*4882a593Smuzhiyun {
379*4882a593Smuzhiyun xGLXCreatePixmapReq *req = (xGLXCreatePixmapReq *) pc;
380*4882a593Smuzhiyun
381*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
382*4882a593Smuzhiyun
383*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
384*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
385*4882a593Smuzhiyun __GLX_SWAP_INT(&req->fbconfig);
386*4882a593Smuzhiyun __GLX_SWAP_INT(&req->pixmap);
387*4882a593Smuzhiyun __GLX_SWAP_INT(&req->glxpixmap);
388*4882a593Smuzhiyun __GLX_SWAP_INT(&req->numAttribs);
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun return __glXCreatePixmap(cl, pc);
391*4882a593Smuzhiyun }
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun int
__glXSwapDestroyGLXPixmap(__GLXclientState * cl,GLbyte * pc)394*4882a593Smuzhiyun __glXSwapDestroyGLXPixmap(__GLXclientState * cl, GLbyte * pc)
395*4882a593Smuzhiyun {
396*4882a593Smuzhiyun xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
397*4882a593Smuzhiyun
398*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
401*4882a593Smuzhiyun __GLX_SWAP_INT(&req->glxpixmap);
402*4882a593Smuzhiyun
403*4882a593Smuzhiyun return __glXDestroyGLXPixmap(cl, pc);
404*4882a593Smuzhiyun }
405*4882a593Smuzhiyun
406*4882a593Smuzhiyun int
__glXSwapSwapBuffers(__GLXclientState * cl,GLbyte * pc)407*4882a593Smuzhiyun __glXSwapSwapBuffers(__GLXclientState * cl, GLbyte * pc)
408*4882a593Smuzhiyun {
409*4882a593Smuzhiyun xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc;
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
412*4882a593Smuzhiyun
413*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
414*4882a593Smuzhiyun __GLX_SWAP_INT(&req->contextTag);
415*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
416*4882a593Smuzhiyun
417*4882a593Smuzhiyun return __glXSwapBuffers(cl, pc);
418*4882a593Smuzhiyun }
419*4882a593Smuzhiyun
420*4882a593Smuzhiyun int
__glXSwapUseXFont(__GLXclientState * cl,GLbyte * pc)421*4882a593Smuzhiyun __glXSwapUseXFont(__GLXclientState * cl, GLbyte * pc)
422*4882a593Smuzhiyun {
423*4882a593Smuzhiyun xGLXUseXFontReq *req = (xGLXUseXFontReq *) pc;
424*4882a593Smuzhiyun
425*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
428*4882a593Smuzhiyun __GLX_SWAP_INT(&req->contextTag);
429*4882a593Smuzhiyun __GLX_SWAP_INT(&req->font);
430*4882a593Smuzhiyun __GLX_SWAP_INT(&req->first);
431*4882a593Smuzhiyun __GLX_SWAP_INT(&req->count);
432*4882a593Smuzhiyun __GLX_SWAP_INT(&req->listBase);
433*4882a593Smuzhiyun
434*4882a593Smuzhiyun return __glXUseXFont(cl, pc);
435*4882a593Smuzhiyun }
436*4882a593Smuzhiyun
437*4882a593Smuzhiyun int
__glXSwapQueryExtensionsString(__GLXclientState * cl,GLbyte * pc)438*4882a593Smuzhiyun __glXSwapQueryExtensionsString(__GLXclientState * cl, GLbyte * pc)
439*4882a593Smuzhiyun {
440*4882a593Smuzhiyun xGLXQueryExtensionsStringReq *req = (xGLXQueryExtensionsStringReq *) pc;
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
443*4882a593Smuzhiyun
444*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
445*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
446*4882a593Smuzhiyun
447*4882a593Smuzhiyun return __glXQueryExtensionsString(cl, pc);
448*4882a593Smuzhiyun }
449*4882a593Smuzhiyun
450*4882a593Smuzhiyun int
__glXSwapQueryServerString(__GLXclientState * cl,GLbyte * pc)451*4882a593Smuzhiyun __glXSwapQueryServerString(__GLXclientState * cl, GLbyte * pc)
452*4882a593Smuzhiyun {
453*4882a593Smuzhiyun xGLXQueryServerStringReq *req = (xGLXQueryServerStringReq *) pc;
454*4882a593Smuzhiyun
455*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
456*4882a593Smuzhiyun
457*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
458*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
459*4882a593Smuzhiyun __GLX_SWAP_INT(&req->name);
460*4882a593Smuzhiyun
461*4882a593Smuzhiyun return __glXQueryServerString(cl, pc);
462*4882a593Smuzhiyun }
463*4882a593Smuzhiyun
464*4882a593Smuzhiyun int
__glXSwapClientInfo(__GLXclientState * cl,GLbyte * pc)465*4882a593Smuzhiyun __glXSwapClientInfo(__GLXclientState * cl, GLbyte * pc)
466*4882a593Smuzhiyun {
467*4882a593Smuzhiyun xGLXClientInfoReq *req = (xGLXClientInfoReq *) pc;
468*4882a593Smuzhiyun
469*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
470*4882a593Smuzhiyun
471*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
472*4882a593Smuzhiyun __GLX_SWAP_INT(&req->major);
473*4882a593Smuzhiyun __GLX_SWAP_INT(&req->minor);
474*4882a593Smuzhiyun __GLX_SWAP_INT(&req->numbytes);
475*4882a593Smuzhiyun
476*4882a593Smuzhiyun return __glXClientInfo(cl, pc);
477*4882a593Smuzhiyun }
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun int
__glXSwapQueryContextInfoEXT(__GLXclientState * cl,char * pc)480*4882a593Smuzhiyun __glXSwapQueryContextInfoEXT(__GLXclientState * cl, char *pc)
481*4882a593Smuzhiyun {
482*4882a593Smuzhiyun xGLXQueryContextInfoEXTReq *req = (xGLXQueryContextInfoEXTReq *) pc;
483*4882a593Smuzhiyun
484*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
485*4882a593Smuzhiyun
486*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
487*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
488*4882a593Smuzhiyun
489*4882a593Smuzhiyun return __glXQueryContextInfoEXT(cl, (GLbyte *) pc);
490*4882a593Smuzhiyun }
491*4882a593Smuzhiyun
492*4882a593Smuzhiyun /************************************************************************/
493*4882a593Smuzhiyun
494*4882a593Smuzhiyun /*
495*4882a593Smuzhiyun ** Swap replies.
496*4882a593Smuzhiyun */
497*4882a593Smuzhiyun
498*4882a593Smuzhiyun void
__glXSwapMakeCurrentReply(ClientPtr client,xGLXMakeCurrentReadSGIReply * reply)499*4882a593Smuzhiyun __glXSwapMakeCurrentReply(ClientPtr client, xGLXMakeCurrentReadSGIReply * reply)
500*4882a593Smuzhiyun {
501*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
502*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
503*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
504*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->contextTag);
505*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->writeVid);
506*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->writeType);
507*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->readVid);
508*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->readType);
509*4882a593Smuzhiyun WriteToClient(client, sz_xGLXMakeCurrentReadSGIReply, reply);
510*4882a593Smuzhiyun }
511*4882a593Smuzhiyun
512*4882a593Smuzhiyun void
__glXSwapIsDirectReply(ClientPtr client,xGLXIsDirectReply * reply)513*4882a593Smuzhiyun __glXSwapIsDirectReply(ClientPtr client, xGLXIsDirectReply * reply)
514*4882a593Smuzhiyun {
515*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
516*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
517*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
518*4882a593Smuzhiyun WriteToClient(client, sz_xGLXIsDirectReply, reply);
519*4882a593Smuzhiyun }
520*4882a593Smuzhiyun
521*4882a593Smuzhiyun void
__glXSwapQueryVersionReply(ClientPtr client,xGLXQueryVersionReply * reply)522*4882a593Smuzhiyun __glXSwapQueryVersionReply(ClientPtr client, xGLXQueryVersionReply * reply)
523*4882a593Smuzhiyun {
524*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
525*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
526*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
527*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->majorVersion);
528*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->minorVersion);
529*4882a593Smuzhiyun WriteToClient(client, sz_xGLXQueryVersionReply, reply);
530*4882a593Smuzhiyun }
531*4882a593Smuzhiyun
532*4882a593Smuzhiyun void
glxSwapQueryExtensionsStringReply(ClientPtr client,xGLXQueryExtensionsStringReply * reply,char * buf)533*4882a593Smuzhiyun glxSwapQueryExtensionsStringReply(ClientPtr client,
534*4882a593Smuzhiyun xGLXQueryExtensionsStringReply * reply,
535*4882a593Smuzhiyun char *buf)
536*4882a593Smuzhiyun {
537*4882a593Smuzhiyun int length = reply->length;
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
540*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
541*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
542*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
543*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->n);
544*4882a593Smuzhiyun WriteToClient(client, sz_xGLXQueryExtensionsStringReply, reply);
545*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY((int *) buf, length);
546*4882a593Smuzhiyun WriteToClient(client, length << 2, buf);
547*4882a593Smuzhiyun }
548*4882a593Smuzhiyun
549*4882a593Smuzhiyun void
glxSwapQueryServerStringReply(ClientPtr client,xGLXQueryServerStringReply * reply,char * buf)550*4882a593Smuzhiyun glxSwapQueryServerStringReply(ClientPtr client,
551*4882a593Smuzhiyun xGLXQueryServerStringReply * reply, char *buf)
552*4882a593Smuzhiyun {
553*4882a593Smuzhiyun int length = reply->length;
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
556*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
557*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
558*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->n);
559*4882a593Smuzhiyun WriteToClient(client, sz_xGLXQueryServerStringReply, reply);
560*4882a593Smuzhiyun /** no swap is needed for an array of chars **/
561*4882a593Smuzhiyun /* __GLX_SWAP_INT_ARRAY((int *)buf, length); */
562*4882a593Smuzhiyun WriteToClient(client, length << 2, buf);
563*4882a593Smuzhiyun }
564*4882a593Smuzhiyun
565*4882a593Smuzhiyun void
__glXSwapQueryContextInfoEXTReply(ClientPtr client,xGLXQueryContextInfoEXTReply * reply,int * buf)566*4882a593Smuzhiyun __glXSwapQueryContextInfoEXTReply(ClientPtr client,
567*4882a593Smuzhiyun xGLXQueryContextInfoEXTReply * reply,
568*4882a593Smuzhiyun int *buf)
569*4882a593Smuzhiyun {
570*4882a593Smuzhiyun int length = reply->length;
571*4882a593Smuzhiyun
572*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
573*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
574*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
575*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
576*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->n);
577*4882a593Smuzhiyun WriteToClient(client, sz_xGLXQueryContextInfoEXTReply, reply);
578*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY((int *) buf, length);
579*4882a593Smuzhiyun WriteToClient(client, length << 2, buf);
580*4882a593Smuzhiyun }
581*4882a593Smuzhiyun
582*4882a593Smuzhiyun void
__glXSwapQueryContextReply(ClientPtr client,xGLXQueryContextReply * reply,int * buf)583*4882a593Smuzhiyun __glXSwapQueryContextReply(ClientPtr client,
584*4882a593Smuzhiyun xGLXQueryContextReply * reply, int *buf)
585*4882a593Smuzhiyun {
586*4882a593Smuzhiyun int length = reply->length;
587*4882a593Smuzhiyun
588*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
589*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
590*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
591*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
592*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->n);
593*4882a593Smuzhiyun WriteToClient(client, sz_xGLXQueryContextReply, reply);
594*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY((int *) buf, length);
595*4882a593Smuzhiyun WriteToClient(client, length << 2, buf);
596*4882a593Smuzhiyun }
597*4882a593Smuzhiyun
598*4882a593Smuzhiyun void
__glXSwapGetDrawableAttributesReply(ClientPtr client,xGLXGetDrawableAttributesReply * reply,int * buf)599*4882a593Smuzhiyun __glXSwapGetDrawableAttributesReply(ClientPtr client,
600*4882a593Smuzhiyun xGLXGetDrawableAttributesReply * reply,
601*4882a593Smuzhiyun int *buf)
602*4882a593Smuzhiyun {
603*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
604*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
605*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
606*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
607*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->numAttribs);
608*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY(buf, reply->length);
609*4882a593Smuzhiyun WriteToClient(client, sz_xGLXGetDrawableAttributesReply, reply);
610*4882a593Smuzhiyun WriteToClient(client, reply->length << 2, buf);
611*4882a593Smuzhiyun }
612*4882a593Smuzhiyun
613*4882a593Smuzhiyun void
__glXSwapQueryMaxSwapBarriersSGIXReply(ClientPtr client,xGLXQueryMaxSwapBarriersSGIXReply * reply)614*4882a593Smuzhiyun __glXSwapQueryMaxSwapBarriersSGIXReply(ClientPtr client,
615*4882a593Smuzhiyun xGLXQueryMaxSwapBarriersSGIXReply *
616*4882a593Smuzhiyun reply)
617*4882a593Smuzhiyun {
618*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
619*4882a593Smuzhiyun __GLX_SWAP_SHORT(&reply->sequenceNumber);
620*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->length);
621*4882a593Smuzhiyun __GLX_SWAP_INT(&reply->max);
622*4882a593Smuzhiyun WriteToClient(client, sz_xGLXQueryMaxSwapBarriersSGIXReply, reply);
623*4882a593Smuzhiyun }
624*4882a593Smuzhiyun
625*4882a593Smuzhiyun /************************************************************************/
626*4882a593Smuzhiyun
627*4882a593Smuzhiyun /*
628*4882a593Smuzhiyun ** Render and Renderlarge are not in the GLX API. They are used by the GLX
629*4882a593Smuzhiyun ** client library to send batches of GL rendering commands.
630*4882a593Smuzhiyun */
631*4882a593Smuzhiyun
632*4882a593Smuzhiyun int
__glXSwapRender(__GLXclientState * cl,GLbyte * pc)633*4882a593Smuzhiyun __glXSwapRender(__GLXclientState * cl, GLbyte * pc)
634*4882a593Smuzhiyun {
635*4882a593Smuzhiyun xGLXRenderReq *req;
636*4882a593Smuzhiyun int left;
637*4882a593Smuzhiyun __GLXrenderHeader *hdr;
638*4882a593Smuzhiyun ClientPtr client = cl->client;
639*4882a593Smuzhiyun
640*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
641*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
642*4882a593Smuzhiyun
643*4882a593Smuzhiyun /*
644*4882a593Smuzhiyun ** NOTE: much of this code also appears in the nonswapping version of this
645*4882a593Smuzhiyun ** routine, __glXRender(). Any changes made here should also be
646*4882a593Smuzhiyun ** duplicated there.
647*4882a593Smuzhiyun */
648*4882a593Smuzhiyun
649*4882a593Smuzhiyun req = (xGLXRenderReq *) pc;
650*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
651*4882a593Smuzhiyun __GLX_SWAP_INT(&req->contextTag);
652*4882a593Smuzhiyun
653*4882a593Smuzhiyun pc += sz_xGLXRenderReq;
654*4882a593Smuzhiyun left = (req->length << 2) - sz_xGLXRenderReq;
655*4882a593Smuzhiyun while (left > 0) {
656*4882a593Smuzhiyun void (*proc) (GLbyte *);
657*4882a593Smuzhiyun CARD16 opcode;
658*4882a593Smuzhiyun
659*4882a593Smuzhiyun /*
660*4882a593Smuzhiyun ** Verify that the header length and the overall length agree.
661*4882a593Smuzhiyun ** Also, each command must be word aligned.
662*4882a593Smuzhiyun */
663*4882a593Smuzhiyun hdr = (__GLXrenderHeader *) pc;
664*4882a593Smuzhiyun __GLX_SWAP_SHORT(&hdr->length);
665*4882a593Smuzhiyun __GLX_SWAP_SHORT(&hdr->opcode);
666*4882a593Smuzhiyun
667*4882a593Smuzhiyun /*
668*4882a593Smuzhiyun * call the command procedure to swap any arguments
669*4882a593Smuzhiyun */
670*4882a593Smuzhiyun opcode = hdr->opcode;
671*4882a593Smuzhiyun if ((opcode >= __GLX_MIN_RENDER_OPCODE) &&
672*4882a593Smuzhiyun (opcode <= __GLX_MAX_RENDER_OPCODE)) {
673*4882a593Smuzhiyun proc = __glXSwapRenderTable[opcode];
674*4882a593Smuzhiyun #if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
675*4882a593Smuzhiyun }
676*4882a593Smuzhiyun else if ((opcode >= __GLX_MIN_RENDER_OPCODE_EXT) &&
677*4882a593Smuzhiyun (opcode <= __GLX_MAX_RENDER_OPCODE_EXT)) {
678*4882a593Smuzhiyun int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
679*4882a593Smuzhiyun __GLXRenderSwapInfo *info = &__glXSwapRenderTable_EXT[index];
680*4882a593Smuzhiyun
681*4882a593Smuzhiyun if (info->swapfunc) {
682*4882a593Smuzhiyun proc = info->swapfunc;
683*4882a593Smuzhiyun }
684*4882a593Smuzhiyun else {
685*4882a593Smuzhiyun proc = NULL;
686*4882a593Smuzhiyun if (info->elem_size == 4 && info->nelems > 0) {
687*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY((int *) (pc + __GLX_RENDER_HDR_SIZE),
688*4882a593Smuzhiyun info->nelems);
689*4882a593Smuzhiyun }
690*4882a593Smuzhiyun else if (info->elem_size == 2 && info->nelems > 0) {
691*4882a593Smuzhiyun __GLX_SWAP_SHORT_ARRAY((short *) (pc +
692*4882a593Smuzhiyun __GLX_RENDER_HDR_SIZE),
693*4882a593Smuzhiyun info->nelems);
694*4882a593Smuzhiyun }
695*4882a593Smuzhiyun else if (info->elem_size == 8 && info->nelems > 0) {
696*4882a593Smuzhiyun __GLX_SWAP_DOUBLE_ARRAY((double *) (pc +
697*4882a593Smuzhiyun __GLX_RENDER_HDR_SIZE),
698*4882a593Smuzhiyun info->nelems);
699*4882a593Smuzhiyun }
700*4882a593Smuzhiyun }
701*4882a593Smuzhiyun #endif /* __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT */
702*4882a593Smuzhiyun }
703*4882a593Smuzhiyun else {
704*4882a593Smuzhiyun client->errorValue = 0;
705*4882a593Smuzhiyun return __glXBadRenderRequest;
706*4882a593Smuzhiyun }
707*4882a593Smuzhiyun
708*4882a593Smuzhiyun if (proc != NULL)
709*4882a593Smuzhiyun (*proc) (pc + __GLX_RENDER_HDR_SIZE);
710*4882a593Smuzhiyun
711*4882a593Smuzhiyun /*
712*4882a593Smuzhiyun * proceed to the next command
713*4882a593Smuzhiyun */
714*4882a593Smuzhiyun pc += hdr->length;
715*4882a593Smuzhiyun left -= hdr->length;
716*4882a593Smuzhiyun }
717*4882a593Smuzhiyun
718*4882a593Smuzhiyun return __glXRender(cl, (GLbyte *) req);
719*4882a593Smuzhiyun }
720*4882a593Smuzhiyun
721*4882a593Smuzhiyun /*
722*4882a593Smuzhiyun ** Execute a large rendering request (one that spans multiple X requests).
723*4882a593Smuzhiyun */
724*4882a593Smuzhiyun int
__glXSwapRenderLarge(__GLXclientState * cl,GLbyte * pc)725*4882a593Smuzhiyun __glXSwapRenderLarge(__GLXclientState * cl, GLbyte * pc)
726*4882a593Smuzhiyun {
727*4882a593Smuzhiyun ClientPtr client = cl->client;
728*4882a593Smuzhiyun xGLXRenderLargeReq *req;
729*4882a593Smuzhiyun __GLXrenderLargeHeader *hdr;
730*4882a593Smuzhiyun
731*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
732*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
733*4882a593Smuzhiyun
734*4882a593Smuzhiyun req = (xGLXRenderLargeReq *) pc;
735*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
736*4882a593Smuzhiyun __GLX_SWAP_INT(&req->contextTag);
737*4882a593Smuzhiyun __GLX_SWAP_INT(&req->dataBytes);
738*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->requestNumber);
739*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->requestTotal);
740*4882a593Smuzhiyun
741*4882a593Smuzhiyun pc += sz_xGLXRenderLargeReq;
742*4882a593Smuzhiyun
743*4882a593Smuzhiyun if (req->requestNumber == 1) {
744*4882a593Smuzhiyun void (*proc) (GLbyte *) = NULL;
745*4882a593Smuzhiyun __GLXRenderSwapInfo *info = NULL;
746*4882a593Smuzhiyun CARD16 opcode;
747*4882a593Smuzhiyun
748*4882a593Smuzhiyun hdr = (__GLXrenderLargeHeader *) pc;
749*4882a593Smuzhiyun __GLX_SWAP_INT(&hdr->length);
750*4882a593Smuzhiyun __GLX_SWAP_INT(&hdr->opcode);
751*4882a593Smuzhiyun
752*4882a593Smuzhiyun /*
753*4882a593Smuzhiyun * call the command procedure to swap any arguments
754*4882a593Smuzhiyun * Note that we are assuming that all arguments that needs to be
755*4882a593Smuzhiyun * swaped are on the first req only !
756*4882a593Smuzhiyun */
757*4882a593Smuzhiyun opcode = hdr->opcode;
758*4882a593Smuzhiyun if ((opcode >= __GLX_MIN_RENDER_OPCODE) &&
759*4882a593Smuzhiyun (opcode <= __GLX_MAX_RENDER_OPCODE)) {
760*4882a593Smuzhiyun proc = __glXSwapRenderTable[opcode];
761*4882a593Smuzhiyun #if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
762*4882a593Smuzhiyun }
763*4882a593Smuzhiyun else if ((opcode >= __GLX_MIN_RENDER_OPCODE_EXT) &&
764*4882a593Smuzhiyun (opcode <= __GLX_MAX_RENDER_OPCODE_EXT)) {
765*4882a593Smuzhiyun int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
766*4882a593Smuzhiyun
767*4882a593Smuzhiyun info = &__glXSwapRenderTable_EXT[index];
768*4882a593Smuzhiyun if (info->swapfunc) {
769*4882a593Smuzhiyun proc = info->swapfunc;
770*4882a593Smuzhiyun }
771*4882a593Smuzhiyun #endif /* __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT */
772*4882a593Smuzhiyun }
773*4882a593Smuzhiyun else {
774*4882a593Smuzhiyun client->errorValue = 0;
775*4882a593Smuzhiyun cl->largeCmdRequestsTotal = 0;
776*4882a593Smuzhiyun return __glXBadLargeRequest;
777*4882a593Smuzhiyun }
778*4882a593Smuzhiyun
779*4882a593Smuzhiyun /*
780*4882a593Smuzhiyun ** Make enough space in the buffer, then copy the entire request.
781*4882a593Smuzhiyun */
782*4882a593Smuzhiyun if (cl->largeCmdBufSize < hdr->length) {
783*4882a593Smuzhiyun if (!cl->largeCmdBuf) {
784*4882a593Smuzhiyun cl->largeCmdBuf = (GLbyte *) malloc(hdr->length);
785*4882a593Smuzhiyun }
786*4882a593Smuzhiyun else {
787*4882a593Smuzhiyun cl->largeCmdBuf =
788*4882a593Smuzhiyun (GLbyte *) realloc(cl->largeCmdBuf, hdr->length);
789*4882a593Smuzhiyun }
790*4882a593Smuzhiyun if (!cl->largeCmdBuf) {
791*4882a593Smuzhiyun cl->largeCmdRequestsTotal = 0;
792*4882a593Smuzhiyun return BadAlloc;
793*4882a593Smuzhiyun }
794*4882a593Smuzhiyun cl->largeCmdBufSize = hdr->length;
795*4882a593Smuzhiyun }
796*4882a593Smuzhiyun memcpy(cl->largeCmdBuf, pc, req->dataBytes);
797*4882a593Smuzhiyun
798*4882a593Smuzhiyun cl->largeCmdBytesSoFar = req->dataBytes;
799*4882a593Smuzhiyun cl->largeCmdBytesTotal = hdr->length;
800*4882a593Smuzhiyun cl->largeCmdRequestsSoFar = 1;
801*4882a593Smuzhiyun cl->largeCmdRequestsTotal = req->requestTotal;
802*4882a593Smuzhiyun cl->largeCmdRequestsSwapProc = proc;
803*4882a593Smuzhiyun cl->largeCmdMaxReqDataSize = req->dataBytes;
804*4882a593Smuzhiyun cl->largeCmdRequestsSwap_info = info;
805*4882a593Smuzhiyun
806*4882a593Smuzhiyun return Success;
807*4882a593Smuzhiyun
808*4882a593Smuzhiyun }
809*4882a593Smuzhiyun else if (req->requestNumber < cl->largeCmdRequestsTotal) {
810*4882a593Smuzhiyun /*
811*4882a593Smuzhiyun * This is not the first nor last request - just copy the data
812*4882a593Smuzhiyun */
813*4882a593Smuzhiyun if (cl->largeCmdBytesSoFar + req->dataBytes > cl->largeCmdBytesTotal) {
814*4882a593Smuzhiyun cl->largeCmdRequestsTotal = 0;
815*4882a593Smuzhiyun return __glXBadLargeRequest;
816*4882a593Smuzhiyun }
817*4882a593Smuzhiyun
818*4882a593Smuzhiyun memcpy(cl->largeCmdBuf + cl->largeCmdBytesSoFar, pc, req->dataBytes);
819*4882a593Smuzhiyun
820*4882a593Smuzhiyun cl->largeCmdBytesSoFar += req->dataBytes;
821*4882a593Smuzhiyun
822*4882a593Smuzhiyun if (req->dataBytes > cl->largeCmdMaxReqDataSize)
823*4882a593Smuzhiyun cl->largeCmdMaxReqDataSize = req->dataBytes;
824*4882a593Smuzhiyun
825*4882a593Smuzhiyun return Success;
826*4882a593Smuzhiyun }
827*4882a593Smuzhiyun else if (req->requestNumber == cl->largeCmdRequestsTotal) {
828*4882a593Smuzhiyun /*
829*4882a593Smuzhiyun * this is the last request
830*4882a593Smuzhiyun * copy the remainder bytes, call the procedure to swap any
831*4882a593Smuzhiyun * needed data, and then call to transfer the command to all
832*4882a593Smuzhiyun * back-end servers
833*4882a593Smuzhiyun */
834*4882a593Smuzhiyun if (cl->largeCmdBytesSoFar + req->dataBytes > cl->largeCmdBytesTotal) {
835*4882a593Smuzhiyun cl->largeCmdRequestsTotal = 0;
836*4882a593Smuzhiyun return __glXBadLargeRequest;
837*4882a593Smuzhiyun }
838*4882a593Smuzhiyun
839*4882a593Smuzhiyun memcpy(cl->largeCmdBuf + cl->largeCmdBytesSoFar, pc, req->dataBytes);
840*4882a593Smuzhiyun
841*4882a593Smuzhiyun cl->largeCmdBytesSoFar += req->dataBytes;
842*4882a593Smuzhiyun
843*4882a593Smuzhiyun if (req->dataBytes > cl->largeCmdMaxReqDataSize)
844*4882a593Smuzhiyun cl->largeCmdMaxReqDataSize = req->dataBytes;
845*4882a593Smuzhiyun
846*4882a593Smuzhiyun if (cl->largeCmdRequestsSwapProc != NULL) {
847*4882a593Smuzhiyun (*cl->largeCmdRequestsSwapProc) (cl->largeCmdBuf +
848*4882a593Smuzhiyun __GLX_RENDER_LARGE_HDR_SIZE);
849*4882a593Smuzhiyun }
850*4882a593Smuzhiyun else if (cl->largeCmdRequestsSwap_info &&
851*4882a593Smuzhiyun cl->largeCmdRequestsSwap_info->nelems > 0) {
852*4882a593Smuzhiyun if (cl->largeCmdRequestsSwap_info->elem_size == 4) {
853*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY((int *) (pc + __GLX_RENDER_LARGE_HDR_SIZE),
854*4882a593Smuzhiyun cl->largeCmdRequestsSwap_info->nelems);
855*4882a593Smuzhiyun }
856*4882a593Smuzhiyun else if (cl->largeCmdRequestsSwap_info->elem_size == 2) {
857*4882a593Smuzhiyun __GLX_SWAP_SHORT_ARRAY((short *) (pc +
858*4882a593Smuzhiyun __GLX_RENDER_LARGE_HDR_SIZE),
859*4882a593Smuzhiyun cl->largeCmdRequestsSwap_info->nelems);
860*4882a593Smuzhiyun }
861*4882a593Smuzhiyun else if (cl->largeCmdRequestsSwap_info->elem_size == 8) {
862*4882a593Smuzhiyun __GLX_SWAP_DOUBLE_ARRAY((double *) (pc +
863*4882a593Smuzhiyun __GLX_RENDER_LARGE_HDR_SIZE),
864*4882a593Smuzhiyun cl->largeCmdRequestsSwap_info->nelems);
865*4882a593Smuzhiyun }
866*4882a593Smuzhiyun }
867*4882a593Smuzhiyun
868*4882a593Smuzhiyun cl->largeCmdRequestsTotal = 0;
869*4882a593Smuzhiyun return (__glXSendLargeCommand(cl, req->contextTag));
870*4882a593Smuzhiyun
871*4882a593Smuzhiyun }
872*4882a593Smuzhiyun else {
873*4882a593Smuzhiyun cl->largeCmdRequestsTotal = 0;
874*4882a593Smuzhiyun return __glXBadLargeRequest;
875*4882a593Smuzhiyun }
876*4882a593Smuzhiyun
877*4882a593Smuzhiyun }
878*4882a593Smuzhiyun
879*4882a593Smuzhiyun /************************************************************************/
880*4882a593Smuzhiyun
881*4882a593Smuzhiyun /*
882*4882a593Smuzhiyun ** No support is provided for the vendor-private requests other than
883*4882a593Smuzhiyun ** allocating these entry points in the dispatch table.
884*4882a593Smuzhiyun */
885*4882a593Smuzhiyun
886*4882a593Smuzhiyun int
__glXSwapVendorPrivate(__GLXclientState * cl,GLbyte * pc)887*4882a593Smuzhiyun __glXSwapVendorPrivate(__GLXclientState * cl, GLbyte * pc)
888*4882a593Smuzhiyun {
889*4882a593Smuzhiyun xGLXVendorPrivateReq *req;
890*4882a593Smuzhiyun CARD32 vendorCode;
891*4882a593Smuzhiyun
892*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
893*4882a593Smuzhiyun
894*4882a593Smuzhiyun req = (xGLXVendorPrivateReq *) pc;
895*4882a593Smuzhiyun vendorCode = req->vendorCode;
896*4882a593Smuzhiyun __GLX_SWAP_INT(&vendorCode);
897*4882a593Smuzhiyun
898*4882a593Smuzhiyun switch (vendorCode) {
899*4882a593Smuzhiyun
900*4882a593Smuzhiyun case X_GLvop_DeleteTexturesEXT:
901*4882a593Smuzhiyun return __glXVForwardSingleReqSwap(cl, pc);
902*4882a593Smuzhiyun break;
903*4882a593Smuzhiyun
904*4882a593Smuzhiyun case X_GLXvop_SwapIntervalSGI:
905*4882a593Smuzhiyun if (glxIsExtensionSupported("SGI_swap_control")) {
906*4882a593Smuzhiyun return __glXVForwardSingleReqSwap(cl, pc);
907*4882a593Smuzhiyun }
908*4882a593Smuzhiyun else {
909*4882a593Smuzhiyun return Success;
910*4882a593Smuzhiyun }
911*4882a593Smuzhiyun break;
912*4882a593Smuzhiyun
913*4882a593Smuzhiyun #if 0 /* glx 1.3 */
914*4882a593Smuzhiyun case X_GLXvop_CreateGLXVideoSourceSGIX:
915*4882a593Smuzhiyun break;
916*4882a593Smuzhiyun case X_GLXvop_DestroyGLXVideoSourceSGIX:
917*4882a593Smuzhiyun break;
918*4882a593Smuzhiyun case X_GLXvop_CreateGLXPixmapWithConfigSGIX:
919*4882a593Smuzhiyun break;
920*4882a593Smuzhiyun case X_GLXvop_DestroyGLXPbufferSGIX:
921*4882a593Smuzhiyun break;
922*4882a593Smuzhiyun case X_GLXvop_ChangeDrawableAttributesSGIX:
923*4882a593Smuzhiyun break;
924*4882a593Smuzhiyun #endif
925*4882a593Smuzhiyun
926*4882a593Smuzhiyun case X_GLXvop_JoinSwapGroupSGIX:
927*4882a593Smuzhiyun return __glXSwapJoinSwapGroupSGIX(cl, pc);
928*4882a593Smuzhiyun break;
929*4882a593Smuzhiyun
930*4882a593Smuzhiyun case X_GLXvop_BindSwapBarrierSGIX:
931*4882a593Smuzhiyun return __glXSwapBindSwapBarrierSGIX(cl, pc);
932*4882a593Smuzhiyun break;
933*4882a593Smuzhiyun
934*4882a593Smuzhiyun case X_GLXvop_CreateContextWithConfigSGIX:
935*4882a593Smuzhiyun return __glXSwapCreateContextWithConfigSGIX(cl, pc);
936*4882a593Smuzhiyun break;
937*4882a593Smuzhiyun
938*4882a593Smuzhiyun default:
939*4882a593Smuzhiyun /*
940*4882a593Smuzhiyun ** unsupported private request
941*4882a593Smuzhiyun */
942*4882a593Smuzhiyun cl->client->errorValue = req->vendorCode;
943*4882a593Smuzhiyun return __glXUnsupportedPrivateRequest;
944*4882a593Smuzhiyun }
945*4882a593Smuzhiyun
946*4882a593Smuzhiyun }
947*4882a593Smuzhiyun
948*4882a593Smuzhiyun int
__glXSwapVendorPrivateWithReply(__GLXclientState * cl,GLbyte * pc)949*4882a593Smuzhiyun __glXSwapVendorPrivateWithReply(__GLXclientState * cl, GLbyte * pc)
950*4882a593Smuzhiyun {
951*4882a593Smuzhiyun xGLXVendorPrivateWithReplyReq *req;
952*4882a593Smuzhiyun CARD32 vendorCode;
953*4882a593Smuzhiyun
954*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
955*4882a593Smuzhiyun
956*4882a593Smuzhiyun req = (xGLXVendorPrivateWithReplyReq *) pc;
957*4882a593Smuzhiyun vendorCode = req->vendorCode;
958*4882a593Smuzhiyun __GLX_SWAP_INT(&vendorCode);
959*4882a593Smuzhiyun
960*4882a593Smuzhiyun switch (vendorCode) {
961*4882a593Smuzhiyun
962*4882a593Smuzhiyun case X_GLvop_GetConvolutionFilterEXT:
963*4882a593Smuzhiyun case X_GLvop_GetSeparableFilterEXT:
964*4882a593Smuzhiyun case X_GLvop_GetHistogramEXT:
965*4882a593Smuzhiyun case X_GLvop_GetMinmaxEXT:
966*4882a593Smuzhiyun return (__glXNoSuchSingleOpcode(cl, pc));
967*4882a593Smuzhiyun break;
968*4882a593Smuzhiyun
969*4882a593Smuzhiyun case X_GLvop_GetConvolutionParameterfvEXT:
970*4882a593Smuzhiyun case X_GLvop_GetConvolutionParameterivEXT:
971*4882a593Smuzhiyun case X_GLvop_GetHistogramParameterivEXT:
972*4882a593Smuzhiyun case X_GLvop_GetMinmaxParameterfvEXT:
973*4882a593Smuzhiyun case X_GLvop_GetMinmaxParameterivEXT:
974*4882a593Smuzhiyun case X_GLvop_GenTexturesEXT:
975*4882a593Smuzhiyun return (__glXVForwardAllWithReplySwapiv(cl, pc));
976*4882a593Smuzhiyun break;
977*4882a593Smuzhiyun
978*4882a593Smuzhiyun case X_GLvop_AreTexturesResidentEXT:
979*4882a593Smuzhiyun case X_GLvop_IsTextureEXT:
980*4882a593Smuzhiyun return (__glXVForwardPipe0WithReplySwap(cl, pc));
981*4882a593Smuzhiyun break;
982*4882a593Smuzhiyun
983*4882a593Smuzhiyun #if 0 /* glx1.3 */
984*4882a593Smuzhiyun case X_GLvop_GetDetailTexFuncSGIS:
985*4882a593Smuzhiyun case X_GLvop_GetSharpenTexFuncSGIS:
986*4882a593Smuzhiyun case X_GLvop_GetColorTableSGI:
987*4882a593Smuzhiyun case X_GLvop_GetColorTableParameterfvSGI:
988*4882a593Smuzhiyun case X_GLvop_GetColorTableParameterivSGI:
989*4882a593Smuzhiyun case X_GLvop_GetTexFilterFuncSGIS:
990*4882a593Smuzhiyun case X_GLvop_GetInstrumentsSGIX:
991*4882a593Smuzhiyun case X_GLvop_InstrumentsBufferSGIX:
992*4882a593Smuzhiyun case X_GLvop_PollInstrumentsSGIX:
993*4882a593Smuzhiyun case X_GLvop_FlushRasterSGIX:
994*4882a593Smuzhiyun case X_GLXvop_CreateGLXPbufferSGIX:
995*4882a593Smuzhiyun case X_GLXvop_GetDrawableAttributesSGIX:
996*4882a593Smuzhiyun case X_GLXvop_QueryHyperpipeNetworkSGIX:
997*4882a593Smuzhiyun case X_GLXvop_QueryHyperpipeConfigSGIX:
998*4882a593Smuzhiyun case X_GLXvop_HyperpipeConfigSGIX:
999*4882a593Smuzhiyun case X_GLXvop_DestroyHyperpipeConfigSGIX:
1000*4882a593Smuzhiyun #endif
1001*4882a593Smuzhiyun case X_GLXvop_QueryMaxSwapBarriersSGIX:
1002*4882a593Smuzhiyun return (__glXSwapQueryMaxSwapBarriersSGIX(cl, pc));
1003*4882a593Smuzhiyun break;
1004*4882a593Smuzhiyun
1005*4882a593Smuzhiyun case X_GLXvop_GetFBConfigsSGIX:
1006*4882a593Smuzhiyun return (__glXSwapGetFBConfigsSGIX(cl, pc));
1007*4882a593Smuzhiyun break;
1008*4882a593Smuzhiyun
1009*4882a593Smuzhiyun case X_GLXvop_MakeCurrentReadSGI:
1010*4882a593Smuzhiyun return (__glXSwapMakeCurrentReadSGI(cl, pc));
1011*4882a593Smuzhiyun break;
1012*4882a593Smuzhiyun
1013*4882a593Smuzhiyun case X_GLXvop_QueryContextInfoEXT:
1014*4882a593Smuzhiyun return (__glXSwapQueryContextInfoEXT(cl, (char *) pc));
1015*4882a593Smuzhiyun break;
1016*4882a593Smuzhiyun
1017*4882a593Smuzhiyun default:
1018*4882a593Smuzhiyun /*
1019*4882a593Smuzhiyun ** unsupported private request
1020*4882a593Smuzhiyun */
1021*4882a593Smuzhiyun cl->client->errorValue = req->vendorCode;
1022*4882a593Smuzhiyun return __glXUnsupportedPrivateRequest;
1023*4882a593Smuzhiyun }
1024*4882a593Smuzhiyun
1025*4882a593Smuzhiyun }
1026*4882a593Smuzhiyun
1027*4882a593Smuzhiyun int
__glXSwapGetFBConfigs(__GLXclientState * cl,GLbyte * pc)1028*4882a593Smuzhiyun __glXSwapGetFBConfigs(__GLXclientState * cl, GLbyte * pc)
1029*4882a593Smuzhiyun {
1030*4882a593Smuzhiyun xGLXGetFBConfigsReq *req = (xGLXGetFBConfigsReq *) pc;
1031*4882a593Smuzhiyun
1032*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1033*4882a593Smuzhiyun
1034*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1035*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
1036*4882a593Smuzhiyun
1037*4882a593Smuzhiyun return __glXGetFBConfigs(cl, pc);
1038*4882a593Smuzhiyun }
1039*4882a593Smuzhiyun
1040*4882a593Smuzhiyun int
__glXSwapGetFBConfigsSGIX(__GLXclientState * cl,GLbyte * pc)1041*4882a593Smuzhiyun __glXSwapGetFBConfigsSGIX(__GLXclientState * cl, GLbyte * pc)
1042*4882a593Smuzhiyun {
1043*4882a593Smuzhiyun xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *) pc;
1044*4882a593Smuzhiyun xGLXGetFBConfigsReq new_req;
1045*4882a593Smuzhiyun
1046*4882a593Smuzhiyun new_req.reqType = req->reqType;
1047*4882a593Smuzhiyun new_req.glxCode = req->glxCode;
1048*4882a593Smuzhiyun new_req.length = req->length;
1049*4882a593Smuzhiyun new_req.screen = req->screen;
1050*4882a593Smuzhiyun
1051*4882a593Smuzhiyun return (__glXSwapGetFBConfigs(cl, (GLbyte *) &new_req));
1052*4882a593Smuzhiyun }
1053*4882a593Smuzhiyun
1054*4882a593Smuzhiyun int
__glXSwapCreateWindow(__GLXclientState * cl,GLbyte * pc)1055*4882a593Smuzhiyun __glXSwapCreateWindow(__GLXclientState * cl, GLbyte * pc)
1056*4882a593Smuzhiyun {
1057*4882a593Smuzhiyun xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc;
1058*4882a593Smuzhiyun
1059*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1060*4882a593Smuzhiyun
1061*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1062*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
1063*4882a593Smuzhiyun __GLX_SWAP_INT(&req->fbconfig);
1064*4882a593Smuzhiyun __GLX_SWAP_INT(&req->window);
1065*4882a593Smuzhiyun __GLX_SWAP_INT(&req->glxwindow);
1066*4882a593Smuzhiyun __GLX_SWAP_INT(&req->numAttribs);
1067*4882a593Smuzhiyun
1068*4882a593Smuzhiyun return (__glXCreateWindow(cl, (GLbyte *) pc));
1069*4882a593Smuzhiyun }
1070*4882a593Smuzhiyun
1071*4882a593Smuzhiyun int
__glXSwapDestroyWindow(__GLXclientState * cl,GLbyte * pc)1072*4882a593Smuzhiyun __glXSwapDestroyWindow(__GLXclientState * cl, GLbyte * pc)
1073*4882a593Smuzhiyun {
1074*4882a593Smuzhiyun xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
1075*4882a593Smuzhiyun
1076*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1077*4882a593Smuzhiyun
1078*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1079*4882a593Smuzhiyun __GLX_SWAP_INT(&req->glxwindow);
1080*4882a593Smuzhiyun
1081*4882a593Smuzhiyun return (__glXDestroyWindow(cl, (GLbyte *) pc));
1082*4882a593Smuzhiyun }
1083*4882a593Smuzhiyun
1084*4882a593Smuzhiyun int
__glXSwapQueryContext(__GLXclientState * cl,GLbyte * pc)1085*4882a593Smuzhiyun __glXSwapQueryContext(__GLXclientState * cl, GLbyte * pc)
1086*4882a593Smuzhiyun {
1087*4882a593Smuzhiyun xGLXQueryContextReq *req = (xGLXQueryContextReq *) pc;
1088*4882a593Smuzhiyun
1089*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1090*4882a593Smuzhiyun
1091*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1092*4882a593Smuzhiyun __GLX_SWAP_INT(&req->context);
1093*4882a593Smuzhiyun
1094*4882a593Smuzhiyun return (__glXQueryContext(cl, (GLbyte *) pc));
1095*4882a593Smuzhiyun
1096*4882a593Smuzhiyun }
1097*4882a593Smuzhiyun
1098*4882a593Smuzhiyun int
__glXSwapCreatePbuffer(__GLXclientState * cl,GLbyte * pc)1099*4882a593Smuzhiyun __glXSwapCreatePbuffer(__GLXclientState * cl, GLbyte * pc)
1100*4882a593Smuzhiyun {
1101*4882a593Smuzhiyun xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *) pc;
1102*4882a593Smuzhiyun int nattr = req->numAttribs;
1103*4882a593Smuzhiyun
1104*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1105*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
1106*4882a593Smuzhiyun
1107*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1108*4882a593Smuzhiyun __GLX_SWAP_INT(&req->screen);
1109*4882a593Smuzhiyun __GLX_SWAP_INT(&req->fbconfig);
1110*4882a593Smuzhiyun __GLX_SWAP_INT(&req->pbuffer);
1111*4882a593Smuzhiyun __GLX_SWAP_INT(&req->numAttribs);
1112*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY((int *) (req + 1), nattr * 2);
1113*4882a593Smuzhiyun
1114*4882a593Smuzhiyun return (__glXCreatePbuffer(cl, pc));
1115*4882a593Smuzhiyun }
1116*4882a593Smuzhiyun
1117*4882a593Smuzhiyun int
__glXSwapDestroyPbuffer(__GLXclientState * cl,GLbyte * pc)1118*4882a593Smuzhiyun __glXSwapDestroyPbuffer(__GLXclientState * cl, GLbyte * pc)
1119*4882a593Smuzhiyun {
1120*4882a593Smuzhiyun xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) pc;
1121*4882a593Smuzhiyun
1122*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1123*4882a593Smuzhiyun
1124*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1125*4882a593Smuzhiyun __GLX_SWAP_INT(&req->pbuffer);
1126*4882a593Smuzhiyun
1127*4882a593Smuzhiyun return (__glXDestroyPbuffer(cl, (GLbyte *) pc));
1128*4882a593Smuzhiyun }
1129*4882a593Smuzhiyun
1130*4882a593Smuzhiyun int
__glXSwapGetDrawableAttributes(__GLXclientState * cl,GLbyte * pc)1131*4882a593Smuzhiyun __glXSwapGetDrawableAttributes(__GLXclientState * cl, GLbyte * pc)
1132*4882a593Smuzhiyun {
1133*4882a593Smuzhiyun xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *) pc;
1134*4882a593Smuzhiyun
1135*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1136*4882a593Smuzhiyun
1137*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1138*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
1139*4882a593Smuzhiyun
1140*4882a593Smuzhiyun return (__glXGetDrawableAttributes(cl, pc));
1141*4882a593Smuzhiyun }
1142*4882a593Smuzhiyun
1143*4882a593Smuzhiyun int
__glXSwapChangeDrawableAttributes(__GLXclientState * cl,GLbyte * pc)1144*4882a593Smuzhiyun __glXSwapChangeDrawableAttributes(__GLXclientState * cl, GLbyte * pc)
1145*4882a593Smuzhiyun {
1146*4882a593Smuzhiyun xGLXChangeDrawableAttributesReq *req =
1147*4882a593Smuzhiyun (xGLXChangeDrawableAttributesReq *) pc;
1148*4882a593Smuzhiyun __GLX_DECLARE_SWAP_VARIABLES;
1149*4882a593Smuzhiyun __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
1150*4882a593Smuzhiyun
1151*4882a593Smuzhiyun __GLX_SWAP_SHORT(&req->length);
1152*4882a593Smuzhiyun __GLX_SWAP_INT(&req->drawable);
1153*4882a593Smuzhiyun __GLX_SWAP_INT(&req->numAttribs);
1154*4882a593Smuzhiyun __GLX_SWAP_INT_ARRAY((int *) (req + 1), req->numAttribs * 2);
1155*4882a593Smuzhiyun
1156*4882a593Smuzhiyun return (__glXChangeDrawableAttributes(cl, pc));
1157*4882a593Smuzhiyun }
1158