context.h revision d3fd7ba8af15bead2f770d68a893449adeb11397
16dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
26dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \file context.h
36dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Mesa context/visual/framebuffer management functions.
46dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
56dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * There are three Mesa data types which are meant to be used by device
66dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * drivers:
76dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * - GLcontext: this contains the Mesa rendering state
86dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * - GLvisual:  this describes the color buffer (RGB vs. ci), whether or not
96dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *   there's a depth buffer, stencil buffer, etc.
106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * - GLframebuffer:  contains pointers to the depth buffer, stencil buffer,
116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *   accum buffer and alpha buffers.
126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
136dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * These types should be encapsulated by corresponding device driver
146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * data types.  See xmesa.h and xmesaP.h for an example.
156dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
166dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes
176dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * which the device driver must derive from.
186dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
196dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * The following functions create and destroy these data types.
206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library
2486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul * Version:  4.1
255e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
2622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a
29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"),
30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation
31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the
33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions:
345e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included
36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software.
375e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
47afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifndef CONTEXT_H
48afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define CONTEXT_H
49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
50afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
510003778847df6adb792f453df83808fefa560f18Brian Paul#include "glapi.h"
52ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell#include "imports.h"
535e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h"
54afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** \name Create/destroy a GLvisual. */
586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/
596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
60b371e0da2b51da7d941de557b62434aaaca5be02Brian Paulextern GLvisual *
61b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul_mesa_create_visual( GLboolean rgbFlag,
62b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLboolean dbFlag,
63b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLboolean stereoFlag,
64b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint redBits,
65b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint greenBits,
66b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint blueBits,
67b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint alphaBits,
68b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint indexBits,
69b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint depthBits,
70b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint stencilBits,
71b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint accumRedBits,
72b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint accumGreenBits,
73b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint accumBlueBits,
74b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint accumAlphaBits,
75b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul                     GLint numSamples );
76b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul
77178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern GLboolean
78178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul_mesa_initialize_visual( GLvisual *v,
79178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLboolean rgbFlag,
80178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLboolean dbFlag,
81178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLboolean stereoFlag,
82178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint redBits,
83178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint greenBits,
84178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint blueBits,
85178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint alphaBits,
86178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint indexBits,
87178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint depthBits,
88178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint stencilBits,
89178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint accumRedBits,
90178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint accumGreenBits,
91178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint accumBlueBits,
92178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint accumAlphaBits,
93178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                         GLint numSamples );
94178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul
95b371e0da2b51da7d941de557b62434aaaca5be02Brian Paulextern void
96b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul_mesa_destroy_visual( GLvisual *vis );
97b371e0da2b51da7d941de557b62434aaaca5be02Brian Paul
986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/
99afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
100178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul
1016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
1026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** \name Create/destroy a GLframebuffer. */
1036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/
1046dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
105178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern GLframebuffer *
106be3602da412ae56b5ee019fc47cc282eb3d66fadBrian Paul_mesa_create_framebuffer( const GLvisual *visual,
107b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul                          GLboolean softwareDepth,
108b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul                          GLboolean softwareStencil,
109b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul                          GLboolean softwareAccum,
110b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul                          GLboolean softwareAlpha );
111178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul
112178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
113178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul_mesa_initialize_framebuffer( GLframebuffer *fb,
114be3602da412ae56b5ee019fc47cc282eb3d66fadBrian Paul                              const GLvisual *visual,
115178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                              GLboolean softwareDepth,
116178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                              GLboolean softwareStencil,
117178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                              GLboolean softwareAccum,
118178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                              GLboolean softwareAlpha );
1190003778847df6adb792f453df83808fefa560f18Brian Paul
120178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
12175978bd85ea86b4e0a4153d623eaf1d40976f49bBrian Paul_mesa_free_framebuffer_data( GLframebuffer *buffer );
12275978bd85ea86b4e0a4153d623eaf1d40976f49bBrian Paul
12375978bd85ea86b4e0a4153d623eaf1d40976f49bBrian Paulextern void
124b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul_mesa_destroy_framebuffer( GLframebuffer *buffer );
1250003778847df6adb792f453df83808fefa560f18Brian Paul
1266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/
1270003778847df6adb792f453df83808fefa560f18Brian Paul
1280003778847df6adb792f453df83808fefa560f18Brian Paul
1296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
1306dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** \name Create/destroy a GLcontext. */
1316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/
1326dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
133178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern GLcontext *
134be3602da412ae56b5ee019fc47cc282eb3d66fadBrian Paul_mesa_create_context( const GLvisual *visual,
135b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul                      GLcontext *share_list,
136d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul                      const struct dd_function_table *driverFunctions,
137d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul                      void *driverContext );
138178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul
139178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern GLboolean
140178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul_mesa_initialize_context( GLcontext *ctx,
141be3602da412ae56b5ee019fc47cc282eb3d66fadBrian Paul                          const GLvisual *visual,
142178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paul                          GLcontext *share_list,
143d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul                          const struct dd_function_table *driverFunctions,
144d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul                          void *driverContext );
145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
146178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
147b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul_mesa_free_context_data( GLcontext *ctx );
1484d053ddae8cc48dd29a75e67290cd09ed995f5c3Brian Paul
149178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
150b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul_mesa_destroy_context( GLcontext *ctx );
1514d053ddae8cc48dd29a75e67290cd09ed995f5c3Brian Paul
152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
153178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
154b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul_mesa_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask);
1550498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
1560498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
157178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
158b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul_mesa_make_current( GLcontext *ctx, GLframebuffer *buffer );
1590498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
161178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
162b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul_mesa_make_current2( GLcontext *ctx, GLframebuffer *drawBuffer,
163be3602da412ae56b5ee019fc47cc282eb3d66fadBrian Paul                     GLframebuffer *readBuffer );
1640003778847df6adb792f453df83808fefa560f18Brian Paul
1653f02f90f943a996d88abc20f74503afbb56a4c98Brian Paul
166178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern GLcontext *
167b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul_mesa_get_current_context(void);
168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/
1700498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
1710498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
1726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
1736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Macro for declaration and fetching the current context.
1746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \param C local variable which will hold the current context.
1766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * It should be used in the variable declaration area of a function:
1786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \code
1796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * ...
1806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * {
1816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *   GET_CURRENT_CONTEXT(ctx);
1826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *   ...
1836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \endcode
184c633693a28caa6ba09bb04e283b485f54f4d498eBrian Paul */
1850003778847df6adb792f453df83808fefa560f18Brian Paul#ifdef THREADS
1860003778847df6adb792f453df83808fefa560f18Brian Paul
187f9b97d95f9bf9286107586d6afdadae74bb94d36Brian Paul#define GET_CURRENT_CONTEXT(C)	GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context())
18826e14d2ea15c12a1534f3a76278f149cd0a6278cBrian Paul
1890498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul#else
1900498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
191959f802dabd4f4347dc0ea925ae687abb6938588Brian Paul#define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) _glapi_Context
19226e14d2ea15c12a1534f3a76278f149cd0a6278cBrian Paul
1930498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul#endif
1940498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
1950498682406d23226b5bc8973e02c7b3a9e0bdeaaBrian Paul
196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
1986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** \name OpenGL SI-style export functions. */
1996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/
2009a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2019a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern GLboolean
2029a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_destroyContext(__GLcontext *gc);
2039a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2049a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern GLboolean
2059a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_loseCurrent(__GLcontext *gc);
2069a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2079a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern GLboolean
2089a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_makeCurrent(__GLcontext *gc);
2099a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2109a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern GLboolean
2119a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_shareContext(__GLcontext *gc, __GLcontext *gcShare);
2129a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2139a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern GLboolean
2149a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_copyContext(__GLcontext *dst, const __GLcontext *src, GLuint mask);
2159a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2169a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern GLboolean
2179a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_forceCurrent(__GLcontext *gc);
2189a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2199a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern GLboolean
2209a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_notifyResize(__GLcontext *gc);
2219a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
222fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulextern void
2239a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_notifyDestroy(__GLcontext *gc);
2249a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2259a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern void
2269a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_notifySwapBuffers(__GLcontext *gc);
2279a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2282f35d5e9d53165f6baf2d4a7fece3bb39d945323Brian Paulextern struct __GLdispatchStateRec *
2299a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_dispatchExec(__GLcontext *gc);
2309a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2319a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern void
2329a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_beginDispatchOverride(__GLcontext *gc);
2339a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
2349a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paulextern void
2359a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul_mesa_endDispatchOverride(__GLcontext *gc);
236fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
2376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/
2380003778847df6adb792f453df83808fefa560f18Brian Paul
2399a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul
240fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulextern struct _glapi_table *
241fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_get_dispatch(GLcontext *ctx);
242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
2456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
2466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** \name Miscellaneous */
2476dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/
248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
249178a1c5a25b84bab1d5aae9e14694b531feea3caBrian Paulextern void
2504e9676fb13f60ecdbc247b120031f18cd3febcb0Brian Paul_mesa_record_error( GLcontext *ctx, GLenum error );
251d09a1d8b29ae5841ae39b5c24c3f4693dd750559Brian Paul
252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
253c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettextern void GLAPIENTRY
254fa9df40e8a40824942ea8c6ec17c06c28bea1102Brian Paul_mesa_Finish( void );
255fa9df40e8a40824942ea8c6ec17c06c28bea1102Brian Paul
256c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettextern void GLAPIENTRY
257fa9df40e8a40824942ea8c6ec17c06c28bea1102Brian Paul_mesa_Flush( void );
258fa9df40e8a40824942ea8c6ec17c06c28bea1102Brian Paul
2596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/
260fa9df40e8a40824942ea8c6ec17c06c28bea1102Brian Paul
26106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
26206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
26306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/**********************************************************************/
26406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/** \name Macros for contexts/flushing. */
26506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/*@{*/
26606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
267ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell
26806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/**
26906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Flush vertices.
27006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
27106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param ctx GL context.
27206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param newstate new state.
27306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
27406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Checks if dd_function_table::NeedFlush is marked to flush stored vertices,
27506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * and calls dd_function_table::FlushVertices if so. Marks
27606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * __GLcontextRec::NewState with \p newstate.
27706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul */
27806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul#define FLUSH_VERTICES(ctx, newstate)				\
27906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Pauldo {								\
28006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   if (MESA_VERBOSE & VERBOSE_STATE)				\
281b65bc4f87b356cf6228151cd2f341432e80dc6b8Brian Paul      _mesa_debug(ctx, "FLUSH_VERTICES in %s\n", MESA_FUNCTION);\
28206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES)		\
28306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul      ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES);	\
28406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   ctx->NewState |= newstate;					\
28506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul} while (0)
28606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
28706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/**
28806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Flush current state.
28906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
29006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param ctx GL context.
29106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param newstate new state.
29206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
29306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Checks if dd_function_table::NeedFlush is marked to flush current state,
29406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * and calls dd_function_table::FlushVertices if so. Marks
29506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * __GLcontextRec::NewState with \p newstate.
29606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul */
29706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul#define FLUSH_CURRENT(ctx, newstate)				\
29806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Pauldo {								\
29906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   if (MESA_VERBOSE & VERBOSE_STATE)				\
300b65bc4f87b356cf6228151cd2f341432e80dc6b8Brian Paul      _mesa_debug(ctx, "FLUSH_CURRENT in %s\n", MESA_FUNCTION);	\
30106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT)		\
30206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul      ctx->Driver.FlushVertices(ctx, FLUSH_UPDATE_CURRENT);	\
30306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   ctx->NewState |= newstate;					\
30406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul} while (0)
30506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
30606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/**
30706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Macro to assert that the API call was made outside the
30806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * glBegin()/glEnd() pair, with return value.
30906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
31006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param ctx GL context.
31106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param retval value to return value in case the assertion fails.
31206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul */
31306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul#define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval)		\
31406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Pauldo {									\
31506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {	\
31606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul      _mesa_error( ctx, GL_INVALID_OPERATION, "begin/end" );		\
31706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul      return retval;							\
31806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   }									\
31906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul} while (0)
32006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
32106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/**
32206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Macro to assert that the API call was made outside the
32306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * glBegin()/glEnd() pair.
32406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
32506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param ctx GL context.
32606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul */
32706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul#define ASSERT_OUTSIDE_BEGIN_END(ctx)					\
32806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Pauldo {									\
32906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {	\
33006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul      _mesa_error( ctx, GL_INVALID_OPERATION, "begin/end" );		\
33106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul      return;								\
33206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   }									\
33306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul} while (0)
33406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
33506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/**
33606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Macro to assert that the API call was made outside the
33706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * glBegin()/glEnd() pair and flush the vertices.
33806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
33906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param ctx GL context.
34006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul */
34106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul#define ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx)				\
34206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Pauldo {									\
34306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);					\
34406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   FLUSH_VERTICES(ctx, 0);						\
34506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul} while (0)
34606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
34706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/**
34806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * Macro to assert that the API call was made outside the
34906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * glBegin()/glEnd() pair and flush the vertices, with return value.
35006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul *
35106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param ctx GL context.
35206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul * \param retval value to return value in case the assertion fails.
35306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul */
35406588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul#define ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, retval)	\
35506588db3fa2c8292db57b3537bb3ad8811d82f46Brian Pauldo {									\
35606588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval);			\
35706588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul   FLUSH_VERTICES(ctx, 0);						\
35806588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul} while (0)
35906588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
36006588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
36106588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul/*@}*/
36206588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
36306588db3fa2c8292db57b3537bb3ad8811d82f46Brian Paul
36429b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
36529b4076f9acff96a867760fc885f5eaeb7586977Brian Paul/**
36629b4076f9acff96a867760fc885f5eaeb7586977Brian Paul * Macros to help evaluate current state conditions
36729b4076f9acff96a867760fc885f5eaeb7586977Brian Paul */
36829b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
36929b4076f9acff96a867760fc885f5eaeb7586977Brian Paul/*@{*/
37029b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
37129b4076f9acff96a867760fc885f5eaeb7586977Brian Paul/**
37229b4076f9acff96a867760fc885f5eaeb7586977Brian Paul * Is the secondary color needed?
37329b4076f9acff96a867760fc885f5eaeb7586977Brian Paul */
37429b4076f9acff96a867760fc885f5eaeb7586977Brian Paul#define NEED_SECONDARY_COLOR(CTX)					\
37529b4076f9acff96a867760fc885f5eaeb7586977Brian Paul   (((CTX)->Light.Enabled &&						\
37629b4076f9acff96a867760fc885f5eaeb7586977Brian Paul     (CTX)->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)	\
377853bda3e7c4dfa7d8cc462729f6a3dce89e44963Brian Paul    || (CTX)->Fog.ColorSumEnabled					\
378853bda3e7c4dfa7d8cc462729f6a3dce89e44963Brian Paul    || ((CTX)->VertexProgram.Enabled &&					\
379853bda3e7c4dfa7d8cc462729f6a3dce89e44963Brian Paul        ((CTX)->VertexProgram.Current->InputsRead & VERT_BIT_COLOR1))	\
380853bda3e7c4dfa7d8cc462729f6a3dce89e44963Brian Paul    || ((CTX)->FragmentProgram.Enabled &&				\
381853bda3e7c4dfa7d8cc462729f6a3dce89e44963Brian Paul        ((CTX)->FragmentProgram.Current->InputsRead & FRAG_BIT_COL1))	\
382853bda3e7c4dfa7d8cc462729f6a3dce89e44963Brian Paul   )
38329b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
38429b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
38529b4076f9acff96a867760fc885f5eaeb7586977Brian Paul/**
38629b4076f9acff96a867760fc885f5eaeb7586977Brian Paul * Is two-sided lighting in effect?
38729b4076f9acff96a867760fc885f5eaeb7586977Brian Paul */
38829b4076f9acff96a867760fc885f5eaeb7586977Brian Paul#define NEED_TWO_SIDED_LIGHTING(CTX) \
38929b4076f9acff96a867760fc885f5eaeb7586977Brian Paul   (ctx->Light.Enabled && ctx->Light.Model.TwoSide)
39029b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
39129b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
39229b4076f9acff96a867760fc885f5eaeb7586977Brian Paul/*@}*/
39329b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
39429b4076f9acff96a867760fc885f5eaeb7586977Brian Paul
395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif
396