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