15e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen/* 25e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * Mesa 3-D graphics library 3a335d334d45701a42c283257fa44f2f7148e186dBrian Paul * Version: 7.7 4ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes * 55761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 65761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 7ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes * 85e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * Permission is hereby granted, free of charge, to any person obtaining a 95e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * copy of this software and associated documentation files (the "Software"), 105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * to deal in the Software without restriction, including without limitation 115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * the rights to use, copy, modify, merge, publish, distribute, sublicense, 125e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * and/or sell copies of the Software, and to permit persons to whom the 135e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * Software is furnished to do so, subject to the following conditions: 14ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes * 155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * The above copyright notice and this permission notice shall be included 165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * in all copies or substantial portions of the Software. 17ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes * 185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 195e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 205e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 215e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 225e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 235e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 245e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 255e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 26e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul/** 27e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * \file mtypes.h 28e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * Main Mesa data structures. 29e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * 30e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * Please try to mark derived values with a leading underscore ('_'). 31e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul */ 325e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 331d5a68970f1d8fcca29ce24e6667a143733197f0Brian Paul#ifndef MTYPES_H 341d5a68970f1d8fcca29ce24e6667a143733197f0Brian Paul#define MTYPES_H 35ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes 365e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 37f2c023291a1f2887294d2aac504f8b82857ad092Brian Paul#include "main/glheader.h" 38f2c023291a1f2887294d2aac504f8b82857ad092Brian Paul#include "main/config.h" 39f2c023291a1f2887294d2aac504f8b82857ad092Brian Paul#include "main/mfeatures.h" 402dbc515a669be123a019aeb4aa5aae6b1679f6a9Brian Paul#include "glapi/glapi.h" 415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "math/m_matrix.h" /* GLmatrix */ 4216b393d05990b6e917e144f9de87d0103b4c3e6dIan Romanick#include "main/simple_list.h" /* struct simple_node */ 43001d944fd50e0579739b8865e6e09be5d267c05aEric Anholt#include "main/formats.h" /* MESA_FORMAT_COUNT */ 445e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 45ede4205b245ee58bacf866d298273ebbe31feacfLuca Barbieri 4663e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#ifdef __cplusplus 4763e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonsecaextern "C" { 4863e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#endif 4963e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 5063e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 51da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/** 525606dfb572bf4b89b4882265924705bacc8c182bIan Romanick * \name 64-bit extension of GLbitfield. 535606dfb572bf4b89b4882265924705bacc8c182bIan Romanick */ 545606dfb572bf4b89b4882265924705bacc8c182bIan Romanick/*@{*/ 555606dfb572bf4b89b4882265924705bacc8c182bIan Romanicktypedef GLuint64 GLbitfield64; 565606dfb572bf4b89b4882265924705bacc8c182bIan Romanick 575606dfb572bf4b89b4882265924705bacc8c182bIan Romanick/** Set a single bit */ 585fc5820cbc0faf57a48154466b4792294841a690José Fonseca#define BITFIELD64_BIT(b) ((GLbitfield64)1 << (b)) 5950e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich/** Set all bits up to excluding bit b */ 6050e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich#define BITFIELD64_MASK(b) \ 6150e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich ((b) == 64 ? (~(GLbitfield64)0) : BITFIELD64_BIT(b) - 1) 6250e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich/** Set count bits starting from bit b */ 6350e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich#define BITFIELD64_RANGE(b, count) \ 6450e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich (BITFIELD64_MASK((b) + (count)) & ~BITFIELD64_MASK(b)) 655606dfb572bf4b89b4882265924705bacc8c182bIan Romanick 665606dfb572bf4b89b4882265924705bacc8c182bIan Romanick 675606dfb572bf4b89b4882265924705bacc8c182bIan Romanick/** 686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Some forward type declarations 695e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/ 715e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansenstruct _mesa_HashTable; 727f25d9ebb4856273c46ea4bbba4152b85f610a91Brian Paulstruct gl_attrib_node; 7333e9ac20e3b399c6ec6ec2f586a9402b68590992Brian Paulstruct gl_list_extensions; 74e9d9dab0cd8614898ecc2aceb49d8faf354cdbdfBrian Paulstruct gl_meta_state; 7532ef6e75839d6be283e034436e5dd34eabb67958Keith Whitwellstruct gl_program_cache; 765e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansenstruct gl_texture_object; 77f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstruct gl_context; 78b939adfa155f2b3ca5c5226e86da85629654d79bKeith Whitwellstruct st_context; 799a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanickstruct gl_uniform_storage; 8084870e215667c999202be31057df6e31a0389bb7Brian Paulstruct prog_instruction; 8184870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_program_parameter_list; 826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/ 835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 845e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 85fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul/** Extra draw modes beyond GL_POINTS, GL_TRIANGLE_FAN, etc */ 86fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul#define PRIM_OUTSIDE_BEGIN_END (GL_POLYGON+1) 87fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul#define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2) 88fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul#define PRIM_UNKNOWN (GL_POLYGON+3) 89fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul 905e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 91c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul 92c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul/** 9353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * Indexes for vertex program attributes. 9453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * GL_NV_vertex_program aliases generic attributes over the conventional 9553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * attributes. In GL_ARB_vertex_program shader the aliasing is optional. 9653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the 9753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * generic attributes are distinct/separate). 986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 994c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paultypedef enum 1004dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 10153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_POS = 0, 10253f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_WEIGHT = 1, 10353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_NORMAL = 2, 10453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_COLOR0 = 3, 10553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_COLOR1 = 4, 10653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_FOG = 5, 10794b30dc390f1fdd526c080080830016fad3e2ee2Brian Paul VERT_ATTRIB_COLOR_INDEX = 6, 108fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell VERT_ATTRIB_EDGEFLAG = 7, 10953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX0 = 8, 11053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX1 = 9, 11153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX2 = 10, 11253f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX3 = 11, 11353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX4 = 12, 11453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX5 = 13, 11553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX6 = 14, 11653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul VERT_ATTRIB_TEX7 = 15, 117762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_POINT_SIZE = 16, 118762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC0 = 17, 119762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC1 = 18, 120762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC2 = 19, 121762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC3 = 20, 122762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC4 = 21, 123762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC5 = 22, 124762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC6 = 23, 125762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC7 = 24, 126762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC8 = 25, 127762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC9 = 26, 128762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC10 = 27, 129762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC11 = 28, 130762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC12 = 29, 131762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC13 = 30, 132762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC14 = 31, 133762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_GENERIC15 = 32, 134762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich VERT_ATTRIB_MAX = 33 1354c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul} gl_vert_attrib; 13653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 13753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/** 138b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * Symbolic constats to help iterating over 139b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * specific blocks of vertex attributes. 140b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * 141b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * VERT_ATTRIB_FF 142b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * includes all fixed function attributes as well as 143b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * the aliased GL_NV_vertex_program shader attributes. 144b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * VERT_ATTRIB_TEX 145b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * include the classic texture coordinate attributes. 146b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * Is a subset of VERT_ATTRIB_FF. 147b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * VERT_ATTRIB_GENERIC_NV 148b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * include the NV shader attributes. 149b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * Is a subset of VERT_ATTRIB_FF. 150b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * VERT_ATTRIB_GENERIC 151b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * include the OpenGL 2.0+ GLSL generic shader attributes. 152b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich * These alias the generic GL_ARB_vertex_shader attributes. 153b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich */ 154b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_FF(i) (VERT_ATTRIB_POS + (i)) 155b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_FF_MAX VERT_ATTRIB_GENERIC0 156b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 157b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_TEX(i) (VERT_ATTRIB_TEX0 + (i)) 158b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_TEX_MAX MAX_TEXTURE_COORD_UNITS 159b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 160b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_GENERIC_NV(i) (VERT_ATTRIB_POS + (i)) 161b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_GENERIC_NV_MAX MAX_VERTEX_GENERIC_ATTRIBS 162b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 163b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_GENERIC(i) (VERT_ATTRIB_GENERIC0 + (i)) 164b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_ATTRIB_GENERIC_MAX MAX_VERTEX_GENERIC_ATTRIBS 165b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 166b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich/** 16753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * Bitflags for vertex attributes. 16853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * These are used in bitfields in many places. 16953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 17053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/*@{*/ 171f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_POS BITFIELD64_BIT(VERT_ATTRIB_POS) 172f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_WEIGHT BITFIELD64_BIT(VERT_ATTRIB_WEIGHT) 173f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_NORMAL BITFIELD64_BIT(VERT_ATTRIB_NORMAL) 174f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_COLOR0 BITFIELD64_BIT(VERT_ATTRIB_COLOR0) 175f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_COLOR1 BITFIELD64_BIT(VERT_ATTRIB_COLOR1) 176f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_FOG BITFIELD64_BIT(VERT_ATTRIB_FOG) 177f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_COLOR_INDEX BITFIELD64_BIT(VERT_ATTRIB_COLOR_INDEX) 178f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_EDGEFLAG BITFIELD64_BIT(VERT_ATTRIB_EDGEFLAG) 179f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX0 BITFIELD64_BIT(VERT_ATTRIB_TEX0) 180f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX1 BITFIELD64_BIT(VERT_ATTRIB_TEX1) 181f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX2 BITFIELD64_BIT(VERT_ATTRIB_TEX2) 182f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX3 BITFIELD64_BIT(VERT_ATTRIB_TEX3) 183f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX4 BITFIELD64_BIT(VERT_ATTRIB_TEX4) 184f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX5 BITFIELD64_BIT(VERT_ATTRIB_TEX5) 185f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX6 BITFIELD64_BIT(VERT_ATTRIB_TEX6) 186f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_TEX7 BITFIELD64_BIT(VERT_ATTRIB_TEX7) 187762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich#define VERT_BIT_POINT_SIZE BITFIELD64_BIT(VERT_ATTRIB_POINT_SIZE) 188f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT_GENERIC0 BITFIELD64_BIT(VERT_ATTRIB_GENERIC0) 189f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich 190f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich#define VERT_BIT(i) BITFIELD64_BIT(i) 191f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich#define VERT_BIT_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_MAX) 192b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 193b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_BIT_FF(i) VERT_BIT(i) 194f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich#define VERT_BIT_FF_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_FF_MAX) 195b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_BIT_TEX(i) VERT_BIT(VERT_ATTRIB_TEX(i)) 196b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_BIT_TEX_ALL \ 197f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich BITFIELD64_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX) 1982a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich#define VERT_BIT_FF_NVALIAS \ 1992a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich BITFIELD64_RANGE(VERT_ATTRIB_POS, VERT_ATTRIB_TEX(VERT_ATTRIB_TEX_MAX)) 2002a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich 201b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_BIT_GENERIC_NV(i) VERT_BIT(VERT_ATTRIB_GENERIC_NV(i)) 202b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_BIT_GENERIC_NV_ALL \ 203f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich BITFIELD64_RANGE(VERT_ATTRIB_GENERIC_NV(0), VERT_ATTRIB_GENERIC_NV_MAX) 2042a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich 205b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_BIT_GENERIC(i) VERT_BIT(VERT_ATTRIB_GENERIC(i)) 206b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich#define VERT_BIT_GENERIC_ALL \ 207f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich BITFIELD64_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX) 20853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/*@}*/ 2094c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul 210bb38cadb1c5f2dc13096a091bdaf61dc3e3cfa4dMichal Krol 211bb38cadb1c5f2dc13096a091bdaf61dc3e3cfa4dMichal Krol/** 2126489a1d5bab75589569658d374257bf23cb67a23Paul Berry * Indexes for vertex program result attributes. Note that 21351e7b058750cc480c296d45f773d7a5a662457f5Brian Paul * _mesa_vert_result_to_frag_attrib() and _mesa_frag_attrib_to_vert_result() make 2146489a1d5bab75589569658d374257bf23cb67a23Paul Berry * assumptions about the layout of this enum. 2157c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell */ 2164c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paultypedef enum 2175761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul{ 2185761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_HPOS = 0, 2195761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_COL0 = 1, 2205761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_COL1 = 2, 2215761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_FOGC = 3, 2225761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX0 = 4, 2235761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX1 = 5, 2245761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX2 = 6, 2255761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX3 = 7, 2265761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX4 = 8, 2275761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX5 = 9, 2285761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX6 = 10, 2295761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_TEX7 = 11, 2305761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_PSIZ = 12, 2315761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_BFC0 = 13, 2325761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_BFC1 = 14, 2335761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_EDGE = 15, 2347d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry VERT_RESULT_CLIP_VERTEX = 16, 2357d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry VERT_RESULT_CLIP_DIST0 = 17, 2367d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry VERT_RESULT_CLIP_DIST1 = 18, 2377d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry VERT_RESULT_VAR0 = 19, /**< shader varying */ 2385761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul VERT_RESULT_MAX = (VERT_RESULT_VAR0 + MAX_VARYING) 2394c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul} gl_vert_result; 2407c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell 2417c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell 242da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/*********************************************/ 243da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 244da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/** 245da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * Indexes for geometry program attributes. 246da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin */ 247da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusintypedef enum 248da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin{ 2497c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_POSITION = 0, 2507c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_COLOR0 = 1, 2517c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_COLOR1 = 2, 2527c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_SECONDARY_COLOR0 = 3, 2537c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_SECONDARY_COLOR1 = 4, 2547c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_FOG_FRAG_COORD = 5, 2557c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_POINT_SIZE = 6, 2567c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_CLIP_VERTEX = 7, 2577c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_PRIMITIVE_ID = 8, 2587c42390453e611367cf1ba11446692ec04e0abfbZack Rusin GEOM_ATTRIB_TEX_COORD = 9, 259da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 260da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_ATTRIB_VAR0 = 16, 261da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_ATTRIB_MAX = (GEOM_ATTRIB_VAR0 + MAX_VARYING) 262da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin} gl_geom_attrib; 263da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 264da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/** 265da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * Bitflags for geometry attributes. 266da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * These are used in bitfields in many places. 267da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin */ 268da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/*@{*/ 269da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_COLOR0 (1 << GEOM_ATTRIB_COLOR0) 270da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_COLOR1 (1 << GEOM_ATTRIB_COLOR1) 271da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_SCOLOR0 (1 << GEOM_ATTRIB_SECONDARY_COLOR0) 272da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_SCOLOR1 (1 << GEOM_ATTRIB_SECONDARY_COLOR1) 273da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_TEX_COORD (1 << GEOM_ATTRIB_TEX_COORD) 274da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_FOG_COORD (1 << GEOM_ATTRIB_FOG_FRAG_COORD) 275da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_POSITION (1 << GEOM_ATTRIB_POSITION) 276da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_POINT_SIDE (1 << GEOM_ATTRIB_POINT_SIZE) 277da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_CLIP_VERTEX (1 << GEOM_ATTRIB_CLIP_VERTEX) 278da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_PRIM_ID (1 << GEOM_ATTRIB_PRIMITIVE_ID) 279da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_VAR0 (1 << GEOM_ATTRIB_VAR0) 280da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 281da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin#define GEOM_BIT_VAR(g) (1 << (GEOM_BIT_VAR0 + (g))) 282da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/*@}*/ 283da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 284da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 285da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/** 286da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * Indexes for geometry program result attributes 287da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin */ 288cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paultypedef enum 289cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul{ 290da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_POS = 0, 291da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_COL0 = 1, 292da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_COL1 = 2, 293da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_SCOL0 = 3, 294da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_SCOL1 = 4, 295da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_FOGC = 5, 296da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX0 = 6, 297da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX1 = 7, 298da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX2 = 8, 299da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX3 = 9, 300da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX4 = 10, 301da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX5 = 11, 302da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX6 = 12, 303da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_TEX7 = 13, 304da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_PSIZ = 14, 305da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_CLPV = 15, 306da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_PRID = 16, 307da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_LAYR = 17, 308da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_VAR0 = 18, /**< shader varying, should really be 16 */ 309da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin /* ### we need to -2 because var0 is 18 instead 16 like in the others */ 310da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GEOM_RESULT_MAX = (GEOM_RESULT_VAR0 + MAX_VARYING - 2) 311da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin} gl_geom_result; 312cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul 313da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 3147c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell/** 3156489a1d5bab75589569658d374257bf23cb67a23Paul Berry * Indexes for fragment program input attributes. Note that 31651e7b058750cc480c296d45f773d7a5a662457f5Brian Paul * _mesa_vert_result_to_frag_attrib() and frag_attrib_to_vert_result() make 3176489a1d5bab75589569658d374257bf23cb67a23Paul Berry * assumptions about the layout of this enum. 31827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell */ 3194c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paultypedef enum 3204dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 32153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_WPOS = 0, 32253f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_COL0 = 1, 32353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_COL1 = 2, 32453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_FOGC = 3, 32553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_TEX0 = 4, 32653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_TEX1 = 5, 32753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_TEX2 = 6, 32853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_TEX3 = 7, 32953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_TEX4 = 8, 33053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_TEX5 = 9, 33153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul FRAG_ATTRIB_TEX6 = 10, 332c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell FRAG_ATTRIB_TEX7 = 11, 3339d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul FRAG_ATTRIB_FACE = 12, /**< front/back face */ 3349d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul FRAG_ATTRIB_PNTC = 13, /**< sprite/point coord */ 3353d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry FRAG_ATTRIB_CLIP_DIST0 = 14, 3363d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry FRAG_ATTRIB_CLIP_DIST1 = 15, 3373d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry FRAG_ATTRIB_VAR0 = 16, /**< shader varying */ 338a90046f1097ad95de2aa95ca65741dff5cddced9Brian FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING) 3394c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul} gl_frag_attrib; 34027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell 3411a65d098cea54352335460fedf97f705d20f2ab7Brian Paul 34290ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul/** 3436489a1d5bab75589569658d374257bf23cb67a23Paul Berry * Convert from a gl_vert_result value to the corresponding gl_frag_attrib. 3446489a1d5bab75589569658d374257bf23cb67a23Paul Berry * 3456489a1d5bab75589569658d374257bf23cb67a23Paul Berry * VERT_RESULT_HPOS is converted to FRAG_ATTRIB_WPOS. 3466489a1d5bab75589569658d374257bf23cb67a23Paul Berry * 3476489a1d5bab75589569658d374257bf23cb67a23Paul Berry * gl_vert_result values which have no corresponding gl_frag_attrib 3486489a1d5bab75589569658d374257bf23cb67a23Paul Berry * (VERT_RESULT_PSIZ, VERT_RESULT_BFC0, VERT_RESULT_BFC1, and 3496489a1d5bab75589569658d374257bf23cb67a23Paul Berry * VERT_RESULT_EDGE) are converted to a value of -1. 3506489a1d5bab75589569658d374257bf23cb67a23Paul Berry */ 3519520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline int 3521a65d098cea54352335460fedf97f705d20f2ab7Brian Paul_mesa_vert_result_to_frag_attrib(gl_vert_result vert_result) 3536489a1d5bab75589569658d374257bf23cb67a23Paul Berry{ 3543d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry if (vert_result >= VERT_RESULT_CLIP_DIST0) 3553d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry return vert_result - VERT_RESULT_CLIP_DIST0 + FRAG_ATTRIB_CLIP_DIST0; 3566489a1d5bab75589569658d374257bf23cb67a23Paul Berry else if (vert_result <= VERT_RESULT_TEX7) 3576489a1d5bab75589569658d374257bf23cb67a23Paul Berry return vert_result; 3586489a1d5bab75589569658d374257bf23cb67a23Paul Berry else 3596489a1d5bab75589569658d374257bf23cb67a23Paul Berry return -1; 3606489a1d5bab75589569658d374257bf23cb67a23Paul Berry} 3616489a1d5bab75589569658d374257bf23cb67a23Paul Berry 3621a65d098cea54352335460fedf97f705d20f2ab7Brian Paul 3636489a1d5bab75589569658d374257bf23cb67a23Paul Berry/** 3646489a1d5bab75589569658d374257bf23cb67a23Paul Berry * Convert from a gl_frag_attrib value to the corresponding gl_vert_result. 3656489a1d5bab75589569658d374257bf23cb67a23Paul Berry * 3666489a1d5bab75589569658d374257bf23cb67a23Paul Berry * FRAG_ATTRIB_WPOS is converted to VERT_RESULT_HPOS. 3676489a1d5bab75589569658d374257bf23cb67a23Paul Berry * 3686489a1d5bab75589569658d374257bf23cb67a23Paul Berry * gl_frag_attrib values which have no corresponding gl_vert_result 3696489a1d5bab75589569658d374257bf23cb67a23Paul Berry * (FRAG_ATTRIB_FACE and FRAG_ATTRIB_PNTC) are converted to a value of -1. 3706489a1d5bab75589569658d374257bf23cb67a23Paul Berry */ 3719520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline int 3721a65d098cea54352335460fedf97f705d20f2ab7Brian Paul_mesa_frag_attrib_to_vert_result(gl_frag_attrib frag_attrib) 3736489a1d5bab75589569658d374257bf23cb67a23Paul Berry{ 3746489a1d5bab75589569658d374257bf23cb67a23Paul Berry if (frag_attrib <= FRAG_ATTRIB_TEX7) 3756489a1d5bab75589569658d374257bf23cb67a23Paul Berry return frag_attrib; 3763d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry else if (frag_attrib >= FRAG_ATTRIB_CLIP_DIST0) 3773d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry return frag_attrib - FRAG_ATTRIB_CLIP_DIST0 + VERT_RESULT_CLIP_DIST0; 3786489a1d5bab75589569658d374257bf23cb67a23Paul Berry else 3796489a1d5bab75589569658d374257bf23cb67a23Paul Berry return -1; 3806489a1d5bab75589569658d374257bf23cb67a23Paul Berry} 3816489a1d5bab75589569658d374257bf23cb67a23Paul Berry 3821a65d098cea54352335460fedf97f705d20f2ab7Brian Paul 3836489a1d5bab75589569658d374257bf23cb67a23Paul Berry/** 38490ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul * Bitflags for fragment program input attributes. 38553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 38653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/*@{*/ 38727413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_WPOS (1 << FRAG_ATTRIB_WPOS) 38827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_COL0 (1 << FRAG_ATTRIB_COL0) 38927413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_COL1 (1 << FRAG_ATTRIB_COL1) 39027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_FOGC (1 << FRAG_ATTRIB_FOGC) 3919d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul#define FRAG_BIT_FACE (1 << FRAG_ATTRIB_FACE) 3929d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul#define FRAG_BIT_PNTC (1 << FRAG_ATTRIB_PNTC) 39327413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX0 (1 << FRAG_ATTRIB_TEX0) 39427413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX1 (1 << FRAG_ATTRIB_TEX1) 39527413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX2 (1 << FRAG_ATTRIB_TEX2) 39627413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX3 (1 << FRAG_ATTRIB_TEX3) 39727413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX4 (1 << FRAG_ATTRIB_TEX4) 39827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX5 (1 << FRAG_ATTRIB_TEX5) 39927413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX6 (1 << FRAG_ATTRIB_TEX6) 40027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BIT_TEX7 (1 << FRAG_ATTRIB_TEX7) 40107373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian#define FRAG_BIT_VAR0 (1 << FRAG_ATTRIB_VAR0) 40207373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian 40307373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian#define FRAG_BIT_TEX(U) (FRAG_BIT_TEX0 << (U)) 40407373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian#define FRAG_BIT_VAR(V) (FRAG_BIT_VAR0 << (V)) 40527413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell 40627413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell#define FRAG_BITS_TEX_ANY (FRAG_BIT_TEX0| \ 40727413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell FRAG_BIT_TEX1| \ 40827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell FRAG_BIT_TEX2| \ 40927413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell FRAG_BIT_TEX3| \ 41027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell FRAG_BIT_TEX4| \ 41127413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell FRAG_BIT_TEX5| \ 41227413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell FRAG_BIT_TEX6| \ 41327413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell FRAG_BIT_TEX7) 41453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/*@}*/ 41527413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell 41627413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell 41790ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul/** 41890ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul * Fragment program results 419c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell */ 4204c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paultypedef enum 421a90046f1097ad95de2aa95ca65741dff5cddced9Brian{ 4228d475822e6e19fa79719c856a2db5b6a205db1b9Brian Paul FRAG_RESULT_DEPTH = 0, 423bec341d00c5fbc9c5f1c19c1b6729de636ffbfcbDave Airlie FRAG_RESULT_STENCIL = 1, 424e4da46e007de5c83202976a12efb0e894494a354Eric Anholt /* If a single color should be written to all render targets, this 425e4da46e007de5c83202976a12efb0e894494a354Eric Anholt * register is written. No FRAG_RESULT_DATAn will be written. 426e4da46e007de5c83202976a12efb0e894494a354Eric Anholt */ 427bec341d00c5fbc9c5f1c19c1b6729de636ffbfcbDave Airlie FRAG_RESULT_COLOR = 2, 428e4da46e007de5c83202976a12efb0e894494a354Eric Anholt 429e4da46e007de5c83202976a12efb0e894494a354Eric Anholt /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n] 430e4da46e007de5c83202976a12efb0e894494a354Eric Anholt * or ARB_fragment_program fragment.color[n]) color results. If 431e4da46e007de5c83202976a12efb0e894494a354Eric Anholt * any are written, FRAG_RESULT_COLOR will not be written. 432e4da46e007de5c83202976a12efb0e894494a354Eric Anholt */ 433bec341d00c5fbc9c5f1c19c1b6729de636ffbfcbDave Airlie FRAG_RESULT_DATA0 = 3, 4341c09bcfdda4083636a3ac27d804a34ef87875ce7Brian FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS) 4354c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul} gl_frag_result; 436c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell 437c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell 438894844a8d956a0ee5f95836331dc318f49fdb845Brian Paul/** 439e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * Indexes for all renderbuffers 440e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul */ 4414c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paultypedef enum 4424c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul{ 4434c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul /* the four standard color buffers */ 4444c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_FRONT_LEFT, 4454c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_BACK_LEFT, 4464c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_FRONT_RIGHT, 4474c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_BACK_RIGHT, 4484c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_DEPTH, 4494c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_STENCIL, 4504c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_ACCUM, 451555f0a88182e2b1af809b2d97abdac02814a2f28Brian Paul /* optional aux buffer */ 452555f0a88182e2b1af809b2d97abdac02814a2f28Brian Paul BUFFER_AUX0, 4534c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul /* generic renderbuffers */ 4544c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR0, 4554c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR1, 4564c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR2, 4574c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR3, 4584c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR4, 4594c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR5, 4604c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR6, 4614c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COLOR7, 4624c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul BUFFER_COUNT 4634c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul} gl_buffer_index; 464e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 465e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul/** 466e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * Bit flags for all renderbuffers 467e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul */ 468e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT) 469e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT) 470e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT) 471e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT) 472e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_AUX0 (1 << BUFFER_AUX0) 473e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_AUX1 (1 << BUFFER_AUX1) 474e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_AUX2 (1 << BUFFER_AUX2) 475e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_AUX3 (1 << BUFFER_AUX3) 476e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH) 477e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL) 478e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM) 479e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0) 480e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1) 481e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2) 482e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3) 483e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4) 484e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5) 485e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6) 486e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7) 487894844a8d956a0ee5f95836331dc318f49fdb845Brian Paul 488ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul/** 489ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul * Mask of all the color buffer bits (but not accum). 490ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul */ 491ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul#define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \ 492ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_BACK_LEFT | \ 493ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_FRONT_RIGHT | \ 494ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_BACK_RIGHT | \ 495ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_AUX0 | \ 496ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR0 | \ 497ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR1 | \ 498ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR2 | \ 499ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR3 | \ 500ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR4 | \ 501ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR5 | \ 502ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR6 | \ 503ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul BUFFER_BIT_COLOR7) 504ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul 505ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul 5064c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul/** 5070fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul * Framebuffer configuration (aka visual / pixelformat) 5080fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul * Note: some of these fields should be boolean, but it appears that 5090fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul * code in drivers/dri/common/util.c requires int-sized fields. 5100fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul */ 5110fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paulstruct gl_config 5120fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul{ 5130fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLboolean rgbMode; 5140fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLboolean floatMode; 5150fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLboolean colorIndexMode; /* XXX is this used anywhere? */ 5160fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLuint doubleBufferMode; 5170fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLuint stereoMode; 5180fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5190fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLboolean haveAccumBuffer; 5200fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLboolean haveDepthBuffer; 5210fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLboolean haveStencilBuffer; 5220fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5230fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */ 5240fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLuint redMask, greenMask, blueMask, alphaMask; 5250fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint rgbBits; /* total bits for rgb */ 5260fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint indexBits; /* total bits for colorindex */ 5270fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5280fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; 5290fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint depthBits; 5300fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint stencilBits; 5310fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5320fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint numAuxBuffers; 5330fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5340fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint level; 5350fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5360fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul /* EXT_visual_rating / GLX 1.2 */ 5370fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint visualRating; 5380fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5390fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul /* EXT_visual_info / GLX 1.2 */ 5400fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint transparentPixel; 5410fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul /* colors are floats scaled to ints */ 5420fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha; 5430fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint transparentIndex; 5440fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5450fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul /* ARB_multisample / SGIS_multisample */ 5460fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint sampleBuffers; 5470fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint samples; 5480fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5490fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul /* SGIX_pbuffer / GLX 1.3 */ 5500fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint maxPbufferWidth; 5510fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint maxPbufferHeight; 5520fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint maxPbufferPixels; 5530fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint optimalPbufferWidth; /* Only for SGIX_pbuffer. */ 5540fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint optimalPbufferHeight; /* Only for SGIX_pbuffer. */ 5550fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5560fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul /* OML_swap_method */ 5570fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint swapMethod; 5580fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5590fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul /* EXT_texture_from_pixmap */ 5600fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint bindToTextureRgb; 5610fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint bindToTextureRgba; 5620fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint bindToMipmapTexture; 5630fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint bindToTextureTargets; 5640fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul GLint yInverted; 565a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie 566a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie /* EXT_framebuffer_sRGB */ 567a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie GLint sRGBCapable; 5680fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul}; 5690fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5700fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5710fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul/** 5726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Bit flags used for updating material values. 5735e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 5746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/ 575ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_FRONT_AMBIENT 0 576ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_BACK_AMBIENT 1 577ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_FRONT_DIFFUSE 2 578ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_BACK_DIFFUSE 3 579ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_FRONT_SPECULAR 4 580ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_BACK_SPECULAR 5 581ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_FRONT_EMISSION 6 582ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_BACK_EMISSION 7 583ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_FRONT_SHININESS 8 584ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_BACK_SHININESS 9 585ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_FRONT_INDEXES 10 586ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_BACK_INDEXES 11 587ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_MAX 12 588ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 589ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f)) 590ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f)) 591ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f)) 592ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f)) 593ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f)) 594ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f)) 595ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 596ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_INDEX_AMBIENT 0 597ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_INDEX_DIFFUSE 1 598ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_INDEX_SPECULAR 2 599ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 600ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_FRONT_AMBIENT (1<<MAT_ATTRIB_FRONT_AMBIENT) 601ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_BACK_AMBIENT (1<<MAT_ATTRIB_BACK_AMBIENT) 602ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_FRONT_DIFFUSE (1<<MAT_ATTRIB_FRONT_DIFFUSE) 603ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_BACK_DIFFUSE (1<<MAT_ATTRIB_BACK_DIFFUSE) 604ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_FRONT_SPECULAR (1<<MAT_ATTRIB_FRONT_SPECULAR) 605ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_BACK_SPECULAR (1<<MAT_ATTRIB_BACK_SPECULAR) 606ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_FRONT_EMISSION (1<<MAT_ATTRIB_FRONT_EMISSION) 607ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_BACK_EMISSION (1<<MAT_ATTRIB_BACK_EMISSION) 608ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_FRONT_SHININESS (1<<MAT_ATTRIB_FRONT_SHININESS) 609ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_BACK_SHININESS (1<<MAT_ATTRIB_BACK_SHININESS) 610ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_FRONT_INDEXES (1<<MAT_ATTRIB_FRONT_INDEXES) 611ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define MAT_BIT_BACK_INDEXES (1<<MAT_ATTRIB_BACK_INDEXES) 612ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 613ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 614ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define FRONT_MATERIAL_BITS (MAT_BIT_FRONT_EMISSION | \ 615ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_FRONT_AMBIENT | \ 616ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_FRONT_DIFFUSE | \ 617ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_FRONT_SPECULAR | \ 618ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_FRONT_SHININESS | \ 619ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_FRONT_INDEXES) 620ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 621ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell#define BACK_MATERIAL_BITS (MAT_BIT_BACK_EMISSION | \ 622ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_BACK_AMBIENT | \ 623ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_BACK_DIFFUSE | \ 624ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_BACK_SPECULAR | \ 625ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_BACK_SHININESS | \ 626ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell MAT_BIT_BACK_INDEXES) 6275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6285e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#define ALL_MATERIAL_BITS (FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS) 6296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/ 6305e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6315e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6326dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 633b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul * Material state. 634b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul */ 635b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paulstruct gl_material 636b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul{ 637b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul GLfloat Attrib[MAT_ATTRIB_MAX][4]; 638b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul}; 639b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul 640b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul 641b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul/** 642b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul * Light state flags. 643b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul */ 644b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul/*@{*/ 645b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul#define LIGHT_SPOT 0x1 646b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul#define LIGHT_LOCAL_VIEWER 0x2 647b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul#define LIGHT_POSITIONAL 0x4 648b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER) 649b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul/*@}*/ 650b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul 651b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul 652b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul/** 6534dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Light source state. 6546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 6554dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_light 6564dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 6576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_light *next; /**< double linked list with sentinel */ 6585e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_light *prev; 6595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Ambient[4]; /**< ambient color */ 6616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Diffuse[4]; /**< diffuse color */ 6626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Specular[4]; /**< specular color */ 6636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat EyePosition[4]; /**< position in eye coordinates */ 6647391ba1e9d81f15465059db25d1279eefdbeb1a9Brian Paul GLfloat SpotDirection[4]; /**< spotlight direction in eye coordinates */ 6655e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat SpotExponent; 666180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen GLfloat SpotCutoff; /**< in degrees */ 6676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _CosCutoff; /**< = MAX(0, cos(SpotCutoff)) */ 6685e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat ConstantAttenuation; 6695e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat LinearAttenuation; 6705e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat QuadraticAttenuation; 6716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Enabled; /**< On/off flag */ 6725e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 6746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Derived fields 6756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 6766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 677b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul GLbitfield _Flags; /**< Mask of LIGHT_x bits defined above */ 6785e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _Position[4]; /**< position in eye/obj coordinates */ 6806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _VP_inf_norm[3]; /**< Norm direction to infinite light */ 6816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _h_inf_norm[3]; /**< Norm( _VP_inf_norm + <0,0,1> ) */ 6827391ba1e9d81f15465059db25d1279eefdbeb1a9Brian Paul GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */ 683ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes GLfloat _VP_inf_spot_attenuation; 6845e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _MatAmbient[2][3]; /**< material ambient * light ambient */ 6866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _MatDiffuse[2][3]; /**< material diffuse * light diffuse */ 6876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _MatSpecular[2][3]; /**< material spec * light specular */ 6886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 6895e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 6905e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6915e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 6934dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Light model state. 6946dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 6954dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_lightmodel 6964dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 6976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Ambient[4]; /**< ambient color */ 6986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean LocalViewer; /**< Local (or infinite) view point? */ 6996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean TwoSide; /**< Two (or one) sided lighting? */ 7006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum ColorControl; /**< either GL_SINGLE_COLOR 7016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * or GL_SEPARATE_SPECULAR_COLOR */ 7025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 7035e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 7045e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 7056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 7064dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT) 7075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 7084dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_accum_attrib 7094dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 7106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat ClearColor[4]; /**< Accumulation buffer clear color */ 7115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 7125e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 7134d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul 7144d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul/** 7154d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul * Used for storing clear color, texture border color, etc. 7164d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul * The float values are typically unclamped. 7174d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul */ 7184d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paulunion gl_color_union 7194d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul{ 720093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie GLfloat f[4]; 721093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie GLint i[4]; 722093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie GLuint ui[4]; 723093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie}; 7245e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 7254d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul 7266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 7274dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Color buffer attribute group (GL_COLOR_BUFFER_BIT). 7286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 7294dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_colorbuffer_attrib 7304dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 7314d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul GLuint ClearIndex; /**< Index for glClear */ 7324d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul union gl_color_union ClearColor; /**< Color for glClear, unclamped */ 7334d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul GLuint IndexMask; /**< Color index write mask */ 7344d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul GLubyte ColorMask[MAX_DRAW_BUFFERS][4]; /**< Each flag is 0xff or 0x0 */ 7356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 73653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul GLenum DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */ 7376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7386dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 7396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name alpha testing 7406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 7416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 7426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean AlphaEnabled; /**< Alpha test enabled flag */ 7436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum AlphaFunc; /**< Alpha test function */ 744e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLfloat AlphaRefUnclamped; 7456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLclampf AlphaRef; /**< Alpha reference value */ 7466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 7476dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 7496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Blending 7506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 7516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 7523728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul GLbitfield BlendEnabled; /**< Per-buffer blend enable flags */ 753e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák 7544d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul /* NOTE: this does _not_ depend on fragment clamping or any other clamping 7554d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul * control, only on the fixed-pointness of the render target. 756e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák * The query does however depend on fragment color clamping. 757e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák */ 758e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLfloat BlendColorUnclamped[4]; /**< Blending color */ 7596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat BlendColor[4]; /**< Blending color */ 760e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák 76174713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul struct 76274713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul { 76374713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLenum SrcRGB; /**< RGB blend source term */ 76474713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLenum DstRGB; /**< RGB blend dest term */ 76574713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLenum SrcA; /**< Alpha blend source term */ 76674713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLenum DstA; /**< Alpha blend dest term */ 76774713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLenum EquationRGB; /**< GL_ADD, GL_SUBTRACT, etc. */ 76874713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLenum EquationA; /**< GL_ADD, GL_SUBTRACT, etc. */ 769175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt /** 770175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt * Set if any blend factor uses SRC1. Computed at the time blend factors 771175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt * get set. 772175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt */ 773175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt GLboolean _UsesDualSrc; 77474713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul } Blend[MAX_DRAW_BUFFERS]; 77574713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul /** Are the blend func terms currently different for each buffer/target? */ 77674713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLboolean _BlendFuncPerBuffer; 77774713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul /** Are the blend equations currently different for each buffer/target? */ 77874713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLboolean _BlendEquationPerBuffer; 7796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 7806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 7826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Logic op 7836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 7846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 7856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum LogicOp; /**< Logic operator */ 7866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean IndexLogicOpEnabled; /**< Color index logic op enabled flag */ 7876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean ColorLogicOpEnabled; /**< RGBA logic op enabled flag */ 7886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 7896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean DitherFlag; /**< Dither enable flag */ 791ba3da6154c324cc916845bc5de3de077d0b59ffcBrian Paul 792ba3da6154c324cc916845bc5de3de077d0b59ffcBrian Paul GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 793e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLboolean _ClampFragmentColor; /** < with GL_FIXED_ONLY_ARB resolved */ 794ba3da6154c324cc916845bc5de3de077d0b59ffcBrian Paul GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 795e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLboolean _ClampReadColor; /** < with GL_FIXED_ONLY_ARB resolved */ 796a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie 797a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie GLboolean sRGBEnabled; /**< Framebuffer sRGB blending/updating requested */ 7985e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 7995e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8005e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 8024dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Current attribute group (GL_CURRENT_BIT). 8036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 8044dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_current_attrib 8054dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 8066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 807095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul * \name Current vertex attributes. 808095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul * \note Values are valid only after FLUSH_VERTICES has been called. 809fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell * \note Index and Edgeflag current values are stored as floats in the 810fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell * SIX and SEVEN attribute slots. 8115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 812095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */ 813ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes 8146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 815095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul * \name Current raster position attributes (always valid). 816095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul * \note This set of attributes is very similar to the SWvertex struct. 8175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 8186dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 819095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul GLfloat RasterPos[4]; 820095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul GLfloat RasterDistance; 821095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul GLfloat RasterColor[4]; 822095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul GLfloat RasterSecondaryColor[4]; 823ea81daf9544205b892926bdbbcdfdfc63fd7d872Brian Paul GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4]; 824095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul GLboolean RasterPosValid; 8256dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 8265e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 8275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8285e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 8304dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT). 8316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 8324dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_depthbuffer_attrib 8334dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 8346dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum Func; /**< Function for depth buffer compare */ 835bcb3957b6c22caf35d9b300440648c3e656e8b4cKeith Whitwell GLclampd Clear; /**< Value to clear depth buffer to */ 8366dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Test; /**< Depth buffering enabled flag */ 8376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Mask; /**< Depth buffer writable? */ 8386dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */ 8396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */ 8405e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 8415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8425e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 8444dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Evaluator attribute group (GL_EVAL_BIT). 8456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 8464dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_eval_attrib 8474dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 8486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 8496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Enable bits 8506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 8516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 8525e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1Color4; 8535e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1Index; 8545e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1Normal; 8555e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1TextureCoord1; 8565e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1TextureCoord2; 8575e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1TextureCoord3; 8585e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1TextureCoord4; 8595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1Vertex3; 8605e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map1Vertex4; 861bc42c19f22c3b719712529d86faea818f34150a2Brian Paul GLboolean Map1Attrib[16]; /* GL_NV_vertex_program */ 8625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2Color4; 8635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2Index; 8645e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2Normal; 8655e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2TextureCoord1; 8665e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2TextureCoord2; 8675e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2TextureCoord3; 8685e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2TextureCoord4; 8695e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2Vertex3; 8705e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean Map2Vertex4; 871bc42c19f22c3b719712529d86faea818f34150a2Brian Paul GLboolean Map2Attrib[16]; /* GL_NV_vertex_program */ 8725e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean AutoNormal; 8736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 8746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 8756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 8766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Map Grid endpoints and divisions and calculated du values 8776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 8786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 8795e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint MapGrid1un; 8805e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du; 8815e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint MapGrid2un, MapGrid2vn; 8825e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du; 8835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv; 8846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 8855e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 8865e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8875e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 8894dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Fog attribute group (GL_FOG_BIT). 8906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 8914dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_fog_attrib 8924dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 8936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Enabled; /**< Fog enabled flag */ 894e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLfloat ColorUnclamped[4]; /**< Fog color */ 8956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Color[4]; /**< Fog color */ 8966dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Density; /**< Density >= 0.0 */ 8976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Start; /**< Start distance in eye coords */ 8986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat End; /**< End distance in eye coords */ 8996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Index; /**< Fog index */ 9006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum Mode; /**< Fog mode */ 9015e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean ColorSumEnabled; 902180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen GLenum FogCoordinateSource; /**< GL_EXT_fog_coord */ 903071357096e682e9af59ad45ea5abc444ab431837Michal Krol GLfloat _Scale; /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */ 904740467dd62962b4effdaf51e38edc032e2a39487Nicholas Miell GLenum FogDistanceMode; /**< GL_NV_fog_distance */ 9055e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 9065e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 9094dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Hint attribute group (GL_HINT_BIT). 9106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * 9116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE. 9126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 9134dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_hint_attrib 9144dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 9155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLenum PerspectiveCorrection; 9165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLenum PointSmooth; 9175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLenum LineSmooth; 9185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLenum PolygonSmooth; 9195e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLenum Fog; 9206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum ClipVolumeClipping; /**< GL_EXT_clip_volume_hint */ 9216dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum TextureCompression; /**< GL_ARB_texture_compression */ 922efb41b07ff213735e8ea08f38a7799f9d80459fcBrian Paul GLenum GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 9232a37053fd5591eeb21db33aa8f6ee444da1eee7aMichal Krol GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ 9245e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 9255e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 92686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 9276dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 9284dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Lighting attribute group (GL_LIGHT_BIT). 9296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 9304dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_light_attrib 9314dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 9324dafbc3dc75be565704f437016f70a63c48d1539Brian Paul struct gl_light Light[MAX_LIGHTS]; /**< Array of light sources */ 9336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_lightmodel Model; /**< Lighting model */ 934cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 9356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 936b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul * Front and back material values. 937b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul * Note: must call FLUSH_VERTICES() before using. 938cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell */ 939b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul struct gl_material Material; 9406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Enabled; /**< Lighting enabled flag */ 9426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum ShadeModel; /**< GL_FLAT or GL_SMOOTH */ 94389966cdb1b5974059c32308d74b5bb09943a6fa1Brian Paul GLenum ProvokingVertex; /**< GL_EXT_provoking_vertex */ 9446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */ 9456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */ 9464cb3579e52fed48d623698610e31d05ac8c8946fBrian Paul GLbitfield _ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ 9475e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean ColorMaterialEnabled; 948b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul GLenum ClampVertexColor; /**< GL_TRUE, GL_FALSE, GL_FIXED_ONLY */ 949e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLboolean _ClampVertexColor; 9505e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_light EnabledList; /**< List sentinel */ 9525e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 9544dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Derived state for optimizations: 9556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 9566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 9576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean _NeedEyeCoords; 9586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean _NeedVertices; /**< Use fast shader? */ 9595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat _BaseColor[2][3]; 9606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 9615e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 9625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9646dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 9654dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Line attribute group (GL_LINE_BIT). 9666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 9674dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_line_attrib 9684dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 9696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean SmoothFlag; /**< GL_LINE_SMOOTH enabled? */ 9706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean StippleFlag; /**< GL_LINE_STIPPLE enabled? */ 9716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLushort StipplePattern; /**< Stipple pattern */ 9726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLint StippleFactor; /**< Stipple repeat factor */ 9736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Width; /**< Line width */ 9745e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 9755e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9765e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 97753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/** 9784dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Display list attribute group (GL_LIST_BIT). 97953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 9804dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_list_attrib 9814dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 9825e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLuint ListBase; 9835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 9845e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 98586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 9864dafbc3dc75be565704f437016f70a63c48d1539Brian Paul/** 9874dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Multisample attribute group (GL_MULTISAMPLE_BIT). 98853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 9894dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_multisample_attrib 9904dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 991736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul GLboolean Enabled; 9925ef4e4ffb8053db87f52df3c9b2ddb71d9c7d6e5Roland Scheidegger GLboolean _Enabled; /**< true if Enabled and multisample buffer */ 993736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul GLboolean SampleAlphaToCoverage; 994736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul GLboolean SampleAlphaToOne; 995736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul GLboolean SampleCoverage; 996736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul GLfloat SampleCoverageValue; 997736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul GLboolean SampleCoverageInvert; 998736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul}; 999736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul 1000736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul 10016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 1002b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian * A pixelmap (see glPixelMap) 1003b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian */ 1004b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brianstruct gl_pixelmap 1005b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian{ 1006b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian GLint Size; 1007b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian GLfloat Map[MAX_PIXEL_MAP_TABLE]; 1008b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian}; 1009b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1010b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1011b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian/** 1012b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian * Collection of all pixelmaps 1013b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian */ 1014b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brianstruct gl_pixelmaps 1015b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian{ 1016b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap RtoR; /**< i.e. GL_PIXEL_MAP_R_TO_R */ 1017b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap GtoG; 1018b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap BtoB; 1019b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap AtoA; 1020b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap ItoR; 1021b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap ItoG; 1022b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap ItoB; 1023b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap ItoA; 1024b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap ItoI; 1025b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmap StoS; 1026b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian}; 1027b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1028b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1029b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian/** 10304dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Pixel attribute group (GL_PIXEL_MODE_BIT). 10316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 10324dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_pixel_attrib 10334dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 1034e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLenum ReadBuffer; /**< source buffer for glRead/CopyPixels() */ 1035b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1036b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian /*--- Begin Pixel Transfer State ---*/ 1037b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian /* Fields are in the order in which they're applied... */ 1038b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1039bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** Scale & Bias (index shift, offset) */ 1040bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /*@{*/ 10415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat RedBias, RedScale; 10425e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat GreenBias, GreenScale; 10435e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat BlueBias, BlueScale; 10445e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat AlphaBias, AlphaScale; 10455e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat DepthBias, DepthScale; 10465e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint IndexShift, IndexOffset; 1047bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /*@}*/ 1048b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1049b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian /* Pixel Maps */ 1050b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian /* Note: actual pixel maps are not part of this attrib group */ 10515e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean MapColorFlag; 10525e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean MapStencilFlag; 1053b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 1054b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian /*--- End Pixel Transfer State ---*/ 1055b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian 10564dfa3757c58255c3ad8c3fe343541d2aa677f44cBrian Paul /** glPixelZoom */ 1057b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian GLfloat ZoomX, ZoomY; 10585e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 10595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 10605e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 10616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 10624dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Point attribute group (GL_POINT_BIT). 10636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 10644dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_point_attrib 10654dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 10666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean SmoothFlag; /**< True if GL_POINT_SMOOTH is enabled */ 10676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Size; /**< User-specified point size */ 10686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Params[3]; /**< GL_EXT_point_parameters */ 10696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */ 10706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Threshold; /**< GL_EXT_point_parameters */ 10716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */ 1072ee4e75bd6f768b7210436feeb32b4545ed62e025Brian Paul GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */ 1073ea81daf9544205b892926bdbbcdfdfc63fd7d872Brian Paul GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< GL_ARB_point_sprite*/ 107463736723678ef30e7f90835cfbd48c520e39bf11Ian Romanick GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */ 1075a9ea1628da5f17274cd7ee023f438046dc992073Daniel Borca GLenum SpriteOrigin; /**< GL_ARB_point_sprite */ 10765e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 10775e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 10785e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 10796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 10804dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Polygon attribute group (GL_POLYGON_BIT). 10816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 10824dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_polygon_attrib 10834dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 10846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum FrontFace; /**< Either GL_CW or GL_CCW */ 10856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 10866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 10876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean _FrontBit; /**< 0=GL_CCW, 1=GL_CW */ 10886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean CullFlag; /**< Culling on/off flag */ 10896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */ 10906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */ 10916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum CullFaceMode; /**< Culling mode GL_FRONT or GL_BACK */ 10926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat OffsetFactor; /**< Polygon offset factor, from user */ 10936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat OffsetUnits; /**< Polygon offset units, from user */ 10946dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean OffsetPoint; /**< Offset in GL_POINT mode */ 10956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean OffsetLine; /**< Offset in GL_LINE mode */ 10966dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean OffsetFill; /**< Offset in GL_FILL mode */ 10975e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 10985e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 10995e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 11006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 11014dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Scissor attributes (GL_SCISSOR_BIT). 11026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 11034dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_scissor_attrib 11044dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 11056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Enabled; /**< Scissor test enabled? */ 11066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLint X, Y; /**< Lower left corner of box */ 11076dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLsizei Width, Height; /**< Size of box */ 11085e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 11095e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 11105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 11116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 11124dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Stencil attribute group (GL_STENCIL_BUFFER_BIT). 1113dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * 1114dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * Three sets of stencil data are tracked so that OpenGL 2.0, 1115dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported 1116dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * simultaneously. In each of the stencil state arrays, element 0 corresponds 1117dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * to GL_FRONT. Element 1 corresponds to the OpenGL 2.0 / 1118dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * GL_ATI_separate_stencil GL_BACK state. Element 2 corresponds to the 1119dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * GL_EXT_stencil_two_side GL_BACK state. 1120dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * 1121dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * The derived value \c _BackFace is either 1 or 2 depending on whether or 1122dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled. 1123dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * 1124dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * The derived value \c _TestTwoSide is set when the front-face and back-face 1125dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * stencil state are different. 11266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 11274dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_stencil_attrib 11284dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 11296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Enabled; /**< Enabled flag */ 11306dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ 1131dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ 1132f352a80aec10c3faf2d84e0b35d59b4edc0395efBrian Paul GLboolean _Enabled; /**< Enabled and stencil buffer present */ 113342c34efd23d7ad05df9f3c71f7d52dd259e179d8Brian Paul GLboolean _TestTwoSide; 1134a304cc6cca2ee21c3b25041abf882ef0616e5244Brian Paul GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ 1135dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLenum Function[3]; /**< Stencil function */ 1136dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLenum FailFunc[3]; /**< Fail function */ 1137dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLenum ZPassFunc[3]; /**< Depth buffer pass function */ 1138dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLenum ZFailFunc[3]; /**< Depth buffer fail function */ 1139dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLint Ref[3]; /**< Reference value */ 1140dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLuint ValueMask[3]; /**< Value mask */ 1141dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick GLuint WriteMask[3]; /**< Write mask */ 1142b5932cfc9d48cf21554e2f9fdaccb7d8b52f2f8dBrian Paul GLuint Clear; /**< Clear value */ 11435e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 11445e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 11455e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 114653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/** 1147d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul * An index for each type of texture object. These correspond to the GL 114830b3d800917cc5b41ec508fd38a0ae1da8624a36Brian Paul * texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc. 1149d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul * Note: the order is from highest priority to lowest priority. 115053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 11514c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paultypedef enum 11524c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul{ 1153874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul TEXTURE_BUFFER_INDEX, 1154d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul TEXTURE_2D_ARRAY_INDEX, 1155d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul TEXTURE_1D_ARRAY_INDEX, 11560c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu TEXTURE_EXTERNAL_INDEX, 1157d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul TEXTURE_CUBE_INDEX, 1158d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul TEXTURE_3D_INDEX, 1159d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul TEXTURE_RECT_INDEX, 1160d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul TEXTURE_2D_INDEX, 1161d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul TEXTURE_1D_INDEX, 1162d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul NUM_TEXTURE_TARGETS 11634c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul} gl_texture_index; 1164d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul 116514e6bbccffa0a4d6b9d505212e812521da3677b6Brian Paul 116653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/** 116753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * Bit flags for each type of texture object 116853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * Used for Texture.Unit[]._ReallyEnabled flags. 116953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 117053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/*@{*/ 1171874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul#define TEXTURE_BUFFER_BIT (1 << TEXTURE_BUFFER_INDEX) 1172d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) 1173d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) 11740c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu#define TEXTURE_EXTERNAL_BIT (1 << TEXTURE_EXTERNAL_INDEX) 117503ec41ddc51e539c989a546f33d22daa2af69095Brian#define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX) 1176d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) 117703ec41ddc51e539c989a546f33d22daa2af69095Brian#define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX) 1178d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) 1179d059d030342fc232a5b54298c0591f5f814f4adbBrian Paul#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) 118053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/*@}*/ 118114e6bbccffa0a4d6b9d505212e812521da3677b6Brian Paul 118214e6bbccffa0a4d6b9d505212e812521da3677b6Brian Paul 118353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/** 11848c3b5cf943808faa7c57c19a2b4c7b6fffe653d6Brian Paul * Texture image state. Drivers will typically create a subclass of this 11858c3b5cf943808faa7c57c19a2b4c7b6fffe653d6Brian Paul * with extra fields for memory buffers, etc. 11866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 11874dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_texture_image 11884dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 1189960d49b387ff4b64f802097c5013beee4de3649dBrian Paul GLint InternalFormat; /**< Internal format as given by the user */ 1190a9fc8ba756dd25a07dc19058fe60f65bda82a055Brian Paul GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, 1191f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul * GL_LUMINANCE, GL_LUMINANCE_ALPHA, 1192eba527bf9ffc2fd67c44fb77104107556f509b49Ian Romanick * GL_INTENSITY, GL_DEPTH_COMPONENT or 1193eba527bf9ffc2fd67c44fb77104107556f509b49Ian Romanick * GL_DEPTH_STENCIL_EXT only. Used for 1194eba527bf9ffc2fd67c44fb77104107556f509b49Ian Romanick * choosing TexEnv arithmetic. 11955e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 1196fc5ab1b19780ef97c5e7f6257a2d91121503bd53Brian Paul gl_format TexFormat; /**< The actual texture memory format */ 1197960d49b387ff4b64f802097c5013beee4de3649dBrian Paul 11986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Border; /**< 0 or 1 */ 11996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Width; /**< = 2^WidthLog2 + 2*Border */ 12006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Height; /**< = 2^HeightLog2 + 2*Border */ 12016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Depth; /**< = 2^DepthLog2 + 2*Border */ 12026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Width2; /**< = Width - 2*Border */ 12036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Height2; /**< = Height - 2*Border */ 12046dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Depth2; /**< = Depth - 2*Border */ 12056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint WidthLog2; /**< = log2(Width2) */ 12066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint HeightLog2; /**< = log2(Height2) */ 12076dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint DepthLog2; /**< = log2(Depth2) */ 1208efa6b5e42b427c1ec9f2d636d280c84e7da71346Marek Olšák GLuint MaxNumLevels; /**< = maximum possible number of mipmap 1209efa6b5e42b427c1ec9f2d636d280c84e7da71346Marek Olšák levels, computed from the dimensions */ 12108e39ad2cd67d49be40ff0822f3269affdf83d601Brian Paul 1211a156b49800c1419785d0709b78ef0d35e6dab5dfBrian Paul struct gl_texture_object *TexObject; /**< Pointer back to parent object */ 1212a231d245514b43cf547ccb996b68efc0186e6821Brian Paul GLuint Level; /**< Which mipmap level am I? */ 1213a231d245514b43cf547ccb996b68efc0186e6821Brian Paul /** Cube map face: index into gl_texture_object::Image[] array */ 1214a231d245514b43cf547ccb996b68efc0186e6821Brian Paul GLuint Face; 12155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 12165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 121753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 121853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/** 121953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * Indexes for cube map faces. 122053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 12214c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paultypedef enum 12224c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul{ 12234c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FACE_POS_X = 0, 12244c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FACE_NEG_X = 1, 12254c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FACE_POS_Y = 2, 12264c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FACE_NEG_Y = 3, 12274c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FACE_POS_Z = 4, 12284c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FACE_NEG_Z = 5, 12294c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul MAX_FACES = 6 12304c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul} gl_face_index; 123153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 12325e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 12336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 1234ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul * Sampler object state. These objects are new with GL_ARB_sampler_objects 1235ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul * and OpenGL 3.3. Legacy texture objects also contain a sampler object. 12366dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 1237ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paulstruct gl_sampler_object 12384dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 1239ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLuint Name; 1240ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLint RefCount; 1241ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul 1242bb7d5f8837a9c7658a18dbaf02d52583e29443e3Brian Paul GLenum WrapS; /**< S-axis texture image wrap mode */ 1243bb7d5f8837a9c7658a18dbaf02d52583e29443e3Brian Paul GLenum WrapT; /**< T-axis texture image wrap mode */ 1244bb7d5f8837a9c7658a18dbaf02d52583e29443e3Brian Paul GLenum WrapR; /**< R-axis texture image wrap mode */ 12456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum MinFilter; /**< minification filter */ 12466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum MagFilter; /**< magnification filter */ 1247093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie union gl_color_union BorderColor; /**< Interpreted according to texture format */ 12486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ 12496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */ 1250781fb93877ea3a6faeefcdb48d9b463da7d954a3Brian Paul GLfloat LodBias; /**< OpenGL 1.4 */ 12516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 12526dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum CompareMode; /**< GL_ARB_shadow */ 12536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum CompareFunc; /**< GL_ARB_shadow */ 1254ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLenum sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */ 1255a19c42ffc606b594558a0c4f981662442ad6bb83Marek Olšák GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */ 1256ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul}; 1257ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul 1258ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul 1259ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul/** 1260ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul * Texture object state. Contains the array of mipmap images, border color, 1261eba527bf9ffc2fd67c44fb77104107556f509b49Ian Romanick * wrap modes, filter modes, and shadow/texcompare state. 1262ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul */ 1263ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paulstruct gl_texture_object 1264ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul{ 1265ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul _glthread_Mutex Mutex; /**< for thread safety */ 1266ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLint RefCount; /**< reference count */ 1267ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLuint Name; /**< the user-visible texture object ID */ 1268ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ 1269ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul 1270ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul struct gl_sampler_object Sampler; 1271ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul 1272c37efbfe4c415b6fd2d4f968220d7c9b62f11ecfPauli Nieminen GLenum DepthMode; /**< GL_ARB_depth_texture */ 1273c37efbfe4c415b6fd2d4f968220d7c9b62f11ecfPauli Nieminen 1274ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLfloat Priority; /**< in [0,1] */ 1275ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */ 1276ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul GLint MaxLevel; /**< max mipmap level, OpenGL 1.2 */ 12776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */ 12786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - b in spec) */ 12791b7e90984511cfa47597c255d73ca416ddd2db6fBrian Paul GLint CropRect[4]; /**< GL_OES_draw_texture */ 12804a89e51c5f88b57040b361b62e80a57c8248ba4bBrian Paul GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */ 12814a89e51c5f88b57040b361b62e80a57c8248ba4bBrian Paul GLuint _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */ 12826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 1283f4a93e0665881dd58a95abb6525676bd1cc2e6afBrian Paul GLboolean _BaseComplete; /**< Is the base texture level valid? */ 1284f4a93e0665881dd58a95abb6525676bd1cc2e6afBrian Paul GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */ 128573fd269d2f5aa2a0b9bc03ef904b81e263e3cc37Brian Paul GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */ 12862897cee99fb877e1f3cd9a881a61418c9c31867fBrian Paul GLboolean _RenderToTexture; /**< Any rendering to this texture? */ 128799864d595f7d4c13e9548f83d5972db9af64e67bChris Wilson GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 1288b296315881e4da60798e546f24c727a49deb9a89Brian Paul GLboolean Immutable; /**< GL_ARB_texture_storage */ 12893893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul 1290bb7d5f8837a9c7658a18dbaf02d52583e29443e3Brian Paul /** Actual texture images, indexed by [cube face] and [mipmap level] */ 129118fa367ac6e035341f5eb86ecc4231124b2921e3Keith Whitwell struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS]; 12925e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1293874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul /** GL_ARB_texture_buffer_object */ 1294874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul struct gl_buffer_object *BufferObject; 1295874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul GLenum BufferObjectFormat; 1296664355f05b39303fa0995b72160c82f5bf50e95eEric Anholt /** Equivalent Mesa format for BufferObjectFormat. */ 1297664355f05b39303fa0995b72160c82f5bf50e95eEric Anholt gl_format _BufferObjectFormat; 1298874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul 12990c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu /** GL_OES_EGL_image_external */ 13000c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu GLint RequiredTextureImageUnits; 13015e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 13025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 130353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 1304bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul/** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */ 1305bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul#define MAX_COMBINER_TERMS 4 1306bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul 1307bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul 130807d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick/** 130907d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick * Texture combine environment state. 131007d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick */ 13114dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_tex_env_combine_state 13124dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 131307d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick GLenum ModeRGB; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 131407d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick GLenum ModeA; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 1315bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */ 1316bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul GLenum SourceRGB[MAX_COMBINER_TERMS]; 1317bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul GLenum SourceA[MAX_COMBINER_TERMS]; 1318bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */ 1319bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul GLenum OperandRGB[MAX_COMBINER_TERMS]; 1320bd9b2be8284fda3f8aac235908ded118b5648a38Brian Paul GLenum OperandA[MAX_COMBINER_TERMS]; 132107d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick GLuint ScaleShiftRGB; /**< 0, 1 or 2 */ 132207d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick GLuint ScaleShiftA; /**< 0, 1 or 2 */ 1323f5d3027c0a03e26fe90efc067766c996dea05948Brian Paul GLuint _NumArgsRGB; /**< Number of inputs used for the RGB combiner */ 1324f5d3027c0a03e26fe90efc067766c996dea05948Brian Paul GLuint _NumArgsA; /**< Number of inputs used for the A combiner */ 132507d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick}; 13265e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 132753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 13286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 132986ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul * TexGenEnabled flags. 133086ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul */ 133186ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/*@{*/ 133286ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define S_BIT 1 133386ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define T_BIT 2 133486ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define R_BIT 4 133586ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define Q_BIT 8 133686ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define STR_BITS (S_BIT | T_BIT | R_BIT) 133786ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/*@}*/ 133886ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 133986ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 134086ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/** 134186ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul * Bit flag versions of the corresponding GL_ constants. 134286ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul */ 134386ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/*@{*/ 134486ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define TEXGEN_SPHERE_MAP 0x1 134586ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define TEXGEN_OBJ_LINEAR 0x2 134686ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define TEXGEN_EYE_LINEAR 0x4 134786ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define TEXGEN_REFLECTION_MAP_NV 0x8 134886ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define TEXGEN_NORMAL_MAP_NV 0x10 134986ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 135086ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define TEXGEN_NEED_NORMALS (TEXGEN_SPHERE_MAP | \ 135186ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul TEXGEN_REFLECTION_MAP_NV | \ 135286ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul TEXGEN_NORMAL_MAP_NV) 135386ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define TEXGEN_NEED_EYE_COORD (TEXGEN_SPHERE_MAP | \ 135486ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul TEXGEN_REFLECTION_MAP_NV | \ 135586ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul TEXGEN_NORMAL_MAP_NV | \ 135686ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul TEXGEN_EYE_LINEAR) 135786ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/*@}*/ 135886ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 135986ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 136086ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 136186ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/** Tex-gen enabled for texture unit? */ 136286ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define ENABLE_TEXGEN(unit) (1 << (unit)) 136386ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 136486ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/** Non-identity texture matrix for texture unit? */ 136586ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul#define ENABLE_TEXMAT(unit) (1 << (unit)) 136686ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 136786ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul 136886ccd9aaacc5358984faa11c3b94281f0b1a85f9Brian Paul/** 13699705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul * Texture coord generation state. 13709705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul */ 13719705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paulstruct gl_texgen 13729705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul{ 13739705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul GLenum Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */ 13749705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */ 13759705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul GLfloat ObjectPlane[4]; 13769705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul GLfloat EyePlane[4]; 13779705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul}; 13789705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul 13799705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul 13809705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul/** 13814dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Texture unit state. Contains enable flags, texture environment/function/ 1382f3f080e526017f9643fd25543b4e0039f1905f4bBrian Paul * combiners, texgen state, and pointers to current texture objects. 13836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 13844dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_texture_unit 13854dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 1386e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLbitfield Enabled; /**< bitmask of TEXTURE_*_BIT flags */ 1387e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLbitfield _ReallyEnabled; /**< 0 or exactly one of TEXTURE_*_BIT flags */ 13885e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 13896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ 1390e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLclampf EnvColor[4]; 1391e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLfloat EnvColorUnclamped[4]; 13929705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul 13939705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul struct gl_texgen GenS; 13949705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul struct gl_texgen GenT; 13959705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul struct gl_texgen GenR; 13969705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul struct gl_texgen GenQ; 1397e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ 13989705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul GLbitfield _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */ 13999705cff2033f1771a39ac3bb78eb5fcea522218aBrian Paul 14006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat LodBias; /**< for biasing mipmap levels */ 1401114152e068ec919feb0a57a1259c2ada970b9f02Roland Scheidegger GLenum BumpTarget; 1402114152e068ec919feb0a57a1259c2ada970b9f02Roland Scheidegger GLfloat RotMatrix[4]; /* 2x2 matrix */ 14036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1404ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul /** Current sampler object (GL_ARB_sampler_objects) */ 1405ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul struct gl_sampler_object *Sampler; 1406ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul 14076dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 14086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name GL_EXT_texture_env_combine 14096dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 141007d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick struct gl_tex_env_combine_state Combine; 141107d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick 141207d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick /** 141307d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick * Derived state based on \c EnvMode and the \c BaseFormat of the 141407d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick * currently enabled texture. 141507d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick */ 141607d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick struct gl_tex_env_combine_state _EnvMode; 141707d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick 141807d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick /** 141907d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick * Currently enabled combiner state. This will point to either 142007d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick * \c Combine or \c _EnvMode. 142107d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick */ 142207d6a983595b7ee52c8448fc579d952ce36472b8Ian Romanick struct gl_tex_env_combine_state *_CurrentCombine; 14235e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 14249818734e0148510967ca9ee0d1aa8b196b509f02Brian Paul /** Current texture object pointers */ 14259818734e0148510967ca9ee0d1aa8b196b509f02Brian Paul struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; 14269818734e0148510967ca9ee0d1aa8b196b509f02Brian Paul 14279818734e0148510967ca9ee0d1aa8b196b509f02Brian Paul /** Points to highest priority, complete and enabled texture object */ 14289818734e0148510967ca9ee0d1aa8b196b509f02Brian Paul struct gl_texture_object *_Current; 14295e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 14305e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 14315ddc53f899598396003ec6c723f8132c76aafe79Keith Whitwell 14326dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 14334dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Texture attribute group (GL_TEXTURE_BIT). 14346dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 14354dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_texture_attrib 14364dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 1437bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ 1438b2a30497cc8b107ea74c3d8fbb646e59a4d55a05Brian Paul struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; 1439ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes 1440fe469007037d9d5cdbe1677d8ff7368b276e9e7cBrian struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS]; 14415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1442874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul /** GL_ARB_texture_buffer_object */ 1443874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul struct gl_buffer_object *BufferObject; 1444874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul 14459d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick /** GL_ARB_seamless_cubemap */ 14469d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick GLboolean CubeMapSeamless; 14479d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick 1448e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul /** Texture units/samplers used by vertex or fragment texturing */ 1449e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul GLbitfield _EnabledUnits; 1450e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul 1451e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul /** Texture coord units/sets used for fragment texturing */ 1452e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul GLbitfield _EnabledCoordUnits; 1453e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul 1454e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul /** Texture coord units that have texgen enabled */ 1455e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul GLbitfield _TexGenEnabled; 1456e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul 1457e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul /** Texture coord units that have non-identity matrices */ 1458e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul GLbitfield _TexMatEnabled; 1459e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul 1460e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul /** Bitwise-OR of all Texture.Unit[i]._GenFlags */ 1461e30f7657639d53dc87fa35aa2ec02ed13c70f796Brian Paul GLbitfield _GenFlags; 14625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 14635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 14645e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 14656dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 1466d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry * Data structure representing a single clip plane (e.g. one of the elements 1467d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry * of the ctx->Transform.EyeUserPlane or ctx->Transform._ClipUserPlane array). 1468d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry */ 1469d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berrytypedef GLfloat gl_clip_plane[4]; 1470d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry 1471d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry 1472d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry/** 14734dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Transformation attribute group (GL_TRANSFORM_BIT). 14746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 14754dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_transform_attrib 14764dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 14776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum MatrixMode; /**< Matrix mode */ 1478d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry gl_clip_plane EyeUserPlane[MAX_CLIP_PLANES]; /**< User clip planes */ 1479d912669034eb7bf5c162358a7a574ec7a4c963c7Paul Berry gl_clip_plane _ClipUserPlane[MAX_CLIP_PLANES]; /**< derived */ 1480e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLbitfield ClipPlanesEnabled; /**< on/off bitmask */ 14816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Normalize; /**< Normalize all normals? */ 14826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ 14836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ 1484b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt GLboolean DepthClamp; /**< GL_ARB_depth_clamp */ 1485352d4dbfb24c65f327759c00c7db7d30a9482e35Keith Whitwell 1486352d4dbfb24c65f327759c00c7db7d30a9482e35Keith Whitwell GLfloat CullEyePos[4]; 1487352d4dbfb24c65f327759c00c7db7d30a9482e35Keith Whitwell GLfloat CullObjPos[4]; 14885e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 14895e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 14905e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 14916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 14924dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Viewport attribute group (GL_VIEWPORT_BIT). 14936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 14944dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_viewport_attrib 14954dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 14966dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLint X, Y; /**< position */ 14976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLsizei Width, Height; /**< size */ 14986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat Near, Far; /**< Depth buffer range */ 14996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLmatrix _WindowMap; /**< Mapping transformation as a matrix. */ 15005e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 15015e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 15025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 15036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 15047a6b71ef2944bae1718e8167b2faaceb8422071cBrian Paul * GL_ARB_vertex/pixel_buffer_object buffer object 1505148a2847a105ce9d9189ad3081091de60f803a33Brian Paul */ 15064dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_buffer_object 15074dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 1508eeec2c3d951fed0d22e5dbf436d4a2d887e24221Michal Krol _glthread_Mutex Mutex; 1509148a2847a105ce9d9189ad3081091de60f803a33Brian Paul GLint RefCount; 1510148a2847a105ce9d9189ad3081091de60f803a33Brian Paul GLuint Name; 1511462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul GLenum Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ 1512462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul GLsizeiptrARB Size; /**< Size of buffer storage in bytes */ 1513462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ 1514462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul /** Fields describing a mapped buffer */ 1515462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul /*@{*/ 1516e75b283b45add351dbe5a09289fe85546df8a79aBrian Paul GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */ 1517462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul GLvoid *Pointer; /**< User-space address of mapping */ 1518462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul GLintptr Offset; /**< Mapped offset */ 1519462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul GLsizeiptr Length; /**< Mapped length */ 1520462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul /*@}*/ 15219ed88983b03114d66d527354248e26f77d8868b9Mathias Fröhlich GLboolean DeletePending; /**< true if buffer object is removed from the hash */ 1522462a9525c78d5757afd2a8d4dc60afc68a69579bBrian Paul GLboolean Written; /**< Ever written to? (for debugging) */ 152399864d595f7d4c13e9548f83d5972db9af64e67bChris Wilson GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 1524148a2847a105ce9d9189ad3081091de60f803a33Brian Paul}; 1525148a2847a105ce9d9189ad3081091de60f803a33Brian Paul 1526148a2847a105ce9d9189ad3081091de60f803a33Brian Paul 1527148a2847a105ce9d9189ad3081091de60f803a33Brian Paul/** 15285e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * Client pixel packing/unpacking attributes 15295e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 15304dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_pixelstore_attrib 15314dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 15325e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint Alignment; 15335e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint RowLength; 15345e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint SkipPixels; 15355e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint SkipRows; 1536bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLint ImageHeight; 1537bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLint SkipImages; 15385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean SwapBytes; 15395e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean LsbFirst; 15406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Invert; /**< GL_MESA_pack_invert */ 15417a6b71ef2944bae1718e8167b2faaceb8422071cBrian Paul struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */ 15425e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 15435e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 15445e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 15456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 15465e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * Client vertex array attributes 15475e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 15484dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_client_array 15494dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 15501675058a346a57d89a18147799579c0ad574bfd2Brian Paul GLint Size; /**< components per element (1,2,3,4) */ 15511675058a346a57d89a18147799579c0ad574bfd2Brian Paul GLenum Type; /**< datatype: GL_FLOAT, GL_INT, etc */ 1552f7c1a2dacd1643a19fbf975c21ac3e64b708c8d7Brian Paul GLenum Format; /**< default: GL_RGBA, but may be GL_BGRA */ 15536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLsizei Stride; /**< user-specified stride */ 15546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLsizei StrideB; /**< actual stride in bytes */ 15551675058a346a57d89a18147799579c0ad574bfd2Brian Paul const GLubyte *Ptr; /**< Points to array data */ 155699efde461d3b8615863bdb7308e05289e0db0422Keith Whitwell GLboolean Enabled; /**< Enabled flag is a boolean */ 15576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean Normalized; /**< GL_ARB_vertex_program */ 1558d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul GLboolean Integer; /**< Integer-valued? */ 15591d1eb9578716913f4133786b30c6e6edc69a8a0cBrian Paul GLuint InstanceDivisor; /**< GL_ARB_instanced_arrays */ 15600077c879b57f663c038becdde37b2f6671f59150Brian Paul GLuint _ElementSize; /**< size of each element in bytes */ 1561148a2847a105ce9d9189ad3081091de60f803a33Brian Paul 1562b102c1d8f9ea359879e6c1c4fd8c80c00d21cad5Brian Paul struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */ 156315f21bf357980284d4aea6270f68bb9b83d26fbdBrian Paul GLuint _MaxElement; /**< max element index into array buffer + 1 */ 15645e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 15655e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 15665e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 15679960ddcd66b9c2c6f4b12fc7db7326ba83d65956Brian Paul/** 15689960ddcd66b9c2c6f4b12fc7db7326ba83d65956Brian Paul * Collection of vertex arrays. Defined by the GL_APPLE_vertex_array_object 15699960ddcd66b9c2c6f4b12fc7db7326ba83d65956Brian Paul * extension, but a nice encapsulation in any case. 15709960ddcd66b9c2c6f4b12fc7db7326ba83d65956Brian Paul */ 15719960ddcd66b9c2c6f4b12fc7db7326ba83d65956Brian Paulstruct gl_array_object 15729960ddcd66b9c2c6f4b12fc7db7326ba83d65956Brian Paul{ 1573ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick /** Name of the array object as received from glGenVertexArrayAPPLE. */ 1574ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick GLuint Name; 1575ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick 15761030bf0ded2a88a5e27f7a4d393c11cfde3d3c5aBrian Paul GLint RefCount; 15771030bf0ded2a88a5e27f7a4d393c11cfde3d3c5aBrian Paul _glthread_Mutex Mutex; 157809639901530da7df7347428512c2bee86af1ef8eIan Romanick 157909639901530da7df7347428512c2bee86af1ef8eIan Romanick /** 158009639901530da7df7347428512c2bee86af1ef8eIan Romanick * Does the VAO use ARB semantics or Apple semantics? 158109639901530da7df7347428512c2bee86af1ef8eIan Romanick * 158209639901530da7df7347428512c2bee86af1ef8eIan Romanick * There are several ways in which ARB_vertex_array_object and 158309639901530da7df7347428512c2bee86af1ef8eIan Romanick * APPLE_vertex_array_object VAOs have differing semantics. At the very 158409639901530da7df7347428512c2bee86af1ef8eIan Romanick * least, 158509639901530da7df7347428512c2bee86af1ef8eIan Romanick * 158609639901530da7df7347428512c2bee86af1ef8eIan Romanick * - ARB VAOs require that all array data be sourced from vertex buffer 158709639901530da7df7347428512c2bee86af1ef8eIan Romanick * objects, but Apple VAOs do not. 158809639901530da7df7347428512c2bee86af1ef8eIan Romanick * 158909639901530da7df7347428512c2bee86af1ef8eIan Romanick * - ARB VAOs require that names come from GenVertexArrays. 159009639901530da7df7347428512c2bee86af1ef8eIan Romanick * 159109639901530da7df7347428512c2bee86af1ef8eIan Romanick * This flag notes which behavior governs this VAO. 159209639901530da7df7347428512c2bee86af1ef8eIan Romanick */ 159309639901530da7df7347428512c2bee86af1ef8eIan Romanick GLboolean ARBsemantics; 15949bb6684799f00fabc313ee50be671454e498d8a9Brian Paul 1595e06b1c65bc576a9b239841cbe3a8a8c2d6a8d09fIan Romanick /** 1596e06b1c65bc576a9b239841cbe3a8a8c2d6a8d09fIan Romanick * Has this array object been bound? 1597e06b1c65bc576a9b239841cbe3a8a8c2d6a8d09fIan Romanick */ 1598e06b1c65bc576a9b239841cbe3a8a8c2d6a8d09fIan Romanick GLboolean _Used; 1599e06b1c65bc576a9b239841cbe3a8a8c2d6a8d09fIan Romanick 1600762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich /** Vertex attribute arrays */ 1601762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich struct gl_client_array VertexAttrib[VERT_ATTRIB_MAX]; 160286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 1603104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich /** Mask of VERT_BIT_* values indicating which arrays are enabled */ 1604f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich GLbitfield64 _Enabled; 1605a185bcbdec856cc98c26098e4e447a683eed14d1Brian Paul 1606b0e048f0b955ef79e2de794172de053d27d7d8faBrian Paul /** Mask of VERT_BIT_* values indicating changed/dirty arrays */ 1607b0e048f0b955ef79e2de794172de053d27d7d8faBrian Paul GLbitfield64 NewArrays; 1608b0e048f0b955ef79e2de794172de053d27d7d8faBrian Paul 1609a185bcbdec856cc98c26098e4e447a683eed14d1Brian Paul /** 1610a185bcbdec856cc98c26098e4e447a683eed14d1Brian Paul * Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs 1611a185bcbdec856cc98c26098e4e447a683eed14d1Brian Paul * we can determine the max legal (in bounds) glDrawElements array index. 1612a185bcbdec856cc98c26098e4e447a683eed14d1Brian Paul */ 1613a185bcbdec856cc98c26098e4e447a683eed14d1Brian Paul GLuint _MaxElement; 1614a0a5bd4bb30a73c10b02c3c3b914940a03f9b790Yuanhan Liu 1615a0a5bd4bb30a73c10b02c3c3b914940a03f9b790Yuanhan Liu struct gl_buffer_object *ElementArrayBufferObj; 1616ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick}; 1617ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick 1618ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick 1619ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick/** 1620ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick * Vertex array state 1621ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick */ 1622ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanickstruct gl_array_attrib 1623ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick{ 16249bb6684799f00fabc313ee50be671454e498d8a9Brian Paul /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ 1625ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick struct gl_array_object *ArrayObj; 16269bb6684799f00fabc313ee50be671454e498d8a9Brian Paul 16279bb6684799f00fabc313ee50be671454e498d8a9Brian Paul /** The default vertex array object */ 1628ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick struct gl_array_object *DefaultArrayObj; 1629ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick 163012cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul /** Array objects (GL_ARB/APPLE_vertex_array_object) */ 163112cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul struct _mesa_HashTable *Objects; 163212cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul 16336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLint ActiveTexture; /**< Client Active Texture */ 1634148a2847a105ce9d9189ad3081091de60f803a33Brian Paul GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ 1635148a2847a105ce9d9189ad3081091de60f803a33Brian Paul GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ 1636cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 1637a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul /** GL 3.1 (slightly different from GL_NV_primitive_restart) */ 1638a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul GLboolean PrimitiveRestart; 1639a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul GLuint RestartIndex; 1640a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul 1641f90b5936d07c4c8f280318ab5cf5894ecb67aef6Chia-I Wu /* GL_ARB_vertex_buffer_object */ 1642148a2847a105ce9d9189ad3081091de60f803a33Brian Paul struct gl_buffer_object *ArrayBufferObj; 164350f7e75f9e945cfbb2ae868cc961a2205a0b6e73Marek Olšák 164450f7e75f9e945cfbb2ae868cc961a2205a0b6e73Marek Olšák /** 164550f7e75f9e945cfbb2ae868cc961a2205a0b6e73Marek Olšák * Vertex arrays as consumed by a driver. 164650f7e75f9e945cfbb2ae868cc961a2205a0b6e73Marek Olšák * The array pointer is set up only by the VBO module. */ 164750f7e75f9e945cfbb2ae868cc961a2205a0b6e73Marek Olšák const struct gl_client_array **_DrawArrays; /**< 0..VERT_ATTRIB_MAX-1 */ 16485e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 16495e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 16505e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 165153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul/** 165253f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * Feedback buffer state 165353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul */ 16544dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_feedback 16554dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 16565e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLenum Type; 1657bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLbitfield _Mask; /**< FB_* bits */ 16585e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat *Buffer; 16595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLuint BufferSize; 16605e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLuint Count; 16615e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 16625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 16635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 16646dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 166553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * Selection buffer state 16666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 16674dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_selection 16684dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 16696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint *Buffer; /**< selection buffer */ 16706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint BufferSize; /**< size of the selection buffer */ 16716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint BufferCount; /**< number of values in the selection buffer */ 16726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Hits; /**< number of records in the selection buffer */ 16736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint NameStackDepth; /**< name stack depth */ 16746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */ 16756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean HitFlag; /**< hit flag */ 16766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat HitMinZ; /**< minimum hit depth */ 16776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat HitMaxZ; /**< maximum hit depth */ 16785e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 16795e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 16805e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 16816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 16825e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 1-D Evaluator control points 16835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 1684f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paulstruct gl_1d_map 1685f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paul{ 16866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Order; /**< Number of control points */ 16876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat u1, u2, du; /**< u1, u2, 1.0/(u2-u1) */ 16886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat *Points; /**< Points to contiguous control points */ 16895e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 1690ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes 16915e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 16926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 16935e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 2-D Evaluator control points 16945e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 1695f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paulstruct gl_2d_map 1696f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paul{ 16976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Uorder; /**< Number of control points in U dimension */ 16986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Vorder; /**< Number of control points in V dimension */ 16995e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat u1, u2, du; 17005e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat v1, v2, dv; 17016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLfloat *Points; /**< Points to contiguous control points */ 17025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 17035e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 17045e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 17056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 170653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul * All evaluator control point state 17075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 1708f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paulstruct gl_evaluators 1709f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paul{ 17106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 17116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name 1-D maps 17126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 17136dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 17145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Vertex3; 17155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Vertex4; 17165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Index; 17175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Color4; 17185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Normal; 17195e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Texture1; 17205e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Texture2; 17215e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Texture3; 17225e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_1d_map Map1Texture4; 17236dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_1d_map Map1Attrib[16]; /**< GL_NV_vertex_program */ 17246dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 17255e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 17266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 17276dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name 2-D maps 17286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 17296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 17305e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Vertex3; 17315e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Vertex4; 17325e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Index; 17335e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Color4; 17345e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Normal; 17355e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Texture1; 17365e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Texture2; 17375e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Texture3; 17385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_2d_map Map2Texture4; 17396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_2d_map Map2Attrib[16]; /**< GL_NV_vertex_program */ 17406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 17415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 17425e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 17435e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 174484870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_transform_feedback_varying_info 174584870e215667c999202be31057df6e31a0389bb7Brian Paul{ 174684870e215667c999202be31057df6e31a0389bb7Brian Paul char *Name; 174784870e215667c999202be31057df6e31a0389bb7Brian Paul GLenum Type; 174884870e215667c999202be31057df6e31a0389bb7Brian Paul GLint Size; 174984870e215667c999202be31057df6e31a0389bb7Brian Paul}; 175084870e215667c999202be31057df6e31a0389bb7Brian Paul 175184870e215667c999202be31057df6e31a0389bb7Brian Paul 175284870e215667c999202be31057df6e31a0389bb7Brian Paul/** 175384870e215667c999202be31057df6e31a0389bb7Brian Paul * Per-output info vertex shaders for transform feedback. 175484870e215667c999202be31057df6e31a0389bb7Brian Paul */ 175584870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_transform_feedback_output 175684870e215667c999202be31057df6e31a0389bb7Brian Paul{ 175784870e215667c999202be31057df6e31a0389bb7Brian Paul unsigned OutputRegister; 175884870e215667c999202be31057df6e31a0389bb7Brian Paul unsigned OutputBuffer; 175984870e215667c999202be31057df6e31a0389bb7Brian Paul unsigned NumComponents; 176084870e215667c999202be31057df6e31a0389bb7Brian Paul 176184870e215667c999202be31057df6e31a0389bb7Brian Paul /** offset (in DWORDs) of this output within the interleaved structure */ 176284870e215667c999202be31057df6e31a0389bb7Brian Paul unsigned DstOffset; 176384870e215667c999202be31057df6e31a0389bb7Brian Paul 176484870e215667c999202be31057df6e31a0389bb7Brian Paul /** 176584870e215667c999202be31057df6e31a0389bb7Brian Paul * Offset into the output register of the data to output. For example, 176684870e215667c999202be31057df6e31a0389bb7Brian Paul * if NumComponents is 2 and ComponentOffset is 1, then the data to 176784870e215667c999202be31057df6e31a0389bb7Brian Paul * offset is in the y and z components of the output register. 176884870e215667c999202be31057df6e31a0389bb7Brian Paul */ 176984870e215667c999202be31057df6e31a0389bb7Brian Paul unsigned ComponentOffset; 177084870e215667c999202be31057df6e31a0389bb7Brian Paul}; 177184870e215667c999202be31057df6e31a0389bb7Brian Paul 177284870e215667c999202be31057df6e31a0389bb7Brian Paul 177384870e215667c999202be31057df6e31a0389bb7Brian Paul/** Post-link transform feedback info. */ 177484870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_transform_feedback_info 177584870e215667c999202be31057df6e31a0389bb7Brian Paul{ 177684870e215667c999202be31057df6e31a0389bb7Brian Paul unsigned NumOutputs; 177784870e215667c999202be31057df6e31a0389bb7Brian Paul 177884870e215667c999202be31057df6e31a0389bb7Brian Paul /** 177984870e215667c999202be31057df6e31a0389bb7Brian Paul * Number of transform feedback buffers in use by this program. 178084870e215667c999202be31057df6e31a0389bb7Brian Paul */ 178184870e215667c999202be31057df6e31a0389bb7Brian Paul unsigned NumBuffers; 178284870e215667c999202be31057df6e31a0389bb7Brian Paul 178384870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_transform_feedback_output *Outputs; 178484870e215667c999202be31057df6e31a0389bb7Brian Paul 178584870e215667c999202be31057df6e31a0389bb7Brian Paul /** Transform feedback varyings used for the linking of this shader program. 178684870e215667c999202be31057df6e31a0389bb7Brian Paul * 178784870e215667c999202be31057df6e31a0389bb7Brian Paul * Use for glGetTransformFeedbackVarying(). 178884870e215667c999202be31057df6e31a0389bb7Brian Paul */ 178984870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_transform_feedback_varying_info *Varyings; 179084870e215667c999202be31057df6e31a0389bb7Brian Paul GLint NumVarying; 179184870e215667c999202be31057df6e31a0389bb7Brian Paul 179284870e215667c999202be31057df6e31a0389bb7Brian Paul /** 179384870e215667c999202be31057df6e31a0389bb7Brian Paul * Total number of components stored in each buffer. This may be used by 179484870e215667c999202be31057df6e31a0389bb7Brian Paul * hardware back-ends to determine the correct stride when interleaving 179584870e215667c999202be31057df6e31a0389bb7Brian Paul * multiple transform feedback outputs in the same buffer. 179684870e215667c999202be31057df6e31a0389bb7Brian Paul */ 179715ac66e331abdab12e882d80a6b4f647bc905298Marek Olšák unsigned BufferStride[MAX_FEEDBACK_BUFFERS]; 179884870e215667c999202be31057df6e31a0389bb7Brian Paul}; 179984870e215667c999202be31057df6e31a0389bb7Brian Paul 180084870e215667c999202be31057df6e31a0389bb7Brian Paul 180184870e215667c999202be31057df6e31a0389bb7Brian Paul/** 180284870e215667c999202be31057df6e31a0389bb7Brian Paul * Transform feedback object state 180384870e215667c999202be31057df6e31a0389bb7Brian Paul */ 180484870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_transform_feedback_object 180584870e215667c999202be31057df6e31a0389bb7Brian Paul{ 180684870e215667c999202be31057df6e31a0389bb7Brian Paul GLuint Name; /**< AKA the object ID */ 180784870e215667c999202be31057df6e31a0389bb7Brian Paul GLint RefCount; 180884870e215667c999202be31057df6e31a0389bb7Brian Paul GLboolean Active; /**< Is transform feedback enabled? */ 180984870e215667c999202be31057df6e31a0389bb7Brian Paul GLboolean Paused; /**< Is transform feedback paused? */ 181084870e215667c999202be31057df6e31a0389bb7Brian Paul GLboolean EndedAnytime; /**< Has EndTransformFeedback been called 181184870e215667c999202be31057df6e31a0389bb7Brian Paul at least once? */ 181284870e215667c999202be31057df6e31a0389bb7Brian Paul 181384870e215667c999202be31057df6e31a0389bb7Brian Paul /** The feedback buffers */ 181415ac66e331abdab12e882d80a6b4f647bc905298Marek Olšák GLuint BufferNames[MAX_FEEDBACK_BUFFERS]; 181515ac66e331abdab12e882d80a6b4f647bc905298Marek Olšák struct gl_buffer_object *Buffers[MAX_FEEDBACK_BUFFERS]; 181684870e215667c999202be31057df6e31a0389bb7Brian Paul 181784870e215667c999202be31057df6e31a0389bb7Brian Paul /** Start of feedback data in dest buffer */ 181815ac66e331abdab12e882d80a6b4f647bc905298Marek Olšák GLintptr Offset[MAX_FEEDBACK_BUFFERS]; 181984870e215667c999202be31057df6e31a0389bb7Brian Paul /** Max data to put into dest buffer (in bytes) */ 182015ac66e331abdab12e882d80a6b4f647bc905298Marek Olšák GLsizeiptr Size[MAX_FEEDBACK_BUFFERS]; 182184870e215667c999202be31057df6e31a0389bb7Brian Paul}; 182284870e215667c999202be31057df6e31a0389bb7Brian Paul 182384870e215667c999202be31057df6e31a0389bb7Brian Paul 182484870e215667c999202be31057df6e31a0389bb7Brian Paul/** 182584870e215667c999202be31057df6e31a0389bb7Brian Paul * Context state for transform feedback. 182684870e215667c999202be31057df6e31a0389bb7Brian Paul */ 182784870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_transform_feedback_state 182884870e215667c999202be31057df6e31a0389bb7Brian Paul{ 182984870e215667c999202be31057df6e31a0389bb7Brian Paul GLenum Mode; /**< GL_POINTS, GL_LINES or GL_TRIANGLES */ 183084870e215667c999202be31057df6e31a0389bb7Brian Paul 183184870e215667c999202be31057df6e31a0389bb7Brian Paul /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */ 183284870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_buffer_object *CurrentBuffer; 183384870e215667c999202be31057df6e31a0389bb7Brian Paul 183484870e215667c999202be31057df6e31a0389bb7Brian Paul /** The table of all transform feedback objects */ 183584870e215667c999202be31057df6e31a0389bb7Brian Paul struct _mesa_HashTable *Objects; 183684870e215667c999202be31057df6e31a0389bb7Brian Paul 183784870e215667c999202be31057df6e31a0389bb7Brian Paul /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */ 183884870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_transform_feedback_object *CurrentObject; 183984870e215667c999202be31057df6e31a0389bb7Brian Paul 184084870e215667c999202be31057df6e31a0389bb7Brian Paul /** The default xform-fb object (Name==0) */ 184184870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_transform_feedback_object *DefaultObject; 184284870e215667c999202be31057df6e31a0389bb7Brian Paul}; 184384870e215667c999202be31057df6e31a0389bb7Brian Paul 184484870e215667c999202be31057df6e31a0389bb7Brian Paul 18456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 1846613e1ad5d517d9964bd9cf94daa931dda33113feBrian Paul * Names of the various vertex/fragment program register files, etc. 1847a90046f1097ad95de2aa95ca65741dff5cddced9Brian * 1848613e1ad5d517d9964bd9cf94daa931dda33113feBrian Paul * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c) 1849613e1ad5d517d9964bd9cf94daa931dda33113feBrian Paul * All values should fit in a 4-bit field. 1850a90046f1097ad95de2aa95ca65741dff5cddced9Brian * 1851a90046f1097ad95de2aa95ca65741dff5cddced9Brian * NOTE: PROGRAM_ENV_PARAM, PROGRAM_STATE_VAR, PROGRAM_NAMED_PARAM, 1852a90046f1097ad95de2aa95ca65741dff5cddced9Brian * PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be considered to 1853a90046f1097ad95de2aa95ca65741dff5cddced9Brian * be "uniform" variables since they can only be set outside glBegin/End. 1854a90046f1097ad95de2aa95ca65741dff5cddced9Brian * They're also all stored in the same Parameters array. 18556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 1856b4026d9be828bd0b6f60158456edf24994efb053Brian Paultypedef enum 185786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul{ 1858b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_TEMPORARY, /**< machine->Temporary[] */ 18599457d9ff4482f9b3796e2989e9ac3385d7d5404dBrian Paul PROGRAM_INPUT, /**< machine->Inputs[] */ 18609457d9ff4482f9b3796e2989e9ac3385d7d5404dBrian Paul PROGRAM_OUTPUT, /**< machine->Outputs[] */ 18619457d9ff4482f9b3796e2989e9ac3385d7d5404dBrian Paul PROGRAM_VARYING, /**< machine->Inputs[]/Outputs[] */ 1862b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_LOCAL_PARAM, /**< gl_program->LocalParams[] */ 1863b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_ENV_PARAM, /**< gl_program->Parameters[] */ 1864b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */ 1865b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_NAMED_PARAM, /**< gl_program->Parameters[] */ 1866b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_CONSTANT, /**< gl_program->Parameters[] */ 1867b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_UNIFORM, /**< gl_program->Parameters[] */ 1868b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */ 1869b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_ADDRESS, /**< machine->AddressReg */ 1870b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_SAMPLER, /**< for shader samplers, compile-time only */ 1871c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul PROGRAM_SYSTEM_VALUE,/**< InstanceId, PrimitiveID, etc. */ 1872b4026d9be828bd0b6f60158456edf24994efb053Brian Paul PROGRAM_UNDEFINED, /**< Invalid/TBD value */ 18737b52bed98729a05feab28f6d2b0677e4f84c44c3Eric Anholt PROGRAM_FILE_MAX 1874b4026d9be828bd0b6f60158456edf24994efb053Brian Paul} gl_register_file; 187586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 187686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 1877c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul/** 1878c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul * If the register file is PROGRAM_SYSTEM_VALUE, the register index will be 1879c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul * one of these values. 1880c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul */ 1881c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paultypedef enum 1882c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul{ 1883c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul SYSTEM_VALUE_FRONT_FACE, /**< Fragment shader only (not done yet) */ 1884919c53e87a1f6f5322bc1f1486bb3e6b954b00d5Eric Anholt SYSTEM_VALUE_VERTEX_ID, /**< Vertex shader only */ 1885c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul SYSTEM_VALUE_INSTANCE_ID, /**< Vertex shader only */ 1886c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul SYSTEM_VALUE_MAX /**< Number of values */ 1887c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul} gl_system_value; 1888c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul 1889c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul 1890cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry/** 1891cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry * The possible interpolation qualifiers that can be applied to a fragment 1892cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry * shader input in GLSL. 1893c488150dea083a9677429b4185c6b20d7facd52bPaul Berry * 1894c488150dea083a9677429b4185c6b20d7facd52bPaul Berry * Note: INTERP_QUALIFIER_NONE must be 0 so that memsetting the 1895c488150dea083a9677429b4185c6b20d7facd52bPaul Berry * gl_fragment_program data structure to 0 causes the default behavior. 1896cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry */ 1897cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berryenum glsl_interp_qualifier 1898cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry{ 1899c488150dea083a9677429b4185c6b20d7facd52bPaul Berry INTERP_QUALIFIER_NONE = 0, 1900cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry INTERP_QUALIFIER_SMOOTH, 1901cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry INTERP_QUALIFIER_FLAT, 1902cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry INTERP_QUALIFIER_NOPERSPECTIVE 1903cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry}; 1904cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry 1905cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry 190684870e215667c999202be31057df6e31a0389bb7Brian Paul/** 190784870e215667c999202be31057df6e31a0389bb7Brian Paul * \brief Layout qualifiers for gl_FragDepth. 190884870e215667c999202be31057df6e31a0389bb7Brian Paul * 190984870e215667c999202be31057df6e31a0389bb7Brian Paul * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with 191084870e215667c999202be31057df6e31a0389bb7Brian Paul * a layout qualifier. 191184870e215667c999202be31057df6e31a0389bb7Brian Paul * 191284870e215667c999202be31057df6e31a0389bb7Brian Paul * \see enum ir_depth_layout 191384870e215667c999202be31057df6e31a0389bb7Brian Paul */ 191484870e215667c999202be31057df6e31a0389bb7Brian Paulenum gl_frag_depth_layout 191584870e215667c999202be31057df6e31a0389bb7Brian Paul{ 191684870e215667c999202be31057df6e31a0389bb7Brian Paul FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */ 191784870e215667c999202be31057df6e31a0389bb7Brian Paul FRAG_DEPTH_LAYOUT_ANY, 191884870e215667c999202be31057df6e31a0389bb7Brian Paul FRAG_DEPTH_LAYOUT_GREATER, 191984870e215667c999202be31057df6e31a0389bb7Brian Paul FRAG_DEPTH_LAYOUT_LESS, 192084870e215667c999202be31057df6e31a0389bb7Brian Paul FRAG_DEPTH_LAYOUT_UNCHANGED 1921d540af554adfe302387014c0f46d6ac3aaa75121Christoph Bumiller}; 1922d540af554adfe302387014c0f46d6ac3aaa75121Christoph Bumiller 192386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 19246dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 19256dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Base class for any kind of program object 19266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 1927122629f27925a9dc50029bebc5079f87f416a7e1Brian Paulstruct gl_program 192886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul{ 1929610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul GLuint Id; 19303209c3ed0d82c158eed1020759aacf51ba1c1ad5Brian GLubyte *String; /**< Null-terminated program text */ 1931610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul GLint RefCount; 19323209c3ed0d82c158eed1020759aacf51ba1c1ad5Brian GLenum Target; /**< GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_FRAGMENT_PROGRAM_NV */ 19333209c3ed0d82c158eed1020759aacf51ba1c1ad5Brian GLenum Format; /**< String encoding format */ 1934610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul GLboolean Resident; 1935de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul 1936de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul struct prog_instruction *Instructions; 1937de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul 1938dca6a28a14f22d77273d79d44f57b0d853c0242dMathias Fröhlich GLbitfield64 InputsRead; /**< Bitmask of which input regs are read */ 19395606dfb572bf4b89b4882265924705bacc8c182bIan Romanick GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */ 1940c6d74bcbfcb54e0c03f4c3d7e82bc1267f36ffe4Brian Paul GLbitfield SystemValuesRead; /**< Bitmask of SYSTEM_VALUE_x inputs used */ 1941b730d0d3e9b202b17a0815cb820fc9905f35cb98Brian Paul GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */ 1942b730d0d3e9b202b17a0815cb820fc9905f35cb98Brian Paul GLbitfield OutputFlags[MAX_PROGRAM_OUTPUTS]; /**< PROG_PARAM_BIT_x flags */ 194386adc2b29effb573c18eb0de7016cef605ab1edcHenri Verbeet GLbitfield TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */ 1944ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */ 19457b559a91028d297b34df9ec939bd4d00fad6027cIan Romanick GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */ 1946de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul 1947b730d0d3e9b202b17a0815cb820fc9905f35cb98Brian Paul 1948de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /** Named parameters, constants, etc. from program text */ 1949122629f27925a9dc50029bebc5079f87f416a7e1Brian Paul struct gl_program_parameter_list *Parameters; 1950de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /** Numbered local parameters */ 1951edd677454dc38a590bd6fc1cd3e2759d2a4d55e3Brian Paul GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4]; 1952de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul 1953ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul /** Map from sampler unit to texture unit (set by glUniform1i()) */ 1954ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul GLubyte SamplerUnits[MAX_SAMPLERS]; 1955ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul 195656643096f1eb01eefa1a532ac096b32d23b6b8baBrian Paul /** Bitmask of which register files are read/written with indirect 195756643096f1eb01eefa1a532ac096b32d23b6b8baBrian Paul * addressing. Mask of (1 << PROGRAM_x) bits. 195856643096f1eb01eefa1a532ac096b32d23b6b8baBrian Paul */ 195956643096f1eb01eefa1a532ac096b32d23b6b8baBrian Paul GLbitfield IndirectRegisterFiles; 196056643096f1eb01eefa1a532ac096b32d23b6b8baBrian Paul 1961de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /** Logical counts */ 1962de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /*@{*/ 1963de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul GLuint NumInstructions; 1964d0492cf1377897c8113a109aa936ee7a7084b9c8Brian Paul GLuint NumTemporaries; 1965d0492cf1377897c8113a109aa936ee7a7084b9c8Brian Paul GLuint NumParameters; 1966d0492cf1377897c8113a109aa936ee7a7084b9c8Brian Paul GLuint NumAttributes; 1967d0492cf1377897c8113a109aa936ee7a7084b9c8Brian Paul GLuint NumAddressRegs; 196821f99792a916a62fcfae7c208f50f192d4ce5926Brian GLuint NumAluInstructions; 196921f99792a916a62fcfae7c208f50f192d4ce5926Brian GLuint NumTexInstructions; 197021f99792a916a62fcfae7c208f50f192d4ce5926Brian GLuint NumTexIndirections; 1971de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /*@}*/ 1972de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /** Native, actual h/w counts */ 1973de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /*@{*/ 197405051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint NumNativeInstructions; 197505051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint NumNativeTemporaries; 197605051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint NumNativeParameters; 197705051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint NumNativeAttributes; 197805051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint NumNativeAddressRegs; 197921f99792a916a62fcfae7c208f50f192d4ce5926Brian GLuint NumNativeAluInstructions; 198021f99792a916a62fcfae7c208f50f192d4ce5926Brian GLuint NumNativeTexInstructions; 198121f99792a916a62fcfae7c208f50f192d4ce5926Brian GLuint NumNativeTexIndirections; 1982de99760bf3511d05185799c4fb4347f9e5f420f4Brian Paul /*@}*/ 198386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul}; 198486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 198586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 19866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** Vertex program object */ 1987122629f27925a9dc50029bebc5079f87f416a7e1Brian Paulstruct gl_vertex_program 198886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul{ 1989122629f27925a9dc50029bebc5079f87f416a7e1Brian Paul struct gl_program Base; /**< base class */ 1990122629f27925a9dc50029bebc5079f87f416a7e1Brian Paul GLboolean IsNVProgram; /**< is this a GL_NV_vertex_program program? */ 1991122629f27925a9dc50029bebc5079f87f416a7e1Brian Paul GLboolean IsPositionInvariant; 19921ad54ae0b1713e399c5db43d0eba87861075b4c7Paul Berry GLboolean UsesClipDistance; 199386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul}; 199486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 199586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 1996da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/** Geometry program object */ 1997da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusinstruct gl_geometry_program 1998da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin{ 1999da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_program Base; /**< base class */ 2000da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 2001da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLint VerticesOut; 2002e3c961de3696911d8ab1351e64bd6e904de103d0Brian Paul GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 2003e3c961de3696911d8ab1351e64bd6e904de103d0Brian Paul GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 2004e3c961de3696911d8ab1351e64bd6e904de103d0Brian Paul GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 2005da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin}; 2006da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 2007da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 20086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** Fragment program object */ 2009122629f27925a9dc50029bebc5079f87f416a7e1Brian Paulstruct gl_fragment_program 201086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul{ 2011122629f27925a9dc50029bebc5079f87f416a7e1Brian Paul struct gl_program Base; /**< base class */ 2012ec76910187adc88fc54907ffa3506309ee2abcf3Brian Paul GLboolean UsesKill; /**< shader uses KIL instruction */ 20135e310e9f8300a357d6bdaf098c72098518b564f3Paul Berry GLboolean UsesDFdy; /**< shader uses DDY instruction */ 2014e59353f592ef587d34279f0735f06053e289a7b4Luca Barbieri GLboolean OriginUpperLeft; 2015e59353f592ef587d34279f0735f06053e289a7b4Luca Barbieri GLboolean PixelCenterInteger; 2016a1b83464ffb1125b77e6f5664e0071f95167055dChad Versace enum gl_frag_depth_layout FragDepthLayout; 2017cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry 2018cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry /** 2019cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry * GLSL interpolation qualifier associated with each fragment shader input. 2020cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry * For inputs that do not have an interpolation qualifier specified in 2021c488150dea083a9677429b4185c6b20d7facd52bPaul Berry * GLSL, the value is INTERP_QUALIFIER_NONE. 2022cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry */ 2023cf45949d6a896651a5f3864d3b195e26d59eee74Paul Berry enum glsl_interp_qualifier InterpQualifier[FRAG_ATTRIB_MAX]; 2024bebb0438113efdcc1c2aaed95c70ba87de1d3053Paul Berry 2025bebb0438113efdcc1c2aaed95c70ba87de1d3053Paul Berry /** 2026bebb0438113efdcc1c2aaed95c70ba87de1d3053Paul Berry * Bitfield indicating, for each fragment shader input, 1 if that input 2027bebb0438113efdcc1c2aaed95c70ba87de1d3053Paul Berry * uses centroid interpolation, 0 otherwise. Unused inputs are 0. 2028bebb0438113efdcc1c2aaed95c70ba87de1d3053Paul Berry */ 2029bebb0438113efdcc1c2aaed95c70ba87de1d3053Paul Berry GLbitfield64 IsCentroid; 2030610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul}; 2031610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul 2032610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul 20336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 2034610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul * State common to vertex and fragment programs. 2035610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul */ 20364dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_program_state 20374dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 2038e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */ 2039e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */ 204086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul}; 204186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 204286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 20436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 204481968ec49d9e06be0e095fa0084aa61b68b23d75Brian Paul * Context state for vertex programs. 204586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul */ 20464dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_vertex_program_state 204786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul{ 2048bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ 2049bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 2050bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ 2051bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ 2052b68e3422ed9a0f16c7015940ffd5ac0361f0ca42Eric Anholt /** Computed two sided lighting for fixed function/programs. */ 2053b68e3422ed9a0f16c7015940ffd5ac0361f0ca42Eric Anholt GLboolean _TwoSideEnabled; 205420555835b68c58b52d7954a0b237a9a331013e68Brian Paul struct gl_vertex_program *Current; /**< User-bound vertex program */ 2055a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2056bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** Currently enabled and valid vertex program (including internal 2057bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul * programs, user-defined vertex programs and GLSL vertex shaders). 205820555835b68c58b52d7954a0b237a9a331013e68Brian Paul * This is the program we must use when rendering. 20595e80c62f3178a65bebca942aa0b1e5d16c34b2a9Brian */ 2060a90046f1097ad95de2aa95ca65741dff5cddced9Brian struct gl_vertex_program *_Current; 206186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 2062b7aeac0de1c9c533f78c5d6acf358bdc206161abBrian GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 206381968ec49d9e06be0e095fa0084aa61b68b23d75Brian Paul 206481968ec49d9e06be0e095fa0084aa61b68b23d75Brian Paul /* For GL_NV_vertex_program only: */ 2065b7aeac0de1c9c533f78c5d6acf358bdc206161abBrian GLenum TrackMatrix[MAX_PROGRAM_ENV_PARAMS / 4]; 2066b7aeac0de1c9c533f78c5d6acf358bdc206161abBrian GLenum TrackMatrixTransform[MAX_PROGRAM_ENV_PARAMS / 4]; 206708ff059f203f05a0cc417a46fe37f83929963db5Brian Paul 2068a90046f1097ad95de2aa95ca65741dff5cddced9Brian /** Should fixed-function T&L be implemented with a vertex prog? */ 2069a90046f1097ad95de2aa95ca65741dff5cddced9Brian GLboolean _MaintainTnlProgram; 2070a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2071a90046f1097ad95de2aa95ca65741dff5cddced9Brian /** Program to emulate fixed-function T&L (see above) */ 2072a90046f1097ad95de2aa95ca65741dff5cddced9Brian struct gl_vertex_program *_TnlProgram; 2073a90046f1097ad95de2aa95ca65741dff5cddced9Brian 207432ef6e75839d6be283e034436e5dd34eabb67958Keith Whitwell /** Cache of fixed-function programs */ 207532ef6e75839d6be283e034436e5dd34eabb67958Keith Whitwell struct gl_program_cache *Cache; 207632ef6e75839d6be283e034436e5dd34eabb67958Keith Whitwell 20776d4d51d647c27288aa625560bc080231099c0b01Brian Paul GLboolean _Overriden; 207886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul}; 207986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 208086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 208123ffc3a85d6172f8a98d17d7f23610bab808d84eBrian Paul/** 2082da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * Context state for geometry programs. 2083da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin */ 2084da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusinstruct gl_geometry_program_state 2085da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin{ 2086da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLboolean Enabled; /**< GL_ARB_GEOMETRY_SHADER4 */ 2087da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLboolean _Enabled; /**< Enabled and valid program? */ 2088da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_geometry_program *Current; /**< user-bound geometry program */ 2089da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 2090da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin /** Currently enabled and valid program (including internal programs 2091da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * and compiled shader programs). 2092da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin */ 2093da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_geometry_program *_Current; 2094da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 2095da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 2096da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 2097da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin /** Cache of fixed-function programs */ 2098da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_program_cache *Cache; 2099da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin}; 2100da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 2101da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/** 210281968ec49d9e06be0e095fa0084aa61b68b23d75Brian Paul * Context state for fragment programs. 2103610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul */ 21044dafbc3dc75be565704f437016f70a63c48d1539Brian Paulstruct gl_fragment_program_state 2105610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul{ 210639c4daa6bc15a83a97c3c0b456bf1795ef9e6099Brian Paul GLboolean Enabled; /**< User-set fragment program enable flag */ 210720555835b68c58b52d7954a0b237a9a331013e68Brian Paul GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 21085e80c62f3178a65bebca942aa0b1e5d16c34b2a9Brian struct gl_fragment_program *Current; /**< User-bound fragment program */ 2109a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2110bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** Currently enabled and valid fragment program (including internal 2111bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul * programs, user-defined fragment programs and GLSL fragment shaders). 211220555835b68c58b52d7954a0b237a9a331013e68Brian Paul * This is the program we must use when rendering. 21135e80c62f3178a65bebca942aa0b1e5d16c34b2a9Brian */ 2114a90046f1097ad95de2aa95ca65741dff5cddced9Brian struct gl_fragment_program *_Current; 2115a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2116b7aeac0de1c9c533f78c5d6acf358bdc206161abBrian GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 211708ff059f203f05a0cc417a46fe37f83929963db5Brian Paul 2118a90046f1097ad95de2aa95ca65741dff5cddced9Brian /** Should fixed-function texturing be implemented with a fragment prog? */ 2119a90046f1097ad95de2aa95ca65741dff5cddced9Brian GLboolean _MaintainTexEnvProgram; 2120a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2121a90046f1097ad95de2aa95ca65741dff5cddced9Brian /** Program to emulate fixed-function texture env/combine (see above) */ 2122a90046f1097ad95de2aa95ca65741dff5cddced9Brian struct gl_fragment_program *_TexEnvProgram; 2123a90046f1097ad95de2aa95ca65741dff5cddced9Brian 212432ef6e75839d6be283e034436e5dd34eabb67958Keith Whitwell /** Cache of fixed-function programs */ 212532ef6e75839d6be283e034436e5dd34eabb67958Keith Whitwell struct gl_program_cache *Cache; 2126610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul}; 2127610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul 212823ffc3a85d6172f8a98d17d7f23610bab808d84eBrian Paul 212923ffc3a85d6172f8a98d17d7f23610bab808d84eBrian Paul/** 213063d683091fe3a9600b65ae7ef3b554168b805406Brian Paul * ATI_fragment_shader runtime state 213163d683091fe3a9600b65ae7ef3b554168b805406Brian Paul */ 213263d683091fe3a9600b65ae7ef3b554168b805406Brian Paul#define ATI_FS_INPUT_PRIMARY 0 213363d683091fe3a9600b65ae7ef3b554168b805406Brian Paul#define ATI_FS_INPUT_SECONDARY 1 213463d683091fe3a9600b65ae7ef3b554168b805406Brian Paul 213563d683091fe3a9600b65ae7ef3b554168b805406Brian Paulstruct atifs_instruction; 213663d683091fe3a9600b65ae7ef3b554168b805406Brian Paulstruct atifs_setupinst; 213763d683091fe3a9600b65ae7ef3b554168b805406Brian Paul 213863d683091fe3a9600b65ae7ef3b554168b805406Brian Paul/** 213963d683091fe3a9600b65ae7ef3b554168b805406Brian Paul * ATI fragment shader 214063d683091fe3a9600b65ae7ef3b554168b805406Brian Paul */ 214163d683091fe3a9600b65ae7ef3b554168b805406Brian Paulstruct ati_fragment_shader 214263d683091fe3a9600b65ae7ef3b554168b805406Brian Paul{ 214363d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLuint Id; 214463d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLint RefCount; 214563d683091fe3a9600b65ae7ef3b554168b805406Brian Paul struct atifs_instruction *Instructions[2]; 214663d683091fe3a9600b65ae7ef3b554168b805406Brian Paul struct atifs_setupinst *SetupInst[2]; 214763d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLfloat Constants[8][4]; 2148a335d334d45701a42c283257fa44f2f7148e186dBrian Paul GLbitfield LocalConstDef; /**< Indicates which constants have been set */ 214963d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLubyte numArithInstr[2]; 215063d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLubyte regsAssigned[2]; 2151a335d334d45701a42c283257fa44f2f7148e186dBrian Paul GLubyte NumPasses; /**< 1 or 2 */ 215263d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLubyte cur_pass; 215363d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLubyte last_optype; 215463d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLboolean interpinp1; 215563d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLboolean isValid; 215663d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLuint swizzlerq; 215763d683091fe3a9600b65ae7ef3b554168b805406Brian Paul}; 215863d683091fe3a9600b65ae7ef3b554168b805406Brian Paul 215963d683091fe3a9600b65ae7ef3b554168b805406Brian Paul/** 216063d683091fe3a9600b65ae7ef3b554168b805406Brian Paul * Context state for GL_ATI_fragment_shader 21617f752fed993e5e9423abac200dd59141edbada56Dave Airlie */ 21627f752fed993e5e9423abac200dd59141edbada56Dave Airliestruct gl_ati_fragment_shader_state 21637f752fed993e5e9423abac200dd59141edbada56Dave Airlie{ 21643deaa01c2bd576ae81fc6d3ea67c583cb3c22159Brian Paul GLboolean Enabled; 2165a335d334d45701a42c283257fa44f2f7148e186dBrian Paul GLboolean _Enabled; /**< enabled and valid shader? */ 21663deaa01c2bd576ae81fc6d3ea67c583cb3c22159Brian Paul GLboolean Compiling; 216763d683091fe3a9600b65ae7ef3b554168b805406Brian Paul GLfloat GlobalConstants[8][4]; 21683deaa01c2bd576ae81fc6d3ea67c583cb3c22159Brian Paul struct ati_fragment_shader *Current; 21697f752fed993e5e9423abac200dd59141edbada56Dave Airlie}; 217086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 217123ffc3a85d6172f8a98d17d7f23610bab808d84eBrian Paul 2172fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul/** Set by #pragma directives */ 2173fae9604727c048834a7d5a90f8a652c86cff057aBrian Paulstruct gl_sl_pragmas 2174fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul{ 217565fc2ca82a38bc00ae4223124932af6771765041Brian Paul GLboolean IgnoreOptimize; /**< ignore #pragma optimize(on/off) ? */ 217665fc2ca82a38bc00ae4223124932af6771765041Brian Paul GLboolean IgnoreDebug; /**< ignore #pragma debug(on/off) ? */ 2177fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul GLboolean Optimize; /**< defaults on */ 2178fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul GLboolean Debug; /**< defaults off */ 2179fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul}; 2180fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul 2181a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2182a90046f1097ad95de2aa95ca65741dff5cddced9Brian/** 2183ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul * A GLSL vertex or fragment shader object. 2184a90046f1097ad95de2aa95ca65741dff5cddced9Brian */ 2185a90046f1097ad95de2aa95ca65741dff5cddced9Brianstruct gl_shader 2186a90046f1097ad95de2aa95ca65741dff5cddced9Brian{ 2187da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLenum Type; /**< GL_FRAGMENT_SHADER || GL_VERTEX_SHADER || GL_GEOMETRY_SHADER_ARB (first field!) */ 2188a90046f1097ad95de2aa95ca65741dff5cddced9Brian GLuint Name; /**< AKA the handle */ 21899e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian GLint RefCount; /**< Reference count */ 21909e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian GLboolean DeletePending; 2191a90046f1097ad95de2aa95ca65741dff5cddced9Brian GLboolean CompileStatus; 2192fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul const GLchar *Source; /**< Source code string */ 2193b501263bf5965aa89c408cb8f0db3688847a8384Brian Paul GLuint SourceChecksum; /**< for debug/logging purposes */ 21943d500f00d2a09becccd62abc0472090c4faa53d6Brian Paul struct gl_program *Program; /**< Post-compile assembly code */ 21950bf5dbe002a64e198f55724cc1542602c012490fBrian GLchar *InfoLog; 2196fae9604727c048834a7d5a90f8a652c86cff057aBrian Paul struct gl_sl_pragmas Pragmas; 219716b68b1952d0da14b9ce8306efa64988ce46b4b7Eric Anholt 219825f51d3b9b8c36c41cd23d2797b6a06f6e27ff86Ian Romanick unsigned Version; /**< GLSL version used for linking */ 219925f51d3b9b8c36c41cd23d2797b6a06f6e27ff86Ian Romanick 22006c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick /** 22016c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick * \name Sampler tracking 22026c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick * 22036c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick * \note Each of these fields is only set post-linking. 22046c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick */ 22056c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick /*@{*/ 22066c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick unsigned num_samplers; /**< Number of samplers used by this shader. */ 22076c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick GLbitfield active_samplers; /**< Bitfield of which samplers are used */ 22086c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */ 22096c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick /*@}*/ 22106c0df75803e1944f82a1468dcca47d23de82ea6bIan Romanick 22116ac895a664b25eb6252f33d5cfb0e9dd33190490Ian Romanick /** 22126ac895a664b25eb6252f33d5cfb0e9dd33190490Ian Romanick * Number of uniform components used by this shader. 22136ac895a664b25eb6252f33d5cfb0e9dd33190490Ian Romanick * 22146ac895a664b25eb6252f33d5cfb0e9dd33190490Ian Romanick * This field is only set post-linking. 22156ac895a664b25eb6252f33d5cfb0e9dd33190490Ian Romanick */ 22166ac895a664b25eb6252f33d5cfb0e9dd33190490Ian Romanick unsigned num_uniform_components; 22176ac895a664b25eb6252f33d5cfb0e9dd33190490Ian Romanick 2218f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt /** 2219f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * This shader's uniform block information. 2220f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * 2221f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * The offsets of the variables are assigned only for shaders in a program's 2222f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * _LinkedShaders[]. 2223f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt */ 2224f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt struct gl_uniform_block *UniformBlocks; 2225f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt unsigned NumUniformBlocks; 2226f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt 222716b68b1952d0da14b9ce8306efa64988ce46b4b7Eric Anholt struct exec_list *ir; 222816b68b1952d0da14b9ce8306efa64988ce46b4b7Eric Anholt struct glsl_symbol_table *symbols; 2229d5be2acae379783c4aa31243e0a88a9e67e6ca7eIan Romanick 2230d5be2acae379783c4aa31243e0a88a9e67e6ca7eIan Romanick /** Shaders containing built-in functions that are used for linking. */ 2231d5be2acae379783c4aa31243e0a88a9e67e6ca7eIan Romanick struct gl_shader *builtins_to_link[16]; 2232d5be2acae379783c4aa31243e0a88a9e67e6ca7eIan Romanick unsigned num_builtins_to_link; 2233a90046f1097ad95de2aa95ca65741dff5cddced9Brian}; 2234a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2235a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2236a90046f1097ad95de2aa95ca65741dff5cddced9Brian/** 223784870e215667c999202be31057df6e31a0389bb7Brian Paul * Shader stages. Note that these will become 5 with tessellation. 223884870e215667c999202be31057df6e31a0389bb7Brian Paul * These MUST have the same values as gallium's PIPE_SHADER_* 223984870e215667c999202be31057df6e31a0389bb7Brian Paul */ 224084870e215667c999202be31057df6e31a0389bb7Brian Paultypedef enum 224184870e215667c999202be31057df6e31a0389bb7Brian Paul{ 224284870e215667c999202be31057df6e31a0389bb7Brian Paul MESA_SHADER_VERTEX = 0, 224384870e215667c999202be31057df6e31a0389bb7Brian Paul MESA_SHADER_FRAGMENT = 1, 224484870e215667c999202be31057df6e31a0389bb7Brian Paul MESA_SHADER_GEOMETRY = 2, 224584870e215667c999202be31057df6e31a0389bb7Brian Paul MESA_SHADER_TYPES = 3 224684870e215667c999202be31057df6e31a0389bb7Brian Paul} gl_shader_type; 224784870e215667c999202be31057df6e31a0389bb7Brian Paul 2248b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholtstruct gl_uniform_buffer_variable 2249b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt{ 2250b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt char *Name; 2251b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt const struct glsl_type *Type; 2252b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt unsigned int Buffer; 2253b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt unsigned int Offset; 2254b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt GLboolean RowMajor; 2255b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt}; 2256b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt 2257b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholtstruct gl_uniform_block 2258b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt{ 2259b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt /** Declared name of the uniform block */ 2260b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt char *Name; 2261b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt 2262b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt /** Array of supplemental information about UBO ir_variables. */ 2263b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt struct gl_uniform_buffer_variable *Uniforms; 2264b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt GLuint NumUniforms; 2265f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt 2266f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt /** 2267f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * Index (GL_UNIFORM_BLOCK_BINDING) into ctx->UniformBufferBindings[] to use 2268f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * with glBindBufferBase to bind a buffer object to this uniform block. When 2269f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * updated in the program, _NEW_BUFFER_OBJECT will be set. 2270f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt */ 2271f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt GLuint Binding; 2272f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt 2273f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt /** 2274f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * Minimum size of a buffer object to back this uniform buffer 2275f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * (GL_UNIFORM_BLOCK_DATA_SIZE). 2276f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt */ 2277f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt GLuint UniformBufferSize; 2278b3c093c79c2ec49c36af37aa290d5ae452149f6eEric Anholt}; 227984870e215667c999202be31057df6e31a0389bb7Brian Paul 228084870e215667c999202be31057df6e31a0389bb7Brian Paul/** 2281ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul * A GLSL program object. 2282ade508312c701ce89d3c2cd717994dbbabb4f207Brian Paul * Basically a linked collection of vertex and fragment shaders. 2283a90046f1097ad95de2aa95ca65741dff5cddced9Brian */ 228465a18442e5d846940714bb662f5b1bb47ab60c29Brianstruct gl_shader_program 2285a90046f1097ad95de2aa95ca65741dff5cddced9Brian{ 228665a18442e5d846940714bb662f5b1bb47ab60c29Brian GLenum Type; /**< Always GL_SHADER_PROGRAM (internal token) */ 2287a90046f1097ad95de2aa95ca65741dff5cddced9Brian GLuint Name; /**< aka handle or ID */ 22889e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian GLint RefCount; /**< Reference count */ 22899e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian GLboolean DeletePending; 22909e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian 229157f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt /** 229257f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt * Flags that the linker should not reject the program if it lacks 229357f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt * a vertex or fragment shader. GLES2 doesn't allow separate 229457f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt * shader objects, and would reject them. However, we internally 229557f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt * build separate shader objects for fixed function programs, which 229657f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt * we use for drivers/common/meta.c and for handling 229757f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt * _mesa_update_state with no program bound (for example in 229857f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt * glClear()). 229957f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt */ 230057f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt GLboolean InternalSeparateShader; 230157f7978b1de40be6eb138d391c8d9f95b68cbf62Eric Anholt 23029e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian GLuint NumShaders; /**< number of attached shaders */ 23039e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian struct gl_shader **Shaders; /**< List of attached the shaders */ 23049e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian 2305015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick /** 2306015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick * User-defined attribute bindings 2307015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick * 2308015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick * These are set via \c glBindAttribLocation and are used to direct the 2309015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick * GLSL linker. These are \b not the values used in the compiled shader, 2310015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick * and they are \b not the values returned by \c glGetAttribLocation. 2311015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick */ 2312015d4f61ef9116c9e844299ab9f2b15c653c0450Ian Romanick struct string_to_uint_map *AttributeBindings; 231327341a97a17b23fdf57d33f78b475a474db71e4aBrian Paul 2314b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick /** 2315b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick * User-defined fragment data bindings 2316b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick * 2317b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick * These are set via \c glBindFragDataLocation and are used to direct the 2318b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick * GLSL linker. These are \b not the values used in the compiled shader, 2319b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick * and they are \b not the values returned by \c glGetFragDataLocation. 2320b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick */ 2321b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick struct string_to_uint_map *FragDataBindings; 2322f8cf79936b42405a8366613b80e3bde21aadaa02Dave Airlie struct string_to_uint_map *FragDataIndexBindings; 2323b12b5d9ab5c0153c93ca5ad9cd93cb36e41be4ebIan Romanick 23249d36c96d6ec9f2c05c8e0b9ef18c5462cddee8c1Eric Anholt /** 23259d36c96d6ec9f2c05c8e0b9ef18c5462cddee8c1Eric Anholt * Transform feedback varyings last specified by 23269d36c96d6ec9f2c05c8e0b9ef18c5462cddee8c1Eric Anholt * glTransformFeedbackVaryings(). 23279d36c96d6ec9f2c05c8e0b9ef18c5462cddee8c1Eric Anholt * 23289d36c96d6ec9f2c05c8e0b9ef18c5462cddee8c1Eric Anholt * For the current set of transform feeedback varyings used for transform 23299d36c96d6ec9f2c05c8e0b9ef18c5462cddee8c1Eric Anholt * feedback output, see LinkedTransformFeedback. 23309d36c96d6ec9f2c05c8e0b9ef18c5462cddee8c1Eric Anholt */ 2331066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul struct { 2332066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul GLenum BufferMode; 2333066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul GLuint NumVarying; 2334066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul GLchar **VaryingNames; /**< Array [NumVarying] of char * */ 2335066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul } TransformFeedback; 2336066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul 2337871ddb919b424293894a23a8f83200fed572d6a9Paul Berry /** Post-link transform feedback info. */ 2338871ddb919b424293894a23a8f83200fed572d6a9Paul Berry struct gl_transform_feedback_info LinkedTransformFeedback; 2339871ddb919b424293894a23a8f83200fed572d6a9Paul Berry 2340ec174a424489664626796126f937fbce3e7d8cd8Marek Olšák /** Post-link gl_FragDepth layout for ARB_conservative_depth. */ 2341ec174a424489664626796126f937fbce3e7d8cd8Marek Olšák enum gl_frag_depth_layout FragDepthLayout; 2342ec174a424489664626796126f937fbce3e7d8cd8Marek Olšák 2343ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul /** Geometry shader state - copied into gl_geometry_program at link time */ 2344ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul struct { 2345ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul GLint VerticesOut; 2346ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 2347ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 2348ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 2349ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul } Geom; 2350ae8164a67b05cdc6d9b520b9704330537f3a6024Brian Paul 23511ad54ae0b1713e399c5db43d0eba87861075b4c7Paul Berry /** Vertex shader state - copied into gl_vertex_program at link time */ 23521ad54ae0b1713e399c5db43d0eba87861075b4c7Paul Berry struct { 23531ad54ae0b1713e399c5db43d0eba87861075b4c7Paul Berry GLboolean UsesClipDistance; /**< True if gl_ClipDistance is written to. */ 2354642e5b413e0890b2070ba78fde42db381eaf02e5Paul Berry GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or 2355642e5b413e0890b2070ba78fde42db381eaf02e5Paul Berry 0 if not present. */ 23561ad54ae0b1713e399c5db43d0eba87861075b4c7Paul Berry } Vert; 23571ad54ae0b1713e399c5db43d0eba87861075b4c7Paul Berry 23589e4bae9ccac5a76a2361c5c3cbe377a3c6b6a95bBrian /* post-link info: */ 23599a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick unsigned NumUserUniformStorage; 23609a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick struct gl_uniform_storage *UniformStorage; 23619a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick 2362f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt struct gl_uniform_block *UniformBlocks; 2363f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt unsigned NumUniformBlocks; 2364f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt 2365f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt /** 2366f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * Indices into the _LinkedShaders's UniformBlocks[] array for each stage 2367f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * they're used in, or -1. 2368f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * 2369f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * This is used to maintain the Binding values of the stage's UniformBlocks[] 2370f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt * and to answer the GL_UNIFORM_BLOCK_REFERENCED_BY_*_SHADER queries. 2371f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt */ 2372f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt int *UniformBlockStageIndex[MESA_SHADER_TYPES]; 2373f609cf782ab5e90ddf045dc4b0da8cebf99be0d1Eric Anholt 23749a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick /** 23759a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * Map of active uniform names to locations 23769a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * 23779a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * Maps any active uniform that is not an array element to a location. 23789a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * Each active uniform, including individual structure members will appear 23799a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * in this map. This roughly corresponds to the set of names that would be 23809a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * enumerated by \c glGetActiveUniform. 23819a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick */ 23829a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick struct string_to_uint_map *UniformHash; 23839a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick 23849a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick /** 23859a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * Map from sampler unit to texture unit (set by glUniform1i()) 23869a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * 23879a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * A sampler unit is associated with each sampler uniform by the linker. 23889a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * The sampler unit associated with each uniform is stored in the 23899a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick * \c gl_uniform_storage::sampler field. 23909a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick */ 23919a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick GLubyte SamplerUnits[MAX_SAMPLERS]; 23929a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */ 23939a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick gl_texture_index SamplerTargets[MAX_SAMPLERS]; 23949a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick 23950bf5dbe002a64e198f55724cc1542602c012490fBrian GLboolean LinkStatus; /**< GL_LINK_STATUS */ 23960bf5dbe002a64e198f55724cc1542602c012490fBrian GLboolean Validated; 239771b1610941f9bfefa01d827fd19cc2368e6cdae3Brian Paul GLboolean _Used; /**< Ever used for drawing? */ 23980bf5dbe002a64e198f55724cc1542602c012490fBrian GLchar *InfoLog; 2399849e18153cd91d812f694b806a84008498860bc3Eric Anholt 240025f51d3b9b8c36c41cd23d2797b6a06f6e27ff86Ian Romanick unsigned Version; /**< GLSL version used for linking */ 240125f51d3b9b8c36c41cd23d2797b6a06f6e27ff86Ian Romanick 2402ef5f1948316664055c1444d12076c7d86589a8b9Ian Romanick /** 2403ef5f1948316664055c1444d12076c7d86589a8b9Ian Romanick * Per-stage shaders resulting from the first stage of linking. 24043322fbaf3b5e305ce00c1d08c26965bb98e0cef0Ian Romanick * 24053322fbaf3b5e305ce00c1d08c26965bb98e0cef0Ian Romanick * Set of linked shaders for this program. The array is accessed using the 24063322fbaf3b5e305ce00c1d08c26965bb98e0cef0Ian Romanick * \c MESA_SHADER_* defines. Entries for non-existent stages will be 24073322fbaf3b5e305ce00c1d08c26965bb98e0cef0Ian Romanick * \c NULL. 2408ef5f1948316664055c1444d12076c7d86589a8b9Ian Romanick */ 24093322fbaf3b5e305ce00c1d08c26965bb98e0cef0Ian Romanick struct gl_shader *_LinkedShaders[MESA_SHADER_TYPES]; 2410a90046f1097ad95de2aa95ca65741dff5cddced9Brian}; 2411a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2412a90046f1097ad95de2aa95ca65741dff5cddced9Brian 2413e01a03d2220199a4541f2cb8b42035237a571aa4Brian Paul#define GLSL_DUMP 0x1 /**< Dump shaders to stdout */ 2414e01a03d2220199a4541f2cb8b42035237a571aa4Brian Paul#define GLSL_LOG 0x2 /**< Write shaders to files */ 2415e01a03d2220199a4541f2cb8b42035237a571aa4Brian Paul#define GLSL_OPT 0x4 /**< Force optimizations (override pragmas) */ 2416e01a03d2220199a4541f2cb8b42035237a571aa4Brian Paul#define GLSL_NO_OPT 0x8 /**< Force no optimizations (override pragmas) */ 2417e01a03d2220199a4541f2cb8b42035237a571aa4Brian Paul#define GLSL_UNIFORMS 0x10 /**< Print glUniform calls */ 2418cb0de06301cd086a02ca709917819119dc1a8fd9Brian Paul#define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */ 2419cb0de06301cd086a02ca709917819119dc1a8fd9Brian Paul#define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */ 24202ee7fd8d584abf051c552f455aeb588e2936b0eaBrian Paul#define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */ 24210161691f3518db310411c5f02c05aa639050f129Brian Paul#define GLSL_REPORT_ERRORS 0x100 /**< Print compilation errors */ 2422e01a03d2220199a4541f2cb8b42035237a571aa4Brian Paul 2423e01a03d2220199a4541f2cb8b42035237a571aa4Brian Paul 242463d683091fe3a9600b65ae7ef3b554168b805406Brian Paul/** 24250bf5dbe002a64e198f55724cc1542602c012490fBrian * Context state for GLSL vertex/fragment shaders. 242663d683091fe3a9600b65ae7ef3b554168b805406Brian Paul */ 24270bf5dbe002a64e198f55724cc1542602c012490fBrianstruct gl_shader_state 2428848ff851575241454935c205eace88e799966563Brian Paul{ 242975c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick /** 243084eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick * Programs used for rendering 243184eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick * 243284eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick * There is a separate program set for each shader stage. If 243384eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick * GL_EXT_separate_shader_objects is not supported, each of these must point 243484eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick * to \c NULL or to the same program. 243575c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick */ 243684eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick struct gl_shader_program *CurrentVertexProgram; 243784eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick struct gl_shader_program *CurrentGeometryProgram; 243884eba3ef71dfa822e5ff0463032cdd2e3515b888Ian Romanick struct gl_shader_program *CurrentFragmentProgram; 243975c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick 2440b527dd65c830a2b008816cf390d5be906e29bb23Ian Romanick struct gl_shader_program *_CurrentFragmentProgram; 2441b527dd65c830a2b008816cf390d5be906e29bb23Ian Romanick 244275c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick /** 244375c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick * Program used by glUniform calls. 244475c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick * 244575c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick * Explicitly set by \c glUseProgram and \c glActiveProgramEXT. 244675c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick */ 244775c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick struct gl_shader_program *ActiveProgram; 244875c6f472880706dcbb9d1e20727fa8f71db8b11cIan Romanick 24496d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri GLbitfield Flags; /**< Mask of GLSL_x flags */ 24506d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri}; 24516d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri 245284870e215667c999202be31057df6e31a0389bb7Brian Paul 24536d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri/** 24546d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri * Compiler options for a single GLSL shaders type 24556d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri */ 24566d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieristruct gl_shader_compiler_options 24576d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri{ 245863556fa9949f543a8134b6b5ff3d216acb71dd9fBrian /** Driver-selectable options: */ 245963556fa9949f543a8134b6b5ff3d216acb71dd9fBrian GLboolean EmitCondCodes; /**< Use condition codes? */ 2460726a04a2cd1bf159a6c40584b4b2b9bc5948a82eEric Anholt GLboolean EmitNVTempInitialization; /**< 0-fill NV temp registers */ 2461e591c4625cae63660c5000fbab366e40fe154ab0Luca Barbieri GLboolean EmitNoLoops; 2462e591c4625cae63660c5000fbab366e40fe154ab0Luca Barbieri GLboolean EmitNoFunctions; 2463e591c4625cae63660c5000fbab366e40fe154ab0Luca Barbieri GLboolean EmitNoCont; /**< Emit CONT opcode? */ 2464e591c4625cae63660c5000fbab366e40fe154ab0Luca Barbieri GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ 24652b70dbfe091af5ae7c788e16275e1af2cb1c284cIan Romanick GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */ 2466c4285be9a5bd1adaa89050989374b95a9a601cdcIan Romanick GLboolean EmitNoPow; /**< Emit POW opcodes? */ 2467c06e32596735074536b0e613cbddb1c5fd7b367aPaul Berry GLboolean LowerClipDistance; /**< Lower gl_ClipDistance from float[8] to vec4[2]? */ 2468e591c4625cae63660c5000fbab366e40fe154ab0Luca Barbieri 2469a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick /** 2470a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick * \name Forms of indirect addressing the driver cannot do. 2471a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick */ 2472a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick /*@{*/ 2473a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick GLboolean EmitNoIndirectInput; /**< No indirect addressing of inputs */ 2474a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick GLboolean EmitNoIndirectOutput; /**< No indirect addressing of outputs */ 2475a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */ 2476a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ 2477a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick /*@}*/ 2478a6ecd1c3724a78b76ab9e81ea39632f1279021f8Ian Romanick 2479488fe51cf823ccd137c667f1e92dd86f8323b723Bryan Cain GLuint MaxIfDepth; /**< Maximum nested IF blocks */ 2480e591c4625cae63660c5000fbab366e40fe154ab0Luca Barbieri GLuint MaxUnrollIterations; 24816d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri 248265fc2ca82a38bc00ae4223124932af6771765041Brian Paul struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */ 2483848ff851575241454935c205eace88e799966563Brian Paul}; 2484b17a722ca3989e8563ee04cb2939f4835f8a171eBrian Paul 248584870e215667c999202be31057df6e31a0389bb7Brian Paul 24866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 248784870e215667c999202be31057df6e31a0389bb7Brian Paul * Occlusion/timer query object. 2488066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul */ 248984870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_query_object 2490066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul{ 249184870e215667c999202be31057df6e31a0389bb7Brian Paul GLenum Target; /**< The query target, when active */ 249284870e215667c999202be31057df6e31a0389bb7Brian Paul GLuint Id; /**< hash table ID/name */ 249384870e215667c999202be31057df6e31a0389bb7Brian Paul GLuint64EXT Result; /**< the counter */ 249484870e215667c999202be31057df6e31a0389bb7Brian Paul GLboolean Active; /**< inside Begin/EndQuery */ 249584870e215667c999202be31057df6e31a0389bb7Brian Paul GLboolean Ready; /**< result is ready? */ 2496fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul}; 2497fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul 2498fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul 2499fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul/** 250084870e215667c999202be31057df6e31a0389bb7Brian Paul * Context state for query objects. 2501fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul */ 250284870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_query_state 2503fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul{ 250484870e215667c999202be31057df6e31a0389bb7Brian Paul struct _mesa_HashTable *QueryObjects; 250584870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */ 250684870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */ 2507fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul 250884870e215667c999202be31057df6e31a0389bb7Brian Paul /** GL_NV_conditional_render */ 250984870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_query_object *CondRenderQuery; 2510066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul 251184870e215667c999202be31057df6e31a0389bb7Brian Paul /** GL_EXT_transform_feedback */ 251284870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_query_object *PrimitivesGenerated; 251384870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_query_object *PrimitivesWritten; 2514fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul 251584870e215667c999202be31057df6e31a0389bb7Brian Paul /** GL_ARB_timer_query */ 251684870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_query_object *TimeElapsed; 2517fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul 251884870e215667c999202be31057df6e31a0389bb7Brian Paul GLenum CondRenderMode; 2519066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul}; 2520066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul 2521066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul 252284870e215667c999202be31057df6e31a0389bb7Brian Paul/** Sync object state */ 252384870e215667c999202be31057df6e31a0389bb7Brian Paulstruct gl_sync_object 252484870e215667c999202be31057df6e31a0389bb7Brian Paul{ 252584870e215667c999202be31057df6e31a0389bb7Brian Paul struct simple_node link; 252684870e215667c999202be31057df6e31a0389bb7Brian Paul GLenum Type; /**< GL_SYNC_FENCE */ 252784870e215667c999202be31057df6e31a0389bb7Brian Paul GLuint Name; /**< Fence name */ 252884870e215667c999202be31057df6e31a0389bb7Brian Paul GLint RefCount; /**< Reference count */ 252984870e215667c999202be31057df6e31a0389bb7Brian Paul GLboolean DeletePending; /**< Object was deleted while there were still 253084870e215667c999202be31057df6e31a0389bb7Brian Paul * live references (e.g., sync not yet finished) 253184870e215667c999202be31057df6e31a0389bb7Brian Paul */ 253284870e215667c999202be31057df6e31a0389bb7Brian Paul GLenum SyncCondition; 253384870e215667c999202be31057df6e31a0389bb7Brian Paul GLbitfield Flags; /**< Flags passed to glFenceSync */ 253484870e215667c999202be31057df6e31a0389bb7Brian Paul GLuint StatusFlag:1; /**< Has the sync object been signaled? */ 253584870e215667c999202be31057df6e31a0389bb7Brian Paul}; 253684870e215667c999202be31057df6e31a0389bb7Brian Paul 2537066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul 2538066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul/** 25395e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * State which can be shared by multiple contexts: 25405e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 2541f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paulstruct gl_shared_state 2542f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paul{ 25436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell _glthread_Mutex Mutex; /**< for thread safety */ 25446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLint RefCount; /**< Reference count */ 25456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ 25466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ 25475e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 25484d24b639d160fe485a3e8f7395e7654538be29e0Brian Paul /** Default texture objects (shared by all texture units) */ 25494d24b639d160fe485a3e8f7395e7654538be29e0Brian Paul struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS]; 25505e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 25513f25219c7bf0f090502489928f0f018e62c4f6cfBrian Paul /** Fallback texture used when a bound texture is incomplete */ 2552c04db7f7fad883891084d7f2e9a0040a17c48fe8Brian Paul struct gl_texture_object *FallbackTex[NUM_TEXTURE_TARGETS]; 25533f25219c7bf0f090502489928f0f018e62c4f6cfBrian Paul 25546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 25555ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell * \name Thread safety and statechange notification for texture 25565ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell * objects. 25575ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell * 25585ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell * \todo Improve the granularity of locking. 25595ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell */ 25605ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell /*@{*/ 256103ec41ddc51e539c989a546f33d22daa2af69095Brian _glthread_Mutex TexMutex; /**< texobj thread safety */ 256203ec41ddc51e539c989a546f33d22daa2af69095Brian GLuint TextureStateStamp; /**< state notification for shared tex */ 25635ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell /*@}*/ 25645ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell 25654f6b704f9796775d8d9937c3cf75a2901b99b896Brian Paul /** Default buffer object for vertex arrays that aren't in VBOs */ 25664f6b704f9796775d8d9937c3cf75a2901b99b896Brian Paul struct gl_buffer_object *NullBufferObj; 25675ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell 25685ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell /** 2569da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * \name Vertex/geometry/fragment programs 25706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 25716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 25723c2f8b22b9b87ccc06e33ecc088703c68d8230d8Brian Paul struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */ 2573df43fb661b2030d9b833a42dd47b8d7bf58d73aaBrian struct gl_vertex_program *DefaultVertexProgram; 2574df43fb661b2030d9b833a42dd47b8d7bf58d73aaBrian struct gl_fragment_program *DefaultFragmentProgram; 2575da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_geometry_program *DefaultGeometryProgram; 257663d683091fe3a9600b65ae7ef3b554168b805406Brian Paul /*@}*/ 257763d683091fe3a9600b65ae7ef3b554168b805406Brian Paul 2578f90b5936d07c4c8f280318ab5cf5894ecb67aef6Chia-I Wu /* GL_ATI_fragment_shader */ 257963d683091fe3a9600b65ae7ef3b554168b805406Brian Paul struct _mesa_HashTable *ATIShaders; 258063d683091fe3a9600b65ae7ef3b554168b805406Brian Paul struct ati_fragment_shader *DefaultFragmentShader; 258130f51ae067379c2b3573c06b707d25a9704df7beBrian Paul 25820207b47aafebc06cf83fbdb8c9b01f63374fac66Ian Romanick struct _mesa_HashTable *BufferObjects; 2583848ff851575241454935c205eace88e799966563Brian Paul 2584aef47c4dc87075fd63002b50c4b32b1049e5e4d1Xiang, Haihao /** Table of both gl_shader and gl_shader_program objects */ 2585a90046f1097ad95de2aa95ca65741dff5cddced9Brian struct _mesa_HashTable *ShaderObjects; 25860207b47aafebc06cf83fbdb8c9b01f63374fac66Ian Romanick 2587f90b5936d07c4c8f280318ab5cf5894ecb67aef6Chia-I Wu /* GL_EXT_framebuffer_object */ 2588ddc82eefca591f0ee93d3a77e1268571629a6d5cBrian Paul struct _mesa_HashTable *RenderBuffers; 2589ddc82eefca591f0ee93d3a77e1268571629a6d5cBrian Paul struct _mesa_HashTable *FrameBuffers; 2590ddc82eefca591f0ee93d3a77e1268571629a6d5cBrian Paul 2591f90b5936d07c4c8f280318ab5cf5894ecb67aef6Chia-I Wu /* GL_ARB_sync */ 259216b393d05990b6e917e144f9de87d0103b4c3e6dIan Romanick struct simple_node SyncObjects; 259316b393d05990b6e917e144f9de87d0103b4c3e6dIan Romanick 2594ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul /** GL_ARB_sampler_objects */ 2595ecfaab88b2577bd0395bc05d75a036126806a9c4Brian Paul struct _mesa_HashTable *SamplerObjects; 25965e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 25975e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 25985e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 2599e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 26006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 26011da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul * Renderbuffers represent drawing surfaces such as color, depth and/or 26021da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul * stencil. A framebuffer object has a set of renderbuffers. 26031da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul * Drivers will typically derive subclasses of this type. 2604e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul */ 2605e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulstruct gl_renderbuffer 2606e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul{ 26071da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul _glthread_Mutex Mutex; /**< for thread safety */ 2608ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul GLuint ClassID; /**< Useful for drivers */ 2609e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLuint Name; 2610e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLint RefCount; 2611e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLuint Width, Height; 26121da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 2613348ea34d0310cc862ad3c078d8703c6c1f0b602fEric Anholt GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ 2614348ea34d0310cc862ad3c078d8703c6c1f0b602fEric Anholt GLubyte NumSamples; 2615ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul GLenum InternalFormat; /**< The user-specified format */ 2616ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or 2617ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul GL_STENCIL_INDEX. */ 2618fc5ab1b19780ef97c5e7f6257a2d91121503bd53Brian Paul gl_format Format; /**< The actual renderbuffer memory format */ 2619960d49b387ff4b64f802097c5013beee4de3649dBrian Paul 26201da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul /** Delete this renderbuffer */ 26219d4ab9a663d4088ec553edaae0eeafb746d2490dBrian Paul void (*Delete)(struct gl_context *ctx, struct gl_renderbuffer *rb); 2622e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 26231da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul /** Allocate new storage for this renderbuffer */ 26241da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul GLboolean (*AllocStorage)(struct gl_context *ctx, 26251da7d6c919e9a6d756b208caa6685bfa1146b543Brian Paul struct gl_renderbuffer *rb, 2626e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLenum internalFormat, 2627e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLuint width, GLuint height); 2628e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul}; 2629e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2630e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2631e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul/** 2632bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul * A renderbuffer attachment points to either a texture object (and specifies 2633bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer. 2634e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul */ 2635e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulstruct gl_renderbuffer_attachment 2636e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul{ 2637bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick GLenum Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */ 2638e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLboolean Complete; 2639e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2640bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick /** 2641bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the 2642bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick * application supplied renderbuffer object. 2643bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick */ 2644e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul struct gl_renderbuffer *Renderbuffer; 2645e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2646bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick /** 2647bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick * If \c Type is \c GL_TEXTURE, this stores a pointer to the application 2648bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick * supplied texture object. 2649bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick */ 2650e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul struct gl_texture_object *Texture; 2651bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick GLuint TextureLevel; /**< Attached mipmap level. */ 2652bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */ 2653bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D 2654bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick * and 2D array textures */ 2655e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul}; 2656e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2657e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2658e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul/** 2659e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc). 26605e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * In C++ terms, think of this as a base class from which device drivers 26615e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * will make derived classes. 26625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 2663e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulstruct gl_framebuffer 2664f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paul{ 2665bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul _glthread_Mutex Mutex; /**< for thread safety */ 26666dceeb2eb804d708639d68a13a924d65f366458aRobert Ellison /** 26676dceeb2eb804d708639d68a13a924d65f366458aRobert Ellison * If zero, this is a window system framebuffer. If non-zero, this 26686dceeb2eb804d708639d68a13a924d65f366458aRobert Ellison * is a FBO framebuffer; note that for some devices (i.e. those with 266929309b45b011b4c44721b8f7346272fb22a4d4c2Robert Ellison * a natural pixel coordinate system for FBOs that differs from the 267029309b45b011b4c44721b8f7346272fb22a4d4c2Robert Ellison * OpenGL/Mesa coordinate system), this means that the viewport, 267129309b45b011b4c44721b8f7346272fb22a4d4c2Robert Ellison * polygon face orientation, and polygon stipple will have to be inverted. 26726dceeb2eb804d708639d68a13a924d65f366458aRobert Ellison */ 26736dceeb2eb804d708639d68a13a924d65f366458aRobert Ellison GLuint Name; 26746dceeb2eb804d708639d68a13a924d65f366458aRobert Ellison 2675e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLint RefCount; 2676e6a9381f78605072cab52447fce35eaa98c1e75cBrian GLboolean DeletePending; 26775e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 2678bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** 2679bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul * The framebuffer's visual. Immutable if this is a window system buffer. 2680bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul * Computed from attachments if user-made FBO. 2681bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul */ 2682d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg struct gl_config Visual; 26835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 268465a66f5bc37383c00423c21baf8ba9d6771e0259Brian Paul GLboolean Initialized; 268565a66f5bc37383c00423c21baf8ba9d6771e0259Brian Paul 2686e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLuint Width, Height; /**< size of frame buffer in pixels */ 26876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 2688e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul /** \name Drawing bounds (Intersection of buffer size and scissor box) */ 26896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 2690e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLint _Xmin, _Xmax; /**< inclusive */ 2691e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLint _Ymin, _Ymax; /**< exclusive */ 26926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 26936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 2694e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul /** \name Derived Z buffer stuff */ 26956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 2696e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLuint _DepthMax; /**< Max depth buffer value */ 2697e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLfloat _DepthMaxF; /**< Float max depth buffer value */ 2698e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLfloat _MRD; /**< minimum resolvable difference in Z values */ 26996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 27006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 2701bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ 2702bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLenum _Status; 27036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 2704f681ea4741c8136b2c169ff17c9d5b49b1d791baBrian Paul /** Integer color values */ 2705f681ea4741c8136b2c169ff17c9d5b49b1d791baBrian Paul GLboolean _IntegerColor; 2706f681ea4741c8136b2c169ff17c9d5b49b1d791baBrian Paul 2707bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ 2708e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; 2709894844a8d956a0ee5f95836331dc318f49fdb845Brian Paul 2710e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER 2711e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * attribute group and GL_PIXEL attribute group, respectively. 27126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 2713e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS]; 2714e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul GLenum ColorReadBuffer; 2715e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2716601a6b872c33bfe3cb4ea03a5a8ba5ebe92dedafBrian /** Computed from ColorDraw/ReadBuffer above */ 2717ff73c783cc47361ff0dd819c82d067b4b85870ddBrian GLuint _NumColorDrawBuffers; 2718601a6b872c33bfe3cb4ea03a5a8ba5ebe92dedafBrian GLint _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; /**< BUFFER_x or -1 */ 2719601a6b872c33bfe3cb4ea03a5a8ba5ebe92dedafBrian GLint _ColorReadBufferIndex; /* -1 = None */ 2720ff73c783cc47361ff0dd819c82d067b4b85870ddBrian struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; 2721e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul struct gl_renderbuffer *_ColorReadBuffer; 2722e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 2723e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul /** Delete this framebuffer */ 2724e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul void (*Delete)(struct gl_framebuffer *fb); 27255e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 27265e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 27275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 27286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 27293ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul * Precision info for shader datatypes. See glGetShaderPrecisionFormat(). 27303ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul */ 27313ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paulstruct gl_precision 27323ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul{ 27333ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul GLushort RangeMin; /**< min value exponent */ 27343ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul GLushort RangeMax; /**< max value exponent */ 27353ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul GLushort Precision; /**< number of mantissa bits */ 27363ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul}; 27373ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul 27383ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul 27393ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul/** 2740e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul * Limits for vertex, geometry and fragment programs/shaders. 274105051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul */ 274205051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paulstruct gl_program_constants 274305051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul{ 274405051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul /* logical limits */ 274505051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxInstructions; 2746f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxAluInstructions; 2747f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxTexInstructions; 2748f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxTexIndirections; 274905051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxAttribs; 275005051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxTemps; 2751f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxAddressRegs; 27528ad821df0a2d49964141f2ea4ef8179f4edc052fBrian Paul GLuint MaxAddressOffset; /**< [-MaxAddressOffset, MaxAddressOffset-1] */ 275305051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxParameters; 275405051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxLocalParams; 275505051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxEnvParams; 275605051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul /* native/hardware limits */ 275705051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxNativeInstructions; 2758f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxNativeAluInstructions; 2759f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxNativeTexInstructions; 2760f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxNativeTexIndirections; 276105051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxNativeAttribs; 276205051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxNativeTemps; 2763f6ca938bcb7ebf82721590c8e4059ebf4d073a0bBrian Paul GLuint MaxNativeAddressRegs; 276405051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul GLuint MaxNativeParameters; 276590fcf6ccc345c287309d7d17b2ff256cc22fb2b7Brian Paul /* For shaders */ 2766e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */ 27673ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul /* ES 2.0 and GL_ARB_ES2_compatibility */ 27683ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul struct gl_precision LowFloat, MediumFloat, HighFloat; 27693ee60a3558a3546b3c3a0a9732d384afcf02994aBrian Paul struct gl_precision LowInt, MediumInt, HighInt; 27705426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt /* GL_ARB_uniform_buffer_object */ 27715426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt GLuint MaxUniformBlocks; 27725426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt GLuint MaxCombinedUniformComponents; 277305051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul}; 277405051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul 277505051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul 277605051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul/** 27776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Constants which may be overridden by device driver during context creation 2778ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul * but are never changed after that. 27795e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 2780f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paulstruct gl_constants 2781f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paul{ 27824b08f35487fa439fd9ca4d653d3a146c3dc09c1cBrian Paul GLint MaxTextureMbytes; /**< Max memory per image, in MB */ 2783bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLint MaxTextureLevels; /**< Max mipmap levels. */ 2784bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */ 2785bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */ 2786bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLint MaxArrayTextureLayers; /**< Max layers in array textures */ 2787bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */ 2788610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul GLuint MaxTextureCoordUnits; 2789610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul GLuint MaxTextureImageUnits; 2790bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint MaxVertexTextureImageUnits; 2791853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol GLuint MaxCombinedTextureImageUnits; 2792e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul GLuint MaxGeometryTextureImageUnits; 2793bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */ 2794bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 2795bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ 2796874a2c0b7da62f4dd08dedcec221f55b22e40e95Brian Paul GLuint MaxTextureBufferSize; /**< GL_ARB_texture_buffer_object */ 2797bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 27985e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLuint MaxArrayLockSize; 2799bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 28005e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLint SubPixelBits; 2801bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 2802bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MinPointSize, MaxPointSize; /**< aliased */ 2803bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */ 28045e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat PointSizeGranularity; 2805bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MinLineWidth, MaxLineWidth; /**< aliased */ 2806bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */ 28075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat LineWidthGranularity; 2808bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 28095e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLuint MaxColorTableSize; 2810bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 2811a864432fb4333dfbbe669554de7485d8426e1c38Brian Paul GLuint MaxClipPlanes; 2812a864432fb4333dfbbe669554de7485d8426e1c38Brian Paul GLuint MaxLights; 2813bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MaxShininess; /**< GL_NV_light_max_exponent */ 2814bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */ 2815bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 281653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul GLuint MaxViewportWidth, MaxViewportHeight; 2817bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 2818bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul struct gl_program_constants VertexProgram; /**< GL_ARB_vertex_program */ 2819bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul struct gl_program_constants FragmentProgram; /**< GL_ARB_fragment_program */ 2820da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_program_constants GeometryProgram; /**< GL_ARB_geometry_shader4 */ 2821edd677454dc38a590bd6fc1cd3e2759d2a4d55e3Brian Paul GLuint MaxProgramMatrices; 2822edd677454dc38a590bd6fc1cd3e2759d2a4d55e3Brian Paul GLuint MaxProgramMatrixStackDepth; 2823bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 2824b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt struct { 2825b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt GLuint SamplesPassed; 2826b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt GLuint TimeElapsed; 2827b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt GLuint Timestamp; 2828b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt GLuint PrimitivesGenerated; 2829b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt GLuint PrimitivesWritten; 2830b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt } QueryCounterBits; 2831b765119c5d2cd41a7f47cce10fd1fdbcf162b03dEric Anholt 2832bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** vertex array / buffer object bounds checking */ 2833a2b9bad251b058f6255fa037b842c5465c0609a2Brian Paul GLboolean CheckArrayBounds; 2834bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 2835bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */ 2836bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 2837bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */ 2838bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ 2839bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ 2840bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 2841e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul /** Number of varying vectors between vertex and fragment shaders */ 2842e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul GLuint MaxVarying; 2843e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul GLuint MaxVertexVaryingComponents; /**< Between vert and geom shader */ 2844e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul GLuint MaxGeometryVaryingComponents; /**< Between geom and frag shader */ 2845e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul 28465426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt /** @{ 28475426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt * GL_ARB_uniform_buffer_object 28485426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt */ 28495426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt GLuint MaxCombinedUniformBlocks; 28505426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt GLuint MaxUniformBufferBindings; 28515426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt GLuint MaxUniformBlockSize; 28525426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt GLuint UniformBufferOffsetAlignment; 28535426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt /** @} */ 28545426b1ade9c97497bdf5ecd7c44701a6d5ef04dcEric Anholt 2855e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul /** GL_ARB_geometry_shader4 */ 2856e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul GLuint MaxGeometryOutputVertices; 2857e0e94026a0648d6b33d6b7cf2b9b01429cf945e4Brian Paul GLuint MaxGeometryTotalOutputComponents; 2858114152e068ec919feb0a57a1259c2ada970b9f02Roland Scheidegger 2859e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */ 2860e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul 286101d81dedc795005ed235856ce762bb1981655716Kenneth Graunke /** 2862b9e27cc1426e3242a003fa5ae91fab330694009aEric Anholt * Changes default GLSL extension behavior from "error" to "warn". It's out 2863b9e27cc1426e3242a003fa5ae91fab330694009aEric Anholt * of spec, but it can make some apps work that otherwise wouldn't. 2864b9e27cc1426e3242a003fa5ae91fab330694009aEric Anholt */ 2865b9e27cc1426e3242a003fa5ae91fab330694009aEric Anholt GLboolean ForceGLSLExtensionsWarn; 2866b9e27cc1426e3242a003fa5ae91fab330694009aEric Anholt 2867b9e27cc1426e3242a003fa5ae91fab330694009aEric Anholt /** 286801d81dedc795005ed235856ce762bb1981655716Kenneth Graunke * Does the driver support real 32-bit integers? (Otherwise, integers are 286901d81dedc795005ed235856ce762bb1981655716Kenneth Graunke * simulated via floats.) 287001d81dedc795005ed235856ce762bb1981655716Kenneth Graunke */ 287101d81dedc795005ed235856ce762bb1981655716Kenneth Graunke GLboolean NativeIntegers; 287201d81dedc795005ed235856ce762bb1981655716Kenneth Graunke 28734e64cfbb4ec92877803e70257af8b97c484c00c0Bryan Cain /** 28744e64cfbb4ec92877803e70257af8b97c484c00c0Bryan Cain * If the driver supports real 32-bit integers, what integer value should be 28754e64cfbb4ec92877803e70257af8b97c484c00c0Bryan Cain * used for boolean true in uniform uploads? (Usually 1 or ~0.) 28764e64cfbb4ec92877803e70257af8b97c484c00c0Bryan Cain */ 28774e64cfbb4ec92877803e70257af8b97c484c00c0Bryan Cain GLuint UniformBooleanTrue; 28784e64cfbb4ec92877803e70257af8b97c484c00c0Bryan Cain 28798680c1324097ec3df51e8bf6f25a3347df6f798cBrian Paul /** Which texture units support GL_ATI_envmap_bumpmap as targets */ 28808680c1324097ec3df51e8bf6f25a3347df6f798cBrian Paul GLbitfield SupportedBumpUnits; 288189966cdb1b5974059c32308d74b5bb09943a6fa1Brian Paul 2882f37070bab6af350caec905ea7658e9241042b6ccIan Romanick /** 2883f37070bab6af350caec905ea7658e9241042b6ccIan Romanick * Maximum amount of time, measured in nanseconds, that the server can wait. 2884f37070bab6af350caec905ea7658e9241042b6ccIan Romanick */ 2885f37070bab6af350caec905ea7658e9241042b6ccIan Romanick GLuint64 MaxServerWaitTimeout; 2886f37070bab6af350caec905ea7658e9241042b6ccIan Romanick 2887bd1d35fb5d3c889b11de5a1d493f711fc091fbedBrian Paul /** GL_EXT_provoking_vertex */ 288889966cdb1b5974059c32308d74b5bb09943a6fa1Brian Paul GLboolean QuadsFollowProvokingVertexConvention; 288900225af999acabcd5eced0b075b0a56018fd5eb8Brian Paul 2890bd1d35fb5d3c889b11de5a1d493f711fc091fbedBrian Paul /** OpenGL version 3.0 */ 289100225af999acabcd5eced0b075b0a56018fd5eb8Brian Paul GLbitfield ContextFlags; /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */ 2892066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul 2893bd1d35fb5d3c889b11de5a1d493f711fc091fbedBrian Paul /** OpenGL version 3.2 */ 2894bd1d35fb5d3c889b11de5a1d493f711fc091fbedBrian Paul GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ 2895bd1d35fb5d3c889b11de5a1d493f711fc091fbedBrian Paul 2896066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul /** GL_EXT_transform_feedback */ 289715ac66e331abdab12e882d80a6b4f647bc905298Marek Olšák GLuint MaxTransformFeedbackBuffers; 2898066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul GLuint MaxTransformFeedbackSeparateComponents; 2899066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul GLuint MaxTransformFeedbackInterleavedComponents; 2900375e73d85948b43aa509e25f0a210ebd10238b6fMarek Olšák GLuint MaxVertexStreams; 29013b82ceec677e875d2f2f9edbcfceafd4d9a85cb7Brian Paul 29023b82ceec677e875d2f2f9edbcfceafd4d9a85cb7Brian Paul /** GL_EXT_gpu_shader4 */ 29033b82ceec677e875d2f2f9edbcfceafd4d9a85cb7Brian Paul GLint MinProgramTexelOffset, MaxProgramTexelOffset; 290488ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie 29056b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul /* GL_ARB_robustness */ 29066b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul GLenum ResetStrategy; 29079c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt 2908f8cf79936b42405a8366613b80e3bde21aadaa02Dave Airlie /* GL_ARB_blend_func_extended */ 2909f8cf79936b42405a8366613b80e3bde21aadaa02Dave Airlie GLuint MaxDualSourceDrawBuffers; 2910f8cf79936b42405a8366613b80e3bde21aadaa02Dave Airlie 29119c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt /** 29129c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * Whether the implementation strips out and ignores texture borders. 29139c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * 29149c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * Many GPU hardware implementations don't support rendering with texture 29159c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * borders and mipmapped textures. (Note: not static border color, but the 29169c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * old 1-pixel border around each edge). Implementations then have to do 29179c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * slow fallbacks to be correct, or just ignore the border and be fast but 2918068b9dc26882b85ff0c7d0894b4c11791a5b641eBrian Paul * wrong. Setting the flag strips the border off of TexImage calls, 29199c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * providing "fast but wrong" at significantly reduced driver complexity. 29209c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * 29219c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt * Texture borders are deprecated in GL 3.0. 29229c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt **/ 29239c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt GLboolean StripTextureBorder; 2924df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák 2925df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák /** 2926df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák * For drivers which can do a better job at eliminating unused varyings 2927df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák * and uniforms than the GLSL compiler. 2928df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák * 2929df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák * XXX Remove these as soon as a better solution is available. 2930df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák */ 2931df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák GLboolean GLSLSkipStrictMaxVaryingLimitCheck; 2932df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák GLboolean GLSLSkipStrictMaxUniformLimitCheck; 2933fc22fde9d8ba633f9f13ea0c46baa1c826d1377fJordan Justen 2934fc22fde9d8ba633f9f13ea0c46baa1c826d1377fJordan Justen /** 2935fc22fde9d8ba633f9f13ea0c46baa1c826d1377fJordan Justen * Force software support for primitive restart in the VBO module. 2936fc22fde9d8ba633f9f13ea0c46baa1c826d1377fJordan Justen */ 2937fc22fde9d8ba633f9f13ea0c46baa1c826d1377fJordan Justen GLboolean PrimitiveRestartInSoftware; 29385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 29395e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 29405e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 29416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 29424dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Enable flag for each OpenGL extension. Different device drivers will 29434dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * enable different extensions at runtime. 29445e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 2945f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paulstruct gl_extensions 2946f2dd273322cc9ec0cfe80a609f9a1e5db5931e2eBrian Paul{ 2947de4f460e20cf76ece883530ffe3f82a0afc817f3Brian Paul GLboolean dummy; /* don't remove this! */ 29489b260c377f5b437b7e03607fefa022459ef758edChad Versace GLboolean dummy_true; /* Set true by _mesa_init_extensions(). */ 29499b260c377f5b437b7e03607fefa022459ef758edChad Versace GLboolean dummy_false; /* Set false by _mesa_init_extensions(). */ 29509c6954fc9d254e0d6dc9bc7aac5badee04fe0f9bEric Anholt GLboolean ARB_ES2_compatibility; 2951ae5d7d5e8970f90b9713897387d7d46a2b4485abFredrik Höglund GLboolean ARB_base_instance; 295244732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_blend_func_extended; 2953e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák GLboolean ARB_color_buffer_float; 2954bbcb648bc2f45dd85e33c7301527c8f6d97cbce6Marek Olšák GLboolean ARB_conservative_depth; 295596a30b06dbc60ff63392cf8ae9dcb3d245b41c27Brian Paul GLboolean ARB_copy_buffer; 29566988f65e43297ae63bbce30bf882f870b370096cBrian Paul GLboolean ARB_depth_buffer_float; 2957b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt GLboolean ARB_depth_clamp; 29586988f65e43297ae63bbce30bf882f870b370096cBrian Paul GLboolean ARB_depth_texture; 295974713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul GLboolean ARB_draw_buffers_blend; 296092d7ed8a20d4a018ce5324e6537ae7b478b9e5bfEric Anholt GLboolean ARB_draw_elements_base_vertex; 29613258dfbbbda69b46003362e94e75129c277c7a61Brian Paul GLboolean ARB_draw_instanced; 2962e59353f592ef587d34279f0735f06053e289a7b4Luca Barbieri GLboolean ARB_fragment_coord_conventions; 2963d0492cf1377897c8113a109aa936ee7a7084b9c8Brian Paul GLboolean ARB_fragment_program; 29647b559a91028d297b34df9ec939bd4d00fad6027cIan Romanick GLboolean ARB_fragment_program_shadow; 2965678ea6cd5cb68d22668c93bf4ed830226ef26b0cMichal Krol GLboolean ARB_fragment_shader; 29667d98f5ab6e207586dcac4b165221ea9852fcf035Brian Paul GLboolean ARB_framebuffer_object; 296744732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_explicit_attrib_location; 2968da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLboolean ARB_geometry_shader4; 2969f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul GLboolean ARB_half_float_pixel; 2970cfe884e2030466df673881da8e830c300dda40dbDave Airlie GLboolean ARB_half_float_vertex; 297144732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_instanced_arrays; 2972e75b283b45add351dbe5a09289fe85546df8a79aBrian Paul GLboolean ARB_map_buffer_range; 2973b17a722ca3989e8563ee04cb2939f4835f8a171eBrian Paul GLboolean ARB_occlusion_query; 297444732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_occlusion_query2; 297563736723678ef30e7f90835cfbd48c520e39bf11Ian Romanick GLboolean ARB_point_sprite; 29769d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick GLboolean ARB_seamless_cube_map; 2977199771bc325900eb1d3acc7fa03808894a94fdb2Olivier Galibert GLboolean ARB_shader_bit_encoding; 2978efb41b07ff213735e8ea08f38a7799f9d80459fcBrian Paul GLboolean ARB_shader_objects; 2979d9671863eaae41ba28b6fe82e3e7d1dac12f514cDave Airlie GLboolean ARB_shader_stencil_export; 29801d4eb8d5d82fca2bc6689cff90a8b971feac8054Kenneth Graunke GLboolean ARB_shader_texture_lod; 29812a37053fd5591eeb21db33aa8f6ee444da1eee7aMichal Krol GLboolean ARB_shading_language_100; 2982014ec1ac5e98e86836285a176d7674bc43a00cd7Brian Paul GLboolean ARB_shadow; 2983f37070bab6af350caec905ea7658e9241042b6ccIan Romanick GLboolean ARB_sync; 29842bb04cad14f5edd9e2657a1122ceeb1fb468f4a9Brian Paul GLboolean ARB_texture_border_clamp; 298544732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_texture_buffer_object; 2986e2a054b70cb5dace40fc1426cbf936366dc72fb9Ian Romanick GLboolean ARB_texture_compression_rgtc; 29875e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean ARB_texture_cube_map; 2988bcfe3936a8722f43639ad853649c7f0ea8591cf3Brian Paul GLboolean ARB_texture_env_combine; 2989f595212336ae63c981f0f39f4ea1dec67ff7fe25Brian Paul GLboolean ARB_texture_env_crossbar; 2990bcfe3936a8722f43639ad853649c7f0ea8591cf3Brian Paul GLboolean ARB_texture_env_dot3; 2991f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul GLboolean ARB_texture_float; 299244732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_texture_multisample; 2993887e2cf01a99f7fe1b7c94320b7bdbbf0d6ad2f8Brian Paul GLboolean ARB_texture_non_power_of_two; 29946988f65e43297ae63bbce30bf882f870b370096cBrian Paul GLboolean ARB_texture_rg; 299544732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_texture_rgb10_a2ui; 2996b296315881e4da60798e546f24c727a49deb9a89Brian Paul GLboolean ARB_texture_storage; 299744732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_timer_query; 2998fef6e36e0736a68e24d7844bae65a01de8359214Brian Paul GLboolean ARB_transform_feedback2; 299921cb5ed20d1d7984b7695395327ed0ba0b0d16e2Marek Olšák GLboolean ARB_transform_feedback3; 3000d24ece97e5ac755b9fd11d1d00d2eafc8524ca04Marek Olšák GLboolean ARB_transform_feedback_instanced; 3001e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean ARB_transpose_matrix; 300244732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_uniform_buffer_object; 3003d0492cf1377897c8113a109aa936ee7a7084b9c8Brian Paul GLboolean ARB_vertex_program; 3004678ea6cd5cb68d22668c93bf4ed830226ef26b0cMichal Krol GLboolean ARB_vertex_shader; 300544732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean ARB_vertex_type_2_10_10_10_rev; 30065b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul GLboolean ARB_window_pos; 30075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_blend_color; 3008c93105eb9e2499efb237fd89dba0cebd48f18375Ian Romanick GLboolean EXT_blend_equation_separate; 30095e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_blend_func_separate; 30105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_blend_minmax; 3011e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean EXT_clip_volume_hint; 30125e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_compiled_vertex_array; 3013e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul GLboolean EXT_depth_bounds_test; 30148f6f1124634cf659dde4c75549b84e35505d892dBrian Paul GLboolean EXT_draw_buffers2; 3015e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean EXT_draw_range_elements; 30165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_fog_coord; 30170bffb1192a599b11af11604ad590f6a50c054bf1Brian Paul GLboolean EXT_framebuffer_blit; 30184d6ec214396461c0cf3ad8ede449b299ff06c1aaIan Romanick GLboolean EXT_framebuffer_multisample; 30194d6ec214396461c0cf3ad8ede449b299ff06c1aaIan Romanick GLboolean EXT_framebuffer_object; 302044732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean EXT_framebuffer_sRGB; 30218c41c757fe8efa04df0dd5cdfb33a75b84891c19Ian Romanick GLboolean EXT_gpu_program_parameters; 30229ee07a0a27f515c11ae6d3061565863da757a8edBrian Paul GLboolean EXT_gpu_shader4; 30231ad7b99925e044f82e635f746c1ef2df77f69ac9Brian Paul GLboolean EXT_packed_depth_stencil; 302444732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean EXT_packed_float; 3025e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean EXT_packed_pixels; 30267a6b71ef2944bae1718e8167b2faaceb8422071cBrian Paul GLboolean EXT_pixel_buffer_object; 30275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_point_parameters; 302889966cdb1b5974059c32308d74b5bb09943a6fa1Brian Paul GLboolean EXT_provoking_vertex; 3029e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean EXT_rescale_normal; 3030636b2801d981872d3111be0cd11aa79b4cc8643bBrian Paul GLboolean EXT_shadow_funcs; 30315e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_secondary_color; 3032b97794c041f848a5c9481cfeac6401f5dc9f0e48Ian Romanick GLboolean EXT_separate_shader_objects; 3033e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean EXT_separate_specular_color; 30345f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul GLboolean EXT_stencil_two_side; 30355e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_texture3D; 30361edd444c2e9afadb56df55682ae606b5cefd811cBrian Paul GLboolean EXT_texture_array; 30377d16e2c0cd70dc5a23b746dbc8e44c58366b5353Marek Olšák GLboolean EXT_texture_compression_latc; 30385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean EXT_texture_compression_s3tc; 3039ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes GLboolean EXT_texture_env_dot3; 30402c3d34c905fa6b831a066afae83b938de05eb241Gareth Hughes GLboolean EXT_texture_filter_anisotropic; 304144732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean EXT_texture_integer; 3042c8363a31cfcd8e3c60387df31525158847ab1457Ian Romanick GLboolean EXT_texture_mirror_clamp; 30436988f65e43297ae63bbce30bf882f870b370096cBrian Paul GLboolean EXT_texture_shared_exponent; 30440be369975fdfa79bcb702d0c13aa0a221055f61bMarek Olšák GLboolean EXT_texture_snorm; 30458d214bc8044e5027e3fa9302b259d0c557270b00Brian Paul GLboolean EXT_texture_sRGB; 3046edc2dd8e4788e556d445c9f59974ed95b33c2bbcDave Airlie GLboolean EXT_texture_sRGB_decode; 30474a89e51c5f88b57040b361b62e80a57c8248ba4bBrian Paul GLboolean EXT_texture_swizzle; 3048066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul GLboolean EXT_transform_feedback; 30494fb995084e1b4b629667f09331adf060aa0fac4cBrian Paul GLboolean EXT_timer_query; 3050f7c1a2dacd1643a19fbf975c21ac3e64b708c8d7Brian Paul GLboolean EXT_vertex_array_bgra; 305178838b2d1bd88f948030cd60479b832b661ccd3cChad Versace GLboolean OES_standard_derivatives; 3052e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul /* vendor extensions */ 3053a19c42ffc606b594558a0c4f981662442ad6bb83Marek Olšák GLboolean AMD_seamless_cubemap_per_texture; 3054e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean APPLE_packed_pixels; 305599864d595f7d4c13e9548f83d5972db9af64e67bChris Wilson GLboolean APPLE_object_purgeable; 3056114152e068ec919feb0a57a1259c2ada970b9f02Roland Scheidegger GLboolean ATI_envmap_bumpmap; 305769f16accd0aa3b8d414092a5e52ccc99649da01aMarek Olšák GLboolean ATI_texture_compression_3dc; 3058e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean ATI_texture_mirror_once; 3059e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean ATI_texture_env_combine3; 30607f752fed993e5e9423abac200dd59141edbada56Dave Airlie GLboolean ATI_fragment_shader; 30616d104cb932080c5c0d951fbc0ec6d30fb7ebef45Alan Hourihane GLboolean ATI_separate_stencil; 30628c2f6c5059a60d845716277973c826f4069926e6Brian Paul GLboolean IBM_rasterpos_clip; 30633baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLboolean IBM_multimode_draw_arrays; 3064551b65f13754e6760e5c272ff86f8873c9c13e5cBrian Paul GLboolean MESA_pack_invert; 30655e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean MESA_resize_buffers; 3066c5b995066020191982b2315fc45d05e068eee761Brian Paul GLboolean MESA_ycbcr_texture; 3067bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick GLboolean MESA_texture_array; 30685e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean NV_blend_square; 30692be0d77a97cbe92f09dd97fb85a3d5372e52ad4cBrian Paul GLboolean NV_conditional_render; 3070740467dd62962b4effdaf51e38edc032e2a39487Nicholas Miell GLboolean NV_fog_distance; 3071610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul GLboolean NV_fragment_program; 3072efff7aa980e78dc3ee1782308f0c9f3861c9992aIan Romanick GLboolean NV_fragment_program_option; 3073e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean NV_light_max_exponent; 30746c408b46678637959dba04663fbc34eb9c4bc397Brian Paul GLboolean NV_point_sprite; 307544732103b2b7a8765299e586fb3b9bf91e32f6d4Brian Paul GLboolean NV_primitive_restart; 30762d7b2d7a87f037fa435772b7ce7c7cc0f426d912Kristian Høgsberg GLboolean NV_read_buffer; 3077867f9b07d42c2b49ddb9e5bb17f0ac5c4a80d8acMarek Olšák GLboolean NV_texture_barrier; 3078e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean NV_texgen_reflection; 3079f5d3027c0a03e26fe90efc067766c996dea05948Brian Paul GLboolean NV_texture_env_combine4; 30808afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul GLboolean NV_texture_rectangle; 308186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul GLboolean NV_vertex_program; 3082f9708e45ac819a0c589e14ea81e635fbbc8033f8Brian Paul GLboolean NV_vertex_program1_1; 3083e5a94ba138f9a628b1237fa815c2af9c9da077ebBrian Paul GLboolean SGIS_texture_lod; 308489fb06fcc11cbe3f23521312155d6c55d869f526Brian Paul GLboolean TDFX_texture_compression_FXT1; 3085663a9e1b7ef7b8384abe2f81e1a8749b942f6d3aDaniel Borca GLboolean S3_s3tc; 30862002e4d06e2627241cd4af88f65b54d2101ef151Chia-I Wu GLboolean OES_EGL_image; 308734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GLboolean OES_draw_texture; 3088db73264e1471a594d49ca0bc397cbb6746ee1dceChia-I Wu GLboolean OES_EGL_image_external; 3089d4a38e86d4b4d66cca20ee63222f940cb73fa709Chia-I Wu GLboolean OES_compressed_ETC1_RGB8_texture; 30909b260c377f5b437b7e03607fefa022459ef758edChad Versace GLboolean extension_sentinel; 3091bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul /** The extension string */ 3092de4f460e20cf76ece883530ffe3f82a0afc817f3Brian Paul const GLubyte *String; 3093802b80893943cf129039a37fb2afe26444b09332Brian Paul /** Number of supported extensions */ 3094802b80893943cf129039a37fb2afe26444b09332Brian Paul GLuint Count; 30955e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 30965e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 30975e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 30986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 30993b4fbbc129c711a5aec8d653d5c6eb2e195f947cBrian Paul * A stack of matrices (projection, modelview, color, texture, etc). 31003b4fbbc129c711a5aec8d653d5c6eb2e195f947cBrian Paul */ 31010e1bd2302537a9684158cb353b876af4ce6346e7Brianstruct gl_matrix_stack 310286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul{ 31036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLmatrix *Top; /**< points into Stack */ 31046dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLmatrix *Stack; /**< array [MaxDepth] of GLmatrix */ 31056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint Depth; /**< 0 <= Depth < MaxDepth */ 31066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint MaxDepth; /**< size of Stack[] array */ 31076dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint DirtyFlag; /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */ 310886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul}; 310986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul 31105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 31116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 31126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Bits for image transfer operations 3113f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg * \sa __struct gl_contextRec::ImageTransferState. 31145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 31156dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/ 31165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#define IMAGE_SCALE_BIAS_BIT 0x1 31175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#define IMAGE_SHIFT_OFFSET_BIT 0x2 31185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#define IMAGE_MAP_COLOR_BIT 0x4 3119bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul#define IMAGE_CLAMP_BIT 0x800 3120833d96aa913dcb0c5ca085cc7ebee3df90f7fbf8Brian Paul 31215e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3122a62efdf82c20747feb11dfd7756f0579aa914b57Eric Anholt/** Pixel Transfer ops */ 3123a62efdf82c20747feb11dfd7756f0579aa914b57Eric Anholt#define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT | \ 3124a62efdf82c20747feb11dfd7756f0579aa914b57Eric Anholt IMAGE_SHIFT_OFFSET_BIT | \ 3125a62efdf82c20747feb11dfd7756f0579aa914b57Eric Anholt IMAGE_MAP_COLOR_BIT) 31265e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 31276dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 31286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Bits to indicate what state has changed. 31296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 31306dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/ 3131fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_MODELVIEW (1 << 0) /**< gl_context::ModelView */ 3132fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_PROJECTION (1 << 1) /**< gl_context::Projection */ 3133fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_TEXTURE_MATRIX (1 << 2) /**< gl_context::TextureMatrix */ 3134fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_COLOR (1 << 3) /**< gl_context::Color */ 3135fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_DEPTH (1 << 4) /**< gl_context::Depth */ 3136fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_EVAL (1 << 5) /**< gl_context::Eval, EvalMap */ 3137fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_FOG (1 << 6) /**< gl_context::Fog */ 3138fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_HINT (1 << 7) /**< gl_context::Hint */ 3139fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_LIGHT (1 << 8) /**< gl_context::Light */ 3140fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_LINE (1 << 9) /**< gl_context::Line */ 3141fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_PIXEL (1 << 10) /**< gl_context::Pixel */ 3142fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_POINT (1 << 11) /**< gl_context::Point */ 3143fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_POLYGON (1 << 12) /**< gl_context::Polygon */ 3144fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_POLYGONSTIPPLE (1 << 13) /**< gl_context::PolygonStipple */ 3145fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_SCISSOR (1 << 14) /**< gl_context::Scissor */ 3146fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_STENCIL (1 << 15) /**< gl_context::Stencil */ 3147fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_TEXTURE (1 << 16) /**< gl_context::Texture */ 3148fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_TRANSFORM (1 << 17) /**< gl_context::Transform */ 3149fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_VIEWPORT (1 << 18) /**< gl_context::Viewport */ 3150fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_PACKUNPACK (1 << 19) /**< gl_context::Pack, Unpack */ 3151fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_ARRAY (1 << 20) /**< gl_context::Array */ 3152fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_RENDERMODE (1 << 21) /**< gl_context::RenderMode, etc */ 3153fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_BUFFERS (1 << 22) /**< gl_context::Visual, DrawBuffer, */ 3154fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_CURRENT_ATTRIB (1 << 23) /**< gl_context::Current */ 3155fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_MULTISAMPLE (1 << 24) /**< gl_context::Multisample */ 3156fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_TRACK_MATRIX (1 << 25) /**< gl_context::VertexProgram */ 3157fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_PROGRAM (1 << 26) /**< New program/shader state */ 3158fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_PROGRAM_CONSTANTS (1 << 27) 3159fb7efb1b194831cc6cb0b69291949ac693f20f25Brian Paul#define _NEW_BUFFER_OBJECT (1 << 28) 3160e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák#define _NEW_FRAG_CLAMP (1 << 29) 3161a98ceee0ee3692783047c6f8f9f6bf6afbf4dd3bPaul Berry#define _NEW_TRANSFORM_FEEDBACK (1 << 30) /**< gl_context::TransformFeedback */ 3162576c8c592a4be7047a00b0c8fe3851b09f10d8d4Marek Olšák#define _NEW_VARYING_VP_INPUTS (1 << 31) /**< gl_context::varying_vp_inputs */ 31635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#define _NEW_ALL ~0 3164d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry 3165d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry/** 3166d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry * We use _NEW_TRANSFORM for GL_RASTERIZER_DISCARD. This #define is for 3167d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry * clarity. 3168d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry */ 3169d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry#define _NEW_RASTERIZER_DISCARD _NEW_TRANSFORM 31706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/ 31715e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 31725e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 31736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 31746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name A bunch of flags that we think might be useful to drivers. 31756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * 3176f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg * Set in the __struct gl_contextRec::_TriangleCaps bitfield. 31775e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 31786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@{*/ 317992c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_SEPARATE_SPECULAR (1 << 0) 318092c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_TRI_LIGHT_TWOSIDE (1 << 1) 318192c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_TRI_UNFILLED (1 << 2) 318292c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_TRI_SMOOTH (1 << 3) 318392c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_TRI_STIPPLE (1 << 4) 318492c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_TRI_OFFSET (1 << 5) 318592c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_LINE_SMOOTH (1 << 6) 318692c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_LINE_STIPPLE (1 << 7) 318792c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_POINT_SMOOTH (1 << 8) 318892c42d8170711d76568cd8caeaeacb2442814f49Brian Paul#define DD_POINT_ATTEN (1 << 9) 31896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*@}*/ 31905e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 31913b4fbbc129c711a5aec8d653d5c6eb2e195f947cBrian Paul 31926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/** 31931ed5fe5cbfb64c57997ec46684748f8ae516d19cBrian Paul * Composite state flags 31941ed5fe5cbfb64c57997ec46684748f8ae516d19cBrian Paul */ 31951ed5fe5cbfb64c57997ec46684748f8ae516d19cBrian Paul/*@{*/ 3196ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul#define _MESA_NEW_NEED_EYE_COORDS (_NEW_LIGHT | \ 3197ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul _NEW_TEXTURE | \ 3198ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul _NEW_POINT | \ 319968fc4ff1d7f749670684119647e0ef945d23dfa9Brian _NEW_PROGRAM | \ 3200ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul _NEW_MODELVIEW) 32015edd7b8c46bbbaa59a421aa2c082374fc7dc101fBrian Paul 32025edd7b8c46bbbaa59a421aa2c082374fc7dc101fBrian Paul#define _MESA_NEW_SEPARATE_SPECULAR (_NEW_LIGHT | \ 32035edd7b8c46bbbaa59a421aa2c082374fc7dc101fBrian Paul _NEW_FOG | \ 32045edd7b8c46bbbaa59a421aa2c082374fc7dc101fBrian Paul _NEW_PROGRAM) 32055edd7b8c46bbbaa59a421aa2c082374fc7dc101fBrian Paul 32065edd7b8c46bbbaa59a421aa2c082374fc7dc101fBrian Paul 32071ed5fe5cbfb64c57997ec46684748f8ae516d19cBrian Paul/*@}*/ 32085e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 32095e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 32105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 32115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 32125e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen/* This has to be included here. */ 32135e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "dd.h" 32145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 32155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 32167721bf267b64ef28376f07daae7713814e91af35Brian/** 3217446abc2799a143c32c4c48472f3f964f9288a623Brian * Display list flags. 3218446abc2799a143c32c4c48472f3f964f9288a623Brian * Strictly this is a tnl-private concept, but it doesn't seem 321936a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell * worthwhile adding a tnl private structure just to hold this one bit 322036a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell * of information: 322136a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell */ 3222446abc2799a143c32c4c48472f3f964f9288a623Brian#define DLIST_DANGLING_REFS 0x1 3223446abc2799a143c32c4c48472f3f964f9288a623Brian 32240001deef1108b77cf4879fff4647401fb68c421eBrian 32250001deef1108b77cf4879fff4647401fb68c421eBrian/** Opaque declaration of display list payload data type */ 3226446abc2799a143c32c4c48472f3f964f9288a623Brianunion gl_dlist_node; 322736a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell 32287721bf267b64ef28376f07daae7713814e91af35Brian 32297721bf267b64ef28376f07daae7713814e91af35Brian/** 32307721bf267b64ef28376f07daae7713814e91af35Brian * Provide a location where information about a display list can be 323136a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell * collected. Could be extended with driverPrivate structures, 323236a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell * etc. in the future. 323336a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell */ 3234446abc2799a143c32c4c48472f3f964f9288a623Brianstruct gl_display_list 323536a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell{ 3236446abc2799a143c32c4c48472f3f964f9288a623Brian GLuint Name; 3237446abc2799a143c32c4c48472f3f964f9288a623Brian GLbitfield Flags; /**< DLIST_x flags */ 3238446abc2799a143c32c4c48472f3f964f9288a623Brian /** The dlist commands are in a linked list of nodes */ 3239446abc2799a143c32c4c48472f3f964f9288a623Brian union gl_dlist_node *Head; 324036a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell}; 324136a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell 32424dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 32434dafbc3dc75be565704f437016f70a63c48d1539Brian Paul/** 32444dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * State used during display list compilation and execution. 32454dafbc3dc75be565704f437016f70a63c48d1539Brian Paul */ 32460e1bd2302537a9684158cb353b876af4ce6346e7Brianstruct gl_dlist_state 32474dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 3248ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell GLuint CallDepth; /**< Current recursion calling depth */ 324936a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell 32500001deef1108b77cf4879fff4647401fb68c421eBrian struct gl_display_list *CurrentList; /**< List currently being compiled */ 3251446abc2799a143c32c4c48472f3f964f9288a623Brian union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */ 3252ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell GLuint CurrentPos; /**< Index into current block of nodes */ 325336a35c5614336bffdac4827c1e04bcaa8ab2fa27Keith Whitwell 3254ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell GLvertexformat ListVtxfmt; 3255ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell 3256ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; 3257ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4]; 3258ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell 3259ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; 3260ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; 3261ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell 326247173cf67f0ed55012b0820397f6d620d8ad4473Keith Whitwell struct { 326347173cf67f0ed55012b0820397f6d620d8ad4473Keith Whitwell /* State known to have been set by the currently-compiling display 326447173cf67f0ed55012b0820397f6d620d8ad4473Keith Whitwell * list. Used to eliminate some redundant state changes. 326547173cf67f0ed55012b0820397f6d620d8ad4473Keith Whitwell */ 326647173cf67f0ed55012b0820397f6d620d8ad4473Keith Whitwell GLenum ShadeModel; 326747173cf67f0ed55012b0820397f6d620d8ad4473Keith Whitwell } Current; 3268ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell}; 3269ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell 3270ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled/** 3271ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled * An error, warning, or other piece of debug information for an application 3272ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled * to consume via GL_ARB_debug_output. 3273ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled */ 3274ed087ee49808a692ce8a0389fcf6c9da27f99d8enobledstruct gl_debug_msg 3275ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled{ 3276ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLenum source; 3277ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLenum type; 3278ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLuint id; 3279ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLenum severity; 3280ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLsizei length; 3281ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLcharARB *message; 3282ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled}; 3283ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled 328476414cded8dcfc274fe47f347c64986680e8b95anobledtypedef enum { 328576414cded8dcfc274fe47f347c64986680e8b95anobled API_ERROR_UNKNOWN, 328676414cded8dcfc274fe47f347c64986680e8b95anobled API_ERROR_COUNT 328776414cded8dcfc274fe47f347c64986680e8b95anobled} gl_api_error; 328876414cded8dcfc274fe47f347c64986680e8b95anobled 328976414cded8dcfc274fe47f347c64986680e8b95anobledtypedef enum { 329076414cded8dcfc274fe47f347c64986680e8b95anobled WINSYS_ERROR_UNKNOWN, 329176414cded8dcfc274fe47f347c64986680e8b95anobled WINSYS_ERROR_COUNT 329276414cded8dcfc274fe47f347c64986680e8b95anobled} gl_winsys_error; 329376414cded8dcfc274fe47f347c64986680e8b95anobled 329476414cded8dcfc274fe47f347c64986680e8b95anobledtypedef enum { 329576414cded8dcfc274fe47f347c64986680e8b95anobled SHADER_ERROR_UNKNOWN, 329676414cded8dcfc274fe47f347c64986680e8b95anobled SHADER_ERROR_COUNT 329776414cded8dcfc274fe47f347c64986680e8b95anobled} gl_shader_error; 329876414cded8dcfc274fe47f347c64986680e8b95anobled 329976414cded8dcfc274fe47f347c64986680e8b95anobledtypedef enum { 330076414cded8dcfc274fe47f347c64986680e8b95anobled OTHER_ERROR_UNKNOWN, 330176414cded8dcfc274fe47f347c64986680e8b95anobled OTHER_ERROR_OUT_OF_MEMORY, 330276414cded8dcfc274fe47f347c64986680e8b95anobled OTHER_ERROR_COUNT 330376414cded8dcfc274fe47f347c64986680e8b95anobled} gl_other_error; 330476414cded8dcfc274fe47f347c64986680e8b95anobled 330541308d969921d28a3159099420c145d2dcf10fe6nobledstruct gl_client_namespace 330641308d969921d28a3159099420c145d2dcf10fe6nobled{ 330741308d969921d28a3159099420c145d2dcf10fe6nobled struct _mesa_HashTable *IDs; 330841308d969921d28a3159099420c145d2dcf10fe6nobled unsigned ZeroID; /* a HashTable won't take zero, so store its state here */ 330941308d969921d28a3159099420c145d2dcf10fe6nobled struct simple_node Severity[3]; /* lists of IDs in the hash table */ 331041308d969921d28a3159099420c145d2dcf10fe6nobled}; 331141308d969921d28a3159099420c145d2dcf10fe6nobled 33124667cb2162d02f5b0fe620a5394aee92c725fb86nobledstruct gl_client_debug 33134667cb2162d02f5b0fe620a5394aee92c725fb86nobled{ 33144667cb2162d02f5b0fe620a5394aee92c725fb86nobled GLboolean Defaults[3][2][6]; /* severity, source, type */ 331541308d969921d28a3159099420c145d2dcf10fe6nobled struct gl_client_namespace Namespaces[2][6]; /* source, type */ 33164667cb2162d02f5b0fe620a5394aee92c725fb86nobled}; 33174667cb2162d02f5b0fe620a5394aee92c725fb86nobled 3318ed087ee49808a692ce8a0389fcf6c9da27f99d8enobledstruct gl_debug_state 3319ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled{ 3320ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLDEBUGPROCARB Callback; 3321ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLvoid *CallbackData; 3322ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLboolean SyncOutput; 332376414cded8dcfc274fe47f347c64986680e8b95anobled GLboolean ApiErrors[API_ERROR_COUNT]; 332476414cded8dcfc274fe47f347c64986680e8b95anobled GLboolean WinsysErrors[WINSYS_ERROR_COUNT]; 332576414cded8dcfc274fe47f347c64986680e8b95anobled GLboolean ShaderErrors[SHADER_ERROR_COUNT]; 332676414cded8dcfc274fe47f347c64986680e8b95anobled GLboolean OtherErrors[OTHER_ERROR_COUNT]; 33274667cb2162d02f5b0fe620a5394aee92c725fb86nobled struct gl_client_debug ClientIDs; 3328ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled struct gl_debug_msg Log[MAX_DEBUG_LOGGED_MESSAGES]; 3329ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLint NumMessages; 3330ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLint NextMsg; 3331ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled GLint NextMsgLength; /* redundant, but copied here from Log[NextMsg].length 3332ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled for the sake of the offsetof() code in get.c */ 3333ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled}; 3334cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul 33352ab18d63cb71d988265eeab431e4363081978144Kristian Høgsberg/** 33362ab18d63cb71d988265eeab431e4363081978144Kristian Høgsberg * Enum for the OpenGL APIs we know about and may support. 33372ab18d63cb71d988265eeab431e4363081978144Kristian Høgsberg */ 3338cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paultypedef enum 3339cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul{ 33401c29b73f4d9f633e32c03bebc8d505b321d833d9Jordan Justen API_OPENGL, /* legacy / compatibility contexts */ 33412ab18d63cb71d988265eeab431e4363081978144Kristian Høgsberg API_OPENGLES, 33421c29b73f4d9f633e32c03bebc8d505b321d833d9Jordan Justen API_OPENGLES2, 33431c29b73f4d9f633e32c03bebc8d505b321d833d9Jordan Justen API_OPENGL_CORE, 33448dc79ae7d73cf6711c2182ff9a5d37ef6c989d23Imre Deak 33458dc79ae7d73cf6711c2182ff9a5d37ef6c989d23Imre Deak API_LAST = API_OPENGL_CORE, 33462ab18d63cb71d988265eeab431e4363081978144Kristian Høgsberg} gl_api; 3347d8aa0269cdadba1608522287bcb3b446c5848c09Gareth Hughes 3348c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák/** 3349c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák * Driver-specific state flags. 3350c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák * 3351c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák * These are or'd with gl_context::NewDriverState to notify a driver about 3352c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák * a state change. The driver sets the flags at context creation and 3353c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák * the meaning of the bits set is opaque to core Mesa. 3354c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák */ 3355c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšákstruct gl_driver_flags 3356c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák{ 3357c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák GLbitfield NewArray; /**< Vertex array state */ 3358c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák}; 3359cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul 33605527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholtstruct gl_uniform_buffer_binding 33615527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt{ 33625527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt struct gl_buffer_object *BufferObject; 33635527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt /** Start of uniform block data in the buffer */ 33645527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt GLintptr Offset; 33655527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt /** Size of data allowed to be referenced from the buffer (in bytes) */ 33665527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt GLsizeiptr Size; 33675527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt /** 33685527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt * glBindBufferBase() indicates that the Size should be ignored and only 33695527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt * limited by the current size of the BufferObject. 33705527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt */ 33715527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt GLboolean AutomaticSize; 33725527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt}; 33735527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt 33744c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul/** 33754dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * Mesa rendering context. 33766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * 33774c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul * This is the central context data structure for Mesa. Almost all 33784c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul * OpenGL state is contained in this structure. 33799a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul * Think of this as a base class from which device drivers will derive 33809a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul * sub classes. 33814dafbc3dc75be565704f437016f70a63c48d1539Brian Paul * 3382f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg * The struct gl_context typedef names this structure. 33835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 3384f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstruct gl_context 33854dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 33866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** State possibly shared with other contexts in the address space */ 33875e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_shared_state *Shared; 33885e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 33896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** \name API function pointer tables */ 33906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 33912ab18d63cb71d988265eeab431e4363081978144Kristian Høgsberg gl_api API; 33926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct _glapi_table *Save; /**< Display list save functions */ 33936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct _glapi_table *Exec; /**< Execute functions */ 33944c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul struct _glapi_table *CurrentDispatch; /**< == Save or Exec !! */ 33956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 3396ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes 3397d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg struct gl_config Visual; 339831aca27c08d6a385c595d34fe4ee06390bf5b0e8Kristian Høgsberg struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ 339931aca27c08d6a385c595d34fe4ee06390bf5b0e8Kristian Høgsberg struct gl_framebuffer *ReadBuffer; /**< buffer for reading */ 340031aca27c08d6a385c595d34fe4ee06390bf5b0e8Kristian Høgsberg struct gl_framebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */ 340131aca27c08d6a385c595d34fe4ee06390bf5b0e8Kristian Høgsberg struct gl_framebuffer *WinSysReadBuffer; /**< set with MakeCurrent */ 34025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34034c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul /** 34044c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul * Device driver function pointer table 34054c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul */ 34065e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct dd_function_table Driver; 34075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34084c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul void *DriverCtx; /**< Points to device driver context/state */ 34095e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** Core/Driver constants */ 34115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_constants Const; 34125e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34136dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** \name The various 4x4 matrix stacks */ 34146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 34150e1bd2302537a9684158cb353b876af4ce6346e7Brian struct gl_matrix_stack ModelviewMatrixStack; 34160e1bd2302537a9684158cb353b876af4ce6346e7Brian struct gl_matrix_stack ProjectionMatrixStack; 3417e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS]; 34180e1bd2302537a9684158cb353b876af4ce6346e7Brian struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES]; 34190e1bd2302537a9684158cb353b876af4ce6346e7Brian struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */ 34206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 34215e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34226dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** Combined modelview and projection matrix */ 34235e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLmatrix _ModelProjectMatrix; 34245e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34256dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** \name Display lists */ 34260e1bd2302537a9684158cb353b876af4ce6346e7Brian struct gl_dlist_state ListState; 3427ae0eaf93e092ac8e8b1c98f3e986de96940663faKeith Whitwell 34286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean ExecuteFlag; /**< Execute GL commands? */ 34296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLboolean CompileFlag; /**< Compile GL commands into display list? */ 34306dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 34313c2f8b22b9b87ccc06e33ecc088703c68d8230d8Brian Paul /** Extension information */ 34325e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_extensions Extensions; 34335e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34349c1b41879aab2ff7386c547a2ccce7686c018cf5Eric Anholt /** GL version integer, for example 31 for GL 3.1, or 20 for GLES 2.0. */ 34359c1b41879aab2ff7386c547a2ccce7686c018cf5Eric Anholt GLuint Version; 3436e16fd07225b07e87b79015988b9806aefa032dd3Brian Paul char *VersionString; 3437e16fd07225b07e87b79015988b9806aefa032dd3Brian Paul 34383c2f8b22b9b87ccc06e33ecc088703c68d8230d8Brian Paul /** \name State attribute stack (for glPush/PopAttrib) */ 34396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 34405e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLuint AttribStackDepth; 34415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH]; 34426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 34435e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** \name Renderer attribute groups 34456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * 34466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * We define a struct for each attribute group to make pushing and popping 34476dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * attributes easy. Also it's a good organization. 34486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */ 34496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 34503c2f8b22b9b87ccc06e33ecc088703c68d8230d8Brian Paul struct gl_accum_attrib Accum; /**< Accum buffer attributes */ 34513c2f8b22b9b87ccc06e33ecc088703c68d8230d8Brian Paul struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */ 34526dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_current_attrib Current; /**< Current attributes */ 34536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */ 34546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_eval_attrib Eval; /**< Eval attributes */ 34556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_fog_attrib Fog; /**< Fog attributes */ 34566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_hint_attrib Hint; /**< Hint attributes */ 34576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_light_attrib Light; /**< Light attributes */ 34586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_line_attrib Line; /**< Line attributes */ 34596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_list_attrib List; /**< List attributes */ 3460736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul struct gl_multisample_attrib Multisample; 34616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_pixel_attrib Pixel; /**< Pixel attributes */ 34626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_point_attrib Point; /**< Point attributes */ 34636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_polygon_attrib Polygon; /**< Polygon attributes */ 34646dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLuint PolygonStipple[32]; /**< Polygon stipple */ 34656dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_scissor_attrib Scissor; /**< Scissor attributes */ 34666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_stencil_attrib Stencil; /**< Stencil buffer attributes */ 34676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_texture_attrib Texture; /**< Texture attributes */ 34686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_transform_attrib Transform; /**< Transformation attributes */ 34696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_viewport_attrib Viewport; /**< Viewport attributes */ 34706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 34716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 34726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** \name Client attribute stack */ 34736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 34745e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLuint ClientAttribStackDepth; 34755e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; 34766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 34775e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** \name Client attribute groups */ 34796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 34806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_array_attrib Array; /**< Vertex arrays */ 34816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_pixelstore_attrib Pack; /**< Pixel packing */ 34826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_pixelstore_attrib Unpack; /**< Pixel unpacking */ 34837a6b71ef2944bae1718e8167b2faaceb8422071cBrian Paul struct gl_pixelstore_attrib DefaultPacking; /**< Default params */ 34844dafbc3dc75be565704f437016f70a63c48d1539Brian Paul /*@}*/ 34854dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 34864dafbc3dc75be565704f437016f70a63c48d1539Brian Paul /** \name Other assorted state (not pushed/popped on attribute stack) */ 34874dafbc3dc75be565704f437016f70a63c48d1539Brian Paul /*@{*/ 3488b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian struct gl_pixelmaps PixelMaps; 34895e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 34906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_evaluators EvalMap; /**< All evaluators */ 34916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_feedback Feedback; /**< Feedback */ 34926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell struct gl_selection Select; /**< Selection */ 34935e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3494bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul struct gl_program_state Program; /**< general program state */ 3495bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul struct gl_vertex_program_state VertexProgram; 3496bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul struct gl_fragment_program_state FragmentProgram; 3497da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_geometry_program_state GeometryProgram; 3498bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul struct gl_ati_fragment_shader_state ATIFragmentShader; 3499848ff851575241454935c205eace88e799966563Brian Paul 35000bf5dbe002a64e198f55724cc1542602c012490fBrian struct gl_shader_state Shader; /**< GLSL shader object state */ 35016d3a2c97f4a78e85545286e0e126cd3a27bd1cbdLuca Barbieri struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_TYPES]; 3502bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul 3503bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul struct gl_query_state Query; /**< occlusion, timer queries */ 350496a30b06dbc60ff63392cf8ae9dcb3d245b41c27Brian Paul 350584870e215667c999202be31057df6e31a0389bb7Brian Paul struct gl_transform_feedback_state TransformFeedback; 3506066f0097959fe705c57556b658a09af0ba6be8fbBrian Paul 350796a30b06dbc60ff63392cf8ae9dcb3d245b41c27Brian Paul struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */ 350896a30b06dbc60ff63392cf8ae9dcb3d245b41c27Brian Paul struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */ 3509c5c696e7fbce2e0b598ed5d4b1d73f086a664a57Eric Anholt 3510c5c696e7fbce2e0b598ed5d4b1d73f086a664a57Eric Anholt /** 3511c5c696e7fbce2e0b598ed5d4b1d73f086a664a57Eric Anholt * Current GL_ARB_uniform_buffer_object binding referenced by 3512c5c696e7fbce2e0b598ed5d4b1d73f086a664a57Eric Anholt * GL_UNIFORM_BUFFER target for glBufferData, glMapBuffer, etc. 3513c5c696e7fbce2e0b598ed5d4b1d73f086a664a57Eric Anholt */ 3514c5c696e7fbce2e0b598ed5d4b1d73f086a664a57Eric Anholt struct gl_buffer_object *UniformBuffer; 3515c5c696e7fbce2e0b598ed5d4b1d73f086a664a57Eric Anholt 35165527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt /** 35175527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt * Array of uniform buffers for GL_ARB_uniform_buffer_object and GL 3.1. 35185527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt * This is set up using glBindBufferRange() or glBindBufferBase(). They are 35195527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt * associated with uniform blocks by glUniformBlockBinding()'s state in the 35205527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt * shader program. 35215527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt */ 35225527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt struct gl_uniform_buffer_binding *UniformBufferBindings; 35235527c2d22027e9e27e55372d8adf2ba4ff855b53Eric Anholt 35244dafbc3dc75be565704f437016f70a63c48d1539Brian Paul /*@}*/ 3525b17a722ca3989e8563ee04cb2939f4835f8a171eBrian Paul 3526e9d9dab0cd8614898ecc2aceb49d8faf354cdbdfBrian Paul struct gl_meta_state *Meta; /**< for "meta" operations */ 3527e9d9dab0cd8614898ecc2aceb49d8faf354cdbdfBrian Paul 3528f90b5936d07c4c8f280318ab5cf5894ecb67aef6Chia-I Wu /* GL_EXT_framebuffer_object */ 35292c6f911e10761c0946261d494bf149b19072821dBrian Paul struct gl_renderbuffer *CurrentRenderbuffer; 35303deaa01c2bd576ae81fc6d3ea67c583cb3c22159Brian Paul 35316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum ErrorValue; /**< Last error code */ 3532fdeb77899052302053459b8a840a747346e30468Keith Whitwell 35336b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul /* GL_ARB_robustness */ 35346b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul GLenum ResetStatus; 35356b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 3536fdeb77899052302053459b8a840a747346e30468Keith Whitwell /** 3537fdeb77899052302053459b8a840a747346e30468Keith Whitwell * Recognize and silence repeated error debug messages in buggy apps. 3538fdeb77899052302053459b8a840a747346e30468Keith Whitwell */ 3539fdeb77899052302053459b8a840a747346e30468Keith Whitwell const char *ErrorDebugFmtString; 3540fdeb77899052302053459b8a840a747346e30468Keith Whitwell GLuint ErrorDebugCount; 3541fdeb77899052302053459b8a840a747346e30468Keith Whitwell 3542ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled /* GL_ARB_debug_output */ 3543ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled struct gl_debug_state Debug; 3544ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled 35456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GLenum RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */ 3546e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLbitfield NewState; /**< bitwise-or of _NEW_* flags */ 3547c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák GLbitfield NewDriverState;/**< bitwise-or of flags from DriverFlags */ 3548c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák 3549c5e473fbe25b20cb27aac44ff6e269701abd33a8Marek Olšák struct gl_driver_flags DriverFlags; 35505e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 35513f856c6b6b7fa95ef97a8712876de88d7d57932eBrian Paul GLboolean ViewportInitialized; /**< has viewport size been initialized? */ 35523f856c6b6b7fa95ef97a8712876de88d7d57932eBrian Paul 3553dca6a28a14f22d77273d79d44f57b0d853c0242dMathias Fröhlich GLbitfield64 varying_vp_inputs; /**< mask of VERT_BIT_* flags */ 35541680ef869625dc1fe9cf481b180382a34e0738e7Keith Whitwell 35554dafbc3dc75be565704f437016f70a63c48d1539Brian Paul /** \name Derived state */ 35566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 3557ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian /** Bitwise-or of DD_* flags. Note that this bitfield may be used before 3558ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian * state validation so they need to always be current. 3559ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian */ 3560ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian GLbitfield _TriangleCaps; 3561e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ 35625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat _EyeZDir[3]; 35635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat _ModelViewInvScale; 3564e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLboolean _NeedEyeCoords; 3565e00ac11d4dd05c56584622dc2707bbdcfe4b2707Brian Paul GLboolean _ForceEyeCoords; 35665e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3567bedd20743b80b5a6d7d9954e4479a44a76c7ea02Brian Paul GLuint TextureStateTimestamp; /**< detect changes to shared state */ 35685ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell 356933e9ac20e3b399c6ec6ec2f586a9402b68590992Brian Paul struct gl_list_extensions *ListExt; /**< driver dlist extensions */ 35705e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 35716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** \name For debugging/development only */ 35726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 35735e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLboolean FirstTimeCurrent; 35746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 35755e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3576d09209f5530e8bba78e4e0ec62b2027c588cc8f3Eric Anholt /** software compression/decompression supported or not */ 3577d09209f5530e8bba78e4e0ec62b2027c588cc8f3Eric Anholt GLboolean Mesa_DXTn; 3578d09209f5530e8bba78e4e0ec62b2027c588cc8f3Eric Anholt 3579001d944fd50e0579739b8865e6e09be5d267c05aEric Anholt GLboolean TextureFormatSupported[MESA_FORMAT_COUNT]; 3580001d944fd50e0579739b8865e6e09be5d267c05aEric Anholt 3581113403ef51e2ec764db061aabf569d6f1a1a3ef0Keith Whitwell /** 3582113403ef51e2ec764db061aabf569d6f1a1a3ef0Keith Whitwell * Use dp4 (rather than mul/mad) instructions for position 3583113403ef51e2ec764db061aabf569d6f1a1a3ef0Keith Whitwell * transformation? 3584113403ef51e2ec764db061aabf569d6f1a1a3ef0Keith Whitwell */ 3585113403ef51e2ec764db061aabf569d6f1a1a3ef0Keith Whitwell GLboolean mvp_with_dp4; 3586113403ef51e2ec764db061aabf569d6f1a1a3ef0Keith Whitwell 3587aee96806f049c17384a8edc11acce76257d98a57Paul Berry GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */ 3588aee96806f049c17384a8edc11acce76257d98a57Paul Berry 35896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /** 35906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \name Hooks for module contexts. 35916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * 35926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * These will eventually live in the driver or elsewhere. 35935e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen */ 35946dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@{*/ 35955e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen void *swrast_context; 35965e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen void *swsetup_context; 35975e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen void *swtnl_context; 35985e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen void *swtnl_im; 3599b939adfa155f2b3ca5c5226e86da85629654d79bKeith Whitwell struct st_context *st; 3600cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell void *aelt_context; 36016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /*@}*/ 36025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen}; 36035e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 36045e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 36051984aabe8362ee2b29711d2fa08e56e341eafdddBrian Paul#ifdef DEBUG 3606ba8f6172bdfb44594537a304225b54152584d701Gareth Hughesextern int MESA_VERBOSE; 36075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansenextern int MESA_DEBUG_FLAGS; 3608b65bc4f87b356cf6228151cd2f341432e80dc6b8Brian Paul# define MESA_FUNCTION __FUNCTION__ 36095e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#else 36105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen# define MESA_VERBOSE 0 36115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen# define MESA_DEBUG_FLAGS 0 3612b65bc4f87b356cf6228151cd2f341432e80dc6b8Brian Paul# define MESA_FUNCTION "a function" 36135e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen# ifndef NDEBUG 36145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen# define NDEBUG 36155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen# endif 36165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#endif 36175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 36185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3619ade1cc992410c8696fdfe0f84fb613fd0dc8099fBrian Paul/** The MESA_VERBOSE var is a bitmask of these flags */ 36204dafbc3dc75be565704f437016f70a63c48d1539Brian Paulenum _verbose 36214dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 3622b3678f108044302dc6f50a14568d47c1b345df9bGareth Hughes VERBOSE_VARRAY = 0x0001, 3623b3678f108044302dc6f50a14568d47c1b345df9bGareth Hughes VERBOSE_TEXTURE = 0x0002, 3624d9099f8602eb6d15e9fc2e0b0987e7a58fb98b68Brian Paul VERBOSE_MATERIAL = 0x0004, 3625b3678f108044302dc6f50a14568d47c1b345df9bGareth Hughes VERBOSE_PIPELINE = 0x0008, 3626b3678f108044302dc6f50a14568d47c1b345df9bGareth Hughes VERBOSE_DRIVER = 0x0010, 3627b3678f108044302dc6f50a14568d47c1b345df9bGareth Hughes VERBOSE_STATE = 0x0020, 3628b3678f108044302dc6f50a14568d47c1b345df9bGareth Hughes VERBOSE_API = 0x0040, 3629306d3fcdbad523428501833405e47e9897896defKeith Whitwell VERBOSE_DISPLAY_LIST = 0x0100, 3630306d3fcdbad523428501833405e47e9897896defKeith Whitwell VERBOSE_LIGHTING = 0x0200, 3631306d3fcdbad523428501833405e47e9897896defKeith Whitwell VERBOSE_PRIMS = 0x0400, 3632269e3895d9837ac7303b91948f003ca5c12c0fe4Keith Whitwell VERBOSE_VERTS = 0x0800, 3633131d42573ce1fc120c8ef75634979b6206e1eb0aBrian Paul VERBOSE_DISASSEM = 0x1000, 36342fd5cb713338e91999a036399a4bea4406687ca0Brian Paul VERBOSE_DRAW = 0x2000, 3635042a333028eba49f21b45cafaf9dd15d34c68033Kristian Høgsberg VERBOSE_SWAPBUFFERS = 0x4000 3636ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes}; 36375e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 36385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3639ade1cc992410c8696fdfe0f84fb613fd0dc8099fBrian Paul/** The MESA_DEBUG_FLAGS var is a bitmask of these flags */ 36404dafbc3dc75be565704f437016f70a63c48d1539Brian Paulenum _debug 36414dafbc3dc75be565704f437016f70a63c48d1539Brian Paul{ 3642da35c2b38c1419690b6647fbc2f930cb04c6877fBrian Paul DEBUG_SILENT = (1 << 0), 364393bcf7825d023d3d7108bc47a7a0929338bba6b9Brian Paul DEBUG_ALWAYS_FLUSH = (1 << 1), 364493bcf7825d023d3d7108bc47a7a0929338bba6b9Brian Paul DEBUG_INCOMPLETE_TEXTURE = (1 << 2), 364593bcf7825d023d3d7108bc47a7a0929338bba6b9Brian Paul DEBUG_INCOMPLETE_FBO = (1 << 3) 3646ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes}; 36475e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 36485e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 36495e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 365063e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#ifdef __cplusplus 365163e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca} 365263e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#endif 365363e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 36541d5a68970f1d8fcca29ce24e6667a143733197f0Brian Paul#endif /* MTYPES_H */ 3655