1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 7.7 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file mtypes.h 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Main Mesa data structures. 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Please try to mark derived values with a leading underscore ('_'). 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef MTYPES_H 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MTYPES_H 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glheader.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/config.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mfeatures.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glapi/glapi.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "math/m_matrix.h" /* GLmatrix */ 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/simple_list.h" /* struct simple_node */ 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/formats.h" /* MESA_FORMAT_COUNT */ 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name 64-bit extension of GLbitfield. 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef GLuint64 GLbitfield64; 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Set a single bit */ 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BITFIELD64_BIT(b) ((GLbitfield64)1 << (b)) 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Set all bits up to excluding bit b */ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BITFIELD64_MASK(b) \ 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((b) == 64 ? (~(GLbitfield64)0) : BITFIELD64_BIT(b) - 1) 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Set count bits starting from bit b */ 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BITFIELD64_RANGE(b, count) \ 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (BITFIELD64_MASK((b) + (count)) & ~BITFIELD64_MASK(b)) 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Some forward type declarations 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct _mesa_HashTable; 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_attrib_node; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_list_extensions; 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_meta_state; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_program_cache; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_texture_object; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_context; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct st_context; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_uniform_storage; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct prog_instruction; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_program_parameter_list; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Extra draw modes beyond GL_POINTS, GL_TRIANGLE_FAN, etc */ 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PRIM_OUTSIDE_BEGIN_END (GL_POLYGON+1) 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2) 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PRIM_UNKNOWN (GL_POLYGON+3) 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indexes for vertex program attributes. 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_NV_vertex_program aliases generic attributes over the conventional 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * attributes. In GL_ARB_vertex_program shader the aliasing is optional. 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * generic attributes are distinct/separate). 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_POS = 0, 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_WEIGHT = 1, 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_NORMAL = 2, 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_COLOR0 = 3, 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_COLOR1 = 4, 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_FOG = 5, 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_COLOR_INDEX = 6, 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_EDGEFLAG = 7, 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX0 = 8, 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX1 = 9, 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX2 = 10, 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX3 = 11, 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX4 = 12, 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX5 = 13, 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX6 = 14, 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_TEX7 = 15, 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_POINT_SIZE = 16, 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC0 = 17, 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC1 = 18, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC2 = 19, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC3 = 20, 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC4 = 21, 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC5 = 22, 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC6 = 23, 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC7 = 24, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC8 = 25, 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC9 = 26, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC10 = 27, 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC11 = 28, 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC12 = 29, 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC13 = 30, 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC14 = 31, 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_GENERIC15 = 32, 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_ATTRIB_MAX = 33 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_vert_attrib; 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Symbolic constats to help iterating over 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * specific blocks of vertex attributes. 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VERT_ATTRIB_FF 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * includes all fixed function attributes as well as 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the aliased GL_NV_vertex_program shader attributes. 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VERT_ATTRIB_TEX 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * include the classic texture coordinate attributes. 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Is a subset of VERT_ATTRIB_FF. 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VERT_ATTRIB_GENERIC_NV 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * include the NV shader attributes. 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Is a subset of VERT_ATTRIB_FF. 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VERT_ATTRIB_GENERIC 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * include the OpenGL 2.0+ GLSL generic shader attributes. 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These alias the generic GL_ARB_vertex_shader attributes. 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_FF(i) (VERT_ATTRIB_POS + (i)) 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_FF_MAX VERT_ATTRIB_GENERIC0 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_TEX(i) (VERT_ATTRIB_TEX0 + (i)) 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_TEX_MAX MAX_TEXTURE_COORD_UNITS 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_GENERIC_NV(i) (VERT_ATTRIB_POS + (i)) 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_GENERIC_NV_MAX MAX_VERTEX_GENERIC_ATTRIBS 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_GENERIC(i) (VERT_ATTRIB_GENERIC0 + (i)) 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_ATTRIB_GENERIC_MAX MAX_VERTEX_GENERIC_ATTRIBS 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bitflags for vertex attributes. 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are used in bitfields in many places. 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_POS BITFIELD64_BIT(VERT_ATTRIB_POS) 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_WEIGHT BITFIELD64_BIT(VERT_ATTRIB_WEIGHT) 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_NORMAL BITFIELD64_BIT(VERT_ATTRIB_NORMAL) 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_COLOR0 BITFIELD64_BIT(VERT_ATTRIB_COLOR0) 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_COLOR1 BITFIELD64_BIT(VERT_ATTRIB_COLOR1) 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_FOG BITFIELD64_BIT(VERT_ATTRIB_FOG) 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_COLOR_INDEX BITFIELD64_BIT(VERT_ATTRIB_COLOR_INDEX) 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_EDGEFLAG BITFIELD64_BIT(VERT_ATTRIB_EDGEFLAG) 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX0 BITFIELD64_BIT(VERT_ATTRIB_TEX0) 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX1 BITFIELD64_BIT(VERT_ATTRIB_TEX1) 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX2 BITFIELD64_BIT(VERT_ATTRIB_TEX2) 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX3 BITFIELD64_BIT(VERT_ATTRIB_TEX3) 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX4 BITFIELD64_BIT(VERT_ATTRIB_TEX4) 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX5 BITFIELD64_BIT(VERT_ATTRIB_TEX5) 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX6 BITFIELD64_BIT(VERT_ATTRIB_TEX6) 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX7 BITFIELD64_BIT(VERT_ATTRIB_TEX7) 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_POINT_SIZE BITFIELD64_BIT(VERT_ATTRIB_POINT_SIZE) 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_GENERIC0 BITFIELD64_BIT(VERT_ATTRIB_GENERIC0) 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT(i) BITFIELD64_BIT(i) 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_MAX) 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_FF(i) VERT_BIT(i) 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_FF_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_FF_MAX) 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX(i) VERT_BIT(VERT_ATTRIB_TEX(i)) 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_TEX_ALL \ 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITFIELD64_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX) 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_FF_NVALIAS \ 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITFIELD64_RANGE(VERT_ATTRIB_POS, VERT_ATTRIB_TEX(VERT_ATTRIB_TEX_MAX)) 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_GENERIC_NV(i) VERT_BIT(VERT_ATTRIB_GENERIC_NV(i)) 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_GENERIC_NV_ALL \ 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITFIELD64_RANGE(VERT_ATTRIB_GENERIC_NV(0), VERT_ATTRIB_GENERIC_NV_MAX) 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_GENERIC(i) VERT_BIT(VERT_ATTRIB_GENERIC(i)) 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VERT_BIT_GENERIC_ALL \ 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BITFIELD64_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX) 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indexes for vertex program result attributes. Note that 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _mesa_vert_result_to_frag_attrib() and _mesa_frag_attrib_to_vert_result() make 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * assumptions about the layout of this enum. 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_HPOS = 0, 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_COL0 = 1, 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_COL1 = 2, 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_FOGC = 3, 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX0 = 4, 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX1 = 5, 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX2 = 6, 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX3 = 7, 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX4 = 8, 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX5 = 9, 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX6 = 10, 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_TEX7 = 11, 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_PSIZ = 12, 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_BFC0 = 13, 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_BFC1 = 14, 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_EDGE = 15, 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_CLIP_VERTEX = 16, 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_CLIP_DIST0 = 17, 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_CLIP_DIST1 = 18, 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_VAR0 = 19, /**< shader varying */ 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERT_RESULT_MAX = (VERT_RESULT_VAR0 + MAX_VARYING) 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_vert_result; 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************/ 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indexes for geometry program attributes. 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_POSITION = 0, 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_COLOR0 = 1, 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_COLOR1 = 2, 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_SECONDARY_COLOR0 = 3, 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_SECONDARY_COLOR1 = 4, 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_FOG_FRAG_COORD = 5, 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_POINT_SIZE = 6, 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_CLIP_VERTEX = 7, 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_PRIMITIVE_ID = 8, 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_TEX_COORD = 9, 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_VAR0 = 16, 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_ATTRIB_MAX = (GEOM_ATTRIB_VAR0 + MAX_VARYING) 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_geom_attrib; 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bitflags for geometry attributes. 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are used in bitfields in many places. 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_COLOR0 (1 << GEOM_ATTRIB_COLOR0) 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_COLOR1 (1 << GEOM_ATTRIB_COLOR1) 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_SCOLOR0 (1 << GEOM_ATTRIB_SECONDARY_COLOR0) 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_SCOLOR1 (1 << GEOM_ATTRIB_SECONDARY_COLOR1) 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_TEX_COORD (1 << GEOM_ATTRIB_TEX_COORD) 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_FOG_COORD (1 << GEOM_ATTRIB_FOG_FRAG_COORD) 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_POSITION (1 << GEOM_ATTRIB_POSITION) 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_POINT_SIDE (1 << GEOM_ATTRIB_POINT_SIZE) 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_CLIP_VERTEX (1 << GEOM_ATTRIB_CLIP_VERTEX) 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_PRIM_ID (1 << GEOM_ATTRIB_PRIMITIVE_ID) 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_VAR0 (1 << GEOM_ATTRIB_VAR0) 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEOM_BIT_VAR(g) (1 << (GEOM_BIT_VAR0 + (g))) 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indexes for geometry program result attributes 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_POS = 0, 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_COL0 = 1, 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_COL1 = 2, 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_SCOL0 = 3, 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_SCOL1 = 4, 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_FOGC = 5, 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX0 = 6, 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX1 = 7, 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX2 = 8, 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX3 = 9, 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX4 = 10, 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX5 = 11, 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX6 = 12, 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_TEX7 = 13, 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_PSIZ = 14, 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_CLPV = 15, 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_PRID = 16, 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_LAYR = 17, 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_VAR0 = 18, /**< shader varying, should really be 16 */ 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ### we need to -2 because var0 is 18 instead 16 like in the others */ 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GEOM_RESULT_MAX = (GEOM_RESULT_VAR0 + MAX_VARYING - 2) 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_geom_result; 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indexes for fragment program input attributes. Note that 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _mesa_vert_result_to_frag_attrib() and frag_attrib_to_vert_result() make 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * assumptions about the layout of this enum. 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_WPOS = 0, 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_COL0 = 1, 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_COL1 = 2, 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_FOGC = 3, 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX0 = 4, 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX1 = 5, 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX2 = 6, 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX3 = 7, 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX4 = 8, 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX5 = 9, 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX6 = 10, 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_TEX7 = 11, 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_FACE = 12, /**< front/back face */ 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_PNTC = 13, /**< sprite/point coord */ 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_CLIP_DIST0 = 14, 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_CLIP_DIST1 = 15, 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_VAR0 = 16, /**< shader varying */ 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING) 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_frag_attrib; 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Convert from a gl_vert_result value to the corresponding gl_frag_attrib. 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VERT_RESULT_HPOS is converted to FRAG_ATTRIB_WPOS. 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * gl_vert_result values which have no corresponding gl_frag_attrib 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (VERT_RESULT_PSIZ, VERT_RESULT_BFC0, VERT_RESULT_BFC1, and 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VERT_RESULT_EDGE) are converted to a value of -1. 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline int 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_vert_result_to_frag_attrib(gl_vert_result vert_result) 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vert_result >= VERT_RESULT_CLIP_DIST0) 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vert_result - VERT_RESULT_CLIP_DIST0 + FRAG_ATTRIB_CLIP_DIST0; 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (vert_result <= VERT_RESULT_TEX7) 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vert_result; 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Convert from a gl_frag_attrib value to the corresponding gl_vert_result. 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FRAG_ATTRIB_WPOS is converted to VERT_RESULT_HPOS. 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * gl_frag_attrib values which have no corresponding gl_vert_result 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (FRAG_ATTRIB_FACE and FRAG_ATTRIB_PNTC) are converted to a value of -1. 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline int 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_frag_attrib_to_vert_result(gl_frag_attrib frag_attrib) 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (frag_attrib <= FRAG_ATTRIB_TEX7) 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return frag_attrib; 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (frag_attrib >= FRAG_ATTRIB_CLIP_DIST0) 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return frag_attrib - FRAG_ATTRIB_CLIP_DIST0 + VERT_RESULT_CLIP_DIST0; 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bitflags for fragment program input attributes. 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_WPOS (1 << FRAG_ATTRIB_WPOS) 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_COL0 (1 << FRAG_ATTRIB_COL0) 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_COL1 (1 << FRAG_ATTRIB_COL1) 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_FOGC (1 << FRAG_ATTRIB_FOGC) 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_FACE (1 << FRAG_ATTRIB_FACE) 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_PNTC (1 << FRAG_ATTRIB_PNTC) 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX0 (1 << FRAG_ATTRIB_TEX0) 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX1 (1 << FRAG_ATTRIB_TEX1) 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX2 (1 << FRAG_ATTRIB_TEX2) 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX3 (1 << FRAG_ATTRIB_TEX3) 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX4 (1 << FRAG_ATTRIB_TEX4) 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX5 (1 << FRAG_ATTRIB_TEX5) 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX6 (1 << FRAG_ATTRIB_TEX6) 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX7 (1 << FRAG_ATTRIB_TEX7) 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_VAR0 (1 << FRAG_ATTRIB_VAR0) 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_TEX(U) (FRAG_BIT_TEX0 << (U)) 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BIT_VAR(V) (FRAG_BIT_VAR0 << (V)) 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRAG_BITS_TEX_ANY (FRAG_BIT_TEX0| \ 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_BIT_TEX1| \ 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_BIT_TEX2| \ 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_BIT_TEX3| \ 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_BIT_TEX4| \ 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_BIT_TEX5| \ 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_BIT_TEX6| \ 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_BIT_TEX7) 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fragment program results 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_RESULT_DEPTH = 0, 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_RESULT_STENCIL = 1, 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If a single color should be written to all render targets, this 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * register is written. No FRAG_RESULT_DATAn will be written. 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_RESULT_COLOR = 2, 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n] 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or ARB_fragment_program fragment.color[n]) color results. If 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * any are written, FRAG_RESULT_COLOR will not be written. 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_RESULT_DATA0 = 3, 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS) 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_frag_result; 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indexes for all renderbuffers 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* the four standard color buffers */ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_FRONT_LEFT, 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BACK_LEFT, 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_FRONT_RIGHT, 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BACK_RIGHT, 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_DEPTH, 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_STENCIL, 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_ACCUM, 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* optional aux buffer */ 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_AUX0, 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* generic renderbuffers */ 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR0, 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR1, 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR2, 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR3, 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR4, 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR5, 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR6, 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COLOR7, 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_COUNT 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_buffer_index; 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bit flags for all renderbuffers 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT) 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT) 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT) 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT) 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_AUX0 (1 << BUFFER_AUX0) 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_AUX1 (1 << BUFFER_AUX1) 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_AUX2 (1 << BUFFER_AUX2) 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_AUX3 (1 << BUFFER_AUX3) 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH) 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL) 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM) 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0) 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1) 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2) 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3) 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4) 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5) 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6) 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7) 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mask of all the color buffer bits (but not accum). 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \ 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_BACK_LEFT | \ 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_FRONT_RIGHT | \ 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_BACK_RIGHT | \ 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_AUX0 | \ 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR0 | \ 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR1 | \ 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR2 | \ 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR3 | \ 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR4 | \ 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR5 | \ 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR6 | \ 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BUFFER_BIT_COLOR7) 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Framebuffer configuration (aka visual / pixelformat) 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: some of these fields should be boolean, but it appears that 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * code in drivers/dri/common/util.c requires int-sized fields. 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_config 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean rgbMode; 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean floatMode; 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean colorIndexMode; /* XXX is this used anywhere? */ 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint doubleBufferMode; 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint stereoMode; 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean haveAccumBuffer; 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean haveDepthBuffer; 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean haveStencilBuffer; 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */ 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint redMask, greenMask, blueMask, alphaMask; 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint rgbBits; /* total bits for rgb */ 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint indexBits; /* total bits for colorindex */ 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint depthBits; 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint stencilBits; 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint numAuxBuffers; 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint level; 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* EXT_visual_rating / GLX 1.2 */ 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint visualRating; 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* EXT_visual_info / GLX 1.2 */ 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint transparentPixel; 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* colors are floats scaled to ints */ 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha; 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint transparentIndex; 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ARB_multisample / SGIS_multisample */ 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint sampleBuffers; 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint samples; 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* SGIX_pbuffer / GLX 1.3 */ 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint maxPbufferWidth; 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint maxPbufferHeight; 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint maxPbufferPixels; 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint optimalPbufferWidth; /* Only for SGIX_pbuffer. */ 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint optimalPbufferHeight; /* Only for SGIX_pbuffer. */ 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* OML_swap_method */ 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint swapMethod; 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* EXT_texture_from_pixmap */ 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint bindToTextureRgb; 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint bindToTextureRgba; 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint bindToMipmapTexture; 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint bindToTextureTargets; 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint yInverted; 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* EXT_framebuffer_sRGB */ 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint sRGBCapable; 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Bit flags used for updating material values. 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_FRONT_AMBIENT 0 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_BACK_AMBIENT 1 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_FRONT_DIFFUSE 2 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_BACK_DIFFUSE 3 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_FRONT_SPECULAR 4 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_BACK_SPECULAR 5 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_FRONT_EMISSION 6 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_BACK_EMISSION 7 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_FRONT_SHININESS 8 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_BACK_SHININESS 9 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_FRONT_INDEXES 10 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_BACK_INDEXES 11 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_MAX 12 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f)) 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f)) 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f)) 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f)) 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f)) 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f)) 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_INDEX_AMBIENT 0 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_INDEX_DIFFUSE 1 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_INDEX_SPECULAR 2 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_FRONT_AMBIENT (1<<MAT_ATTRIB_FRONT_AMBIENT) 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_BACK_AMBIENT (1<<MAT_ATTRIB_BACK_AMBIENT) 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_FRONT_DIFFUSE (1<<MAT_ATTRIB_FRONT_DIFFUSE) 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_BACK_DIFFUSE (1<<MAT_ATTRIB_BACK_DIFFUSE) 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_FRONT_SPECULAR (1<<MAT_ATTRIB_FRONT_SPECULAR) 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_BACK_SPECULAR (1<<MAT_ATTRIB_BACK_SPECULAR) 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_FRONT_EMISSION (1<<MAT_ATTRIB_FRONT_EMISSION) 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_BACK_EMISSION (1<<MAT_ATTRIB_BACK_EMISSION) 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_FRONT_SHININESS (1<<MAT_ATTRIB_FRONT_SHININESS) 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_BACK_SHININESS (1<<MAT_ATTRIB_BACK_SHININESS) 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_FRONT_INDEXES (1<<MAT_ATTRIB_FRONT_INDEXES) 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAT_BIT_BACK_INDEXES (1<<MAT_ATTRIB_BACK_INDEXES) 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FRONT_MATERIAL_BITS (MAT_BIT_FRONT_EMISSION | \ 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_FRONT_AMBIENT | \ 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_FRONT_DIFFUSE | \ 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_FRONT_SPECULAR | \ 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_FRONT_SHININESS | \ 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_FRONT_INDEXES) 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BACK_MATERIAL_BITS (MAT_BIT_BACK_EMISSION | \ 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_BACK_AMBIENT | \ 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_BACK_DIFFUSE | \ 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_BACK_SPECULAR | \ 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_BACK_SHININESS | \ 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAT_BIT_BACK_INDEXES) 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ALL_MATERIAL_BITS (FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS) 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Material state. 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_material 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Attrib[MAT_ATTRIB_MAX][4]; 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Light state flags. 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define LIGHT_SPOT 0x1 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define LIGHT_LOCAL_VIEWER 0x2 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define LIGHT_POSITIONAL 0x4 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER) 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Light source state. 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_light 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_light *next; /**< double linked list with sentinel */ 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_light *prev; 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Ambient[4]; /**< ambient color */ 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Diffuse[4]; /**< diffuse color */ 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Specular[4]; /**< specular color */ 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat EyePosition[4]; /**< position in eye coordinates */ 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat SpotDirection[4]; /**< spotlight direction in eye coordinates */ 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat SpotExponent; 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat SpotCutoff; /**< in degrees */ 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _CosCutoff; /**< = MAX(0, cos(SpotCutoff)) */ 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat ConstantAttenuation; 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat LinearAttenuation; 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat QuadraticAttenuation; 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< On/off flag */ 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Derived fields 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _Flags; /**< Mask of LIGHT_x bits defined above */ 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _Position[4]; /**< position in eye/obj coordinates */ 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _VP_inf_norm[3]; /**< Norm direction to infinite light */ 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _h_inf_norm[3]; /**< Norm( _VP_inf_norm + <0,0,1> ) */ 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */ 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _VP_inf_spot_attenuation; 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _MatAmbient[2][3]; /**< material ambient * light ambient */ 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _MatDiffuse[2][3]; /**< material diffuse * light diffuse */ 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _MatSpecular[2][3]; /**< material spec * light specular */ 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Light model state. 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_lightmodel 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Ambient[4]; /**< ambient color */ 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean LocalViewer; /**< Local (or infinite) view point? */ 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean TwoSide; /**< Two (or one) sided lighting? */ 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ColorControl; /**< either GL_SINGLE_COLOR 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or GL_SEPARATE_SPECULAR_COLOR */ 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT) 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_accum_attrib 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat ClearColor[4]; /**< Accumulation buffer clear color */ 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Used for storing clear color, texture border color, etc. 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The float values are typically unclamped. 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion gl_color_union 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat f[4]; 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint i[4]; 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ui[4]; 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Color buffer attribute group (GL_COLOR_BUFFER_BIT). 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_colorbuffer_attrib 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ClearIndex; /**< Index for glClear */ 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union gl_color_union ClearColor; /**< Color for glClear, unclamped */ 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint IndexMask; /**< Color index write mask */ 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte ColorMask[MAX_DRAW_BUFFERS][4]; /**< Each flag is 0xff or 0x0 */ 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */ 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name alpha testing 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean AlphaEnabled; /**< Alpha test enabled flag */ 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum AlphaFunc; /**< Alpha test function */ 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat AlphaRefUnclamped; 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLclampf AlphaRef; /**< Alpha reference value */ 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Blending 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield BlendEnabled; /**< Per-buffer blend enable flags */ 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* NOTE: this does _not_ depend on fragment clamping or any other clamping 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * control, only on the fixed-pointness of the render target. 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The query does however depend on fragment color clamping. 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat BlendColorUnclamped[4]; /**< Blending color */ 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat BlendColor[4]; /**< Blending color */ 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum SrcRGB; /**< RGB blend source term */ 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum DstRGB; /**< RGB blend dest term */ 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum SrcA; /**< Alpha blend source term */ 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum DstA; /**< Alpha blend dest term */ 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum EquationRGB; /**< GL_ADD, GL_SUBTRACT, etc. */ 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum EquationA; /**< GL_ADD, GL_SUBTRACT, etc. */ 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Set if any blend factor uses SRC1. Computed at the time blend factors 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * get set. 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _UsesDualSrc; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } Blend[MAX_DRAW_BUFFERS]; 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Are the blend func terms currently different for each buffer/target? */ 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _BlendFuncPerBuffer; 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Are the blend equations currently different for each buffer/target? */ 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _BlendEquationPerBuffer; 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Logic op 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum LogicOp; /**< Logic operator */ 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean IndexLogicOpEnabled; /**< Color index logic op enabled flag */ 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ColorLogicOpEnabled; /**< RGBA logic op enabled flag */ 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean DitherFlag; /**< Dither enable flag */ 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _ClampFragmentColor; /** < with GL_FIXED_ONLY_ARB resolved */ 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _ClampReadColor; /** < with GL_FIXED_ONLY_ARB resolved */ 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean sRGBEnabled; /**< Framebuffer sRGB blending/updating requested */ 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Current attribute group (GL_CURRENT_BIT). 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_current_attrib 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Current vertex attributes. 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \note Values are valid only after FLUSH_VERTICES has been called. 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \note Index and Edgeflag current values are stored as floats in the 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SIX and SEVEN attribute slots. 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */ 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Current raster position attributes (always valid). 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \note This set of attributes is very similar to the SWvertex struct. 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat RasterPos[4]; 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat RasterDistance; 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat RasterColor[4]; 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat RasterSecondaryColor[4]; 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4]; 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean RasterPosValid; 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT). 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_depthbuffer_attrib 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Func; /**< Function for depth buffer compare */ 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLclampd Clear; /**< Value to clear depth buffer to */ 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Test; /**< Depth buffering enabled flag */ 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Mask; /**< Depth buffer writable? */ 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */ 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */ 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Evaluator attribute group (GL_EVAL_BIT). 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_eval_attrib 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Enable bits 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1Color4; 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1Index; 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1Normal; 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1TextureCoord1; 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1TextureCoord2; 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1TextureCoord3; 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1TextureCoord4; 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1Vertex3; 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1Vertex4; 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map1Attrib[16]; /* GL_NV_vertex_program */ 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2Color4; 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2Index; 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2Normal; 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2TextureCoord1; 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2TextureCoord2; 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2TextureCoord3; 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2TextureCoord4; 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2Vertex3; 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2Vertex4; 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Map2Attrib[16]; /* GL_NV_vertex_program */ 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean AutoNormal; 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Map Grid endpoints and divisions and calculated du values 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MapGrid1un; 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du; 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MapGrid2un, MapGrid2vn; 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du; 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv; 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fog attribute group (GL_FOG_BIT). 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_fog_attrib 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< Fog enabled flag */ 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat ColorUnclamped[4]; /**< Fog color */ 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Color[4]; /**< Fog color */ 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Density; /**< Density >= 0.0 */ 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Start; /**< Start distance in eye coords */ 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat End; /**< End distance in eye coords */ 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Index; /**< Fog index */ 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Mode; /**< Fog mode */ 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ColorSumEnabled; 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum FogCoordinateSource; /**< GL_EXT_fog_coord */ 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _Scale; /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */ 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum FogDistanceMode; /**< GL_NV_fog_distance */ 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Hint attribute group (GL_HINT_BIT). 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE. 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_hint_attrib 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum PerspectiveCorrection; 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum PointSmooth; 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum LineSmooth; 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum PolygonSmooth; 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Fog; 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ClipVolumeClipping; /**< GL_EXT_clip_volume_hint */ 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum TextureCompression; /**< GL_ARB_texture_compression */ 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Lighting attribute group (GL_LIGHT_BIT). 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_light_attrib 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_light Light[MAX_LIGHTS]; /**< Array of light sources */ 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_lightmodel Model; /**< Lighting model */ 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Front and back material values. 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: must call FLUSH_VERTICES() before using. 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_material Material; 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< Lighting enabled flag */ 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ShadeModel; /**< GL_FLAT or GL_SMOOTH */ 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ProvokingVertex; /**< GL_EXT_provoking_vertex */ 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */ 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */ 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ColorMaterialEnabled; 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ClampVertexColor; /**< GL_TRUE, GL_FALSE, GL_FIXED_ONLY */ 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _ClampVertexColor; 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_light EnabledList; /**< List sentinel */ 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Derived state for optimizations: 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _NeedEyeCoords; 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _NeedVertices; /**< Use fast shader? */ 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _BaseColor[2][3]; 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Line attribute group (GL_LINE_BIT). 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_line_attrib 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SmoothFlag; /**< GL_LINE_SMOOTH enabled? */ 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean StippleFlag; /**< GL_LINE_STIPPLE enabled? */ 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLushort StipplePattern; /**< Stipple pattern */ 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint StippleFactor; /**< Stipple repeat factor */ 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Width; /**< Line width */ 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Display list attribute group (GL_LIST_BIT). 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_list_attrib 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ListBase; 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Multisample attribute group (GL_MULTISAMPLE_BIT). 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_multisample_attrib 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Enabled; /**< true if Enabled and multisample buffer */ 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SampleAlphaToCoverage; 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SampleAlphaToOne; 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SampleCoverage; 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat SampleCoverageValue; 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SampleCoverageInvert; 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A pixelmap (see glPixelMap) 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_pixelmap 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint Size; 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Map[MAX_PIXEL_MAP_TABLE]; 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Collection of all pixelmaps 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_pixelmaps 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap RtoR; /**< i.e. GL_PIXEL_MAP_R_TO_R */ 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap GtoG; 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap BtoB; 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap AtoA; 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap ItoR; 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap ItoG; 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap ItoB; 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap ItoA; 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap ItoI; 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmap StoS; 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Pixel attribute group (GL_PIXEL_MODE_BIT). 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_pixel_attrib 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ReadBuffer; /**< source buffer for glRead/CopyPixels() */ 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*--- Begin Pixel Transfer State ---*/ 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Fields are in the order in which they're applied... */ 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Scale & Bias (index shift, offset) */ 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat RedBias, RedScale; 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat GreenBias, GreenScale; 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat BlueBias, BlueScale; 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat AlphaBias, AlphaScale; 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat DepthBias, DepthScale; 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint IndexShift, IndexOffset; 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Pixel Maps */ 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Note: actual pixel maps are not part of this attrib group */ 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean MapColorFlag; 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean MapStencilFlag; 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*--- End Pixel Transfer State ---*/ 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** glPixelZoom */ 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat ZoomX, ZoomY; 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Point attribute group (GL_POINT_BIT). 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_point_attrib 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SmoothFlag; /**< True if GL_POINT_SMOOTH is enabled */ 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Size; /**< User-specified point size */ 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Params[3]; /**< GL_EXT_point_parameters */ 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */ 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Threshold; /**< GL_EXT_point_parameters */ 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */ 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */ 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< GL_ARB_point_sprite*/ 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */ 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum SpriteOrigin; /**< GL_ARB_point_sprite */ 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Polygon attribute group (GL_POLYGON_BIT). 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_polygon_attrib 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum FrontFace; /**< Either GL_CW or GL_CCW */ 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _FrontBit; /**< 0=GL_CCW, 1=GL_CW */ 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean CullFlag; /**< Culling on/off flag */ 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */ 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */ 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum CullFaceMode; /**< Culling mode GL_FRONT or GL_BACK */ 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat OffsetFactor; /**< Polygon offset factor, from user */ 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat OffsetUnits; /**< Polygon offset units, from user */ 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OffsetPoint; /**< Offset in GL_POINT mode */ 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OffsetLine; /**< Offset in GL_LINE mode */ 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OffsetFill; /**< Offset in GL_FILL mode */ 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Scissor attributes (GL_SCISSOR_BIT). 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_scissor_attrib 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< Scissor test enabled? */ 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint X, Y; /**< Lower left corner of box */ 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei Width, Height; /**< Size of box */ 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Stencil attribute group (GL_STENCIL_BUFFER_BIT). 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Three sets of stencil data are tracked so that OpenGL 2.0, 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * simultaneously. In each of the stencil state arrays, element 0 corresponds 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to GL_FRONT. Element 1 corresponds to the OpenGL 2.0 / 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_ATI_separate_stencil GL_BACK state. Element 2 corresponds to the 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_EXT_stencil_two_side GL_BACK state. 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The derived value \c _BackFace is either 1 or 2 depending on whether or 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled. 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The derived value \c _TestTwoSide is set when the front-face and back-face 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * stencil state are different. 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_stencil_attrib 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< Enabled flag */ 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Enabled; /**< Enabled and stencil buffer present */ 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _TestTwoSide; 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Function[3]; /**< Stencil function */ 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum FailFunc[3]; /**< Fail function */ 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ZPassFunc[3]; /**< Depth buffer pass function */ 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ZFailFunc[3]; /**< Depth buffer fail function */ 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint Ref[3]; /**< Reference value */ 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ValueMask[3]; /**< Value mask */ 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint WriteMask[3]; /**< Write mask */ 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Clear; /**< Clear value */ 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * An index for each type of texture object. These correspond to the GL 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc. 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: the order is from highest priority to lowest priority. 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_BUFFER_INDEX, 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_2D_ARRAY_INDEX, 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_1D_ARRAY_INDEX, 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_EXTERNAL_INDEX, 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_CUBE_INDEX, 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_3D_INDEX, 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_RECT_INDEX, 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_2D_INDEX, 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXTURE_1D_INDEX, 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NUM_TEXTURE_TARGETS 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_texture_index; 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bit flags for each type of texture object 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Used for Texture.Unit[]._ReallyEnabled flags. 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_BUFFER_BIT (1 << TEXTURE_BUFFER_INDEX) 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_EXTERNAL_BIT (1 << TEXTURE_EXTERNAL_INDEX) 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX) 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX) 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture image state. Drivers will typically create a subclass of this 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * with extra fields for memory buffers, etc. 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_texture_image 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint InternalFormat; /**< Internal format as given by the user */ 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_LUMINANCE, GL_LUMINANCE_ALPHA, 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_INTENSITY, GL_DEPTH_COMPONENT or 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_DEPTH_STENCIL_EXT only. Used for 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * choosing TexEnv arithmetic. 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_format TexFormat; /**< The actual texture memory format */ 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Border; /**< 0 or 1 */ 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Width; /**< = 2^WidthLog2 + 2*Border */ 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Height; /**< = 2^HeightLog2 + 2*Border */ 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Depth; /**< = 2^DepthLog2 + 2*Border */ 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Width2; /**< = Width - 2*Border */ 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Height2; /**< = Height - 2*Border */ 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Depth2; /**< = Depth - 2*Border */ 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint WidthLog2; /**< = log2(Width2) */ 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint HeightLog2; /**< = log2(Height2) */ 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint DepthLog2; /**< = log2(Depth2) */ 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNumLevels; /**< = maximum possible number of mipmap 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org levels, computed from the dimensions */ 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *TexObject; /**< Pointer back to parent object */ 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Level; /**< Which mipmap level am I? */ 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Cube map face: index into gl_texture_object::Image[] array */ 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Face; 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indexes for cube map faces. 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FACE_POS_X = 0, 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FACE_NEG_X = 1, 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FACE_POS_Y = 2, 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FACE_NEG_Y = 3, 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FACE_POS_Z = 4, 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FACE_NEG_Z = 5, 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MAX_FACES = 6 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_face_index; 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Sampler object state. These objects are new with GL_ARB_sampler_objects 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and OpenGL 3.3. Legacy texture objects also contain a sampler object. 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_sampler_object 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum WrapS; /**< S-axis texture image wrap mode */ 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum WrapT; /**< T-axis texture image wrap mode */ 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum WrapR; /**< R-axis texture image wrap mode */ 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum MinFilter; /**< minification filter */ 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum MagFilter; /**< magnification filter */ 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union gl_color_union BorderColor; /**< Interpreted according to texture format */ 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */ 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat LodBias; /**< OpenGL 1.4 */ 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum CompareMode; /**< GL_ARB_shadow */ 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum CompareFunc; /**< GL_ARB_shadow */ 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */ 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */ 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture object state. Contains the array of mipmap images, border color, 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * wrap modes, filter modes, and shadow/texcompare state. 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_texture_object 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glthread_Mutex Mutex; /**< for thread safety */ 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; /**< reference count */ 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; /**< the user-visible texture object ID */ 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_sampler_object Sampler; 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum DepthMode; /**< GL_ARB_depth_texture */ 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Priority; /**< in [0,1] */ 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */ 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MaxLevel; /**< max mipmap level, OpenGL 1.2 */ 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */ 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - b in spec) */ 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint CropRect[4]; /**< GL_OES_draw_texture */ 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */ 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */ 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _BaseComplete; /**< Is the base texture level valid? */ 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */ 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */ 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _RenderToTexture; /**< Any rendering to this texture? */ 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Immutable; /**< GL_ARB_texture_storage */ 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Actual texture images, indexed by [cube face] and [mipmap level] */ 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS]; 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_ARB_texture_buffer_object */ 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *BufferObject; 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum BufferObjectFormat; 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Equivalent Mesa format for BufferObjectFormat. */ 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_format _BufferObjectFormat; 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_OES_EGL_image_external */ 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RequiredTextureImageUnits; 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */ 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MAX_COMBINER_TERMS 4 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture combine environment state. 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_tex_env_combine_state 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ModeRGB; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ModeA; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */ 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum SourceRGB[MAX_COMBINER_TERMS]; 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum SourceA[MAX_COMBINER_TERMS]; 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */ 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum OperandRGB[MAX_COMBINER_TERMS]; 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum OperandA[MAX_COMBINER_TERMS]; 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ScaleShiftRGB; /**< 0, 1 or 2 */ 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ScaleShiftA; /**< 0, 1 or 2 */ 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _NumArgsRGB; /**< Number of inputs used for the RGB combiner */ 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _NumArgsA; /**< Number of inputs used for the A combiner */ 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TexGenEnabled flags. 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define S_BIT 1 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define T_BIT 2 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R_BIT 4 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define Q_BIT 8 1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define STR_BITS (S_BIT | T_BIT | R_BIT) 1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bit flag versions of the corresponding GL_ constants. 1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXGEN_SPHERE_MAP 0x1 1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXGEN_OBJ_LINEAR 0x2 1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXGEN_EYE_LINEAR 0x4 1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXGEN_REFLECTION_MAP_NV 0x8 1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXGEN_NORMAL_MAP_NV 0x10 1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXGEN_NEED_NORMALS (TEXGEN_SPHERE_MAP | \ 1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXGEN_REFLECTION_MAP_NV | \ 1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXGEN_NORMAL_MAP_NV) 1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEXGEN_NEED_EYE_COORD (TEXGEN_SPHERE_MAP | \ 1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXGEN_REFLECTION_MAP_NV | \ 1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXGEN_NORMAL_MAP_NV | \ 1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXGEN_EYE_LINEAR) 1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Tex-gen enabled for texture unit? */ 1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ENABLE_TEXGEN(unit) (1 << (unit)) 1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Non-identity texture matrix for texture unit? */ 1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ENABLE_TEXMAT(unit) (1 << (unit)) 1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture coord generation state. 1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_texgen 1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */ 1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */ 1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat ObjectPlane[4]; 1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat EyePlane[4]; 1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture unit state. Contains enable flags, texture environment/function/ 1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * combiners, texgen state, and pointers to current texture objects. 1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_texture_unit 1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield Enabled; /**< bitmask of TEXTURE_*_BIT flags */ 1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _ReallyEnabled; /**< 0 or exactly one of TEXTURE_*_BIT flags */ 1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ 1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLclampf EnvColor[4]; 1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat EnvColorUnclamped[4]; 1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texgen GenS; 1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texgen GenT; 1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texgen GenR; 1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texgen GenQ; 1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ 1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */ 1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat LodBias; /**< for biasing mipmap levels */ 1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum BumpTarget; 1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat RotMatrix[4]; /* 2x2 matrix */ 1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Current sampler object (GL_ARB_sampler_objects) */ 1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_sampler_object *Sampler; 1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name GL_EXT_texture_env_combine 1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_tex_env_combine_state Combine; 1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Derived state based on \c EnvMode and the \c BaseFormat of the 1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * currently enabled texture. 1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_tex_env_combine_state _EnvMode; 1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Currently enabled combiner state. This will point to either 1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \c Combine or \c _EnvMode. 1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_tex_env_combine_state *_CurrentCombine; 1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Current texture object pointers */ 1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; 1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Points to highest priority, complete and enabled texture object */ 1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *_Current; 1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture attribute group (GL_TEXTURE_BIT). 1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_texture_attrib 1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ 1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; 1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS]; 1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_ARB_texture_buffer_object */ 1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *BufferObject; 1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_ARB_seamless_cubemap */ 1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean CubeMapSeamless; 1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Texture units/samplers used by vertex or fragment texturing */ 1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _EnabledUnits; 1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Texture coord units/sets used for fragment texturing */ 1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _EnabledCoordUnits; 1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Texture coord units that have texgen enabled */ 1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _TexGenEnabled; 1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Texture coord units that have non-identity matrices */ 1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _TexMatEnabled; 1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Bitwise-OR of all Texture.Unit[i]._GenFlags */ 1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _GenFlags; 1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Data structure representing a single clip plane (e.g. one of the elements 1467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the ctx->Transform.EyeUserPlane or ctx->Transform._ClipUserPlane array). 1468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef GLfloat gl_clip_plane[4]; 1470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Transformation attribute group (GL_TRANSFORM_BIT). 1474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_transform_attrib 1476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum MatrixMode; /**< Matrix mode */ 1478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_clip_plane EyeUserPlane[MAX_CLIP_PLANES]; /**< User clip planes */ 1479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_clip_plane _ClipUserPlane[MAX_CLIP_PLANES]; /**< derived */ 1480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield ClipPlanesEnabled; /**< on/off bitmask */ 1481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Normalize; /**< Normalize all normals? */ 1482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ 1483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ 1484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean DepthClamp; /**< GL_ARB_depth_clamp */ 1485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat CullEyePos[4]; 1487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat CullObjPos[4]; 1488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Viewport attribute group (GL_VIEWPORT_BIT). 1493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_viewport_attrib 1495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint X, Y; /**< position */ 1497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei Width, Height; /**< size */ 1498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Near, Far; /**< Depth buffer range */ 1499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLmatrix _WindowMap; /**< Mapping transformation as a matrix. */ 1500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_ARB_vertex/pixel_buffer_object buffer object 1505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_buffer_object 1507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glthread_Mutex Mutex; 1509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 1510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; 1511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ 1512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizeiptrARB Size; /**< Size of buffer storage in bytes */ 1513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ 1514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Fields describing a mapped buffer */ 1515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 1516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */ 1517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLvoid *Pointer; /**< User-space address of mapping */ 1518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLintptr Offset; /**< Mapped offset */ 1519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizeiptr Length; /**< Mapped length */ 1520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 1521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean DeletePending; /**< true if buffer object is removed from the hash */ 1522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Written; /**< Ever written to? (for debugging) */ 1523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 1524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Client pixel packing/unpacking attributes 1529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_pixelstore_attrib 1531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint Alignment; 1533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RowLength; 1534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint SkipPixels; 1535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint SkipRows; 1536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint ImageHeight; 1537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint SkipImages; 1538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SwapBytes; 1539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean LsbFirst; 1540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Invert; /**< GL_MESA_pack_invert */ 1541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */ 1542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Client vertex array attributes 1547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_client_array 1549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint Size; /**< components per element (1,2,3,4) */ 1551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Type; /**< datatype: GL_FLOAT, GL_INT, etc */ 1552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Format; /**< default: GL_RGBA, but may be GL_BGRA */ 1553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei Stride; /**< user-specified stride */ 1554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei StrideB; /**< actual stride in bytes */ 1555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLubyte *Ptr; /**< Points to array data */ 1556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< Enabled flag is a boolean */ 1557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Normalized; /**< GL_ARB_vertex_program */ 1558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Integer; /**< Integer-valued? */ 1559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint InstanceDivisor; /**< GL_ARB_instanced_arrays */ 1560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _ElementSize; /**< size of each element in bytes */ 1561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */ 1563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _MaxElement; /**< max element index into array buffer + 1 */ 1564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Collection of vertex arrays. Defined by the GL_APPLE_vertex_array_object 1569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * extension, but a nice encapsulation in any case. 1570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_array_object 1572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Name of the array object as received from glGenVertexArrayAPPLE. */ 1574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; 1575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 1577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glthread_Mutex Mutex; 1578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Does the VAO use ARB semantics or Apple semantics? 1581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * There are several ways in which ARB_vertex_array_object and 1583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * APPLE_vertex_array_object VAOs have differing semantics. At the very 1584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * least, 1585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - ARB VAOs require that all array data be sourced from vertex buffer 1587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * objects, but Apple VAOs do not. 1588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * - ARB VAOs require that names come from GenVertexArrays. 1590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This flag notes which behavior governs this VAO. 1592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARBsemantics; 1594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Has this array object been bound? 1597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Used; 1599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Vertex attribute arrays */ 1601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_client_array VertexAttrib[VERT_ATTRIB_MAX]; 1602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Mask of VERT_BIT_* values indicating which arrays are enabled */ 1604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 _Enabled; 1605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Mask of VERT_BIT_* values indicating changed/dirty arrays */ 1607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 NewArrays; 1608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs 1611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * we can determine the max legal (in bounds) glDrawElements array index. 1612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _MaxElement; 1614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *ElementArrayBufferObj; 1616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Vertex array state 1621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_array_attrib 1623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ 1625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_array_object *ArrayObj; 1626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The default vertex array object */ 1628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_array_object *DefaultArrayObj; 1629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Array objects (GL_ARB/APPLE_vertex_array_object) */ 1631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *Objects; 1632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint ActiveTexture; /**< Client Active Texture */ 1634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ 1635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ 1636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL 3.1 (slightly different from GL_NV_primitive_restart) */ 1638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean PrimitiveRestart; 1639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint RestartIndex; 1640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_vertex_buffer_object */ 1642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *ArrayBufferObj; 1643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Vertex arrays as consumed by a driver. 1646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The array pointer is set up only by the VBO module. */ 1647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_client_array **_DrawArrays; /**< 0..VERT_ATTRIB_MAX-1 */ 1648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Feedback buffer state 1653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_feedback 1655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Type; 1657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _Mask; /**< FB_* bits */ 1658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat *Buffer; 1659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint BufferSize; 1660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Count; 1661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Selection buffer state 1666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_selection 1668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint *Buffer; /**< selection buffer */ 1670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint BufferSize; /**< size of the selection buffer */ 1671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint BufferCount; /**< number of values in the selection buffer */ 1672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Hits; /**< number of records in the selection buffer */ 1673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NameStackDepth; /**< name stack depth */ 1674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */ 1675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean HitFlag; /**< hit flag */ 1676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat HitMinZ; /**< minimum hit depth */ 1677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat HitMaxZ; /**< maximum hit depth */ 1678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1-D Evaluator control points 1683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_1d_map 1685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Order; /**< Number of control points */ 1687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat u1, u2, du; /**< u1, u2, 1.0/(u2-u1) */ 1688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat *Points; /**< Points to contiguous control points */ 1689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2-D Evaluator control points 1694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_2d_map 1696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Uorder; /**< Number of control points in U dimension */ 1698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Vorder; /**< Number of control points in V dimension */ 1699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat u1, u2, du; 1700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat v1, v2, dv; 1701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat *Points; /**< Points to contiguous control points */ 1702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All evaluator control point state 1707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_evaluators 1709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name 1-D maps 1712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 1714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Vertex3; 1715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Vertex4; 1716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Index; 1717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Color4; 1718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Normal; 1719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Texture1; 1720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Texture2; 1721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Texture3; 1722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Texture4; 1723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_1d_map Map1Attrib[16]; /**< GL_NV_vertex_program */ 1724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 1725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name 2-D maps 1728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 1730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Vertex3; 1731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Vertex4; 1732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Index; 1733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Color4; 1734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Normal; 1735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Texture1; 1736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Texture2; 1737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Texture3; 1738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Texture4; 1739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_2d_map Map2Attrib[16]; /**< GL_NV_vertex_program */ 1740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 1741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_transform_feedback_varying_info 1745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *Name; 1747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Type; 1748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint Size; 1749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Per-output info vertex shaders for transform feedback. 1754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_transform_feedback_output 1756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned OutputRegister; 1758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned OutputBuffer; 1759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned NumComponents; 1760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** offset (in DWORDs) of this output within the interleaved structure */ 1762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned DstOffset; 1763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Offset into the output register of the data to output. For example, 1766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * if NumComponents is 2 and ComponentOffset is 1, then the data to 1767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * offset is in the y and z components of the output register. 1768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned ComponentOffset; 1770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Post-link transform feedback info. */ 1774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_transform_feedback_info 1775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned NumOutputs; 1777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Number of transform feedback buffers in use by this program. 1780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned NumBuffers; 1782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_output *Outputs; 1784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Transform feedback varyings used for the linking of this shader program. 1786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Use for glGetTransformFeedbackVarying(). 1788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_varying_info *Varyings; 1790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint NumVarying; 1791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Total number of components stored in each buffer. This may be used by 1794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * hardware back-ends to determine the correct stride when interleaving 1795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * multiple transform feedback outputs in the same buffer. 1796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned BufferStride[MAX_FEEDBACK_BUFFERS]; 1798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Transform feedback object state 1803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_transform_feedback_object 1805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; /**< AKA the object ID */ 1807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 1808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Active; /**< Is transform feedback enabled? */ 1809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Paused; /**< Is transform feedback paused? */ 1810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EndedAnytime; /**< Has EndTransformFeedback been called 1811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org at least once? */ 1812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The feedback buffers */ 1814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint BufferNames[MAX_FEEDBACK_BUFFERS]; 1815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *Buffers[MAX_FEEDBACK_BUFFERS]; 1816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Start of feedback data in dest buffer */ 1818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLintptr Offset[MAX_FEEDBACK_BUFFERS]; 1819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Max data to put into dest buffer (in bytes) */ 1820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizeiptr Size[MAX_FEEDBACK_BUFFERS]; 1821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Context state for transform feedback. 1826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_transform_feedback_state 1828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Mode; /**< GL_POINTS, GL_LINES or GL_TRIANGLES */ 1830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */ 1832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *CurrentBuffer; 1833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The table of all transform feedback objects */ 1835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *Objects; 1836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */ 1838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_object *CurrentObject; 1839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The default xform-fb object (Name==0) */ 1841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_object *DefaultObject; 1842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Names of the various vertex/fragment program register files, etc. 1847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c) 1849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All values should fit in a 4-bit field. 1850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * NOTE: PROGRAM_ENV_PARAM, PROGRAM_STATE_VAR, PROGRAM_NAMED_PARAM, 1852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be considered to 1853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * be "uniform" variables since they can only be set outside glBegin/End. 1854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * They're also all stored in the same Parameters array. 1855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 1857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_TEMPORARY, /**< machine->Temporary[] */ 1859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_INPUT, /**< machine->Inputs[] */ 1860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_OUTPUT, /**< machine->Outputs[] */ 1861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_VARYING, /**< machine->Inputs[]/Outputs[] */ 1862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_LOCAL_PARAM, /**< gl_program->LocalParams[] */ 1863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_ENV_PARAM, /**< gl_program->Parameters[] */ 1864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */ 1865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_NAMED_PARAM, /**< gl_program->Parameters[] */ 1866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_CONSTANT, /**< gl_program->Parameters[] */ 1867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_UNIFORM, /**< gl_program->Parameters[] */ 1868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */ 1869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_ADDRESS, /**< machine->AddressReg */ 1870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_SAMPLER, /**< for shader samplers, compile-time only */ 1871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_SYSTEM_VALUE,/**< InstanceId, PrimitiveID, etc. */ 1872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_UNDEFINED, /**< Invalid/TBD value */ 1873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PROGRAM_FILE_MAX 1874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_register_file; 1875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If the register file is PROGRAM_SYSTEM_VALUE, the register index will be 1879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * one of these values. 1880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 1882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SYSTEM_VALUE_FRONT_FACE, /**< Fragment shader only (not done yet) */ 1884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SYSTEM_VALUE_VERTEX_ID, /**< Vertex shader only */ 1885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SYSTEM_VALUE_INSTANCE_ID, /**< Vertex shader only */ 1886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SYSTEM_VALUE_MAX /**< Number of values */ 1887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_system_value; 1888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The possible interpolation qualifiers that can be applied to a fragment 1892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * shader input in GLSL. 1893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: INTERP_QUALIFIER_NONE must be 0 so that memsetting the 1895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * gl_fragment_program data structure to 0 causes the default behavior. 1896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum glsl_interp_qualifier 1898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INTERP_QUALIFIER_NONE = 0, 1900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INTERP_QUALIFIER_SMOOTH, 1901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INTERP_QUALIFIER_FLAT, 1902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INTERP_QUALIFIER_NOPERSPECTIVE 1903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \brief Layout qualifiers for gl_FragDepth. 1908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with 1910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a layout qualifier. 1911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \see enum ir_depth_layout 1913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum gl_frag_depth_layout 1915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */ 1917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_DEPTH_LAYOUT_ANY, 1918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_DEPTH_LAYOUT_GREATER, 1919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_DEPTH_LAYOUT_LESS, 1920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FRAG_DEPTH_LAYOUT_UNCHANGED 1921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Base class for any kind of program object 1926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_program 1928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Id; 1930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte *String; /**< Null-terminated program text */ 1931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 1932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Target; /**< GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_FRAGMENT_PROGRAM_NV */ 1933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Format; /**< String encoding format */ 1934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Resident; 1935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct prog_instruction *Instructions; 1937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 InputsRead; /**< Bitmask of which input regs are read */ 1939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */ 1940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield SystemValuesRead; /**< Bitmask of SYSTEM_VALUE_x inputs used */ 1941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */ 1942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield OutputFlags[MAX_PROGRAM_OUTPUTS]; /**< PROG_PARAM_BIT_x flags */ 1943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */ 1944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */ 1945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */ 1946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Named parameters, constants, etc. from program text */ 1949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_parameter_list *Parameters; 1950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Numbered local parameters */ 1951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4]; 1952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Map from sampler unit to texture unit (set by glUniform1i()) */ 1954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte SamplerUnits[MAX_SAMPLERS]; 1955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Bitmask of which register files are read/written with indirect 1957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * addressing. Mask of (1 << PROGRAM_x) bits. 1958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield IndirectRegisterFiles; 1960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Logical counts */ 1962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 1963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumInstructions; 1964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumTemporaries; 1965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumParameters; 1966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumAttributes; 1967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumAddressRegs; 1968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumAluInstructions; 1969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumTexInstructions; 1970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumTexIndirections; 1971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 1972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Native, actual h/w counts */ 1973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 1974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeInstructions; 1975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeTemporaries; 1976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeParameters; 1977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeAttributes; 1978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeAddressRegs; 1979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeAluInstructions; 1980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeTexInstructions; 1981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumNativeTexIndirections; 1982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 1983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Vertex program object */ 1987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_vertex_program 1988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program Base; /**< base class */ 1990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean IsNVProgram; /**< is this a GL_NV_vertex_program program? */ 1991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean IsPositionInvariant; 1992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean UsesClipDistance; 1993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Geometry program object */ 1997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_geometry_program 1998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program Base; /**< base class */ 2000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint VerticesOut; 2002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 2003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 2004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 2005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Fragment program object */ 2009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_fragment_program 2010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program Base; /**< base class */ 2012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean UsesKill; /**< shader uses KIL instruction */ 2013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean UsesDFdy; /**< shader uses DDY instruction */ 2014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OriginUpperLeft; 2015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean PixelCenterInteger; 2016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum gl_frag_depth_layout FragDepthLayout; 2017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLSL interpolation qualifier associated with each fragment shader input. 2020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For inputs that do not have an interpolation qualifier specified in 2021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLSL, the value is INTERP_QUALIFIER_NONE. 2022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum glsl_interp_qualifier InterpQualifier[FRAG_ATTRIB_MAX]; 2024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Bitfield indicating, for each fragment shader input, 1 if that input 2027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * uses centroid interpolation, 0 otherwise. Unused inputs are 0. 2028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 IsCentroid; 2030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * State common to vertex and fragment programs. 2035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_program_state 2037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */ 2039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */ 2040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Context state for vertex programs. 2045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_vertex_program_state 2047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ 2049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 2050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ 2051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ 2052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Computed two sided lighting for fixed function/programs. */ 2053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _TwoSideEnabled; 2054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_vertex_program *Current; /**< User-bound vertex program */ 2055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Currently enabled and valid vertex program (including internal 2057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * programs, user-defined vertex programs and GLSL vertex shaders). 2058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is the program we must use when rendering. 2059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_vertex_program *_Current; 2061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 2063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* For GL_NV_vertex_program only: */ 2065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum TrackMatrix[MAX_PROGRAM_ENV_PARAMS / 4]; 2066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum TrackMatrixTransform[MAX_PROGRAM_ENV_PARAMS / 4]; 2067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Should fixed-function T&L be implemented with a vertex prog? */ 2069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _MaintainTnlProgram; 2070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Program to emulate fixed-function T&L (see above) */ 2072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_vertex_program *_TnlProgram; 2073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Cache of fixed-function programs */ 2075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_cache *Cache; 2076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Overriden; 2078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Context state for geometry programs. 2083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_geometry_program_state 2085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< GL_ARB_GEOMETRY_SHADER4 */ 2087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Enabled; /**< Enabled and valid program? */ 2088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_geometry_program *Current; /**< user-bound geometry program */ 2089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Currently enabled and valid program (including internal programs 2091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and compiled shader programs). 2092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_geometry_program *_Current; 2094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 2096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Cache of fixed-function programs */ 2098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_cache *Cache; 2099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Context state for fragment programs. 2103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_fragment_program_state 2105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; /**< User-set fragment program enable flag */ 2107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 2108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_fragment_program *Current; /**< User-bound fragment program */ 2109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Currently enabled and valid fragment program (including internal 2111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * programs, user-defined fragment programs and GLSL fragment shaders). 2112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is the program we must use when rendering. 2113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_fragment_program *_Current; 2115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 2117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Should fixed-function texturing be implemented with a fragment prog? */ 2119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _MaintainTexEnvProgram; 2120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Program to emulate fixed-function texture env/combine (see above) */ 2122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_fragment_program *_TexEnvProgram; 2123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Cache of fixed-function programs */ 2125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_cache *Cache; 2126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ATI_fragment_shader runtime state 2131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ATI_FS_INPUT_PRIMARY 0 2133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ATI_FS_INPUT_SECONDARY 1 2134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct atifs_instruction; 2136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct atifs_setupinst; 2137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ATI fragment shader 2140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ati_fragment_shader 2142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Id; 2144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 2145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct atifs_instruction *Instructions[2]; 2146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct atifs_setupinst *SetupInst[2]; 2147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat Constants[8][4]; 2148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield LocalConstDef; /**< Indicates which constants have been set */ 2149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte numArithInstr[2]; 2150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte regsAssigned[2]; 2151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte NumPasses; /**< 1 or 2 */ 2152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte cur_pass; 2153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte last_optype; 2154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean interpinp1; 2155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean isValid; 2156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint swizzlerq; 2157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Context state for GL_ATI_fragment_shader 2161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_ati_fragment_shader_state 2163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Enabled; 2165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Enabled; /**< enabled and valid shader? */ 2166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Compiling; 2167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat GlobalConstants[8][4]; 2168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ati_fragment_shader *Current; 2169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Set by #pragma directives */ 2173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_sl_pragmas 2174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean IgnoreOptimize; /**< ignore #pragma optimize(on/off) ? */ 2176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean IgnoreDebug; /**< ignore #pragma debug(on/off) ? */ 2177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Optimize; /**< defaults on */ 2178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Debug; /**< defaults off */ 2179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A GLSL vertex or fragment shader object. 2184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_shader 2186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Type; /**< GL_FRAGMENT_SHADER || GL_VERTEX_SHADER || GL_GEOMETRY_SHADER_ARB (first field!) */ 2188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; /**< AKA the handle */ 2189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; /**< Reference count */ 2190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean DeletePending; 2191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean CompileStatus; 2192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLchar *Source; /**< Source code string */ 2193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint SourceChecksum; /**< for debug/logging purposes */ 2194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program *Program; /**< Post-compile assembly code */ 2195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLchar *InfoLog; 2196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_sl_pragmas Pragmas; 2197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Version; /**< GLSL version used for linking */ 2199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Sampler tracking 2202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \note Each of these fields is only set post-linking. 2204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 2206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers; /**< Number of samplers used by this shader. */ 2207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield active_samplers; /**< Bitfield of which samplers are used */ 2208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */ 2209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 2210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Number of uniform components used by this shader. 2213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This field is only set post-linking. 2215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_uniform_components; 2217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This shader's uniform block information. 2220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The offsets of the variables are assigned only for shaders in a program's 2222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _LinkedShaders[]. 2223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_uniform_block *UniformBlocks; 2225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned NumUniformBlocks; 2226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct exec_list *ir; 2228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct glsl_symbol_table *symbols; 2229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Shaders containing built-in functions that are used for linking. */ 2231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader *builtins_to_link[16]; 2232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_builtins_to_link; 2233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Shader stages. Note that these will become 5 with tessellation. 2238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These MUST have the same values as gallium's PIPE_SHADER_* 2239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 2241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MESA_SHADER_VERTEX = 0, 2243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MESA_SHADER_FRAGMENT = 1, 2244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MESA_SHADER_GEOMETRY = 2, 2245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MESA_SHADER_TYPES = 3 2246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_shader_type; 2247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_uniform_buffer_variable 2249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *Name; 2251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct glsl_type *Type; 2252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int Buffer; 2253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int Offset; 2254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean RowMajor; 2255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_uniform_block 2258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Declared name of the uniform block */ 2260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *Name; 2261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Array of supplemental information about UBO ir_variables. */ 2263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_uniform_buffer_variable *Uniforms; 2264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumUniforms; 2265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Index (GL_UNIFORM_BLOCK_BINDING) into ctx->UniformBufferBindings[] to use 2268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * with glBindBufferBase to bind a buffer object to this uniform block. When 2269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * updated in the program, _NEW_BUFFER_OBJECT will be set. 2270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Binding; 2272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Minimum size of a buffer object to back this uniform buffer 2275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (GL_UNIFORM_BLOCK_DATA_SIZE). 2276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint UniformBufferSize; 2278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A GLSL program object. 2282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Basically a linked collection of vertex and fragment shaders. 2283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_shader_program 2285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Type; /**< Always GL_SHADER_PROGRAM (internal token) */ 2287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; /**< aka handle or ID */ 2288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; /**< Reference count */ 2289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean DeletePending; 2290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Flags that the linker should not reject the program if it lacks 2293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a vertex or fragment shader. GLES2 doesn't allow separate 2294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * shader objects, and would reject them. However, we internally 2295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * build separate shader objects for fixed function programs, which 2296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * we use for drivers/common/meta.c and for handling 2297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _mesa_update_state with no program bound (for example in 2298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glClear()). 2299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean InternalSeparateShader; 2301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumShaders; /**< number of attached shaders */ 2303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader **Shaders; /**< List of attached the shaders */ 2304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * User-defined attribute bindings 2307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are set via \c glBindAttribLocation and are used to direct the 2309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLSL linker. These are \b not the values used in the compiled shader, 2310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and they are \b not the values returned by \c glGetAttribLocation. 2311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct string_to_uint_map *AttributeBindings; 2313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * User-defined fragment data bindings 2316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are set via \c glBindFragDataLocation and are used to direct the 2318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLSL linker. These are \b not the values used in the compiled shader, 2319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and they are \b not the values returned by \c glGetFragDataLocation. 2320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct string_to_uint_map *FragDataBindings; 2322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct string_to_uint_map *FragDataIndexBindings; 2323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Transform feedback varyings last specified by 2326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glTransformFeedbackVaryings(). 2327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For the current set of transform feeedback varyings used for transform 2329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * feedback output, see LinkedTransformFeedback. 2330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 2332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum BufferMode; 2333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint NumVarying; 2334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLchar **VaryingNames; /**< Array [NumVarying] of char * */ 2335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } TransformFeedback; 2336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Post-link transform feedback info. */ 2338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_info LinkedTransformFeedback; 2339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Post-link gl_FragDepth layout for ARB_conservative_depth. */ 2341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum gl_frag_depth_layout FragDepthLayout; 2342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Geometry shader state - copied into gl_geometry_program at link time */ 2344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 2345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint VerticesOut; 2346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 2347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 2348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 2349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } Geom; 2350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Vertex shader state - copied into gl_vertex_program at link time */ 2352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 2353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean UsesClipDistance; /**< True if gl_ClipDistance is written to. */ 2354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or 2355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0 if not present. */ 2356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } Vert; 2357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* post-link info: */ 2359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned NumUserUniformStorage; 2360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_uniform_storage *UniformStorage; 2361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_uniform_block *UniformBlocks; 2363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned NumUniformBlocks; 2364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Indices into the _LinkedShaders's UniformBlocks[] array for each stage 2367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * they're used in, or -1. 2368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is used to maintain the Binding values of the stage's UniformBlocks[] 2370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and to answer the GL_UNIFORM_BLOCK_REFERENCED_BY_*_SHADER queries. 2371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *UniformBlockStageIndex[MESA_SHADER_TYPES]; 2373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Map of active uniform names to locations 2376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Maps any active uniform that is not an array element to a location. 2378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Each active uniform, including individual structure members will appear 2379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in this map. This roughly corresponds to the set of names that would be 2380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * enumerated by \c glGetActiveUniform. 2381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct string_to_uint_map *UniformHash; 2383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Map from sampler unit to texture unit (set by glUniform1i()) 2386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A sampler unit is associated with each sampler uniform by the linker. 2388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The sampler unit associated with each uniform is stored in the 2389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \c gl_uniform_storage::sampler field. 2390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte SamplerUnits[MAX_SAMPLERS]; 2392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */ 2393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_texture_index SamplerTargets[MAX_SAMPLERS]; 2394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean LinkStatus; /**< GL_LINK_STATUS */ 2396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Validated; 2397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _Used; /**< Ever used for drawing? */ 2398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLchar *InfoLog; 2399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Version; /**< GLSL version used for linking */ 2401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Per-stage shaders resulting from the first stage of linking. 2404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Set of linked shaders for this program. The array is accessed using the 2406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \c MESA_SHADER_* defines. Entries for non-existent stages will be 2407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \c NULL. 2408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader *_LinkedShaders[MESA_SHADER_TYPES]; 2410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_DUMP 0x1 /**< Dump shaders to stdout */ 2414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_LOG 0x2 /**< Write shaders to files */ 2415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_OPT 0x4 /**< Force optimizations (override pragmas) */ 2416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_NO_OPT 0x8 /**< Force no optimizations (override pragmas) */ 2417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_UNIFORMS 0x10 /**< Print glUniform calls */ 2418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */ 2419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */ 2420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */ 2421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLSL_REPORT_ERRORS 0x100 /**< Print compilation errors */ 2422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Context state for GLSL vertex/fragment shaders. 2426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_shader_state 2428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Programs used for rendering 2431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * There is a separate program set for each shader stage. If 2433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_EXT_separate_shader_objects is not supported, each of these must point 2434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to \c NULL or to the same program. 2435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_program *CurrentVertexProgram; 2437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_program *CurrentGeometryProgram; 2438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_program *CurrentFragmentProgram; 2439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_program *_CurrentFragmentProgram; 2441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Program used by glUniform calls. 2444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Explicitly set by \c glUseProgram and \c glActiveProgramEXT. 2446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_program *ActiveProgram; 2448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield Flags; /**< Mask of GLSL_x flags */ 2450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Compiler options for a single GLSL shaders type 2455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_shader_compiler_options 2457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Driver-selectable options: */ 2459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitCondCodes; /**< Use condition codes? */ 2460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNVTempInitialization; /**< 0-fill NV temp registers */ 2461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoLoops; 2462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoFunctions; 2463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoCont; /**< Emit CONT opcode? */ 2464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ 2465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */ 2466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoPow; /**< Emit POW opcodes? */ 2467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean LowerClipDistance; /**< Lower gl_ClipDistance from float[8] to vec4[2]? */ 2468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Forms of indirect addressing the driver cannot do. 2471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 2473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoIndirectInput; /**< No indirect addressing of inputs */ 2474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoIndirectOutput; /**< No indirect addressing of outputs */ 2475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */ 2476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ 2477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 2478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxIfDepth; /**< Maximum nested IF blocks */ 2480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxUnrollIterations; 2481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */ 2483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Occlusion/timer query object. 2488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_query_object 2490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Target; /**< The query target, when active */ 2492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Id; /**< hash table ID/name */ 2493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint64EXT Result; /**< the counter */ 2494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Active; /**< inside Begin/EndQuery */ 2495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Ready; /**< result is ready? */ 2496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Context state for query objects. 2501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_query_state 2503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *QueryObjects; 2505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */ 2506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */ 2507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_NV_conditional_render */ 2509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_object *CondRenderQuery; 2510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_EXT_transform_feedback */ 2512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_object *PrimitivesGenerated; 2513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_object *PrimitivesWritten; 2514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_ARB_timer_query */ 2516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_object *TimeElapsed; 2517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum CondRenderMode; 2519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Sync object state */ 2523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_sync_object 2524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct simple_node link; 2526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Type; /**< GL_SYNC_FENCE */ 2527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; /**< Fence name */ 2528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; /**< Reference count */ 2529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean DeletePending; /**< Object was deleted while there were still 2530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * live references (e.g., sync not yet finished) 2531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum SyncCondition; 2533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield Flags; /**< Flags passed to glFenceSync */ 2534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint StatusFlag:1; /**< Has the sync object been signaled? */ 2535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * State which can be shared by multiple contexts: 2540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_shared_state 2542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glthread_Mutex Mutex; /**< for thread safety */ 2544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; /**< Reference count */ 2545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ 2546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ 2547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Default texture objects (shared by all texture units) */ 2549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS]; 2550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Fallback texture used when a bound texture is incomplete */ 2552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *FallbackTex[NUM_TEXTURE_TARGETS]; 2553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Thread safety and statechange notification for texture 2556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * objects. 2557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \todo Improve the granularity of locking. 2559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 2561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glthread_Mutex TexMutex; /**< texobj thread safety */ 2562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint TextureStateStamp; /**< state notification for shared tex */ 2563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 2564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Default buffer object for vertex arrays that aren't in VBOs */ 2566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *NullBufferObj; 2567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Vertex/geometry/fragment programs 2570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 2572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */ 2573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_vertex_program *DefaultVertexProgram; 2574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_fragment_program *DefaultFragmentProgram; 2575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_geometry_program *DefaultGeometryProgram; 2576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 2577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ATI_fragment_shader */ 2579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *ATIShaders; 2580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ati_fragment_shader *DefaultFragmentShader; 2581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *BufferObjects; 2583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Table of both gl_shader and gl_shader_program objects */ 2585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *ShaderObjects; 2586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_framebuffer_object */ 2588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *RenderBuffers; 2589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *FrameBuffers; 2590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_sync */ 2592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct simple_node SyncObjects; 2593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_ARB_sampler_objects */ 2595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *SamplerObjects; 2596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Renderbuffers represent drawing surfaces such as color, depth and/or 2602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * stencil. A framebuffer object has a set of renderbuffers. 2603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Drivers will typically derive subclasses of this type. 2604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_renderbuffer 2606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glthread_Mutex Mutex; /**< for thread safety */ 2608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ClassID; /**< Useful for drivers */ 2609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; 2610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 2611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Width, Height; 2612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 2613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ 2614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte NumSamples; 2615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum InternalFormat; /**< The user-specified format */ 2616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or 2617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_STENCIL_INDEX. */ 2618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_format Format; /**< The actual renderbuffer memory format */ 2619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Delete this renderbuffer */ 2621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*Delete)(struct gl_context *ctx, struct gl_renderbuffer *rb); 2622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Allocate new storage for this renderbuffer */ 2624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean (*AllocStorage)(struct gl_context *ctx, 2625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer *rb, 2626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum internalFormat, 2627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint width, GLuint height); 2628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A renderbuffer attachment points to either a texture object (and specifies 2633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer. 2634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_renderbuffer_attachment 2636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */ 2638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Complete; 2639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the 2642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * application supplied renderbuffer object. 2643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer *Renderbuffer; 2645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If \c Type is \c GL_TEXTURE, this stores a pointer to the application 2648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * supplied texture object. 2649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_object *Texture; 2651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint TextureLevel; /**< Attached mipmap level. */ 2652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */ 2653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D 2654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and 2D array textures */ 2655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc). 2660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * In C++ terms, think of this as a base class from which device drivers 2661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * will make derived classes. 2662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_framebuffer 2664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glthread_Mutex Mutex; /**< for thread safety */ 2666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If zero, this is a window system framebuffer. If non-zero, this 2668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * is a FBO framebuffer; note that for some devices (i.e. those with 2669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a natural pixel coordinate system for FBOs that differs from the 2670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OpenGL/Mesa coordinate system), this means that the viewport, 2671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * polygon face orientation, and polygon stipple will have to be inverted. 2672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; 2674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint RefCount; 2676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean DeletePending; 2677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The framebuffer's visual. Immutable if this is a window system buffer. 2680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Computed from attachments if user-made FBO. 2681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_config Visual; 2683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Initialized; 2685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Width, Height; /**< size of frame buffer in pixels */ 2687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Drawing bounds (Intersection of buffer size and scissor box) */ 2689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 2690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint _Xmin, _Xmax; /**< inclusive */ 2691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint _Ymin, _Ymax; /**< exclusive */ 2692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 2693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Derived Z buffer stuff */ 2695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 2696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _DepthMax; /**< Max depth buffer value */ 2697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _DepthMaxF; /**< Float max depth buffer value */ 2698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _MRD; /**< minimum resolvable difference in Z values */ 2699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 2700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ 2702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum _Status; 2703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Integer color values */ 2705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _IntegerColor; 2706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ 2708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; 2709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER 2711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * attribute group and GL_PIXEL attribute group, respectively. 2712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS]; 2714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ColorReadBuffer; 2715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Computed from ColorDraw/ReadBuffer above */ 2717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint _NumColorDrawBuffers; 2718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; /**< BUFFER_x or -1 */ 2719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint _ColorReadBufferIndex; /* -1 = None */ 2720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; 2721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer *_ColorReadBuffer; 2722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Delete this framebuffer */ 2724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*Delete)(struct gl_framebuffer *fb); 2725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Precision info for shader datatypes. See glGetShaderPrecisionFormat(). 2730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_precision 2732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLushort RangeMin; /**< min value exponent */ 2734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLushort RangeMax; /**< max value exponent */ 2735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLushort Precision; /**< number of mantissa bits */ 2736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Limits for vertex, geometry and fragment programs/shaders. 2741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_program_constants 2743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* logical limits */ 2745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxInstructions; 2746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxAluInstructions; 2747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTexInstructions; 2748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTexIndirections; 2749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxAttribs; 2750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTemps; 2751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxAddressRegs; 2752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxAddressOffset; /**< [-MaxAddressOffset, MaxAddressOffset-1] */ 2753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxParameters; 2754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxLocalParams; 2755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxEnvParams; 2756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* native/hardware limits */ 2757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeInstructions; 2758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeAluInstructions; 2759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeTexInstructions; 2760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeTexIndirections; 2761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeAttribs; 2762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeTemps; 2763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeAddressRegs; 2764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxNativeParameters; 2765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* For shaders */ 2766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */ 2767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ES 2.0 and GL_ARB_ES2_compatibility */ 2768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_precision LowFloat, MediumFloat, HighFloat; 2769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_precision LowInt, MediumInt, HighInt; 2770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_uniform_buffer_object */ 2771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxUniformBlocks; 2772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxCombinedUniformComponents; 2773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Constants which may be overridden by device driver during context creation 2778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * but are never changed after that. 2779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_constants 2781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MaxTextureMbytes; /**< Max memory per image, in MB */ 2783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MaxTextureLevels; /**< Max mipmap levels. */ 2784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */ 2785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */ 2786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MaxArrayTextureLayers; /**< Max layers in array textures */ 2787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */ 2788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTextureCoordUnits; 2789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTextureImageUnits; 2790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxVertexTextureImageUnits; 2791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxCombinedTextureImageUnits; 2792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxGeometryTextureImageUnits; 2793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */ 2794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 2795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ 2796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTextureBufferSize; /**< GL_ARB_texture_buffer_object */ 2797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxArrayLockSize; 2799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint SubPixelBits; 2801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MinPointSize, MaxPointSize; /**< aliased */ 2803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */ 2804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat PointSizeGranularity; 2805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MinLineWidth, MaxLineWidth; /**< aliased */ 2806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */ 2807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat LineWidthGranularity; 2808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxColorTableSize; 2810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxClipPlanes; 2812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxLights; 2813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MaxShininess; /**< GL_NV_light_max_exponent */ 2814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */ 2815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxViewportWidth, MaxViewportHeight; 2817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_constants VertexProgram; /**< GL_ARB_vertex_program */ 2819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_constants FragmentProgram; /**< GL_ARB_fragment_program */ 2820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_constants GeometryProgram; /**< GL_ARB_geometry_shader4 */ 2821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxProgramMatrices; 2822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxProgramMatrixStackDepth; 2823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 2825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint SamplesPassed; 2826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint TimeElapsed; 2827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Timestamp; 2828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint PrimitivesGenerated; 2829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint PrimitivesWritten; 2830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } QueryCounterBits; 2831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** vertex array / buffer object bounds checking */ 2833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean CheckArrayBounds; 2834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */ 2836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */ 2838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ 2839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ 2840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Number of varying vectors between vertex and fragment shaders */ 2842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxVarying; 2843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxVertexVaryingComponents; /**< Between vert and geom shader */ 2844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxGeometryVaryingComponents; /**< Between geom and frag shader */ 2845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** @{ 2847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_ARB_uniform_buffer_object 2848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxCombinedUniformBlocks; 2850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxUniformBufferBindings; 2851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxUniformBlockSize; 2852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint UniformBufferOffsetAlignment; 2853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** @} */ 2854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_ARB_geometry_shader4 */ 2856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxGeometryOutputVertices; 2857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxGeometryTotalOutputComponents; 2858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */ 2860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Changes default GLSL extension behavior from "error" to "warn". It's out 2863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of spec, but it can make some apps work that otherwise wouldn't. 2864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ForceGLSLExtensionsWarn; 2866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Does the driver support real 32-bit integers? (Otherwise, integers are 2869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * simulated via floats.) 2870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NativeIntegers; 2872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If the driver supports real 32-bit integers, what integer value should be 2875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * used for boolean true in uniform uploads? (Usually 1 or ~0.) 2876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint UniformBooleanTrue; 2878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Which texture units support GL_ATI_envmap_bumpmap as targets */ 2880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield SupportedBumpUnits; 2881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Maximum amount of time, measured in nanseconds, that the server can wait. 2884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint64 MaxServerWaitTimeout; 2886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_EXT_provoking_vertex */ 2888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean QuadsFollowProvokingVertexConvention; 2889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** OpenGL version 3.0 */ 2891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield ContextFlags; /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */ 2892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** OpenGL version 3.2 */ 2894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ 2895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_EXT_transform_feedback */ 2897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTransformFeedbackBuffers; 2898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTransformFeedbackSeparateComponents; 2899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxTransformFeedbackInterleavedComponents; 2900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxVertexStreams; 2901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL_EXT_gpu_shader4 */ 2903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint MinProgramTexelOffset, MaxProgramTexelOffset; 2904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_robustness */ 2906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ResetStrategy; 2907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_blend_func_extended */ 2909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxDualSourceDrawBuffers; 2910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Whether the implementation strips out and ignores texture borders. 2913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Many GPU hardware implementations don't support rendering with texture 2915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * borders and mipmapped textures. (Note: not static border color, but the 2916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * old 1-pixel border around each edge). Implementations then have to do 2917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * slow fallbacks to be correct, or just ignore the border and be fast but 2918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * wrong. Setting the flag strips the border off of TexImage calls, 2919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * providing "fast but wrong" at significantly reduced driver complexity. 2920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture borders are deprecated in GL 3.0. 2922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **/ 2923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean StripTextureBorder; 2924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For drivers which can do a better job at eliminating unused varyings 2927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and uniforms than the GLSL compiler. 2928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 2929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XXX Remove these as soon as a better solution is available. 2930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean GLSLSkipStrictMaxVaryingLimitCheck; 2932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean GLSLSkipStrictMaxUniformLimitCheck; 2933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 2935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Force software support for primitive restart in the VBO module. 2936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean PrimitiveRestartInSoftware; 2938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 2939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enable flag for each OpenGL extension. Different device drivers will 2943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * enable different extensions at runtime. 2944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_extensions 2946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean dummy; /* don't remove this! */ 2948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean dummy_true; /* Set true by _mesa_init_extensions(). */ 2949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean dummy_false; /* Set false by _mesa_init_extensions(). */ 2950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_ES2_compatibility; 2951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_base_instance; 2952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_blend_func_extended; 2953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_color_buffer_float; 2954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_conservative_depth; 2955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_copy_buffer; 2956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_depth_buffer_float; 2957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_depth_clamp; 2958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_depth_texture; 2959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_draw_buffers_blend; 2960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_draw_elements_base_vertex; 2961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_draw_instanced; 2962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_fragment_coord_conventions; 2963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_fragment_program; 2964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_fragment_program_shadow; 2965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_fragment_shader; 2966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_framebuffer_object; 2967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_explicit_attrib_location; 2968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_geometry_shader4; 2969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_half_float_pixel; 2970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_half_float_vertex; 2971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_instanced_arrays; 2972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_map_buffer_range; 2973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_occlusion_query; 2974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_occlusion_query2; 2975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_point_sprite; 2976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_seamless_cube_map; 2977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_shader_bit_encoding; 2978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_shader_objects; 2979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_shader_stencil_export; 2980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_shader_texture_lod; 2981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_shading_language_100; 2982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_shadow; 2983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_sync; 2984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_border_clamp; 2985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_buffer_object; 2986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_compression_rgtc; 2987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_cube_map; 2988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_env_combine; 2989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_env_crossbar; 2990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_env_dot3; 2991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_float; 2992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_multisample; 2993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_non_power_of_two; 2994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_rg; 2995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_rgb10_a2ui; 2996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_texture_storage; 2997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_timer_query; 2998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_transform_feedback2; 2999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_transform_feedback3; 3000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_transform_feedback_instanced; 3001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_transpose_matrix; 3002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_uniform_buffer_object; 3003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_vertex_program; 3004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_vertex_shader; 3005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_vertex_type_2_10_10_10_rev; 3006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ARB_window_pos; 3007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_blend_color; 3008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_blend_equation_separate; 3009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_blend_func_separate; 3010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_blend_minmax; 3011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_clip_volume_hint; 3012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_compiled_vertex_array; 3013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_depth_bounds_test; 3014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_draw_buffers2; 3015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_draw_range_elements; 3016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_fog_coord; 3017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_framebuffer_blit; 3018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_framebuffer_multisample; 3019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_framebuffer_object; 3020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_framebuffer_sRGB; 3021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_gpu_program_parameters; 3022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_gpu_shader4; 3023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_packed_depth_stencil; 3024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_packed_float; 3025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_packed_pixels; 3026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_pixel_buffer_object; 3027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_point_parameters; 3028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_provoking_vertex; 3029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_rescale_normal; 3030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_shadow_funcs; 3031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_secondary_color; 3032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_separate_shader_objects; 3033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_separate_specular_color; 3034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_stencil_two_side; 3035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture3D; 3036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_array; 3037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_compression_latc; 3038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_compression_s3tc; 3039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_env_dot3; 3040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_filter_anisotropic; 3041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_integer; 3042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_mirror_clamp; 3043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_shared_exponent; 3044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_snorm; 3045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_sRGB; 3046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_sRGB_decode; 3047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_texture_swizzle; 3048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_transform_feedback; 3049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_timer_query; 3050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean EXT_vertex_array_bgra; 3051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OES_standard_derivatives; 3052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* vendor extensions */ 3053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean AMD_seamless_cubemap_per_texture; 3054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean APPLE_packed_pixels; 3055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean APPLE_object_purgeable; 3056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ATI_envmap_bumpmap; 3057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ATI_texture_compression_3dc; 3058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ATI_texture_mirror_once; 3059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ATI_texture_env_combine3; 3060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ATI_fragment_shader; 3061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ATI_separate_stencil; 3062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean IBM_rasterpos_clip; 3063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean IBM_multimode_draw_arrays; 3064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean MESA_pack_invert; 3065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean MESA_resize_buffers; 3066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean MESA_ycbcr_texture; 3067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean MESA_texture_array; 3068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_blend_square; 3069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_conditional_render; 3070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_fog_distance; 3071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_fragment_program; 3072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_fragment_program_option; 3073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_light_max_exponent; 3074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_point_sprite; 3075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_primitive_restart; 3076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_read_buffer; 3077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_texture_barrier; 3078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_texgen_reflection; 3079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_texture_env_combine4; 3080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_texture_rectangle; 3081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_vertex_program; 3082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean NV_vertex_program1_1; 3083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SGIS_texture_lod; 3084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean TDFX_texture_compression_FXT1; 3085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean S3_s3tc; 3086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OES_EGL_image; 3087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OES_draw_texture; 3088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OES_EGL_image_external; 3089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OES_compressed_ETC1_RGB8_texture; 3090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean extension_sentinel; 3091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The extension string */ 3092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLubyte *String; 3093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Number of supported extensions */ 3094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Count; 3095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A stack of matrices (projection, modelview, color, texture, etc). 3100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_matrix_stack 3102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLmatrix *Top; /**< points into Stack */ 3104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLmatrix *Stack; /**< array [MaxDepth] of GLmatrix */ 3105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Depth; /**< 0 <= Depth < MaxDepth */ 3106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint MaxDepth; /**< size of Stack[] array */ 3107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint DirtyFlag; /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */ 3108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Bits for image transfer operations 3113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \sa __struct gl_contextRec::ImageTransferState. 3114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 3116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IMAGE_SCALE_BIAS_BIT 0x1 3117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IMAGE_SHIFT_OFFSET_BIT 0x2 3118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IMAGE_MAP_COLOR_BIT 0x4 3119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IMAGE_CLAMP_BIT 0x800 3120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Pixel Transfer ops */ 3123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT | \ 3124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org IMAGE_SHIFT_OFFSET_BIT | \ 3125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org IMAGE_MAP_COLOR_BIT) 3126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Bits to indicate what state has changed. 3129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 3131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_MODELVIEW (1 << 0) /**< gl_context::ModelView */ 3132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_PROJECTION (1 << 1) /**< gl_context::Projection */ 3133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_TEXTURE_MATRIX (1 << 2) /**< gl_context::TextureMatrix */ 3134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_COLOR (1 << 3) /**< gl_context::Color */ 3135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_DEPTH (1 << 4) /**< gl_context::Depth */ 3136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_EVAL (1 << 5) /**< gl_context::Eval, EvalMap */ 3137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_FOG (1 << 6) /**< gl_context::Fog */ 3138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_HINT (1 << 7) /**< gl_context::Hint */ 3139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_LIGHT (1 << 8) /**< gl_context::Light */ 3140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_LINE (1 << 9) /**< gl_context::Line */ 3141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_PIXEL (1 << 10) /**< gl_context::Pixel */ 3142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_POINT (1 << 11) /**< gl_context::Point */ 3143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_POLYGON (1 << 12) /**< gl_context::Polygon */ 3144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_POLYGONSTIPPLE (1 << 13) /**< gl_context::PolygonStipple */ 3145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_SCISSOR (1 << 14) /**< gl_context::Scissor */ 3146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_STENCIL (1 << 15) /**< gl_context::Stencil */ 3147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_TEXTURE (1 << 16) /**< gl_context::Texture */ 3148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_TRANSFORM (1 << 17) /**< gl_context::Transform */ 3149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_VIEWPORT (1 << 18) /**< gl_context::Viewport */ 3150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_PACKUNPACK (1 << 19) /**< gl_context::Pack, Unpack */ 3151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_ARRAY (1 << 20) /**< gl_context::Array */ 3152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_RENDERMODE (1 << 21) /**< gl_context::RenderMode, etc */ 3153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_BUFFERS (1 << 22) /**< gl_context::Visual, DrawBuffer, */ 3154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_CURRENT_ATTRIB (1 << 23) /**< gl_context::Current */ 3155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_MULTISAMPLE (1 << 24) /**< gl_context::Multisample */ 3156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_TRACK_MATRIX (1 << 25) /**< gl_context::VertexProgram */ 3157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_PROGRAM (1 << 26) /**< New program/shader state */ 3158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_PROGRAM_CONSTANTS (1 << 27) 3159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_BUFFER_OBJECT (1 << 28) 3160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_FRAG_CLAMP (1 << 29) 3161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_TRANSFORM_FEEDBACK (1 << 30) /**< gl_context::TransformFeedback */ 3162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_VARYING_VP_INPUTS (1 << 31) /**< gl_context::varying_vp_inputs */ 3163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_ALL ~0 3164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * We use _NEW_TRANSFORM for GL_RASTERIZER_DISCARD. This #define is for 3167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * clarity. 3168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _NEW_RASTERIZER_DISCARD _NEW_TRANSFORM 3170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 3171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name A bunch of flags that we think might be useful to drivers. 3175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Set in the __struct gl_contextRec::_TriangleCaps bitfield. 3177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 3179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_SEPARATE_SPECULAR (1 << 0) 3180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_TRI_LIGHT_TWOSIDE (1 << 1) 3181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_TRI_UNFILLED (1 << 2) 3182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_TRI_SMOOTH (1 << 3) 3183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_TRI_STIPPLE (1 << 4) 3184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_TRI_OFFSET (1 << 5) 3185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_LINE_SMOOTH (1 << 6) 3186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_LINE_STIPPLE (1 << 7) 3187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_POINT_SMOOTH (1 << 8) 3188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DD_POINT_ATTEN (1 << 9) 3189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 3190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Composite state flags 3194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 3196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _MESA_NEW_NEED_EYE_COORDS (_NEW_LIGHT | \ 3197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_TEXTURE | \ 3198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_POINT | \ 3199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_PROGRAM | \ 3200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_MODELVIEW) 3201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _MESA_NEW_SEPARATE_SPECULAR (_NEW_LIGHT | \ 3203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_FOG | \ 3204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _NEW_PROGRAM) 3205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 3208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This has to be included here. */ 3213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "dd.h" 3214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Display list flags. 3218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Strictly this is a tnl-private concept, but it doesn't seem 3219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * worthwhile adding a tnl private structure just to hold this one bit 3220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of information: 3221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DLIST_DANGLING_REFS 0x1 3223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Opaque declaration of display list payload data type */ 3226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion gl_dlist_node; 3227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Provide a location where information about a display list can be 3231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * collected. Could be extended with driverPrivate structures, 3232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * etc. in the future. 3233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_display_list 3235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Name; 3237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield Flags; /**< DLIST_x flags */ 3238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The dlist commands are in a linked list of nodes */ 3239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union gl_dlist_node *Head; 3240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * State used during display list compilation and execution. 3245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_dlist_state 3247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint CallDepth; /**< Current recursion calling depth */ 3249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_display_list *CurrentList; /**< List currently being compiled */ 3251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */ 3252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint CurrentPos; /**< Index into current block of nodes */ 3253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLvertexformat ListVtxfmt; 3255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; 3257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4]; 3258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; 3260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; 3261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 3263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* State known to have been set by the currently-compiling display 3264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * list. Used to eliminate some redundant state changes. 3265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ShadeModel; 3267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } Current; 3268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * An error, warning, or other piece of debug information for an application 3272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to consume via GL_ARB_debug_output. 3273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_debug_msg 3275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum source; 3277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum type; 3278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint id; 3279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum severity; 3280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei length; 3281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLcharARB *message; 3282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum { 3285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org API_ERROR_UNKNOWN, 3286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org API_ERROR_COUNT 3287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_api_error; 3288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum { 3290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org WINSYS_ERROR_UNKNOWN, 3291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org WINSYS_ERROR_COUNT 3292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_winsys_error; 3293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum { 3295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SHADER_ERROR_UNKNOWN, 3296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SHADER_ERROR_COUNT 3297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_shader_error; 3298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum { 3300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OTHER_ERROR_UNKNOWN, 3301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OTHER_ERROR_OUT_OF_MEMORY, 3302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OTHER_ERROR_COUNT 3303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_other_error; 3304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_client_namespace 3306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _mesa_HashTable *IDs; 3308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned ZeroID; /* a HashTable won't take zero, so store its state here */ 3309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct simple_node Severity[3]; /* lists of IDs in the hash table */ 3310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_client_debug 3313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Defaults[3][2][6]; /* severity, source, type */ 3315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_client_namespace Namespaces[2][6]; /* source, type */ 3316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_debug_state 3319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLDEBUGPROCARB Callback; 3321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLvoid *CallbackData; 3322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean SyncOutput; 3323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ApiErrors[API_ERROR_COUNT]; 3324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean WinsysErrors[WINSYS_ERROR_COUNT]; 3325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ShaderErrors[SHADER_ERROR_COUNT]; 3326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean OtherErrors[OTHER_ERROR_COUNT]; 3327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_client_debug ClientIDs; 3328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_debug_msg Log[MAX_DEBUG_LOGGED_MESSAGES]; 3329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint NumMessages; 3330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint NextMsg; 3331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint NextMsgLength; /* redundant, but copied here from Log[NextMsg].length 3332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for the sake of the offsetof() code in get.c */ 3333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enum for the OpenGL APIs we know about and may support. 3337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 3339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org API_OPENGL, /* legacy / compatibility contexts */ 3341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org API_OPENGLES, 3342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org API_OPENGLES2, 3343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org API_OPENGL_CORE, 3344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org API_LAST = API_OPENGL_CORE, 3346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} gl_api; 3347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Driver-specific state flags. 3350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These are or'd with gl_context::NewDriverState to notify a driver about 3352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a state change. The driver sets the flags at context creation and 3353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the meaning of the bits set is opaque to core Mesa. 3354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_driver_flags 3356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield NewArray; /**< Vertex array state */ 3358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_uniform_buffer_binding 3361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *BufferObject; 3363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Start of uniform block data in the buffer */ 3364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLintptr Offset; 3365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Size of data allowed to be referenced from the buffer (in bytes) */ 3366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizeiptr Size; 3367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 3368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glBindBufferBase() indicates that the Size should be ignored and only 3369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * limited by the current size of the BufferObject. 3370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean AutomaticSize; 3372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 3375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa rendering context. 3376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is the central context data structure for Mesa. Almost all 3378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OpenGL state is contained in this structure. 3379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Think of this as a base class from which device drivers will derive 3380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sub classes. 3381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The struct gl_context typedef names this structure. 3383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gl_context 3385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** State possibly shared with other contexts in the address space */ 3387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shared_state *Shared; 3388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name API function pointer tables */ 3390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_api API; 3392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _glapi_table *Save; /**< Display list save functions */ 3393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _glapi_table *Exec; /**< Execute functions */ 3394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct _glapi_table *CurrentDispatch; /**< == Save or Exec !! */ 3395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_config Visual; 3398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ 3399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_framebuffer *ReadBuffer; /**< buffer for reading */ 3400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_framebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */ 3401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_framebuffer *WinSysReadBuffer; /**< set with MakeCurrent */ 3402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 3404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Device driver function pointer table 3405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dd_function_table Driver; 3407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *DriverCtx; /**< Points to device driver context/state */ 3409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Core/Driver constants */ 3411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_constants Const; 3412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name The various 4x4 matrix stacks */ 3414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_matrix_stack ModelviewMatrixStack; 3416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_matrix_stack ProjectionMatrixStack; 3417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS]; 3418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES]; 3419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */ 3420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Combined modelview and projection matrix */ 3423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLmatrix _ModelProjectMatrix; 3424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Display lists */ 3426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_dlist_state ListState; 3427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ExecuteFlag; /**< Execute GL commands? */ 3429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean CompileFlag; /**< Compile GL commands into display list? */ 3430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Extension information */ 3432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_extensions Extensions; 3433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** GL version integer, for example 31 for GL 3.1, or 20 for GLES 2.0. */ 3435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint Version; 3436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *VersionString; 3437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name State attribute stack (for glPush/PopAttrib) */ 3439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint AttribStackDepth; 3441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH]; 3442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Renderer attribute groups 3445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * We define a struct for each attribute group to make pushing and popping 3447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * attributes easy. Also it's a good organization. 3448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_accum_attrib Accum; /**< Accum buffer attributes */ 3451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */ 3452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_current_attrib Current; /**< Current attributes */ 3453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */ 3454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_eval_attrib Eval; /**< Eval attributes */ 3455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_fog_attrib Fog; /**< Fog attributes */ 3456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_hint_attrib Hint; /**< Hint attributes */ 3457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_light_attrib Light; /**< Light attributes */ 3458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_line_attrib Line; /**< Line attributes */ 3459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_list_attrib List; /**< List attributes */ 3460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_multisample_attrib Multisample; 3461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixel_attrib Pixel; /**< Pixel attributes */ 3462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_point_attrib Point; /**< Point attributes */ 3463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_polygon_attrib Polygon; /**< Polygon attributes */ 3464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint PolygonStipple[32]; /**< Polygon stipple */ 3465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_scissor_attrib Scissor; /**< Scissor attributes */ 3466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_stencil_attrib Stencil; /**< Stencil buffer attributes */ 3467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_attrib Texture; /**< Texture attributes */ 3468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_attrib Transform; /**< Transformation attributes */ 3469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_viewport_attrib Viewport; /**< Viewport attributes */ 3470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Client attribute stack */ 3473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ClientAttribStackDepth; 3475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; 3476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Client attribute groups */ 3479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_array_attrib Array; /**< Vertex arrays */ 3481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelstore_attrib Pack; /**< Pixel packing */ 3482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelstore_attrib Unpack; /**< Pixel unpacking */ 3483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelstore_attrib DefaultPacking; /**< Default params */ 3484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Other assorted state (not pushed/popped on attribute stack) */ 3487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_pixelmaps PixelMaps; 3489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_evaluators EvalMap; /**< All evaluators */ 3491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_feedback Feedback; /**< Feedback */ 3492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_selection Select; /**< Selection */ 3493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_program_state Program; /**< general program state */ 3495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_vertex_program_state VertexProgram; 3496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_fragment_program_state FragmentProgram; 3497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_geometry_program_state GeometryProgram; 3498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_ati_fragment_shader_state ATIFragmentShader; 3499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_state Shader; /**< GLSL shader object state */ 3501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_TYPES]; 3502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_state Query; /**< occlusion, timer queries */ 3504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_state TransformFeedback; 3506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */ 3508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */ 3509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 3511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Current GL_ARB_uniform_buffer_object binding referenced by 3512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_UNIFORM_BUFFER target for glBufferData, glMapBuffer, etc. 3513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *UniformBuffer; 3515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 3517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Array of uniform buffers for GL_ARB_uniform_buffer_object and GL 3.1. 3518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is set up using glBindBufferRange() or glBindBufferBase(). They are 3519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * associated with uniform blocks by glUniformBlockBinding()'s state in the 3520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * shader program. 3521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_uniform_buffer_binding *UniformBufferBindings; 3523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_meta_state *Meta; /**< for "meta" operations */ 3527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_framebuffer_object */ 3529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_renderbuffer *CurrentRenderbuffer; 3530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ErrorValue; /**< Last error code */ 3532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_robustness */ 3534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum ResetStatus; 3535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 3537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Recognize and silence repeated error debug messages in buggy apps. 3538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *ErrorDebugFmtString; 3540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ErrorDebugCount; 3541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_debug_output */ 3543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_debug_state Debug; 3544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */ 3546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield NewState; /**< bitwise-or of _NEW_* flags */ 3547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield NewDriverState;/**< bitwise-or of flags from DriverFlags */ 3548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_driver_flags DriverFlags; 3550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ViewportInitialized; /**< has viewport size been initialized? */ 3552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 varying_vp_inputs; /**< mask of VERT_BIT_* flags */ 3554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name Derived state */ 3556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Bitwise-or of DD_* flags. Note that this bitfield may be used before 3558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * state validation so they need to always be current. 3559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _TriangleCaps; 3561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ 3562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _EyeZDir[3]; 3563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat _ModelViewInvScale; 3564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _NeedEyeCoords; 3565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean _ForceEyeCoords; 3566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint TextureStateTimestamp; /**< detect changes to shared state */ 3568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_list_extensions *ListExt; /**< driver dlist extensions */ 3570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** \name For debugging/development only */ 3572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean FirstTimeCurrent; 3574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** software compression/decompression supported or not */ 3577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean Mesa_DXTn; 3578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean TextureFormatSupported[MESA_FORMAT_COUNT]; 3580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 3582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Use dp4 (rather than mul/mad) instructions for position 3583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * transformation? 3584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean mvp_with_dp4; 3586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */ 3588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 3590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Hooks for module contexts. 3591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These will eventually live in the driver or elsewhere. 3593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 3594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 3595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *swrast_context; 3596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *swsetup_context; 3597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *swtnl_context; 3598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *swtnl_im; 3599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct st_context *st; 3600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *aelt_context; 3601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 3602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef DEBUG 3606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern int MESA_VERBOSE; 3607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern int MESA_DEBUG_FLAGS; 3608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define MESA_FUNCTION __FUNCTION__ 3609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 3610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define MESA_VERBOSE 0 3611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define MESA_DEBUG_FLAGS 0 3612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define MESA_FUNCTION "a function" 3613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# ifndef NDEBUG 3614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define NDEBUG 3615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# endif 3616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 3617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** The MESA_VERBOSE var is a bitmask of these flags */ 3620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum _verbose 3621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_VARRAY = 0x0001, 3623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_TEXTURE = 0x0002, 3624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_MATERIAL = 0x0004, 3625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_PIPELINE = 0x0008, 3626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_DRIVER = 0x0010, 3627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_STATE = 0x0020, 3628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_API = 0x0040, 3629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_DISPLAY_LIST = 0x0100, 3630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_LIGHTING = 0x0200, 3631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_PRIMS = 0x0400, 3632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_VERTS = 0x0800, 3633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_DISASSEM = 0x1000, 3634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_DRAW = 0x2000, 3635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERBOSE_SWAPBUFFERS = 0x4000 3636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** The MESA_DEBUG_FLAGS var is a bitmask of these flags */ 3640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum _debug 3641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 3642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEBUG_SILENT = (1 << 0), 3643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEBUG_ALWAYS_FLUSH = (1 << 1), 3644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEBUG_INCOMPLETE_TEXTURE = (1 << 2), 3645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEBUG_INCOMPLETE_FBO = (1 << 3) 3646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 3647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 3651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 3652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 3653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* MTYPES_H */ 3655