xref: /OK3568_Linux_fs/external/xserver/glx/glxserver.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifdef HAVE_DIX_CONFIG_H
2*4882a593Smuzhiyun #include <dix-config.h>
3*4882a593Smuzhiyun #endif
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #ifndef _GLX_server_h_
6*4882a593Smuzhiyun #define _GLX_server_h_
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun /*
9*4882a593Smuzhiyun  * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
10*4882a593Smuzhiyun  * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * Permission is hereby granted, free of charge, to any person obtaining a
13*4882a593Smuzhiyun  * copy of this software and associated documentation files (the "Software"),
14*4882a593Smuzhiyun  * to deal in the Software without restriction, including without limitation
15*4882a593Smuzhiyun  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16*4882a593Smuzhiyun  * and/or sell copies of the Software, and to permit persons to whom the
17*4882a593Smuzhiyun  * Software is furnished to do so, subject to the following conditions:
18*4882a593Smuzhiyun  *
19*4882a593Smuzhiyun  * The above copyright notice including the dates of first publication and
20*4882a593Smuzhiyun  * either this permission notice or a reference to
21*4882a593Smuzhiyun  * http://oss.sgi.com/projects/FreeB/
22*4882a593Smuzhiyun  * shall be included in all copies or substantial portions of the Software.
23*4882a593Smuzhiyun  *
24*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25*4882a593Smuzhiyun  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27*4882a593Smuzhiyun  * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
28*4882a593Smuzhiyun  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
29*4882a593Smuzhiyun  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30*4882a593Smuzhiyun  * SOFTWARE.
31*4882a593Smuzhiyun  *
32*4882a593Smuzhiyun  * Except as contained in this notice, the name of Silicon Graphics, Inc.
33*4882a593Smuzhiyun  * shall not be used in advertising or otherwise to promote the sale, use or
34*4882a593Smuzhiyun  * other dealings in this Software without prior written authorization from
35*4882a593Smuzhiyun  * Silicon Graphics, Inc.
36*4882a593Smuzhiyun  */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #include <X11/X.h>
39*4882a593Smuzhiyun #include <X11/Xproto.h>
40*4882a593Smuzhiyun #include <X11/Xmd.h>
41*4882a593Smuzhiyun #include <misc.h>
42*4882a593Smuzhiyun #include <dixstruct.h>
43*4882a593Smuzhiyun #include <pixmapstr.h>
44*4882a593Smuzhiyun #include <gcstruct.h>
45*4882a593Smuzhiyun #include <extnsionst.h>
46*4882a593Smuzhiyun #include <resource.h>
47*4882a593Smuzhiyun #include <scrnintstr.h>
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #include <GL/gl.h>
50*4882a593Smuzhiyun #include <GL/glext.h>
51*4882a593Smuzhiyun #include <GL/glxproto.h>
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #ifndef GLX_CONTEXT_OPENGL_NO_ERROR_ARB
54*4882a593Smuzhiyun #define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3
55*4882a593Smuzhiyun #endif
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun /*
58*4882a593Smuzhiyun ** GLX resources.
59*4882a593Smuzhiyun */
60*4882a593Smuzhiyun typedef XID GLXContextID;
61*4882a593Smuzhiyun typedef XID GLXDrawable;
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun typedef struct __GLXclientStateRec __GLXclientState;
64*4882a593Smuzhiyun typedef struct __GLXdrawable __GLXdrawable;
65*4882a593Smuzhiyun typedef struct __GLXcontext __GLXcontext;
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #include "glxscreens.h"
68*4882a593Smuzhiyun #include "glxdrawable.h"
69*4882a593Smuzhiyun #include "glxcontext.h"
70*4882a593Smuzhiyun #include "glx_extinit.h"
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun extern __GLXscreen *glxGetScreen(ScreenPtr pScreen);
73*4882a593Smuzhiyun extern __GLXclientState *glxGetClient(ClientPtr pClient);
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /************************************************************************/
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun void __glXScreenInitVisuals(__GLXscreen * screen);
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /*
80*4882a593Smuzhiyun ** The last context used (from the server's persective) is cached.
81*4882a593Smuzhiyun */
82*4882a593Smuzhiyun extern __GLXcontext *__glXForceCurrent(__GLXclientState *, GLXContextTag,
83*4882a593Smuzhiyun                                        int *);
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun int __glXError(int error);
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /************************************************************************/
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun enum {
90*4882a593Smuzhiyun     GLX_MINIMAL_VISUALS,
91*4882a593Smuzhiyun     GLX_TYPICAL_VISUALS,
92*4882a593Smuzhiyun     GLX_ALL_VISUALS
93*4882a593Smuzhiyun };
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun void glxSuspendClients(void);
96*4882a593Smuzhiyun void glxResumeClients(void);
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun typedef void (*glx_func_ptr)(void);
99*4882a593Smuzhiyun typedef glx_func_ptr (*glx_gpa_proc)(const char *);
100*4882a593Smuzhiyun void __glXsetGetProcAddress(glx_gpa_proc get_proc_address);
101*4882a593Smuzhiyun void *__glGetProcAddress(const char *);
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun void
104*4882a593Smuzhiyun __glXsendSwapEvent(__GLXdrawable *drawable, int type, CARD64 ust,
105*4882a593Smuzhiyun                    CARD64 msc, CARD32 sbc);
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #if PRESENT
108*4882a593Smuzhiyun void
109*4882a593Smuzhiyun __glXregisterPresentCompleteNotify(void);
110*4882a593Smuzhiyun #endif
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /*
113*4882a593Smuzhiyun ** State kept per client.
114*4882a593Smuzhiyun */
115*4882a593Smuzhiyun struct __GLXclientStateRec {
116*4882a593Smuzhiyun     /*
117*4882a593Smuzhiyun      ** Buffer for returned data.
118*4882a593Smuzhiyun      */
119*4882a593Smuzhiyun     GLbyte *returnBuf;
120*4882a593Smuzhiyun     GLint returnBufSize;
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun     /* Back pointer to X client record */
123*4882a593Smuzhiyun     ClientPtr client;
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun     char *GLClientextensions;
126*4882a593Smuzhiyun };
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /************************************************************************/
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /*
131*4882a593Smuzhiyun ** Dispatch tables.
132*4882a593Smuzhiyun */
133*4882a593Smuzhiyun typedef void (*__GLXdispatchRenderProcPtr) (GLbyte *);
134*4882a593Smuzhiyun typedef int (*__GLXdispatchSingleProcPtr) (__GLXclientState *, GLbyte *);
135*4882a593Smuzhiyun typedef int (*__GLXdispatchVendorPrivProcPtr) (__GLXclientState *, GLbyte *);
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /*
138*4882a593Smuzhiyun  * Tables for computing the size of each rendering command.
139*4882a593Smuzhiyun  */
140*4882a593Smuzhiyun typedef int (*gl_proto_size_func) (const GLbyte *, Bool, int);
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun typedef struct {
143*4882a593Smuzhiyun     int bytes;
144*4882a593Smuzhiyun     gl_proto_size_func varsize;
145*4882a593Smuzhiyun } __GLXrenderSizeData;
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /************************************************************************/
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun /*
150*4882a593Smuzhiyun ** X resources.
151*4882a593Smuzhiyun */
152*4882a593Smuzhiyun extern RESTYPE __glXContextRes;
153*4882a593Smuzhiyun extern RESTYPE __glXClientRes;
154*4882a593Smuzhiyun extern RESTYPE __glXDrawableRes;
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun /************************************************************************/
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /*
159*4882a593Smuzhiyun  * Routines for computing the size of variably-sized rendering commands.
160*4882a593Smuzhiyun  */
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun static _X_INLINE int
safe_add(int a,int b)163*4882a593Smuzhiyun safe_add(int a, int b)
164*4882a593Smuzhiyun {
165*4882a593Smuzhiyun     if (a < 0 || b < 0)
166*4882a593Smuzhiyun         return -1;
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun     if (INT_MAX - a < b)
169*4882a593Smuzhiyun         return -1;
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun     return a + b;
172*4882a593Smuzhiyun }
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun static _X_INLINE int
safe_mul(int a,int b)175*4882a593Smuzhiyun safe_mul(int a, int b)
176*4882a593Smuzhiyun {
177*4882a593Smuzhiyun     if (a < 0 || b < 0)
178*4882a593Smuzhiyun         return -1;
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun     if (a == 0 || b == 0)
181*4882a593Smuzhiyun         return 0;
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun     if (a > INT_MAX / b)
184*4882a593Smuzhiyun         return -1;
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun     return a * b;
187*4882a593Smuzhiyun }
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun static _X_INLINE int
safe_pad(int a)190*4882a593Smuzhiyun safe_pad(int a)
191*4882a593Smuzhiyun {
192*4882a593Smuzhiyun     int ret;
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun     if (a < 0)
195*4882a593Smuzhiyun         return -1;
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun     if ((ret = safe_add(a, 3)) < 0)
198*4882a593Smuzhiyun         return -1;
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun     return ret & (GLuint)~3;
201*4882a593Smuzhiyun }
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun extern int __glXTypeSize(GLenum enm);
204*4882a593Smuzhiyun extern int __glXImageSize(GLenum format, GLenum type,
205*4882a593Smuzhiyun                           GLenum target, GLsizei w, GLsizei h, GLsizei d,
206*4882a593Smuzhiyun                           GLint imageHeight, GLint rowLength, GLint skipImages,
207*4882a593Smuzhiyun                           GLint skipRows, GLint alignment);
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun extern unsigned glxMajorVersion;
210*4882a593Smuzhiyun extern unsigned glxMinorVersion;
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun extern int __glXEventBase;
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun #endif                          /* !__GLX_server_h__ */
215