glxcontext.h revision 35c4bbdf
14642e01fSmrg#ifdef HAVE_DIX_CONFIG_H
24642e01fSmrg#include <dix-config.h>
34642e01fSmrg#endif
44642e01fSmrg
54642e01fSmrg#ifndef _GLX_context_h_
64642e01fSmrg#define _GLX_context_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
384642e01fSmrgtypedef struct __GLXtextureFromPixmap __GLXtextureFromPixmap;
394642e01fSmrgstruct __GLXtextureFromPixmap {
4035c4bbdfSmrg    int (*bindTexImage) (__GLXcontext * baseContext,
4135c4bbdfSmrg                         int buffer, __GLXdrawable * pixmap);
4235c4bbdfSmrg    int (*releaseTexImage) (__GLXcontext * baseContext,
4335c4bbdfSmrg                            int buffer, __GLXdrawable * pixmap);
444642e01fSmrg};
454642e01fSmrg
464642e01fSmrgstruct __GLXcontext {
4735c4bbdfSmrg    void (*destroy) (__GLXcontext * context);
4835c4bbdfSmrg    int (*makeCurrent) (__GLXcontext * context);
4935c4bbdfSmrg    int (*loseCurrent) (__GLXcontext * context);
5035c4bbdfSmrg    int (*copy) (__GLXcontext * dst, __GLXcontext * src, unsigned long mask);
5135c4bbdfSmrg    Bool (*wait) (__GLXcontext * context, __GLXclientState * cl, int *error);
526747b715Smrg
534642e01fSmrg    __GLXtextureFromPixmap *textureFromPixmap;
544642e01fSmrg
554642e01fSmrg    /*
5635c4bbdfSmrg     ** list of context structs
5735c4bbdfSmrg     */
584642e01fSmrg    __GLXcontext *next;
594642e01fSmrg
604642e01fSmrg    /*
6135c4bbdfSmrg     ** config struct for this context
6235c4bbdfSmrg     */
634642e01fSmrg    __GLXconfig *config;
644642e01fSmrg
654642e01fSmrg    /*
6635c4bbdfSmrg     ** Pointer to screen info data for this context.  This is set
6735c4bbdfSmrg     ** when the context is created.
6835c4bbdfSmrg     */
694642e01fSmrg    __GLXscreen *pGlxScreen;
704642e01fSmrg
714642e01fSmrg    /*
7235c4bbdfSmrg     ** If this context is current for a client, this will be that client
7335c4bbdfSmrg     */
7435c4bbdfSmrg    ClientPtr currentClient;
7535c4bbdfSmrg
7635c4bbdfSmrg    /*
7735c4bbdfSmrg     ** The XID of this context.
7835c4bbdfSmrg     */
794642e01fSmrg    XID id;
804642e01fSmrg
814642e01fSmrg    /*
8235c4bbdfSmrg     ** The XID of the shareList context.
8335c4bbdfSmrg     */
844642e01fSmrg    XID share_id;
854642e01fSmrg
864642e01fSmrg    /*
8735c4bbdfSmrg     ** Whether this context's ID still exists.
8835c4bbdfSmrg     */
894642e01fSmrg    GLboolean idExists;
9035c4bbdfSmrg
914642e01fSmrg    /*
9235c4bbdfSmrg     ** Whether this context is a direct rendering context.
9335c4bbdfSmrg     */
944642e01fSmrg    GLboolean isDirect;
954642e01fSmrg
964642e01fSmrg    /*
9735c4bbdfSmrg     ** This flag keeps track of whether there are unflushed GL commands.
9835c4bbdfSmrg     */
994642e01fSmrg    GLboolean hasUnflushedCommands;
10035c4bbdfSmrg
1014642e01fSmrg    /*
10235c4bbdfSmrg     ** Current rendering mode for this context.
10335c4bbdfSmrg     */
1044642e01fSmrg    GLenum renderMode;
10535c4bbdfSmrg
10635c4bbdfSmrg    /**
10735c4bbdfSmrg     * Reset notification strategy used when a GPU reset occurs.
10835c4bbdfSmrg     */
10935c4bbdfSmrg    GLenum resetNotificationStrategy;
11035c4bbdfSmrg
11135c4bbdfSmrg    /**
11235c4bbdfSmrg     * Context release behavior
11335c4bbdfSmrg     */
11435c4bbdfSmrg    GLenum releaseBehavior;
11535c4bbdfSmrg
1164642e01fSmrg    /*
11735c4bbdfSmrg     ** Buffers for feedback and selection.
11835c4bbdfSmrg     */
1194642e01fSmrg    GLfloat *feedbackBuf;
12035c4bbdfSmrg    GLint feedbackBufSize;      /* number of elements allocated */
1214642e01fSmrg    GLuint *selectBuf;
12235c4bbdfSmrg    GLint selectBufSize;        /* number of elements allocated */
1234642e01fSmrg
1244642e01fSmrg    /*
12535c4bbdfSmrg     ** The drawable private this context is bound to
12635c4bbdfSmrg     */
1274642e01fSmrg    __GLXdrawable *drawPriv;
1284642e01fSmrg    __GLXdrawable *readPriv;
1294642e01fSmrg};
1304642e01fSmrg
13135c4bbdfSmrgvoid __glXContextDestroy(__GLXcontext * context);
13235c4bbdfSmrg
13335c4bbdfSmrgextern int validGlxScreen(ClientPtr client, int screen,
13435c4bbdfSmrg                          __GLXscreen ** pGlxScreen, int *err);
13535c4bbdfSmrg
13635c4bbdfSmrgextern int validGlxFBConfig(ClientPtr client, __GLXscreen * pGlxScreen,
13735c4bbdfSmrg                            XID id, __GLXconfig ** config, int *err);
13835c4bbdfSmrg
13935c4bbdfSmrgextern int validGlxContext(ClientPtr client, XID id, int access_mode,
14035c4bbdfSmrg                           __GLXcontext ** context, int *err);
14135c4bbdfSmrg
14235c4bbdfSmrgextern __GLXcontext *__glXdirectContextCreate(__GLXscreen * screen,
14335c4bbdfSmrg                                              __GLXconfig * modes,
14435c4bbdfSmrg                                              __GLXcontext * shareContext);
1454642e01fSmrg
14635c4bbdfSmrg#endif                          /* !__GLX_context_h__ */
147