mtypes.h revision 1591693c7b415e9869157c711fe11263c95d74e
11591693c7b415e9869157c711fe11263c95d74eDavid Li/* 21591693c7b415e9869157c711fe11263c95d74eDavid Li * Mesa 3-D graphics library 31591693c7b415e9869157c711fe11263c95d74eDavid Li * Version: 7.7 41591693c7b415e9869157c711fe11263c95d74eDavid Li * 51591693c7b415e9869157c711fe11263c95d74eDavid Li * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 61591693c7b415e9869157c711fe11263c95d74eDavid Li * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 71591693c7b415e9869157c711fe11263c95d74eDavid Li * 81591693c7b415e9869157c711fe11263c95d74eDavid Li * Permission is hereby granted, free of charge, to any person obtaining a 91591693c7b415e9869157c711fe11263c95d74eDavid Li * copy of this software and associated documentation files (the "Software"), 101591693c7b415e9869157c711fe11263c95d74eDavid Li * to deal in the Software without restriction, including without limitation 111591693c7b415e9869157c711fe11263c95d74eDavid Li * the rights to use, copy, modify, merge, publish, distribute, sublicense, 121591693c7b415e9869157c711fe11263c95d74eDavid Li * and/or sell copies of the Software, and to permit persons to whom the 131591693c7b415e9869157c711fe11263c95d74eDavid Li * Software is furnished to do so, subject to the following conditions: 141591693c7b415e9869157c711fe11263c95d74eDavid Li * 151591693c7b415e9869157c711fe11263c95d74eDavid Li * The above copyright notice and this permission notice shall be included 161591693c7b415e9869157c711fe11263c95d74eDavid Li * in all copies or substantial portions of the Software. 171591693c7b415e9869157c711fe11263c95d74eDavid Li * 181591693c7b415e9869157c711fe11263c95d74eDavid Li * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 191591693c7b415e9869157c711fe11263c95d74eDavid Li * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 201591693c7b415e9869157c711fe11263c95d74eDavid Li * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 211591693c7b415e9869157c711fe11263c95d74eDavid Li * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 221591693c7b415e9869157c711fe11263c95d74eDavid Li * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 231591693c7b415e9869157c711fe11263c95d74eDavid Li * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 241591693c7b415e9869157c711fe11263c95d74eDavid Li */ 251591693c7b415e9869157c711fe11263c95d74eDavid Li 261591693c7b415e9869157c711fe11263c95d74eDavid Li/** 271591693c7b415e9869157c711fe11263c95d74eDavid Li * \file mtypes.h 281591693c7b415e9869157c711fe11263c95d74eDavid Li * Main Mesa data structures. 291591693c7b415e9869157c711fe11263c95d74eDavid Li * 301591693c7b415e9869157c711fe11263c95d74eDavid Li * Please try to mark derived values with a leading underscore ('_'). 311591693c7b415e9869157c711fe11263c95d74eDavid Li */ 321591693c7b415e9869157c711fe11263c95d74eDavid Li 331591693c7b415e9869157c711fe11263c95d74eDavid Li#ifndef MTYPES_H 341591693c7b415e9869157c711fe11263c95d74eDavid Li#define MTYPES_H 351591693c7b415e9869157c711fe11263c95d74eDavid Li 361591693c7b415e9869157c711fe11263c95d74eDavid Li 371591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/glheader.h" 381591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/config.h" 391591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/mfeatures.h" 401591693c7b415e9869157c711fe11263c95d74eDavid Li#include "glapi/glapi.h" 411591693c7b415e9869157c711fe11263c95d74eDavid Li#include "math/m_matrix.h" /* GLmatrix */ 421591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/simple_list.h" /* struct simple_node */ 431591693c7b415e9869157c711fe11263c95d74eDavid Li 441591693c7b415e9869157c711fe11263c95d74eDavid Li 451591693c7b415e9869157c711fe11263c95d74eDavid Li/** 461591693c7b415e9869157c711fe11263c95d74eDavid Li * Color channel data type. 471591693c7b415e9869157c711fe11263c95d74eDavid Li */ 481591693c7b415e9869157c711fe11263c95d74eDavid Li#if CHAN_BITS == 8 491591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLubyte GLchan; 501591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAX 255 511591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAXF 255.0F 521591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_TYPE GL_UNSIGNED_BYTE 531591693c7b415e9869157c711fe11263c95d74eDavid Li#elif CHAN_BITS == 16 541591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLushort GLchan; 551591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAX 65535 561591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAXF 65535.0F 571591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_TYPE GL_UNSIGNED_SHORT 581591693c7b415e9869157c711fe11263c95d74eDavid Li#elif CHAN_BITS == 32 591591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLfloat GLchan; 601591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAX 1.0 611591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAXF 1.0F 621591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_TYPE GL_FLOAT 631591693c7b415e9869157c711fe11263c95d74eDavid Li#else 641591693c7b415e9869157c711fe11263c95d74eDavid Li#error "illegal number of color channel bits" 651591693c7b415e9869157c711fe11263c95d74eDavid Li#endif 661591693c7b415e9869157c711fe11263c95d74eDavid Li 671591693c7b415e9869157c711fe11263c95d74eDavid Li 681591693c7b415e9869157c711fe11263c95d74eDavid Li/** 691591693c7b415e9869157c711fe11263c95d74eDavid Li * Stencil buffer data type. 701591693c7b415e9869157c711fe11263c95d74eDavid Li */ 711591693c7b415e9869157c711fe11263c95d74eDavid Li#if STENCIL_BITS==8 721591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLubyte GLstencil; 731591693c7b415e9869157c711fe11263c95d74eDavid Li#elif STENCIL_BITS==16 741591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLushort GLstencil; 751591693c7b415e9869157c711fe11263c95d74eDavid Li#else 761591693c7b415e9869157c711fe11263c95d74eDavid Li# error "illegal number of stencil bits" 771591693c7b415e9869157c711fe11263c95d74eDavid Li#endif 781591693c7b415e9869157c711fe11263c95d74eDavid Li 791591693c7b415e9869157c711fe11263c95d74eDavid Li 801591693c7b415e9869157c711fe11263c95d74eDavid Li/** 811591693c7b415e9869157c711fe11263c95d74eDavid Li * \name 64-bit extension of GLbitfield. 821591693c7b415e9869157c711fe11263c95d74eDavid Li */ 831591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 841591693c7b415e9869157c711fe11263c95d74eDavid Litypedef GLuint64 GLbitfield64; 851591693c7b415e9869157c711fe11263c95d74eDavid Li 861591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_ONE 1ULL 871591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_ALLONES ~0ULL 881591693c7b415e9869157c711fe11263c95d74eDavid Li 891591693c7b415e9869157c711fe11263c95d74eDavid Li/** Set a single bit */ 901591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_BIT(b) (BITFIELD64_ONE << (b)) 911591693c7b415e9869157c711fe11263c95d74eDavid Li 921591693c7b415e9869157c711fe11263c95d74eDavid Li/** Set a mask of the least significant \c b bits */ 931591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_MASK(b) (((b) >= 64) ? BITFIELD64_ALLONES : \ 941591693c7b415e9869157c711fe11263c95d74eDavid Li (BITFIELD64_BIT(b) - 1)) 951591693c7b415e9869157c711fe11263c95d74eDavid Li 961591693c7b415e9869157c711fe11263c95d74eDavid Li/** 971591693c7b415e9869157c711fe11263c95d74eDavid Li * Set all bits from l (low bit) to h (high bit), inclusive. 981591693c7b415e9869157c711fe11263c95d74eDavid Li * 991591693c7b415e9869157c711fe11263c95d74eDavid Li * \note \C BITFIELD_64_RANGE(0, 63) return 64 set bits. 1001591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1011591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_RANGE(l, h) (BITFIELD64_MASK((h) + 1) & ~BITFIELD64_MASK(l)) 1021591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 1031591693c7b415e9869157c711fe11263c95d74eDavid Li 1041591693c7b415e9869157c711fe11263c95d74eDavid Li 1051591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1061591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Some forward type declarations 1071591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1081591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 1091591693c7b415e9869157c711fe11263c95d74eDavid Listruct _mesa_HashTable; 1101591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_attrib_node; 1111591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_list_extensions; 1121591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_meta_state; 1131591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelstore_attrib; 1141591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_cache; 1151591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_format; 1161591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_image; 1171591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_object; 1181591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_context; 1191591693c7b415e9869157c711fe11263c95d74eDavid Listruct st_context; 1201591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 1211591693c7b415e9869157c711fe11263c95d74eDavid Li 1221591693c7b415e9869157c711fe11263c95d74eDavid Li 1231591693c7b415e9869157c711fe11263c95d74eDavid Li 1241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1251591693c7b415e9869157c711fe11263c95d74eDavid Li * Shader stages. Note that these will become 5 with tessellation. 1261591693c7b415e9869157c711fe11263c95d74eDavid Li * These MUST have the same values as gallium's PIPE_SHADER_* 1271591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1281591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 1291591693c7b415e9869157c711fe11263c95d74eDavid Li{ 1301591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_VERTEX = 0, 1311591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_FRAGMENT = 1, 1321591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_GEOMETRY = 2, 1331591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_TYPES = 3 1341591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_shader_type; 1351591693c7b415e9869157c711fe11263c95d74eDavid Li 1361591693c7b415e9869157c711fe11263c95d74eDavid Li 1371591693c7b415e9869157c711fe11263c95d74eDavid Li 1381591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1391591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for vertex program attributes. 1401591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_NV_vertex_program aliases generic attributes over the conventional 1411591693c7b415e9869157c711fe11263c95d74eDavid Li * attributes. In GL_ARB_vertex_program shader the aliasing is optional. 1421591693c7b415e9869157c711fe11263c95d74eDavid Li * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the 1431591693c7b415e9869157c711fe11263c95d74eDavid Li * generic attributes are distinct/separate). 1441591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1451591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 1461591693c7b415e9869157c711fe11263c95d74eDavid Li{ 1471591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_POS = 0, 1481591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_WEIGHT = 1, 1491591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_NORMAL = 2, 1501591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_COLOR0 = 3, 1511591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_COLOR1 = 4, 1521591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_FOG = 5, 1531591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_COLOR_INDEX = 6, 1541591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_POINT_SIZE = 6, /*alias*/ 1551591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_EDGEFLAG = 7, 1561591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX0 = 8, 1571591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX1 = 9, 1581591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX2 = 10, 1591591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX3 = 11, 1601591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX4 = 12, 1611591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX5 = 13, 1621591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX6 = 14, 1631591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX7 = 15, 1641591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC0 = 16, 1651591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC1 = 17, 1661591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC2 = 18, 1671591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC3 = 19, 1681591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC4 = 20, 1691591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC5 = 21, 1701591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC6 = 22, 1711591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC7 = 23, 1721591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC8 = 24, 1731591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC9 = 25, 1741591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC10 = 26, 1751591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC11 = 27, 1761591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC12 = 28, 1771591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC13 = 29, 1781591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC14 = 30, 1791591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC15 = 31, 1801591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_MAX = 32 1811591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_vert_attrib; 1821591693c7b415e9869157c711fe11263c95d74eDavid Li 1831591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1841591693c7b415e9869157c711fe11263c95d74eDavid Li * Bitflags for vertex attributes. 1851591693c7b415e9869157c711fe11263c95d74eDavid Li * These are used in bitfields in many places. 1861591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1871591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 1881591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_POS (1 << VERT_ATTRIB_POS) 1891591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_WEIGHT (1 << VERT_ATTRIB_WEIGHT) 1901591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_NORMAL (1 << VERT_ATTRIB_NORMAL) 1911591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_COLOR0 (1 << VERT_ATTRIB_COLOR0) 1921591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_COLOR1 (1 << VERT_ATTRIB_COLOR1) 1931591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_FOG (1 << VERT_ATTRIB_FOG) 1941591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_COLOR_INDEX (1 << VERT_ATTRIB_COLOR_INDEX) 1951591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_EDGEFLAG (1 << VERT_ATTRIB_EDGEFLAG) 1961591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX0 (1 << VERT_ATTRIB_TEX0) 1971591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX1 (1 << VERT_ATTRIB_TEX1) 1981591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX2 (1 << VERT_ATTRIB_TEX2) 1991591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX3 (1 << VERT_ATTRIB_TEX3) 2001591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX4 (1 << VERT_ATTRIB_TEX4) 2011591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX5 (1 << VERT_ATTRIB_TEX5) 2021591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX6 (1 << VERT_ATTRIB_TEX6) 2031591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX7 (1 << VERT_ATTRIB_TEX7) 2041591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC0 (1 << VERT_ATTRIB_GENERIC0) 2051591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC1 (1 << VERT_ATTRIB_GENERIC1) 2061591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC2 (1 << VERT_ATTRIB_GENERIC2) 2071591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC3 (1 << VERT_ATTRIB_GENERIC3) 2081591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC4 (1 << VERT_ATTRIB_GENERIC4) 2091591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC5 (1 << VERT_ATTRIB_GENERIC5) 2101591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC6 (1 << VERT_ATTRIB_GENERIC6) 2111591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC7 (1 << VERT_ATTRIB_GENERIC7) 2121591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC8 (1 << VERT_ATTRIB_GENERIC8) 2131591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC9 (1 << VERT_ATTRIB_GENERIC9) 2141591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC10 (1 << VERT_ATTRIB_GENERIC10) 2151591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC11 (1 << VERT_ATTRIB_GENERIC11) 2161591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC12 (1 << VERT_ATTRIB_GENERIC12) 2171591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC13 (1 << VERT_ATTRIB_GENERIC13) 2181591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC14 (1 << VERT_ATTRIB_GENERIC14) 2191591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC15 (1 << VERT_ATTRIB_GENERIC15) 2201591693c7b415e9869157c711fe11263c95d74eDavid Li 2211591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX(u) (1 << (VERT_ATTRIB_TEX0 + (u))) 2221591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC(g) (1 << (VERT_ATTRIB_GENERIC0 + (g))) 2231591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 2241591693c7b415e9869157c711fe11263c95d74eDavid Li 2251591693c7b415e9869157c711fe11263c95d74eDavid Li 2261591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2271591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for vertex program result attributes 2281591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2291591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 2301591693c7b415e9869157c711fe11263c95d74eDavid Li{ 2311591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_HPOS = 0, 2321591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_COL0 = 1, 2331591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_COL1 = 2, 2341591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_FOGC = 3, 2351591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX0 = 4, 2361591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX1 = 5, 2371591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX2 = 6, 2381591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX3 = 7, 2391591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX4 = 8, 2401591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX5 = 9, 2411591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX6 = 10, 2421591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX7 = 11, 2431591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_PSIZ = 12, 2441591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_BFC0 = 13, 2451591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_BFC1 = 14, 2461591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_EDGE = 15, 2471591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_VAR0 = 16, /**< shader varying */ 2481591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_MAX = (VERT_RESULT_VAR0 + MAX_VARYING) 2491591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_vert_result; 2501591693c7b415e9869157c711fe11263c95d74eDavid Li 2511591693c7b415e9869157c711fe11263c95d74eDavid Li 2521591693c7b415e9869157c711fe11263c95d74eDavid Li/*********************************************/ 2531591693c7b415e9869157c711fe11263c95d74eDavid Li 2541591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2551591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for geometry program attributes. 2561591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2571591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 2581591693c7b415e9869157c711fe11263c95d74eDavid Li{ 2591591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_POSITION = 0, 2601591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_COLOR0 = 1, 2611591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_COLOR1 = 2, 2621591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_SECONDARY_COLOR0 = 3, 2631591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_SECONDARY_COLOR1 = 4, 2641591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_FOG_FRAG_COORD = 5, 2651591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_POINT_SIZE = 6, 2661591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_CLIP_VERTEX = 7, 2671591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_PRIMITIVE_ID = 8, 2681591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_TEX_COORD = 9, 2691591693c7b415e9869157c711fe11263c95d74eDavid Li 2701591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_VAR0 = 16, 2711591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_MAX = (GEOM_ATTRIB_VAR0 + MAX_VARYING) 2721591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_geom_attrib; 2731591693c7b415e9869157c711fe11263c95d74eDavid Li 2741591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2751591693c7b415e9869157c711fe11263c95d74eDavid Li * Bitflags for geometry attributes. 2761591693c7b415e9869157c711fe11263c95d74eDavid Li * These are used in bitfields in many places. 2771591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2781591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 2791591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_COLOR0 (1 << GEOM_ATTRIB_COLOR0) 2801591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_COLOR1 (1 << GEOM_ATTRIB_COLOR1) 2811591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_SCOLOR0 (1 << GEOM_ATTRIB_SECONDARY_COLOR0) 2821591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_SCOLOR1 (1 << GEOM_ATTRIB_SECONDARY_COLOR1) 2831591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_TEX_COORD (1 << GEOM_ATTRIB_TEX_COORD) 2841591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_FOG_COORD (1 << GEOM_ATTRIB_FOG_FRAG_COORD) 2851591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_POSITION (1 << GEOM_ATTRIB_POSITION) 2861591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_POINT_SIDE (1 << GEOM_ATTRIB_POINT_SIZE) 2871591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_CLIP_VERTEX (1 << GEOM_ATTRIB_CLIP_VERTEX) 2881591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_PRIM_ID (1 << GEOM_ATTRIB_PRIMITIVE_ID) 2891591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_VAR0 (1 << GEOM_ATTRIB_VAR0) 2901591693c7b415e9869157c711fe11263c95d74eDavid Li 2911591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_VAR(g) (1 << (GEOM_BIT_VAR0 + (g))) 2921591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 2931591693c7b415e9869157c711fe11263c95d74eDavid Li 2941591693c7b415e9869157c711fe11263c95d74eDavid Li 2951591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2961591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for geometry program result attributes 2971591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2981591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 2991591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum { 3001591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_POS = 0, 3011591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_COL0 = 1, 3021591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_COL1 = 2, 3031591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_SCOL0 = 3, 3041591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_SCOL1 = 4, 3051591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_FOGC = 5, 3061591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX0 = 6, 3071591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX1 = 7, 3081591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX2 = 8, 3091591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX3 = 9, 3101591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX4 = 10, 3111591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX5 = 11, 3121591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX6 = 12, 3131591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX7 = 13, 3141591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_PSIZ = 14, 3151591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_CLPV = 15, 3161591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_PRID = 16, 3171591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_LAYR = 17, 3181591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_VAR0 = 18, /**< shader varying, should really be 16 */ 3191591693c7b415e9869157c711fe11263c95d74eDavid Li /* ### we need to -2 because var0 is 18 instead 16 like in the others */ 3201591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_MAX = (GEOM_RESULT_VAR0 + MAX_VARYING - 2) 3211591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_geom_result; 3221591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 3231591693c7b415e9869157c711fe11263c95d74eDavid Li 3241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3251591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for fragment program input attributes. 3261591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3271591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 3281591693c7b415e9869157c711fe11263c95d74eDavid Li{ 3291591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_WPOS = 0, 3301591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_COL0 = 1, 3311591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_COL1 = 2, 3321591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_FOGC = 3, 3331591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX0 = 4, 3341591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX1 = 5, 3351591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX2 = 6, 3361591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX3 = 7, 3371591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX4 = 8, 3381591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX5 = 9, 3391591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX6 = 10, 3401591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX7 = 11, 3411591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_FACE = 12, /**< front/back face */ 3421591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_PNTC = 13, /**< sprite/point coord */ 3431591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_VAR0 = 14, /**< shader varying */ 3441591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING) 3451591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_frag_attrib; 3461591693c7b415e9869157c711fe11263c95d74eDavid Li 3471591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3481591693c7b415e9869157c711fe11263c95d74eDavid Li * Bitflags for fragment program input attributes. 3491591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3501591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 3511591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_WPOS (1 << FRAG_ATTRIB_WPOS) 3521591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_COL0 (1 << FRAG_ATTRIB_COL0) 3531591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_COL1 (1 << FRAG_ATTRIB_COL1) 3541591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_FOGC (1 << FRAG_ATTRIB_FOGC) 3551591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_FACE (1 << FRAG_ATTRIB_FACE) 3561591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_PNTC (1 << FRAG_ATTRIB_PNTC) 3571591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX0 (1 << FRAG_ATTRIB_TEX0) 3581591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX1 (1 << FRAG_ATTRIB_TEX1) 3591591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX2 (1 << FRAG_ATTRIB_TEX2) 3601591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX3 (1 << FRAG_ATTRIB_TEX3) 3611591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX4 (1 << FRAG_ATTRIB_TEX4) 3621591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX5 (1 << FRAG_ATTRIB_TEX5) 3631591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX6 (1 << FRAG_ATTRIB_TEX6) 3641591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX7 (1 << FRAG_ATTRIB_TEX7) 3651591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_VAR0 (1 << FRAG_ATTRIB_VAR0) 3661591693c7b415e9869157c711fe11263c95d74eDavid Li 3671591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX(U) (FRAG_BIT_TEX0 << (U)) 3681591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_VAR(V) (FRAG_BIT_VAR0 << (V)) 3691591693c7b415e9869157c711fe11263c95d74eDavid Li 3701591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BITS_TEX_ANY (FRAG_BIT_TEX0| \ 3711591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX1| \ 3721591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX2| \ 3731591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX3| \ 3741591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX4| \ 3751591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX5| \ 3761591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX6| \ 3771591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX7) 3781591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 3791591693c7b415e9869157c711fe11263c95d74eDavid Li 3801591693c7b415e9869157c711fe11263c95d74eDavid Li 3811591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3821591693c7b415e9869157c711fe11263c95d74eDavid Li * Fragment program results 3831591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3841591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 3851591693c7b415e9869157c711fe11263c95d74eDavid Li{ 3861591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_DEPTH = 0, 3871591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_STENCIL = 1, 3881591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_COLOR = 2, 3891591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_DATA0 = 3, 3901591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS) 3911591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_frag_result; 3921591693c7b415e9869157c711fe11263c95d74eDavid Li 3931591693c7b415e9869157c711fe11263c95d74eDavid Li 3941591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3951591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for all renderbuffers 3961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3971591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 3981591693c7b415e9869157c711fe11263c95d74eDavid Li{ 3991591693c7b415e9869157c711fe11263c95d74eDavid Li /* the four standard color buffers */ 4001591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_FRONT_LEFT, 4011591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BACK_LEFT, 4021591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_FRONT_RIGHT, 4031591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BACK_RIGHT, 4041591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_DEPTH, 4051591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_STENCIL, 4061591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_ACCUM, 4071591693c7b415e9869157c711fe11263c95d74eDavid Li /* optional aux buffer */ 4081591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_AUX0, 4091591693c7b415e9869157c711fe11263c95d74eDavid Li /* generic renderbuffers */ 4101591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR0, 4111591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR1, 4121591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR2, 4131591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR3, 4141591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR4, 4151591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR5, 4161591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR6, 4171591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR7, 4181591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COUNT 4191591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_buffer_index; 4201591693c7b415e9869157c711fe11263c95d74eDavid Li 4211591693c7b415e9869157c711fe11263c95d74eDavid Li/** 4221591693c7b415e9869157c711fe11263c95d74eDavid Li * Bit flags for all renderbuffers 4231591693c7b415e9869157c711fe11263c95d74eDavid Li */ 4241591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT) 4251591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT) 4261591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT) 4271591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT) 4281591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX0 (1 << BUFFER_AUX0) 4291591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX1 (1 << BUFFER_AUX1) 4301591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX2 (1 << BUFFER_AUX2) 4311591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX3 (1 << BUFFER_AUX3) 4321591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH) 4331591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL) 4341591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM) 4351591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0) 4361591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1) 4371591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2) 4381591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3) 4391591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4) 4401591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5) 4411591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6) 4421591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7) 4431591693c7b415e9869157c711fe11263c95d74eDavid Li 4441591693c7b415e9869157c711fe11263c95d74eDavid Li/** 4451591693c7b415e9869157c711fe11263c95d74eDavid Li * Mask of all the color buffer bits (but not accum). 4461591693c7b415e9869157c711fe11263c95d74eDavid Li */ 4471591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \ 4481591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_BACK_LEFT | \ 4491591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_FRONT_RIGHT | \ 4501591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_BACK_RIGHT | \ 4511591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_AUX0 | \ 4521591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR0 | \ 4531591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR1 | \ 4541591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR2 | \ 4551591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR3 | \ 4561591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR4 | \ 4571591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR5 | \ 4581591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR6 | \ 4591591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR7) 4601591693c7b415e9869157c711fe11263c95d74eDavid Li 4611591693c7b415e9869157c711fe11263c95d74eDavid Li 4621591693c7b415e9869157c711fe11263c95d74eDavid Li/** 4631591693c7b415e9869157c711fe11263c95d74eDavid Li * Framebuffer configuration (aka visual / pixelformat) 4641591693c7b415e9869157c711fe11263c95d74eDavid Li * Note: some of these fields should be boolean, but it appears that 4651591693c7b415e9869157c711fe11263c95d74eDavid Li * code in drivers/dri/common/util.c requires int-sized fields. 4661591693c7b415e9869157c711fe11263c95d74eDavid Li */ 4671591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_config 4681591693c7b415e9869157c711fe11263c95d74eDavid Li{ 4691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean rgbMode; 4701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean floatMode; 4711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean colorIndexMode; /* XXX is this used anywhere? */ 4721591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint doubleBufferMode; 4731591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint stereoMode; 4741591693c7b415e9869157c711fe11263c95d74eDavid Li 4751591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean haveAccumBuffer; 4761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean haveDepthBuffer; 4771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean haveStencilBuffer; 4781591693c7b415e9869157c711fe11263c95d74eDavid Li 4791591693c7b415e9869157c711fe11263c95d74eDavid Li GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */ 4801591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint redMask, greenMask, blueMask, alphaMask; 4811591693c7b415e9869157c711fe11263c95d74eDavid Li GLint rgbBits; /* total bits for rgb */ 4821591693c7b415e9869157c711fe11263c95d74eDavid Li GLint indexBits; /* total bits for colorindex */ 4831591693c7b415e9869157c711fe11263c95d74eDavid Li 4841591693c7b415e9869157c711fe11263c95d74eDavid Li GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; 4851591693c7b415e9869157c711fe11263c95d74eDavid Li GLint depthBits; 4861591693c7b415e9869157c711fe11263c95d74eDavid Li GLint stencilBits; 4871591693c7b415e9869157c711fe11263c95d74eDavid Li 4881591693c7b415e9869157c711fe11263c95d74eDavid Li GLint numAuxBuffers; 4891591693c7b415e9869157c711fe11263c95d74eDavid Li 4901591693c7b415e9869157c711fe11263c95d74eDavid Li GLint level; 4911591693c7b415e9869157c711fe11263c95d74eDavid Li 4921591693c7b415e9869157c711fe11263c95d74eDavid Li /* EXT_visual_rating / GLX 1.2 */ 4931591693c7b415e9869157c711fe11263c95d74eDavid Li GLint visualRating; 4941591693c7b415e9869157c711fe11263c95d74eDavid Li 4951591693c7b415e9869157c711fe11263c95d74eDavid Li /* EXT_visual_info / GLX 1.2 */ 4961591693c7b415e9869157c711fe11263c95d74eDavid Li GLint transparentPixel; 4971591693c7b415e9869157c711fe11263c95d74eDavid Li /* colors are floats scaled to ints */ 4981591693c7b415e9869157c711fe11263c95d74eDavid Li GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha; 4991591693c7b415e9869157c711fe11263c95d74eDavid Li GLint transparentIndex; 5001591693c7b415e9869157c711fe11263c95d74eDavid Li 5011591693c7b415e9869157c711fe11263c95d74eDavid Li /* ARB_multisample / SGIS_multisample */ 5021591693c7b415e9869157c711fe11263c95d74eDavid Li GLint sampleBuffers; 5031591693c7b415e9869157c711fe11263c95d74eDavid Li GLint samples; 5041591693c7b415e9869157c711fe11263c95d74eDavid Li 5051591693c7b415e9869157c711fe11263c95d74eDavid Li /* SGIX_pbuffer / GLX 1.3 */ 5061591693c7b415e9869157c711fe11263c95d74eDavid Li GLint maxPbufferWidth; 5071591693c7b415e9869157c711fe11263c95d74eDavid Li GLint maxPbufferHeight; 5081591693c7b415e9869157c711fe11263c95d74eDavid Li GLint maxPbufferPixels; 5091591693c7b415e9869157c711fe11263c95d74eDavid Li GLint optimalPbufferWidth; /* Only for SGIX_pbuffer. */ 5101591693c7b415e9869157c711fe11263c95d74eDavid Li GLint optimalPbufferHeight; /* Only for SGIX_pbuffer. */ 5111591693c7b415e9869157c711fe11263c95d74eDavid Li 5121591693c7b415e9869157c711fe11263c95d74eDavid Li /* OML_swap_method */ 5131591693c7b415e9869157c711fe11263c95d74eDavid Li GLint swapMethod; 5141591693c7b415e9869157c711fe11263c95d74eDavid Li 5151591693c7b415e9869157c711fe11263c95d74eDavid Li /* EXT_texture_from_pixmap */ 5161591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToTextureRgb; 5171591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToTextureRgba; 5181591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToMipmapTexture; 5191591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToTextureTargets; 5201591693c7b415e9869157c711fe11263c95d74eDavid Li GLint yInverted; 5211591693c7b415e9869157c711fe11263c95d74eDavid Li}; 5221591693c7b415e9869157c711fe11263c95d74eDavid Li 5231591693c7b415e9869157c711fe11263c95d74eDavid Li 5241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 5251591693c7b415e9869157c711fe11263c95d74eDavid Li * Data structure for color tables 5261591693c7b415e9869157c711fe11263c95d74eDavid Li */ 5271591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_color_table 5281591693c7b415e9869157c711fe11263c95d74eDavid Li{ 5291591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum InternalFormat; /**< The user-specified format */ 5301591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum _BaseFormat; /**< GL_ALPHA, GL_RGBA, GL_RGB, etc */ 5311591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Size; /**< number of entries in table */ 5321591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *TableF; /**< Color table, floating point values */ 5331591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte *TableUB; /**< Color table, ubyte values */ 5341591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte RedSize; 5351591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte GreenSize; 5361591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte BlueSize; 5371591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte AlphaSize; 5381591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte LuminanceSize; 5391591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte IntensitySize; 5401591693c7b415e9869157c711fe11263c95d74eDavid Li}; 5411591693c7b415e9869157c711fe11263c95d74eDavid Li 5421591693c7b415e9869157c711fe11263c95d74eDavid Li 5431591693c7b415e9869157c711fe11263c95d74eDavid Li/** 5441591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bit flags used for updating material values. 5451591693c7b415e9869157c711fe11263c95d74eDavid Li */ 5461591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 5471591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_AMBIENT 0 5481591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_AMBIENT 1 5491591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_DIFFUSE 2 5501591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_DIFFUSE 3 5511591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_SPECULAR 4 5521591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_SPECULAR 5 5531591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_EMISSION 6 5541591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_EMISSION 7 5551591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_SHININESS 8 5561591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_SHININESS 9 5571591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_INDEXES 10 5581591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_INDEXES 11 5591591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_MAX 12 5601591693c7b415e9869157c711fe11263c95d74eDavid Li 5611591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f)) 5621591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f)) 5631591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f)) 5641591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f)) 5651591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f)) 5661591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f)) 5671591693c7b415e9869157c711fe11263c95d74eDavid Li 5681591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_INDEX_AMBIENT 0 5691591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_INDEX_DIFFUSE 1 5701591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_INDEX_SPECULAR 2 5711591693c7b415e9869157c711fe11263c95d74eDavid Li 5721591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_AMBIENT (1<<MAT_ATTRIB_FRONT_AMBIENT) 5731591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_AMBIENT (1<<MAT_ATTRIB_BACK_AMBIENT) 5741591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_DIFFUSE (1<<MAT_ATTRIB_FRONT_DIFFUSE) 5751591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_DIFFUSE (1<<MAT_ATTRIB_BACK_DIFFUSE) 5761591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_SPECULAR (1<<MAT_ATTRIB_FRONT_SPECULAR) 5771591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_SPECULAR (1<<MAT_ATTRIB_BACK_SPECULAR) 5781591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_EMISSION (1<<MAT_ATTRIB_FRONT_EMISSION) 5791591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_EMISSION (1<<MAT_ATTRIB_BACK_EMISSION) 5801591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_SHININESS (1<<MAT_ATTRIB_FRONT_SHININESS) 5811591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_SHININESS (1<<MAT_ATTRIB_BACK_SHININESS) 5821591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_INDEXES (1<<MAT_ATTRIB_FRONT_INDEXES) 5831591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_INDEXES (1<<MAT_ATTRIB_BACK_INDEXES) 5841591693c7b415e9869157c711fe11263c95d74eDavid Li 5851591693c7b415e9869157c711fe11263c95d74eDavid Li 5861591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRONT_MATERIAL_BITS (MAT_BIT_FRONT_EMISSION | \ 5871591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_AMBIENT | \ 5881591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_DIFFUSE | \ 5891591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_SPECULAR | \ 5901591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_SHININESS | \ 5911591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_INDEXES) 5921591693c7b415e9869157c711fe11263c95d74eDavid Li 5931591693c7b415e9869157c711fe11263c95d74eDavid Li#define BACK_MATERIAL_BITS (MAT_BIT_BACK_EMISSION | \ 5941591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_AMBIENT | \ 5951591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_DIFFUSE | \ 5961591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_SPECULAR | \ 5971591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_SHININESS | \ 5981591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_INDEXES) 5991591693c7b415e9869157c711fe11263c95d74eDavid Li 6001591693c7b415e9869157c711fe11263c95d74eDavid Li#define ALL_MATERIAL_BITS (FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS) 6011591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 6021591693c7b415e9869157c711fe11263c95d74eDavid Li 6031591693c7b415e9869157c711fe11263c95d74eDavid Li 6041591693c7b415e9869157c711fe11263c95d74eDavid Li#define EXP_TABLE_SIZE 512 /**< Specular exponent lookup table sizes */ 6051591693c7b415e9869157c711fe11263c95d74eDavid Li#define SHINE_TABLE_SIZE 256 /**< Material shininess lookup table sizes */ 6061591693c7b415e9869157c711fe11263c95d74eDavid Li 6071591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6081591693c7b415e9869157c711fe11263c95d74eDavid Li * Material shininess lookup table. 6091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6101591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shine_tab 6111591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6121591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shine_tab *next, *prev; 6131591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat tab[SHINE_TABLE_SIZE+1]; 6141591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat shininess; 6151591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint refcount; 6161591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6171591693c7b415e9869157c711fe11263c95d74eDavid Li 6181591693c7b415e9869157c711fe11263c95d74eDavid Li 6191591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6201591693c7b415e9869157c711fe11263c95d74eDavid Li * Light source state. 6211591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6221591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_light 6231591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light *next; /**< double linked list with sentinel */ 6251591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light *prev; 6261591693c7b415e9869157c711fe11263c95d74eDavid Li 6271591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Ambient[4]; /**< ambient color */ 6281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Diffuse[4]; /**< diffuse color */ 6291591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Specular[4]; /**< specular color */ 6301591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EyePosition[4]; /**< position in eye coordinates */ 6311591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SpotDirection[4]; /**< spotlight direction in eye coordinates */ 6321591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SpotExponent; 6331591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SpotCutoff; /**< in degrees */ 6341591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _CosCutoffNeg; /**< = cos(SpotCutoff) */ 6351591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _CosCutoff; /**< = MAX(0, cos(SpotCutoff)) */ 6361591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ConstantAttenuation; 6371591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LinearAttenuation; 6381591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat QuadraticAttenuation; 6391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< On/off flag */ 6401591693c7b415e9869157c711fe11263c95d74eDavid Li 6411591693c7b415e9869157c711fe11263c95d74eDavid Li /** 6421591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Derived fields 6431591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6441591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 6451591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _Flags; /**< State */ 6461591693c7b415e9869157c711fe11263c95d74eDavid Li 6471591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _Position[4]; /**< position in eye/obj coordinates */ 6481591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _VP_inf_norm[3]; /**< Norm direction to infinite light */ 6491591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _h_inf_norm[3]; /**< Norm( _VP_inf_norm + <0,0,1> ) */ 6501591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */ 6511591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _VP_inf_spot_attenuation; 6521591693c7b415e9869157c711fe11263c95d74eDavid Li 6531591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _SpotExpTable[EXP_TABLE_SIZE][2]; /**< to replace a pow() call */ 6541591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MatAmbient[2][3]; /**< material ambient * light ambient */ 6551591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MatDiffuse[2][3]; /**< material diffuse * light diffuse */ 6561591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MatSpecular[2][3]; /**< material spec * light specular */ 6571591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _dli; /**< CI diffuse light intensity */ 6581591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _sli; /**< CI specular light intensity */ 6591591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 6601591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6611591693c7b415e9869157c711fe11263c95d74eDavid Li 6621591693c7b415e9869157c711fe11263c95d74eDavid Li 6631591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6641591693c7b415e9869157c711fe11263c95d74eDavid Li * Light model state. 6651591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6661591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_lightmodel 6671591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Ambient[4]; /**< ambient color */ 6691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean LocalViewer; /**< Local (or infinite) view point? */ 6701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TwoSide; /**< Two (or one) sided lighting? */ 6711591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorControl; /**< either GL_SINGLE_COLOR 6721591693c7b415e9869157c711fe11263c95d74eDavid Li * or GL_SEPARATE_SPECULAR_COLOR */ 6731591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6741591693c7b415e9869157c711fe11263c95d74eDavid Li 6751591693c7b415e9869157c711fe11263c95d74eDavid Li 6761591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6771591693c7b415e9869157c711fe11263c95d74eDavid Li * Material state. 6781591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6791591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_material 6801591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6811591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Attrib[MAT_ATTRIB_MAX][4]; 6821591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6831591693c7b415e9869157c711fe11263c95d74eDavid Li 6841591693c7b415e9869157c711fe11263c95d74eDavid Li 6851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6861591693c7b415e9869157c711fe11263c95d74eDavid Li * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT) 6871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_accum_attrib 6891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6901591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ClearColor[4]; /**< Accumulation buffer clear color */ 6911591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6921591693c7b415e9869157c711fe11263c95d74eDavid Li 6931591693c7b415e9869157c711fe11263c95d74eDavid Li 6941591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6951591693c7b415e9869157c711fe11263c95d74eDavid Li * Color buffer attribute group (GL_COLOR_BUFFER_BIT). 6961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6971591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_colorbuffer_attrib 6981591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6991591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ClearIndex; /**< Index to use for glClear */ 7001591693c7b415e9869157c711fe11263c95d74eDavid Li GLclampf ClearColor[4]; /**< Color to use for glClear */ 7011591693c7b415e9869157c711fe11263c95d74eDavid Li 7021591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint IndexMask; /**< Color index write mask */ 7031591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ColorMask[MAX_DRAW_BUFFERS][4];/**< Each flag is 0xff or 0x0 */ 7041591693c7b415e9869157c711fe11263c95d74eDavid Li 7051591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */ 7061591693c7b415e9869157c711fe11263c95d74eDavid Li 7071591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7081591693c7b415e9869157c711fe11263c95d74eDavid Li * \name alpha testing 7091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7101591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean AlphaEnabled; /**< Alpha test enabled flag */ 7121591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum AlphaFunc; /**< Alpha test function */ 7131591693c7b415e9869157c711fe11263c95d74eDavid Li GLclampf AlphaRef; /**< Alpha reference value */ 7141591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7151591693c7b415e9869157c711fe11263c95d74eDavid Li 7161591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7171591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Blending 7181591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7191591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7201591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield BlendEnabled; /**< Per-buffer blend enable flags */ 7211591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendSrcRGB; /**< Blending source operator */ 7221591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendDstRGB; /**< Blending destination operator */ 7231591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendSrcA; /**< GL_INGR_blend_func_separate */ 7241591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendDstA; /**< GL_INGR_blend_func_separate */ 7251591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendEquationRGB; /**< Blending equation */ 7261591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendEquationA; /**< GL_EXT_blend_equation_separate */ 7271591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat BlendColor[4]; /**< Blending color */ 7281591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7291591693c7b415e9869157c711fe11263c95d74eDavid Li 7301591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7311591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Logic op 7321591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7331591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7341591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum LogicOp; /**< Logic operator */ 7351591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IndexLogicOpEnabled; /**< Color index logic op enabled flag */ 7361591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorLogicOpEnabled; /**< RGBA logic op enabled flag */ 7371591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _LogicOpEnabled; /**< RGBA logic op + EXT_blend_logic_op enabled flag */ 7381591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7391591693c7b415e9869157c711fe11263c95d74eDavid Li 7401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DitherFlag; /**< Dither enable flag */ 7411591693c7b415e9869157c711fe11263c95d74eDavid Li 7421591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 7431591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 7441591693c7b415e9869157c711fe11263c95d74eDavid Li}; 7451591693c7b415e9869157c711fe11263c95d74eDavid Li 7461591693c7b415e9869157c711fe11263c95d74eDavid Li 7471591693c7b415e9869157c711fe11263c95d74eDavid Li/** 7481591693c7b415e9869157c711fe11263c95d74eDavid Li * Current attribute group (GL_CURRENT_BIT). 7491591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7501591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_current_attrib 7511591693c7b415e9869157c711fe11263c95d74eDavid Li{ 7521591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7531591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Current vertex attributes. 7541591693c7b415e9869157c711fe11263c95d74eDavid Li * \note Values are valid only after FLUSH_VERTICES has been called. 7551591693c7b415e9869157c711fe11263c95d74eDavid Li * \note Index and Edgeflag current values are stored as floats in the 7561591693c7b415e9869157c711fe11263c95d74eDavid Li * SIX and SEVEN attribute slots. 7571591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7581591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */ 7591591693c7b415e9869157c711fe11263c95d74eDavid Li 7601591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7611591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Current raster position attributes (always valid). 7621591693c7b415e9869157c711fe11263c95d74eDavid Li * \note This set of attributes is very similar to the SWvertex struct. 7631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7641591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7651591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterPos[4]; 7661591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterDistance; 7671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterColor[4]; 7681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterSecondaryColor[4]; 7691591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4]; 7701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RasterPosValid; 7711591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7721591693c7b415e9869157c711fe11263c95d74eDavid Li}; 7731591693c7b415e9869157c711fe11263c95d74eDavid Li 7741591693c7b415e9869157c711fe11263c95d74eDavid Li 7751591693c7b415e9869157c711fe11263c95d74eDavid Li/** 7761591693c7b415e9869157c711fe11263c95d74eDavid Li * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT). 7771591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7781591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_depthbuffer_attrib 7791591693c7b415e9869157c711fe11263c95d74eDavid Li{ 7801591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Func; /**< Function for depth buffer compare */ 7811591693c7b415e9869157c711fe11263c95d74eDavid Li GLclampd Clear; /**< Value to clear depth buffer to */ 7821591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Test; /**< Depth buffering enabled flag */ 7831591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Mask; /**< Depth buffer writable? */ 7841591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */ 7851591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */ 7861591693c7b415e9869157c711fe11263c95d74eDavid Li}; 7871591693c7b415e9869157c711fe11263c95d74eDavid Li 7881591693c7b415e9869157c711fe11263c95d74eDavid Li 7891591693c7b415e9869157c711fe11263c95d74eDavid Li/** 7901591693c7b415e9869157c711fe11263c95d74eDavid Li * Evaluator attribute group (GL_EVAL_BIT). 7911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7921591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_eval_attrib 7931591693c7b415e9869157c711fe11263c95d74eDavid Li{ 7941591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7951591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Enable bits 7961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7971591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Color4; 7991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Index; 8001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Normal; 8011591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord1; 8021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord2; 8031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord3; 8041591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord4; 8051591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Vertex3; 8061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Vertex4; 8071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Attrib[16]; /* GL_NV_vertex_program */ 8081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Color4; 8091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Index; 8101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Normal; 8111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord1; 8121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord2; 8131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord3; 8141591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord4; 8151591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Vertex3; 8161591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Vertex4; 8171591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Attrib[16]; /* GL_NV_vertex_program */ 8181591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean AutoNormal; 8191591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 8201591693c7b415e9869157c711fe11263c95d74eDavid Li 8211591693c7b415e9869157c711fe11263c95d74eDavid Li /** 8221591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Map Grid endpoints and divisions and calculated du values 8231591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8241591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 8251591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MapGrid1un; 8261591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du; 8271591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MapGrid2un, MapGrid2vn; 8281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du; 8291591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv; 8301591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 8311591693c7b415e9869157c711fe11263c95d74eDavid Li}; 8321591693c7b415e9869157c711fe11263c95d74eDavid Li 8331591693c7b415e9869157c711fe11263c95d74eDavid Li 8341591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8351591693c7b415e9869157c711fe11263c95d74eDavid Li * Fog attribute group (GL_FOG_BIT). 8361591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8371591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_fog_attrib 8381591693c7b415e9869157c711fe11263c95d74eDavid Li{ 8391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Fog enabled flag */ 8401591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Color[4]; /**< Fog color */ 8411591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Density; /**< Density >= 0.0 */ 8421591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Start; /**< Start distance in eye coords */ 8431591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat End; /**< End distance in eye coords */ 8441591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Index; /**< Fog index */ 8451591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Mode; /**< Fog mode */ 8461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorSumEnabled; 8471591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FogCoordinateSource; /**< GL_EXT_fog_coord */ 8481591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _Scale; /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */ 8491591693c7b415e9869157c711fe11263c95d74eDavid Li}; 8501591693c7b415e9869157c711fe11263c95d74eDavid Li 8511591693c7b415e9869157c711fe11263c95d74eDavid Li 8521591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8531591693c7b415e9869157c711fe11263c95d74eDavid Li * Hint attribute group (GL_HINT_BIT). 8541591693c7b415e9869157c711fe11263c95d74eDavid Li * 8551591693c7b415e9869157c711fe11263c95d74eDavid Li * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE. 8561591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8571591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_hint_attrib 8581591693c7b415e9869157c711fe11263c95d74eDavid Li{ 8591591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum PerspectiveCorrection; 8601591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum PointSmooth; 8611591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum LineSmooth; 8621591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum PolygonSmooth; 8631591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Fog; 8641591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClipVolumeClipping; /**< GL_EXT_clip_volume_hint */ 8651591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum TextureCompression; /**< GL_ARB_texture_compression */ 8661591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 8671591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ 8681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 8691591693c7b415e9869157c711fe11263c95d74eDavid Li 8701591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8711591693c7b415e9869157c711fe11263c95d74eDavid Li * Light state flags. 8721591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8731591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 8741591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_SPOT 0x1 8751591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_LOCAL_VIEWER 0x2 8761591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_POSITIONAL 0x4 8771591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER) 8781591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 8791591693c7b415e9869157c711fe11263c95d74eDavid Li 8801591693c7b415e9869157c711fe11263c95d74eDavid Li 8811591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8821591693c7b415e9869157c711fe11263c95d74eDavid Li * Lighting attribute group (GL_LIGHT_BIT). 8831591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8841591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_light_attrib 8851591693c7b415e9869157c711fe11263c95d74eDavid Li{ 8861591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light Light[MAX_LIGHTS]; /**< Array of light sources */ 8871591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_lightmodel Model; /**< Lighting model */ 8881591693c7b415e9869157c711fe11263c95d74eDavid Li 8891591693c7b415e9869157c711fe11263c95d74eDavid Li /** 8901591693c7b415e9869157c711fe11263c95d74eDavid Li * Must flush FLUSH_VERTICES before referencing: 8911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8921591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 8931591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_material Material; /**< Includes front & back values */ 8941591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 8951591693c7b415e9869157c711fe11263c95d74eDavid Li 8961591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Lighting enabled flag */ 8971591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ShadeModel; /**< GL_FLAT or GL_SMOOTH */ 8981591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ProvokingVertex; /**< GL_EXT_provoking_vertex */ 8991591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */ 9001591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */ 9011591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ 9021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorMaterialEnabled; 9031591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClampVertexColor; 9041591693c7b415e9869157c711fe11263c95d74eDavid Li 9051591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light EnabledList; /**< List sentinel */ 9061591693c7b415e9869157c711fe11263c95d74eDavid Li 9071591693c7b415e9869157c711fe11263c95d74eDavid Li /** 9081591693c7b415e9869157c711fe11263c95d74eDavid Li * Derived state for optimizations: 9091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9101591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 9111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _NeedEyeCoords; 9121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _NeedVertices; /**< Use fast shader? */ 9131591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _Flags; /**< LIGHT_* flags, see above */ 9141591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _BaseColor[2][3]; 9151591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 9161591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9171591693c7b415e9869157c711fe11263c95d74eDavid Li 9181591693c7b415e9869157c711fe11263c95d74eDavid Li 9191591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9201591693c7b415e9869157c711fe11263c95d74eDavid Li * Line attribute group (GL_LINE_BIT). 9211591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9221591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_line_attrib 9231591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9241591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SmoothFlag; /**< GL_LINE_SMOOTH enabled? */ 9251591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean StippleFlag; /**< GL_LINE_STIPPLE enabled? */ 9261591693c7b415e9869157c711fe11263c95d74eDavid Li GLushort StipplePattern; /**< Stipple pattern */ 9271591693c7b415e9869157c711fe11263c95d74eDavid Li GLint StippleFactor; /**< Stipple repeat factor */ 9281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Width; /**< Line width */ 9291591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9301591693c7b415e9869157c711fe11263c95d74eDavid Li 9311591693c7b415e9869157c711fe11263c95d74eDavid Li 9321591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9331591693c7b415e9869157c711fe11263c95d74eDavid Li * Display list attribute group (GL_LIST_BIT). 9341591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9351591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_list_attrib 9361591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9371591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ListBase; 9381591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9391591693c7b415e9869157c711fe11263c95d74eDavid Li 9401591693c7b415e9869157c711fe11263c95d74eDavid Li 9411591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9421591693c7b415e9869157c711fe11263c95d74eDavid Li * Multisample attribute group (GL_MULTISAMPLE_BIT). 9431591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9441591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_multisample_attrib 9451591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; 9471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< true if Enabled and multisample buffer */ 9481591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleAlphaToCoverage; 9491591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleAlphaToOne; 9501591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleCoverage; 9511591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SampleCoverageValue; 9521591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleCoverageInvert; 9531591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9541591693c7b415e9869157c711fe11263c95d74eDavid Li 9551591693c7b415e9869157c711fe11263c95d74eDavid Li 9561591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9571591693c7b415e9869157c711fe11263c95d74eDavid Li * A pixelmap (see glPixelMap) 9581591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9591591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelmap 9601591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9611591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Size; 9621591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Map[MAX_PIXEL_MAP_TABLE]; 9631591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte Map8[MAX_PIXEL_MAP_TABLE]; /**< converted to 8-bit color */ 9641591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9651591693c7b415e9869157c711fe11263c95d74eDavid Li 9661591693c7b415e9869157c711fe11263c95d74eDavid Li 9671591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9681591693c7b415e9869157c711fe11263c95d74eDavid Li * Collection of all pixelmaps 9691591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9701591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelmaps 9711591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9721591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap RtoR; /**< i.e. GL_PIXEL_MAP_R_TO_R */ 9731591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap GtoG; 9741591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap BtoB; 9751591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap AtoA; 9761591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoR; 9771591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoG; 9781591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoB; 9791591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoA; 9801591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoI; 9811591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap StoS; 9821591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9831591693c7b415e9869157c711fe11263c95d74eDavid Li 9841591693c7b415e9869157c711fe11263c95d74eDavid Li 9851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9861591693c7b415e9869157c711fe11263c95d74eDavid Li * Pixel attribute group (GL_PIXEL_MODE_BIT). 9871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixel_attrib 9891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9901591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ReadBuffer; /**< source buffer for glRead/CopyPixels() */ 9911591693c7b415e9869157c711fe11263c95d74eDavid Li 9921591693c7b415e9869157c711fe11263c95d74eDavid Li /*--- Begin Pixel Transfer State ---*/ 9931591693c7b415e9869157c711fe11263c95d74eDavid Li /* Fields are in the order in which they're applied... */ 9941591693c7b415e9869157c711fe11263c95d74eDavid Li 9951591693c7b415e9869157c711fe11263c95d74eDavid Li /** Scale & Bias (index shift, offset) */ 9961591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 9971591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RedBias, RedScale; 9981591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat GreenBias, GreenScale; 9991591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat BlueBias, BlueScale; 10001591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat AlphaBias, AlphaScale; 10011591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat DepthBias, DepthScale; 10021591693c7b415e9869157c711fe11263c95d74eDavid Li GLint IndexShift, IndexOffset; 10031591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 10041591693c7b415e9869157c711fe11263c95d74eDavid Li 10051591693c7b415e9869157c711fe11263c95d74eDavid Li /* Pixel Maps */ 10061591693c7b415e9869157c711fe11263c95d74eDavid Li /* Note: actual pixel maps are not part of this attrib group */ 10071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MapColorFlag; 10081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MapStencilFlag; 10091591693c7b415e9869157c711fe11263c95d74eDavid Li 10101591693c7b415e9869157c711fe11263c95d74eDavid Li /*--- End Pixel Transfer State ---*/ 10111591693c7b415e9869157c711fe11263c95d74eDavid Li 10121591693c7b415e9869157c711fe11263c95d74eDavid Li /** glPixelZoom */ 10131591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ZoomX, ZoomY; 10141591693c7b415e9869157c711fe11263c95d74eDavid Li 10151591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_SGI_texture_color_table */ 10161591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat TextureColorTableScale[4]; /**< RGBA */ 10171591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat TextureColorTableBias[4]; /**< RGBA */ 10181591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10191591693c7b415e9869157c711fe11263c95d74eDavid Li 10201591693c7b415e9869157c711fe11263c95d74eDavid Li 10211591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10221591693c7b415e9869157c711fe11263c95d74eDavid Li * Point attribute group (GL_POINT_BIT). 10231591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10241591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_point_attrib 10251591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10261591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SmoothFlag; /**< True if GL_POINT_SMOOTH is enabled */ 10271591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Size; /**< User-specified point size */ 10281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Params[3]; /**< GL_EXT_point_parameters */ 10291591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */ 10301591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Threshold; /**< GL_EXT_point_parameters */ 10311591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */ 10321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */ 10331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< GL_ARB_point_sprite*/ 10341591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */ 10351591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SpriteOrigin; /**< GL_ARB_point_sprite */ 10361591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10371591693c7b415e9869157c711fe11263c95d74eDavid Li 10381591693c7b415e9869157c711fe11263c95d74eDavid Li 10391591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10401591693c7b415e9869157c711fe11263c95d74eDavid Li * Polygon attribute group (GL_POLYGON_BIT). 10411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10421591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_polygon_attrib 10431591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10441591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FrontFace; /**< Either GL_CW or GL_CCW */ 10451591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 10461591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 10471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _FrontBit; /**< 0=GL_CCW, 1=GL_CW */ 10481591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CullFlag; /**< Culling on/off flag */ 10491591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */ 10501591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */ 10511591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum CullFaceMode; /**< Culling mode GL_FRONT or GL_BACK */ 10521591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat OffsetFactor; /**< Polygon offset factor, from user */ 10531591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat OffsetUnits; /**< Polygon offset units, from user */ 10541591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OffsetPoint; /**< Offset in GL_POINT mode */ 10551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OffsetLine; /**< Offset in GL_LINE mode */ 10561591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OffsetFill; /**< Offset in GL_FILL mode */ 10571591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10581591693c7b415e9869157c711fe11263c95d74eDavid Li 10591591693c7b415e9869157c711fe11263c95d74eDavid Li 10601591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10611591693c7b415e9869157c711fe11263c95d74eDavid Li * Scissor attributes (GL_SCISSOR_BIT). 10621591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10631591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_scissor_attrib 10641591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10651591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Scissor test enabled? */ 10661591693c7b415e9869157c711fe11263c95d74eDavid Li GLint X, Y; /**< Lower left corner of box */ 10671591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizei Width, Height; /**< Size of box */ 10681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10691591693c7b415e9869157c711fe11263c95d74eDavid Li 10701591693c7b415e9869157c711fe11263c95d74eDavid Li 10711591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10721591693c7b415e9869157c711fe11263c95d74eDavid Li * Stencil attribute group (GL_STENCIL_BUFFER_BIT). 10731591693c7b415e9869157c711fe11263c95d74eDavid Li * 10741591693c7b415e9869157c711fe11263c95d74eDavid Li * Three sets of stencil data are tracked so that OpenGL 2.0, 10751591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported 10761591693c7b415e9869157c711fe11263c95d74eDavid Li * simultaneously. In each of the stencil state arrays, element 0 corresponds 10771591693c7b415e9869157c711fe11263c95d74eDavid Li * to GL_FRONT. Element 1 corresponds to the OpenGL 2.0 / 10781591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_ATI_separate_stencil GL_BACK state. Element 2 corresponds to the 10791591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_EXT_stencil_two_side GL_BACK state. 10801591693c7b415e9869157c711fe11263c95d74eDavid Li * 10811591693c7b415e9869157c711fe11263c95d74eDavid Li * The derived value \c _BackFace is either 1 or 2 depending on whether or 10821591693c7b415e9869157c711fe11263c95d74eDavid Li * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled. 10831591693c7b415e9869157c711fe11263c95d74eDavid Li * 10841591693c7b415e9869157c711fe11263c95d74eDavid Li * The derived value \c _TestTwoSide is set when the front-face and back-face 10851591693c7b415e9869157c711fe11263c95d74eDavid Li * stencil state are different. 10861591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10871591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_stencil_attrib 10881591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10891591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Enabled flag */ 10901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ 10911591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ 10921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and stencil buffer present */ 10931591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _TestTwoSide; 10941591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ 10951591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Function[3]; /**< Stencil function */ 10961591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FailFunc[3]; /**< Fail function */ 10971591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ZPassFunc[3]; /**< Depth buffer pass function */ 10981591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ZFailFunc[3]; /**< Depth buffer fail function */ 10991591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Ref[3]; /**< Reference value */ 11001591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ValueMask[3]; /**< Value mask */ 11011591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint WriteMask[3]; /**< Write mask */ 11021591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Clear; /**< Clear value */ 11031591693c7b415e9869157c711fe11263c95d74eDavid Li}; 11041591693c7b415e9869157c711fe11263c95d74eDavid Li 11051591693c7b415e9869157c711fe11263c95d74eDavid Li 11061591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11071591693c7b415e9869157c711fe11263c95d74eDavid Li * An index for each type of texture object. These correspond to the GL 11081591693c7b415e9869157c711fe11263c95d74eDavid Li * texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc. 11091591693c7b415e9869157c711fe11263c95d74eDavid Li * Note: the order is from highest priority to lowest priority. 11101591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11111591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 11121591693c7b415e9869157c711fe11263c95d74eDavid Li{ 11131591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_2D_ARRAY_INDEX, 11141591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_1D_ARRAY_INDEX, 11151591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_CUBE_INDEX, 11161591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_3D_INDEX, 11171591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_RECT_INDEX, 11181591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_2D_INDEX, 11191591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_1D_INDEX, 11201591693c7b415e9869157c711fe11263c95d74eDavid Li NUM_TEXTURE_TARGETS 11211591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_texture_index; 11221591693c7b415e9869157c711fe11263c95d74eDavid Li 11231591693c7b415e9869157c711fe11263c95d74eDavid Li 11241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11251591693c7b415e9869157c711fe11263c95d74eDavid Li * Bit flags for each type of texture object 11261591693c7b415e9869157c711fe11263c95d74eDavid Li * Used for Texture.Unit[]._ReallyEnabled flags. 11271591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11281591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 11291591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) 11301591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) 11311591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX) 11321591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) 11331591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX) 11341591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) 11351591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) 11361591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 11371591693c7b415e9869157c711fe11263c95d74eDavid Li 11381591693c7b415e9869157c711fe11263c95d74eDavid Li 11391591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11401591693c7b415e9869157c711fe11263c95d74eDavid Li * TexGenEnabled flags. 11411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11421591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 11431591693c7b415e9869157c711fe11263c95d74eDavid Li#define S_BIT 1 11441591693c7b415e9869157c711fe11263c95d74eDavid Li#define T_BIT 2 11451591693c7b415e9869157c711fe11263c95d74eDavid Li#define R_BIT 4 11461591693c7b415e9869157c711fe11263c95d74eDavid Li#define Q_BIT 8 11471591693c7b415e9869157c711fe11263c95d74eDavid Li#define STR_BITS (S_BIT | T_BIT | R_BIT) 11481591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 11491591693c7b415e9869157c711fe11263c95d74eDavid Li 11501591693c7b415e9869157c711fe11263c95d74eDavid Li 11511591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11521591693c7b415e9869157c711fe11263c95d74eDavid Li * Bit flag versions of the corresponding GL_ constants. 11531591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11541591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 11551591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_SPHERE_MAP 0x1 11561591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_OBJ_LINEAR 0x2 11571591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_EYE_LINEAR 0x4 11581591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_REFLECTION_MAP_NV 0x8 11591591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_NORMAL_MAP_NV 0x10 11601591693c7b415e9869157c711fe11263c95d74eDavid Li 11611591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_NEED_NORMALS (TEXGEN_SPHERE_MAP | \ 11621591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_REFLECTION_MAP_NV | \ 11631591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_NORMAL_MAP_NV) 11641591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_NEED_EYE_COORD (TEXGEN_SPHERE_MAP | \ 11651591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_REFLECTION_MAP_NV | \ 11661591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_NORMAL_MAP_NV | \ 11671591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_EYE_LINEAR) 11681591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 11691591693c7b415e9869157c711fe11263c95d74eDavid Li 11701591693c7b415e9869157c711fe11263c95d74eDavid Li 11711591693c7b415e9869157c711fe11263c95d74eDavid Li 11721591693c7b415e9869157c711fe11263c95d74eDavid Li/** Tex-gen enabled for texture unit? */ 11731591693c7b415e9869157c711fe11263c95d74eDavid Li#define ENABLE_TEXGEN(unit) (1 << (unit)) 11741591693c7b415e9869157c711fe11263c95d74eDavid Li 11751591693c7b415e9869157c711fe11263c95d74eDavid Li/** Non-identity texture matrix for texture unit? */ 11761591693c7b415e9869157c711fe11263c95d74eDavid Li#define ENABLE_TEXMAT(unit) (1 << (unit)) 11771591693c7b415e9869157c711fe11263c95d74eDavid Li 11781591693c7b415e9869157c711fe11263c95d74eDavid Li 11791591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11801591693c7b415e9869157c711fe11263c95d74eDavid Li * Texel fetch function prototype. We use texel fetch functions to 11811591693c7b415e9869157c711fe11263c95d74eDavid Li * extract RGBA, color indexes and depth components out of 1D, 2D and 3D 11821591693c7b415e9869157c711fe11263c95d74eDavid Li * texture images. These functions help to isolate us from the gritty 11831591693c7b415e9869157c711fe11263c95d74eDavid Li * details of all the various texture image encodings. 11841591693c7b415e9869157c711fe11263c95d74eDavid Li * 11851591693c7b415e9869157c711fe11263c95d74eDavid Li * \param texImage texture image. 11861591693c7b415e9869157c711fe11263c95d74eDavid Li * \param col texel column. 11871591693c7b415e9869157c711fe11263c95d74eDavid Li * \param row texel row. 11881591693c7b415e9869157c711fe11263c95d74eDavid Li * \param img texel image level/layer. 11891591693c7b415e9869157c711fe11263c95d74eDavid Li * \param texelOut output texel (up to 4 GLchans) 11901591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11911591693c7b415e9869157c711fe11263c95d74eDavid Litypedef void (*FetchTexelFuncC)( const struct gl_texture_image *texImage, 11921591693c7b415e9869157c711fe11263c95d74eDavid Li GLint col, GLint row, GLint img, 11931591693c7b415e9869157c711fe11263c95d74eDavid Li GLchan *texelOut ); 11941591693c7b415e9869157c711fe11263c95d74eDavid Li 11951591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11961591693c7b415e9869157c711fe11263c95d74eDavid Li * As above, but returns floats. 11971591693c7b415e9869157c711fe11263c95d74eDavid Li * Used for depth component images and for upcoming signed/float 11981591693c7b415e9869157c711fe11263c95d74eDavid Li * texture images. 11991591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12001591693c7b415e9869157c711fe11263c95d74eDavid Litypedef void (*FetchTexelFuncF)( const struct gl_texture_image *texImage, 12011591693c7b415e9869157c711fe11263c95d74eDavid Li GLint col, GLint row, GLint img, 12021591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *texelOut ); 12031591693c7b415e9869157c711fe11263c95d74eDavid Li 12041591693c7b415e9869157c711fe11263c95d74eDavid Li 12051591693c7b415e9869157c711fe11263c95d74eDavid Litypedef void (*StoreTexelFunc)(struct gl_texture_image *texImage, 12061591693c7b415e9869157c711fe11263c95d74eDavid Li GLint col, GLint row, GLint img, 12071591693c7b415e9869157c711fe11263c95d74eDavid Li const void *texel); 12081591693c7b415e9869157c711fe11263c95d74eDavid Li 12091591693c7b415e9869157c711fe11263c95d74eDavid Li 12101591693c7b415e9869157c711fe11263c95d74eDavid Li/** 12111591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture image state. Describes the dimensions of a texture image, 12121591693c7b415e9869157c711fe11263c95d74eDavid Li * the texel format and pointers to Texel Fetch functions. 12131591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12141591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_image 12151591693c7b415e9869157c711fe11263c95d74eDavid Li{ 12161591693c7b415e9869157c711fe11263c95d74eDavid Li GLint InternalFormat; /**< Internal format as given by the user */ 12171591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, 12181591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_LUMINANCE, GL_LUMINANCE_ALPHA, 12191591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_INTENSITY, GL_COLOR_INDEX, 12201591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_DEPTH_COMPONENT or GL_DEPTH_STENCIL_EXT 12211591693c7b415e9869157c711fe11263c95d74eDavid Li * only. Used for choosing TexEnv arithmetic. 12221591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12231591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint TexFormat; /**< The actual format: MESA_FORMAT_x */ 12241591693c7b415e9869157c711fe11263c95d74eDavid Li 12251591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Border; /**< 0 or 1 */ 12261591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Width; /**< = 2^WidthLog2 + 2*Border */ 12271591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Height; /**< = 2^HeightLog2 + 2*Border */ 12281591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Depth; /**< = 2^DepthLog2 + 2*Border */ 12291591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Width2; /**< = Width - 2*Border */ 12301591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Height2; /**< = Height - 2*Border */ 12311591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Depth2; /**< = Depth - 2*Border */ 12321591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint WidthLog2; /**< = log2(Width2) */ 12331591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint HeightLog2; /**< = log2(Height2) */ 12341591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint DepthLog2; /**< = log2(Depth2) */ 12351591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxLog2; /**< = MAX(WidthLog2, HeightLog2) */ 12361591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat WidthScale; /**< used for mipmap LOD computation */ 12371591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat HeightScale; /**< used for mipmap LOD computation */ 12381591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat DepthScale; /**< used for mipmap LOD computation */ 12391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IsClientData; /**< Data owned by client? */ 12401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _IsPowerOfTwo; /**< Are all dimensions powers of two? */ 12411591693c7b415e9869157c711fe11263c95d74eDavid Li 12421591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *TexObject; /**< Pointer back to parent object */ 12431591693c7b415e9869157c711fe11263c95d74eDavid Li 12441591693c7b415e9869157c711fe11263c95d74eDavid Li FetchTexelFuncC FetchTexelc; /**< GLchan texel fetch function pointer */ 12451591693c7b415e9869157c711fe11263c95d74eDavid Li FetchTexelFuncF FetchTexelf; /**< Float texel fetch function pointer */ 12461591693c7b415e9869157c711fe11263c95d74eDavid Li 12471591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint RowStride; /**< Padded width in units of texels */ 12481591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint *ImageOffsets; /**< if 3D texture: array [Depth] of offsets to 12491591693c7b415e9869157c711fe11263c95d74eDavid Li each 2D slice in 'Data', in texels */ 12501591693c7b415e9869157c711fe11263c95d74eDavid Li GLvoid *Data; /**< Image data, accessed via FetchTexel() */ 12511591693c7b415e9869157c711fe11263c95d74eDavid Li 12521591693c7b415e9869157c711fe11263c95d74eDavid Li /** 12531591693c7b415e9869157c711fe11263c95d74eDavid Li * \name For device driver: 12541591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12551591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 12561591693c7b415e9869157c711fe11263c95d74eDavid Li void *DriverData; /**< Arbitrary device driver data */ 12571591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 12581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 12591591693c7b415e9869157c711fe11263c95d74eDavid Li 12601591693c7b415e9869157c711fe11263c95d74eDavid Li 12611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 12621591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for cube map faces. 12631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12641591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 12651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 12661591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_POS_X = 0, 12671591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_NEG_X = 1, 12681591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_POS_Y = 2, 12691591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_NEG_Y = 3, 12701591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_POS_Z = 4, 12711591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_NEG_Z = 5, 12721591693c7b415e9869157c711fe11263c95d74eDavid Li MAX_FACES = 6 12731591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_face_index; 12741591693c7b415e9869157c711fe11263c95d74eDavid Li 12751591693c7b415e9869157c711fe11263c95d74eDavid Li 12761591693c7b415e9869157c711fe11263c95d74eDavid Li/** 12771591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture object state. Contains the array of mipmap images, border color, 12781591693c7b415e9869157c711fe11263c95d74eDavid Li * wrap modes, filter modes, shadow/texcompare state, and the per-texture 12791591693c7b415e9869157c711fe11263c95d74eDavid Li * color palette. 12801591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12811591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_object 12821591693c7b415e9869157c711fe11263c95d74eDavid Li{ 12831591693c7b415e9869157c711fe11263c95d74eDavid Li _glthread_Mutex Mutex; /**< for thread safety */ 12841591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< reference count */ 12851591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< the user-visible texture object ID */ 12861591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ 12871591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Priority; /**< in [0,1] */ 12881591693c7b415e9869157c711fe11263c95d74eDavid Li union { 12891591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat f[4]; 12901591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ui[4]; 12911591693c7b415e9869157c711fe11263c95d74eDavid Li GLint i[4]; 12921591693c7b415e9869157c711fe11263c95d74eDavid Li } BorderColor; /**< Interpreted according to texture format */ 12931591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum WrapS; /**< S-axis texture image wrap mode */ 12941591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum WrapT; /**< T-axis texture image wrap mode */ 12951591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum WrapR; /**< R-axis texture image wrap mode */ 12961591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum MinFilter; /**< minification filter */ 12971591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum MagFilter; /**< magnification filter */ 12981591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ 12991591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */ 13001591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LodBias; /**< OpenGL 1.4 */ 13011591693c7b415e9869157c711fe11263c95d74eDavid Li GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */ 13021591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxLevel; /**< max mipmap level, OpenGL 1.2 */ 13031591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 13041591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum CompareMode; /**< GL_ARB_shadow */ 13051591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum CompareFunc; /**< GL_ARB_shadow */ 13061591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CompareFailValue; /**< GL_ARB_shadow_ambient */ 13071591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum DepthMode; /**< GL_ARB_depth_texture */ 13081591693c7b415e9869157c711fe11263c95d74eDavid Li GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */ 13091591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - b in spec) */ 13101591693c7b415e9869157c711fe11263c95d74eDavid Li GLint CropRect[4]; /**< GL_OES_draw_texture */ 13111591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */ 13121591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */ 13131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 13141591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Complete; /**< Is texture object complete? */ 13151591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _RenderToTexture; /**< Any rendering to this texture? */ 13161591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 13171591693c7b415e9869157c711fe11263c95d74eDavid Li 13181591693c7b415e9869157c711fe11263c95d74eDavid Li /** Actual texture images, indexed by [cube face] and [mipmap level] */ 13191591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS]; 13201591693c7b415e9869157c711fe11263c95d74eDavid Li 13211591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_paletted_texture */ 13221591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_color_table Palette; 13231591693c7b415e9869157c711fe11263c95d74eDavid Li 13241591693c7b415e9869157c711fe11263c95d74eDavid Li /** 13251591693c7b415e9869157c711fe11263c95d74eDavid Li * \name For device driver. 13261591693c7b415e9869157c711fe11263c95d74eDavid Li * Note: instead of attaching driver data to this pointer, it's preferable 13271591693c7b415e9869157c711fe11263c95d74eDavid Li * to instead use this struct as a base class for your own texture object 13281591693c7b415e9869157c711fe11263c95d74eDavid Li * class. Driver->NewTextureObject() can be used to implement the 13291591693c7b415e9869157c711fe11263c95d74eDavid Li * allocation. 13301591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13311591693c7b415e9869157c711fe11263c95d74eDavid Li void *DriverData; /**< Arbitrary device driver data */ 13321591693c7b415e9869157c711fe11263c95d74eDavid Li}; 13331591693c7b415e9869157c711fe11263c95d74eDavid Li 13341591693c7b415e9869157c711fe11263c95d74eDavid Li 13351591693c7b415e9869157c711fe11263c95d74eDavid Li/** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */ 13361591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAX_COMBINER_TERMS 4 13371591693c7b415e9869157c711fe11263c95d74eDavid Li 13381591693c7b415e9869157c711fe11263c95d74eDavid Li 13391591693c7b415e9869157c711fe11263c95d74eDavid Li/** 13401591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture combine environment state. 13411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13421591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_tex_env_combine_state 13431591693c7b415e9869157c711fe11263c95d74eDavid Li{ 13441591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ModeRGB; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 13451591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ModeA; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 13461591693c7b415e9869157c711fe11263c95d74eDavid Li /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */ 13471591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SourceRGB[MAX_COMBINER_TERMS]; 13481591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SourceA[MAX_COMBINER_TERMS]; 13491591693c7b415e9869157c711fe11263c95d74eDavid Li /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */ 13501591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum OperandRGB[MAX_COMBINER_TERMS]; 13511591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum OperandA[MAX_COMBINER_TERMS]; 13521591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ScaleShiftRGB; /**< 0, 1 or 2 */ 13531591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ScaleShiftA; /**< 0, 1 or 2 */ 13541591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _NumArgsRGB; /**< Number of inputs used for the RGB combiner */ 13551591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _NumArgsA; /**< Number of inputs used for the A combiner */ 13561591693c7b415e9869157c711fe11263c95d74eDavid Li}; 13571591693c7b415e9869157c711fe11263c95d74eDavid Li 13581591693c7b415e9869157c711fe11263c95d74eDavid Li 13591591693c7b415e9869157c711fe11263c95d74eDavid Li/** 13601591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture coord generation state. 13611591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13621591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texgen 13631591693c7b415e9869157c711fe11263c95d74eDavid Li{ 13641591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */ 13651591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */ 13661591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ObjectPlane[4]; 13671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EyePlane[4]; 13681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 13691591693c7b415e9869157c711fe11263c95d74eDavid Li 13701591693c7b415e9869157c711fe11263c95d74eDavid Li 13711591693c7b415e9869157c711fe11263c95d74eDavid Li/** 13721591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture unit state. Contains enable flags, texture environment/function/ 13731591693c7b415e9869157c711fe11263c95d74eDavid Li * combiners, texgen state, pointers to current texture objects and 13741591693c7b415e9869157c711fe11263c95d74eDavid Li * post-filter color tables. 13751591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13761591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_unit 13771591693c7b415e9869157c711fe11263c95d74eDavid Li{ 13781591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Enabled; /**< bitmask of TEXTURE_*_BIT flags */ 13791591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _ReallyEnabled; /**< 0 or exactly one of TEXTURE_*_BIT flags */ 13801591693c7b415e9869157c711fe11263c95d74eDavid Li 13811591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ 13821591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EnvColor[4]; 13831591693c7b415e9869157c711fe11263c95d74eDavid Li 13841591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenS; 13851591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenT; 13861591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenR; 13871591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenQ; 13881591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ 13891591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */ 13901591693c7b415e9869157c711fe11263c95d74eDavid Li 13911591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LodBias; /**< for biasing mipmap levels */ 13921591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BumpTarget; 13931591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RotMatrix[4]; /* 2x2 matrix */ 13941591693c7b415e9869157c711fe11263c95d74eDavid Li 13951591693c7b415e9869157c711fe11263c95d74eDavid Li /** 13961591693c7b415e9869157c711fe11263c95d74eDavid Li * \name GL_EXT_texture_env_combine 13971591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_tex_env_combine_state Combine; 13991591693c7b415e9869157c711fe11263c95d74eDavid Li 14001591693c7b415e9869157c711fe11263c95d74eDavid Li /** 14011591693c7b415e9869157c711fe11263c95d74eDavid Li * Derived state based on \c EnvMode and the \c BaseFormat of the 14021591693c7b415e9869157c711fe11263c95d74eDavid Li * currently enabled texture. 14031591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14041591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_tex_env_combine_state _EnvMode; 14051591693c7b415e9869157c711fe11263c95d74eDavid Li 14061591693c7b415e9869157c711fe11263c95d74eDavid Li /** 14071591693c7b415e9869157c711fe11263c95d74eDavid Li * Currently enabled combiner state. This will point to either 14081591693c7b415e9869157c711fe11263c95d74eDavid Li * \c Combine or \c _EnvMode. 14091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14101591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_tex_env_combine_state *_CurrentCombine; 14111591693c7b415e9869157c711fe11263c95d74eDavid Li 14121591693c7b415e9869157c711fe11263c95d74eDavid Li /** Current texture object pointers */ 14131591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; 14141591693c7b415e9869157c711fe11263c95d74eDavid Li 14151591693c7b415e9869157c711fe11263c95d74eDavid Li /** Points to highest priority, complete and enabled texture object */ 14161591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *_Current; 14171591693c7b415e9869157c711fe11263c95d74eDavid Li 14181591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_SGI_texture_color_table */ 14191591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 14201591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_color_table ColorTable; 14211591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_color_table ProxyColorTable; 14221591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorTableEnabled; 14231591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 14241591693c7b415e9869157c711fe11263c95d74eDavid Li}; 14251591693c7b415e9869157c711fe11263c95d74eDavid Li 14261591693c7b415e9869157c711fe11263c95d74eDavid Li 14271591693c7b415e9869157c711fe11263c95d74eDavid Li/** 14281591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture attribute group (GL_TEXTURE_BIT). 14291591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_attrib 14311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 14321591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ 14331591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; 14341591693c7b415e9869157c711fe11263c95d74eDavid Li 14351591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS]; 14361591693c7b415e9869157c711fe11263c95d74eDavid Li 14371591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_ARB_seamless_cubemap */ 14381591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CubeMapSeamless; 14391591693c7b415e9869157c711fe11263c95d74eDavid Li 14401591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_shared_texture_palette */ 14411591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SharedPalette; 14421591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_color_table Palette; 14431591693c7b415e9869157c711fe11263c95d74eDavid Li 14441591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture units/samplers used by vertex or fragment texturing */ 14451591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _EnabledUnits; 14461591693c7b415e9869157c711fe11263c95d74eDavid Li 14471591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture coord units/sets used for fragment texturing */ 14481591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _EnabledCoordUnits; 14491591693c7b415e9869157c711fe11263c95d74eDavid Li 14501591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture coord units that have texgen enabled */ 14511591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _TexGenEnabled; 14521591693c7b415e9869157c711fe11263c95d74eDavid Li 14531591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture coord units that have non-identity matrices */ 14541591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _TexMatEnabled; 14551591693c7b415e9869157c711fe11263c95d74eDavid Li 14561591693c7b415e9869157c711fe11263c95d74eDavid Li /** Bitwise-OR of all Texture.Unit[i]._GenFlags */ 14571591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _GenFlags; 14581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 14591591693c7b415e9869157c711fe11263c95d74eDavid Li 14601591693c7b415e9869157c711fe11263c95d74eDavid Li 14611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 14621591693c7b415e9869157c711fe11263c95d74eDavid Li * Transformation attribute group (GL_TRANSFORM_BIT). 14631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_transform_attrib 14651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 14661591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum MatrixMode; /**< Matrix mode */ 14671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EyeUserPlane[MAX_CLIP_PLANES][4]; /**< User clip planes */ 14681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _ClipUserPlane[MAX_CLIP_PLANES][4]; /**< derived */ 14691591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ClipPlanesEnabled; /**< on/off bitmask */ 14701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Normalize; /**< Normalize all normals? */ 14711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ 14721591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ 14731591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DepthClamp; /**< GL_ARB_depth_clamp */ 14741591693c7b415e9869157c711fe11263c95d74eDavid Li 14751591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CullEyePos[4]; 14761591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CullObjPos[4]; 14771591693c7b415e9869157c711fe11263c95d74eDavid Li}; 14781591693c7b415e9869157c711fe11263c95d74eDavid Li 14791591693c7b415e9869157c711fe11263c95d74eDavid Li 14801591693c7b415e9869157c711fe11263c95d74eDavid Li/** 14811591693c7b415e9869157c711fe11263c95d74eDavid Li * Viewport attribute group (GL_VIEWPORT_BIT). 14821591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14831591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_viewport_attrib 14841591693c7b415e9869157c711fe11263c95d74eDavid Li{ 14851591693c7b415e9869157c711fe11263c95d74eDavid Li GLint X, Y; /**< position */ 14861591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizei Width, Height; /**< size */ 14871591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Near, Far; /**< Depth buffer range */ 14881591693c7b415e9869157c711fe11263c95d74eDavid Li GLmatrix _WindowMap; /**< Mapping transformation as a matrix. */ 14891591693c7b415e9869157c711fe11263c95d74eDavid Li}; 14901591693c7b415e9869157c711fe11263c95d74eDavid Li 14911591693c7b415e9869157c711fe11263c95d74eDavid Li 14921591693c7b415e9869157c711fe11263c95d74eDavid Li/** 14931591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_ARB_vertex/pixel_buffer_object buffer object 14941591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14951591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_buffer_object 14961591693c7b415e9869157c711fe11263c95d74eDavid Li{ 14971591693c7b415e9869157c711fe11263c95d74eDavid Li _glthread_Mutex Mutex; 14981591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 14991591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; 15001591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ 15011591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizeiptrARB Size; /**< Size of buffer storage in bytes */ 15021591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ 15031591693c7b415e9869157c711fe11263c95d74eDavid Li /** Fields describing a mapped buffer */ 15041591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 15051591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */ 15061591693c7b415e9869157c711fe11263c95d74eDavid Li GLvoid *Pointer; /**< User-space address of mapping */ 15071591693c7b415e9869157c711fe11263c95d74eDavid Li GLintptr Offset; /**< Mapped offset */ 15081591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizeiptr Length; /**< Mapped length */ 15091591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 15101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Written; /**< Ever written to? (for debugging) */ 15111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 15121591693c7b415e9869157c711fe11263c95d74eDavid Li}; 15131591693c7b415e9869157c711fe11263c95d74eDavid Li 15141591693c7b415e9869157c711fe11263c95d74eDavid Li 15151591693c7b415e9869157c711fe11263c95d74eDavid Li/** 15161591693c7b415e9869157c711fe11263c95d74eDavid Li * Client pixel packing/unpacking attributes 15171591693c7b415e9869157c711fe11263c95d74eDavid Li */ 15181591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelstore_attrib 15191591693c7b415e9869157c711fe11263c95d74eDavid Li{ 15201591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Alignment; 15211591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RowLength; 15221591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SkipPixels; 15231591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SkipRows; 15241591693c7b415e9869157c711fe11263c95d74eDavid Li GLint ImageHeight; 15251591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SkipImages; 15261591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SwapBytes; 15271591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean LsbFirst; 15281591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ClientStorage; /**< GL_APPLE_client_storage */ 15291591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Invert; /**< GL_MESA_pack_invert */ 15301591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */ 15311591693c7b415e9869157c711fe11263c95d74eDavid Li}; 15321591693c7b415e9869157c711fe11263c95d74eDavid Li 15331591693c7b415e9869157c711fe11263c95d74eDavid Li 15341591693c7b415e9869157c711fe11263c95d74eDavid Li/** 15351591693c7b415e9869157c711fe11263c95d74eDavid Li * Client vertex array attributes 15361591693c7b415e9869157c711fe11263c95d74eDavid Li */ 15371591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_client_array 15381591693c7b415e9869157c711fe11263c95d74eDavid Li{ 15391591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Size; /**< components per element (1,2,3,4) */ 15401591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< datatype: GL_FLOAT, GL_INT, etc */ 15411591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Format; /**< default: GL_RGBA, but may be GL_BGRA */ 15421591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizei Stride; /**< user-specified stride */ 15431591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizei StrideB; /**< actual stride in bytes */ 15441591693c7b415e9869157c711fe11263c95d74eDavid Li const GLubyte *Ptr; /**< Points to array data */ 15451591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Enabled flag is a boolean */ 15461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Normalized; /**< GL_ARB_vertex_program */ 15471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Integer; /**< Integer-valued? */ 15481591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _ElementSize; /**< size of each element in bytes */ 15491591693c7b415e9869157c711fe11263c95d74eDavid Li 15501591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */ 15511591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _MaxElement; /**< max element index into array buffer + 1 */ 15521591693c7b415e9869157c711fe11263c95d74eDavid Li}; 15531591693c7b415e9869157c711fe11263c95d74eDavid Li 15541591693c7b415e9869157c711fe11263c95d74eDavid Li 15551591693c7b415e9869157c711fe11263c95d74eDavid Li/** 15561591693c7b415e9869157c711fe11263c95d74eDavid Li * Collection of vertex arrays. Defined by the GL_APPLE_vertex_array_object 15571591693c7b415e9869157c711fe11263c95d74eDavid Li * extension, but a nice encapsulation in any case. 15581591693c7b415e9869157c711fe11263c95d74eDavid Li */ 15591591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_array_object 15601591693c7b415e9869157c711fe11263c95d74eDavid Li{ 15611591693c7b415e9869157c711fe11263c95d74eDavid Li /** Name of the array object as received from glGenVertexArrayAPPLE. */ 15621591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; 15631591693c7b415e9869157c711fe11263c95d74eDavid Li 15641591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 15651591693c7b415e9869157c711fe11263c95d74eDavid Li _glthread_Mutex Mutex; 15661591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean VBOonly; /**< require all arrays to live in VBOs? */ 15671591693c7b415e9869157c711fe11263c95d74eDavid Li 15681591693c7b415e9869157c711fe11263c95d74eDavid Li /** Conventional vertex arrays */ 15691591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 15701591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array Vertex; 15711591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array Weight; 15721591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array Normal; 15731591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array Color; 15741591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array SecondaryColor; 15751591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array FogCoord; 15761591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array Index; 15771591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array EdgeFlag; 15781591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array TexCoord[MAX_TEXTURE_COORD_UNITS]; 15791591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array PointSize; 15801591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 15811591693c7b415e9869157c711fe11263c95d74eDavid Li 15821591693c7b415e9869157c711fe11263c95d74eDavid Li /** 15831591693c7b415e9869157c711fe11263c95d74eDavid Li * Generic arrays for vertex programs/shaders. 15841591693c7b415e9869157c711fe11263c95d74eDavid Li * For NV vertex programs, these attributes alias and take priority 15851591693c7b415e9869157c711fe11263c95d74eDavid Li * over the conventional attribs above. For ARB vertex programs and 15861591693c7b415e9869157c711fe11263c95d74eDavid Li * GLSL vertex shaders, these attributes are separate. 15871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 15881591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_client_array VertexAttrib[MAX_VERTEX_GENERIC_ATTRIBS]; 15891591693c7b415e9869157c711fe11263c95d74eDavid Li 15901591693c7b415e9869157c711fe11263c95d74eDavid Li /** Mask of _NEW_ARRAY_* values indicating which arrays are enabled */ 15911591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _Enabled; 15921591693c7b415e9869157c711fe11263c95d74eDavid Li 15931591693c7b415e9869157c711fe11263c95d74eDavid Li /** 15941591693c7b415e9869157c711fe11263c95d74eDavid Li * Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs 15951591693c7b415e9869157c711fe11263c95d74eDavid Li * we can determine the max legal (in bounds) glDrawElements array index. 15961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 15971591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _MaxElement; 15981591693c7b415e9869157c711fe11263c95d74eDavid Li}; 15991591693c7b415e9869157c711fe11263c95d74eDavid Li 16001591693c7b415e9869157c711fe11263c95d74eDavid Li 16011591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16021591693c7b415e9869157c711fe11263c95d74eDavid Li * Vertex array state 16031591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16041591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_array_attrib 16051591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16061591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ 16071591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_array_object *ArrayObj; 16081591693c7b415e9869157c711fe11263c95d74eDavid Li 16091591693c7b415e9869157c711fe11263c95d74eDavid Li /** The default vertex array object */ 16101591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_array_object *DefaultArrayObj; 16111591693c7b415e9869157c711fe11263c95d74eDavid Li 16121591693c7b415e9869157c711fe11263c95d74eDavid Li /** Array objects (GL_ARB/APPLE_vertex_array_object) */ 16131591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *Objects; 16141591693c7b415e9869157c711fe11263c95d74eDavid Li 16151591693c7b415e9869157c711fe11263c95d74eDavid Li GLint ActiveTexture; /**< Client Active Texture */ 16161591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ 16171591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ 16181591693c7b415e9869157c711fe11263c95d74eDavid Li 16191591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL 3.1 (slightly different from GL_NV_primitive_restart) */ 16201591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PrimitiveRestart; 16211591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint RestartIndex; 16221591693c7b415e9869157c711fe11263c95d74eDavid Li 16231591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield NewState; /**< mask of _NEW_ARRAY_* values */ 16241591693c7b415e9869157c711fe11263c95d74eDavid Li 16251591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_ARB_vertex_buffer_object */ 16261591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *ArrayBufferObj; 16271591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *ElementArrayBufferObj; 16281591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16291591693c7b415e9869157c711fe11263c95d74eDavid Li 16301591693c7b415e9869157c711fe11263c95d74eDavid Li 16311591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16321591693c7b415e9869157c711fe11263c95d74eDavid Li * Feedback buffer state 16331591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16341591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_feedback 16351591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16361591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; 16371591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _Mask; /**< FB_* bits */ 16381591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *Buffer; 16391591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferSize; 16401591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Count; 16411591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16421591693c7b415e9869157c711fe11263c95d74eDavid Li 16431591693c7b415e9869157c711fe11263c95d74eDavid Li 16441591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16451591693c7b415e9869157c711fe11263c95d74eDavid Li * Selection buffer state 16461591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16471591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_selection 16481591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16491591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint *Buffer; /**< selection buffer */ 16501591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferSize; /**< size of the selection buffer */ 16511591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferCount; /**< number of values in the selection buffer */ 16521591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Hits; /**< number of records in the selection buffer */ 16531591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NameStackDepth; /**< name stack depth */ 16541591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */ 16551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean HitFlag; /**< hit flag */ 16561591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat HitMinZ; /**< minimum hit depth */ 16571591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat HitMaxZ; /**< maximum hit depth */ 16581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16591591693c7b415e9869157c711fe11263c95d74eDavid Li 16601591693c7b415e9869157c711fe11263c95d74eDavid Li 16611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16621591693c7b415e9869157c711fe11263c95d74eDavid Li * 1-D Evaluator control points 16631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_1d_map 16651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16661591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Order; /**< Number of control points */ 16671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat u1, u2, du; /**< u1, u2, 1.0/(u2-u1) */ 16681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *Points; /**< Points to contiguous control points */ 16691591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16701591693c7b415e9869157c711fe11263c95d74eDavid Li 16711591693c7b415e9869157c711fe11263c95d74eDavid Li 16721591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16731591693c7b415e9869157c711fe11263c95d74eDavid Li * 2-D Evaluator control points 16741591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16751591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_2d_map 16761591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16771591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Uorder; /**< Number of control points in U dimension */ 16781591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Vorder; /**< Number of control points in V dimension */ 16791591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat u1, u2, du; 16801591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat v1, v2, dv; 16811591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *Points; /**< Points to contiguous control points */ 16821591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16831591693c7b415e9869157c711fe11263c95d74eDavid Li 16841591693c7b415e9869157c711fe11263c95d74eDavid Li 16851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16861591693c7b415e9869157c711fe11263c95d74eDavid Li * All evaluator control point state 16871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_evaluators 16891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16901591693c7b415e9869157c711fe11263c95d74eDavid Li /** 16911591693c7b415e9869157c711fe11263c95d74eDavid Li * \name 1-D maps 16921591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16931591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 16941591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Vertex3; 16951591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Vertex4; 16961591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Index; 16971591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Color4; 16981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Normal; 16991591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture1; 17001591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture2; 17011591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture3; 17021591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture4; 17031591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Attrib[16]; /**< GL_NV_vertex_program */ 17041591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 17051591693c7b415e9869157c711fe11263c95d74eDavid Li 17061591693c7b415e9869157c711fe11263c95d74eDavid Li /** 17071591693c7b415e9869157c711fe11263c95d74eDavid Li * \name 2-D maps 17081591693c7b415e9869157c711fe11263c95d74eDavid Li */ 17091591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 17101591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Vertex3; 17111591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Vertex4; 17121591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Index; 17131591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Color4; 17141591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Normal; 17151591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture1; 17161591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture2; 17171591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture3; 17181591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture4; 17191591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Attrib[16]; /**< GL_NV_vertex_program */ 17201591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 17211591693c7b415e9869157c711fe11263c95d74eDavid Li}; 17221591693c7b415e9869157c711fe11263c95d74eDavid Li 17231591693c7b415e9869157c711fe11263c95d74eDavid Li 17241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 17251591693c7b415e9869157c711fe11263c95d74eDavid Li * Names of the various vertex/fragment program register files, etc. 17261591693c7b415e9869157c711fe11263c95d74eDavid Li * 17271591693c7b415e9869157c711fe11263c95d74eDavid Li * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c) 17281591693c7b415e9869157c711fe11263c95d74eDavid Li * All values should fit in a 4-bit field. 17291591693c7b415e9869157c711fe11263c95d74eDavid Li * 17301591693c7b415e9869157c711fe11263c95d74eDavid Li * NOTE: PROGRAM_ENV_PARAM, PROGRAM_STATE_VAR, PROGRAM_NAMED_PARAM, 17311591693c7b415e9869157c711fe11263c95d74eDavid Li * PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be considered to 17321591693c7b415e9869157c711fe11263c95d74eDavid Li * be "uniform" variables since they can only be set outside glBegin/End. 17331591693c7b415e9869157c711fe11263c95d74eDavid Li * They're also all stored in the same Parameters array. 17341591693c7b415e9869157c711fe11263c95d74eDavid Li */ 17351591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 17361591693c7b415e9869157c711fe11263c95d74eDavid Li{ 17371591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_TEMPORARY, /**< machine->Temporary[] */ 17381591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_INPUT, /**< machine->Inputs[] */ 17391591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_OUTPUT, /**< machine->Outputs[] */ 17401591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_VARYING, /**< machine->Inputs[]/Outputs[] */ 17411591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_LOCAL_PARAM, /**< gl_program->LocalParams[] */ 17421591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_ENV_PARAM, /**< gl_program->Parameters[] */ 17431591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */ 17441591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_NAMED_PARAM, /**< gl_program->Parameters[] */ 17451591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_CONSTANT, /**< gl_program->Parameters[] */ 17461591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_UNIFORM, /**< gl_program->Parameters[] */ 17471591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */ 17481591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_ADDRESS, /**< machine->AddressReg */ 17491591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_SAMPLER, /**< for shader samplers, compile-time only */ 17501591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_UNDEFINED, /**< Invalid/TBD value */ 17511591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_FILE_MAX 17521591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_register_file; 17531591693c7b415e9869157c711fe11263c95d74eDavid Li 17541591693c7b415e9869157c711fe11263c95d74eDavid Li 17551591693c7b415e9869157c711fe11263c95d74eDavid Li/** Vertex and fragment instructions */ 17561591693c7b415e9869157c711fe11263c95d74eDavid Listruct prog_instruction; 17571591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_parameter_list; 17581591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_uniform_list; 17591591693c7b415e9869157c711fe11263c95d74eDavid Li 17601591693c7b415e9869157c711fe11263c95d74eDavid Li 17611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 17621591693c7b415e9869157c711fe11263c95d74eDavid Li * Base class for any kind of program object 17631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 17641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program 17651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 17661591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Id; 17671591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte *String; /**< Null-terminated program text */ 17681591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 17691591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Target; /**< GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_FRAGMENT_PROGRAM_NV */ 17701591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Format; /**< String encoding format */ 17711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Resident; 17721591693c7b415e9869157c711fe11263c95d74eDavid Li 17731591693c7b415e9869157c711fe11263c95d74eDavid Li struct prog_instruction *Instructions; 17741591693c7b415e9869157c711fe11263c95d74eDavid Li 17751591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield InputsRead; /**< Bitmask of which input regs are read */ 17761591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */ 17771591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */ 17781591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield OutputFlags[MAX_PROGRAM_OUTPUTS]; /**< PROG_PARAM_BIT_x flags */ 17791591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield TexturesUsed[MAX_TEXTURE_UNITS]; /**< TEXTURE_x_BIT bitmask */ 17801591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */ 17811591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */ 17821591693c7b415e9869157c711fe11263c95d74eDavid Li 17831591693c7b415e9869157c711fe11263c95d74eDavid Li 17841591693c7b415e9869157c711fe11263c95d74eDavid Li /** Named parameters, constants, etc. from program text */ 17851591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Parameters; 17861591693c7b415e9869157c711fe11263c95d74eDavid Li /** Numbered local parameters */ 17871591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4]; 17881591693c7b415e9869157c711fe11263c95d74eDavid Li 17891591693c7b415e9869157c711fe11263c95d74eDavid Li /** Vertex/fragment shader varying vars */ 17901591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Varying; 17911591693c7b415e9869157c711fe11263c95d74eDavid Li /** Vertex program user-defined attributes */ 17921591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Attributes; 17931591693c7b415e9869157c711fe11263c95d74eDavid Li 17941591693c7b415e9869157c711fe11263c95d74eDavid Li /** Map from sampler unit to texture unit (set by glUniform1i()) */ 17951591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte SamplerUnits[MAX_SAMPLERS]; 17961591693c7b415e9869157c711fe11263c95d74eDavid Li /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */ 17971591693c7b415e9869157c711fe11263c95d74eDavid Li gl_texture_index SamplerTargets[MAX_SAMPLERS]; 17981591693c7b415e9869157c711fe11263c95d74eDavid Li 17991591693c7b415e9869157c711fe11263c95d74eDavid Li /** Bitmask of which register files are read/written with indirect 18001591693c7b415e9869157c711fe11263c95d74eDavid Li * addressing. Mask of (1 << PROGRAM_x) bits. 18011591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18021591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield IndirectRegisterFiles; 18031591693c7b415e9869157c711fe11263c95d74eDavid Li 18041591693c7b415e9869157c711fe11263c95d74eDavid Li /** Logical counts */ 18051591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 18061591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumInstructions; 18071591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumTemporaries; 18081591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumParameters; 18091591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumAttributes; 18101591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumAddressRegs; 18111591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumAluInstructions; 18121591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumTexInstructions; 18131591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumTexIndirections; 18141591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 18151591693c7b415e9869157c711fe11263c95d74eDavid Li /** Native, actual h/w counts */ 18161591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 18171591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeInstructions; 18181591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeTemporaries; 18191591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeParameters; 18201591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeAttributes; 18211591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeAddressRegs; 18221591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeAluInstructions; 18231591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeTexInstructions; 18241591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeTexIndirections; 18251591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 18261591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18271591693c7b415e9869157c711fe11263c95d74eDavid Li 18281591693c7b415e9869157c711fe11263c95d74eDavid Li 18291591693c7b415e9869157c711fe11263c95d74eDavid Li/** Vertex program object */ 18301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_vertex_program 18311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18321591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program Base; /**< base class */ 18331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IsNVProgram; /**< is this a GL_NV_vertex_program program? */ 18341591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IsPositionInvariant; 18351591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18361591693c7b415e9869157c711fe11263c95d74eDavid Li 18371591693c7b415e9869157c711fe11263c95d74eDavid Li 18381591693c7b415e9869157c711fe11263c95d74eDavid Li/** Geometry program object */ 18391591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_geometry_program 18401591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18411591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program Base; /**< base class */ 18421591693c7b415e9869157c711fe11263c95d74eDavid Li 18431591693c7b415e9869157c711fe11263c95d74eDavid Li GLint VerticesOut; 18441591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 18451591693c7b415e9869157c711fe11263c95d74eDavid Li GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 18461591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 18471591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18481591693c7b415e9869157c711fe11263c95d74eDavid Li 18491591693c7b415e9869157c711fe11263c95d74eDavid Li 18501591693c7b415e9869157c711fe11263c95d74eDavid Li/** Fragment program object */ 18511591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_fragment_program 18521591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18531591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program Base; /**< base class */ 18541591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FogOption; 18551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean UsesKill; /**< shader uses KIL instruction */ 18561591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OriginUpperLeft; 18571591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PixelCenterInteger; 18581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18591591693c7b415e9869157c711fe11263c95d74eDavid Li 18601591693c7b415e9869157c711fe11263c95d74eDavid Li 18611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 18621591693c7b415e9869157c711fe11263c95d74eDavid Li * State common to vertex and fragment programs. 18631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_state 18651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18661591693c7b415e9869157c711fe11263c95d74eDavid Li GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */ 18671591693c7b415e9869157c711fe11263c95d74eDavid Li const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */ 18681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18691591693c7b415e9869157c711fe11263c95d74eDavid Li 18701591693c7b415e9869157c711fe11263c95d74eDavid Li 18711591693c7b415e9869157c711fe11263c95d74eDavid Li/** 18721591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for vertex programs. 18731591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18741591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_vertex_program_state 18751591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ 18771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 18781591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ 18791591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ 18801591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *Current; /**< User-bound vertex program */ 18811591693c7b415e9869157c711fe11263c95d74eDavid Li 18821591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently enabled and valid vertex program (including internal 18831591693c7b415e9869157c711fe11263c95d74eDavid Li * programs, user-defined vertex programs and GLSL vertex shaders). 18841591693c7b415e9869157c711fe11263c95d74eDavid Li * This is the program we must use when rendering. 18851591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18861591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *_Current; 18871591693c7b415e9869157c711fe11263c95d74eDavid Li 18881591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 18891591693c7b415e9869157c711fe11263c95d74eDavid Li 18901591693c7b415e9869157c711fe11263c95d74eDavid Li /* For GL_NV_vertex_program only: */ 18911591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum TrackMatrix[MAX_PROGRAM_ENV_PARAMS / 4]; 18921591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum TrackMatrixTransform[MAX_PROGRAM_ENV_PARAMS / 4]; 18931591693c7b415e9869157c711fe11263c95d74eDavid Li 18941591693c7b415e9869157c711fe11263c95d74eDavid Li /** Should fixed-function T&L be implemented with a vertex prog? */ 18951591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _MaintainTnlProgram; 18961591693c7b415e9869157c711fe11263c95d74eDavid Li 18971591693c7b415e9869157c711fe11263c95d74eDavid Li /** Program to emulate fixed-function T&L (see above) */ 18981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *_TnlProgram; 18991591693c7b415e9869157c711fe11263c95d74eDavid Li 19001591693c7b415e9869157c711fe11263c95d74eDavid Li /** Cache of fixed-function programs */ 19011591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_cache *Cache; 19021591693c7b415e9869157c711fe11263c95d74eDavid Li 19031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Overriden; 19041591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19051591693c7b415e9869157c711fe11263c95d74eDavid Li 19061591693c7b415e9869157c711fe11263c95d74eDavid Li 19071591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19081591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for geometry programs. 19091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19101591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_geometry_program_state 19111591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< GL_ARB_GEOMETRY_SHADER4 */ 19131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and valid program? */ 19141591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_geometry_program *Current; /**< user-bound geometry program */ 19151591693c7b415e9869157c711fe11263c95d74eDavid Li 19161591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently enabled and valid program (including internal programs 19171591693c7b415e9869157c711fe11263c95d74eDavid Li * and compiled shader programs). 19181591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19191591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_geometry_program *_Current; 19201591693c7b415e9869157c711fe11263c95d74eDavid Li 19211591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 19221591693c7b415e9869157c711fe11263c95d74eDavid Li 19231591693c7b415e9869157c711fe11263c95d74eDavid Li /** Cache of fixed-function programs */ 19241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_cache *Cache; 19251591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19261591693c7b415e9869157c711fe11263c95d74eDavid Li 19271591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19281591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for fragment programs. 19291591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_fragment_program_state 19311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< User-set fragment program enable flag */ 19331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 19341591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *Current; /**< User-bound fragment program */ 19351591693c7b415e9869157c711fe11263c95d74eDavid Li 19361591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently enabled and valid fragment program (including internal 19371591693c7b415e9869157c711fe11263c95d74eDavid Li * programs, user-defined fragment programs and GLSL fragment shaders). 19381591693c7b415e9869157c711fe11263c95d74eDavid Li * This is the program we must use when rendering. 19391591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19401591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *_Current; 19411591693c7b415e9869157c711fe11263c95d74eDavid Li 19421591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 19431591693c7b415e9869157c711fe11263c95d74eDavid Li 19441591693c7b415e9869157c711fe11263c95d74eDavid Li /** Should fixed-function texturing be implemented with a fragment prog? */ 19451591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _MaintainTexEnvProgram; 19461591693c7b415e9869157c711fe11263c95d74eDavid Li 19471591693c7b415e9869157c711fe11263c95d74eDavid Li /** Program to emulate fixed-function texture env/combine (see above) */ 19481591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *_TexEnvProgram; 19491591693c7b415e9869157c711fe11263c95d74eDavid Li 19501591693c7b415e9869157c711fe11263c95d74eDavid Li /** Cache of fixed-function programs */ 19511591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_cache *Cache; 19521591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19531591693c7b415e9869157c711fe11263c95d74eDavid Li 19541591693c7b415e9869157c711fe11263c95d74eDavid Li 19551591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19561591693c7b415e9869157c711fe11263c95d74eDavid Li * ATI_fragment_shader runtime state 19571591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19581591693c7b415e9869157c711fe11263c95d74eDavid Li#define ATI_FS_INPUT_PRIMARY 0 19591591693c7b415e9869157c711fe11263c95d74eDavid Li#define ATI_FS_INPUT_SECONDARY 1 19601591693c7b415e9869157c711fe11263c95d74eDavid Li 19611591693c7b415e9869157c711fe11263c95d74eDavid Listruct atifs_instruction; 19621591693c7b415e9869157c711fe11263c95d74eDavid Listruct atifs_setupinst; 19631591693c7b415e9869157c711fe11263c95d74eDavid Li 19641591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19651591693c7b415e9869157c711fe11263c95d74eDavid Li * ATI fragment shader 19661591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19671591693c7b415e9869157c711fe11263c95d74eDavid Listruct ati_fragment_shader 19681591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19691591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Id; 19701591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 19711591693c7b415e9869157c711fe11263c95d74eDavid Li struct atifs_instruction *Instructions[2]; 19721591693c7b415e9869157c711fe11263c95d74eDavid Li struct atifs_setupinst *SetupInst[2]; 19731591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Constants[8][4]; 19741591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield LocalConstDef; /**< Indicates which constants have been set */ 19751591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte numArithInstr[2]; 19761591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte regsAssigned[2]; 19771591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte NumPasses; /**< 1 or 2 */ 19781591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte cur_pass; 19791591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte last_optype; 19801591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean interpinp1; 19811591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean isValid; 19821591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint swizzlerq; 19831591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19841591693c7b415e9869157c711fe11263c95d74eDavid Li 19851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19861591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for GL_ATI_fragment_shader 19871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_ati_fragment_shader_state 19891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; 19911591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< enabled and valid shader? */ 19921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Compiling; 19931591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat GlobalConstants[8][4]; 19941591693c7b415e9869157c711fe11263c95d74eDavid Li struct ati_fragment_shader *Current; 19951591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19961591693c7b415e9869157c711fe11263c95d74eDavid Li 19971591693c7b415e9869157c711fe11263c95d74eDavid Li 19981591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19991591693c7b415e9869157c711fe11263c95d74eDavid Li * Occlusion/timer query object. 20001591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20011591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_query_object 20021591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20031591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Target; /**< The query target, when active */ 20041591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Id; /**< hash table ID/name */ 20051591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint64EXT Result; /**< the counter */ 20061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Active; /**< inside Begin/EndQuery */ 20071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Ready; /**< result is ready? */ 20081591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20091591693c7b415e9869157c711fe11263c95d74eDavid Li 20101591693c7b415e9869157c711fe11263c95d74eDavid Li 20111591693c7b415e9869157c711fe11263c95d74eDavid Li/** 20121591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for query objects. 20131591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20141591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_query_state 20151591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20161591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *QueryObjects; 20171591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */ 20181591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */ 20191591693c7b415e9869157c711fe11263c95d74eDavid Li 20201591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_NV_conditional_render */ 20211591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *CondRenderQuery; 20221591693c7b415e9869157c711fe11263c95d74eDavid Li 20231591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_transform_feedback */ 20241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *PrimitivesGenerated; 20251591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *PrimitivesWritten; 20261591693c7b415e9869157c711fe11263c95d74eDavid Li 20271591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_ARB_timer_query */ 20281591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *TimeElapsed; 20291591693c7b415e9869157c711fe11263c95d74eDavid Li 20301591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum CondRenderMode; 20311591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20321591693c7b415e9869157c711fe11263c95d74eDavid Li 20331591693c7b415e9869157c711fe11263c95d74eDavid Li 20341591693c7b415e9869157c711fe11263c95d74eDavid Li/** Sync object state */ 20351591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_sync_object { 20361591693c7b415e9869157c711fe11263c95d74eDavid Li struct simple_node link; 20371591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< GL_SYNC_FENCE */ 20381591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< Fence name */ 20391591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< Reference count */ 20401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DeletePending; /**< Object was deleted while there were still 20411591693c7b415e9869157c711fe11263c95d74eDavid Li * live references (e.g., sync not yet finished) 20421591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20431591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SyncCondition; 20441591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Flags; /**< Flags passed to glFenceSync */ 20451591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint StatusFlag:1; /**< Has the sync object been signaled? */ 20461591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20471591693c7b415e9869157c711fe11263c95d74eDavid Li 20481591693c7b415e9869157c711fe11263c95d74eDavid Li 20491591693c7b415e9869157c711fe11263c95d74eDavid Li/** Set by #pragma directives */ 20501591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_sl_pragmas 20511591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20521591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IgnoreOptimize; /**< ignore #pragma optimize(on/off) ? */ 20531591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IgnoreDebug; /**< ignore #pragma debug(on/off) ? */ 20541591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Optimize; /**< defaults on */ 20551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Debug; /**< defaults off */ 20561591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20571591693c7b415e9869157c711fe11263c95d74eDavid Li 20581591693c7b415e9869157c711fe11263c95d74eDavid Li 20591591693c7b415e9869157c711fe11263c95d74eDavid Li/** 20601591693c7b415e9869157c711fe11263c95d74eDavid Li * A GLSL vertex or fragment shader object. 20611591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20621591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader 20631591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20641591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< GL_FRAGMENT_SHADER || GL_VERTEX_SHADER || GL_GEOMETRY_SHADER_ARB (first field!) */ 20651591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< AKA the handle */ 20661591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< Reference count */ 20671591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DeletePending; 20681591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CompileStatus; 20691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Main; /**< shader defines main() */ 20701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean UnresolvedRefs; 20711591693c7b415e9869157c711fe11263c95d74eDavid Li const GLchar *Source; /**< Source code string */ 20721591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint SourceChecksum; /**< for debug/logging purposes */ 20731591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program *Program; /**< Post-compile assembly code */ 20741591693c7b415e9869157c711fe11263c95d74eDavid Li GLchar *InfoLog; 20751591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_sl_pragmas Pragmas; 20761591693c7b415e9869157c711fe11263c95d74eDavid Li 20771591693c7b415e9869157c711fe11263c95d74eDavid Li unsigned Version; /**< GLSL version used for linking */ 20781591693c7b415e9869157c711fe11263c95d74eDavid Li 20791591693c7b415e9869157c711fe11263c95d74eDavid Li struct exec_list *ir; 20801591693c7b415e9869157c711fe11263c95d74eDavid Li struct glsl_symbol_table *symbols; 20811591693c7b415e9869157c711fe11263c95d74eDavid Li 20821591693c7b415e9869157c711fe11263c95d74eDavid Li /** Shaders containing built-in functions that are used for linking. */ 20831591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader *builtins_to_link[16]; 20841591693c7b415e9869157c711fe11263c95d74eDavid Li unsigned num_builtins_to_link; 20851591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20861591693c7b415e9869157c711fe11263c95d74eDavid Li 20871591693c7b415e9869157c711fe11263c95d74eDavid Li 20881591693c7b415e9869157c711fe11263c95d74eDavid Li/** 20891591693c7b415e9869157c711fe11263c95d74eDavid Li * A GLSL program object. 20901591693c7b415e9869157c711fe11263c95d74eDavid Li * Basically a linked collection of vertex and fragment shaders. 20911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20921591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader_program 20931591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20941591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< Always GL_SHADER_PROGRAM (internal token) */ 20951591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< aka handle or ID */ 20961591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< Reference count */ 20971591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DeletePending; 20981591693c7b415e9869157c711fe11263c95d74eDavid Li 20991591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumShaders; /**< number of attached shaders */ 21001591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader **Shaders; /**< List of attached the shaders */ 21011591693c7b415e9869157c711fe11263c95d74eDavid Li 21021591693c7b415e9869157c711fe11263c95d74eDavid Li /** User-defined attribute bindings (glBindAttribLocation) */ 21031591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Attributes; 21041591693c7b415e9869157c711fe11263c95d74eDavid Li 21051591693c7b415e9869157c711fe11263c95d74eDavid Li /** Transform feedback varyings */ 21061591693c7b415e9869157c711fe11263c95d74eDavid Li struct { 21071591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BufferMode; 21081591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumVarying; 21091591693c7b415e9869157c711fe11263c95d74eDavid Li GLchar **VaryingNames; /**< Array [NumVarying] of char * */ 21101591693c7b415e9869157c711fe11263c95d74eDavid Li } TransformFeedback; 21111591693c7b415e9869157c711fe11263c95d74eDavid Li 21121591693c7b415e9869157c711fe11263c95d74eDavid Li /** Geometry shader state - copied into gl_geometry_program at link time */ 21131591693c7b415e9869157c711fe11263c95d74eDavid Li struct { 21141591693c7b415e9869157c711fe11263c95d74eDavid Li GLint VerticesOut; 21151591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 21161591693c7b415e9869157c711fe11263c95d74eDavid Li GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 21171591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 21181591693c7b415e9869157c711fe11263c95d74eDavid Li } Geom; 21191591693c7b415e9869157c711fe11263c95d74eDavid Li 21201591693c7b415e9869157c711fe11263c95d74eDavid Li /* post-link info: */ 21211591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *VertexProgram; /**< Linked vertex program */ 21221591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *FragmentProgram; /**< Linked fragment prog */ 21231591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_geometry_program *GeometryProgram; /**< Linked geometry prog */ 21241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_uniform_list *Uniforms; 21251591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Varying; 21261591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean LinkStatus; /**< GL_LINK_STATUS */ 21271591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Validated; 21281591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Used; /**< Ever used for drawing? */ 21291591693c7b415e9869157c711fe11263c95d74eDavid Li GLchar *InfoLog; 21301591693c7b415e9869157c711fe11263c95d74eDavid Li 21311591693c7b415e9869157c711fe11263c95d74eDavid Li unsigned Version; /**< GLSL version used for linking */ 21321591693c7b415e9869157c711fe11263c95d74eDavid Li 21331591693c7b415e9869157c711fe11263c95d74eDavid Li /** 21341591693c7b415e9869157c711fe11263c95d74eDavid Li * Per-stage shaders resulting from the first stage of linking. 21351591693c7b415e9869157c711fe11263c95d74eDavid Li * 21361591693c7b415e9869157c711fe11263c95d74eDavid Li * Set of linked shaders for this program. The array is accessed using the 21371591693c7b415e9869157c711fe11263c95d74eDavid Li * \c MESA_SHADER_* defines. Entries for non-existent stages will be 21381591693c7b415e9869157c711fe11263c95d74eDavid Li * \c NULL. 21391591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21401591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader *_LinkedShaders[MESA_SHADER_TYPES]; 21411591693c7b415e9869157c711fe11263c95d74eDavid Li}; 21421591693c7b415e9869157c711fe11263c95d74eDavid Li 21431591693c7b415e9869157c711fe11263c95d74eDavid Li 21441591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_DUMP 0x1 /**< Dump shaders to stdout */ 21451591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_LOG 0x2 /**< Write shaders to files */ 21461591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_OPT 0x4 /**< Force optimizations (override pragmas) */ 21471591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_NO_OPT 0x8 /**< Force no optimizations (override pragmas) */ 21481591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_UNIFORMS 0x10 /**< Print glUniform calls */ 21491591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */ 21501591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */ 21511591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */ 21521591693c7b415e9869157c711fe11263c95d74eDavid Li 21531591693c7b415e9869157c711fe11263c95d74eDavid Li 21541591693c7b415e9869157c711fe11263c95d74eDavid Li/** 21551591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for GLSL vertex/fragment shaders. 21561591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21571591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader_state 21581591693c7b415e9869157c711fe11263c95d74eDavid Li{ 21591591693c7b415e9869157c711fe11263c95d74eDavid Li /** 21601591693c7b415e9869157c711fe11263c95d74eDavid Li * Programs used for rendering 21611591693c7b415e9869157c711fe11263c95d74eDavid Li * 21621591693c7b415e9869157c711fe11263c95d74eDavid Li * There is a separate program set for each shader stage. If 21631591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_EXT_separate_shader_objects is not supported, each of these must point 21641591693c7b415e9869157c711fe11263c95d74eDavid Li * to \c NULL or to the same program. 21651591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21661591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *CurrentVertexProgram; 21671591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *CurrentGeometryProgram; 21681591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *CurrentFragmentProgram; 21691591693c7b415e9869157c711fe11263c95d74eDavid Li 21701591693c7b415e9869157c711fe11263c95d74eDavid Li /** 21711591693c7b415e9869157c711fe11263c95d74eDavid Li * Program used by glUniform calls. 21721591693c7b415e9869157c711fe11263c95d74eDavid Li * 21731591693c7b415e9869157c711fe11263c95d74eDavid Li * Explicitly set by \c glUseProgram and \c glActiveProgramEXT. 21741591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21751591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *ActiveProgram; 21761591693c7b415e9869157c711fe11263c95d74eDavid Li 21771591693c7b415e9869157c711fe11263c95d74eDavid Li void *MemPool; 21781591693c7b415e9869157c711fe11263c95d74eDavid Li 21791591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Flags; /**< Mask of GLSL_x flags */ 21801591693c7b415e9869157c711fe11263c95d74eDavid Li}; 21811591693c7b415e9869157c711fe11263c95d74eDavid Li 21821591693c7b415e9869157c711fe11263c95d74eDavid Li/** 21831591693c7b415e9869157c711fe11263c95d74eDavid Li * Compiler options for a single GLSL shaders type 21841591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21851591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader_compiler_options 21861591693c7b415e9869157c711fe11263c95d74eDavid Li{ 21871591693c7b415e9869157c711fe11263c95d74eDavid Li /** Driver-selectable options: */ 21881591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitCondCodes; /**< Use condition codes? */ 21891591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNVTempInitialization; /**< 0-fill NV temp registers */ 21901591693c7b415e9869157c711fe11263c95d74eDavid Li /** 21911591693c7b415e9869157c711fe11263c95d74eDavid Li * Attempts to flatten all ir_if (OPCODE_IF) for GPUs that can't 21921591693c7b415e9869157c711fe11263c95d74eDavid Li * support control flow. 21931591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21941591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIfs; 21951591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoLoops; 21961591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoFunctions; 21971591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoCont; /**< Emit CONT opcode? */ 21981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ 21991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */ 22001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoPow; /**< Emit POW opcodes? */ 22011591693c7b415e9869157c711fe11263c95d74eDavid Li 22021591693c7b415e9869157c711fe11263c95d74eDavid Li /** 22031591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Forms of indirect addressing the driver cannot do. 22041591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22051591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 22061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectInput; /**< No indirect addressing of inputs */ 22071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectOutput; /**< No indirect addressing of outputs */ 22081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */ 22091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ 22101591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 22111591693c7b415e9869157c711fe11263c95d74eDavid Li 22121591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxUnrollIterations; 22131591693c7b415e9869157c711fe11263c95d74eDavid Li 22141591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */ 22151591693c7b415e9869157c711fe11263c95d74eDavid Li}; 22161591693c7b415e9869157c711fe11263c95d74eDavid Li 22171591693c7b415e9869157c711fe11263c95d74eDavid Li/** 22181591693c7b415e9869157c711fe11263c95d74eDavid Li * Transform feedback object state 22191591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22201591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_transform_feedback_object 22211591693c7b415e9869157c711fe11263c95d74eDavid Li{ 22221591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< AKA the object ID */ 22231591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 22241591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Active; /**< Is transform feedback enabled? */ 22251591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Paused; /**< Is transform feedback paused? */ 22261591693c7b415e9869157c711fe11263c95d74eDavid Li 22271591693c7b415e9869157c711fe11263c95d74eDavid Li /** The feedback buffers */ 22281591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferNames[MAX_FEEDBACK_ATTRIBS]; 22291591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *Buffers[MAX_FEEDBACK_ATTRIBS]; 22301591693c7b415e9869157c711fe11263c95d74eDavid Li 22311591693c7b415e9869157c711fe11263c95d74eDavid Li /** Start of feedback data in dest buffer */ 22321591693c7b415e9869157c711fe11263c95d74eDavid Li GLintptr Offset[MAX_FEEDBACK_ATTRIBS]; 22331591693c7b415e9869157c711fe11263c95d74eDavid Li /** Max data to put into dest buffer (in bytes) */ 22341591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizeiptr Size[MAX_FEEDBACK_ATTRIBS]; 22351591693c7b415e9869157c711fe11263c95d74eDavid Li}; 22361591693c7b415e9869157c711fe11263c95d74eDavid Li 22371591693c7b415e9869157c711fe11263c95d74eDavid Li 22381591693c7b415e9869157c711fe11263c95d74eDavid Li/** 22391591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for transform feedback. 22401591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22411591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_transform_feedback 22421591693c7b415e9869157c711fe11263c95d74eDavid Li{ 22431591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Mode; /**< GL_POINTS, GL_LINES or GL_TRIANGLES */ 22441591693c7b415e9869157c711fe11263c95d74eDavid Li 22451591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */ 22461591693c7b415e9869157c711fe11263c95d74eDavid Li 22471591693c7b415e9869157c711fe11263c95d74eDavid Li /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */ 22481591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *CurrentBuffer; 22491591693c7b415e9869157c711fe11263c95d74eDavid Li 22501591693c7b415e9869157c711fe11263c95d74eDavid Li /** The table of all transform feedback objects */ 22511591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *Objects; 22521591693c7b415e9869157c711fe11263c95d74eDavid Li 22531591693c7b415e9869157c711fe11263c95d74eDavid Li /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */ 22541591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_transform_feedback_object *CurrentObject; 22551591693c7b415e9869157c711fe11263c95d74eDavid Li 22561591693c7b415e9869157c711fe11263c95d74eDavid Li /** The default xform-fb object (Name==0) */ 22571591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_transform_feedback_object *DefaultObject; 22581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 22591591693c7b415e9869157c711fe11263c95d74eDavid Li 22601591693c7b415e9869157c711fe11263c95d74eDavid Li 22611591693c7b415e9869157c711fe11263c95d74eDavid Li 22621591693c7b415e9869157c711fe11263c95d74eDavid Li/** 22631591693c7b415e9869157c711fe11263c95d74eDavid Li * State which can be shared by multiple contexts: 22641591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22651591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shared_state 22661591693c7b415e9869157c711fe11263c95d74eDavid Li{ 22671591693c7b415e9869157c711fe11263c95d74eDavid Li _glthread_Mutex Mutex; /**< for thread safety */ 22681591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< Reference count */ 22691591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ 22701591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ 22711591693c7b415e9869157c711fe11263c95d74eDavid Li 22721591693c7b415e9869157c711fe11263c95d74eDavid Li /** Default texture objects (shared by all texture units) */ 22731591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS]; 22741591693c7b415e9869157c711fe11263c95d74eDavid Li 22751591693c7b415e9869157c711fe11263c95d74eDavid Li /** Fallback texture used when a bound texture is incomplete */ 22761591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *FallbackTex; 22771591693c7b415e9869157c711fe11263c95d74eDavid Li 22781591693c7b415e9869157c711fe11263c95d74eDavid Li /** 22791591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Thread safety and statechange notification for texture 22801591693c7b415e9869157c711fe11263c95d74eDavid Li * objects. 22811591693c7b415e9869157c711fe11263c95d74eDavid Li * 22821591693c7b415e9869157c711fe11263c95d74eDavid Li * \todo Improve the granularity of locking. 22831591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22841591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 22851591693c7b415e9869157c711fe11263c95d74eDavid Li _glthread_Mutex TexMutex; /**< texobj thread safety */ 22861591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint TextureStateStamp; /**< state notification for shared tex */ 22871591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 22881591693c7b415e9869157c711fe11263c95d74eDavid Li 22891591693c7b415e9869157c711fe11263c95d74eDavid Li /** Default buffer object for vertex arrays that aren't in VBOs */ 22901591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *NullBufferObj; 22911591693c7b415e9869157c711fe11263c95d74eDavid Li 22921591693c7b415e9869157c711fe11263c95d74eDavid Li /** 22931591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Vertex/geometry/fragment programs 22941591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22951591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 22961591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */ 22971591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *DefaultVertexProgram; 22981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *DefaultFragmentProgram; 22991591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_geometry_program *DefaultGeometryProgram; 23001591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 23011591693c7b415e9869157c711fe11263c95d74eDavid Li 23021591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_ATI_fragment_shader */ 23031591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *ATIShaders; 23041591693c7b415e9869157c711fe11263c95d74eDavid Li struct ati_fragment_shader *DefaultFragmentShader; 23051591693c7b415e9869157c711fe11263c95d74eDavid Li 23061591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *BufferObjects; 23071591693c7b415e9869157c711fe11263c95d74eDavid Li 23081591693c7b415e9869157c711fe11263c95d74eDavid Li /** Table of both gl_shader and gl_shader_program objects */ 23091591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *ShaderObjects; 23101591693c7b415e9869157c711fe11263c95d74eDavid Li 23111591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_EXT_framebuffer_object */ 23121591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *RenderBuffers; 23131591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *FrameBuffers; 23141591693c7b415e9869157c711fe11263c95d74eDavid Li 23151591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_ARB_sync */ 23161591693c7b415e9869157c711fe11263c95d74eDavid Li struct simple_node SyncObjects; 23171591693c7b415e9869157c711fe11263c95d74eDavid Li 23181591693c7b415e9869157c711fe11263c95d74eDavid Li void *DriverData; /**< Device driver shared state */ 23191591693c7b415e9869157c711fe11263c95d74eDavid Li}; 23201591693c7b415e9869157c711fe11263c95d74eDavid Li 23211591693c7b415e9869157c711fe11263c95d74eDavid Li 23221591693c7b415e9869157c711fe11263c95d74eDavid Li 23231591693c7b415e9869157c711fe11263c95d74eDavid Li 23241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 23251591693c7b415e9869157c711fe11263c95d74eDavid Li * A renderbuffer stores colors or depth values or stencil values. 23261591693c7b415e9869157c711fe11263c95d74eDavid Li * A framebuffer object will have a collection of these. 23271591693c7b415e9869157c711fe11263c95d74eDavid Li * Data are read/written to the buffer with a handful of Get/Put functions. 23281591693c7b415e9869157c711fe11263c95d74eDavid Li * 23291591693c7b415e9869157c711fe11263c95d74eDavid Li * Instances of this object are allocated with the Driver's NewRenderbuffer 23301591693c7b415e9869157c711fe11263c95d74eDavid Li * hook. Drivers will likely wrap this class inside a driver-specific 23311591693c7b415e9869157c711fe11263c95d74eDavid Li * class to simulate inheritance. 23321591693c7b415e9869157c711fe11263c95d74eDavid Li */ 23331591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_renderbuffer 23341591693c7b415e9869157c711fe11263c95d74eDavid Li{ 23351591693c7b415e9869157c711fe11263c95d74eDavid Li#define RB_MAGIC 0xaabbccdd 23361591693c7b415e9869157c711fe11263c95d74eDavid Li int Magic; /** XXX TEMPORARY DEBUG INFO */ 23371591693c7b415e9869157c711fe11263c95d74eDavid Li _glthread_Mutex Mutex; /**< for thread safety */ 23381591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ClassID; /**< Useful for drivers */ 23391591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; 23401591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 23411591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Width, Height; 23421591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 23431591693c7b415e9869157c711fe11263c95d74eDavid Li 23441591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum InternalFormat; /**< The user-specified format */ 23451591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or 23461591693c7b415e9869157c711fe11263c95d74eDavid Li GL_STENCIL_INDEX. */ 23471591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Format; /**< The actual format: MESA_FORMAT_x */ 23481591693c7b415e9869157c711fe11263c95d74eDavid Li 23491591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte NumSamples; 23501591693c7b415e9869157c711fe11263c95d74eDavid Li 23511591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum DataType; /**< Type of values passed to the Get/Put functions */ 23521591693c7b415e9869157c711fe11263c95d74eDavid Li GLvoid *Data; /**< This may not be used by some kinds of RBs */ 23531591693c7b415e9869157c711fe11263c95d74eDavid Li 23541591693c7b415e9869157c711fe11263c95d74eDavid Li /* Used to wrap one renderbuffer around another: */ 23551591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *Wrapped; 23561591693c7b415e9869157c711fe11263c95d74eDavid Li 23571591693c7b415e9869157c711fe11263c95d74eDavid Li /* Delete this renderbuffer */ 23581591693c7b415e9869157c711fe11263c95d74eDavid Li void (*Delete)(struct gl_renderbuffer *rb); 23591591693c7b415e9869157c711fe11263c95d74eDavid Li 23601591693c7b415e9869157c711fe11263c95d74eDavid Li /* Allocate new storage for this renderbuffer */ 23611591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean (*AllocStorage)(struct gl_context *ctx, struct gl_renderbuffer *rb, 23621591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum internalFormat, 23631591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint width, GLuint height); 23641591693c7b415e9869157c711fe11263c95d74eDavid Li 23651591693c7b415e9869157c711fe11263c95d74eDavid Li /* Lock/Unlock are called before/after calling the Get/Put functions. 23661591693c7b415e9869157c711fe11263c95d74eDavid Li * Not sure this is the right place for these yet. 23671591693c7b415e9869157c711fe11263c95d74eDavid Li void (*Lock)(struct gl_context *ctx, struct gl_renderbuffer *rb); 23681591693c7b415e9869157c711fe11263c95d74eDavid Li void (*Unlock)(struct gl_context *ctx, struct gl_renderbuffer *rb); 23691591693c7b415e9869157c711fe11263c95d74eDavid Li */ 23701591693c7b415e9869157c711fe11263c95d74eDavid Li 23711591693c7b415e9869157c711fe11263c95d74eDavid Li /* Return a pointer to the element/pixel at (x,y). 23721591693c7b415e9869157c711fe11263c95d74eDavid Li * Should return NULL if the buffer memory can't be directly addressed. 23731591693c7b415e9869157c711fe11263c95d74eDavid Li */ 23741591693c7b415e9869157c711fe11263c95d74eDavid Li void *(*GetPointer)(struct gl_context *ctx, struct gl_renderbuffer *rb, 23751591693c7b415e9869157c711fe11263c95d74eDavid Li GLint x, GLint y); 23761591693c7b415e9869157c711fe11263c95d74eDavid Li 23771591693c7b415e9869157c711fe11263c95d74eDavid Li /* Get/Read a row of values. 23781591693c7b415e9869157c711fe11263c95d74eDavid Li * The values will be of format _BaseFormat and type DataType. 23791591693c7b415e9869157c711fe11263c95d74eDavid Li */ 23801591693c7b415e9869157c711fe11263c95d74eDavid Li void (*GetRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 23811591693c7b415e9869157c711fe11263c95d74eDavid Li GLint x, GLint y, void *values); 23821591693c7b415e9869157c711fe11263c95d74eDavid Li 23831591693c7b415e9869157c711fe11263c95d74eDavid Li /* Get/Read values at arbitrary locations. 23841591693c7b415e9869157c711fe11263c95d74eDavid Li * The values will be of format _BaseFormat and type DataType. 23851591693c7b415e9869157c711fe11263c95d74eDavid Li */ 23861591693c7b415e9869157c711fe11263c95d74eDavid Li void (*GetValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 23871591693c7b415e9869157c711fe11263c95d74eDavid Li const GLint x[], const GLint y[], void *values); 23881591693c7b415e9869157c711fe11263c95d74eDavid Li 23891591693c7b415e9869157c711fe11263c95d74eDavid Li /* Put/Write a row of values. 23901591693c7b415e9869157c711fe11263c95d74eDavid Li * The values will be of format _BaseFormat and type DataType. 23911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 23921591693c7b415e9869157c711fe11263c95d74eDavid Li void (*PutRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 23931591693c7b415e9869157c711fe11263c95d74eDavid Li GLint x, GLint y, const void *values, const GLubyte *mask); 23941591693c7b415e9869157c711fe11263c95d74eDavid Li 23951591693c7b415e9869157c711fe11263c95d74eDavid Li /* Put/Write a row of RGB values. This is a special-case routine that's 23961591693c7b415e9869157c711fe11263c95d74eDavid Li * only used for RGBA renderbuffers when the source data is GL_RGB. That's 23971591693c7b415e9869157c711fe11263c95d74eDavid Li * a common case for glDrawPixels and some triangle routines. 23981591693c7b415e9869157c711fe11263c95d74eDavid Li * The values will be of format GL_RGB and type DataType. 23991591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24001591693c7b415e9869157c711fe11263c95d74eDavid Li void (*PutRowRGB)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 24011591693c7b415e9869157c711fe11263c95d74eDavid Li GLint x, GLint y, const void *values, const GLubyte *mask); 24021591693c7b415e9869157c711fe11263c95d74eDavid Li 24031591693c7b415e9869157c711fe11263c95d74eDavid Li 24041591693c7b415e9869157c711fe11263c95d74eDavid Li /* Put/Write a row of identical values. 24051591693c7b415e9869157c711fe11263c95d74eDavid Li * The values will be of format _BaseFormat and type DataType. 24061591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24071591693c7b415e9869157c711fe11263c95d74eDavid Li void (*PutMonoRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 24081591693c7b415e9869157c711fe11263c95d74eDavid Li GLint x, GLint y, const void *value, const GLubyte *mask); 24091591693c7b415e9869157c711fe11263c95d74eDavid Li 24101591693c7b415e9869157c711fe11263c95d74eDavid Li /* Put/Write values at arbitrary locations. 24111591693c7b415e9869157c711fe11263c95d74eDavid Li * The values will be of format _BaseFormat and type DataType. 24121591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24131591693c7b415e9869157c711fe11263c95d74eDavid Li void (*PutValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 24141591693c7b415e9869157c711fe11263c95d74eDavid Li const GLint x[], const GLint y[], const void *values, 24151591693c7b415e9869157c711fe11263c95d74eDavid Li const GLubyte *mask); 24161591693c7b415e9869157c711fe11263c95d74eDavid Li /* Put/Write identical values at arbitrary locations. 24171591693c7b415e9869157c711fe11263c95d74eDavid Li * The values will be of format _BaseFormat and type DataType. 24181591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24191591693c7b415e9869157c711fe11263c95d74eDavid Li void (*PutMonoValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, 24201591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint count, const GLint x[], const GLint y[], 24211591693c7b415e9869157c711fe11263c95d74eDavid Li const void *value, const GLubyte *mask); 24221591693c7b415e9869157c711fe11263c95d74eDavid Li}; 24231591693c7b415e9869157c711fe11263c95d74eDavid Li 24241591693c7b415e9869157c711fe11263c95d74eDavid Li 24251591693c7b415e9869157c711fe11263c95d74eDavid Li/** 24261591693c7b415e9869157c711fe11263c95d74eDavid Li * A renderbuffer attachment points to either a texture object (and specifies 24271591693c7b415e9869157c711fe11263c95d74eDavid Li * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer. 24281591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24291591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_renderbuffer_attachment 24301591693c7b415e9869157c711fe11263c95d74eDavid Li{ 24311591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */ 24321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Complete; 24331591693c7b415e9869157c711fe11263c95d74eDavid Li 24341591693c7b415e9869157c711fe11263c95d74eDavid Li /** 24351591693c7b415e9869157c711fe11263c95d74eDavid Li * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the 24361591693c7b415e9869157c711fe11263c95d74eDavid Li * application supplied renderbuffer object. 24371591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24381591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *Renderbuffer; 24391591693c7b415e9869157c711fe11263c95d74eDavid Li 24401591693c7b415e9869157c711fe11263c95d74eDavid Li /** 24411591693c7b415e9869157c711fe11263c95d74eDavid Li * If \c Type is \c GL_TEXTURE, this stores a pointer to the application 24421591693c7b415e9869157c711fe11263c95d74eDavid Li * supplied texture object. 24431591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24441591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *Texture; 24451591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint TextureLevel; /**< Attached mipmap level. */ 24461591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */ 24471591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D 24481591693c7b415e9869157c711fe11263c95d74eDavid Li * and 2D array textures */ 24491591693c7b415e9869157c711fe11263c95d74eDavid Li}; 24501591693c7b415e9869157c711fe11263c95d74eDavid Li 24511591693c7b415e9869157c711fe11263c95d74eDavid Li 24521591693c7b415e9869157c711fe11263c95d74eDavid Li/** 24531591693c7b415e9869157c711fe11263c95d74eDavid Li * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc). 24541591693c7b415e9869157c711fe11263c95d74eDavid Li * In C++ terms, think of this as a base class from which device drivers 24551591693c7b415e9869157c711fe11263c95d74eDavid Li * will make derived classes. 24561591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24571591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_framebuffer 24581591693c7b415e9869157c711fe11263c95d74eDavid Li{ 24591591693c7b415e9869157c711fe11263c95d74eDavid Li _glthread_Mutex Mutex; /**< for thread safety */ 24601591693c7b415e9869157c711fe11263c95d74eDavid Li /** 24611591693c7b415e9869157c711fe11263c95d74eDavid Li * If zero, this is a window system framebuffer. If non-zero, this 24621591693c7b415e9869157c711fe11263c95d74eDavid Li * is a FBO framebuffer; note that for some devices (i.e. those with 24631591693c7b415e9869157c711fe11263c95d74eDavid Li * a natural pixel coordinate system for FBOs that differs from the 24641591693c7b415e9869157c711fe11263c95d74eDavid Li * OpenGL/Mesa coordinate system), this means that the viewport, 24651591693c7b415e9869157c711fe11263c95d74eDavid Li * polygon face orientation, and polygon stipple will have to be inverted. 24661591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24671591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; 24681591693c7b415e9869157c711fe11263c95d74eDavid Li 24691591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 24701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DeletePending; 24711591693c7b415e9869157c711fe11263c95d74eDavid Li 24721591693c7b415e9869157c711fe11263c95d74eDavid Li /** 24731591693c7b415e9869157c711fe11263c95d74eDavid Li * The framebuffer's visual. Immutable if this is a window system buffer. 24741591693c7b415e9869157c711fe11263c95d74eDavid Li * Computed from attachments if user-made FBO. 24751591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24761591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_config Visual; 24771591693c7b415e9869157c711fe11263c95d74eDavid Li 24781591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Initialized; 24791591693c7b415e9869157c711fe11263c95d74eDavid Li 24801591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Width, Height; /**< size of frame buffer in pixels */ 24811591693c7b415e9869157c711fe11263c95d74eDavid Li 24821591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Drawing bounds (Intersection of buffer size and scissor box) */ 24831591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 24841591693c7b415e9869157c711fe11263c95d74eDavid Li GLint _Xmin, _Xmax; /**< inclusive */ 24851591693c7b415e9869157c711fe11263c95d74eDavid Li GLint _Ymin, _Ymax; /**< exclusive */ 24861591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 24871591693c7b415e9869157c711fe11263c95d74eDavid Li 24881591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Derived Z buffer stuff */ 24891591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 24901591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _DepthMax; /**< Max depth buffer value */ 24911591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _DepthMaxF; /**< Float max depth buffer value */ 24921591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MRD; /**< minimum resolvable difference in Z values */ 24931591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 24941591693c7b415e9869157c711fe11263c95d74eDavid Li 24951591693c7b415e9869157c711fe11263c95d74eDavid Li /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ 24961591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum _Status; 24971591693c7b415e9869157c711fe11263c95d74eDavid Li 24981591693c7b415e9869157c711fe11263c95d74eDavid Li /** Integer color values */ 24991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _IntegerColor; 25001591693c7b415e9869157c711fe11263c95d74eDavid Li 25011591693c7b415e9869157c711fe11263c95d74eDavid Li /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ 25021591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; 25031591693c7b415e9869157c711fe11263c95d74eDavid Li 25041591693c7b415e9869157c711fe11263c95d74eDavid Li /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER 25051591693c7b415e9869157c711fe11263c95d74eDavid Li * attribute group and GL_PIXEL attribute group, respectively. 25061591693c7b415e9869157c711fe11263c95d74eDavid Li */ 25071591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS]; 25081591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorReadBuffer; 25091591693c7b415e9869157c711fe11263c95d74eDavid Li 25101591693c7b415e9869157c711fe11263c95d74eDavid Li /** Computed from ColorDraw/ReadBuffer above */ 25111591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _NumColorDrawBuffers; 25121591693c7b415e9869157c711fe11263c95d74eDavid Li GLint _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; /**< BUFFER_x or -1 */ 25131591693c7b415e9869157c711fe11263c95d74eDavid Li GLint _ColorReadBufferIndex; /* -1 = None */ 25141591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; 25151591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *_ColorReadBuffer; 25161591693c7b415e9869157c711fe11263c95d74eDavid Li 25171591693c7b415e9869157c711fe11263c95d74eDavid Li /** The Actual depth/stencil buffers to use. May be wrappers around the 25181591693c7b415e9869157c711fe11263c95d74eDavid Li * depth/stencil buffers attached above. */ 25191591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *_DepthBuffer; 25201591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *_StencilBuffer; 25211591693c7b415e9869157c711fe11263c95d74eDavid Li 25221591693c7b415e9869157c711fe11263c95d74eDavid Li /** Delete this framebuffer */ 25231591693c7b415e9869157c711fe11263c95d74eDavid Li void (*Delete)(struct gl_framebuffer *fb); 25241591693c7b415e9869157c711fe11263c95d74eDavid Li}; 25251591693c7b415e9869157c711fe11263c95d74eDavid Li 25261591693c7b415e9869157c711fe11263c95d74eDavid Li 25271591693c7b415e9869157c711fe11263c95d74eDavid Li/** 25281591693c7b415e9869157c711fe11263c95d74eDavid Li * Limits for vertex and fragment programs/shaders. 25291591693c7b415e9869157c711fe11263c95d74eDavid Li */ 25301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_constants 25311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 25321591693c7b415e9869157c711fe11263c95d74eDavid Li /* logical limits */ 25331591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxInstructions; 25341591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxAluInstructions; 25351591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTexInstructions; 25361591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTexIndirections; 25371591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxAttribs; 25381591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTemps; 25391591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxAddressRegs; 25401591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxParameters; 25411591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxLocalParams; 25421591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxEnvParams; 25431591693c7b415e9869157c711fe11263c95d74eDavid Li /* native/hardware limits */ 25441591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeInstructions; 25451591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeAluInstructions; 25461591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeTexInstructions; 25471591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeTexIndirections; 25481591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeAttribs; 25491591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeTemps; 25501591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeAddressRegs; 25511591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeParameters; 25521591693c7b415e9869157c711fe11263c95d74eDavid Li /* For shaders */ 25531591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxUniformComponents; 25541591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_ARB_geometry_shader4 */ 25551591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryTextureImageUnits; 25561591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryVaryingComponents; 25571591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxVertexVaryingComponents; 25581591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryUniformComponents; 25591591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryOutputVertices; 25601591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryTotalOutputComponents; 25611591693c7b415e9869157c711fe11263c95d74eDavid Li}; 25621591693c7b415e9869157c711fe11263c95d74eDavid Li 25631591693c7b415e9869157c711fe11263c95d74eDavid Li 25641591693c7b415e9869157c711fe11263c95d74eDavid Li/** 25651591693c7b415e9869157c711fe11263c95d74eDavid Li * Constants which may be overridden by device driver during context creation 25661591693c7b415e9869157c711fe11263c95d74eDavid Li * but are never changed after that. 25671591693c7b415e9869157c711fe11263c95d74eDavid Li */ 25681591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_constants 25691591693c7b415e9869157c711fe11263c95d74eDavid Li{ 25701591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxTextureMbytes; /**< Max memory per image, in MB */ 25711591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxTextureLevels; /**< Max mipmap levels. */ 25721591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */ 25731591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */ 25741591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxArrayTextureLayers; /**< Max layers in array textures */ 25751591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */ 25761591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTextureCoordUnits; 25771591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTextureImageUnits; 25781591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxVertexTextureImageUnits; 25791591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxCombinedTextureImageUnits; 25801591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */ 25811591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 25821591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ 25831591693c7b415e9869157c711fe11263c95d74eDavid Li 25841591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxArrayLockSize; 25851591693c7b415e9869157c711fe11263c95d74eDavid Li 25861591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SubPixelBits; 25871591693c7b415e9869157c711fe11263c95d74eDavid Li 25881591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinPointSize, MaxPointSize; /**< aliased */ 25891591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */ 25901591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat PointSizeGranularity; 25911591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinLineWidth, MaxLineWidth; /**< aliased */ 25921591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */ 25931591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LineWidthGranularity; 25941591693c7b415e9869157c711fe11263c95d74eDavid Li 25951591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxColorTableSize; 25961591693c7b415e9869157c711fe11263c95d74eDavid Li 25971591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxClipPlanes; 25981591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxLights; 25991591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxShininess; /**< GL_NV_light_max_exponent */ 26001591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */ 26011591693c7b415e9869157c711fe11263c95d74eDavid Li 26021591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxViewportWidth, MaxViewportHeight; 26031591693c7b415e9869157c711fe11263c95d74eDavid Li 26041591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_constants VertexProgram; /**< GL_ARB_vertex_program */ 26051591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_constants FragmentProgram; /**< GL_ARB_fragment_program */ 26061591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_constants GeometryProgram; /**< GL_ARB_geometry_shader4 */ 26071591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxProgramMatrices; 26081591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxProgramMatrixStackDepth; 26091591693c7b415e9869157c711fe11263c95d74eDavid Li 26101591693c7b415e9869157c711fe11263c95d74eDavid Li /** vertex array / buffer object bounds checking */ 26111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CheckArrayBounds; 26121591693c7b415e9869157c711fe11263c95d74eDavid Li 26131591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */ 26141591693c7b415e9869157c711fe11263c95d74eDavid Li 26151591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */ 26161591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ 26171591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ 26181591693c7b415e9869157c711fe11263c95d74eDavid Li 26191591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxVarying; /**< Number of float[4] varying parameters */ 26201591693c7b415e9869157c711fe11263c95d74eDavid Li 26211591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */ 26221591693c7b415e9869157c711fe11263c95d74eDavid Li 26231591693c7b415e9869157c711fe11263c95d74eDavid Li /** Which texture units support GL_ATI_envmap_bumpmap as targets */ 26241591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield SupportedBumpUnits; 26251591693c7b415e9869157c711fe11263c95d74eDavid Li 26261591693c7b415e9869157c711fe11263c95d74eDavid Li /** 26271591693c7b415e9869157c711fe11263c95d74eDavid Li * Maximum amount of time, measured in nanseconds, that the server can wait. 26281591693c7b415e9869157c711fe11263c95d74eDavid Li */ 26291591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint64 MaxServerWaitTimeout; 26301591693c7b415e9869157c711fe11263c95d74eDavid Li 26311591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_provoking_vertex */ 26321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean QuadsFollowProvokingVertexConvention; 26331591693c7b415e9869157c711fe11263c95d74eDavid Li 26341591693c7b415e9869157c711fe11263c95d74eDavid Li /** OpenGL version 3.0 */ 26351591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ContextFlags; /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */ 26361591693c7b415e9869157c711fe11263c95d74eDavid Li 26371591693c7b415e9869157c711fe11263c95d74eDavid Li /** OpenGL version 3.2 */ 26381591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ 26391591693c7b415e9869157c711fe11263c95d74eDavid Li 26401591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_transform_feedback */ 26411591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTransformFeedbackSeparateAttribs; 26421591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTransformFeedbackSeparateComponents; 26431591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTransformFeedbackInterleavedComponents; 26441591693c7b415e9869157c711fe11263c95d74eDavid Li 26451591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_gpu_shader4 */ 26461591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MinProgramTexelOffset, MaxProgramTexelOffset; 26471591693c7b415e9869157c711fe11263c95d74eDavid Li}; 26481591693c7b415e9869157c711fe11263c95d74eDavid Li 26491591693c7b415e9869157c711fe11263c95d74eDavid Li 26501591693c7b415e9869157c711fe11263c95d74eDavid Li/** 26511591693c7b415e9869157c711fe11263c95d74eDavid Li * Enable flag for each OpenGL extension. Different device drivers will 26521591693c7b415e9869157c711fe11263c95d74eDavid Li * enable different extensions at runtime. 26531591693c7b415e9869157c711fe11263c95d74eDavid Li */ 26541591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_extensions 26551591693c7b415e9869157c711fe11263c95d74eDavid Li{ 26561591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean dummy; /* don't remove this! */ 26571591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_blend_func_extended; 26581591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_copy_buffer; 26591591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_depth_buffer_float; 26601591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_depth_clamp; 26611591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_depth_texture; 26621591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_draw_buffers; 26631591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_draw_elements_base_vertex; 26641591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_draw_instanced; 26651591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_coord_conventions; 26661591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_program; 26671591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_program_shadow; 26681591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_shader; 26691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_framebuffer_object; 26701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_explicit_attrib_location; 26711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_geometry_shader4; 26721591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_half_float_pixel; 26731591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_half_float_vertex; 26741591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_instanced_arrays; 26751591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_map_buffer_range; 26761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_multisample; 26771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_multitexture; 26781591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_occlusion_query; 26791591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_occlusion_query2; 26801591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_point_sprite; 26811591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_sampler_objects; 26821591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_seamless_cube_map; 26831591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shader_objects; 26841591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shader_stencil_export; 26851591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shading_language_100; 26861591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shadow; 26871591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shadow_ambient; 26881591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_sync; 26891591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_border_clamp; 26901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_buffer_object; 26911591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_compression; 26921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_compression_rgtc; 26931591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_cube_map; 26941591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_env_combine; 26951591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_env_crossbar; 26961591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_env_dot3; 26971591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_float; 26981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_mirrored_repeat; 26991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_multisample; 27001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_non_power_of_two; 27011591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_rg; 27021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_rgb10_a2ui; 27031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_timer_query; 27041591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_transform_feedback2; 27051591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_transpose_matrix; 27061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_uniform_buffer_object; 27071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_array_object; 27081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_buffer_object; 27091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_program; 27101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_shader; 27111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_type_2_10_10_10_rev; 27121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_window_pos; 27131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_abgr; 27141591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_bgra; 27151591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_color; 27161591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_equation_separate; 27171591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_func_separate; 27181591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_logic_op; 27191591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_minmax; 27201591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_subtract; 27211591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_clip_volume_hint; 27221591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_compiled_vertex_array; 27231591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_copy_texture; 27241591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_depth_bounds_test; 27251591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_draw_buffers2; 27261591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_draw_range_elements; 27271591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_fog_coord; 27281591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_blit; 27291591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_multisample; 27301591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_object; 27311591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_sRGB; 27321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_gpu_program_parameters; 27331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_gpu_shader4; 27341591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_multi_draw_arrays; 27351591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_paletted_texture; 27361591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_packed_depth_stencil; 27371591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_packed_float; 27381591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_packed_pixels; 27391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_pixel_buffer_object; 27401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_point_parameters; 27411591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_polygon_offset; 27421591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_provoking_vertex; 27431591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_rescale_normal; 27441591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_shadow_funcs; 27451591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_secondary_color; 27461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_separate_shader_objects; 27471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_separate_specular_color; 27481591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_shared_texture_palette; 27491591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_stencil_wrap; 27501591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_stencil_two_side; 27511591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_subtexture; 27521591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture; 27531591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_object; 27541591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture3D; 27551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_array; 27561591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_compression_s3tc; 27571591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_env_add; 27581591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_env_combine; 27591591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_env_dot3; 27601591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_filter_anisotropic; 27611591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_integer; 27621591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_lod_bias; 27631591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_mirror_clamp; 27641591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_shared_exponent; 27651591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_sRGB; 27661591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_swizzle; 27671591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_transform_feedback; 27681591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_timer_query; 27691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_vertex_array; 27701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_vertex_array_bgra; 27711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_vertex_array_set; 27721591693c7b415e9869157c711fe11263c95d74eDavid Li /* vendor extensions */ 27731591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_client_storage; 27741591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_packed_pixels; 27751591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_vertex_array_object; 27761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_object_purgeable; 27771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_envmap_bumpmap; 27781591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_texture_mirror_once; 27791591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_texture_env_combine3; 27801591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_fragment_shader; 27811591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_separate_stencil; 27821591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IBM_rasterpos_clip; 27831591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IBM_multimode_draw_arrays; 27841591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_pack_invert; 27851591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_resize_buffers; 27861591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_ycbcr_texture; 27871591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_texture_array; 27881591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_texture_signed_rgba; 27891591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_blend_square; 27901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_conditional_render; 27911591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_fragment_program; 27921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_fragment_program_option; 27931591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_light_max_exponent; 27941591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_point_sprite; 27951591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_primitive_restart; 27961591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_texgen_reflection; 27971591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_texture_env_combine4; 27981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_texture_rectangle; 27991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_vertex_program; 28001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_vertex_program1_1; 28011591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OES_read_format; 28021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGI_texture_color_table; 28031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGIS_generate_mipmap; 28041591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGIS_texture_edge_clamp; 28051591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGIS_texture_lod; 28061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TDFX_texture_compression_FXT1; 28071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean S3_s3tc; 28081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OES_EGL_image; 28091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OES_draw_texture; 28101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_format_BGRA8888; 28111591693c7b415e9869157c711fe11263c95d74eDavid Li /** The extension string */ 28121591693c7b415e9869157c711fe11263c95d74eDavid Li const GLubyte *String; 28131591693c7b415e9869157c711fe11263c95d74eDavid Li /** Number of supported extensions */ 28141591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Count; 28151591693c7b415e9869157c711fe11263c95d74eDavid Li}; 28161591693c7b415e9869157c711fe11263c95d74eDavid Li 28171591693c7b415e9869157c711fe11263c95d74eDavid Li 28181591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28191591693c7b415e9869157c711fe11263c95d74eDavid Li * A stack of matrices (projection, modelview, color, texture, etc). 28201591693c7b415e9869157c711fe11263c95d74eDavid Li */ 28211591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_matrix_stack 28221591693c7b415e9869157c711fe11263c95d74eDavid Li{ 28231591693c7b415e9869157c711fe11263c95d74eDavid Li GLmatrix *Top; /**< points into Stack */ 28241591693c7b415e9869157c711fe11263c95d74eDavid Li GLmatrix *Stack; /**< array [MaxDepth] of GLmatrix */ 28251591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Depth; /**< 0 <= Depth < MaxDepth */ 28261591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxDepth; /**< size of Stack[] array */ 28271591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint DirtyFlag; /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */ 28281591693c7b415e9869157c711fe11263c95d74eDavid Li}; 28291591693c7b415e9869157c711fe11263c95d74eDavid Li 28301591693c7b415e9869157c711fe11263c95d74eDavid Li 28311591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28321591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bits for image transfer operations 28331591693c7b415e9869157c711fe11263c95d74eDavid Li * \sa __struct gl_contextRec::ImageTransferState. 28341591693c7b415e9869157c711fe11263c95d74eDavid Li */ 28351591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 28361591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_SCALE_BIAS_BIT 0x1 28371591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_SHIFT_OFFSET_BIT 0x2 28381591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_MAP_COLOR_BIT 0x4 28391591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_CLAMP_BIT 0x800 28401591693c7b415e9869157c711fe11263c95d74eDavid Li 28411591693c7b415e9869157c711fe11263c95d74eDavid Li 28421591693c7b415e9869157c711fe11263c95d74eDavid Li/** Pixel Transfer ops */ 28431591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT | \ 28441591693c7b415e9869157c711fe11263c95d74eDavid Li IMAGE_SHIFT_OFFSET_BIT | \ 28451591693c7b415e9869157c711fe11263c95d74eDavid Li IMAGE_MAP_COLOR_BIT) 28461591693c7b415e9869157c711fe11263c95d74eDavid Li 28471591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28481591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bits to indicate what state has changed. 28491591693c7b415e9869157c711fe11263c95d74eDavid Li * 28501591693c7b415e9869157c711fe11263c95d74eDavid Li * 4 unused flags. 28511591693c7b415e9869157c711fe11263c95d74eDavid Li */ 28521591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 28531591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_MODELVIEW 0x1 /**< __struct gl_contextRec::ModelView */ 28541591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PROJECTION 0x2 /**< __struct gl_contextRec::Projection */ 28551591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TEXTURE_MATRIX 0x4 /**< __struct gl_contextRec::TextureMatrix */ 28561591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ACCUM 0x10 /**< __struct gl_contextRec::Accum */ 28571591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_COLOR 0x20 /**< __struct gl_contextRec::Color */ 28581591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_DEPTH 0x40 /**< __struct gl_contextRec::Depth */ 28591591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_EVAL 0x80 /**< __struct gl_contextRec::Eval, __struct gl_contextRec::EvalMap */ 28601591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_FOG 0x100 /**< __struct gl_contextRec::Fog */ 28611591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_HINT 0x200 /**< __struct gl_contextRec::Hint */ 28621591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_LIGHT 0x400 /**< __struct gl_contextRec::Light */ 28631591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_LINE 0x800 /**< __struct gl_contextRec::Line */ 28641591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PIXEL 0x1000 /**< __struct gl_contextRec::Pixel */ 28651591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_POINT 0x2000 /**< __struct gl_contextRec::Point */ 28661591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_POLYGON 0x4000 /**< __struct gl_contextRec::Polygon */ 28671591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_POLYGONSTIPPLE 0x8000 /**< __struct gl_contextRec::PolygonStipple */ 28681591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_SCISSOR 0x10000 /**< __struct gl_contextRec::Scissor */ 28691591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_STENCIL 0x20000 /**< __struct gl_contextRec::Stencil */ 28701591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TEXTURE 0x40000 /**< __struct gl_contextRec::Texture */ 28711591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TRANSFORM 0x80000 /**< __struct gl_contextRec::Transform */ 28721591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_VIEWPORT 0x100000 /**< __struct gl_contextRec::Viewport */ 28731591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PACKUNPACK 0x200000 /**< __struct gl_contextRec::Pack, __struct gl_contextRec::Unpack */ 28741591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY 0x400000 /**< __struct gl_contextRec::Array */ 28751591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_RENDERMODE 0x800000 /**< __struct gl_contextRec::RenderMode, __struct gl_contextRec::Feedback, __struct gl_contextRec::Select */ 28761591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_BUFFERS 0x1000000 /**< __struct gl_contextRec::Visual, __struct gl_contextRec::DrawBuffer, */ 28771591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_MULTISAMPLE 0x2000000 /**< __struct gl_contextRec::Multisample */ 28781591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TRACK_MATRIX 0x4000000 /**< __struct gl_contextRec::VertexProgram */ 28791591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PROGRAM 0x8000000 /**< __struct gl_contextRec::VertexProgram */ 28801591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_CURRENT_ATTRIB 0x10000000 /**< __struct gl_contextRec::Current */ 28811591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PROGRAM_CONSTANTS 0x20000000 28821591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_BUFFER_OBJECT 0x40000000 28831591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ALL ~0 28841591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 28851591693c7b415e9869157c711fe11263c95d74eDavid Li 28861591693c7b415e9869157c711fe11263c95d74eDavid Li 28871591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28881591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bits to track array state changes 28891591693c7b415e9869157c711fe11263c95d74eDavid Li * 28901591693c7b415e9869157c711fe11263c95d74eDavid Li * Also used to summarize array enabled. 28911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 28921591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 28931591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_VERTEX VERT_BIT_POS 28941591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_WEIGHT VERT_BIT_WEIGHT 28951591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_NORMAL VERT_BIT_NORMAL 28961591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_COLOR0 VERT_BIT_COLOR0 28971591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_COLOR1 VERT_BIT_COLOR1 28981591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_FOGCOORD VERT_BIT_FOG 28991591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_INDEX VERT_BIT_COLOR_INDEX 29001591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_EDGEFLAG VERT_BIT_EDGEFLAG 29011591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_POINT_SIZE VERT_BIT_COLOR_INDEX /* aliased */ 29021591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_0 VERT_BIT_TEX0 29031591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_1 VERT_BIT_TEX1 29041591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_2 VERT_BIT_TEX2 29051591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_3 VERT_BIT_TEX3 29061591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_4 VERT_BIT_TEX4 29071591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_5 VERT_BIT_TEX5 29081591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_6 VERT_BIT_TEX6 29091591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_7 VERT_BIT_TEX7 29101591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_ATTRIB_0 VERT_BIT_GENERIC0 /* start at bit 16 */ 29111591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_ALL 0xffffffff 29121591693c7b415e9869157c711fe11263c95d74eDavid Li 29131591693c7b415e9869157c711fe11263c95d74eDavid Li 29141591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD(i) (_NEW_ARRAY_TEXCOORD_0 << (i)) 29151591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_ATTRIB(i) (_NEW_ARRAY_ATTRIB_0 << (i)) 29161591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29171591693c7b415e9869157c711fe11263c95d74eDavid Li 29181591693c7b415e9869157c711fe11263c95d74eDavid Li 29191591693c7b415e9869157c711fe11263c95d74eDavid Li 29201591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29211591693c7b415e9869157c711fe11263c95d74eDavid Li * \name A bunch of flags that we think might be useful to drivers. 29221591693c7b415e9869157c711fe11263c95d74eDavid Li * 29231591693c7b415e9869157c711fe11263c95d74eDavid Li * Set in the __struct gl_contextRec::_TriangleCaps bitfield. 29241591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29251591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 29261591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_FLATSHADE 0x1 29271591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_SEPARATE_SPECULAR 0x2 29281591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_CULL_FRONT_BACK 0x4 /* special case on some hw */ 29291591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_LIGHT_TWOSIDE 0x8 29301591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_UNFILLED 0x10 29311591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_SMOOTH 0x20 29321591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_STIPPLE 0x40 29331591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_OFFSET 0x80 29341591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_LINE_SMOOTH 0x100 29351591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_LINE_STIPPLE 0x200 29361591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_POINT_SMOOTH 0x400 29371591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_POINT_ATTEN 0x800 29381591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_TWOSTENCIL 0x1000 29391591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29401591693c7b415e9869157c711fe11263c95d74eDavid Li 29411591693c7b415e9869157c711fe11263c95d74eDavid Li 29421591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29431591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Define the state changes under which each of these bits might change 29441591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29451591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 29461591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_FLATSHADE _NEW_LIGHT 29471591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_SEPARATE_SPECULAR (_NEW_LIGHT | _NEW_FOG | _NEW_PROGRAM) 29481591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_CULL_FRONT_BACK _NEW_POLYGON 29491591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_LIGHT_TWOSIDE _NEW_LIGHT 29501591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_UNFILLED _NEW_POLYGON 29511591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_SMOOTH _NEW_POLYGON 29521591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_STIPPLE _NEW_POLYGON 29531591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_OFFSET _NEW_POLYGON 29541591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_LINE_SMOOTH _NEW_LINE 29551591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_LINE_STIPPLE _NEW_LINE 29561591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_LINE_WIDTH _NEW_LINE 29571591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_POINT_SMOOTH _NEW_POINT 29581591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_POINT_SIZE _NEW_POINT 29591591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_POINT_ATTEN _NEW_POINT 29601591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29611591693c7b415e9869157c711fe11263c95d74eDavid Li 29621591693c7b415e9869157c711fe11263c95d74eDavid Li 29631591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29641591693c7b415e9869157c711fe11263c95d74eDavid Li * Composite state flags 29651591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29661591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 29671591693c7b415e9869157c711fe11263c95d74eDavid Li#define _MESA_NEW_NEED_EYE_COORDS (_NEW_LIGHT | \ 29681591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_TEXTURE | \ 29691591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_POINT | \ 29701591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_PROGRAM | \ 29711591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_MODELVIEW) 29721591693c7b415e9869157c711fe11263c95d74eDavid Li 29731591693c7b415e9869157c711fe11263c95d74eDavid Li#define _MESA_NEW_NEED_NORMALS (_NEW_LIGHT | \ 29741591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_TEXTURE) 29751591693c7b415e9869157c711fe11263c95d74eDavid Li 29761591693c7b415e9869157c711fe11263c95d74eDavid Li#define _MESA_NEW_TRANSFER_STATE (_NEW_PIXEL) 29771591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29781591693c7b415e9869157c711fe11263c95d74eDavid Li 29791591693c7b415e9869157c711fe11263c95d74eDavid Li 29801591693c7b415e9869157c711fe11263c95d74eDavid Li 29811591693c7b415e9869157c711fe11263c95d74eDavid Li 29821591693c7b415e9869157c711fe11263c95d74eDavid Li/* This has to be included here. */ 29831591693c7b415e9869157c711fe11263c95d74eDavid Li#include "dd.h" 29841591693c7b415e9869157c711fe11263c95d74eDavid Li 29851591693c7b415e9869157c711fe11263c95d74eDavid Li 29861591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29871591693c7b415e9869157c711fe11263c95d74eDavid Li * Display list flags. 29881591693c7b415e9869157c711fe11263c95d74eDavid Li * Strictly this is a tnl-private concept, but it doesn't seem 29891591693c7b415e9869157c711fe11263c95d74eDavid Li * worthwhile adding a tnl private structure just to hold this one bit 29901591693c7b415e9869157c711fe11263c95d74eDavid Li * of information: 29911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29921591693c7b415e9869157c711fe11263c95d74eDavid Li#define DLIST_DANGLING_REFS 0x1 29931591693c7b415e9869157c711fe11263c95d74eDavid Li 29941591693c7b415e9869157c711fe11263c95d74eDavid Li 29951591693c7b415e9869157c711fe11263c95d74eDavid Li/** Opaque declaration of display list payload data type */ 29961591693c7b415e9869157c711fe11263c95d74eDavid Liunion gl_dlist_node; 29971591693c7b415e9869157c711fe11263c95d74eDavid Li 29981591693c7b415e9869157c711fe11263c95d74eDavid Li 29991591693c7b415e9869157c711fe11263c95d74eDavid Li/** 30001591693c7b415e9869157c711fe11263c95d74eDavid Li * Provide a location where information about a display list can be 30011591693c7b415e9869157c711fe11263c95d74eDavid Li * collected. Could be extended with driverPrivate structures, 30021591693c7b415e9869157c711fe11263c95d74eDavid Li * etc. in the future. 30031591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30041591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_display_list 30051591693c7b415e9869157c711fe11263c95d74eDavid Li{ 30061591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; 30071591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Flags; /**< DLIST_x flags */ 30081591693c7b415e9869157c711fe11263c95d74eDavid Li /** The dlist commands are in a linked list of nodes */ 30091591693c7b415e9869157c711fe11263c95d74eDavid Li union gl_dlist_node *Head; 30101591693c7b415e9869157c711fe11263c95d74eDavid Li}; 30111591693c7b415e9869157c711fe11263c95d74eDavid Li 30121591693c7b415e9869157c711fe11263c95d74eDavid Li 30131591693c7b415e9869157c711fe11263c95d74eDavid Li/** 30141591693c7b415e9869157c711fe11263c95d74eDavid Li * State used during display list compilation and execution. 30151591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30161591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_dlist_state 30171591693c7b415e9869157c711fe11263c95d74eDavid Li{ 30181591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint CallDepth; /**< Current recursion calling depth */ 30191591693c7b415e9869157c711fe11263c95d74eDavid Li 30201591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_display_list *CurrentList; /**< List currently being compiled */ 30211591693c7b415e9869157c711fe11263c95d74eDavid Li union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */ 30221591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint CurrentPos; /**< Index into current block of nodes */ 30231591693c7b415e9869157c711fe11263c95d74eDavid Li 30241591693c7b415e9869157c711fe11263c95d74eDavid Li GLvertexformat ListVtxfmt; 30251591693c7b415e9869157c711fe11263c95d74eDavid Li 30261591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; 30271591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4]; 30281591693c7b415e9869157c711fe11263c95d74eDavid Li 30291591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; 30301591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; 30311591693c7b415e9869157c711fe11263c95d74eDavid Li 30321591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ActiveIndex; 30331591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CurrentIndex; 30341591693c7b415e9869157c711fe11263c95d74eDavid Li 30351591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ActiveEdgeFlag; 30361591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CurrentEdgeFlag; 30371591693c7b415e9869157c711fe11263c95d74eDavid Li 30381591693c7b415e9869157c711fe11263c95d74eDavid Li struct { 30391591693c7b415e9869157c711fe11263c95d74eDavid Li /* State known to have been set by the currently-compiling display 30401591693c7b415e9869157c711fe11263c95d74eDavid Li * list. Used to eliminate some redundant state changes. 30411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30421591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ShadeModel; 30431591693c7b415e9869157c711fe11263c95d74eDavid Li } Current; 30441591693c7b415e9869157c711fe11263c95d74eDavid Li}; 30451591693c7b415e9869157c711fe11263c95d74eDavid Li 30461591693c7b415e9869157c711fe11263c95d74eDavid Li/** 30471591693c7b415e9869157c711fe11263c95d74eDavid Li * Enum for the OpenGL APIs we know about and may support. 30481591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30491591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum { 30501591693c7b415e9869157c711fe11263c95d74eDavid Li API_OPENGL, 30511591693c7b415e9869157c711fe11263c95d74eDavid Li API_OPENGLES, 30521591693c7b415e9869157c711fe11263c95d74eDavid Li API_OPENGLES2 30531591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_api; 30541591693c7b415e9869157c711fe11263c95d74eDavid Li 30551591693c7b415e9869157c711fe11263c95d74eDavid Li/** 30561591693c7b415e9869157c711fe11263c95d74eDavid Li * Mesa rendering context. 30571591693c7b415e9869157c711fe11263c95d74eDavid Li * 30581591693c7b415e9869157c711fe11263c95d74eDavid Li * This is the central context data structure for Mesa. Almost all 30591591693c7b415e9869157c711fe11263c95d74eDavid Li * OpenGL state is contained in this structure. 30601591693c7b415e9869157c711fe11263c95d74eDavid Li * Think of this as a base class from which device drivers will derive 30611591693c7b415e9869157c711fe11263c95d74eDavid Li * sub classes. 30621591693c7b415e9869157c711fe11263c95d74eDavid Li * 30631591693c7b415e9869157c711fe11263c95d74eDavid Li * The struct gl_context typedef names this structure. 30641591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30651591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_context 30661591693c7b415e9869157c711fe11263c95d74eDavid Li{ 30671591693c7b415e9869157c711fe11263c95d74eDavid Li /** State possibly shared with other contexts in the address space */ 30681591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shared_state *Shared; 30691591693c7b415e9869157c711fe11263c95d74eDavid Li 30701591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name API function pointer tables */ 30711591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 30721591693c7b415e9869157c711fe11263c95d74eDavid Li gl_api API; 30731591693c7b415e9869157c711fe11263c95d74eDavid Li struct _glapi_table *Save; /**< Display list save functions */ 30741591693c7b415e9869157c711fe11263c95d74eDavid Li struct _glapi_table *Exec; /**< Execute functions */ 30751591693c7b415e9869157c711fe11263c95d74eDavid Li struct _glapi_table *CurrentDispatch; /**< == Save or Exec !! */ 30761591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 30771591693c7b415e9869157c711fe11263c95d74eDavid Li 30781591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_config Visual; 30791591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ 30801591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_framebuffer *ReadBuffer; /**< buffer for reading */ 30811591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_framebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */ 30821591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_framebuffer *WinSysReadBuffer; /**< set with MakeCurrent */ 30831591693c7b415e9869157c711fe11263c95d74eDavid Li 30841591693c7b415e9869157c711fe11263c95d74eDavid Li /** 30851591693c7b415e9869157c711fe11263c95d74eDavid Li * Device driver function pointer table 30861591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30871591693c7b415e9869157c711fe11263c95d74eDavid Li struct dd_function_table Driver; 30881591693c7b415e9869157c711fe11263c95d74eDavid Li 30891591693c7b415e9869157c711fe11263c95d74eDavid Li void *DriverCtx; /**< Points to device driver context/state */ 30901591693c7b415e9869157c711fe11263c95d74eDavid Li 30911591693c7b415e9869157c711fe11263c95d74eDavid Li /** Core/Driver constants */ 30921591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_constants Const; 30931591693c7b415e9869157c711fe11263c95d74eDavid Li 30941591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name The various 4x4 matrix stacks */ 30951591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 30961591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_matrix_stack ModelviewMatrixStack; 30971591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_matrix_stack ProjectionMatrixStack; 30981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS]; 30991591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES]; 31001591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */ 31011591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 31021591693c7b415e9869157c711fe11263c95d74eDavid Li 31031591693c7b415e9869157c711fe11263c95d74eDavid Li /** Combined modelview and projection matrix */ 31041591693c7b415e9869157c711fe11263c95d74eDavid Li GLmatrix _ModelProjectMatrix; 31051591693c7b415e9869157c711fe11263c95d74eDavid Li 31061591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Display lists */ 31071591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_dlist_state ListState; 31081591693c7b415e9869157c711fe11263c95d74eDavid Li 31091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ExecuteFlag; /**< Execute GL commands? */ 31101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CompileFlag; /**< Compile GL commands into display list? */ 31111591693c7b415e9869157c711fe11263c95d74eDavid Li 31121591693c7b415e9869157c711fe11263c95d74eDavid Li /** Extension information */ 31131591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_extensions Extensions; 31141591693c7b415e9869157c711fe11263c95d74eDavid Li 31151591693c7b415e9869157c711fe11263c95d74eDavid Li /** Version info */ 31161591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint VersionMajor, VersionMinor; 31171591693c7b415e9869157c711fe11263c95d74eDavid Li char *VersionString; 31181591693c7b415e9869157c711fe11263c95d74eDavid Li 31191591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name State attribute stack (for glPush/PopAttrib) */ 31201591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 31211591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint AttribStackDepth; 31221591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH]; 31231591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 31241591693c7b415e9869157c711fe11263c95d74eDavid Li 31251591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Renderer attribute groups 31261591693c7b415e9869157c711fe11263c95d74eDavid Li * 31271591693c7b415e9869157c711fe11263c95d74eDavid Li * We define a struct for each attribute group to make pushing and popping 31281591693c7b415e9869157c711fe11263c95d74eDavid Li * attributes easy. Also it's a good organization. 31291591693c7b415e9869157c711fe11263c95d74eDavid Li */ 31301591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 31311591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_accum_attrib Accum; /**< Accum buffer attributes */ 31321591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */ 31331591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_current_attrib Current; /**< Current attributes */ 31341591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */ 31351591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_eval_attrib Eval; /**< Eval attributes */ 31361591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fog_attrib Fog; /**< Fog attributes */ 31371591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_hint_attrib Hint; /**< Hint attributes */ 31381591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light_attrib Light; /**< Light attributes */ 31391591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_line_attrib Line; /**< Line attributes */ 31401591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_list_attrib List; /**< List attributes */ 31411591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_multisample_attrib Multisample; 31421591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixel_attrib Pixel; /**< Pixel attributes */ 31431591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_point_attrib Point; /**< Point attributes */ 31441591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_polygon_attrib Polygon; /**< Polygon attributes */ 31451591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint PolygonStipple[32]; /**< Polygon stipple */ 31461591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_scissor_attrib Scissor; /**< Scissor attributes */ 31471591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_stencil_attrib Stencil; /**< Stencil buffer attributes */ 31481591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_attrib Texture; /**< Texture attributes */ 31491591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_transform_attrib Transform; /**< Transformation attributes */ 31501591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_viewport_attrib Viewport; /**< Viewport attributes */ 31511591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 31521591693c7b415e9869157c711fe11263c95d74eDavid Li 31531591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Client attribute stack */ 31541591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 31551591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ClientAttribStackDepth; 31561591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; 31571591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 31581591693c7b415e9869157c711fe11263c95d74eDavid Li 31591591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Client attribute groups */ 31601591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 31611591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_array_attrib Array; /**< Vertex arrays */ 31621591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelstore_attrib Pack; /**< Pixel packing */ 31631591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelstore_attrib Unpack; /**< Pixel unpacking */ 31641591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelstore_attrib DefaultPacking; /**< Default params */ 31651591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 31661591693c7b415e9869157c711fe11263c95d74eDavid Li 31671591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Other assorted state (not pushed/popped on attribute stack) */ 31681591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 31691591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmaps PixelMaps; 31701591693c7b415e9869157c711fe11263c95d74eDavid Li 31711591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_evaluators EvalMap; /**< All evaluators */ 31721591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_feedback Feedback; /**< Feedback */ 31731591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_selection Select; /**< Selection */ 31741591693c7b415e9869157c711fe11263c95d74eDavid Li 31751591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_state Program; /**< general program state */ 31761591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program_state VertexProgram; 31771591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program_state FragmentProgram; 31781591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_geometry_program_state GeometryProgram; 31791591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_ati_fragment_shader_state ATIFragmentShader; 31801591693c7b415e9869157c711fe11263c95d74eDavid Li 31811591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_state Shader; /**< GLSL shader object state */ 31821591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_TYPES]; 31831591693c7b415e9869157c711fe11263c95d74eDavid Li 31841591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_state Query; /**< occlusion, timer queries */ 31851591693c7b415e9869157c711fe11263c95d74eDavid Li 31861591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_transform_feedback TransformFeedback; 31871591693c7b415e9869157c711fe11263c95d74eDavid Li 31881591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */ 31891591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */ 31901591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 31911591693c7b415e9869157c711fe11263c95d74eDavid Li 31921591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_meta_state *Meta; /**< for "meta" operations */ 31931591693c7b415e9869157c711fe11263c95d74eDavid Li 31941591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_EXT_framebuffer_object */ 31951591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *CurrentRenderbuffer; 31961591693c7b415e9869157c711fe11263c95d74eDavid Li 31971591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ErrorValue; /**< Last error code */ 31981591693c7b415e9869157c711fe11263c95d74eDavid Li 31991591693c7b415e9869157c711fe11263c95d74eDavid Li /** 32001591693c7b415e9869157c711fe11263c95d74eDavid Li * Recognize and silence repeated error debug messages in buggy apps. 32011591693c7b415e9869157c711fe11263c95d74eDavid Li */ 32021591693c7b415e9869157c711fe11263c95d74eDavid Li const char *ErrorDebugFmtString; 32031591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ErrorDebugCount; 32041591693c7b415e9869157c711fe11263c95d74eDavid Li 32051591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */ 32061591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield NewState; /**< bitwise-or of _NEW_* flags */ 32071591693c7b415e9869157c711fe11263c95d74eDavid Li 32081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ViewportInitialized; /**< has viewport size been initialized? */ 32091591693c7b415e9869157c711fe11263c95d74eDavid Li 32101591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield varying_vp_inputs; /**< mask of VERT_BIT_* flags */ 32111591693c7b415e9869157c711fe11263c95d74eDavid Li 32121591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name Derived state */ 32131591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 32141591693c7b415e9869157c711fe11263c95d74eDavid Li /** Bitwise-or of DD_* flags. Note that this bitfield may be used before 32151591693c7b415e9869157c711fe11263c95d74eDavid Li * state validation so they need to always be current. 32161591693c7b415e9869157c711fe11263c95d74eDavid Li */ 32171591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _TriangleCaps; 32181591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ 32191591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _EyeZDir[3]; 32201591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _ModelViewInvScale; 32211591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _NeedEyeCoords; 32221591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _ForceEyeCoords; 32231591693c7b415e9869157c711fe11263c95d74eDavid Li 32241591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint TextureStateTimestamp; /**< detect changes to shared state */ 32251591693c7b415e9869157c711fe11263c95d74eDavid Li 32261591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shine_tab *_ShineTable[2]; /**< Active shine tables */ 32271591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shine_tab *_ShineTabList; /**< MRU list of inactive shine tables */ 32281591693c7b415e9869157c711fe11263c95d74eDavid Li /**@}*/ 32291591693c7b415e9869157c711fe11263c95d74eDavid Li 32301591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_list_extensions *ListExt; /**< driver dlist extensions */ 32311591693c7b415e9869157c711fe11263c95d74eDavid Li 32321591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name For debugging/development only */ 32331591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 32341591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean FirstTimeCurrent; 32351591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 32361591693c7b415e9869157c711fe11263c95d74eDavid Li 32371591693c7b415e9869157c711fe11263c95d74eDavid Li /** Dither disable via MESA_NO_DITHER env var */ 32381591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NoDither; 32391591693c7b415e9869157c711fe11263c95d74eDavid Li 32401591693c7b415e9869157c711fe11263c95d74eDavid Li /** software compression/decompression supported or not */ 32411591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Mesa_DXTn; 32421591693c7b415e9869157c711fe11263c95d74eDavid Li 32431591693c7b415e9869157c711fe11263c95d74eDavid Li /** 32441591693c7b415e9869157c711fe11263c95d74eDavid Li * Use dp4 (rather than mul/mad) instructions for position 32451591693c7b415e9869157c711fe11263c95d74eDavid Li * transformation? 32461591693c7b415e9869157c711fe11263c95d74eDavid Li */ 32471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean mvp_with_dp4; 32481591693c7b415e9869157c711fe11263c95d74eDavid Li 32491591693c7b415e9869157c711fe11263c95d74eDavid Li /** 32501591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Hooks for module contexts. 32511591693c7b415e9869157c711fe11263c95d74eDavid Li * 32521591693c7b415e9869157c711fe11263c95d74eDavid Li * These will eventually live in the driver or elsewhere. 32531591693c7b415e9869157c711fe11263c95d74eDavid Li */ 32541591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 32551591693c7b415e9869157c711fe11263c95d74eDavid Li void *swrast_context; 32561591693c7b415e9869157c711fe11263c95d74eDavid Li void *swsetup_context; 32571591693c7b415e9869157c711fe11263c95d74eDavid Li void *swtnl_context; 32581591693c7b415e9869157c711fe11263c95d74eDavid Li void *swtnl_im; 32591591693c7b415e9869157c711fe11263c95d74eDavid Li struct st_context *st; 32601591693c7b415e9869157c711fe11263c95d74eDavid Li void *aelt_context; 32611591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 32621591693c7b415e9869157c711fe11263c95d74eDavid Li}; 32631591693c7b415e9869157c711fe11263c95d74eDavid Li 32641591693c7b415e9869157c711fe11263c95d74eDavid Li 32651591693c7b415e9869157c711fe11263c95d74eDavid Li/** The string names for GL_POINT, GL_LINE_LOOP, etc */ 32661591693c7b415e9869157c711fe11263c95d74eDavid Liextern const char *_mesa_prim_name[GL_POLYGON+4]; 32671591693c7b415e9869157c711fe11263c95d74eDavid Li 32681591693c7b415e9869157c711fe11263c95d74eDavid Li 32691591693c7b415e9869157c711fe11263c95d74eDavid Li#ifdef DEBUG 32701591693c7b415e9869157c711fe11263c95d74eDavid Liextern int MESA_VERBOSE; 32711591693c7b415e9869157c711fe11263c95d74eDavid Liextern int MESA_DEBUG_FLAGS; 32721591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_FUNCTION __FUNCTION__ 32731591693c7b415e9869157c711fe11263c95d74eDavid Li#else 32741591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_VERBOSE 0 32751591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_DEBUG_FLAGS 0 32761591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_FUNCTION "a function" 32771591693c7b415e9869157c711fe11263c95d74eDavid Li# ifndef NDEBUG 32781591693c7b415e9869157c711fe11263c95d74eDavid Li# define NDEBUG 32791591693c7b415e9869157c711fe11263c95d74eDavid Li# endif 32801591693c7b415e9869157c711fe11263c95d74eDavid Li#endif 32811591693c7b415e9869157c711fe11263c95d74eDavid Li 32821591693c7b415e9869157c711fe11263c95d74eDavid Li 32831591693c7b415e9869157c711fe11263c95d74eDavid Li/** The MESA_VERBOSE var is a bitmask of these flags */ 32841591693c7b415e9869157c711fe11263c95d74eDavid Lienum _verbose 32851591693c7b415e9869157c711fe11263c95d74eDavid Li{ 32861591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_VARRAY = 0x0001, 32871591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_TEXTURE = 0x0002, 32881591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_MATERIAL = 0x0004, 32891591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_PIPELINE = 0x0008, 32901591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DRIVER = 0x0010, 32911591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_STATE = 0x0020, 32921591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_API = 0x0040, 32931591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DISPLAY_LIST = 0x0100, 32941591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_LIGHTING = 0x0200, 32951591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_PRIMS = 0x0400, 32961591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_VERTS = 0x0800, 32971591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DISASSEM = 0x1000, 32981591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DRAW = 0x2000, 32991591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_SWAPBUFFERS = 0x4000 33001591693c7b415e9869157c711fe11263c95d74eDavid Li}; 33011591693c7b415e9869157c711fe11263c95d74eDavid Li 33021591693c7b415e9869157c711fe11263c95d74eDavid Li 33031591693c7b415e9869157c711fe11263c95d74eDavid Li/** The MESA_DEBUG_FLAGS var is a bitmask of these flags */ 33041591693c7b415e9869157c711fe11263c95d74eDavid Lienum _debug 33051591693c7b415e9869157c711fe11263c95d74eDavid Li{ 33061591693c7b415e9869157c711fe11263c95d74eDavid Li DEBUG_ALWAYS_FLUSH = 0x1 33071591693c7b415e9869157c711fe11263c95d74eDavid Li}; 33081591693c7b415e9869157c711fe11263c95d74eDavid Li 33091591693c7b415e9869157c711fe11263c95d74eDavid Li 33101591693c7b415e9869157c711fe11263c95d74eDavid Li 33111591693c7b415e9869157c711fe11263c95d74eDavid Li#endif /* MTYPES_H */ 3312