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