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