14642e01fSmrg#ifdef HAVE_DIX_CONFIG_H
24642e01fSmrg#include <dix-config.h>
34642e01fSmrg#endif
44642e01fSmrg
54642e01fSmrg#ifndef _GLX_server_h_
64642e01fSmrg#define _GLX_server_h_
74642e01fSmrg
84642e01fSmrg/*
94642e01fSmrg * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
104642e01fSmrg * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
114642e01fSmrg *
124642e01fSmrg * Permission is hereby granted, free of charge, to any person obtaining a
134642e01fSmrg * copy of this software and associated documentation files (the "Software"),
144642e01fSmrg * to deal in the Software without restriction, including without limitation
154642e01fSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
164642e01fSmrg * and/or sell copies of the Software, and to permit persons to whom the
174642e01fSmrg * Software is furnished to do so, subject to the following conditions:
184642e01fSmrg *
194642e01fSmrg * The above copyright notice including the dates of first publication and
204642e01fSmrg * either this permission notice or a reference to
214642e01fSmrg * http://oss.sgi.com/projects/FreeB/
224642e01fSmrg * shall be included in all copies or substantial portions of the Software.
234642e01fSmrg *
244642e01fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
254642e01fSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
264642e01fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
274642e01fSmrg * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
284642e01fSmrg * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
294642e01fSmrg * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
304642e01fSmrg * SOFTWARE.
314642e01fSmrg *
324642e01fSmrg * Except as contained in this notice, the name of Silicon Graphics, Inc.
334642e01fSmrg * shall not be used in advertising or otherwise to promote the sale, use or
344642e01fSmrg * other dealings in this Software without prior written authorization from
354642e01fSmrg * Silicon Graphics, Inc.
364642e01fSmrg */
374642e01fSmrg
384642e01fSmrg#include <X11/X.h>
394642e01fSmrg#include <X11/Xproto.h>
404642e01fSmrg#include <X11/Xmd.h>
414642e01fSmrg#include <misc.h>
424642e01fSmrg#include <dixstruct.h>
434642e01fSmrg#include <pixmapstr.h>
444642e01fSmrg#include <gcstruct.h>
454642e01fSmrg#include <extnsionst.h>
464642e01fSmrg#include <resource.h>
474642e01fSmrg#include <scrnintstr.h>
484642e01fSmrg
494642e01fSmrg#include <GL/gl.h>
50f7df2e56Smrg#include <GL/glext.h>
514642e01fSmrg#include <GL/glxproto.h>
524642e01fSmrg
537e31ba66Smrg#ifndef GLX_CONTEXT_OPENGL_NO_ERROR_ARB
547e31ba66Smrg#define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3
557e31ba66Smrg#endif
567e31ba66Smrg
576747b715Smrg/*
586747b715Smrg** GLX resources.
596747b715Smrg*/
606747b715Smrgtypedef XID GLXContextID;
616747b715Smrgtypedef XID GLXDrawable;
626747b715Smrg
636747b715Smrgtypedef struct __GLXclientStateRec __GLXclientState;
644642e01fSmrgtypedef struct __GLXdrawable __GLXdrawable;
654642e01fSmrgtypedef struct __GLXcontext __GLXcontext;
664642e01fSmrg
674642e01fSmrg#include "glxscreens.h"
684642e01fSmrg#include "glxdrawable.h"
694642e01fSmrg#include "glxcontext.h"
707e31ba66Smrg#include "glx_extinit.h"
714642e01fSmrg
724642e01fSmrgextern __GLXscreen *glxGetScreen(ScreenPtr pScreen);
734642e01fSmrgextern __GLXclientState *glxGetClient(ClientPtr pClient);
744642e01fSmrg
754642e01fSmrg/************************************************************************/
764642e01fSmrg
77f7df2e56Smrgvoid __glXScreenInitVisuals(__GLXscreen * screen);
784642e01fSmrg
794642e01fSmrg/*
804642e01fSmrg** The last context used (from the server's persective) is cached.
814642e01fSmrg*/
82f7df2e56Smrgextern __GLXcontext *__glXForceCurrent(__GLXclientState *, GLXContextTag,
83f7df2e56Smrg                                       int *);
844642e01fSmrg
854642e01fSmrgint __glXError(int error);
864642e01fSmrg
874642e01fSmrg/************************************************************************/
884642e01fSmrg
894642e01fSmrgenum {
904642e01fSmrg    GLX_MINIMAL_VISUALS,
914642e01fSmrg    GLX_TYPICAL_VISUALS,
924642e01fSmrg    GLX_ALL_VISUALS
934642e01fSmrg};
944642e01fSmrg
954642e01fSmrgvoid glxSuspendClients(void);
964642e01fSmrgvoid glxResumeClients(void);
974642e01fSmrg
98f7df2e56Smrgtypedef void (*glx_func_ptr)(void);
99f7df2e56Smrgtypedef glx_func_ptr (*glx_gpa_proc)(const char *);
100f7df2e56Smrgvoid __glXsetGetProcAddress(glx_gpa_proc get_proc_address);
101f7df2e56Smrgvoid *__glGetProcAddress(const char *);
102f7df2e56Smrg
103f7df2e56Smrgvoid
104f7df2e56Smrg__glXsendSwapEvent(__GLXdrawable *drawable, int type, CARD64 ust,
105f7df2e56Smrg                   CARD64 msc, CARD32 sbc);
106f7df2e56Smrg
107f7df2e56Smrg#if PRESENT
108f7df2e56Smrgvoid
109f7df2e56Smrg__glXregisterPresentCompleteNotify(void);
110f7df2e56Smrg#endif
111f7df2e56Smrg
1124642e01fSmrg/*
1134642e01fSmrg** State kept per client.
1144642e01fSmrg*/
1154642e01fSmrgstruct __GLXclientStateRec {
1164642e01fSmrg    /*
117f7df2e56Smrg     ** Buffer for returned data.
118f7df2e56Smrg     */
1194642e01fSmrg    GLbyte *returnBuf;
1204642e01fSmrg    GLint returnBufSize;
1214642e01fSmrg
1224642e01fSmrg    /* Back pointer to X client record */
1234642e01fSmrg    ClientPtr client;
1244642e01fSmrg
1254642e01fSmrg    char *GLClientextensions;
1264642e01fSmrg};
1274642e01fSmrg
1284642e01fSmrg/************************************************************************/
1294642e01fSmrg
1304642e01fSmrg/*
1314642e01fSmrg** Dispatch tables.
1324642e01fSmrg*/
133f7df2e56Smrgtypedef void (*__GLXdispatchRenderProcPtr) (GLbyte *);
134f7df2e56Smrgtypedef int (*__GLXdispatchSingleProcPtr) (__GLXclientState *, GLbyte *);
135f7df2e56Smrgtypedef int (*__GLXdispatchVendorPrivProcPtr) (__GLXclientState *, GLbyte *);
1364642e01fSmrg
1374642e01fSmrg/*
1384642e01fSmrg * Tables for computing the size of each rendering command.
1394642e01fSmrg */
140f7df2e56Smrgtypedef int (*gl_proto_size_func) (const GLbyte *, Bool, int);
1414642e01fSmrg
1424642e01fSmrgtypedef struct {
1434642e01fSmrg    int bytes;
1444642e01fSmrg    gl_proto_size_func varsize;
1454642e01fSmrg} __GLXrenderSizeData;
1464642e01fSmrg
1474642e01fSmrg/************************************************************************/
1484642e01fSmrg
1494642e01fSmrg/*
1504642e01fSmrg** X resources.
1514642e01fSmrg*/
1524642e01fSmrgextern RESTYPE __glXContextRes;
1534642e01fSmrgextern RESTYPE __glXClientRes;
1544642e01fSmrgextern RESTYPE __glXDrawableRes;
1554642e01fSmrg
1564642e01fSmrg/************************************************************************/
1574642e01fSmrg
1584642e01fSmrg/*
1594642e01fSmrg * Routines for computing the size of variably-sized rendering commands.
1604642e01fSmrg */
1614642e01fSmrg
1620b0d8713Smrgstatic _X_INLINE int
1630b0d8713Smrgsafe_add(int a, int b)
1640b0d8713Smrg{
1650b0d8713Smrg    if (a < 0 || b < 0)
1660b0d8713Smrg        return -1;
1670b0d8713Smrg
1680b0d8713Smrg    if (INT_MAX - a < b)
1690b0d8713Smrg        return -1;
1700b0d8713Smrg
1710b0d8713Smrg    return a + b;
1720b0d8713Smrg}
1730b0d8713Smrg
1740b0d8713Smrgstatic _X_INLINE int
1750b0d8713Smrgsafe_mul(int a, int b)
1760b0d8713Smrg{
1770b0d8713Smrg    if (a < 0 || b < 0)
1780b0d8713Smrg        return -1;
1790b0d8713Smrg
1800b0d8713Smrg    if (a == 0 || b == 0)
1810b0d8713Smrg        return 0;
1820b0d8713Smrg
1830b0d8713Smrg    if (a > INT_MAX / b)
1840b0d8713Smrg        return -1;
1850b0d8713Smrg
1860b0d8713Smrg    return a * b;
1870b0d8713Smrg}
1880b0d8713Smrg
1890b0d8713Smrgstatic _X_INLINE int
1900b0d8713Smrgsafe_pad(int a)
1910b0d8713Smrg{
1920b0d8713Smrg    int ret;
1930b0d8713Smrg
1940b0d8713Smrg    if (a < 0)
1950b0d8713Smrg        return -1;
1960b0d8713Smrg
1970b0d8713Smrg    if ((ret = safe_add(a, 3)) < 0)
1980b0d8713Smrg        return -1;
1990b0d8713Smrg
2000b0d8713Smrg    return ret & (GLuint)~3;
2010b0d8713Smrg}
2020b0d8713Smrg
2034642e01fSmrgextern int __glXTypeSize(GLenum enm);
2044642e01fSmrgextern int __glXImageSize(GLenum format, GLenum type,
205f7df2e56Smrg                          GLenum target, GLsizei w, GLsizei h, GLsizei d,
206f7df2e56Smrg                          GLint imageHeight, GLint rowLength, GLint skipImages,
207f7df2e56Smrg                          GLint skipRows, GLint alignment);
2084642e01fSmrg
2096747b715Smrgextern unsigned glxMajorVersion;
2106747b715Smrgextern unsigned glxMinorVersion;
2116747b715Smrg
2126747b715Smrgextern int __glXEventBase;
2136747b715Smrg
214f7df2e56Smrg#endif                          /* !__GLX_server_h__ */
215