Home | History | Annotate | Download | only in main
      1 /*
      2  * Mesa 3-D graphics library
      3  *
      4  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
      5  * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
      6  *
      7  * Permission is hereby granted, free of charge, to any person obtaining a
      8  * copy of this software and associated documentation files (the "Software"),
      9  * to deal in the Software without restriction, including without limitation
     10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     11  * and/or sell copies of the Software, and to permit persons to whom the
     12  * Software is furnished to do so, subject to the following conditions:
     13  *
     14  * The above copyright notice and this permission notice shall be included
     15  * in all copies or substantial portions of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     21  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     22  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     23  * OTHER DEALINGS IN THE SOFTWARE.
     24  */
     25 
     26 /**
     27  * \file mtypes.h
     28  * Main Mesa data structures.
     29  *
     30  * Please try to mark derived values with a leading underscore ('_').
     31  */
     32 
     33 #ifndef MTYPES_H
     34 #define MTYPES_H
     35 
     36 
     37 #include <stdint.h>             /* uint32_t */
     38 #include <stdbool.h>
     39 #include "c11/threads.h"
     40 
     41 #include "main/glheader.h"
     42 #include "main/config.h"
     43 #include "glapi/glapi.h"
     44 #include "math/m_matrix.h"	/* GLmatrix */
     45 #include "compiler/shader_enums.h"
     46 #include "compiler/shader_info.h"
     47 #include "main/formats.h"       /* MESA_FORMAT_COUNT */
     48 #include "compiler/glsl/list.h"
     49 #include "util/bitscan.h"
     50 
     51 
     52 #ifdef __cplusplus
     53 extern "C" {
     54 #endif
     55 
     56 
     57 /**
     58  * \name 64-bit extension of GLbitfield.
     59  */
     60 /*@{*/
     61 typedef GLuint64 GLbitfield64;
     62 
     63 /** Set a single bit */
     64 #define BITFIELD64_BIT(b)      ((GLbitfield64)1 << (b))
     65 /** Set all bits up to excluding bit b */
     66 #define BITFIELD64_MASK(b)      \
     67    ((b) == 64 ? (~(GLbitfield64)0) : BITFIELD64_BIT(b) - 1)
     68 /** Set count bits starting from bit b  */
     69 #define BITFIELD64_RANGE(b, count) \
     70    (BITFIELD64_MASK((b) + (count)) & ~BITFIELD64_MASK(b))
     71 
     72 
     73 /**
     74  * \name Some forward type declarations
     75  */
     76 /*@{*/
     77 struct _mesa_HashTable;
     78 struct gl_attrib_node;
     79 struct gl_list_extensions;
     80 struct gl_meta_state;
     81 struct gl_program_cache;
     82 struct gl_texture_object;
     83 struct gl_debug_state;
     84 struct gl_context;
     85 struct st_context;
     86 struct gl_uniform_storage;
     87 struct prog_instruction;
     88 struct gl_program_parameter_list;
     89 struct set;
     90 struct set_entry;
     91 struct vbo_context;
     92 /*@}*/
     93 
     94 
     95 /** Extra draw modes beyond GL_POINTS, GL_TRIANGLE_FAN, etc */
     96 #define PRIM_MAX                 GL_PATCHES
     97 #define PRIM_OUTSIDE_BEGIN_END   (PRIM_MAX + 1)
     98 #define PRIM_UNKNOWN             (PRIM_MAX + 2)
     99 
    100 /**
    101  * Determine if the given gl_varying_slot appears in the fragment shader.
    102  */
    103 static inline GLboolean
    104 _mesa_varying_slot_in_fs(gl_varying_slot slot)
    105 {
    106    switch (slot) {
    107    case VARYING_SLOT_PSIZ:
    108    case VARYING_SLOT_BFC0:
    109    case VARYING_SLOT_BFC1:
    110    case VARYING_SLOT_EDGE:
    111    case VARYING_SLOT_CLIP_VERTEX:
    112    case VARYING_SLOT_LAYER:
    113    case VARYING_SLOT_TESS_LEVEL_OUTER:
    114    case VARYING_SLOT_TESS_LEVEL_INNER:
    115    case VARYING_SLOT_BOUNDING_BOX0:
    116    case VARYING_SLOT_BOUNDING_BOX1:
    117       return GL_FALSE;
    118    default:
    119       return GL_TRUE;
    120    }
    121 }
    122 
    123 /**
    124  * Indexes for all renderbuffers
    125  */
    126 typedef enum
    127 {
    128    /* the four standard color buffers */
    129    BUFFER_FRONT_LEFT,
    130    BUFFER_BACK_LEFT,
    131    BUFFER_FRONT_RIGHT,
    132    BUFFER_BACK_RIGHT,
    133    BUFFER_DEPTH,
    134    BUFFER_STENCIL,
    135    BUFFER_ACCUM,
    136    /* optional aux buffer */
    137    BUFFER_AUX0,
    138    /* generic renderbuffers */
    139    BUFFER_COLOR0,
    140    BUFFER_COLOR1,
    141    BUFFER_COLOR2,
    142    BUFFER_COLOR3,
    143    BUFFER_COLOR4,
    144    BUFFER_COLOR5,
    145    BUFFER_COLOR6,
    146    BUFFER_COLOR7,
    147    BUFFER_COUNT
    148 } gl_buffer_index;
    149 
    150 /**
    151  * Bit flags for all renderbuffers
    152  */
    153 #define BUFFER_BIT_FRONT_LEFT   (1 << BUFFER_FRONT_LEFT)
    154 #define BUFFER_BIT_BACK_LEFT    (1 << BUFFER_BACK_LEFT)
    155 #define BUFFER_BIT_FRONT_RIGHT  (1 << BUFFER_FRONT_RIGHT)
    156 #define BUFFER_BIT_BACK_RIGHT   (1 << BUFFER_BACK_RIGHT)
    157 #define BUFFER_BIT_AUX0         (1 << BUFFER_AUX0)
    158 #define BUFFER_BIT_AUX1         (1 << BUFFER_AUX1)
    159 #define BUFFER_BIT_AUX2         (1 << BUFFER_AUX2)
    160 #define BUFFER_BIT_AUX3         (1 << BUFFER_AUX3)
    161 #define BUFFER_BIT_DEPTH        (1 << BUFFER_DEPTH)
    162 #define BUFFER_BIT_STENCIL      (1 << BUFFER_STENCIL)
    163 #define BUFFER_BIT_ACCUM        (1 << BUFFER_ACCUM)
    164 #define BUFFER_BIT_COLOR0       (1 << BUFFER_COLOR0)
    165 #define BUFFER_BIT_COLOR1       (1 << BUFFER_COLOR1)
    166 #define BUFFER_BIT_COLOR2       (1 << BUFFER_COLOR2)
    167 #define BUFFER_BIT_COLOR3       (1 << BUFFER_COLOR3)
    168 #define BUFFER_BIT_COLOR4       (1 << BUFFER_COLOR4)
    169 #define BUFFER_BIT_COLOR5       (1 << BUFFER_COLOR5)
    170 #define BUFFER_BIT_COLOR6       (1 << BUFFER_COLOR6)
    171 #define BUFFER_BIT_COLOR7       (1 << BUFFER_COLOR7)
    172 
    173 /**
    174  * Mask of all the color buffer bits (but not accum).
    175  */
    176 #define BUFFER_BITS_COLOR  (BUFFER_BIT_FRONT_LEFT | \
    177                             BUFFER_BIT_BACK_LEFT | \
    178                             BUFFER_BIT_FRONT_RIGHT | \
    179                             BUFFER_BIT_BACK_RIGHT | \
    180                             BUFFER_BIT_AUX0 | \
    181                             BUFFER_BIT_COLOR0 | \
    182                             BUFFER_BIT_COLOR1 | \
    183                             BUFFER_BIT_COLOR2 | \
    184                             BUFFER_BIT_COLOR3 | \
    185                             BUFFER_BIT_COLOR4 | \
    186                             BUFFER_BIT_COLOR5 | \
    187                             BUFFER_BIT_COLOR6 | \
    188                             BUFFER_BIT_COLOR7)
    189 
    190 /**
    191  * Framebuffer configuration (aka visual / pixelformat)
    192  * Note: some of these fields should be boolean, but it appears that
    193  * code in drivers/dri/common/util.c requires int-sized fields.
    194  */
    195 struct gl_config
    196 {
    197    GLboolean rgbMode;
    198    GLboolean floatMode;
    199    GLuint doubleBufferMode;
    200    GLuint stereoMode;
    201 
    202    GLboolean haveAccumBuffer;
    203    GLboolean haveDepthBuffer;
    204    GLboolean haveStencilBuffer;
    205 
    206    GLint redBits, greenBits, blueBits, alphaBits;	/* bits per comp */
    207    GLuint redMask, greenMask, blueMask, alphaMask;
    208    GLint rgbBits;		/* total bits for rgb */
    209    GLint indexBits;		/* total bits for colorindex */
    210 
    211    GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
    212    GLint depthBits;
    213    GLint stencilBits;
    214 
    215    GLint numAuxBuffers;
    216 
    217    GLint level;
    218 
    219    /* EXT_visual_rating / GLX 1.2 */
    220    GLint visualRating;
    221 
    222    /* EXT_visual_info / GLX 1.2 */
    223    GLint transparentPixel;
    224    /*    colors are floats scaled to ints */
    225    GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha;
    226    GLint transparentIndex;
    227 
    228    /* ARB_multisample / SGIS_multisample */
    229    GLint sampleBuffers;
    230    GLint samples;
    231 
    232    /* SGIX_pbuffer / GLX 1.3 */
    233    GLint maxPbufferWidth;
    234    GLint maxPbufferHeight;
    235    GLint maxPbufferPixels;
    236    GLint optimalPbufferWidth;   /* Only for SGIX_pbuffer. */
    237    GLint optimalPbufferHeight;  /* Only for SGIX_pbuffer. */
    238 
    239    /* OML_swap_method */
    240    GLint swapMethod;
    241 
    242    /* EXT_texture_from_pixmap */
    243    GLint bindToTextureRgb;
    244    GLint bindToTextureRgba;
    245    GLint bindToMipmapTexture;
    246    GLint bindToTextureTargets;
    247    GLint yInverted;
    248 
    249    /* EXT_framebuffer_sRGB */
    250    GLint sRGBCapable;
    251 };
    252 
    253 
    254 /**
    255  * \name Bit flags used for updating material values.
    256  */
    257 /*@{*/
    258 #define MAT_ATTRIB_FRONT_AMBIENT           0
    259 #define MAT_ATTRIB_BACK_AMBIENT            1
    260 #define MAT_ATTRIB_FRONT_DIFFUSE           2
    261 #define MAT_ATTRIB_BACK_DIFFUSE            3
    262 #define MAT_ATTRIB_FRONT_SPECULAR          4
    263 #define MAT_ATTRIB_BACK_SPECULAR           5
    264 #define MAT_ATTRIB_FRONT_EMISSION          6
    265 #define MAT_ATTRIB_BACK_EMISSION           7
    266 #define MAT_ATTRIB_FRONT_SHININESS         8
    267 #define MAT_ATTRIB_BACK_SHININESS          9
    268 #define MAT_ATTRIB_FRONT_INDEXES           10
    269 #define MAT_ATTRIB_BACK_INDEXES            11
    270 #define MAT_ATTRIB_MAX                     12
    271 
    272 #define MAT_ATTRIB_AMBIENT(f)  (MAT_ATTRIB_FRONT_AMBIENT+(f))
    273 #define MAT_ATTRIB_DIFFUSE(f)  (MAT_ATTRIB_FRONT_DIFFUSE+(f))
    274 #define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f))
    275 #define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f))
    276 #define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f))
    277 #define MAT_ATTRIB_INDEXES(f)  (MAT_ATTRIB_FRONT_INDEXES+(f))
    278 
    279 #define MAT_INDEX_AMBIENT  0
    280 #define MAT_INDEX_DIFFUSE  1
    281 #define MAT_INDEX_SPECULAR 2
    282 
    283 #define MAT_BIT_FRONT_AMBIENT         (1<<MAT_ATTRIB_FRONT_AMBIENT)
    284 #define MAT_BIT_BACK_AMBIENT          (1<<MAT_ATTRIB_BACK_AMBIENT)
    285 #define MAT_BIT_FRONT_DIFFUSE         (1<<MAT_ATTRIB_FRONT_DIFFUSE)
    286 #define MAT_BIT_BACK_DIFFUSE          (1<<MAT_ATTRIB_BACK_DIFFUSE)
    287 #define MAT_BIT_FRONT_SPECULAR        (1<<MAT_ATTRIB_FRONT_SPECULAR)
    288 #define MAT_BIT_BACK_SPECULAR         (1<<MAT_ATTRIB_BACK_SPECULAR)
    289 #define MAT_BIT_FRONT_EMISSION        (1<<MAT_ATTRIB_FRONT_EMISSION)
    290 #define MAT_BIT_BACK_EMISSION         (1<<MAT_ATTRIB_BACK_EMISSION)
    291 #define MAT_BIT_FRONT_SHININESS       (1<<MAT_ATTRIB_FRONT_SHININESS)
    292 #define MAT_BIT_BACK_SHININESS        (1<<MAT_ATTRIB_BACK_SHININESS)
    293 #define MAT_BIT_FRONT_INDEXES         (1<<MAT_ATTRIB_FRONT_INDEXES)
    294 #define MAT_BIT_BACK_INDEXES          (1<<MAT_ATTRIB_BACK_INDEXES)
    295 
    296 
    297 #define FRONT_MATERIAL_BITS	(MAT_BIT_FRONT_EMISSION | 	\
    298 				 MAT_BIT_FRONT_AMBIENT |	\
    299 				 MAT_BIT_FRONT_DIFFUSE | 	\
    300 				 MAT_BIT_FRONT_SPECULAR |	\
    301 				 MAT_BIT_FRONT_SHININESS | 	\
    302 				 MAT_BIT_FRONT_INDEXES)
    303 
    304 #define BACK_MATERIAL_BITS	(MAT_BIT_BACK_EMISSION |	\
    305 				 MAT_BIT_BACK_AMBIENT |		\
    306 				 MAT_BIT_BACK_DIFFUSE |		\
    307 				 MAT_BIT_BACK_SPECULAR |	\
    308 				 MAT_BIT_BACK_SHININESS |	\
    309 				 MAT_BIT_BACK_INDEXES)
    310 
    311 #define ALL_MATERIAL_BITS	(FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS)
    312 /*@}*/
    313 
    314 
    315 /**
    316  * Material state.
    317  */
    318 struct gl_material
    319 {
    320    GLfloat Attrib[MAT_ATTRIB_MAX][4];
    321 };
    322 
    323 
    324 /**
    325  * Light state flags.
    326  */
    327 /*@{*/
    328 #define LIGHT_SPOT         0x1
    329 #define LIGHT_LOCAL_VIEWER 0x2
    330 #define LIGHT_POSITIONAL   0x4
    331 #define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER)
    332 /*@}*/
    333 
    334 
    335 /**
    336  * Light source state.
    337  */
    338 struct gl_light
    339 {
    340    GLfloat Ambient[4];		/**< ambient color */
    341    GLfloat Diffuse[4];		/**< diffuse color */
    342    GLfloat Specular[4];		/**< specular color */
    343    GLfloat EyePosition[4];	/**< position in eye coordinates */
    344    GLfloat SpotDirection[4];	/**< spotlight direction in eye coordinates */
    345    GLfloat SpotExponent;
    346    GLfloat SpotCutoff;		/**< in degrees */
    347    GLfloat _CosCutoff;		/**< = MAX(0, cos(SpotCutoff)) */
    348    GLfloat ConstantAttenuation;
    349    GLfloat LinearAttenuation;
    350    GLfloat QuadraticAttenuation;
    351    GLboolean Enabled;		/**< On/off flag */
    352 
    353    /**
    354     * \name Derived fields
    355     */
    356    /*@{*/
    357    GLbitfield _Flags;		/**< Mask of LIGHT_x bits defined above */
    358 
    359    GLfloat _Position[4];	/**< position in eye/obj coordinates */
    360    GLfloat _VP_inf_norm[3];	/**< Norm direction to infinite light */
    361    GLfloat _h_inf_norm[3];	/**< Norm( _VP_inf_norm + <0,0,1> ) */
    362    GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */
    363    GLfloat _VP_inf_spot_attenuation;
    364 
    365    GLfloat _MatAmbient[2][3];	/**< material ambient * light ambient */
    366    GLfloat _MatDiffuse[2][3];	/**< material diffuse * light diffuse */
    367    GLfloat _MatSpecular[2][3];	/**< material spec * light specular */
    368    /*@}*/
    369 };
    370 
    371 
    372 /**
    373  * Light model state.
    374  */
    375 struct gl_lightmodel
    376 {
    377    GLfloat Ambient[4];		/**< ambient color */
    378    GLboolean LocalViewer;	/**< Local (or infinite) view point? */
    379    GLboolean TwoSide;		/**< Two (or one) sided lighting? */
    380    GLenum ColorControl;		/**< either GL_SINGLE_COLOR
    381 				 *    or GL_SEPARATE_SPECULAR_COLOR */
    382 };
    383 
    384 
    385 /**
    386  * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT)
    387  */
    388 struct gl_accum_attrib
    389 {
    390    GLfloat ClearColor[4];	/**< Accumulation buffer clear color */
    391 };
    392 
    393 
    394 /**
    395  * Used for storing clear color, texture border color, etc.
    396  * The float values are typically unclamped.
    397  */
    398 union gl_color_union
    399 {
    400    GLfloat f[4];
    401    GLint i[4];
    402    GLuint ui[4];
    403 };
    404 
    405 
    406 /**
    407  * Color buffer attribute group (GL_COLOR_BUFFER_BIT).
    408  */
    409 struct gl_colorbuffer_attrib
    410 {
    411    GLuint ClearIndex;                      /**< Index for glClear */
    412    union gl_color_union ClearColor;        /**< Color for glClear, unclamped */
    413    GLuint IndexMask;                       /**< Color index write mask */
    414    GLubyte ColorMask[MAX_DRAW_BUFFERS][4]; /**< Each flag is 0xff or 0x0 */
    415 
    416    GLenum DrawBuffer[MAX_DRAW_BUFFERS];	/**< Which buffer to draw into */
    417 
    418    /**
    419     * \name alpha testing
    420     */
    421    /*@{*/
    422    GLboolean AlphaEnabled;		/**< Alpha test enabled flag */
    423    GLenum AlphaFunc;			/**< Alpha test function */
    424    GLfloat AlphaRefUnclamped;
    425    GLclampf AlphaRef;			/**< Alpha reference value */
    426    /*@}*/
    427 
    428    /**
    429     * \name Blending
    430     */
    431    /*@{*/
    432    GLbitfield BlendEnabled;		/**< Per-buffer blend enable flags */
    433 
    434    /* NOTE: this does _not_ depend on fragment clamping or any other clamping
    435     * control, only on the fixed-pointness of the render target.
    436     * The query does however depend on fragment color clamping.
    437     */
    438    GLfloat BlendColorUnclamped[4];               /**< Blending color */
    439    GLfloat BlendColor[4];		/**< Blending color */
    440 
    441    struct
    442    {
    443       GLenum SrcRGB;             /**< RGB blend source term */
    444       GLenum DstRGB;             /**< RGB blend dest term */
    445       GLenum SrcA;               /**< Alpha blend source term */
    446       GLenum DstA;               /**< Alpha blend dest term */
    447       GLenum EquationRGB;        /**< GL_ADD, GL_SUBTRACT, etc. */
    448       GLenum EquationA;          /**< GL_ADD, GL_SUBTRACT, etc. */
    449       /**
    450        * Set if any blend factor uses SRC1.  Computed at the time blend factors
    451        * get set.
    452        */
    453       GLboolean _UsesDualSrc;
    454    } Blend[MAX_DRAW_BUFFERS];
    455    /** Are the blend func terms currently different for each buffer/target? */
    456    GLboolean _BlendFuncPerBuffer;
    457    /** Are the blend equations currently different for each buffer/target? */
    458    GLboolean _BlendEquationPerBuffer;
    459 
    460    /**
    461     * Which advanced blending mode is in use (or BLEND_NONE).
    462     *
    463     * KHR_blend_equation_advanced only allows advanced blending with a single
    464     * draw buffer, and NVX_blend_equation_advanced_multi_draw_buffer still
    465     * requires all draw buffers to match, so we only need a single value.
    466     */
    467    enum gl_advanced_blend_mode _AdvancedBlendMode;
    468 
    469    /** Coherency requested via glEnable(GL_BLEND_ADVANCED_COHERENT_KHR)? */
    470    bool BlendCoherent;
    471    /*@}*/
    472 
    473    /**
    474     * \name Logic op
    475     */
    476    /*@{*/
    477    GLboolean IndexLogicOpEnabled;	/**< Color index logic op enabled flag */
    478    GLboolean ColorLogicOpEnabled;	/**< RGBA logic op enabled flag */
    479    GLenum LogicOp;			/**< Logic operator */
    480 
    481    /*@}*/
    482 
    483    GLboolean DitherFlag;		/**< Dither enable flag */
    484 
    485    GLboolean _ClampFragmentColor; /** < with GL_FIXED_ONLY_ARB resolved */
    486    GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
    487    GLenum ClampReadColor;     /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
    488 
    489    GLboolean sRGBEnabled;    /**< Framebuffer sRGB blending/updating requested */
    490 };
    491 
    492 
    493 /**
    494  * Current attribute group (GL_CURRENT_BIT).
    495  */
    496 struct gl_current_attrib
    497 {
    498    /**
    499     * \name Current vertex attributes (color, texcoords, etc).
    500     * \note Values are valid only after FLUSH_VERTICES has been called.
    501     * \note Index and Edgeflag current values are stored as floats in the
    502     * SIX and SEVEN attribute slots.
    503     * \note We need double storage for 64-bit vertex attributes
    504     */
    505    GLfloat Attrib[VERT_ATTRIB_MAX][4*2];
    506 
    507    /**
    508     * \name Current raster position attributes (always up to date after a
    509     * glRasterPos call).
    510     */
    511    GLfloat RasterPos[4];
    512    GLfloat RasterDistance;
    513    GLfloat RasterColor[4];
    514    GLfloat RasterSecondaryColor[4];
    515    GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4];
    516    GLboolean RasterPosValid;
    517 };
    518 
    519 
    520 /**
    521  * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT).
    522  */
    523 struct gl_depthbuffer_attrib
    524 {
    525    GLenum Func;			/**< Function for depth buffer compare */
    526    GLclampd Clear;		/**< Value to clear depth buffer to */
    527    GLboolean Test;		/**< Depth buffering enabled flag */
    528    GLboolean Mask;		/**< Depth buffer writable? */
    529    GLboolean BoundsTest;        /**< GL_EXT_depth_bounds_test */
    530    GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */
    531 };
    532 
    533 
    534 /**
    535  * Evaluator attribute group (GL_EVAL_BIT).
    536  */
    537 struct gl_eval_attrib
    538 {
    539    /**
    540     * \name Enable bits
    541     */
    542    /*@{*/
    543    GLboolean Map1Color4;
    544    GLboolean Map1Index;
    545    GLboolean Map1Normal;
    546    GLboolean Map1TextureCoord1;
    547    GLboolean Map1TextureCoord2;
    548    GLboolean Map1TextureCoord3;
    549    GLboolean Map1TextureCoord4;
    550    GLboolean Map1Vertex3;
    551    GLboolean Map1Vertex4;
    552    GLboolean Map2Color4;
    553    GLboolean Map2Index;
    554    GLboolean Map2Normal;
    555    GLboolean Map2TextureCoord1;
    556    GLboolean Map2TextureCoord2;
    557    GLboolean Map2TextureCoord3;
    558    GLboolean Map2TextureCoord4;
    559    GLboolean Map2Vertex3;
    560    GLboolean Map2Vertex4;
    561    GLboolean AutoNormal;
    562    /*@}*/
    563 
    564    /**
    565     * \name Map Grid endpoints and divisions and calculated du values
    566     */
    567    /*@{*/
    568    GLint MapGrid1un;
    569    GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du;
    570    GLint MapGrid2un, MapGrid2vn;
    571    GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du;
    572    GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv;
    573    /*@}*/
    574 };
    575 
    576 
    577 /**
    578  * Fog attribute group (GL_FOG_BIT).
    579  */
    580 struct gl_fog_attrib
    581 {
    582    GLboolean Enabled;		/**< Fog enabled flag */
    583    GLboolean ColorSumEnabled;
    584    GLfloat ColorUnclamped[4];            /**< Fog color */
    585    GLfloat Color[4];		/**< Fog color */
    586    GLfloat Density;		/**< Density >= 0.0 */
    587    GLfloat Start;		/**< Start distance in eye coords */
    588    GLfloat End;			/**< End distance in eye coords */
    589    GLfloat Index;		/**< Fog index */
    590    GLenum Mode;			/**< Fog mode */
    591    GLenum FogCoordinateSource;  /**< GL_EXT_fog_coord */
    592    GLfloat _Scale;		/**< (End == Start) ? 1.0 : 1.0 / (End - Start) */
    593    GLenum FogDistanceMode;     /**< GL_NV_fog_distance */
    594 };
    595 
    596 
    597 /**
    598  * Hint attribute group (GL_HINT_BIT).
    599  *
    600  * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE.
    601  */
    602 struct gl_hint_attrib
    603 {
    604    GLenum PerspectiveCorrection;
    605    GLenum PointSmooth;
    606    GLenum LineSmooth;
    607    GLenum PolygonSmooth;
    608    GLenum Fog;
    609    GLenum TextureCompression;   /**< GL_ARB_texture_compression */
    610    GLenum GenerateMipmap;       /**< GL_SGIS_generate_mipmap */
    611    GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */
    612 };
    613 
    614 
    615 /**
    616  * Lighting attribute group (GL_LIGHT_BIT).
    617  */
    618 struct gl_light_attrib
    619 {
    620    struct gl_light Light[MAX_LIGHTS];	/**< Array of light sources */
    621    struct gl_lightmodel Model;		/**< Lighting model */
    622 
    623    /**
    624     * Front and back material values.
    625     * Note: must call FLUSH_VERTICES() before using.
    626     */
    627    struct gl_material Material;
    628 
    629    GLboolean Enabled;			/**< Lighting enabled flag */
    630    GLboolean ColorMaterialEnabled;
    631 
    632    GLenum ShadeModel;			/**< GL_FLAT or GL_SMOOTH */
    633    GLenum ProvokingVertex;              /**< GL_EXT_provoking_vertex */
    634    GLenum ColorMaterialFace;		/**< GL_FRONT, BACK or FRONT_AND_BACK */
    635    GLenum ColorMaterialMode;		/**< GL_AMBIENT, GL_DIFFUSE, etc */
    636    GLbitfield _ColorMaterialBitmask;	/**< bitmask formed from Face and Mode */
    637 
    638 
    639    GLboolean _ClampVertexColor;
    640    GLenum ClampVertexColor;             /**< GL_TRUE, GL_FALSE, GL_FIXED_ONLY */
    641 
    642    /**
    643     * Derived state for optimizations:
    644     */
    645    /*@{*/
    646    GLbitfield _EnabledLights;	/**< bitmask containing enabled lights */
    647 
    648    GLboolean _NeedEyeCoords;
    649    GLboolean _NeedVertices;		/**< Use fast shader? */
    650 
    651    GLfloat _BaseColor[2][3];
    652    /*@}*/
    653 };
    654 
    655 
    656 /**
    657  * Line attribute group (GL_LINE_BIT).
    658  */
    659 struct gl_line_attrib
    660 {
    661    GLboolean SmoothFlag;	/**< GL_LINE_SMOOTH enabled? */
    662    GLboolean StippleFlag;	/**< GL_LINE_STIPPLE enabled? */
    663    GLushort StipplePattern;	/**< Stipple pattern */
    664    GLint StippleFactor;		/**< Stipple repeat factor */
    665    GLfloat Width;		/**< Line width */
    666 };
    667 
    668 
    669 /**
    670  * Display list attribute group (GL_LIST_BIT).
    671  */
    672 struct gl_list_attrib
    673 {
    674    GLuint ListBase;
    675 };
    676 
    677 
    678 /**
    679  * Multisample attribute group (GL_MULTISAMPLE_BIT).
    680  */
    681 struct gl_multisample_attrib
    682 {
    683    GLboolean Enabled;
    684    GLboolean SampleAlphaToCoverage;
    685    GLboolean SampleAlphaToOne;
    686    GLboolean SampleCoverage;
    687    GLboolean SampleCoverageInvert;
    688    GLboolean SampleShading;
    689 
    690    /* ARB_texture_multisample / GL3.2 additions */
    691    GLboolean SampleMask;
    692 
    693    GLfloat SampleCoverageValue;
    694    GLfloat MinSampleShadingValue;
    695 
    696    /** The GL spec defines this as an array but >32x MSAA is madness */
    697    GLbitfield SampleMaskValue;
    698 };
    699 
    700 
    701 /**
    702  * A pixelmap (see glPixelMap)
    703  */
    704 struct gl_pixelmap
    705 {
    706    GLint Size;
    707    GLfloat Map[MAX_PIXEL_MAP_TABLE];
    708 };
    709 
    710 
    711 /**
    712  * Collection of all pixelmaps
    713  */
    714 struct gl_pixelmaps
    715 {
    716    struct gl_pixelmap RtoR;  /**< i.e. GL_PIXEL_MAP_R_TO_R */
    717    struct gl_pixelmap GtoG;
    718    struct gl_pixelmap BtoB;
    719    struct gl_pixelmap AtoA;
    720    struct gl_pixelmap ItoR;
    721    struct gl_pixelmap ItoG;
    722    struct gl_pixelmap ItoB;
    723    struct gl_pixelmap ItoA;
    724    struct gl_pixelmap ItoI;
    725    struct gl_pixelmap StoS;
    726 };
    727 
    728 
    729 /**
    730  * Pixel attribute group (GL_PIXEL_MODE_BIT).
    731  */
    732 struct gl_pixel_attrib
    733 {
    734    GLenum ReadBuffer;		/**< source buffer for glRead/CopyPixels() */
    735 
    736    /*--- Begin Pixel Transfer State ---*/
    737    /* Fields are in the order in which they're applied... */
    738 
    739    /** Scale & Bias (index shift, offset) */
    740    /*@{*/
    741    GLfloat RedBias, RedScale;
    742    GLfloat GreenBias, GreenScale;
    743    GLfloat BlueBias, BlueScale;
    744    GLfloat AlphaBias, AlphaScale;
    745    GLfloat DepthBias, DepthScale;
    746    GLint IndexShift, IndexOffset;
    747    /*@}*/
    748 
    749    /* Pixel Maps */
    750    /* Note: actual pixel maps are not part of this attrib group */
    751    GLboolean MapColorFlag;
    752    GLboolean MapStencilFlag;
    753 
    754    /*--- End Pixel Transfer State ---*/
    755 
    756    /** glPixelZoom */
    757    GLfloat ZoomX, ZoomY;
    758 };
    759 
    760 
    761 /**
    762  * Point attribute group (GL_POINT_BIT).
    763  */
    764 struct gl_point_attrib
    765 {
    766    GLfloat Size;		/**< User-specified point size */
    767    GLfloat Params[3];		/**< GL_EXT_point_parameters */
    768    GLfloat MinSize, MaxSize;	/**< GL_EXT_point_parameters */
    769    GLfloat Threshold;		/**< GL_EXT_point_parameters */
    770    GLboolean SmoothFlag;	/**< True if GL_POINT_SMOOTH is enabled */
    771    GLboolean _Attenuated;	/**< True if Params != [1, 0, 0] */
    772    GLboolean PointSprite;	/**< GL_NV/ARB_point_sprite */
    773    GLbitfield CoordReplace;     /**< GL_ARB_point_sprite*/
    774    GLenum SpriteRMode;		/**< GL_NV_point_sprite (only!) */
    775    GLenum SpriteOrigin;		/**< GL_ARB_point_sprite */
    776 };
    777 
    778 
    779 /**
    780  * Polygon attribute group (GL_POLYGON_BIT).
    781  */
    782 struct gl_polygon_attrib
    783 {
    784    GLenum FrontFace;		/**< Either GL_CW or GL_CCW */
    785    GLenum FrontMode;		/**< Either GL_POINT, GL_LINE or GL_FILL */
    786    GLenum BackMode;		/**< Either GL_POINT, GL_LINE or GL_FILL */
    787    GLboolean _FrontBit;		/**< 0=GL_CCW, 1=GL_CW */
    788    GLboolean CullFlag;		/**< Culling on/off flag */
    789    GLboolean SmoothFlag;	/**< True if GL_POLYGON_SMOOTH is enabled */
    790    GLboolean StippleFlag;	/**< True if GL_POLYGON_STIPPLE is enabled */
    791    GLenum CullFaceMode;		/**< Culling mode GL_FRONT or GL_BACK */
    792    GLfloat OffsetFactor;	/**< Polygon offset factor, from user */
    793    GLfloat OffsetUnits;		/**< Polygon offset units, from user */
    794    GLfloat OffsetClamp;		/**< Polygon offset clamp, from user */
    795    GLboolean OffsetPoint;	/**< Offset in GL_POINT mode */
    796    GLboolean OffsetLine;	/**< Offset in GL_LINE mode */
    797    GLboolean OffsetFill;	/**< Offset in GL_FILL mode */
    798 };
    799 
    800 
    801 /**
    802  * Scissor attributes (GL_SCISSOR_BIT).
    803  */
    804 struct gl_scissor_rect
    805 {
    806    GLint X, Y;			/**< Lower left corner of box */
    807    GLsizei Width, Height;	/**< Size of box */
    808 };
    809 struct gl_scissor_attrib
    810 {
    811    GLbitfield EnableFlags;	/**< Scissor test enabled? */
    812    struct gl_scissor_rect ScissorArray[MAX_VIEWPORTS];
    813    GLint NumWindowRects;        /**< Count of enabled window rectangles */
    814    GLenum WindowRectMode;       /**< Whether to include or exclude the rects */
    815    struct gl_scissor_rect WindowRects[MAX_WINDOW_RECTANGLES];
    816 };
    817 
    818 
    819 /**
    820  * Stencil attribute group (GL_STENCIL_BUFFER_BIT).
    821  *
    822  * Three sets of stencil data are tracked so that OpenGL 2.0,
    823  * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported
    824  * simultaneously.  In each of the stencil state arrays, element 0 corresponds
    825  * to GL_FRONT.  Element 1 corresponds to the OpenGL 2.0 /
    826  * GL_ATI_separate_stencil GL_BACK state.  Element 2 corresponds to the
    827  * GL_EXT_stencil_two_side GL_BACK state.
    828  *
    829  * The derived value \c _BackFace is either 1 or 2 depending on whether or
    830  * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled.
    831  *
    832  * The derived value \c _TestTwoSide is set when the front-face and back-face
    833  * stencil state are different.
    834  */
    835 struct gl_stencil_attrib
    836 {
    837    GLboolean Enabled;		/**< Enabled flag */
    838    GLboolean TestTwoSide;	/**< GL_EXT_stencil_two_side */
    839    GLubyte ActiveFace;		/**< GL_EXT_stencil_two_side (0 or 2) */
    840    GLboolean _Enabled;          /**< Enabled and stencil buffer present */
    841    GLboolean _WriteEnabled;     /**< _Enabled and non-zero writemasks */
    842    GLboolean _TestTwoSide;
    843    GLubyte _BackFace;           /**< Current back stencil state (1 or 2) */
    844    GLenum Function[3];		/**< Stencil function */
    845    GLenum FailFunc[3];		/**< Fail function */
    846    GLenum ZPassFunc[3];		/**< Depth buffer pass function */
    847    GLenum ZFailFunc[3];		/**< Depth buffer fail function */
    848    GLint Ref[3];		/**< Reference value */
    849    GLuint ValueMask[3];		/**< Value mask */
    850    GLuint WriteMask[3];		/**< Write mask */
    851    GLuint Clear;		/**< Clear value */
    852 };
    853 
    854 
    855 /**
    856  * An index for each type of texture object.  These correspond to the GL
    857  * texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc.
    858  * Note: the order is from highest priority to lowest priority.
    859  */
    860 typedef enum
    861 {
    862    TEXTURE_2D_MULTISAMPLE_INDEX,
    863    TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX,
    864    TEXTURE_CUBE_ARRAY_INDEX,
    865    TEXTURE_BUFFER_INDEX,
    866    TEXTURE_2D_ARRAY_INDEX,
    867    TEXTURE_1D_ARRAY_INDEX,
    868    TEXTURE_EXTERNAL_INDEX,
    869    TEXTURE_CUBE_INDEX,
    870    TEXTURE_3D_INDEX,
    871    TEXTURE_RECT_INDEX,
    872    TEXTURE_2D_INDEX,
    873    TEXTURE_1D_INDEX,
    874    NUM_TEXTURE_TARGETS
    875 } gl_texture_index;
    876 
    877 
    878 /**
    879  * Bit flags for each type of texture object
    880  */
    881 /*@{*/
    882 #define TEXTURE_2D_MULTISAMPLE_BIT (1 << TEXTURE_2D_MULTISAMPLE_INDEX)
    883 #define TEXTURE_2D_MULTISAMPLE_ARRAY_BIT (1 << TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX)
    884 #define TEXTURE_CUBE_ARRAY_BIT (1 << TEXTURE_CUBE_ARRAY_INDEX)
    885 #define TEXTURE_BUFFER_BIT   (1 << TEXTURE_BUFFER_INDEX)
    886 #define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX)
    887 #define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX)
    888 #define TEXTURE_EXTERNAL_BIT (1 << TEXTURE_EXTERNAL_INDEX)
    889 #define TEXTURE_CUBE_BIT     (1 << TEXTURE_CUBE_INDEX)
    890 #define TEXTURE_3D_BIT       (1 << TEXTURE_3D_INDEX)
    891 #define TEXTURE_RECT_BIT     (1 << TEXTURE_RECT_INDEX)
    892 #define TEXTURE_2D_BIT       (1 << TEXTURE_2D_INDEX)
    893 #define TEXTURE_1D_BIT       (1 << TEXTURE_1D_INDEX)
    894 /*@}*/
    895 
    896 
    897 /**
    898  * Texture image state.  Drivers will typically create a subclass of this
    899  * with extra fields for memory buffers, etc.
    900  */
    901 struct gl_texture_image
    902 {
    903    GLint InternalFormat;	/**< Internal format as given by the user */
    904    GLenum _BaseFormat;		/**< Either GL_RGB, GL_RGBA, GL_ALPHA,
    905 				 *   GL_LUMINANCE, GL_LUMINANCE_ALPHA,
    906 				 *   GL_INTENSITY, GL_DEPTH_COMPONENT or
    907 				 *   GL_DEPTH_STENCIL_EXT only. Used for
    908 				 *   choosing TexEnv arithmetic.
    909 				 */
    910    mesa_format TexFormat;         /**< The actual texture memory format */
    911 
    912    GLuint Border;		/**< 0 or 1 */
    913    GLuint Width;		/**< = 2^WidthLog2 + 2*Border */
    914    GLuint Height;		/**< = 2^HeightLog2 + 2*Border */
    915    GLuint Depth;		/**< = 2^DepthLog2 + 2*Border */
    916    GLuint Width2;		/**< = Width - 2*Border */
    917    GLuint Height2;		/**< = Height - 2*Border */
    918    GLuint Depth2;		/**< = Depth - 2*Border */
    919    GLuint WidthLog2;		/**< = log2(Width2) */
    920    GLuint HeightLog2;		/**< = log2(Height2) */
    921    GLuint DepthLog2;		/**< = log2(Depth2) */
    922    GLuint MaxNumLevels;		/**< = maximum possible number of mipmap
    923                                        levels, computed from the dimensions */
    924 
    925    struct gl_texture_object *TexObject;  /**< Pointer back to parent object */
    926    GLuint Level;                /**< Which mipmap level am I? */
    927    /** Cube map face: index into gl_texture_object::Image[] array */
    928    GLuint Face;
    929 
    930    /** GL_ARB_texture_multisample */
    931    GLuint NumSamples;            /**< Sample count, or 0 for non-multisample */
    932    GLboolean FixedSampleLocations; /**< Same sample locations for all pixels? */
    933 };
    934 
    935 
    936 /**
    937  * Indexes for cube map faces.
    938  */
    939 typedef enum
    940 {
    941    FACE_POS_X = 0,
    942    FACE_NEG_X = 1,
    943    FACE_POS_Y = 2,
    944    FACE_NEG_Y = 3,
    945    FACE_POS_Z = 4,
    946    FACE_NEG_Z = 5,
    947    MAX_FACES = 6
    948 } gl_face_index;
    949 
    950 
    951 /**
    952  * Sampler object state.  These objects are new with GL_ARB_sampler_objects
    953  * and OpenGL 3.3.  Legacy texture objects also contain a sampler object.
    954  */
    955 struct gl_sampler_object
    956 {
    957    mtx_t Mutex;
    958    GLuint Name;
    959    GLint RefCount;
    960    GLchar *Label;               /**< GL_KHR_debug */
    961 
    962    GLenum WrapS;		/**< S-axis texture image wrap mode */
    963    GLenum WrapT;		/**< T-axis texture image wrap mode */
    964    GLenum WrapR;		/**< R-axis texture image wrap mode */
    965    GLenum MinFilter;		/**< minification filter */
    966    GLenum MagFilter;		/**< magnification filter */
    967    union gl_color_union BorderColor;  /**< Interpreted according to texture format */
    968    GLfloat MinLod;		/**< min lambda, OpenGL 1.2 */
    969    GLfloat MaxLod;		/**< max lambda, OpenGL 1.2 */
    970    GLfloat LodBias;		/**< OpenGL 1.4 */
    971    GLfloat MaxAnisotropy;	/**< GL_EXT_texture_filter_anisotropic */
    972    GLenum CompareMode;		/**< GL_ARB_shadow */
    973    GLenum CompareFunc;		/**< GL_ARB_shadow */
    974    GLenum sRGBDecode;           /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
    975    GLboolean CubeMapSeamless;   /**< GL_AMD_seamless_cubemap_per_texture */
    976 };
    977 
    978 
    979 /**
    980  * Texture object state.  Contains the array of mipmap images, border color,
    981  * wrap modes, filter modes, and shadow/texcompare state.
    982  */
    983 struct gl_texture_object
    984 {
    985    mtx_t Mutex;      /**< for thread safety */
    986    GLint RefCount;             /**< reference count */
    987    GLuint Name;                /**< the user-visible texture object ID */
    988    GLchar *Label;               /**< GL_KHR_debug */
    989    GLenum Target;              /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
    990    gl_texture_index TargetIndex; /**< The gl_texture_unit::CurrentTex index.
    991                                       Only valid when Target is valid. */
    992 
    993    struct gl_sampler_object Sampler;
    994 
    995    GLenum DepthMode;           /**< GL_ARB_depth_texture */
    996    bool StencilSampling;       /**< Should we sample stencil instead of depth? */
    997 
    998    GLfloat Priority;           /**< in [0,1] */
    999    GLint BaseLevel;            /**< min mipmap level, OpenGL 1.2 */
   1000    GLint MaxLevel;             /**< max mipmap level, OpenGL 1.2 */
   1001    GLint ImmutableLevels;      /**< ES 3.0 / ARB_texture_view */
   1002    GLint _MaxLevel;            /**< actual max mipmap level (q in the spec) */
   1003    GLfloat _MaxLambda;         /**< = _MaxLevel - BaseLevel (q - p in spec) */
   1004    GLint CropRect[4];          /**< GL_OES_draw_texture */
   1005    GLenum Swizzle[4];          /**< GL_EXT_texture_swizzle */
   1006    GLuint _Swizzle;            /**< same as Swizzle, but SWIZZLE_* format */
   1007    GLboolean GenerateMipmap;   /**< GL_SGIS_generate_mipmap */
   1008    GLboolean _BaseComplete;    /**< Is the base texture level valid? */
   1009    GLboolean _MipmapComplete;  /**< Is the whole mipmap valid? */
   1010    GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */
   1011    GLboolean _RenderToTexture; /**< Any rendering to this texture? */
   1012    GLboolean Purgeable;        /**< Is the buffer purgeable under memory
   1013                                     pressure? */
   1014    GLboolean Immutable;        /**< GL_ARB_texture_storage */
   1015    GLboolean _IsFloat;         /**< GL_OES_float_texture */
   1016    GLboolean _IsHalfFloat;     /**< GL_OES_half_float_texture */
   1017 
   1018    GLuint MinLevel;            /**< GL_ARB_texture_view */
   1019    GLuint MinLayer;            /**< GL_ARB_texture_view */
   1020    GLuint NumLevels;           /**< GL_ARB_texture_view */
   1021    GLuint NumLayers;           /**< GL_ARB_texture_view */
   1022 
   1023    /** Actual texture images, indexed by [cube face] and [mipmap level] */
   1024    struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS];
   1025 
   1026    /** GL_ARB_texture_buffer_object */
   1027    struct gl_buffer_object *BufferObject;
   1028    GLenum BufferObjectFormat;
   1029    /** Equivalent Mesa format for BufferObjectFormat. */
   1030    mesa_format _BufferObjectFormat;
   1031    /** GL_ARB_texture_buffer_range */
   1032    GLintptr BufferOffset;
   1033    GLsizeiptr BufferSize; /**< if this is -1, use BufferObject->Size instead */
   1034 
   1035    /** GL_OES_EGL_image_external */
   1036    GLint RequiredTextureImageUnits;
   1037 
   1038    /** GL_ARB_shader_image_load_store */
   1039    GLenum ImageFormatCompatibilityType;
   1040 };
   1041 
   1042 
   1043 /** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */
   1044 #define MAX_COMBINER_TERMS 4
   1045 
   1046 
   1047 /**
   1048  * Texture combine environment state.
   1049  */
   1050 struct gl_tex_env_combine_state
   1051 {
   1052    GLenum ModeRGB;       /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
   1053    GLenum ModeA;         /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
   1054    /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */
   1055    GLenum SourceRGB[MAX_COMBINER_TERMS];
   1056    GLenum SourceA[MAX_COMBINER_TERMS];
   1057    /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */
   1058    GLenum OperandRGB[MAX_COMBINER_TERMS];
   1059    GLenum OperandA[MAX_COMBINER_TERMS];
   1060    GLuint ScaleShiftRGB; /**< 0, 1 or 2 */
   1061    GLuint ScaleShiftA;   /**< 0, 1 or 2 */
   1062    GLuint _NumArgsRGB;   /**< Number of inputs used for the RGB combiner */
   1063    GLuint _NumArgsA;     /**< Number of inputs used for the A combiner */
   1064 };
   1065 
   1066 
   1067 /**
   1068  * TexGenEnabled flags.
   1069  */
   1070 /*@{*/
   1071 #define S_BIT 1
   1072 #define T_BIT 2
   1073 #define R_BIT 4
   1074 #define Q_BIT 8
   1075 #define STR_BITS (S_BIT | T_BIT | R_BIT)
   1076 /*@}*/
   1077 
   1078 
   1079 /**
   1080  * Bit flag versions of the corresponding GL_ constants.
   1081  */
   1082 /*@{*/
   1083 #define TEXGEN_SPHERE_MAP        0x1
   1084 #define TEXGEN_OBJ_LINEAR        0x2
   1085 #define TEXGEN_EYE_LINEAR        0x4
   1086 #define TEXGEN_REFLECTION_MAP_NV 0x8
   1087 #define TEXGEN_NORMAL_MAP_NV     0x10
   1088 
   1089 #define TEXGEN_NEED_NORMALS      (TEXGEN_SPHERE_MAP        | \
   1090 				  TEXGEN_REFLECTION_MAP_NV | \
   1091 				  TEXGEN_NORMAL_MAP_NV)
   1092 #define TEXGEN_NEED_EYE_COORD    (TEXGEN_SPHERE_MAP        | \
   1093 				  TEXGEN_REFLECTION_MAP_NV | \
   1094 				  TEXGEN_NORMAL_MAP_NV     | \
   1095 				  TEXGEN_EYE_LINEAR)
   1096 /*@}*/
   1097 
   1098 
   1099 
   1100 /** Tex-gen enabled for texture unit? */
   1101 #define ENABLE_TEXGEN(unit) (1 << (unit))
   1102 
   1103 /** Non-identity texture matrix for texture unit? */
   1104 #define ENABLE_TEXMAT(unit) (1 << (unit))
   1105 
   1106 
   1107 /**
   1108  * Texture coord generation state.
   1109  */
   1110 struct gl_texgen
   1111 {
   1112    GLenum Mode;         /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */
   1113    GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */
   1114    GLfloat ObjectPlane[4];
   1115    GLfloat EyePlane[4];
   1116 };
   1117 
   1118 
   1119 /**
   1120  * Texture unit state.  Contains enable flags, texture environment/function/
   1121  * combiners, texgen state, and pointers to current texture objects.
   1122  */
   1123 struct gl_texture_unit
   1124 {
   1125    GLbitfield Enabled;          /**< bitmask of TEXTURE_*_BIT flags */
   1126 
   1127    GLenum EnvMode;              /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */
   1128    GLclampf EnvColor[4];
   1129    GLfloat EnvColorUnclamped[4];
   1130 
   1131    struct gl_texgen GenS;
   1132    struct gl_texgen GenT;
   1133    struct gl_texgen GenR;
   1134    struct gl_texgen GenQ;
   1135    GLbitfield TexGenEnabled;	/**< Bitwise-OR of [STRQ]_BIT values */
   1136    GLbitfield _GenFlags;	/**< Bitwise-OR of Gen[STRQ]._ModeBit */
   1137 
   1138    GLfloat LodBias;		/**< for biasing mipmap levels */
   1139 
   1140    /** Texture targets that have a non-default texture bound */
   1141    GLbitfield _BoundTextures;
   1142 
   1143    /** Current sampler object (GL_ARB_sampler_objects) */
   1144    struct gl_sampler_object *Sampler;
   1145 
   1146    /**
   1147     * \name GL_EXT_texture_env_combine
   1148     */
   1149    struct gl_tex_env_combine_state Combine;
   1150 
   1151    /**
   1152     * Derived state based on \c EnvMode and the \c BaseFormat of the
   1153     * currently enabled texture.
   1154     */
   1155    struct gl_tex_env_combine_state _EnvMode;
   1156 
   1157    /**
   1158     * Currently enabled combiner state.  This will point to either
   1159     * \c Combine or \c _EnvMode.
   1160     */
   1161    struct gl_tex_env_combine_state *_CurrentCombine;
   1162 
   1163    /** Current texture object pointers */
   1164    struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS];
   1165 
   1166    /** Points to highest priority, complete and enabled texture object */
   1167    struct gl_texture_object *_Current;
   1168 
   1169 };
   1170 
   1171 
   1172 /**
   1173  * Texture attribute group (GL_TEXTURE_BIT).
   1174  */
   1175 struct gl_texture_attrib
   1176 {
   1177    GLuint CurrentUnit;   /**< GL_ACTIVE_TEXTURE */
   1178 
   1179    /** GL_ARB_seamless_cubemap */
   1180    GLboolean CubeMapSeamless;
   1181 
   1182    struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS];
   1183 
   1184    /** GL_ARB_texture_buffer_object */
   1185    struct gl_buffer_object *BufferObject;
   1186 
   1187    /** Texture coord units/sets used for fragment texturing */
   1188    GLbitfield _EnabledCoordUnits;
   1189 
   1190    /** Texture coord units that have texgen enabled */
   1191    GLbitfield _TexGenEnabled;
   1192 
   1193    /** Texture coord units that have non-identity matrices */
   1194    GLbitfield _TexMatEnabled;
   1195 
   1196    /** Bitwise-OR of all Texture.Unit[i]._GenFlags */
   1197    GLbitfield _GenFlags;
   1198 
   1199    /** Largest index of a texture unit with _Current != NULL. */
   1200    GLint _MaxEnabledTexImageUnit;
   1201 
   1202    /** Largest index + 1 of texture units that have had any CurrentTex set. */
   1203    GLint NumCurrentTexUsed;
   1204 
   1205    struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
   1206 };
   1207 
   1208 
   1209 /**
   1210  * Data structure representing a single clip plane (e.g. one of the elements
   1211  * of the ctx->Transform.EyeUserPlane or ctx->Transform._ClipUserPlane array).
   1212  */
   1213 typedef GLfloat gl_clip_plane[4];
   1214 
   1215 
   1216 /**
   1217  * Transformation attribute group (GL_TRANSFORM_BIT).
   1218  */
   1219 struct gl_transform_attrib
   1220 {
   1221    GLenum MatrixMode;				/**< Matrix mode */
   1222    gl_clip_plane EyeUserPlane[MAX_CLIP_PLANES];	/**< User clip planes */
   1223    gl_clip_plane _ClipUserPlane[MAX_CLIP_PLANES]; /**< derived */
   1224    GLbitfield ClipPlanesEnabled;                /**< on/off bitmask */
   1225    GLboolean Normalize;				/**< Normalize all normals? */
   1226    GLboolean RescaleNormals;			/**< GL_EXT_rescale_normal */
   1227    GLboolean RasterPositionUnclipped;           /**< GL_IBM_rasterpos_clip */
   1228    GLboolean DepthClamp;			/**< GL_ARB_depth_clamp */
   1229    /** GL_ARB_clip_control */
   1230    GLenum ClipOrigin;     /**< GL_LOWER_LEFT or GL_UPPER_LEFT */
   1231    GLenum ClipDepthMode;  /**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */
   1232 };
   1233 
   1234 
   1235 /**
   1236  * Viewport attribute group (GL_VIEWPORT_BIT).
   1237  */
   1238 struct gl_viewport_attrib
   1239 {
   1240    GLfloat X, Y;		/**< position */
   1241    GLfloat Width, Height;	/**< size */
   1242    GLdouble Near, Far;		/**< Depth buffer range */
   1243 };
   1244 
   1245 
   1246 typedef enum {
   1247    MAP_USER,
   1248    MAP_INTERNAL,
   1249 
   1250    MAP_COUNT
   1251 } gl_map_buffer_index;
   1252 
   1253 
   1254 /**
   1255  * Fields describing a mapped buffer range.
   1256  */
   1257 struct gl_buffer_mapping {
   1258    GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */
   1259    GLvoid *Pointer;     /**< User-space address of mapping */
   1260    GLintptr Offset;     /**< Mapped offset */
   1261    GLsizeiptr Length;   /**< Mapped length */
   1262 };
   1263 
   1264 
   1265 /**
   1266  * Usages we've seen for a buffer object.
   1267  */
   1268 typedef enum {
   1269    USAGE_UNIFORM_BUFFER = 0x1,
   1270    USAGE_TEXTURE_BUFFER = 0x2,
   1271    USAGE_ATOMIC_COUNTER_BUFFER = 0x4,
   1272    USAGE_SHADER_STORAGE_BUFFER = 0x8,
   1273    USAGE_TRANSFORM_FEEDBACK_BUFFER = 0x10,
   1274    USAGE_PIXEL_PACK_BUFFER = 0x20,
   1275    USAGE_DISABLE_MINMAX_CACHE = 0x40,
   1276 } gl_buffer_usage;
   1277 
   1278 
   1279 /**
   1280  * GL_ARB_vertex/pixel_buffer_object buffer object
   1281  */
   1282 struct gl_buffer_object
   1283 {
   1284    mtx_t Mutex;
   1285    GLint RefCount;
   1286    GLuint Name;
   1287    GLchar *Label;       /**< GL_KHR_debug */
   1288    GLenum Usage;        /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */
   1289    GLbitfield StorageFlags; /**< GL_MAP_PERSISTENT_BIT, etc. */
   1290    GLsizeiptrARB Size;  /**< Size of buffer storage in bytes */
   1291    GLubyte *Data;       /**< Location of storage either in RAM or VRAM. */
   1292    GLboolean DeletePending;   /**< true if buffer object is removed from the hash */
   1293    GLboolean Written;   /**< Ever written to? (for debugging) */
   1294    GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */
   1295    GLboolean Immutable; /**< GL_ARB_buffer_storage */
   1296    gl_buffer_usage UsageHistory; /**< How has this buffer been used so far? */
   1297 
   1298    /** Counters used for buffer usage warnings */
   1299    GLuint NumSubDataCalls;
   1300    GLuint NumMapBufferWriteCalls;
   1301 
   1302    struct gl_buffer_mapping Mappings[MAP_COUNT];
   1303 
   1304    /** Memoization of min/max index computations for static index buffers */
   1305    struct hash_table *MinMaxCache;
   1306    unsigned MinMaxCacheHitIndices;
   1307    unsigned MinMaxCacheMissIndices;
   1308    bool MinMaxCacheDirty;
   1309 };
   1310 
   1311 
   1312 /**
   1313  * Client pixel packing/unpacking attributes
   1314  */
   1315 struct gl_pixelstore_attrib
   1316 {
   1317    GLint Alignment;
   1318    GLint RowLength;
   1319    GLint SkipPixels;
   1320    GLint SkipRows;
   1321    GLint ImageHeight;
   1322    GLint SkipImages;
   1323    GLboolean SwapBytes;
   1324    GLboolean LsbFirst;
   1325    GLboolean Invert;        /**< GL_MESA_pack_invert */
   1326    GLint CompressedBlockWidth;   /**< GL_ARB_compressed_texture_pixel_storage */
   1327    GLint CompressedBlockHeight;
   1328    GLint CompressedBlockDepth;
   1329    GLint CompressedBlockSize;
   1330    struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */
   1331 };
   1332 
   1333 
   1334 /**
   1335  * Vertex array information which is derived from gl_array_attributes
   1336  * and gl_vertex_buffer_binding information.  Used by the VBO module and
   1337  * device drivers.
   1338  */
   1339 struct gl_vertex_array
   1340 {
   1341    GLint Size;                  /**< components per element (1,2,3,4) */
   1342    GLenum Type;                 /**< datatype: GL_FLOAT, GL_INT, etc */
   1343    GLenum Format;               /**< default: GL_RGBA, but may be GL_BGRA */
   1344    GLsizei StrideB;		/**< actual stride in bytes */
   1345    GLuint _ElementSize;         /**< size of each element in bytes */
   1346    const GLubyte *Ptr;          /**< Points to array data */
   1347    GLboolean Normalized;        /**< GL_ARB_vertex_program */
   1348    GLboolean Integer;           /**< Integer-valued? */
   1349    GLboolean Doubles;       /**< double precision values are not converted to floats */
   1350    GLuint InstanceDivisor;      /**< GL_ARB_instanced_arrays */
   1351 
   1352    struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */
   1353 };
   1354 
   1355 
   1356 /**
   1357  * Attributes to describe a vertex array.
   1358  *
   1359  * Contains the size, type, format and normalization flag,
   1360  * along with the index of a vertex buffer binding point.
   1361  *
   1362  * Note that the Stride field corresponds to VERTEX_ATTRIB_ARRAY_STRIDE
   1363  * and is only present for backwards compatibility reasons.
   1364  * Rendering always uses VERTEX_BINDING_STRIDE.
   1365  * The gl*Pointer() functions will set VERTEX_ATTRIB_ARRAY_STRIDE
   1366  * and VERTEX_BINDING_STRIDE to the same value, while
   1367  * glBindVertexBuffer() will only set VERTEX_BINDING_STRIDE.
   1368  */
   1369 struct gl_array_attributes
   1370 {
   1371    GLint Size;              /**< Components per element (1,2,3,4) */
   1372    GLenum Type;             /**< Datatype: GL_FLOAT, GL_INT, etc */
   1373    GLenum Format;           /**< Default: GL_RGBA, but may be GL_BGRA */
   1374    GLsizei Stride;          /**< Stride as specified with gl*Pointer() */
   1375    const GLubyte *Ptr;      /**< Points to client array data. Not used when a VBO is bound */
   1376    GLintptr RelativeOffset; /**< Offset of the first element relative to the binding offset */
   1377    GLboolean Enabled;       /**< Whether the array is enabled */
   1378    GLboolean Normalized;    /**< Fixed-point values are normalized when converted to floats */
   1379    GLboolean Integer;       /**< Fixed-point values are not converted to floats */
   1380    GLboolean Doubles;       /**< double precision values are not converted to floats */
   1381    GLuint _ElementSize;     /**< Size of each element in bytes */
   1382    GLuint BufferBindingIndex;    /**< Vertex buffer binding */
   1383 };
   1384 
   1385 
   1386 /**
   1387  * This describes the buffer object used for a vertex array (or
   1388  * multiple vertex arrays).  If BufferObj points to the default/null
   1389  * buffer object, then the vertex array lives in user memory and not a VBO.
   1390  */
   1391 struct gl_vertex_buffer_binding
   1392 {
   1393    GLintptr Offset;                    /**< User-specified offset */
   1394    GLsizei Stride;                     /**< User-specified stride */
   1395    GLuint InstanceDivisor;             /**< GL_ARB_instanced_arrays */
   1396    struct gl_buffer_object *BufferObj; /**< GL_ARB_vertex_buffer_object */
   1397    GLbitfield64 _BoundArrays;          /**< Arrays bound to this binding point */
   1398 };
   1399 
   1400 
   1401 /**
   1402  * A representation of "Vertex Array Objects" (VAOs) from OpenGL 3.1+,
   1403  * GL_ARB_vertex_array_object, or the original GL_APPLE_vertex_array_object
   1404  * extension.
   1405  */
   1406 struct gl_vertex_array_object
   1407 {
   1408    /** Name of the VAO as received from glGenVertexArray. */
   1409    GLuint Name;
   1410 
   1411    GLint RefCount;
   1412 
   1413    GLchar *Label;       /**< GL_KHR_debug */
   1414 
   1415    mtx_t Mutex;
   1416 
   1417    /**
   1418     * Does the VAO use ARB semantics or Apple semantics?
   1419     *
   1420     * There are several ways in which ARB_vertex_array_object and
   1421     * APPLE_vertex_array_object VAOs have differing semantics.  At the very
   1422     * least,
   1423     *
   1424     *     - ARB VAOs require that all array data be sourced from vertex buffer
   1425     *       objects, but Apple VAOs do not.
   1426     *
   1427     *     - ARB VAOs require that names come from GenVertexArrays.
   1428     *
   1429     * This flag notes which behavior governs this VAO.
   1430     */
   1431    GLboolean ARBsemantics;
   1432 
   1433    /**
   1434     * Has this array object been bound?
   1435     */
   1436    GLboolean EverBound;
   1437 
   1438    /**
   1439     * Derived vertex attribute arrays
   1440     *
   1441     * This is a legacy data structure created from gl_vertex_attrib_array and
   1442     * gl_vertex_buffer_binding, for compatibility with existing driver code.
   1443     */
   1444    struct gl_vertex_array _VertexAttrib[VERT_ATTRIB_MAX];
   1445 
   1446    /** Vertex attribute arrays */
   1447    struct gl_array_attributes VertexAttrib[VERT_ATTRIB_MAX];
   1448 
   1449    /** Vertex buffer bindings */
   1450    struct gl_vertex_buffer_binding BufferBinding[VERT_ATTRIB_MAX];
   1451 
   1452    /** Mask indicating which vertex arrays have vertex buffer associated. */
   1453    GLbitfield64 VertexAttribBufferMask;
   1454 
   1455    /** Mask of VERT_BIT_* values indicating which arrays are enabled */
   1456    GLbitfield64 _Enabled;
   1457 
   1458    /** Mask of VERT_BIT_* values indicating changed/dirty arrays */
   1459    GLbitfield64 NewArrays;
   1460 
   1461    /** The index buffer (also known as the element array buffer in OpenGL). */
   1462    struct gl_buffer_object *IndexBufferObj;
   1463 };
   1464 
   1465 
   1466 /** Used to signal when transitioning from one kind of drawing method
   1467  * to another.
   1468  */
   1469 typedef enum {
   1470    DRAW_NONE,          /**< Initial value only */
   1471    DRAW_BEGIN_END,
   1472    DRAW_DISPLAY_LIST,
   1473    DRAW_ARRAYS
   1474 } gl_draw_method;
   1475 
   1476 /**
   1477  * Enum for the OpenGL APIs we know about and may support.
   1478  *
   1479  * NOTE: This must match the api_enum table in
   1480  * src/mesa/main/get_hash_generator.py
   1481  */
   1482 typedef enum
   1483 {
   1484    API_OPENGL_COMPAT,      /* legacy / compatibility contexts */
   1485    API_OPENGLES,
   1486    API_OPENGLES2,
   1487    API_OPENGL_CORE,
   1488    API_OPENGL_LAST = API_OPENGL_CORE
   1489 } gl_api;
   1490 
   1491 /**
   1492  * Vertex array state
   1493  */
   1494 struct gl_array_attrib
   1495 {
   1496    /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */
   1497    struct gl_vertex_array_object *VAO;
   1498 
   1499    /** The default vertex array object */
   1500    struct gl_vertex_array_object *DefaultVAO;
   1501 
   1502    /** The last VAO accessed by a DSA function */
   1503    struct gl_vertex_array_object *LastLookedUpVAO;
   1504 
   1505    /** Array objects (GL_ARB/APPLE_vertex_array_object) */
   1506    struct _mesa_HashTable *Objects;
   1507 
   1508    GLint ActiveTexture;		/**< Client Active Texture */
   1509    GLuint LockFirst;            /**< GL_EXT_compiled_vertex_array */
   1510    GLuint LockCount;            /**< GL_EXT_compiled_vertex_array */
   1511 
   1512    /**
   1513     * \name Primitive restart controls
   1514     *
   1515     * Primitive restart is enabled if either \c PrimitiveRestart or
   1516     * \c PrimitiveRestartFixedIndex is set.
   1517     */
   1518    /*@{*/
   1519    GLboolean PrimitiveRestart;
   1520    GLboolean PrimitiveRestartFixedIndex;
   1521    GLboolean _PrimitiveRestart;
   1522    GLuint RestartIndex;
   1523    /*@}*/
   1524 
   1525    /** One of the DRAW_xxx flags, not consumed by drivers */
   1526    gl_draw_method DrawMethod;
   1527 
   1528    /* GL_ARB_vertex_buffer_object */
   1529    struct gl_buffer_object *ArrayBufferObj;
   1530 
   1531    /**
   1532     * Vertex arrays as consumed by a driver.
   1533     * The array pointer is set up only by the VBO module.
   1534     */
   1535    const struct gl_vertex_array **_DrawArrays; /**< 0..VERT_ATTRIB_MAX-1 */
   1536 
   1537    /** Legal array datatypes and the API for which they have been computed */
   1538    GLbitfield LegalTypesMask;
   1539    gl_api LegalTypesMaskAPI;
   1540 };
   1541 
   1542 
   1543 /**
   1544  * Feedback buffer state
   1545  */
   1546 struct gl_feedback
   1547 {
   1548    GLenum Type;
   1549    GLbitfield _Mask;    /**< FB_* bits */
   1550    GLfloat *Buffer;
   1551    GLuint BufferSize;
   1552    GLuint Count;
   1553 };
   1554 
   1555 
   1556 /**
   1557  * Selection buffer state
   1558  */
   1559 struct gl_selection
   1560 {
   1561    GLuint *Buffer;	/**< selection buffer */
   1562    GLuint BufferSize;	/**< size of the selection buffer */
   1563    GLuint BufferCount;	/**< number of values in the selection buffer */
   1564    GLuint Hits;		/**< number of records in the selection buffer */
   1565    GLuint NameStackDepth; /**< name stack depth */
   1566    GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */
   1567    GLboolean HitFlag;	/**< hit flag */
   1568    GLfloat HitMinZ;	/**< minimum hit depth */
   1569    GLfloat HitMaxZ;	/**< maximum hit depth */
   1570 };
   1571 
   1572 
   1573 /**
   1574  * 1-D Evaluator control points
   1575  */
   1576 struct gl_1d_map
   1577 {
   1578    GLuint Order;	/**< Number of control points */
   1579    GLfloat u1, u2, du;	/**< u1, u2, 1.0/(u2-u1) */
   1580    GLfloat *Points;	/**< Points to contiguous control points */
   1581 };
   1582 
   1583 
   1584 /**
   1585  * 2-D Evaluator control points
   1586  */
   1587 struct gl_2d_map
   1588 {
   1589    GLuint Uorder;		/**< Number of control points in U dimension */
   1590    GLuint Vorder;		/**< Number of control points in V dimension */
   1591    GLfloat u1, u2, du;
   1592    GLfloat v1, v2, dv;
   1593    GLfloat *Points;		/**< Points to contiguous control points */
   1594 };
   1595 
   1596 
   1597 /**
   1598  * All evaluator control point state
   1599  */
   1600 struct gl_evaluators
   1601 {
   1602    /**
   1603     * \name 1-D maps
   1604     */
   1605    /*@{*/
   1606    struct gl_1d_map Map1Vertex3;
   1607    struct gl_1d_map Map1Vertex4;
   1608    struct gl_1d_map Map1Index;
   1609    struct gl_1d_map Map1Color4;
   1610    struct gl_1d_map Map1Normal;
   1611    struct gl_1d_map Map1Texture1;
   1612    struct gl_1d_map Map1Texture2;
   1613    struct gl_1d_map Map1Texture3;
   1614    struct gl_1d_map Map1Texture4;
   1615    /*@}*/
   1616 
   1617    /**
   1618     * \name 2-D maps
   1619     */
   1620    /*@{*/
   1621    struct gl_2d_map Map2Vertex3;
   1622    struct gl_2d_map Map2Vertex4;
   1623    struct gl_2d_map Map2Index;
   1624    struct gl_2d_map Map2Color4;
   1625    struct gl_2d_map Map2Normal;
   1626    struct gl_2d_map Map2Texture1;
   1627    struct gl_2d_map Map2Texture2;
   1628    struct gl_2d_map Map2Texture3;
   1629    struct gl_2d_map Map2Texture4;
   1630    /*@}*/
   1631 };
   1632 
   1633 
   1634 struct gl_transform_feedback_varying_info
   1635 {
   1636    char *Name;
   1637    GLenum Type;
   1638    GLint BufferIndex;
   1639    GLint Size;
   1640    GLint Offset;
   1641 };
   1642 
   1643 
   1644 /**
   1645  * Per-output info vertex shaders for transform feedback.
   1646  */
   1647 struct gl_transform_feedback_output
   1648 {
   1649    uint32_t OutputRegister;
   1650    uint32_t OutputBuffer;
   1651    uint32_t NumComponents;
   1652    uint32_t StreamId;
   1653 
   1654    /** offset (in DWORDs) of this output within the interleaved structure */
   1655    uint32_t DstOffset;
   1656 
   1657    /**
   1658     * Offset into the output register of the data to output.  For example,
   1659     * if NumComponents is 2 and ComponentOffset is 1, then the data to
   1660     * offset is in the y and z components of the output register.
   1661     */
   1662    uint32_t ComponentOffset;
   1663 };
   1664 
   1665 
   1666 struct gl_transform_feedback_buffer
   1667 {
   1668    uint32_t Binding;
   1669 
   1670    uint32_t NumVaryings;
   1671 
   1672    /**
   1673     * Total number of components stored in each buffer.  This may be used by
   1674     * hardware back-ends to determine the correct stride when interleaving
   1675     * multiple transform feedback outputs in the same buffer.
   1676     */
   1677    uint32_t Stride;
   1678 
   1679    /**
   1680     * Which transform feedback stream this buffer binding is associated with.
   1681     */
   1682    uint32_t Stream;
   1683 };
   1684 
   1685 
   1686 /** Post-link transform feedback info. */
   1687 struct gl_transform_feedback_info
   1688 {
   1689    unsigned NumOutputs;
   1690 
   1691    /* Bitmask of active buffer indices. */
   1692    unsigned ActiveBuffers;
   1693 
   1694    struct gl_transform_feedback_output *Outputs;
   1695 
   1696    /** Transform feedback varyings used for the linking of this shader program.
   1697     *
   1698     * Use for glGetTransformFeedbackVarying().
   1699     */
   1700    struct gl_transform_feedback_varying_info *Varyings;
   1701    GLint NumVarying;
   1702 
   1703    struct gl_transform_feedback_buffer Buffers[MAX_FEEDBACK_BUFFERS];
   1704 };
   1705 
   1706 
   1707 /**
   1708  * Transform feedback object state
   1709  */
   1710 struct gl_transform_feedback_object
   1711 {
   1712    GLuint Name;  /**< AKA the object ID */
   1713    GLint RefCount;
   1714    GLchar *Label;     /**< GL_KHR_debug */
   1715    GLboolean Active;  /**< Is transform feedback enabled? */
   1716    GLboolean Paused;  /**< Is transform feedback paused? */
   1717    GLboolean EndedAnytime; /**< Has EndTransformFeedback been called
   1718                                 at least once? */
   1719    GLboolean EverBound; /**< Has this object been bound? */
   1720 
   1721    /**
   1722     * GLES: if Active is true, remaining number of primitives which can be
   1723     * rendered without overflow.  This is necessary to track because GLES
   1724     * requires us to generate INVALID_OPERATION if a call to glDrawArrays or
   1725     * glDrawArraysInstanced would overflow transform feedback buffers.
   1726     * Undefined if Active is false.
   1727     *
   1728     * Not tracked for desktop GL since it's unnecessary.
   1729     */
   1730    unsigned GlesRemainingPrims;
   1731 
   1732    /**
   1733     * The program active when BeginTransformFeedback() was called.
   1734     * When active and unpaused, this equals ctx->Shader.CurrentProgram[stage],
   1735     * where stage is the pipeline stage that is the source of data for
   1736     * transform feedback.
   1737     */
   1738    struct gl_program *program;
   1739 
   1740    /** The feedback buffers */
   1741    GLuint BufferNames[MAX_FEEDBACK_BUFFERS];
   1742    struct gl_buffer_object *Buffers[MAX_FEEDBACK_BUFFERS];
   1743 
   1744    /** Start of feedback data in dest buffer */
   1745    GLintptr Offset[MAX_FEEDBACK_BUFFERS];
   1746 
   1747    /**
   1748     * Max data to put into dest buffer (in bytes).  Computed based on
   1749     * RequestedSize and the actual size of the buffer.
   1750     */
   1751    GLsizeiptr Size[MAX_FEEDBACK_BUFFERS];
   1752 
   1753    /**
   1754     * Size that was specified when the buffer was bound.  If the buffer was
   1755     * bound with glBindBufferBase() or glBindBufferOffsetEXT(), this value is
   1756     * zero.
   1757     */
   1758    GLsizeiptr RequestedSize[MAX_FEEDBACK_BUFFERS];
   1759 };
   1760 
   1761 
   1762 /**
   1763  * Context state for transform feedback.
   1764  */
   1765 struct gl_transform_feedback_state
   1766 {
   1767    GLenum Mode;       /**< GL_POINTS, GL_LINES or GL_TRIANGLES */
   1768 
   1769    /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */
   1770    struct gl_buffer_object *CurrentBuffer;
   1771 
   1772    /** The table of all transform feedback objects */
   1773    struct _mesa_HashTable *Objects;
   1774 
   1775    /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */
   1776    struct gl_transform_feedback_object *CurrentObject;
   1777 
   1778    /** The default xform-fb object (Name==0) */
   1779    struct gl_transform_feedback_object *DefaultObject;
   1780 };
   1781 
   1782 
   1783 /**
   1784  * A "performance monitor" as described in AMD_performance_monitor.
   1785  */
   1786 struct gl_perf_monitor_object
   1787 {
   1788    GLuint Name;
   1789 
   1790    /** True if the monitor is currently active (Begin called but not End). */
   1791    GLboolean Active;
   1792 
   1793    /**
   1794     * True if the monitor has ended.
   1795     *
   1796     * This is distinct from !Active because it may never have began.
   1797     */
   1798    GLboolean Ended;
   1799 
   1800    /**
   1801     * A list of groups with currently active counters.
   1802     *
   1803     * ActiveGroups[g] == n if there are n counters active from group 'g'.
   1804     */
   1805    unsigned *ActiveGroups;
   1806 
   1807    /**
   1808     * An array of bitsets, subscripted by group ID, then indexed by counter ID.
   1809     *
   1810     * Checking whether counter 'c' in group 'g' is active can be done via:
   1811     *
   1812     *    BITSET_TEST(ActiveCounters[g], c)
   1813     */
   1814    GLuint **ActiveCounters;
   1815 };
   1816 
   1817 
   1818 union gl_perf_monitor_counter_value
   1819 {
   1820    float f;
   1821    uint64_t u64;
   1822    uint32_t u32;
   1823 };
   1824 
   1825 
   1826 struct gl_perf_monitor_counter
   1827 {
   1828    /** Human readable name for the counter. */
   1829    const char *Name;
   1830 
   1831    /**
   1832     * Data type of the counter.  Valid values are FLOAT, UNSIGNED_INT,
   1833     * UNSIGNED_INT64_AMD, and PERCENTAGE_AMD.
   1834     */
   1835    GLenum Type;
   1836 
   1837    /** Minimum counter value. */
   1838    union gl_perf_monitor_counter_value Minimum;
   1839 
   1840    /** Maximum counter value. */
   1841    union gl_perf_monitor_counter_value Maximum;
   1842 };
   1843 
   1844 
   1845 struct gl_perf_monitor_group
   1846 {
   1847    /** Human readable name for the group. */
   1848    const char *Name;
   1849 
   1850    /**
   1851     * Maximum number of counters in this group which can be active at the
   1852     * same time.
   1853     */
   1854    GLuint MaxActiveCounters;
   1855 
   1856    /** Array of counters within this group. */
   1857    const struct gl_perf_monitor_counter *Counters;
   1858    GLuint NumCounters;
   1859 };
   1860 
   1861 
   1862 /**
   1863  * Context state for AMD_performance_monitor.
   1864  */
   1865 struct gl_perf_monitor_state
   1866 {
   1867    /** Array of performance monitor groups (indexed by group ID) */
   1868    const struct gl_perf_monitor_group *Groups;
   1869    GLuint NumGroups;
   1870 
   1871    /** The table of all performance monitors. */
   1872    struct _mesa_HashTable *Monitors;
   1873 };
   1874 
   1875 
   1876 /**
   1877  * Names of the various vertex/fragment program register files, etc.
   1878  *
   1879  * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c)
   1880  * All values should fit in a 4-bit field.
   1881  *
   1882  * NOTE: PROGRAM_STATE_VAR, PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be
   1883  * considered to be "uniform" variables since they can only be set outside
   1884  * glBegin/End.  They're also all stored in the same Parameters array.
   1885  */
   1886 typedef enum
   1887 {
   1888    PROGRAM_TEMPORARY,   /**< machine->Temporary[] */
   1889    PROGRAM_ARRAY,       /**< Arrays & Matrixes */
   1890    PROGRAM_INPUT,       /**< machine->Inputs[] */
   1891    PROGRAM_OUTPUT,      /**< machine->Outputs[] */
   1892    PROGRAM_STATE_VAR,   /**< gl_program->Parameters[] */
   1893    PROGRAM_CONSTANT,    /**< gl_program->Parameters[] */
   1894    PROGRAM_UNIFORM,     /**< gl_program->Parameters[] */
   1895    PROGRAM_WRITE_ONLY,  /**< A dummy, write-only register */
   1896    PROGRAM_ADDRESS,     /**< machine->AddressReg */
   1897    PROGRAM_SAMPLER,     /**< for shader samplers, compile-time only */
   1898    PROGRAM_SYSTEM_VALUE,/**< InstanceId, PrimitiveID, etc. */
   1899    PROGRAM_UNDEFINED,   /**< Invalid/TBD value */
   1900    PROGRAM_IMMEDIATE,   /**< Immediate value, used by TGSI */
   1901    PROGRAM_BUFFER,      /**< for shader buffers, compile-time only */
   1902    PROGRAM_MEMORY,      /**< for shared, global and local memory */
   1903    PROGRAM_IMAGE,       /**< for shader images, compile-time only */
   1904    PROGRAM_FILE_MAX
   1905 } gl_register_file;
   1906 
   1907 
   1908 /**
   1909  * Base class for any kind of program object
   1910  */
   1911 struct gl_program
   1912 {
   1913    /** FIXME: This must be first until we split shader_info from nir_shader */
   1914    struct shader_info info;
   1915 
   1916    mtx_t Mutex;
   1917    GLuint Id;
   1918    GLint RefCount;
   1919    GLubyte *String;  /**< Null-terminated program text */
   1920 
   1921    GLenum Target;    /**< GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_GEOMETRY_PROGRAM_NV */
   1922    GLenum Format;    /**< String encoding format */
   1923 
   1924    GLboolean _Used;        /**< Ever used for drawing? Used for debugging */
   1925 
   1926    struct nir_shader *nir;
   1927 
   1928    bool is_arb_asm; /** Is this an ARB assembly-style program */
   1929 
   1930    GLbitfield64 SecondaryOutputsWritten; /**< Subset of OutputsWritten outputs written with non-zero index. */
   1931    GLbitfield TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS];  /**< TEXTURE_x_BIT bitmask */
   1932    GLbitfield SamplersUsed;   /**< Bitfield of which samplers are used */
   1933    GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */
   1934    GLbitfield ExternalSamplersUsed; /**< Texture units used for samplerExternalOES */
   1935 
   1936    /* Vertex and geometry shaders fields */
   1937    unsigned ClipDistanceArraySize;
   1938    unsigned CullDistanceArraySize;
   1939 
   1940    /* Fragement shader only fields */
   1941    GLboolean OriginUpperLeft;
   1942    GLboolean PixelCenterInteger;
   1943 
   1944    /** Named parameters, constants, etc. from program text */
   1945    struct gl_program_parameter_list *Parameters;
   1946 
   1947    /** Map from sampler unit to texture unit (set by glUniform1i()) */
   1948    GLubyte SamplerUnits[MAX_SAMPLERS];
   1949 
   1950    /* FIXME: We should be able to make this struct a union. However some
   1951     * drivers (i915/fragment_programs, swrast/prog_execute) mix the use of
   1952     * these fields, we should fix this.
   1953     */
   1954    struct {
   1955       /** Fields used by GLSL programs */
   1956       struct {
   1957          /** Data shared by gl_program and gl_shader_program */
   1958          struct gl_shader_program_data *data;
   1959 
   1960          struct gl_active_atomic_buffer **AtomicBuffers;
   1961 
   1962          /** Post-link transform feedback info. */
   1963          struct gl_transform_feedback_info *LinkedTransformFeedback;
   1964 
   1965          /**
   1966           * Number of types for subroutine uniforms.
   1967           */
   1968          GLuint NumSubroutineUniformTypes;
   1969 
   1970          /**
   1971           * Subroutine uniform remap table
   1972           * based on the program level uniform remap table.
   1973           */
   1974          GLuint NumSubroutineUniforms; /* non-sparse total */
   1975          GLuint NumSubroutineUniformRemapTable;
   1976          struct gl_uniform_storage **SubroutineUniformRemapTable;
   1977 
   1978          /**
   1979           * Num of subroutine functions for this stage and storage for them.
   1980           */
   1981          GLuint NumSubroutineFunctions;
   1982          GLuint MaxSubroutineFunctionIndex;
   1983          struct gl_subroutine_function *SubroutineFunctions;
   1984 
   1985          /**
   1986           * Map from image uniform index to image unit (set by glUniform1i())
   1987           *
   1988           * An image uniform index is associated with each image uniform by
   1989           * the linker.  The image index associated with each uniform is
   1990           * stored in the \c gl_uniform_storage::image field.
   1991           */
   1992          GLubyte ImageUnits[MAX_IMAGE_UNIFORMS];
   1993 
   1994          /**
   1995           * Access qualifier specified in the shader for each image uniform
   1996           * index.  Either \c GL_READ_ONLY, \c GL_WRITE_ONLY or \c
   1997           * GL_READ_WRITE.
   1998           *
   1999           * It may be different, though only more strict than the value of
   2000           * \c gl_image_unit::Access for the corresponding image unit.
   2001           */
   2002          GLenum ImageAccess[MAX_IMAGE_UNIFORMS];
   2003 
   2004          struct gl_uniform_block **UniformBlocks;
   2005          struct gl_uniform_block **ShaderStorageBlocks;
   2006 
   2007          /** Which texture target is being sampled
   2008           * (TEXTURE_1D/2D/3D/etc_INDEX)
   2009           */
   2010          gl_texture_index SamplerTargets[MAX_SAMPLERS];
   2011 
   2012          union {
   2013             struct {
   2014                /**
   2015                 * A bitmask of gl_advanced_blend_mode values
   2016                 */
   2017                GLbitfield BlendSupport;
   2018             } fs;
   2019          };
   2020       } sh;
   2021 
   2022       /** ARB assembly-style program fields */
   2023       struct {
   2024          struct prog_instruction *Instructions;
   2025 
   2026          /**
   2027           * Local parameters used by the program.
   2028           *
   2029           * It's dynamically allocated because it is rarely used (just
   2030           * assembly-style programs), and MAX_PROGRAM_LOCAL_PARAMS entries
   2031           * once it's allocated.
   2032           */
   2033          GLfloat (*LocalParams)[4];
   2034 
   2035          /** Bitmask of which register files are read/written with indirect
   2036           * addressing.  Mask of (1 << PROGRAM_x) bits.
   2037           */
   2038          GLbitfield IndirectRegisterFiles;
   2039 
   2040          /** Logical counts */
   2041          /*@{*/
   2042          GLuint NumInstructions;
   2043          GLuint NumTemporaries;
   2044          GLuint NumParameters;
   2045          GLuint NumAttributes;
   2046          GLuint NumAddressRegs;
   2047          GLuint NumAluInstructions;
   2048          GLuint NumTexInstructions;
   2049          GLuint NumTexIndirections;
   2050          /*@}*/
   2051          /** Native, actual h/w counts */
   2052          /*@{*/
   2053          GLuint NumNativeInstructions;
   2054          GLuint NumNativeTemporaries;
   2055          GLuint NumNativeParameters;
   2056          GLuint NumNativeAttributes;
   2057          GLuint NumNativeAddressRegs;
   2058          GLuint NumNativeAluInstructions;
   2059          GLuint NumNativeTexInstructions;
   2060          GLuint NumNativeTexIndirections;
   2061          /*@}*/
   2062 
   2063          /** Used by ARB assembly-style programs. Can only be true for vertex
   2064           * programs.
   2065           */
   2066          GLboolean IsPositionInvariant;
   2067       } arb;
   2068    };
   2069 };
   2070 
   2071 
   2072 /**
   2073  * State common to vertex and fragment programs.
   2074  */
   2075 struct gl_program_state
   2076 {
   2077    GLint ErrorPos;                       /* GL_PROGRAM_ERROR_POSITION_ARB/NV */
   2078    const char *ErrorString;              /* GL_PROGRAM_ERROR_STRING_ARB/NV */
   2079 };
   2080 
   2081 
   2082 /**
   2083  * Context state for vertex programs.
   2084  */
   2085 struct gl_vertex_program_state
   2086 {
   2087    GLboolean Enabled;            /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */
   2088    GLboolean _Enabled;           /**< Enabled and _valid_ user program? */
   2089    GLboolean PointSizeEnabled;   /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */
   2090    GLboolean TwoSideEnabled;     /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */
   2091    /** Computed two sided lighting for fixed function/programs. */
   2092    GLboolean _TwoSideEnabled;
   2093    struct gl_program *Current;  /**< User-bound vertex program */
   2094 
   2095    /** Currently enabled and valid vertex program (including internal
   2096     * programs, user-defined vertex programs and GLSL vertex shaders).
   2097     * This is the program we must use when rendering.
   2098     */
   2099    struct gl_program *_Current;
   2100 
   2101    GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
   2102 
   2103    /** Should fixed-function T&L be implemented with a vertex prog? */
   2104    GLboolean _MaintainTnlProgram;
   2105 
   2106    /** Program to emulate fixed-function T&L (see above) */
   2107    struct gl_program *_TnlProgram;
   2108 
   2109    /** Cache of fixed-function programs */
   2110    struct gl_program_cache *Cache;
   2111 
   2112    GLboolean _Overriden;
   2113 };
   2114 
   2115 /**
   2116  * Context state for tessellation control programs.
   2117  */
   2118 struct gl_tess_ctrl_program_state
   2119 {
   2120    /** Currently bound and valid shader. */
   2121    struct gl_program *_Current;
   2122 
   2123    GLint patch_vertices;
   2124    GLfloat patch_default_outer_level[4];
   2125    GLfloat patch_default_inner_level[2];
   2126 };
   2127 
   2128 /**
   2129  * Context state for tessellation evaluation programs.
   2130  */
   2131 struct gl_tess_eval_program_state
   2132 {
   2133    /** Currently bound and valid shader. */
   2134    struct gl_program *_Current;
   2135 };
   2136 
   2137 /**
   2138  * Context state for geometry programs.
   2139  */
   2140 struct gl_geometry_program_state
   2141 {
   2142    /** Currently enabled and valid program (including internal programs
   2143     * and compiled shader programs).
   2144     */
   2145    struct gl_program *_Current;
   2146 };
   2147 
   2148 /**
   2149  * Context state for fragment programs.
   2150  */
   2151 struct gl_fragment_program_state
   2152 {
   2153    GLboolean Enabled;     /**< User-set fragment program enable flag */
   2154    GLboolean _Enabled;    /**< Enabled and _valid_ user program? */
   2155    struct gl_program *Current;  /**< User-bound fragment program */
   2156 
   2157    /** Currently enabled and valid fragment program (including internal
   2158     * programs, user-defined fragment programs and GLSL fragment shaders).
   2159     * This is the program we must use when rendering.
   2160     */
   2161    struct gl_program *_Current;
   2162 
   2163    GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
   2164 
   2165    /** Should fixed-function texturing be implemented with a fragment prog? */
   2166    GLboolean _MaintainTexEnvProgram;
   2167 
   2168    /** Program to emulate fixed-function texture env/combine (see above) */
   2169    struct gl_program *_TexEnvProgram;
   2170 
   2171    /** Cache of fixed-function programs */
   2172    struct gl_program_cache *Cache;
   2173 };
   2174 
   2175 
   2176 /**
   2177  * Context state for compute programs.
   2178  */
   2179 struct gl_compute_program_state
   2180 {
   2181    /** Currently enabled and valid program (including internal programs
   2182     * and compiled shader programs).
   2183     */
   2184    struct gl_program *_Current;
   2185 };
   2186 
   2187 
   2188 /**
   2189  * ATI_fragment_shader runtime state
   2190  */
   2191 
   2192 struct atifs_instruction;
   2193 struct atifs_setupinst;
   2194 
   2195 /**
   2196  * ATI fragment shader
   2197  */
   2198 struct ati_fragment_shader
   2199 {
   2200    GLuint Id;
   2201    GLint RefCount;
   2202    struct atifs_instruction *Instructions[2];
   2203    struct atifs_setupinst *SetupInst[2];
   2204    GLfloat Constants[8][4];
   2205    GLbitfield LocalConstDef;  /**< Indicates which constants have been set */
   2206    GLubyte numArithInstr[2];
   2207    GLubyte regsAssigned[2];
   2208    GLubyte NumPasses;         /**< 1 or 2 */
   2209    GLubyte cur_pass;
   2210    GLubyte last_optype;
   2211    GLboolean interpinp1;
   2212    GLboolean isValid;
   2213    GLuint swizzlerq;
   2214    struct gl_program *Program;
   2215 };
   2216 
   2217 /**
   2218  * Context state for GL_ATI_fragment_shader
   2219  */
   2220 struct gl_ati_fragment_shader_state
   2221 {
   2222    GLboolean Enabled;
   2223    GLboolean _Enabled;                  /**< enabled and valid shader? */
   2224    GLboolean Compiling;
   2225    GLfloat GlobalConstants[8][4];
   2226    struct ati_fragment_shader *Current;
   2227 };
   2228 
   2229 /**
   2230  *  Shader subroutine function definition
   2231  */
   2232 struct gl_subroutine_function
   2233 {
   2234    char *name;
   2235    int index;
   2236    int num_compat_types;
   2237    const struct glsl_type **types;
   2238 };
   2239 
   2240 /**
   2241  * Shader information needed by both gl_shader and gl_linked shader.
   2242  */
   2243 struct gl_shader_info
   2244 {
   2245    bool uses_gl_fragcoord;
   2246    bool redeclares_gl_fragcoord;
   2247    bool PostDepthCoverage;
   2248    bool InnerCoverage;
   2249    bool ARB_fragment_coord_conventions_enable;
   2250 
   2251    /**
   2252     * Fragment shader state from GLSL 1.50 layout qualifiers.
   2253     */
   2254    bool origin_upper_left;
   2255    bool pixel_center_integer;
   2256 
   2257    struct {
   2258       /** Global xfb_stride out qualifier if any */
   2259       GLuint BufferStride[MAX_FEEDBACK_BUFFERS];
   2260    } TransformFeedback;
   2261 
   2262    /**
   2263     * Tessellation Control shader state from layout qualifiers.
   2264     */
   2265    struct {
   2266       /**
   2267        * 0 - vertices not declared in shader, or
   2268        * 1 .. GL_MAX_PATCH_VERTICES
   2269        */
   2270       GLint VerticesOut;
   2271    } TessCtrl;
   2272 
   2273    /**
   2274     * Tessellation Evaluation shader state from layout qualifiers.
   2275     */
   2276    struct {
   2277       /**
   2278        * GL_TRIANGLES, GL_QUADS, GL_ISOLINES or PRIM_UNKNOWN if it's not set
   2279        * in this shader.
   2280        */
   2281       GLenum PrimitiveMode;
   2282 
   2283       enum gl_tess_spacing Spacing;
   2284 
   2285       /**
   2286        * GL_CW, GL_CCW, or 0 if it's not set in this shader.
   2287        */
   2288       GLenum VertexOrder;
   2289       /**
   2290        * 1, 0, or -1 if it's not set in this shader.
   2291        */
   2292       int PointMode;
   2293    } TessEval;
   2294 
   2295    /**
   2296     * Geometry shader state from GLSL 1.50 layout qualifiers.
   2297     */
   2298    struct {
   2299       GLint VerticesOut;
   2300       /**
   2301        * 0 - Invocations count not declared in shader, or
   2302        * 1 .. MAX_GEOMETRY_SHADER_INVOCATIONS
   2303        */
   2304       GLint Invocations;
   2305       /**
   2306        * GL_POINTS, GL_LINES, GL_LINES_ADJACENCY, GL_TRIANGLES, or
   2307        * GL_TRIANGLES_ADJACENCY, or PRIM_UNKNOWN if it's not set in this
   2308        * shader.
   2309        */
   2310       GLenum InputType;
   2311        /**
   2312         * GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP, or PRIM_UNKNOWN if
   2313         * it's not set in this shader.
   2314         */
   2315       GLenum OutputType;
   2316    } Geom;
   2317 
   2318    /**
   2319     * Whether early fragment tests are enabled as defined by
   2320     * ARB_shader_image_load_store.
   2321     */
   2322    bool EarlyFragmentTests;
   2323 
   2324    /**
   2325     * Compute shader state from ARB_compute_shader and
   2326     * ARB_compute_variable_group_size layout qualifiers.
   2327     */
   2328    struct {
   2329       /**
   2330        * Size specified using local_size_{x,y,z}, or all 0's to indicate that
   2331        * it's not set in this shader.
   2332        */
   2333       unsigned LocalSize[3];
   2334 
   2335       /**
   2336        * Whether a variable work group size has been specified as defined by
   2337        * ARB_compute_variable_group_size.
   2338        */
   2339       bool LocalSizeVariable;
   2340    } Comp;
   2341 };
   2342 
   2343 /**
   2344  * A linked GLSL shader object.
   2345  */
   2346 struct gl_linked_shader
   2347 {
   2348    gl_shader_stage Stage;
   2349 
   2350 #ifdef DEBUG
   2351    unsigned SourceChecksum;
   2352 #endif
   2353 
   2354    struct gl_program *Program;  /**< Post-compile assembly code */
   2355 
   2356    /**
   2357     * \name Sampler tracking
   2358     *
   2359     * \note Each of these fields is only set post-linking.
   2360     */
   2361    /*@{*/
   2362    GLbitfield shadow_samplers;	/**< Samplers used for shadow sampling. */
   2363    /*@}*/
   2364 
   2365    /**
   2366     * Number of default uniform block components used by this shader.
   2367     *
   2368     * This field is only set post-linking.
   2369     */
   2370    unsigned num_uniform_components;
   2371 
   2372    /**
   2373     * Number of combined uniform components used by this shader.
   2374     *
   2375     * This field is only set post-linking.  It is the sum of the uniform block
   2376     * sizes divided by sizeof(float), and num_uniform_compoennts.
   2377     */
   2378    unsigned num_combined_uniform_components;
   2379 
   2380    struct exec_list *ir;
   2381    struct exec_list *packed_varyings;
   2382    struct exec_list *fragdata_arrays;
   2383    struct glsl_symbol_table *symbols;
   2384 
   2385    struct gl_shader_info info;
   2386 };
   2387 
   2388 static inline GLbitfield gl_external_samplers(struct gl_program *prog)
   2389 {
   2390    GLbitfield external_samplers = 0;
   2391    GLbitfield mask = prog->SamplersUsed;
   2392 
   2393    while (mask) {
   2394       int idx = u_bit_scan(&mask);
   2395       if (prog->sh.SamplerTargets[idx] == TEXTURE_EXTERNAL_INDEX)
   2396          external_samplers |= (1 << idx);
   2397    }
   2398 
   2399    return external_samplers;
   2400 }
   2401 
   2402 /**
   2403  * A GLSL shader object.
   2404  */
   2405 struct gl_shader
   2406 {
   2407    /** GL_FRAGMENT_SHADER || GL_VERTEX_SHADER || GL_GEOMETRY_SHADER_ARB ||
   2408     *  GL_TESS_CONTROL_SHADER || GL_TESS_EVALUATION_SHADER.
   2409     * Must be the first field.
   2410     */
   2411    GLenum Type;
   2412    gl_shader_stage Stage;
   2413    GLuint Name;  /**< AKA the handle */
   2414    GLint RefCount;  /**< Reference count */
   2415    GLchar *Label;   /**< GL_KHR_debug */
   2416    GLboolean DeletePending;
   2417    GLboolean CompileStatus;
   2418    bool IsES;              /**< True if this shader uses GLSL ES */
   2419 
   2420 #ifdef DEBUG
   2421    unsigned SourceChecksum;       /**< for debug/logging purposes */
   2422 #endif
   2423    const GLchar *Source;  /**< Source code string */
   2424 
   2425    GLchar *InfoLog;
   2426 
   2427    unsigned Version;       /**< GLSL version used for linking */
   2428 
   2429    struct exec_list *ir;
   2430    struct glsl_symbol_table *symbols;
   2431 
   2432    /**
   2433     * A bitmask of gl_advanced_blend_mode values
   2434     */
   2435    GLbitfield BlendSupport;
   2436 
   2437    struct gl_shader_info info;
   2438 };
   2439 
   2440 
   2441 struct gl_uniform_buffer_variable
   2442 {
   2443    char *Name;
   2444 
   2445    /**
   2446     * Name of the uniform as seen by glGetUniformIndices.
   2447     *
   2448     * glGetUniformIndices requires that the block instance index \b not be
   2449     * present in the name of queried uniforms.
   2450     *
   2451     * \note
   2452     * \c gl_uniform_buffer_variable::IndexName and
   2453     * \c gl_uniform_buffer_variable::Name may point to identical storage.
   2454     */
   2455    char *IndexName;
   2456 
   2457    const struct glsl_type *Type;
   2458    unsigned int Offset;
   2459    GLboolean RowMajor;
   2460 };
   2461 
   2462 
   2463 enum gl_uniform_block_packing
   2464 {
   2465    ubo_packing_std140,
   2466    ubo_packing_shared,
   2467    ubo_packing_packed,
   2468    ubo_packing_std430
   2469 };
   2470 
   2471 
   2472 struct gl_uniform_block
   2473 {
   2474    /** Declared name of the uniform block */
   2475    char *Name;
   2476 
   2477    /** Array of supplemental information about UBO ir_variables. */
   2478    struct gl_uniform_buffer_variable *Uniforms;
   2479    GLuint NumUniforms;
   2480 
   2481    /**
   2482     * Index (GL_UNIFORM_BLOCK_BINDING) into ctx->UniformBufferBindings[] to use
   2483     * with glBindBufferBase to bind a buffer object to this uniform block.  When
   2484     * updated in the program, _NEW_BUFFER_OBJECT will be set.
   2485     */
   2486    GLuint Binding;
   2487 
   2488    /**
   2489     * Minimum size (in bytes) of a buffer object to back this uniform buffer
   2490     * (GL_UNIFORM_BLOCK_DATA_SIZE).
   2491     */
   2492    GLuint UniformBufferSize;
   2493 
   2494    /** Stages that reference this block */
   2495    uint8_t stageref;
   2496 
   2497    /**
   2498     * Linearized array index for uniform block instance arrays
   2499     *
   2500     * Given a uniform block instance array declared with size
   2501     * blk[s_0][s_1]..[s_m], the block referenced by blk[i_0][i_1]..[i_m] will
   2502     * have the linearized array index
   2503     *
   2504     *           m-1       m
   2505     *     i_m +    i_j *      s_k
   2506     *           j=0       k=j+1
   2507     *
   2508     * For a uniform block instance that is not an array, this is always 0.
   2509     */
   2510    uint8_t linearized_array_index;
   2511 
   2512    /**
   2513     * Layout specified in the shader
   2514     *
   2515     * This isn't accessible through the API, but it is used while
   2516     * cross-validating uniform blocks.
   2517     */
   2518    enum gl_uniform_block_packing _Packing;
   2519    GLboolean _RowMajor;
   2520 };
   2521 
   2522 /**
   2523  * Structure that represents a reference to an atomic buffer from some
   2524  * shader program.
   2525  */
   2526 struct gl_active_atomic_buffer
   2527 {
   2528    /** Uniform indices of the atomic counters declared within it. */
   2529    GLuint *Uniforms;
   2530    GLuint NumUniforms;
   2531 
   2532    /** Binding point index associated with it. */
   2533    GLuint Binding;
   2534 
   2535    /** Minimum reasonable size it is expected to have. */
   2536    GLuint MinimumSize;
   2537 
   2538    /** Shader stages making use of it. */
   2539    GLboolean StageReferences[MESA_SHADER_STAGES];
   2540 };
   2541 
   2542 /**
   2543  * Data container for shader queries. This holds only the minimal
   2544  * amount of required information for resource queries to work.
   2545  */
   2546 struct gl_shader_variable
   2547 {
   2548    /**
   2549     * Declared type of the variable
   2550     */
   2551    const struct glsl_type *type;
   2552 
   2553    /**
   2554     * If the variable is in an interface block, this is the type of the block.
   2555     */
   2556    const struct glsl_type *interface_type;
   2557 
   2558    /**
   2559     * For variables inside structs (possibly recursively), this is the
   2560     * outermost struct type.
   2561     */
   2562    const struct glsl_type *outermost_struct_type;
   2563 
   2564    /**
   2565     * Declared name of the variable
   2566     */
   2567    char *name;
   2568 
   2569    /**
   2570     * Storage location of the base of this variable
   2571     *
   2572     * The precise meaning of this field depends on the nature of the variable.
   2573     *
   2574     *   - Vertex shader input: one of the values from \c gl_vert_attrib.
   2575     *   - Vertex shader output: one of the values from \c gl_varying_slot.
   2576     *   - Geometry shader input: one of the values from \c gl_varying_slot.
   2577     *   - Geometry shader output: one of the values from \c gl_varying_slot.
   2578     *   - Fragment shader input: one of the values from \c gl_varying_slot.
   2579     *   - Fragment shader output: one of the values from \c gl_frag_result.
   2580     *   - Uniforms: Per-stage uniform slot number for default uniform block.
   2581     *   - Uniforms: Index within the uniform block definition for UBO members.
   2582     *   - Non-UBO Uniforms: explicit location until linking then reused to
   2583     *     store uniform slot number.
   2584     *   - Other: This field is not currently used.
   2585     *
   2586     * If the variable is a uniform, shader input, or shader output, and the
   2587     * slot has not been assigned, the value will be -1.
   2588     */
   2589    int location;
   2590 
   2591    /**
   2592     * Specifies the first component the variable is stored in as per
   2593     * ARB_enhanced_layouts.
   2594     */
   2595    unsigned component:2;
   2596 
   2597    /**
   2598     * Output index for dual source blending.
   2599     *
   2600     * \note
   2601     * The GLSL spec only allows the values 0 or 1 for the index in \b dual
   2602     * source blending.
   2603     */
   2604    unsigned index:1;
   2605 
   2606    /**
   2607     * Specifies whether a shader input/output is per-patch in tessellation
   2608     * shader stages.
   2609     */
   2610    unsigned patch:1;
   2611 
   2612    /**
   2613     * Storage class of the variable.
   2614     *
   2615     * \sa (n)ir_variable_mode
   2616     */
   2617    unsigned mode:4;
   2618 
   2619    /**
   2620     * Interpolation mode for shader inputs / outputs
   2621     *
   2622     * \sa glsl_interp_mode
   2623     */
   2624    unsigned interpolation:2;
   2625 
   2626    /**
   2627     * Was the location explicitly set in the shader?
   2628     *
   2629     * If the location is explicitly set in the shader, it \b cannot be changed
   2630     * by the linker or by the API (e.g., calls to \c glBindAttribLocation have
   2631     * no effect).
   2632     */
   2633    unsigned explicit_location:1;
   2634 
   2635    /**
   2636     * Precision qualifier.
   2637     */
   2638    unsigned precision:2;
   2639 };
   2640 
   2641 /**
   2642  * Active resource in a gl_shader_program
   2643  */
   2644 struct gl_program_resource
   2645 {
   2646    GLenum Type; /** Program interface type. */
   2647    const void *Data; /** Pointer to resource associated data structure. */
   2648    uint8_t StageReferences; /** Bitmask of shader stage references. */
   2649 };
   2650 
   2651 /**
   2652  * A data structure to be shared by gl_shader_program and gl_program.
   2653  */
   2654 struct gl_shader_program_data
   2655 {
   2656    GLint RefCount;  /**< Reference count */
   2657 
   2658    unsigned NumUniformStorage;
   2659    unsigned NumHiddenUniforms;
   2660    struct gl_uniform_storage *UniformStorage;
   2661 
   2662    unsigned NumUniformBlocks;
   2663    struct gl_uniform_block *UniformBlocks;
   2664 
   2665    unsigned NumShaderStorageBlocks;
   2666    struct gl_uniform_block *ShaderStorageBlocks;
   2667 
   2668    struct gl_active_atomic_buffer *AtomicBuffers;
   2669    unsigned NumAtomicBuffers;
   2670 
   2671    GLboolean LinkStatus;   /**< GL_LINK_STATUS */
   2672    GLboolean Validated;
   2673    GLchar *InfoLog;
   2674 
   2675    unsigned Version;       /**< GLSL version used for linking */
   2676 
   2677    /* Mask of stages this program was linked against */
   2678    unsigned linked_stages;
   2679 };
   2680 
   2681 /**
   2682  * A GLSL program object.
   2683  * Basically a linked collection of vertex and fragment shaders.
   2684  */
   2685 struct gl_shader_program
   2686 {
   2687    GLenum Type;  /**< Always GL_SHADER_PROGRAM (internal token) */
   2688    GLuint Name;  /**< aka handle or ID */
   2689    GLchar *Label;   /**< GL_KHR_debug */
   2690    GLint RefCount;  /**< Reference count */
   2691    GLboolean DeletePending;
   2692 
   2693    /**
   2694     * Is the application intending to glGetProgramBinary this program?
   2695     */
   2696    GLboolean BinaryRetreivableHint;
   2697 
   2698    /**
   2699     * Indicates whether program can be bound for individual pipeline stages
   2700     * using UseProgramStages after it is next linked.
   2701     */
   2702    GLboolean SeparateShader;
   2703 
   2704    GLuint NumShaders;          /**< number of attached shaders */
   2705    struct gl_shader **Shaders; /**< List of attached the shaders */
   2706 
   2707    /**
   2708     * User-defined attribute bindings
   2709     *
   2710     * These are set via \c glBindAttribLocation and are used to direct the
   2711     * GLSL linker.  These are \b not the values used in the compiled shader,
   2712     * and they are \b not the values returned by \c glGetAttribLocation.
   2713     */
   2714    struct string_to_uint_map *AttributeBindings;
   2715 
   2716    /**
   2717     * User-defined fragment data bindings
   2718     *
   2719     * These are set via \c glBindFragDataLocation and are used to direct the
   2720     * GLSL linker.  These are \b not the values used in the compiled shader,
   2721     * and they are \b not the values returned by \c glGetFragDataLocation.
   2722     */
   2723    struct string_to_uint_map *FragDataBindings;
   2724    struct string_to_uint_map *FragDataIndexBindings;
   2725 
   2726    /**
   2727     * Transform feedback varyings last specified by
   2728     * glTransformFeedbackVaryings().
   2729     *
   2730     * For the current set of transform feedback varyings used for transform
   2731     * feedback output, see LinkedTransformFeedback.
   2732     */
   2733    struct {
   2734       GLenum BufferMode;
   2735       /** Global xfb_stride out qualifier if any */
   2736       GLuint BufferStride[MAX_FEEDBACK_BUFFERS];
   2737       GLuint NumVarying;
   2738       GLchar **VaryingNames;  /**< Array [NumVarying] of char * */
   2739    } TransformFeedback;
   2740 
   2741    struct gl_program *xfb_program;
   2742 
   2743    /** Post-link gl_FragDepth layout for ARB_conservative_depth. */
   2744    enum gl_frag_depth_layout FragDepthLayout;
   2745 
   2746    /**
   2747     * Tessellation Evaluation shader state from layout qualifiers.
   2748     */
   2749    struct {
   2750       /**
   2751        * True if gl_ClipDistance is written to.  Copied into
   2752        * gl_program by _mesa_copy_linked_program_data().
   2753        */
   2754       GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
   2755                                          0 if not present. */
   2756       GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or
   2757                                          0 if not present. */
   2758    } TessEval;
   2759 
   2760    /**
   2761     * Geometry shader state - copied into gl_program by
   2762     * _mesa_copy_linked_program_data().
   2763     */
   2764    struct {
   2765       GLint VerticesIn;
   2766 
   2767       /**
   2768        * True if gl_ClipDistance is written to.  Copied into
   2769        * gl_program by _mesa_copy_linked_program_data().
   2770        */
   2771       GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
   2772                                          0 if not present. */
   2773       GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or
   2774                                          0 if not present. */
   2775       bool UsesEndPrimitive;
   2776       bool UsesStreams;
   2777    } Geom;
   2778 
   2779    /** Vertex shader state */
   2780    struct {
   2781       /**
   2782        * True if gl_ClipDistance is written to.  Copied into gl_program
   2783        * by _mesa_copy_linked_program_data().
   2784        */
   2785       GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
   2786                                          0 if not present. */
   2787       GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or
   2788                                          0 if not present. */
   2789    } Vert;
   2790 
   2791    /**
   2792     * Compute shader state - copied into gl_program by
   2793     * _mesa_copy_linked_program_data().
   2794     */
   2795    struct {
   2796       /**
   2797        * If this shader contains a compute stage, size specified using
   2798        * local_size_{x,y,z}.  Otherwise undefined.
   2799        */
   2800       unsigned LocalSize[3];
   2801       /**
   2802        * Size of shared variables accessed by the compute shader.
   2803        */
   2804       unsigned SharedSize;
   2805 
   2806       /**
   2807        * Whether a variable work group size has been specified.
   2808        */
   2809       bool LocalSizeVariable;
   2810    } Comp;
   2811 
   2812    /** Data shared by gl_program and gl_shader_program */
   2813    struct gl_shader_program_data *data;
   2814 
   2815    /**
   2816     * Mapping from GL uniform locations returned by \c glUniformLocation to
   2817     * UniformStorage entries. Arrays will have multiple contiguous slots
   2818     * in the UniformRemapTable, all pointing to the same UniformStorage entry.
   2819     */
   2820    unsigned NumUniformRemapTable;
   2821    struct gl_uniform_storage **UniformRemapTable;
   2822 
   2823    /**
   2824     * Sometimes there are empty slots left over in UniformRemapTable after we
   2825     * allocate slots to explicit locations. This list stores the blocks of
   2826     * continuous empty slots inside UniformRemapTable.
   2827     */
   2828    struct exec_list EmptyUniformLocations;
   2829 
   2830    /**
   2831     * Size of the gl_ClipDistance array that is output from the last pipeline
   2832     * stage before the fragment shader.
   2833     */
   2834    unsigned LastClipDistanceArraySize;
   2835    unsigned LastCullDistanceArraySize;
   2836 
   2837    /**
   2838     * Map of active uniform names to locations
   2839     *
   2840     * Maps any active uniform that is not an array element to a location.
   2841     * Each active uniform, including individual structure members will appear
   2842     * in this map.  This roughly corresponds to the set of names that would be
   2843     * enumerated by \c glGetActiveUniform.
   2844     */
   2845    struct string_to_uint_map *UniformHash;
   2846 
   2847    GLboolean SamplersValidated; /**< Samplers validated against texture units? */
   2848 
   2849    bool IsES;              /**< True if this program uses GLSL ES */
   2850 
   2851    /**
   2852     * Per-stage shaders resulting from the first stage of linking.
   2853     *
   2854     * Set of linked shaders for this program.  The array is accessed using the
   2855     * \c MESA_SHADER_* defines.  Entries for non-existent stages will be
   2856     * \c NULL.
   2857     */
   2858    struct gl_linked_shader *_LinkedShaders[MESA_SHADER_STAGES];
   2859 
   2860    /** List of all active resources after linking. */
   2861    struct gl_program_resource *ProgramResourceList;
   2862    unsigned NumProgramResourceList;
   2863 
   2864    /* True if any of the fragment shaders attached to this program use:
   2865     * #extension ARB_fragment_coord_conventions: enable
   2866     */
   2867    GLboolean ARB_fragment_coord_conventions_enable;
   2868 };
   2869 
   2870 
   2871 #define GLSL_DUMP      0x1  /**< Dump shaders to stdout */
   2872 #define GLSL_LOG       0x2  /**< Write shaders to files */
   2873 #define GLSL_OPT       0x4  /**< Force optimizations (override pragmas) */
   2874 #define GLSL_NO_OPT    0x8  /**< Force no optimizations (override pragmas) */
   2875 #define GLSL_UNIFORMS 0x10  /**< Print glUniform calls */
   2876 #define GLSL_NOP_VERT 0x20  /**< Force no-op vertex shaders */
   2877 #define GLSL_NOP_FRAG 0x40  /**< Force no-op fragment shaders */
   2878 #define GLSL_USE_PROG 0x80  /**< Log glUseProgram calls */
   2879 #define GLSL_REPORT_ERRORS 0x100  /**< Print compilation errors */
   2880 #define GLSL_DUMP_ON_ERROR 0x200 /**< Dump shaders to stderr on compile error */
   2881 
   2882 
   2883 /**
   2884  * Context state for GLSL vertex/fragment shaders.
   2885  * Extended to support pipeline object
   2886  */
   2887 struct gl_pipeline_object
   2888 {
   2889    /** Name of the pipeline object as received from glGenProgramPipelines.
   2890     * It would be 0 for shaders without separate shader objects.
   2891     */
   2892    GLuint Name;
   2893 
   2894    GLint RefCount;
   2895 
   2896    mtx_t Mutex;
   2897 
   2898    GLchar *Label;   /**< GL_KHR_debug */
   2899 
   2900    /**
   2901     * Programs used for rendering
   2902     *
   2903     * There is a separate program set for each shader stage.
   2904     */
   2905    struct gl_shader_program *CurrentProgram[MESA_SHADER_STAGES];
   2906 
   2907    struct gl_program *_CurrentFragmentProgram;
   2908 
   2909    /**
   2910     * Program used by glUniform calls.
   2911     *
   2912     * Explicitly set by \c glUseProgram and \c glActiveProgramEXT.
   2913     */
   2914    struct gl_shader_program *ActiveProgram;
   2915 
   2916    GLbitfield Flags;                    /**< Mask of GLSL_x flags */
   2917 
   2918    GLboolean EverBound;                 /**< Has the pipeline object been created */
   2919 
   2920    GLboolean Validated;                 /**< Pipeline Validation status */
   2921 
   2922    GLchar *InfoLog;
   2923 };
   2924 
   2925 /**
   2926  * Context state for GLSL pipeline shaders.
   2927  */
   2928 struct gl_pipeline_shader_state
   2929 {
   2930    /** Currently bound pipeline object. See _mesa_BindProgramPipeline() */
   2931    struct gl_pipeline_object *Current;
   2932 
   2933    /* Default Object to ensure that _Shader is never NULL */
   2934    struct gl_pipeline_object *Default;
   2935 
   2936    /** Pipeline objects */
   2937    struct _mesa_HashTable *Objects;
   2938 };
   2939 
   2940 /**
   2941  * Compiler options for a single GLSL shaders type
   2942  */
   2943 struct gl_shader_compiler_options
   2944 {
   2945    /** Driver-selectable options: */
   2946    GLboolean EmitNoLoops;
   2947    GLboolean EmitNoFunctions;
   2948    GLboolean EmitNoCont;                  /**< Emit CONT opcode? */
   2949    GLboolean EmitNoMainReturn;            /**< Emit CONT/RET opcodes? */
   2950    GLboolean EmitNoPow;                   /**< Emit POW opcodes? */
   2951    GLboolean EmitNoSat;                   /**< Emit SAT opcodes? */
   2952    GLboolean LowerCombinedClipCullDistance; /** Lower gl_ClipDistance and
   2953                                               * gl_CullDistance together from
   2954                                               * float[8] to vec4[2]
   2955                                               **/
   2956 
   2957    /**
   2958     * \name Forms of indirect addressing the driver cannot do.
   2959     */
   2960    /*@{*/
   2961    GLboolean EmitNoIndirectInput;   /**< No indirect addressing of inputs */
   2962    GLboolean EmitNoIndirectOutput;  /**< No indirect addressing of outputs */
   2963    GLboolean EmitNoIndirectTemp;    /**< No indirect addressing of temps */
   2964    GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */
   2965    GLboolean EmitNoIndirectSampler; /**< No indirect addressing of samplers */
   2966    /*@}*/
   2967 
   2968    GLuint MaxIfDepth;               /**< Maximum nested IF blocks */
   2969    GLuint MaxUnrollIterations;
   2970 
   2971    /**
   2972     * Optimize code for array of structures backends.
   2973     *
   2974     * This is a proxy for:
   2975     *   - preferring DP4 instructions (rather than MUL/MAD) for
   2976     *     matrix * vector operations, such as position transformation.
   2977     */
   2978    GLboolean OptimizeForAOS;
   2979 
   2980    GLboolean LowerBufferInterfaceBlocks; /**< Lower UBO and SSBO access to intrinsics. */
   2981 
   2982    /** Clamp UBO and SSBO block indices so they don't go out-of-bounds. */
   2983    GLboolean ClampBlockIndicesToArrayBounds;
   2984 
   2985    const struct nir_shader_compiler_options *NirOptions;
   2986 };
   2987 
   2988 
   2989 /**
   2990  * Occlusion/timer query object.
   2991  */
   2992 struct gl_query_object
   2993 {
   2994    GLenum Target;      /**< The query target, when active */
   2995    GLuint Id;          /**< hash table ID/name */
   2996    GLchar *Label;       /**< GL_KHR_debug */
   2997    GLuint64EXT Result; /**< the counter */
   2998    GLboolean Active;   /**< inside Begin/EndQuery */
   2999    GLboolean Ready;    /**< result is ready? */
   3000    GLboolean EverBound;/**< has query object ever been bound */
   3001    GLuint Stream;      /**< The stream */
   3002 };
   3003 
   3004 
   3005 /**
   3006  * Context state for query objects.
   3007  */
   3008 struct gl_query_state
   3009 {
   3010    struct _mesa_HashTable *QueryObjects;
   3011    struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */
   3012    struct gl_query_object *CurrentTimerObject;     /* GL_EXT_timer_query */
   3013 
   3014    /** GL_NV_conditional_render */
   3015    struct gl_query_object *CondRenderQuery;
   3016 
   3017    /** GL_EXT_transform_feedback */
   3018    struct gl_query_object *PrimitivesGenerated[MAX_VERTEX_STREAMS];
   3019    struct gl_query_object *PrimitivesWritten[MAX_VERTEX_STREAMS];
   3020 
   3021    /** GL_ARB_timer_query */
   3022    struct gl_query_object *TimeElapsed;
   3023 
   3024    /** GL_ARB_pipeline_statistics_query */
   3025    struct gl_query_object *pipeline_stats[MAX_PIPELINE_STATISTICS];
   3026 
   3027    GLenum CondRenderMode;
   3028 };
   3029 
   3030 
   3031 /** Sync object state */
   3032 struct gl_sync_object
   3033 {
   3034    GLenum Type;               /**< GL_SYNC_FENCE */
   3035    GLuint Name;               /**< Fence name */
   3036    GLchar *Label;             /**< GL_KHR_debug */
   3037    GLint RefCount;            /**< Reference count */
   3038    GLboolean DeletePending;   /**< Object was deleted while there were still
   3039 			       * live references (e.g., sync not yet finished)
   3040 			       */
   3041    GLenum SyncCondition;
   3042    GLbitfield Flags;          /**< Flags passed to glFenceSync */
   3043    GLuint StatusFlag:1;       /**< Has the sync object been signaled? */
   3044 };
   3045 
   3046 
   3047 /**
   3048  * State which can be shared by multiple contexts:
   3049  */
   3050 struct gl_shared_state
   3051 {
   3052    mtx_t Mutex;		   /**< for thread safety */
   3053    GLint RefCount;			   /**< Reference count */
   3054    struct _mesa_HashTable *DisplayList;	   /**< Display lists hash table */
   3055    struct _mesa_HashTable *BitmapAtlas;    /**< For optimized glBitmap text */
   3056    struct _mesa_HashTable *TexObjects;	   /**< Texture objects hash table */
   3057 
   3058    /** Default texture objects (shared by all texture units) */
   3059    struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS];
   3060 
   3061    /** Fallback texture used when a bound texture is incomplete */
   3062    struct gl_texture_object *FallbackTex[NUM_TEXTURE_TARGETS];
   3063 
   3064    /**
   3065     * \name Thread safety and statechange notification for texture
   3066     * objects.
   3067     *
   3068     * \todo Improve the granularity of locking.
   3069     */
   3070    /*@{*/
   3071    mtx_t TexMutex;		/**< texobj thread safety */
   3072    GLuint TextureStateStamp;	        /**< state notification for shared tex */
   3073    /*@}*/
   3074 
   3075    /** Default buffer object for vertex arrays that aren't in VBOs */
   3076    struct gl_buffer_object *NullBufferObj;
   3077 
   3078    /**
   3079     * \name Vertex/geometry/fragment programs
   3080     */
   3081    /*@{*/
   3082    struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */
   3083    struct gl_program *DefaultVertexProgram;
   3084    struct gl_program *DefaultFragmentProgram;
   3085    /*@}*/
   3086 
   3087    /* GL_ATI_fragment_shader */
   3088    struct _mesa_HashTable *ATIShaders;
   3089    struct ati_fragment_shader *DefaultFragmentShader;
   3090 
   3091    struct _mesa_HashTable *BufferObjects;
   3092 
   3093    /** Table of both gl_shader and gl_shader_program objects */
   3094    struct _mesa_HashTable *ShaderObjects;
   3095 
   3096    /* GL_EXT_framebuffer_object */
   3097    struct _mesa_HashTable *RenderBuffers;
   3098    struct _mesa_HashTable *FrameBuffers;
   3099 
   3100    /* GL_ARB_sync */
   3101    struct set *SyncObjects;
   3102 
   3103    /** GL_ARB_sampler_objects */
   3104    struct _mesa_HashTable *SamplerObjects;
   3105 
   3106    /**
   3107     * Some context in this share group was affected by a GPU reset
   3108     *
   3109     * On the next call to \c glGetGraphicsResetStatus, contexts that have not
   3110     * been affected by a GPU reset must also return
   3111     * \c GL_INNOCENT_CONTEXT_RESET_ARB.
   3112     *
   3113     * Once this field becomes true, it is never reset to false.
   3114     */
   3115    bool ShareGroupReset;
   3116 };
   3117 
   3118 
   3119 
   3120 /**
   3121  * Renderbuffers represent drawing surfaces such as color, depth and/or
   3122  * stencil.  A framebuffer object has a set of renderbuffers.
   3123  * Drivers will typically derive subclasses of this type.
   3124  */
   3125 struct gl_renderbuffer
   3126 {
   3127    mtx_t Mutex; /**< for thread safety */
   3128    GLuint ClassID;        /**< Useful for drivers */
   3129    GLuint Name;
   3130    GLchar *Label;         /**< GL_KHR_debug */
   3131    GLint RefCount;
   3132    GLuint Width, Height;
   3133    GLuint Depth;
   3134    GLboolean Purgeable;  /**< Is the buffer purgeable under memory pressure? */
   3135    GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */
   3136    /**
   3137     * True for renderbuffers that wrap textures, giving the driver a chance to
   3138     * flush render caches through the FinishRenderTexture hook.
   3139     *
   3140     * Drivers may also set this on renderbuffers other than those generated by
   3141     * glFramebufferTexture(), though it means FinishRenderTexture() would be
   3142     * called without a rb->TexImage.
   3143     */
   3144    GLboolean NeedsFinishRenderTexture;
   3145    GLubyte NumSamples;
   3146    GLenum InternalFormat; /**< The user-specified format */
   3147    GLenum _BaseFormat;    /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
   3148                                GL_STENCIL_INDEX. */
   3149    mesa_format Format;      /**< The actual renderbuffer memory format */
   3150    /**
   3151     * Pointer to the texture image if this renderbuffer wraps a texture,
   3152     * otherwise NULL.
   3153     *
   3154     * Note that the reference on the gl_texture_object containing this
   3155     * TexImage is held by the gl_renderbuffer_attachment.
   3156     */
   3157    struct gl_texture_image *TexImage;
   3158 
   3159    /** Delete this renderbuffer */
   3160    void (*Delete)(struct gl_context *ctx, struct gl_renderbuffer *rb);
   3161 
   3162    /** Allocate new storage for this renderbuffer */
   3163    GLboolean (*AllocStorage)(struct gl_context *ctx,
   3164                              struct gl_renderbuffer *rb,
   3165                              GLenum internalFormat,
   3166                              GLuint width, GLuint height);
   3167 };
   3168 
   3169 
   3170 /**
   3171  * A renderbuffer attachment points to either a texture object (and specifies
   3172  * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer.
   3173  */
   3174 struct gl_renderbuffer_attachment
   3175 {
   3176    GLenum Type;  /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */
   3177    GLboolean Complete;
   3178 
   3179    /**
   3180     * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the
   3181     * application supplied renderbuffer object.
   3182     */
   3183    struct gl_renderbuffer *Renderbuffer;
   3184 
   3185    /**
   3186     * If \c Type is \c GL_TEXTURE, this stores a pointer to the application
   3187     * supplied texture object.
   3188     */
   3189    struct gl_texture_object *Texture;
   3190    GLuint TextureLevel; /**< Attached mipmap level. */
   3191    GLuint CubeMapFace;  /**< 0 .. 5, for cube map textures. */
   3192    GLuint Zoffset;      /**< Slice for 3D textures,  or layer for both 1D
   3193                          * and 2D array textures */
   3194    GLboolean Layered;
   3195 };
   3196 
   3197 
   3198 /**
   3199  * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc).
   3200  * In C++ terms, think of this as a base class from which device drivers
   3201  * will make derived classes.
   3202  */
   3203 struct gl_framebuffer
   3204 {
   3205    mtx_t Mutex;  /**< for thread safety */
   3206    /**
   3207     * If zero, this is a window system framebuffer.  If non-zero, this
   3208     * is a FBO framebuffer; note that for some devices (i.e. those with
   3209     * a natural pixel coordinate system for FBOs that differs from the
   3210     * OpenGL/Mesa coordinate system), this means that the viewport,
   3211     * polygon face orientation, and polygon stipple will have to be inverted.
   3212     */
   3213    GLuint Name;
   3214    GLint RefCount;
   3215 
   3216    GLchar *Label;       /**< GL_KHR_debug */
   3217 
   3218    GLboolean DeletePending;
   3219 
   3220    /**
   3221     * The framebuffer's visual. Immutable if this is a window system buffer.
   3222     * Computed from attachments if user-made FBO.
   3223     */
   3224    struct gl_config Visual;
   3225 
   3226    /**
   3227     * Size of frame buffer in pixels. If there are no attachments, then both
   3228     * of these are 0.
   3229     */
   3230    GLuint Width, Height;
   3231 
   3232    /**
   3233     * In the case that the framebuffer has no attachment (i.e.
   3234     * GL_ARB_framebuffer_no_attachments) then the geometry of
   3235     * the framebuffer is specified by the default values.
   3236     */
   3237    struct {
   3238      GLuint Width, Height, Layers, NumSamples;
   3239      GLboolean FixedSampleLocations;
   3240      /* Derived from NumSamples by the driver so that it can choose a valid
   3241       * value for the hardware.
   3242       */
   3243      GLuint _NumSamples;
   3244    } DefaultGeometry;
   3245 
   3246    /** \name  Drawing bounds (Intersection of buffer size and scissor box)
   3247     * The drawing region is given by [_Xmin, _Xmax) x [_Ymin, _Ymax),
   3248     * (inclusive for _Xmin and _Ymin while exclusive for _Xmax and _Ymax)
   3249     */
   3250    /*@{*/
   3251    GLint _Xmin, _Xmax;
   3252    GLint _Ymin, _Ymax;
   3253    /*@}*/
   3254 
   3255    /** \name  Derived Z buffer stuff */
   3256    /*@{*/
   3257    GLuint _DepthMax;	/**< Max depth buffer value */
   3258    GLfloat _DepthMaxF;	/**< Float max depth buffer value */
   3259    GLfloat _MRD;	/**< minimum resolvable difference in Z values */
   3260    /*@}*/
   3261 
   3262    /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */
   3263    GLenum _Status;
   3264 
   3265    /** Whether one of Attachment has Type != GL_NONE
   3266     * NOTE: the values for Width and Height are set to 0 in case of having
   3267     * no attachments, a backend driver supporting the extension
   3268     * GL_ARB_framebuffer_no_attachments must check for the flag _HasAttachments
   3269     * and if GL_FALSE, must then use the values in DefaultGeometry to initialize
   3270     * its viewport, scissor and so on (in particular _Xmin, _Xmax, _Ymin and
   3271     * _Ymax do NOT take into account _HasAttachments being false). To get the
   3272     * geometry of the framebuffer, the  helper functions
   3273     *   _mesa_geometric_width(),
   3274     *   _mesa_geometric_height(),
   3275     *   _mesa_geometric_samples() and
   3276     *   _mesa_geometric_layers()
   3277     * are available that check _HasAttachments.
   3278     */
   3279    bool _HasAttachments;
   3280 
   3281    GLbitfield _IntegerBuffers;  /**< Which color buffers are integer valued */
   3282 
   3283    /* ARB_color_buffer_float */
   3284    GLboolean _AllColorBuffersFixedPoint; /* no integer, no float */
   3285    GLboolean _HasSNormOrFloatColorBuffer;
   3286 
   3287    /**
   3288     * The maximum number of layers in the framebuffer, or 0 if the framebuffer
   3289     * is not layered.  For cube maps and cube map arrays, each cube face
   3290     * counts as a layer. As the case for Width, Height a backend driver
   3291     * supporting GL_ARB_framebuffer_no_attachments must use DefaultGeometry
   3292     * in the case that _HasAttachments is false
   3293     */
   3294    GLuint MaxNumLayers;
   3295 
   3296    /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */
   3297    struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT];
   3298 
   3299    /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER
   3300     * attribute group and GL_PIXEL attribute group, respectively.
   3301     */
   3302    GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS];
   3303    GLenum ColorReadBuffer;
   3304 
   3305    /** Computed from ColorDraw/ReadBuffer above */
   3306    GLuint _NumColorDrawBuffers;
   3307    GLint _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; /**< BUFFER_x or -1 */
   3308    GLint _ColorReadBufferIndex; /* -1 = None */
   3309    struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS];
   3310    struct gl_renderbuffer *_ColorReadBuffer;
   3311 
   3312    /** Delete this framebuffer */
   3313    void (*Delete)(struct gl_framebuffer *fb);
   3314 };
   3315 
   3316 
   3317 /**
   3318  * Precision info for shader datatypes.  See glGetShaderPrecisionFormat().
   3319  */
   3320 struct gl_precision
   3321 {
   3322    GLushort RangeMin;   /**< min value exponent */
   3323    GLushort RangeMax;   /**< max value exponent */
   3324    GLushort Precision;  /**< number of mantissa bits */
   3325 };
   3326 
   3327 
   3328 /**
   3329  * Limits for vertex, geometry and fragment programs/shaders.
   3330  */
   3331 struct gl_program_constants
   3332 {
   3333    /* logical limits */
   3334    GLuint MaxInstructions;
   3335    GLuint MaxAluInstructions;
   3336    GLuint MaxTexInstructions;
   3337    GLuint MaxTexIndirections;
   3338    GLuint MaxAttribs;
   3339    GLuint MaxTemps;
   3340    GLuint MaxAddressRegs;
   3341    GLuint MaxAddressOffset;  /**< [-MaxAddressOffset, MaxAddressOffset-1] */
   3342    GLuint MaxParameters;
   3343    GLuint MaxLocalParams;
   3344    GLuint MaxEnvParams;
   3345    /* native/hardware limits */
   3346    GLuint MaxNativeInstructions;
   3347    GLuint MaxNativeAluInstructions;
   3348    GLuint MaxNativeTexInstructions;
   3349    GLuint MaxNativeTexIndirections;
   3350    GLuint MaxNativeAttribs;
   3351    GLuint MaxNativeTemps;
   3352    GLuint MaxNativeAddressRegs;
   3353    GLuint MaxNativeParameters;
   3354    /* For shaders */
   3355    GLuint MaxUniformComponents;  /**< Usually == MaxParameters * 4 */
   3356 
   3357    /**
   3358     * \name Per-stage input / output limits
   3359     *
   3360     * Previous to OpenGL 3.2, the intrastage data limits were advertised with
   3361     * a single value: GL_MAX_VARYING_COMPONENTS (GL_MAX_VARYING_VECTORS in
   3362     * ES).  This is stored as \c gl_constants::MaxVarying.
   3363     *
   3364     * Starting with OpenGL 3.2, the limits are advertised with per-stage
   3365     * variables.  Each stage as a certain number of outputs that it can feed
   3366     * to the next stage and a certain number inputs that it can consume from
   3367     * the previous stage.
   3368     *
   3369     * Vertex shader inputs do not participate this in this accounting.
   3370     * These are tracked exclusively by \c gl_program_constants::MaxAttribs.
   3371     *
   3372     * Fragment shader outputs do not participate this in this accounting.
   3373     * These are tracked exclusively by \c gl_constants::MaxDrawBuffers.
   3374     */
   3375    /*@{*/
   3376    GLuint MaxInputComponents;
   3377    GLuint MaxOutputComponents;
   3378    /*@}*/
   3379 
   3380    /* ES 2.0 and GL_ARB_ES2_compatibility */
   3381    struct gl_precision LowFloat, MediumFloat, HighFloat;
   3382    struct gl_precision LowInt, MediumInt, HighInt;
   3383    /* GL_ARB_uniform_buffer_object */
   3384    GLuint MaxUniformBlocks;
   3385    GLuint MaxCombinedUniformComponents;
   3386    GLuint MaxTextureImageUnits;
   3387 
   3388    /* GL_ARB_shader_atomic_counters */
   3389    GLuint MaxAtomicBuffers;
   3390    GLuint MaxAtomicCounters;
   3391 
   3392    /* GL_ARB_shader_image_load_store */
   3393    GLuint MaxImageUniforms;
   3394 
   3395    /* GL_ARB_shader_storage_buffer_object */
   3396    GLuint MaxShaderStorageBlocks;
   3397 };
   3398 
   3399 
   3400 /**
   3401  * Constants which may be overridden by device driver during context creation
   3402  * but are never changed after that.
   3403  */
   3404 struct gl_constants
   3405 {
   3406    GLuint MaxTextureMbytes;      /**< Max memory per image, in MB */
   3407    GLuint MaxTextureLevels;      /**< Max mipmap levels. */
   3408    GLuint Max3DTextureLevels;    /**< Max mipmap levels for 3D textures */
   3409    GLuint MaxCubeTextureLevels;  /**< Max mipmap levels for cube textures */
   3410    GLuint MaxArrayTextureLayers; /**< Max layers in array textures */
   3411    GLuint MaxTextureRectSize;    /**< Max rectangle texture size, in pixes */
   3412    GLuint MaxTextureCoordUnits;
   3413    GLuint MaxCombinedTextureImageUnits;
   3414    GLuint MaxTextureUnits; /**< = MIN(CoordUnits, FragmentProgram.ImageUnits) */
   3415    GLfloat MaxTextureMaxAnisotropy;  /**< GL_EXT_texture_filter_anisotropic */
   3416    GLfloat MaxTextureLodBias;        /**< GL_EXT_texture_lod_bias */
   3417    GLuint MaxTextureBufferSize;      /**< GL_ARB_texture_buffer_object */
   3418 
   3419    GLuint TextureBufferOffsetAlignment; /**< GL_ARB_texture_buffer_range */
   3420 
   3421    GLuint MaxArrayLockSize;
   3422 
   3423    GLint SubPixelBits;
   3424 
   3425    GLfloat MinPointSize, MaxPointSize;	     /**< aliased */
   3426    GLfloat MinPointSizeAA, MaxPointSizeAA;   /**< antialiased */
   3427    GLfloat PointSizeGranularity;
   3428    GLfloat MinLineWidth, MaxLineWidth;       /**< aliased */
   3429    GLfloat MinLineWidthAA, MaxLineWidthAA;   /**< antialiased */
   3430    GLfloat LineWidthGranularity;
   3431 
   3432    GLuint MaxClipPlanes;
   3433    GLuint MaxLights;
   3434    GLfloat MaxShininess;                     /**< GL_NV_light_max_exponent */
   3435    GLfloat MaxSpotExponent;                  /**< GL_NV_light_max_exponent */
   3436 
   3437    GLuint MaxViewportWidth, MaxViewportHeight;
   3438    GLuint MaxViewports;                      /**< GL_ARB_viewport_array */
   3439    GLuint ViewportSubpixelBits;              /**< GL_ARB_viewport_array */
   3440    struct {
   3441       GLfloat Min;
   3442       GLfloat Max;
   3443    } ViewportBounds;                         /**< GL_ARB_viewport_array */
   3444    GLuint MaxWindowRectangles;               /**< GL_EXT_window_rectangles */
   3445 
   3446    struct gl_program_constants Program[MESA_SHADER_STAGES];
   3447    GLuint MaxProgramMatrices;
   3448    GLuint MaxProgramMatrixStackDepth;
   3449 
   3450    struct {
   3451       GLuint SamplesPassed;
   3452       GLuint TimeElapsed;
   3453       GLuint Timestamp;
   3454       GLuint PrimitivesGenerated;
   3455       GLuint PrimitivesWritten;
   3456       GLuint VerticesSubmitted;
   3457       GLuint PrimitivesSubmitted;
   3458       GLuint VsInvocations;
   3459       GLuint TessPatches;
   3460       GLuint TessInvocations;
   3461       GLuint GsInvocations;
   3462       GLuint GsPrimitives;
   3463       GLuint FsInvocations;
   3464       GLuint ComputeInvocations;
   3465       GLuint ClInPrimitives;
   3466       GLuint ClOutPrimitives;
   3467    } QueryCounterBits;
   3468 
   3469    GLuint MaxDrawBuffers;    /**< GL_ARB_draw_buffers */
   3470 
   3471    GLuint MaxColorAttachments;   /**< GL_EXT_framebuffer_object */
   3472    GLuint MaxRenderbufferSize;   /**< GL_EXT_framebuffer_object */
   3473    GLuint MaxSamples;            /**< GL_ARB_framebuffer_object */
   3474 
   3475    /**
   3476     * GL_ARB_framebuffer_no_attachments
   3477     */
   3478    GLuint MaxFramebufferWidth;
   3479    GLuint MaxFramebufferHeight;
   3480    GLuint MaxFramebufferLayers;
   3481    GLuint MaxFramebufferSamples;
   3482 
   3483    /** Number of varying vectors between any two shader stages. */
   3484    GLuint MaxVarying;
   3485 
   3486    /** @{
   3487     * GL_ARB_uniform_buffer_object
   3488     */
   3489    GLuint MaxCombinedUniformBlocks;
   3490    GLuint MaxUniformBufferBindings;
   3491    GLuint MaxUniformBlockSize;
   3492    GLuint UniformBufferOffsetAlignment;
   3493    /** @} */
   3494 
   3495    /** @{
   3496     * GL_ARB_shader_storage_buffer_object
   3497     */
   3498    GLuint MaxCombinedShaderStorageBlocks;
   3499    GLuint MaxShaderStorageBufferBindings;
   3500    GLuint MaxShaderStorageBlockSize;
   3501    GLuint ShaderStorageBufferOffsetAlignment;
   3502    /** @} */
   3503 
   3504    /**
   3505     * GL_ARB_explicit_uniform_location
   3506     */
   3507    GLuint MaxUserAssignableUniformLocations;
   3508 
   3509    /** geometry shader */
   3510    GLuint MaxGeometryOutputVertices;
   3511    GLuint MaxGeometryTotalOutputComponents;
   3512 
   3513    GLuint GLSLVersion;  /**< Desktop GLSL version supported (ex: 120 = 1.20) */
   3514 
   3515    /**
   3516     * Changes default GLSL extension behavior from "error" to "warn".  It's out
   3517     * of spec, but it can make some apps work that otherwise wouldn't.
   3518     */
   3519    GLboolean ForceGLSLExtensionsWarn;
   3520 
   3521    /**
   3522     * If non-zero, forces GLSL shaders to behave as if they began
   3523     * with "#version ForceGLSLVersion".
   3524     */
   3525    GLuint ForceGLSLVersion;
   3526 
   3527    /**
   3528     * Allow GLSL #extension directives in the middle of shaders.
   3529     */
   3530    GLboolean AllowGLSLExtensionDirectiveMidShader;
   3531 
   3532    /**
   3533     * Force uninitialized variables to default to zero.
   3534     */
   3535    GLboolean GLSLZeroInit;
   3536 
   3537    /**
   3538     * Does the driver support real 32-bit integers?  (Otherwise, integers are
   3539     * simulated via floats.)
   3540     */
   3541    GLboolean NativeIntegers;
   3542 
   3543    /**
   3544     * Does VertexID count from zero or from base vertex?
   3545     *
   3546     * \note
   3547     * If desktop GLSL 1.30 or GLSL ES 3.00 are not supported, this field is
   3548     * ignored and need not be set.
   3549     */
   3550    bool VertexID_is_zero_based;
   3551 
   3552    /**
   3553     * If the driver supports real 32-bit integers, what integer value should be
   3554     * used for boolean true in uniform uploads?  (Usually 1 or ~0.)
   3555     */
   3556    GLuint UniformBooleanTrue;
   3557 
   3558    /**
   3559     * Maximum amount of time, measured in nanseconds, that the server can wait.
   3560     */
   3561    GLuint64 MaxServerWaitTimeout;
   3562 
   3563    /** GL_EXT_provoking_vertex */
   3564    GLboolean QuadsFollowProvokingVertexConvention;
   3565 
   3566    /** GL_ARB_viewport_array */
   3567    GLenum LayerAndVPIndexProvokingVertex;
   3568 
   3569    /** OpenGL version 3.0 */
   3570    GLbitfield ContextFlags;  /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */
   3571 
   3572    /** OpenGL version 3.2 */
   3573    GLbitfield ProfileMask;   /**< Mask of CONTEXT_x_PROFILE_BIT */
   3574 
   3575    /** OpenGL version 4.4 */
   3576    GLuint MaxVertexAttribStride;
   3577 
   3578    /** GL_EXT_transform_feedback */
   3579    GLuint MaxTransformFeedbackBuffers;
   3580    GLuint MaxTransformFeedbackSeparateComponents;
   3581    GLuint MaxTransformFeedbackInterleavedComponents;
   3582    GLuint MaxVertexStreams;
   3583 
   3584    /** GL_EXT_gpu_shader4 */
   3585    GLint MinProgramTexelOffset, MaxProgramTexelOffset;
   3586 
   3587    /** GL_ARB_texture_gather */
   3588    GLuint MinProgramTextureGatherOffset;
   3589    GLuint MaxProgramTextureGatherOffset;
   3590    GLuint MaxProgramTextureGatherComponents;
   3591 
   3592    /* GL_ARB_robustness */
   3593    GLenum ResetStrategy;
   3594 
   3595    /* GL_KHR_robustness */
   3596    GLboolean RobustAccess;
   3597 
   3598    /* GL_ARB_blend_func_extended */
   3599    GLuint MaxDualSourceDrawBuffers;
   3600 
   3601    /**
   3602     * Whether the implementation strips out and ignores texture borders.
   3603     *
   3604     * Many GPU hardware implementations don't support rendering with texture
   3605     * borders and mipmapped textures.  (Note: not static border color, but the
   3606     * old 1-pixel border around each edge).  Implementations then have to do
   3607     * slow fallbacks to be correct, or just ignore the border and be fast but
   3608     * wrong.  Setting the flag strips the border off of TexImage calls,
   3609     * providing "fast but wrong" at significantly reduced driver complexity.
   3610     *
   3611     * Texture borders are deprecated in GL 3.0.
   3612     **/
   3613    GLboolean StripTextureBorder;
   3614 
   3615    /**
   3616     * For drivers which can do a better job at eliminating unused uniforms
   3617     * than the GLSL compiler.
   3618     *
   3619     * XXX Remove these as soon as a better solution is available.
   3620     */
   3621    GLboolean GLSLSkipStrictMaxUniformLimitCheck;
   3622 
   3623    /** Whether gl_FragCoord and gl_FrontFacing are system values. */
   3624    bool GLSLFragCoordIsSysVal;
   3625    bool GLSLFrontFacingIsSysVal;
   3626 
   3627    /**
   3628     * Run the minimum amount of GLSL optimizations to be able to link
   3629     * shaders optimally (eliminate dead varyings and uniforms) and just do
   3630     * all the necessary lowering.
   3631     */
   3632    bool GLSLOptimizeConservatively;
   3633 
   3634    /**
   3635     * True if gl_TessLevelInner/Outer[] in the TES should be inputs
   3636     * (otherwise, they're system values).
   3637     */
   3638    bool GLSLTessLevelsAsInputs;
   3639 
   3640    /**
   3641     * Always use the GetTransformFeedbackVertexCount() driver hook, rather
   3642     * than passing the transform feedback object to the drawing function.
   3643     */
   3644    GLboolean AlwaysUseGetTransformFeedbackVertexCount;
   3645 
   3646    /** GL_ARB_map_buffer_alignment */
   3647    GLuint MinMapBufferAlignment;
   3648 
   3649    /**
   3650     * Disable varying packing.  This is out of spec, but potentially useful
   3651     * for older platforms that supports a limited number of texture
   3652     * indirections--on these platforms, unpacking the varyings in the fragment
   3653     * shader increases the number of texture indirections by 1, which might
   3654     * make some shaders not executable at all.
   3655     *
   3656     * Drivers that support transform feedback must set this value to GL_FALSE.
   3657     */
   3658    GLboolean DisableVaryingPacking;
   3659 
   3660    /**
   3661     * Should meaningful names be generated for compiler temporary variables?
   3662     *
   3663     * Generally, it is not useful to have the compiler generate "meaningful"
   3664     * names for temporary variables that it creates.  This can, however, be a
   3665     * useful debugging aid.  In Mesa debug builds or release builds when
   3666     * MESA_GLSL is set at run-time, meaningful names will be generated.
   3667     * Drivers can also force names to be generated by setting this field.
   3668     * For example, the i965 driver may set it when INTEL_DEBUG=vs (to dump
   3669     * vertex shader assembly) is set at run-time.
   3670     */
   3671    bool GenerateTemporaryNames;
   3672 
   3673    /*
   3674     * Maximum value supported for an index in DrawElements and friends.
   3675     *
   3676     * This must be at least (1ull<<24)-1.  The default value is
   3677     * (1ull<<32)-1.
   3678     *
   3679     * \since ES 3.0 or GL_ARB_ES3_compatibility
   3680     * \sa _mesa_init_constants
   3681     */
   3682    GLuint64 MaxElementIndex;
   3683 
   3684    /**
   3685     * Disable interpretation of line continuations (lines ending with a
   3686     * backslash character ('\') in GLSL source.
   3687     */
   3688    GLboolean DisableGLSLLineContinuations;
   3689 
   3690    /** GL_ARB_texture_multisample */
   3691    GLint MaxColorTextureSamples;
   3692    GLint MaxDepthTextureSamples;
   3693    GLint MaxIntegerSamples;
   3694 
   3695    /**
   3696     * GL_EXT_texture_multisample_blit_scaled implementation assumes that
   3697     * samples are laid out in a rectangular grid roughly corresponding to
   3698     * sample locations within a pixel. Below SampleMap{2,4,8}x variables
   3699     * are used to map indices of rectangular grid to sample numbers within
   3700     * a pixel. This mapping of indices to sample numbers must be initialized
   3701     * by the driver for the target hardware. For example, if we have the 8X
   3702     * MSAA sample number layout (sample positions) for XYZ hardware:
   3703     *
   3704     *        sample indices layout          sample number layout
   3705     *            ---------                      ---------
   3706     *            | 0 | 1 |                      | a | b |
   3707     *            ---------                      ---------
   3708     *            | 2 | 3 |                      | c | d |
   3709     *            ---------                      ---------
   3710     *            | 4 | 5 |                      | e | f |
   3711     *            ---------                      ---------
   3712     *            | 6 | 7 |                      | g | h |
   3713     *            ---------                      ---------
   3714     *
   3715     * Where a,b,c,d,e,f,g,h are integers between [0-7].
   3716     *
   3717     * Then, initialize the SampleMap8x variable for XYZ hardware as shown
   3718     * below:
   3719     *    SampleMap8x = {a, b, c, d, e, f, g, h};
   3720     *
   3721     * Follow the logic for sample counts 2-8.
   3722     *
   3723     * For 16x the sample indices layout as a 4x4 grid as follows:
   3724     *
   3725     *            -----------------
   3726     *            | 0 | 1 | 2 | 3 |
   3727     *            -----------------
   3728     *            | 4 | 5 | 6 | 7 |
   3729     *            -----------------
   3730     *            | 8 | 9 |10 |11 |
   3731     *            -----------------
   3732     *            |12 |13 |14 |15 |
   3733     *            -----------------
   3734     */
   3735    uint8_t SampleMap2x[2];
   3736    uint8_t SampleMap4x[4];
   3737    uint8_t SampleMap8x[8];
   3738    uint8_t SampleMap16x[16];
   3739 
   3740    /** GL_ARB_shader_atomic_counters */
   3741    GLuint MaxAtomicBufferBindings;
   3742    GLuint MaxAtomicBufferSize;
   3743    GLuint MaxCombinedAtomicBuffers;
   3744    GLuint MaxCombinedAtomicCounters;
   3745 
   3746    /** GL_ARB_vertex_attrib_binding */
   3747    GLint MaxVertexAttribRelativeOffset;
   3748    GLint MaxVertexAttribBindings;
   3749 
   3750    /* GL_ARB_shader_image_load_store */
   3751    GLuint MaxImageUnits;
   3752    GLuint MaxCombinedShaderOutputResources;
   3753    GLuint MaxImageSamples;
   3754    GLuint MaxCombinedImageUniforms;
   3755 
   3756    /** GL_ARB_compute_shader */
   3757    GLuint MaxComputeWorkGroupCount[3]; /* Array of x, y, z dimensions */
   3758    GLuint MaxComputeWorkGroupSize[3]; /* Array of x, y, z dimensions */
   3759    GLuint MaxComputeWorkGroupInvocations;
   3760    GLuint MaxComputeSharedMemorySize;
   3761 
   3762    /** GL_ARB_compute_variable_group_size */
   3763    GLuint MaxComputeVariableGroupSize[3]; /* Array of x, y, z dimensions */
   3764    GLuint MaxComputeVariableGroupInvocations;
   3765 
   3766    /** GL_ARB_gpu_shader5 */
   3767    GLfloat MinFragmentInterpolationOffset;
   3768    GLfloat MaxFragmentInterpolationOffset;
   3769 
   3770    GLboolean FakeSWMSAA;
   3771 
   3772    /** GL_KHR_context_flush_control */
   3773    GLenum ContextReleaseBehavior;
   3774 
   3775    struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_STAGES];
   3776 
   3777    /** GL_ARB_tessellation_shader */
   3778    GLuint MaxPatchVertices;
   3779    GLuint MaxTessGenLevel;
   3780    GLuint MaxTessPatchComponents;
   3781    GLuint MaxTessControlTotalOutputComponents;
   3782    bool LowerTessLevel; /**< Lower gl_TessLevel* from float[n] to vecn? */
   3783    bool LowerTCSPatchVerticesIn; /**< Lower gl_PatchVerticesIn to a uniform */
   3784    bool LowerTESPatchVerticesIn; /**< Lower gl_PatchVerticesIn to a uniform */
   3785    bool PrimitiveRestartForPatches;
   3786    bool LowerCsDerivedVariables;    /**< Lower gl_GlobalInvocationID and
   3787                                      *   gl_LocalInvocationIndex based on
   3788                                      *   other builtin variables. */
   3789 
   3790    /** GL_OES_primitive_bounding_box */
   3791    bool NoPrimitiveBoundingBoxOutput;
   3792 };
   3793 
   3794 
   3795 /**
   3796  * Enable flag for each OpenGL extension.  Different device drivers will
   3797  * enable different extensions at runtime.
   3798  */
   3799 struct gl_extensions
   3800 {
   3801    GLboolean dummy;  /* don't remove this! */
   3802    GLboolean dummy_true;  /* Set true by _mesa_init_extensions(). */
   3803    GLboolean dummy_false; /* Set false by _mesa_init_extensions(). */
   3804    GLboolean ANGLE_texture_compression_dxt;
   3805    GLboolean ARB_ES2_compatibility;
   3806    GLboolean ARB_ES3_compatibility;
   3807    GLboolean ARB_ES3_1_compatibility;
   3808    GLboolean ARB_ES3_2_compatibility;
   3809    GLboolean ARB_arrays_of_arrays;
   3810    GLboolean ARB_base_instance;
   3811    GLboolean ARB_blend_func_extended;
   3812    GLboolean ARB_buffer_storage;
   3813    GLboolean ARB_clear_texture;
   3814    GLboolean ARB_clip_control;
   3815    GLboolean ARB_color_buffer_float;
   3816    GLboolean ARB_compute_shader;
   3817    GLboolean ARB_compute_variable_group_size;
   3818    GLboolean ARB_conditional_render_inverted;
   3819    GLboolean ARB_conservative_depth;
   3820    GLboolean ARB_copy_image;
   3821    GLboolean ARB_cull_distance;
   3822    GLboolean ARB_depth_buffer_float;
   3823    GLboolean ARB_depth_clamp;
   3824    GLboolean ARB_depth_texture;
   3825    GLboolean ARB_derivative_control;
   3826    GLboolean ARB_draw_buffers_blend;
   3827    GLboolean ARB_draw_elements_base_vertex;
   3828    GLboolean ARB_draw_indirect;
   3829    GLboolean ARB_draw_instanced;
   3830    GLboolean ARB_fragment_coord_conventions;
   3831    GLboolean ARB_fragment_layer_viewport;
   3832    GLboolean ARB_fragment_program;
   3833    GLboolean ARB_fragment_program_shadow;
   3834    GLboolean ARB_fragment_shader;
   3835    GLboolean ARB_framebuffer_no_attachments;
   3836    GLboolean ARB_framebuffer_object;
   3837    GLboolean ARB_enhanced_layouts;
   3838    GLboolean ARB_explicit_attrib_location;
   3839    GLboolean ARB_explicit_uniform_location;
   3840    GLboolean ARB_gpu_shader5;
   3841    GLboolean ARB_gpu_shader_fp64;
   3842    GLboolean ARB_half_float_vertex;
   3843    GLboolean ARB_indirect_parameters;
   3844    GLboolean ARB_instanced_arrays;
   3845    GLboolean ARB_internalformat_query;
   3846    GLboolean ARB_internalformat_query2;
   3847    GLboolean ARB_map_buffer_range;
   3848    GLboolean ARB_occlusion_query;
   3849    GLboolean ARB_occlusion_query2;
   3850    GLboolean ARB_pipeline_statistics_query;
   3851    GLboolean ARB_point_sprite;
   3852    GLboolean ARB_post_depth_coverage;
   3853    GLboolean ARB_query_buffer_object;
   3854    GLboolean ARB_robust_buffer_access_behavior;
   3855    GLboolean ARB_sample_shading;
   3856    GLboolean ARB_seamless_cube_map;
   3857    GLboolean ARB_shader_atomic_counter_ops;
   3858    GLboolean ARB_shader_atomic_counters;
   3859    GLboolean ARB_shader_bit_encoding;
   3860    GLboolean ARB_shader_clock;
   3861    GLboolean ARB_shader_draw_parameters;
   3862    GLboolean ARB_shader_group_vote;
   3863    GLboolean ARB_shader_image_load_store;
   3864    GLboolean ARB_shader_image_size;
   3865    GLboolean ARB_shader_precision;
   3866    GLboolean ARB_shader_stencil_export;
   3867    GLboolean ARB_shader_storage_buffer_object;
   3868    GLboolean ARB_shader_subroutine;
   3869    GLboolean ARB_shader_texture_image_samples;
   3870    GLboolean ARB_shader_texture_lod;
   3871    GLboolean ARB_shader_viewport_layer_array;
   3872    GLboolean ARB_shading_language_packing;
   3873    GLboolean ARB_shading_language_420pack;
   3874    GLboolean ARB_shadow;
   3875    GLboolean ARB_stencil_texturing;
   3876    GLboolean ARB_sync;
   3877    GLboolean ARB_tessellation_shader;
   3878    GLboolean ARB_texture_border_clamp;
   3879    GLboolean ARB_texture_buffer_object;
   3880    GLboolean ARB_texture_buffer_object_rgb32;
   3881    GLboolean ARB_texture_buffer_range;
   3882    GLboolean ARB_texture_compression_bptc;
   3883    GLboolean ARB_texture_compression_rgtc;
   3884    GLboolean ARB_texture_cube_map;
   3885    GLboolean ARB_texture_cube_map_array;
   3886    GLboolean ARB_texture_env_combine;
   3887    GLboolean ARB_texture_env_crossbar;
   3888    GLboolean ARB_texture_env_dot3;
   3889    GLboolean ARB_texture_float;
   3890    GLboolean ARB_texture_gather;
   3891    GLboolean ARB_texture_mirror_clamp_to_edge;
   3892    GLboolean ARB_texture_multisample;
   3893    GLboolean ARB_texture_non_power_of_two;
   3894    GLboolean ARB_texture_stencil8;
   3895    GLboolean ARB_texture_query_levels;
   3896    GLboolean ARB_texture_query_lod;
   3897    GLboolean ARB_texture_rg;
   3898    GLboolean ARB_texture_rgb10_a2ui;
   3899    GLboolean ARB_texture_view;
   3900    GLboolean ARB_timer_query;
   3901    GLboolean ARB_transform_feedback2;
   3902    GLboolean ARB_transform_feedback3;
   3903    GLboolean ARB_transform_feedback_instanced;
   3904    GLboolean ARB_uniform_buffer_object;
   3905    GLboolean ARB_vertex_attrib_64bit;
   3906    GLboolean ARB_vertex_program;
   3907    GLboolean ARB_vertex_shader;
   3908    GLboolean ARB_vertex_type_10f_11f_11f_rev;
   3909    GLboolean ARB_vertex_type_2_10_10_10_rev;
   3910    GLboolean ARB_viewport_array;
   3911    GLboolean EXT_blend_color;
   3912    GLboolean EXT_blend_equation_separate;
   3913    GLboolean EXT_blend_func_separate;
   3914    GLboolean EXT_blend_minmax;
   3915    GLboolean EXT_depth_bounds_test;
   3916    GLboolean EXT_draw_buffers2;
   3917    GLboolean EXT_framebuffer_multisample;
   3918    GLboolean EXT_framebuffer_multisample_blit_scaled;
   3919    GLboolean EXT_framebuffer_sRGB;
   3920    GLboolean EXT_gpu_program_parameters;
   3921    GLboolean EXT_gpu_shader4;
   3922    GLboolean EXT_packed_float;
   3923    GLboolean EXT_pixel_buffer_object;
   3924    GLboolean EXT_point_parameters;
   3925    GLboolean EXT_polygon_offset_clamp;
   3926    GLboolean EXT_provoking_vertex;
   3927    GLboolean EXT_shader_integer_mix;
   3928    GLboolean EXT_shader_samples_identical;
   3929    GLboolean EXT_stencil_two_side;
   3930    GLboolean EXT_texture_array;
   3931    GLboolean EXT_texture_compression_latc;
   3932    GLboolean EXT_texture_compression_s3tc;
   3933    GLboolean EXT_texture_env_dot3;
   3934    GLboolean EXT_texture_filter_anisotropic;
   3935    GLboolean EXT_texture_integer;
   3936    GLboolean EXT_texture_mirror_clamp;
   3937    GLboolean EXT_texture_shared_exponent;
   3938    GLboolean EXT_texture_snorm;
   3939    GLboolean EXT_texture_sRGB;
   3940    GLboolean EXT_texture_sRGB_decode;
   3941    GLboolean EXT_texture_swizzle;
   3942    GLboolean EXT_transform_feedback;
   3943    GLboolean EXT_timer_query;
   3944    GLboolean EXT_vertex_array_bgra;
   3945    GLboolean EXT_window_rectangles;
   3946    GLboolean OES_copy_image;
   3947    GLboolean OES_primitive_bounding_box;
   3948    GLboolean OES_sample_variables;
   3949    GLboolean OES_standard_derivatives;
   3950    GLboolean OES_texture_buffer;
   3951    GLboolean OES_texture_cube_map_array;
   3952    GLboolean OES_viewport_array;
   3953    /* vendor extensions */
   3954    GLboolean AMD_performance_monitor;
   3955    GLboolean AMD_pinned_memory;
   3956    GLboolean AMD_seamless_cubemap_per_texture;
   3957    GLboolean AMD_vertex_shader_layer;
   3958    GLboolean AMD_vertex_shader_viewport_index;
   3959    GLboolean ANDROID_extension_pack_es31a;
   3960    GLboolean APPLE_object_purgeable;
   3961    GLboolean ATI_meminfo;
   3962    GLboolean ATI_texture_compression_3dc;
   3963    GLboolean ATI_texture_mirror_once;
   3964    GLboolean ATI_texture_env_combine3;
   3965    GLboolean ATI_fragment_shader;
   3966    GLboolean ATI_separate_stencil;
   3967    GLboolean GREMEDY_string_marker;
   3968    GLboolean INTEL_conservative_rasterization;
   3969    GLboolean INTEL_performance_query;
   3970    GLboolean KHR_blend_equation_advanced;
   3971    GLboolean KHR_blend_equation_advanced_coherent;
   3972    GLboolean KHR_robustness;
   3973    GLboolean KHR_texture_compression_astc_hdr;
   3974    GLboolean KHR_texture_compression_astc_ldr;
   3975    GLboolean KHR_texture_compression_astc_sliced_3d;
   3976    GLboolean MESA_pack_invert;
   3977    GLboolean MESA_shader_framebuffer_fetch;
   3978    GLboolean MESA_shader_framebuffer_fetch_non_coherent;
   3979    GLboolean MESA_shader_integer_functions;
   3980    GLboolean MESA_ycbcr_texture;
   3981    GLboolean NV_conditional_render;
   3982    GLboolean NV_fog_distance;
   3983    GLboolean NV_point_sprite;
   3984    GLboolean NV_primitive_restart;
   3985    GLboolean NV_texture_barrier;
   3986    GLboolean NV_texture_env_combine4;
   3987    GLboolean NV_texture_rectangle;
   3988    GLboolean NV_vdpau_interop;
   3989    GLboolean NVX_gpu_memory_info;
   3990    GLboolean TDFX_texture_compression_FXT1;
   3991    GLboolean OES_EGL_image;
   3992    GLboolean OES_draw_texture;
   3993    GLboolean OES_depth_texture_cube_map;
   3994    GLboolean OES_EGL_image_external;
   3995    GLboolean OES_texture_float;
   3996    GLboolean OES_texture_float_linear;
   3997    GLboolean OES_texture_half_float;
   3998    GLboolean OES_texture_half_float_linear;
   3999    GLboolean OES_compressed_ETC1_RGB8_texture;
   4000    GLboolean OES_geometry_shader;
   4001    GLboolean OES_texture_compression_astc;
   4002    GLboolean extension_sentinel;
   4003    /** The extension string */
   4004    const GLubyte *String;
   4005    /** Number of supported extensions */
   4006    GLuint Count;
   4007    /**
   4008     * The context version which extension helper functions compare against.
   4009     * By default, the value is equal to ctx->Version. This changes to ~0
   4010     * while meta is in progress.
   4011     */
   4012    GLubyte Version;
   4013 };
   4014 
   4015 
   4016 /**
   4017  * A stack of matrices (projection, modelview, color, texture, etc).
   4018  */
   4019 struct gl_matrix_stack
   4020 {
   4021    GLmatrix *Top;      /**< points into Stack */
   4022    GLmatrix *Stack;    /**< array [MaxDepth] of GLmatrix */
   4023    unsigned StackSize; /**< Number of elements in Stack */
   4024    GLuint Depth;       /**< 0 <= Depth < MaxDepth */
   4025    GLuint MaxDepth;    /**< size of Stack[] array */
   4026    GLuint DirtyFlag;   /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */
   4027 };
   4028 
   4029 
   4030 /**
   4031  * \name Bits for image transfer operations
   4032  * \sa __struct gl_contextRec::ImageTransferState.
   4033  */
   4034 /*@{*/
   4035 #define IMAGE_SCALE_BIAS_BIT                      0x1
   4036 #define IMAGE_SHIFT_OFFSET_BIT                    0x2
   4037 #define IMAGE_MAP_COLOR_BIT                       0x4
   4038 #define IMAGE_CLAMP_BIT                           0x800
   4039 
   4040 
   4041 /** Pixel Transfer ops */
   4042 #define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT |			\
   4043 		    IMAGE_SHIFT_OFFSET_BIT |			\
   4044 		    IMAGE_MAP_COLOR_BIT)
   4045 
   4046 /**
   4047  * \name Bits to indicate what state has changed.
   4048  */
   4049 /*@{*/
   4050 #define _NEW_MODELVIEW         (1u << 0)   /**< gl_context::ModelView */
   4051 #define _NEW_PROJECTION        (1u << 1)   /**< gl_context::Projection */
   4052 #define _NEW_TEXTURE_MATRIX    (1u << 2)   /**< gl_context::TextureMatrix */
   4053 #define _NEW_COLOR             (1u << 3)   /**< gl_context::Color */
   4054 #define _NEW_DEPTH             (1u << 4)   /**< gl_context::Depth */
   4055 #define _NEW_EVAL              (1u << 5)   /**< gl_context::Eval, EvalMap */
   4056 #define _NEW_FOG               (1u << 6)   /**< gl_context::Fog */
   4057 #define _NEW_HINT              (1u << 7)   /**< gl_context::Hint */
   4058 #define _NEW_LIGHT             (1u << 8)   /**< gl_context::Light */
   4059 #define _NEW_LINE              (1u << 9)   /**< gl_context::Line */
   4060 #define _NEW_PIXEL             (1u << 10)  /**< gl_context::Pixel */
   4061 #define _NEW_POINT             (1u << 11)  /**< gl_context::Point */
   4062 #define _NEW_POLYGON           (1u << 12)  /**< gl_context::Polygon */
   4063 #define _NEW_POLYGONSTIPPLE    (1u << 13)  /**< gl_context::PolygonStipple */
   4064 #define _NEW_SCISSOR           (1u << 14)  /**< gl_context::Scissor */
   4065 #define _NEW_STENCIL           (1u << 15)  /**< gl_context::Stencil */
   4066 #define _NEW_TEXTURE           (1u << 16)  /**< gl_context::Texture */
   4067 #define _NEW_TRANSFORM         (1u << 17)  /**< gl_context::Transform */
   4068 #define _NEW_VIEWPORT          (1u << 18)  /**< gl_context::Viewport */
   4069 /* gap, re-use for core Mesa state only; use ctx->DriverFlags otherwise */
   4070 #define _NEW_ARRAY             (1u << 20)  /**< gl_context::Array */
   4071 #define _NEW_RENDERMODE        (1u << 21)  /**< gl_context::RenderMode, etc */
   4072 #define _NEW_BUFFERS           (1u << 22)  /**< gl_context::Visual, DrawBuffer, */
   4073 #define _NEW_CURRENT_ATTRIB    (1u << 23)  /**< gl_context::Current */
   4074 #define _NEW_MULTISAMPLE       (1u << 24)  /**< gl_context::Multisample */
   4075 #define _NEW_TRACK_MATRIX      (1u << 25)  /**< gl_context::VertexProgram */
   4076 #define _NEW_PROGRAM           (1u << 26)  /**< New program/shader state */
   4077 #define _NEW_PROGRAM_CONSTANTS (1u << 27)
   4078 #define _NEW_BUFFER_OBJECT     (1u << 28)
   4079 #define _NEW_FRAG_CLAMP        (1u << 29)
   4080 /* gap, re-use for core Mesa state only; use ctx->DriverFlags otherwise */
   4081 #define _NEW_VARYING_VP_INPUTS (1u << 31) /**< gl_context::varying_vp_inputs */
   4082 #define _NEW_ALL ~0
   4083 /*@}*/
   4084 
   4085 
   4086 /**
   4087  * Composite state flags
   4088  */
   4089 /*@{*/
   4090 #define _MESA_NEW_NEED_EYE_COORDS         (_NEW_LIGHT |		\
   4091                                            _NEW_TEXTURE |	\
   4092                                            _NEW_POINT |		\
   4093                                            _NEW_PROGRAM |	\
   4094                                            _NEW_MODELVIEW)
   4095 
   4096 #define _MESA_NEW_SEPARATE_SPECULAR        (_NEW_LIGHT | \
   4097                                             _NEW_FOG | \
   4098                                             _NEW_PROGRAM)
   4099 
   4100 
   4101 /*@}*/
   4102 
   4103 
   4104 
   4105 
   4106 /* This has to be included here. */
   4107 #include "dd.h"
   4108 
   4109 
   4110 /**
   4111  * Display list flags.
   4112  * Strictly this is a tnl-private concept, but it doesn't seem
   4113  * worthwhile adding a tnl private structure just to hold this one bit
   4114  * of information:
   4115  */
   4116 #define DLIST_DANGLING_REFS     0x1
   4117 
   4118 
   4119 /** Opaque declaration of display list payload data type */
   4120 union gl_dlist_node;
   4121 
   4122 
   4123 /**
   4124  * Provide a location where information about a display list can be
   4125  * collected.  Could be extended with driverPrivate structures,
   4126  * etc. in the future.
   4127  */
   4128 struct gl_display_list
   4129 {
   4130    GLuint Name;
   4131    GLchar *Label;     /**< GL_KHR_debug */
   4132    GLbitfield Flags;  /**< DLIST_x flags */
   4133    /** The dlist commands are in a linked list of nodes */
   4134    union gl_dlist_node *Head;
   4135 };
   4136 
   4137 
   4138 /**
   4139  * State used during display list compilation and execution.
   4140  */
   4141 struct gl_dlist_state
   4142 {
   4143    GLuint CallDepth;		/**< Current recursion calling depth */
   4144 
   4145    struct gl_display_list *CurrentList; /**< List currently being compiled */
   4146    union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */
   4147    GLuint CurrentPos;		/**< Index into current block of nodes */
   4148 
   4149    GLvertexformat ListVtxfmt;
   4150 
   4151    GLubyte ActiveAttribSize[VERT_ATTRIB_MAX];
   4152    GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4];
   4153 
   4154    GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX];
   4155    GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4];
   4156 
   4157    struct {
   4158       /* State known to have been set by the currently-compiling display
   4159        * list.  Used to eliminate some redundant state changes.
   4160        */
   4161       GLenum ShadeModel;
   4162    } Current;
   4163 };
   4164 
   4165 /** @{
   4166  *
   4167  * These are a mapping of the GL_ARB_debug_output/GL_KHR_debug enums
   4168  * to small enums suitable for use as an array index.
   4169  */
   4170 
   4171 enum mesa_debug_source {
   4172    MESA_DEBUG_SOURCE_API,
   4173    MESA_DEBUG_SOURCE_WINDOW_SYSTEM,
   4174    MESA_DEBUG_SOURCE_SHADER_COMPILER,
   4175    MESA_DEBUG_SOURCE_THIRD_PARTY,
   4176    MESA_DEBUG_SOURCE_APPLICATION,
   4177    MESA_DEBUG_SOURCE_OTHER,
   4178    MESA_DEBUG_SOURCE_COUNT
   4179 };
   4180 
   4181 enum mesa_debug_type {
   4182    MESA_DEBUG_TYPE_ERROR,
   4183    MESA_DEBUG_TYPE_DEPRECATED,
   4184    MESA_DEBUG_TYPE_UNDEFINED,
   4185    MESA_DEBUG_TYPE_PORTABILITY,
   4186    MESA_DEBUG_TYPE_PERFORMANCE,
   4187    MESA_DEBUG_TYPE_OTHER,
   4188    MESA_DEBUG_TYPE_MARKER,
   4189    MESA_DEBUG_TYPE_PUSH_GROUP,
   4190    MESA_DEBUG_TYPE_POP_GROUP,
   4191    MESA_DEBUG_TYPE_COUNT
   4192 };
   4193 
   4194 enum mesa_debug_severity {
   4195    MESA_DEBUG_SEVERITY_LOW,
   4196    MESA_DEBUG_SEVERITY_MEDIUM,
   4197    MESA_DEBUG_SEVERITY_HIGH,
   4198    MESA_DEBUG_SEVERITY_NOTIFICATION,
   4199    MESA_DEBUG_SEVERITY_COUNT
   4200 };
   4201 
   4202 /** @} */
   4203 
   4204 /**
   4205  * Driver-specific state flags.
   4206  *
   4207  * These are or'd with gl_context::NewDriverState to notify a driver about
   4208  * a state change. The driver sets the flags at context creation and
   4209  * the meaning of the bits set is opaque to core Mesa.
   4210  */
   4211 struct gl_driver_flags
   4212 {
   4213    /** gl_context::Array::_DrawArrays (vertex array state) */
   4214    uint64_t NewArray;
   4215 
   4216    /** gl_context::TransformFeedback::CurrentObject */
   4217    uint64_t NewTransformFeedback;
   4218 
   4219    /** gl_context::TransformFeedback::CurrentObject::shader_program */
   4220    uint64_t NewTransformFeedbackProg;
   4221 
   4222    /** gl_context::RasterDiscard */
   4223    uint64_t NewRasterizerDiscard;
   4224 
   4225    /**
   4226     * gl_context::UniformBufferBindings
   4227     * gl_shader_program::UniformBlocks
   4228     */
   4229    uint64_t NewUniformBuffer;
   4230 
   4231    /**
   4232     * gl_context::ShaderStorageBufferBindings
   4233     * gl_shader_program::ShaderStorageBlocks
   4234     */
   4235    uint64_t NewShaderStorageBuffer;
   4236 
   4237    uint64_t NewTextureBuffer;
   4238 
   4239    /**
   4240     * gl_context::AtomicBufferBindings
   4241     */
   4242    uint64_t NewAtomicBuffer;
   4243 
   4244    /**
   4245     * gl_context::ImageUnits
   4246     */
   4247    uint64_t NewImageUnits;
   4248 
   4249    /**
   4250     * gl_context::TessCtrlProgram::patch_default_*
   4251     */
   4252    uint64_t NewDefaultTessLevels;
   4253 
   4254    /**
   4255     * gl_context::IntelConservativeRasterization
   4256     */
   4257    uint64_t NewIntelConservativeRasterization;
   4258 };
   4259 
   4260 struct gl_uniform_buffer_binding
   4261 {
   4262    struct gl_buffer_object *BufferObject;
   4263    /** Start of uniform block data in the buffer */
   4264    GLintptr Offset;
   4265    /** Size of data allowed to be referenced from the buffer (in bytes) */
   4266    GLsizeiptr Size;
   4267    /**
   4268     * glBindBufferBase() indicates that the Size should be ignored and only
   4269     * limited by the current size of the BufferObject.
   4270     */
   4271    GLboolean AutomaticSize;
   4272 };
   4273 
   4274 struct gl_shader_storage_buffer_binding
   4275 {
   4276    struct gl_buffer_object *BufferObject;
   4277    /** Start of shader storage block data in the buffer */
   4278    GLintptr Offset;
   4279    /** Size of data allowed to be referenced from the buffer (in bytes) */
   4280    GLsizeiptr Size;
   4281    /**
   4282     * glBindBufferBase() indicates that the Size should be ignored and only
   4283     * limited by the current size of the BufferObject.
   4284     */
   4285    GLboolean AutomaticSize;
   4286 };
   4287 
   4288 /**
   4289  * ARB_shader_image_load_store image unit.
   4290  */
   4291 struct gl_image_unit
   4292 {
   4293    /**
   4294     * Texture object bound to this unit.
   4295     */
   4296    struct gl_texture_object *TexObj;
   4297 
   4298    /**
   4299     * Level of the texture object bound to this unit.
   4300     */
   4301    GLuint Level;
   4302 
   4303    /**
   4304     * \c GL_TRUE if the whole level is bound as an array of layers, \c
   4305     * GL_FALSE if only some specific layer of the texture is bound.
   4306     * \sa Layer
   4307     */
   4308    GLboolean Layered;
   4309 
   4310    /**
   4311     * Layer of the texture object bound to this unit as specified by the
   4312     * application.
   4313     */
   4314    GLuint Layer;
   4315 
   4316    /**
   4317     * Layer of the texture object bound to this unit, or zero if the
   4318     * whole level is bound.
   4319     */
   4320    GLuint _Layer;
   4321 
   4322    /**
   4323     * Access allowed to this texture image.  Either \c GL_READ_ONLY,
   4324     * \c GL_WRITE_ONLY or \c GL_READ_WRITE.
   4325     */
   4326    GLenum Access;
   4327 
   4328    /**
   4329     * GL internal format that determines the interpretation of the
   4330     * image memory when shader image operations are performed through
   4331     * this unit.
   4332     */
   4333    GLenum Format;
   4334 
   4335    /**
   4336     * Mesa format corresponding to \c Format.
   4337     */
   4338    mesa_format _ActualFormat;
   4339 
   4340 };
   4341 
   4342 /**
   4343  * Binding point for an atomic counter buffer object.
   4344  */
   4345 struct gl_atomic_buffer_binding
   4346 {
   4347    struct gl_buffer_object *BufferObject;
   4348    GLintptr Offset;
   4349    GLsizeiptr Size;
   4350 };
   4351 
   4352 /**
   4353  * Shader subroutines storage
   4354  */
   4355 struct gl_subroutine_index_binding
   4356 {
   4357    GLuint NumIndex;
   4358    GLuint *IndexPtr;
   4359 };
   4360 
   4361 /**
   4362  * Mesa rendering context.
   4363  *
   4364  * This is the central context data structure for Mesa.  Almost all
   4365  * OpenGL state is contained in this structure.
   4366  * Think of this as a base class from which device drivers will derive
   4367  * sub classes.
   4368  */
   4369 struct gl_context
   4370 {
   4371    /** State possibly shared with other contexts in the address space */
   4372    struct gl_shared_state *Shared;
   4373 
   4374    /** \name API function pointer tables */
   4375    /*@{*/
   4376    gl_api API;
   4377    /**
   4378     * The current dispatch table for non-displaylist-saving execution, either
   4379     * BeginEnd or OutsideBeginEnd
   4380     */
   4381    struct _glapi_table *Exec;
   4382    /**
   4383     * The normal dispatch table for non-displaylist-saving, non-begin/end
   4384     */
   4385    struct _glapi_table *OutsideBeginEnd;
   4386    /** The dispatch table used between glNewList() and glEndList() */
   4387    struct _glapi_table *Save;
   4388    /**
   4389     * The dispatch table used between glBegin() and glEnd() (outside of a
   4390     * display list).  Only valid functions between those two are set, which is
   4391     * mostly just the set in a GLvertexformat struct.
   4392     */
   4393    struct _glapi_table *BeginEnd;
   4394    /**
   4395     * Dispatch table for when a graphics reset has happened.
   4396     */
   4397    struct _glapi_table *ContextLost;
   4398    /**
   4399     * Tracks the current dispatch table out of the 4 above, so that it can be
   4400     * re-set on glXMakeCurrent().
   4401     */
   4402    struct _glapi_table *CurrentDispatch;
   4403    /*@}*/
   4404 
   4405    struct gl_config Visual;
   4406    struct gl_framebuffer *DrawBuffer;	/**< buffer for writing */
   4407    struct gl_framebuffer *ReadBuffer;	/**< buffer for reading */
   4408    struct gl_framebuffer *WinSysDrawBuffer;  /**< set with MakeCurrent */
   4409    struct gl_framebuffer *WinSysReadBuffer;  /**< set with MakeCurrent */
   4410 
   4411    /**
   4412     * Device driver function pointer table
   4413     */
   4414    struct dd_function_table Driver;
   4415 
   4416    /** Core/Driver constants */
   4417    struct gl_constants Const;
   4418 
   4419    /** \name The various 4x4 matrix stacks */
   4420    /*@{*/
   4421    struct gl_matrix_stack ModelviewMatrixStack;
   4422    struct gl_matrix_stack ProjectionMatrixStack;
   4423    struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS];
   4424    struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES];
   4425    struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */
   4426    /*@}*/
   4427 
   4428    /** Combined modelview and projection matrix */
   4429    GLmatrix _ModelProjectMatrix;
   4430 
   4431    /** \name Display lists */
   4432    struct gl_dlist_state ListState;
   4433 
   4434    GLboolean ExecuteFlag;	/**< Execute GL commands? */
   4435    GLboolean CompileFlag;	/**< Compile GL commands into display list? */
   4436 
   4437    /** Extension information */
   4438    struct gl_extensions Extensions;
   4439 
   4440    /** GL version integer, for example 31 for GL 3.1, or 20 for GLES 2.0. */
   4441    GLuint Version;
   4442    char *VersionString;
   4443 
   4444    /** \name State attribute stack (for glPush/PopAttrib) */
   4445    /*@{*/
   4446    GLuint AttribStackDepth;
   4447    struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH];
   4448    /*@}*/
   4449 
   4450    /** \name Renderer attribute groups
   4451     *
   4452     * We define a struct for each attribute group to make pushing and popping
   4453     * attributes easy.  Also it's a good organization.
   4454     */
   4455    /*@{*/
   4456    struct gl_accum_attrib	Accum;		/**< Accum buffer attributes */
   4457    struct gl_colorbuffer_attrib	Color;		/**< Color buffer attributes */
   4458    struct gl_current_attrib	Current;	/**< Current attributes */
   4459    struct gl_depthbuffer_attrib	Depth;		/**< Depth buffer attributes */
   4460    struct gl_eval_attrib	Eval;		/**< Eval attributes */
   4461    struct gl_fog_attrib		Fog;		/**< Fog attributes */
   4462    struct gl_hint_attrib	Hint;		/**< Hint attributes */
   4463    struct gl_light_attrib	Light;		/**< Light attributes */
   4464    struct gl_line_attrib	Line;		/**< Line attributes */
   4465    struct gl_list_attrib	List;		/**< List attributes */
   4466    struct gl_multisample_attrib Multisample;
   4467    struct gl_pixel_attrib	Pixel;		/**< Pixel attributes */
   4468    struct gl_point_attrib	Point;		/**< Point attributes */
   4469    struct gl_polygon_attrib	Polygon;	/**< Polygon attributes */
   4470    GLuint PolygonStipple[32];			/**< Polygon stipple */
   4471    struct gl_scissor_attrib	Scissor;	/**< Scissor attributes */
   4472    struct gl_stencil_attrib	Stencil;	/**< Stencil buffer attributes */
   4473    struct gl_texture_attrib	Texture;	/**< Texture attributes */
   4474    struct gl_transform_attrib	Transform;	/**< Transformation attributes */
   4475    struct gl_viewport_attrib	ViewportArray[MAX_VIEWPORTS];	/**< Viewport attributes */
   4476    /*@}*/
   4477 
   4478    /** \name Client attribute stack */
   4479    /*@{*/
   4480    GLuint ClientAttribStackDepth;
   4481    struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH];
   4482    /*@}*/
   4483 
   4484    /** \name Client attribute groups */
   4485    /*@{*/
   4486    struct gl_array_attrib	Array;	/**< Vertex arrays */
   4487    struct gl_pixelstore_attrib	Pack;	/**< Pixel packing */
   4488    struct gl_pixelstore_attrib	Unpack;	/**< Pixel unpacking */
   4489    struct gl_pixelstore_attrib	DefaultPacking;	/**< Default params */
   4490    /*@}*/
   4491 
   4492    /** \name Other assorted state (not pushed/popped on attribute stack) */
   4493    /*@{*/
   4494    struct gl_pixelmaps          PixelMaps;
   4495 
   4496    struct gl_evaluators EvalMap;   /**< All evaluators */
   4497    struct gl_feedback   Feedback;  /**< Feedback */
   4498    struct gl_selection  Select;    /**< Selection */
   4499 
   4500    struct gl_program_state Program;  /**< general program state */
   4501    struct gl_vertex_program_state VertexProgram;
   4502    struct gl_fragment_program_state FragmentProgram;
   4503    struct gl_geometry_program_state GeometryProgram;
   4504    struct gl_compute_program_state ComputeProgram;
   4505    struct gl_tess_ctrl_program_state TessCtrlProgram;
   4506    struct gl_tess_eval_program_state TessEvalProgram;
   4507    struct gl_ati_fragment_shader_state ATIFragmentShader;
   4508 
   4509    struct gl_pipeline_shader_state Pipeline; /**< GLSL pipeline shader object state */
   4510    struct gl_pipeline_object Shader; /**< GLSL shader object state */
   4511 
   4512    /**
   4513     * Current active shader pipeline state
   4514     *
   4515     * Almost all internal users want ::_Shader instead of ::Shader.  The
   4516     * exceptions are bits of legacy GLSL API that do not know about separate
   4517     * shader objects.
   4518     *
   4519     * If a program is active via \c glUseProgram, this will point to
   4520     * \c ::Shader.
   4521     *
   4522     * If a program pipeline is active via \c glBindProgramPipeline, this will
   4523     * point to \c ::Pipeline.Current.
   4524     *
   4525     * If neither a program nor a program pipeline is active, this will point to
   4526     * \c ::Pipeline.Default.  This ensures that \c ::_Shader will never be
   4527     * \c NULL.
   4528     */
   4529    struct gl_pipeline_object *_Shader;
   4530 
   4531    struct gl_query_state Query;  /**< occlusion, timer queries */
   4532 
   4533    struct gl_transform_feedback_state TransformFeedback;
   4534 
   4535    struct gl_perf_monitor_state PerfMonitor;
   4536 
   4537    struct gl_buffer_object *DrawIndirectBuffer; /** < GL_ARB_draw_indirect */
   4538    struct gl_buffer_object *ParameterBuffer; /** < GL_ARB_indirect_parameters */
   4539    struct gl_buffer_object *DispatchIndirectBuffer; /** < GL_ARB_compute_shader */
   4540 
   4541    struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */
   4542    struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */
   4543 
   4544    struct gl_buffer_object *QueryBuffer; /**< GL_ARB_query_buffer_object */
   4545 
   4546    /**
   4547     * Current GL_ARB_uniform_buffer_object binding referenced by
   4548     * GL_UNIFORM_BUFFER target for glBufferData, glMapBuffer, etc.
   4549     */
   4550    struct gl_buffer_object *UniformBuffer;
   4551 
   4552    /**
   4553     * Current GL_ARB_shader_storage_buffer_object binding referenced by
   4554     * GL_SHADER_STORAGE_BUFFER target for glBufferData, glMapBuffer, etc.
   4555     */
   4556    struct gl_buffer_object *ShaderStorageBuffer;
   4557 
   4558    /**
   4559     * Array of uniform buffers for GL_ARB_uniform_buffer_object and GL 3.1.
   4560     * This is set up using glBindBufferRange() or glBindBufferBase().  They are
   4561     * associated with uniform blocks by glUniformBlockBinding()'s state in the
   4562     * shader program.
   4563     */
   4564    struct gl_uniform_buffer_binding
   4565       UniformBufferBindings[MAX_COMBINED_UNIFORM_BUFFERS];
   4566 
   4567    /**
   4568     * Array of shader storage buffers for ARB_shader_storage_buffer_object
   4569     * and GL 4.3. This is set up using glBindBufferRange() or
   4570     * glBindBufferBase().  They are associated with shader storage blocks by
   4571     * glShaderStorageBlockBinding()'s state in the shader program.
   4572     */
   4573    struct gl_shader_storage_buffer_binding
   4574       ShaderStorageBufferBindings[MAX_COMBINED_SHADER_STORAGE_BUFFERS];
   4575 
   4576    /**
   4577     * Object currently associated with the GL_ATOMIC_COUNTER_BUFFER
   4578     * target.
   4579     */
   4580    struct gl_buffer_object *AtomicBuffer;
   4581 
   4582    /**
   4583     * Object currently associated w/ the GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD
   4584     * target.
   4585     */
   4586    struct gl_buffer_object *ExternalVirtualMemoryBuffer;
   4587 
   4588    /**
   4589     * Array of atomic counter buffer binding points.
   4590     */
   4591    struct gl_atomic_buffer_binding
   4592       AtomicBufferBindings[MAX_COMBINED_ATOMIC_BUFFERS];
   4593 
   4594    /**
   4595     * Array of image units for ARB_shader_image_load_store.
   4596     */
   4597    struct gl_image_unit ImageUnits[MAX_IMAGE_UNITS];
   4598 
   4599    struct gl_subroutine_index_binding SubroutineIndex[MESA_SHADER_STAGES];
   4600    /*@}*/
   4601 
   4602    struct gl_meta_state *Meta;  /**< for "meta" operations */
   4603 
   4604    /* GL_EXT_framebuffer_object */
   4605    struct gl_renderbuffer *CurrentRenderbuffer;
   4606 
   4607    GLenum ErrorValue;        /**< Last error code */
   4608 
   4609    /**
   4610     * Recognize and silence repeated error debug messages in buggy apps.
   4611     */
   4612    const char *ErrorDebugFmtString;
   4613    GLuint ErrorDebugCount;
   4614 
   4615    /* GL_ARB_debug_output/GL_KHR_debug */
   4616    mtx_t DebugMutex;
   4617    struct gl_debug_state *Debug;
   4618 
   4619    GLenum RenderMode;        /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */
   4620    GLbitfield NewState;      /**< bitwise-or of _NEW_* flags */
   4621    uint64_t NewDriverState;  /**< bitwise-or of flags from DriverFlags */
   4622 
   4623    struct gl_driver_flags DriverFlags;
   4624 
   4625    GLboolean ViewportInitialized;  /**< has viewport size been initialized? */
   4626 
   4627    GLbitfield64 varying_vp_inputs;  /**< mask of VERT_BIT_* flags */
   4628 
   4629    /** \name Derived state */
   4630    GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */
   4631    GLfloat _EyeZDir[3];
   4632    GLfloat _ModelViewInvScale;
   4633    GLboolean _NeedEyeCoords;
   4634    GLboolean _ForceEyeCoords;
   4635 
   4636    GLuint TextureStateTimestamp; /**< detect changes to shared state */
   4637 
   4638    struct gl_list_extensions *ListExt; /**< driver dlist extensions */
   4639 
   4640    /** \name For debugging/development only */
   4641    /*@{*/
   4642    GLboolean FirstTimeCurrent;
   4643    /*@}*/
   4644 
   4645    /**
   4646     * False if this context was created without a config. This is needed
   4647     * because the initial state of glDrawBuffers depends on this
   4648     */
   4649    GLboolean HasConfig;
   4650 
   4651    /** software compression/decompression supported or not */
   4652    GLboolean Mesa_DXTn;
   4653 
   4654    GLboolean TextureFormatSupported[MESA_FORMAT_COUNT];
   4655 
   4656    GLboolean RasterDiscard;  /**< GL_RASTERIZER_DISCARD */
   4657    GLboolean IntelConservativeRasterization; /**< GL_INTEL_CONSERVATIVE_RASTERIZATION */
   4658 
   4659    /**
   4660     * \name Hooks for module contexts.
   4661     *
   4662     * These will eventually live in the driver or elsewhere.
   4663     */
   4664    /*@{*/
   4665    void *swrast_context;
   4666    void *swsetup_context;
   4667    void *swtnl_context;
   4668    struct vbo_context *vbo_context;
   4669    struct st_context *st;
   4670    void *aelt_context;
   4671    /*@}*/
   4672 
   4673    /**
   4674     * \name NV_vdpau_interop
   4675     */
   4676    /*@{*/
   4677    const void *vdpDevice;
   4678    const void *vdpGetProcAddress;
   4679    struct set *vdpSurfaces;
   4680    /*@}*/
   4681 
   4682    /**
   4683     * Has this context observed a GPU reset in any context in the share group?
   4684     *
   4685     * Once this field becomes true, it is never reset to false.
   4686     */
   4687    GLboolean ShareGroupReset;
   4688 
   4689    /**
   4690     * \name OES_primitive_bounding_box
   4691     *
   4692     * Stores the arguments to glPrimitiveBoundingBox
   4693     */
   4694    GLfloat PrimitiveBoundingBox[8];
   4695 };
   4696 
   4697 /**
   4698  * Information about memory usage. All sizes are in kilobytes.
   4699  */
   4700 struct gl_memory_info
   4701 {
   4702    unsigned total_device_memory; /**< size of device memory, e.g. VRAM */
   4703    unsigned avail_device_memory; /**< free device memory at the moment */
   4704    unsigned total_staging_memory; /**< size of staging memory, e.g. GART */
   4705    unsigned avail_staging_memory; /**< free staging memory at the moment */
   4706    unsigned device_memory_evicted; /**< size of memory evicted (monotonic counter) */
   4707    unsigned nr_device_memory_evictions; /**< # of evictions (monotonic counter) */
   4708 };
   4709 
   4710 #ifdef DEBUG
   4711 extern int MESA_VERBOSE;
   4712 extern int MESA_DEBUG_FLAGS;
   4713 # define MESA_FUNCTION __func__
   4714 #else
   4715 # define MESA_VERBOSE 0
   4716 # define MESA_DEBUG_FLAGS 0
   4717 # define MESA_FUNCTION "a function"
   4718 #endif
   4719 
   4720 
   4721 /** The MESA_VERBOSE var is a bitmask of these flags */
   4722 enum _verbose
   4723 {
   4724    VERBOSE_VARRAY		= 0x0001,
   4725    VERBOSE_TEXTURE		= 0x0002,
   4726    VERBOSE_MATERIAL		= 0x0004,
   4727    VERBOSE_PIPELINE		= 0x0008,
   4728    VERBOSE_DRIVER		= 0x0010,
   4729    VERBOSE_STATE		= 0x0020,
   4730    VERBOSE_API			= 0x0040,
   4731    VERBOSE_DISPLAY_LIST		= 0x0100,
   4732    VERBOSE_LIGHTING		= 0x0200,
   4733    VERBOSE_PRIMS		= 0x0400,
   4734    VERBOSE_VERTS		= 0x0800,
   4735    VERBOSE_DISASSEM		= 0x1000,
   4736    VERBOSE_DRAW                 = 0x2000,
   4737    VERBOSE_SWAPBUFFERS          = 0x4000
   4738 };
   4739 
   4740 
   4741 /** The MESA_DEBUG_FLAGS var is a bitmask of these flags */
   4742 enum _debug
   4743 {
   4744    DEBUG_SILENT                 = (1 << 0),
   4745    DEBUG_ALWAYS_FLUSH		= (1 << 1),
   4746    DEBUG_INCOMPLETE_TEXTURE     = (1 << 2),
   4747    DEBUG_INCOMPLETE_FBO         = (1 << 3),
   4748    DEBUG_CONTEXT                = (1 << 4)
   4749 };
   4750 
   4751 #ifdef __cplusplus
   4752 }
   4753 #endif
   4754 
   4755 #endif /* MTYPES_H */
   4756