glxserver.h revision 4642e01f
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/*
504642e01fSmrg** The X header misc.h defines these math functions.
514642e01fSmrg*/
524642e01fSmrg#undef abs
534642e01fSmrg#undef fabs
544642e01fSmrg
554642e01fSmrg#define GL_GLEXT_PROTOTYPES /* we want prototypes */
564642e01fSmrg#include <GL/gl.h>
574642e01fSmrg#include <GL/glxproto.h>
584642e01fSmrg#include <GL/glxint.h>
594642e01fSmrg
604642e01fSmrg/* For glxscreens.h */
614642e01fSmrgtypedef struct __GLXdrawable __GLXdrawable;
624642e01fSmrgtypedef struct __GLXcontext __GLXcontext;
634642e01fSmrg
644642e01fSmrg#include "glxscreens.h"
654642e01fSmrg#include "glxdrawable.h"
664642e01fSmrg#include "glxcontext.h"
674642e01fSmrg
684642e01fSmrg
694642e01fSmrg#define GLX_SERVER_MAJOR_VERSION 1
704642e01fSmrg#define GLX_SERVER_MINOR_VERSION 2
714642e01fSmrg
724642e01fSmrg#ifndef True
734642e01fSmrg#define True 1
744642e01fSmrg#endif
754642e01fSmrg#ifndef False
764642e01fSmrg#define False 0
774642e01fSmrg#endif
784642e01fSmrg
794642e01fSmrg/*
804642e01fSmrg** GLX resources.
814642e01fSmrg*/
824642e01fSmrgtypedef XID GLXContextID;
834642e01fSmrgtypedef XID GLXPixmap;
844642e01fSmrgtypedef XID GLXDrawable;
854642e01fSmrg
864642e01fSmrgtypedef struct __GLXclientStateRec __GLXclientState;
874642e01fSmrg
884642e01fSmrgextern __GLXscreen *glxGetScreen(ScreenPtr pScreen);
894642e01fSmrgextern __GLXclientState *glxGetClient(ClientPtr pClient);
904642e01fSmrg
914642e01fSmrg/************************************************************************/
924642e01fSmrg
934642e01fSmrgvoid GlxExtensionInit(void);
944642e01fSmrg
954642e01fSmrgvoid GlxSetVisualConfigs(int nconfigs,
964642e01fSmrg                         __GLXvisualConfig *configs, void **privates);
974642e01fSmrg
984642e01fSmrgstruct _glapi_table;
994642e01fSmrgvoid GlxSetRenderTables (struct _glapi_table *table);
1004642e01fSmrg
1014642e01fSmrgvoid __glXScreenInitVisuals(__GLXscreen *screen);
1024642e01fSmrg
1034642e01fSmrg/*
1044642e01fSmrg** The last context used (from the server's persective) is cached.
1054642e01fSmrg*/
1064642e01fSmrgextern __GLXcontext *__glXLastContext;
1074642e01fSmrgextern __GLXcontext *__glXForceCurrent(__GLXclientState*, GLXContextTag, int*);
1084642e01fSmrg
1094642e01fSmrgextern ClientPtr __pGlxClient;
1104642e01fSmrg
1114642e01fSmrgint __glXError(int error);
1124642e01fSmrg
1134642e01fSmrg/*
1144642e01fSmrg** Macros to set, unset, and retrieve the flag that says whether a context
1154642e01fSmrg** has unflushed commands.
1164642e01fSmrg*/
1174642e01fSmrg#define __GLX_NOTE_UNFLUSHED_CMDS(glxc) glxc->hasUnflushedCommands = GL_TRUE
1184642e01fSmrg#define __GLX_NOTE_FLUSHED_CMDS(glxc) glxc->hasUnflushedCommands = GL_FALSE
1194642e01fSmrg#define __GLX_HAS_UNFLUSHED_CMDS(glxc) (glxc->hasUnflushedCommands)
1204642e01fSmrg
1214642e01fSmrg/************************************************************************/
1224642e01fSmrg
1234642e01fSmrgtypedef struct __GLXprovider __GLXprovider;
1244642e01fSmrgstruct __GLXprovider {
1254642e01fSmrg    __GLXscreen *(*screenProbe)(ScreenPtr pScreen);
1264642e01fSmrg    const char    *name;
1274642e01fSmrg    __GLXprovider *next;
1284642e01fSmrg};
1294642e01fSmrg
1304642e01fSmrgvoid GlxPushProvider(__GLXprovider *provider);
1314642e01fSmrg
1324642e01fSmrgenum {
1334642e01fSmrg    GLX_MINIMAL_VISUALS,
1344642e01fSmrg    GLX_TYPICAL_VISUALS,
1354642e01fSmrg    GLX_ALL_VISUALS
1364642e01fSmrg};
1374642e01fSmrg
1384642e01fSmrgvoid __glXsetEnterLeaveServerFuncs(void (*enter)(GLboolean),
1394642e01fSmrg				   void (*leave)(GLboolean));
1404642e01fSmrgvoid __glXenterServer(GLboolean rendering);
1414642e01fSmrgvoid __glXleaveServer(GLboolean rendering);
1424642e01fSmrg
1434642e01fSmrgvoid glxSuspendClients(void);
1444642e01fSmrgvoid glxResumeClients(void);
1454642e01fSmrg
1464642e01fSmrg/*
1474642e01fSmrg** State kept per client.
1484642e01fSmrg*/
1494642e01fSmrgstruct __GLXclientStateRec {
1504642e01fSmrg    /*
1514642e01fSmrg    ** Whether this structure is currently being used to support a client.
1524642e01fSmrg    */
1534642e01fSmrg    Bool inUse;
1544642e01fSmrg
1554642e01fSmrg    /*
1564642e01fSmrg    ** Buffer for returned data.
1574642e01fSmrg    */
1584642e01fSmrg    GLbyte *returnBuf;
1594642e01fSmrg    GLint returnBufSize;
1604642e01fSmrg
1614642e01fSmrg    /*
1624642e01fSmrg    ** Keep track of large rendering commands, which span multiple requests.
1634642e01fSmrg    */
1644642e01fSmrg    GLint largeCmdBytesSoFar;		/* bytes received so far	*/
1654642e01fSmrg    GLint largeCmdBytesTotal;		/* total bytes expected		*/
1664642e01fSmrg    GLint largeCmdRequestsSoFar;	/* requests received so far	*/
1674642e01fSmrg    GLint largeCmdRequestsTotal;	/* total requests expected	*/
1684642e01fSmrg    GLbyte *largeCmdBuf;
1694642e01fSmrg    GLint largeCmdBufSize;
1704642e01fSmrg
1714642e01fSmrg    /*
1724642e01fSmrg    ** Keep a list of all the contexts that are current for this client's
1734642e01fSmrg    ** threads.
1744642e01fSmrg    */
1754642e01fSmrg    __GLXcontext **currentContexts;
1764642e01fSmrg    GLint numCurrentContexts;
1774642e01fSmrg
1784642e01fSmrg    /* Back pointer to X client record */
1794642e01fSmrg    ClientPtr client;
1804642e01fSmrg
1814642e01fSmrg    int GLClientmajorVersion;
1824642e01fSmrg    int GLClientminorVersion;
1834642e01fSmrg    char *GLClientextensions;
1844642e01fSmrg};
1854642e01fSmrg
1864642e01fSmrg/************************************************************************/
1874642e01fSmrg
1884642e01fSmrg/*
1894642e01fSmrg** Dispatch tables.
1904642e01fSmrg*/
1914642e01fSmrgtypedef void (*__GLXdispatchRenderProcPtr)(GLbyte *);
1924642e01fSmrgtypedef int (*__GLXdispatchSingleProcPtr)(__GLXclientState *, GLbyte *);
1934642e01fSmrgtypedef int (*__GLXdispatchVendorPrivProcPtr)(__GLXclientState *, GLbyte *);
1944642e01fSmrg
1954642e01fSmrg/*
1964642e01fSmrg * Dispatch for GLX commands.
1974642e01fSmrg */
1984642e01fSmrgtypedef int (*__GLXprocPtr)(__GLXclientState *, char *pc);
1994642e01fSmrg
2004642e01fSmrg/*
2014642e01fSmrg * Tables for computing the size of each rendering command.
2024642e01fSmrg */
2034642e01fSmrgtypedef int (*gl_proto_size_func)(const GLbyte *, Bool);
2044642e01fSmrg
2054642e01fSmrgtypedef struct {
2064642e01fSmrg    int bytes;
2074642e01fSmrg    gl_proto_size_func varsize;
2084642e01fSmrg} __GLXrenderSizeData;
2094642e01fSmrg
2104642e01fSmrg/************************************************************************/
2114642e01fSmrg
2124642e01fSmrg/*
2134642e01fSmrg** X resources.
2144642e01fSmrg*/
2154642e01fSmrgextern RESTYPE __glXContextRes;
2164642e01fSmrgextern RESTYPE __glXClientRes;
2174642e01fSmrgextern RESTYPE __glXPixmapRes;
2184642e01fSmrgextern RESTYPE __glXDrawableRes;
2194642e01fSmrg
2204642e01fSmrg/************************************************************************/
2214642e01fSmrg
2224642e01fSmrg/*
2234642e01fSmrg** Prototypes.
2244642e01fSmrg*/
2254642e01fSmrg
2264642e01fSmrgextern char *__glXcombine_strings(const char *, const char *);
2274642e01fSmrg
2284642e01fSmrg/*
2294642e01fSmrg** Routines for sending swapped replies.
2304642e01fSmrg*/
2314642e01fSmrg
2324642e01fSmrgextern void __glXSwapMakeCurrentReply(ClientPtr client,
2334642e01fSmrg				      xGLXMakeCurrentReply *reply);
2344642e01fSmrgextern void __glXSwapIsDirectReply(ClientPtr client,
2354642e01fSmrg				   xGLXIsDirectReply *reply);
2364642e01fSmrgextern void __glXSwapQueryVersionReply(ClientPtr client,
2374642e01fSmrg				       xGLXQueryVersionReply *reply);
2384642e01fSmrgextern void __glXSwapQueryContextInfoEXTReply(ClientPtr client,
2394642e01fSmrg					      xGLXQueryContextInfoEXTReply *reply,
2404642e01fSmrg					      int *buf);
2414642e01fSmrgextern void __glXSwapGetDrawableAttributesReply(ClientPtr client,
2424642e01fSmrg						xGLXGetDrawableAttributesReply *reply, CARD32 *buf);
2434642e01fSmrgextern void glxSwapQueryExtensionsStringReply(ClientPtr client,
2444642e01fSmrg				xGLXQueryExtensionsStringReply *reply, char *buf);
2454642e01fSmrgextern void glxSwapQueryServerStringReply(ClientPtr client,
2464642e01fSmrg				xGLXQueryServerStringReply *reply, char *buf);
2474642e01fSmrg
2484642e01fSmrg
2494642e01fSmrg/*
2504642e01fSmrg * Routines for computing the size of variably-sized rendering commands.
2514642e01fSmrg */
2524642e01fSmrg
2534642e01fSmrgextern int __glXTypeSize(GLenum enm);
2544642e01fSmrgextern int __glXImageSize(GLenum format, GLenum type,
2554642e01fSmrg    GLenum target, GLsizei w, GLsizei h, GLsizei d,
2564642e01fSmrg    GLint imageHeight, GLint rowLength, GLint skipImages, GLint skipRows,
2574642e01fSmrg    GLint alignment);
2584642e01fSmrg
2594642e01fSmrg#endif /* !__GLX_server_h__ */
260