61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#ifdef HAVE_DIX_CONFIG_H
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <dix-config.h>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#ifndef _GLX_context_h_
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define _GLX_context_h_
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Permission is hereby granted, free of charge, to any person obtaining a
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * copy of this software and associated documentation files (the "Software"),
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * to deal in the Software without restriction, including without limitation
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * the rights to use, copy, modify, merge, publish, distribute, sublicense,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * and/or sell copies of the Software, and to permit persons to whom the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Software is furnished to do so, subject to the following conditions:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * The above copyright notice including the dates of first publication and
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * either this permission notice or a reference to
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * http://oss.sgi.com/projects/FreeB/
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * shall be included in all copies or substantial portions of the Software.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * SOFTWARE.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Except as contained in this notice, the name of Silicon Graphics, Inc.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * shall not be used in advertising or otherwise to promote the sale, use or
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * other dealings in this Software without prior written authorization from
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Silicon Graphics, Inc.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct __GLXtextureFromPixmap __GLXtextureFromPixmap;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncstruct __GLXtextureFromPixmap {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int (*bindTexImage) (__GLXcontext * baseContext,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int buffer, __GLXdrawable * pixmap);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int (*releaseTexImage) (__GLXcontext * baseContext,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int buffer, __GLXdrawable * pixmap);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncstruct __GLXcontext {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void (*destroy) (__GLXcontext * context);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int (*makeCurrent) (__GLXcontext * context);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int (*loseCurrent) (__GLXcontext * context);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int (*copy) (__GLXcontext * dst, __GLXcontext * src, unsigned long mask);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Bool (*wait) (__GLXcontext * context, __GLXclientState * cl, int *error);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXtextureFromPixmap *textureFromPixmap;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** list of context structs
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXcontext *next;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** config struct for this context
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXconfig *config;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** Pointer to screen info data for this context. This is set
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** when the context is created.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXscreen *pGlxScreen;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** If this context is current for a client, this will be that client
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ClientPtr currentClient;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** The XID of this context.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync XID id;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** The XID of the shareList context.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync XID share_id;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** Whether this context's ID still exists.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLboolean idExists;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** Whether this context is a direct rendering context.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLboolean isDirect;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** This flag keeps track of whether there are unflushed GL commands.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLboolean hasUnflushedCommands;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** Current rendering mode for this context.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLenum renderMode;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Reset notification strategy used when a GPU reset occurs.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLenum resetNotificationStrategy;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** Buffers for feedback and selection.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLfloat *feedbackBuf;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLint feedbackBufSize; /* number of elements allocated */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLuint *selectBuf;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync GLint selectBufSize; /* number of elements allocated */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync ** The drawable private this context is bound to
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXdrawable *drawPriv;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXdrawable *readPriv;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncvoid __glXContextDestroy(__GLXcontext * context);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern int validGlxScreen(ClientPtr client, int screen,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXscreen ** pGlxScreen, int *err);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern int validGlxFBConfig(ClientPtr client, __GLXscreen * pGlxScreen,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync XID id, __GLXconfig ** config, int *err);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern int validGlxContext(ClientPtr client, XID id, int access_mode,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXcontext ** context, int *err);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern __GLXcontext *__glXdirectContextCreate(__GLXscreen * screen,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXconfig * modes,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync __GLXcontext * shareContext);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif /* !__GLX_context_h__ */