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