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