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