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