Imported Upstream version 1.15.1
[deb_xorg-server.git] / glx / glxcontext.h
CommitLineData
a09e091a
JB
1#ifdef HAVE_DIX_CONFIG_H
2#include <dix-config.h>
3#endif
4
5#ifndef _GLX_context_h_
6#define _GLX_context_h_
7
8/*
9 * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
10 * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
11 *
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
18 *
19 * The above copyright notice including the dates of first publication and
20 * either this permission notice or a reference to
21 * http://oss.sgi.com/projects/FreeB/
22 * shall be included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
28 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
29 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
31 *
32 * Except as contained in this notice, the name of Silicon Graphics, Inc.
33 * shall not be used in advertising or otherwise to promote the sale, use or
34 * other dealings in this Software without prior written authorization from
35 * Silicon Graphics, Inc.
36 */
37
38typedef struct __GLXtextureFromPixmap __GLXtextureFromPixmap;
39struct __GLXtextureFromPixmap {
40 int (*bindTexImage) (__GLXcontext * baseContext,
41 int buffer, __GLXdrawable * pixmap);
42 int (*releaseTexImage) (__GLXcontext * baseContext,
43 int buffer, __GLXdrawable * pixmap);
44};
45
46struct __GLXcontext {
47 void (*destroy) (__GLXcontext * context);
48 int (*makeCurrent) (__GLXcontext * context);
49 int (*loseCurrent) (__GLXcontext * context);
50 int (*copy) (__GLXcontext * dst, __GLXcontext * src, unsigned long mask);
51 Bool (*wait) (__GLXcontext * context, __GLXclientState * cl, int *error);
52
53 __GLXtextureFromPixmap *textureFromPixmap;
54
55 /*
56 ** list of context structs
57 */
58 __GLXcontext *next;
59
60 /*
61 ** config struct for this context
62 */
63 __GLXconfig *config;
64
65 /*
66 ** Pointer to screen info data for this context. This is set
67 ** when the context is created.
68 */
69 __GLXscreen *pGlxScreen;
70
71 /*
72 ** If this context is current for a client, this will be that client
73 */
74 ClientPtr currentClient;
75
76 /*
77 ** The XID of this context.
78 */
79 XID id;
80
81 /*
82 ** The XID of the shareList context.
83 */
84 XID share_id;
85
86 /*
87 ** Whether this context's ID still exists.
88 */
89 GLboolean idExists;
90
91 /*
92 ** Whether this context is a direct rendering context.
93 */
94 GLboolean isDirect;
95
96 /*
97 ** This flag keeps track of whether there are unflushed GL commands.
98 */
99 GLboolean hasUnflushedCommands;
100
101 /*
102 ** Current rendering mode for this context.
103 */
104 GLenum renderMode;
105
106 /**
107 * Reset notification strategy used when a GPU reset occurs.
108 */
109 GLenum resetNotificationStrategy;
110
111 /*
112 ** Buffers for feedback and selection.
113 */
114 GLfloat *feedbackBuf;
115 GLint feedbackBufSize; /* number of elements allocated */
116 GLuint *selectBuf;
117 GLint selectBufSize; /* number of elements allocated */
118
119 /*
120 ** The drawable private this context is bound to
121 */
122 __GLXdrawable *drawPriv;
123 __GLXdrawable *readPriv;
124};
125
126void __glXContextDestroy(__GLXcontext * context);
127
128extern int validGlxScreen(ClientPtr client, int screen,
129 __GLXscreen ** pGlxScreen, int *err);
130
131extern int validGlxFBConfig(ClientPtr client, __GLXscreen * pGlxScreen,
132 XID id, __GLXconfig ** config, int *err);
133
134extern int validGlxContext(ClientPtr client, XID id, int access_mode,
135 __GLXcontext ** context, int *err);
136
137extern __GLXcontext *__glXdirectContextCreate(__GLXscreen * screen,
138 __GLXconfig * modes,
139 __GLXcontext * shareContext);
140
141#endif /* !__GLX_context_h__ */