1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 6.5.1 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file context.h 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa context and visual-related functions. 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * There are three large Mesa data types/classes which are meant to be 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * used by device drivers: 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - struct gl_context: this contains the Mesa rendering state 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - struct gl_config: this describes the color buffer (RGB vs. ci), whether 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or not there's a depth buffer, stencil buffer, etc. 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - struct gl_framebuffer: contains pointers to the depth buffer, stencil 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * buffer, accum buffer and alpha buffers. 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These types should be encapsulated by corresponding device driver 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * data types. See xmesa.h and xmesaP.h for an example. 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * In OOP terms, struct gl_context, struct gl_config, and struct gl_framebuffer 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * are base classes which the device driver must derive from. 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The following functions create and destroy these data types. 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef CONTEXT_H 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CONTEXT_H 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "imports.h" 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "mtypes.h" 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct _glapi_table; 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** \name Visual-related functions */ 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct gl_config * 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_create_visual( GLboolean dbFlag, 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean stereoFlag, 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint redBits, 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint greenBits, 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint blueBits, 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint alphaBits, 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint depthBits, 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint stencilBits, 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumRedBits, 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumGreenBits, 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumBlueBits, 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumAlphaBits, 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint numSamples ); 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern GLboolean 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_initialize_visual( struct gl_config *v, 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean dbFlag, 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean stereoFlag, 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint redBits, 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint greenBits, 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint blueBits, 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint alphaBits, 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint depthBits, 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint stencilBits, 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumRedBits, 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumGreenBits, 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumBlueBits, 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumAlphaBits, 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint numSamples ); 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_destroy_visual( struct gl_config *vis ); 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** \name Context-related functions */ 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern GLboolean 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_initialize_context( struct gl_context *ctx, 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_api api, 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_config *visual, 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *share_list, 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct dd_function_table *driverFunctions, 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *driverContext ); 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct gl_context * 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_create_context(gl_api api, 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_config *visual, 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *share_list, 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct dd_function_table *driverFunctions, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *driverContext); 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_free_context_data( struct gl_context *ctx ); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_destroy_context( struct gl_context *ctx ); 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_copy_context(const struct gl_context *src, struct gl_context *dst, GLuint mask); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_check_init_viewport(struct gl_context *ctx, GLuint width, GLuint height); 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern GLboolean 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_make_current( struct gl_context *ctx, struct gl_framebuffer *drawBuffer, 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_framebuffer *readBuffer ); 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern GLboolean 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_share_state(struct gl_context *ctx, struct gl_context *ctxToShare); 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct gl_context * 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_get_current_context(void); 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_init_get_hash(struct gl_context *ctx); 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_notifySwapBuffers(struct gl_context *gc); 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct _glapi_table * 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_get_dispatch(struct gl_context *ctx); 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_set_mvp_with_dp4( struct gl_context *ctx, 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean flag ); 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern GLboolean 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_valid_to_render(struct gl_context *ctx, const char *where); 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** \name Miscellaneous */ 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_record_error( struct gl_context *ctx, GLenum error ); 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_finish(struct gl_context *ctx); 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_flush(struct gl_context *ctx); 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void GLAPIENTRY 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_Finish( void ); 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void GLAPIENTRY 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_Flush( void ); 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Macros for flushing buffered rendering commands before state changes, 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * checking if inside glBegin/glEnd, etc. 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Flush vertices. 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx GL context. 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param newstate new state. 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Checks if dd_function_table::NeedFlush is marked to flush stored vertices, 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and calls dd_function_table::FlushVertices if so. Marks 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * __struct gl_contextRec::NewState with \p newstate. 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FLUSH_VERTICES(ctx, newstate) \ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (MESA_VERBOSE & VERBOSE_STATE) \ 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_debug(ctx, "FLUSH_VERTICES in %s\n", MESA_FUNCTION);\ 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \ 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES); \ 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->NewState |= newstate; \ 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Flush current state. 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx GL context. 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param newstate new state. 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Checks if dd_function_table::NeedFlush is marked to flush current state, 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and calls dd_function_table::FlushVertices if so. Marks 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * __struct gl_contextRec::NewState with \p newstate. 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FLUSH_CURRENT(ctx, newstate) \ 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (MESA_VERBOSE & VERBOSE_STATE) \ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_debug(ctx, "FLUSH_CURRENT in %s\n", MESA_FUNCTION); \ 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Driver.FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->NewState |= newstate; \ 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Macro to assert that the API call was made outside the 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glBegin()/glEnd() pair, with return value. 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx GL context. 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param retval value to return in case the assertion fails. 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \ 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return retval; \ 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Macro to assert that the API call was made outside the 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glBegin()/glEnd() pair. 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx GL context. 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ASSERT_OUTSIDE_BEGIN_END(ctx) \ 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; \ 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } \ 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Macro to assert that the API call was made outside the 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glBegin()/glEnd() pair and flush the vertices. 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx GL context. 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx) \ 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END(ctx); \ 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, 0); \ 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Macro to assert that the API call was made outside the 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glBegin()/glEnd() pair and flush the vertices, with return value. 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx GL context. 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param retval value to return in case the assertion fails. 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, retval) \ 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval); \ 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, 0); \ 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Checks if the context is for Desktop GL (Compatibility or Core) 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline GLboolean 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_desktop_gl(const struct gl_context *ctx) 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->API == API_OPENGL || ctx->API == API_OPENGL_CORE; 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Checks if the context is for any GLES version 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline GLboolean 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_gles(const struct gl_context *ctx) 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2; 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Checks if the context is for GLES 3.x 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline GLboolean 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_gles3(const struct gl_context *ctx) 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->API == API_OPENGLES2 && ctx->Version >= 30; 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* CONTEXT_H */ 329