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