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 consts_exts.h 28 * Mesa Constants and GL Extensions data structures. 29 */ 30 31 #ifndef __CONSTS_EXTS_H__ 32 #define __CONSTS_EXTS_H__ 33 34 #include "main/glheader.h" 35 #include "compiler/shader_enums.h" 36 #include "compiler/shader_info.h" 37 38 struct nir_shader_compiler_options; 39 40 /** 41 * Enable flag for each OpenGL extension. Different device drivers will 42 * enable different extensions at runtime. 43 */ 44 struct gl_extensions 45 { 46 GLboolean dummy; /* don't remove this! */ 47 GLboolean dummy_true; /* Set true by _mesa_init_extensions(). */ 48 GLboolean ANGLE_texture_compression_dxt; 49 GLboolean ARB_ES2_compatibility; 50 GLboolean ARB_ES3_compatibility; 51 GLboolean ARB_ES3_1_compatibility; 52 GLboolean ARB_ES3_2_compatibility; 53 GLboolean ARB_arrays_of_arrays; 54 GLboolean ARB_base_instance; 55 GLboolean ARB_bindless_texture; 56 GLboolean ARB_blend_func_extended; 57 GLboolean ARB_buffer_storage; 58 GLboolean ARB_clear_texture; 59 GLboolean ARB_clip_control; 60 GLboolean ARB_color_buffer_float; 61 GLboolean ARB_compatibility; 62 GLboolean ARB_compute_shader; 63 GLboolean ARB_compute_variable_group_size; 64 GLboolean ARB_conditional_render_inverted; 65 GLboolean ARB_conservative_depth; 66 GLboolean ARB_copy_image; 67 GLboolean ARB_cull_distance; 68 GLboolean EXT_color_buffer_half_float; 69 GLboolean ARB_depth_buffer_float; 70 GLboolean ARB_depth_clamp; 71 GLboolean ARB_derivative_control; 72 GLboolean ARB_draw_buffers_blend; 73 GLboolean ARB_draw_elements_base_vertex; 74 GLboolean ARB_draw_indirect; 75 GLboolean ARB_draw_instanced; 76 GLboolean ARB_fragment_coord_conventions; 77 GLboolean ARB_fragment_layer_viewport; 78 GLboolean ARB_fragment_program; 79 GLboolean ARB_fragment_program_shadow; 80 GLboolean ARB_fragment_shader; 81 GLboolean ARB_framebuffer_no_attachments; 82 GLboolean ARB_framebuffer_object; 83 GLboolean ARB_fragment_shader_interlock; 84 GLboolean ARB_enhanced_layouts; 85 GLboolean ARB_explicit_attrib_location; 86 GLboolean ARB_explicit_uniform_location; 87 GLboolean ARB_gl_spirv; 88 GLboolean ARB_gpu_shader5; 89 GLboolean ARB_gpu_shader_fp64; 90 GLboolean ARB_gpu_shader_int64; 91 GLboolean ARB_half_float_vertex; 92 GLboolean ARB_indirect_parameters; 93 GLboolean ARB_instanced_arrays; 94 GLboolean ARB_internalformat_query; 95 GLboolean ARB_internalformat_query2; 96 GLboolean ARB_map_buffer_range; 97 GLboolean ARB_occlusion_query; 98 GLboolean ARB_occlusion_query2; 99 GLboolean ARB_pipeline_statistics_query; 100 GLboolean ARB_point_sprite; 101 GLboolean ARB_polygon_offset_clamp; 102 GLboolean ARB_post_depth_coverage; 103 GLboolean ARB_query_buffer_object; 104 GLboolean ARB_robust_buffer_access_behavior; 105 GLboolean ARB_sample_locations; 106 GLboolean ARB_sample_shading; 107 GLboolean ARB_seamless_cube_map; 108 GLboolean ARB_shader_atomic_counter_ops; 109 GLboolean ARB_shader_atomic_counters; 110 GLboolean ARB_shader_ballot; 111 GLboolean ARB_shader_bit_encoding; 112 GLboolean ARB_shader_clock; 113 GLboolean ARB_shader_draw_parameters; 114 GLboolean ARB_shader_group_vote; 115 GLboolean ARB_shader_image_load_store; 116 GLboolean ARB_shader_image_size; 117 GLboolean ARB_shader_precision; 118 GLboolean ARB_shader_stencil_export; 119 GLboolean ARB_shader_storage_buffer_object; 120 GLboolean ARB_shader_texture_image_samples; 121 GLboolean ARB_shader_texture_lod; 122 GLboolean ARB_shader_viewport_layer_array; 123 GLboolean ARB_shading_language_packing; 124 GLboolean ARB_shading_language_420pack; 125 GLboolean ARB_shadow; 126 GLboolean ARB_sparse_buffer; 127 GLboolean ARB_sparse_texture; 128 GLboolean ARB_sparse_texture2; 129 GLboolean ARB_sparse_texture_clamp; 130 GLboolean ARB_stencil_texturing; 131 GLboolean ARB_spirv_extensions; 132 GLboolean ARB_sync; 133 GLboolean ARB_tessellation_shader; 134 GLboolean ARB_texture_buffer_object; 135 GLboolean ARB_texture_buffer_object_rgb32; 136 GLboolean ARB_texture_buffer_range; 137 GLboolean ARB_texture_compression_bptc; 138 GLboolean ARB_texture_compression_rgtc; 139 GLboolean ARB_texture_cube_map_array; 140 GLboolean ARB_texture_filter_anisotropic; 141 GLboolean ARB_texture_filter_minmax; 142 GLboolean ARB_texture_float; 143 GLboolean ARB_texture_gather; 144 GLboolean ARB_texture_mirror_clamp_to_edge; 145 GLboolean ARB_texture_multisample; 146 GLboolean ARB_texture_non_power_of_two; 147 GLboolean ARB_texture_stencil8; 148 GLboolean ARB_texture_query_levels; 149 GLboolean ARB_texture_query_lod; 150 GLboolean ARB_texture_rg; 151 GLboolean ARB_texture_rgb10_a2ui; 152 GLboolean ARB_texture_view; 153 GLboolean ARB_timer_query; 154 GLboolean ARB_transform_feedback2; 155 GLboolean ARB_transform_feedback3; 156 GLboolean ARB_transform_feedback_instanced; 157 GLboolean ARB_transform_feedback_overflow_query; 158 GLboolean ARB_uniform_buffer_object; 159 GLboolean ARB_vertex_attrib_64bit; 160 GLboolean ARB_vertex_program; 161 GLboolean ARB_vertex_shader; 162 GLboolean ARB_vertex_type_10f_11f_11f_rev; 163 GLboolean ARB_vertex_type_2_10_10_10_rev; 164 GLboolean ARB_viewport_array; 165 GLboolean EXT_blend_equation_separate; 166 GLboolean EXT_demote_to_helper_invocation; 167 GLboolean EXT_depth_bounds_test; 168 GLboolean EXT_disjoint_timer_query; 169 GLboolean EXT_draw_buffers2; 170 GLboolean EXT_EGL_image_storage; 171 GLboolean EXT_float_blend; 172 GLboolean EXT_framebuffer_multisample; 173 GLboolean EXT_framebuffer_multisample_blit_scaled; 174 GLboolean EXT_framebuffer_sRGB; 175 GLboolean EXT_gpu_program_parameters; 176 GLboolean EXT_gpu_shader4; 177 GLboolean EXT_memory_object; 178 GLboolean EXT_memory_object_fd; 179 GLboolean EXT_memory_object_win32; 180 GLboolean EXT_multisampled_render_to_texture; 181 GLboolean EXT_packed_float; 182 GLboolean EXT_pixel_buffer_object; 183 GLboolean EXT_provoking_vertex; 184 GLboolean EXT_render_snorm; 185 GLboolean EXT_semaphore; 186 GLboolean EXT_semaphore_fd; 187 GLboolean EXT_semaphore_win32; 188 GLboolean EXT_shader_image_load_formatted; 189 GLboolean EXT_shader_image_load_store; 190 GLboolean EXT_shader_integer_mix; 191 GLboolean EXT_shader_samples_identical; 192 GLboolean EXT_sRGB; 193 GLboolean EXT_stencil_two_side; 194 GLboolean EXT_texture_array; 195 GLboolean EXT_texture_buffer_object; 196 GLboolean EXT_texture_compression_latc; 197 GLboolean EXT_texture_compression_s3tc; 198 GLboolean EXT_texture_compression_s3tc_srgb; 199 GLboolean EXT_texture_env_dot3; 200 GLboolean EXT_texture_filter_anisotropic; 201 GLboolean EXT_texture_filter_minmax; 202 GLboolean EXT_texture_integer; 203 GLboolean EXT_texture_mirror_clamp; 204 GLboolean EXT_texture_norm16; 205 GLboolean EXT_texture_shadow_lod; 206 GLboolean EXT_texture_shared_exponent; 207 GLboolean EXT_texture_snorm; 208 GLboolean EXT_texture_sRGB; 209 GLboolean EXT_texture_sRGB_R8; 210 GLboolean EXT_texture_sRGB_RG8; 211 GLboolean EXT_texture_sRGB_decode; 212 GLboolean EXT_texture_swizzle; 213 GLboolean EXT_texture_type_2_10_10_10_REV; 214 GLboolean EXT_transform_feedback; 215 GLboolean EXT_timer_query; 216 GLboolean EXT_vertex_array_bgra; 217 GLboolean EXT_window_rectangles; 218 GLboolean OES_copy_image; 219 GLboolean OES_primitive_bounding_box; 220 GLboolean OES_sample_variables; 221 GLboolean OES_standard_derivatives; 222 GLboolean OES_texture_buffer; 223 GLboolean OES_texture_cube_map_array; 224 GLboolean OES_texture_view; 225 GLboolean OES_viewport_array; 226 /* vendor extensions */ 227 GLboolean AMD_compressed_ATC_texture; 228 GLboolean AMD_framebuffer_multisample_advanced; 229 GLboolean AMD_depth_clamp_separate; 230 GLboolean AMD_performance_monitor; 231 GLboolean AMD_pinned_memory; 232 GLboolean AMD_seamless_cubemap_per_texture; 233 GLboolean AMD_vertex_shader_layer; 234 GLboolean AMD_vertex_shader_viewport_index; 235 GLboolean ANDROID_extension_pack_es31a; 236 GLboolean ARM_shader_framebuffer_fetch_depth_stencil; 237 GLboolean ATI_meminfo; 238 GLboolean ATI_texture_compression_3dc; 239 GLboolean ATI_texture_mirror_once; 240 GLboolean ATI_texture_env_combine3; 241 GLboolean ATI_fragment_shader; 242 GLboolean GREMEDY_string_marker; 243 GLboolean INTEL_blackhole_render; 244 GLboolean INTEL_conservative_rasterization; 245 GLboolean INTEL_performance_query; 246 GLboolean INTEL_shader_atomic_float_minmax; 247 GLboolean INTEL_shader_integer_functions2; 248 GLboolean KHR_blend_equation_advanced; 249 GLboolean KHR_blend_equation_advanced_coherent; 250 GLboolean KHR_robustness; 251 GLboolean KHR_texture_compression_astc_hdr; 252 GLboolean KHR_texture_compression_astc_ldr; 253 GLboolean KHR_texture_compression_astc_sliced_3d; 254 GLboolean MESA_framebuffer_flip_y; 255 GLboolean MESA_pack_invert; 256 GLboolean MESA_tile_raster_order; 257 GLboolean EXT_shader_framebuffer_fetch; 258 GLboolean EXT_shader_framebuffer_fetch_non_coherent; 259 GLboolean MESA_shader_integer_functions; 260 GLboolean MESA_window_pos; 261 GLboolean MESA_ycbcr_texture; 262 GLboolean NV_alpha_to_coverage_dither_control; 263 GLboolean NV_compute_shader_derivatives; 264 GLboolean NV_conditional_render; 265 GLboolean NV_copy_depth_to_color; 266 GLboolean NV_copy_image; 267 GLboolean NV_fill_rectangle; 268 GLboolean NV_fog_distance; 269 GLboolean NV_primitive_restart; 270 GLboolean NV_shader_atomic_float; 271 GLboolean NV_shader_atomic_int64; 272 GLboolean NV_texture_barrier; 273 GLboolean NV_texture_env_combine4; 274 GLboolean NV_texture_rectangle; 275 GLboolean NV_vdpau_interop; 276 GLboolean NV_conservative_raster; 277 GLboolean NV_conservative_raster_dilate; 278 GLboolean NV_conservative_raster_pre_snap_triangles; 279 GLboolean NV_conservative_raster_pre_snap; 280 GLboolean NV_viewport_array2; 281 GLboolean NV_viewport_swizzle; 282 GLboolean NVX_gpu_memory_info; 283 GLboolean TDFX_texture_compression_FXT1; 284 GLboolean OES_EGL_image; 285 GLboolean OES_draw_texture; 286 GLboolean OES_depth_texture_cube_map; 287 GLboolean OES_EGL_image_external; 288 GLboolean OES_texture_3D; 289 GLboolean OES_texture_float; 290 GLboolean OES_texture_float_linear; 291 GLboolean OES_texture_half_float; 292 GLboolean OES_texture_half_float_linear; 293 GLboolean OES_compressed_ETC1_RGB8_texture; 294 GLboolean OES_geometry_shader; 295 GLboolean OES_texture_compression_astc; 296 GLboolean extension_sentinel; 297 /** The extension string */ 298 const GLubyte *String; 299 /** Number of supported extensions */ 300 GLuint Count; 301 /** 302 * The context version which extension helper functions compare against. 303 * By default, the value is equal to ctx->Version. This changes to ~0 304 * while meta is in progress. 305 */ 306 GLubyte Version; 307 }; 308 309 /** 310 * Compiler options for a single GLSL shaders type 311 */ 312 struct gl_shader_compiler_options 313 { 314 /** Driver-selectable options: */ 315 GLboolean EmitNoCont; /**< Emit CONT opcode? */ 316 GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ 317 GLboolean LowerCombinedClipCullDistance; /** Lower gl_ClipDistance and 318 * gl_CullDistance together from 319 * float[8] to vec4[2] 320 **/ 321 GLbitfield LowerBuiltinVariablesXfb; /**< Which builtin variables should 322 * be lowered for transform feedback 323 **/ 324 325 /** 326 * If we can lower the precision of variables based on precision 327 * qualifiers 328 */ 329 GLboolean LowerPrecisionFloat16; 330 GLboolean LowerPrecisionInt16; 331 GLboolean LowerPrecisionDerivatives; 332 GLboolean LowerPrecisionFloat16Uniforms; 333 334 /** 335 * This enables lowering of 16b constants. Some drivers may not 336 * to lower constants to 16b (ie. if the hw can do automatic 337 * narrowing on constant load) 338 */ 339 GLboolean LowerPrecisionConstants; 340 341 /** 342 * \name Forms of indirect addressing the driver cannot do. 343 */ 344 /*@{*/ 345 GLboolean EmitNoIndirectInput; /**< No indirect addressing of inputs */ 346 GLboolean EmitNoIndirectOutput; /**< No indirect addressing of outputs */ 347 GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */ 348 GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ 349 /*@}*/ 350 351 GLuint MaxIfDepth; /**< Maximum nested IF blocks */ 352 353 /** 354 * Optimize code for array of structures backends. 355 * 356 * This is a proxy for: 357 * - preferring DP4 instructions (rather than MUL/MAD) for 358 * matrix * vector operations, such as position transformation. 359 */ 360 GLboolean OptimizeForAOS; 361 362 /** Clamp UBO and SSBO block indices so they don't go out-of-bounds. */ 363 GLboolean ClampBlockIndicesToArrayBounds; 364 365 /** (driconf) Force gl_Position to be considered invariant */ 366 GLboolean PositionAlwaysInvariant; 367 368 /** (driconf) Force gl_Position to be considered precise */ 369 GLboolean PositionAlwaysPrecise; 370 371 const struct nir_shader_compiler_options *NirOptions; 372 }; 373 374 /** 375 * Precision info for shader datatypes. See glGetShaderPrecisionFormat(). 376 */ 377 struct gl_precision 378 { 379 GLushort RangeMin; /**< min value exponent */ 380 GLushort RangeMax; /**< max value exponent */ 381 GLushort Precision; /**< number of mantissa bits */ 382 }; 383 384 /** 385 * Limits for vertex, geometry and fragment programs/shaders. 386 */ 387 struct gl_program_constants 388 { 389 /* logical limits */ 390 GLuint MaxInstructions; 391 GLuint MaxAluInstructions; 392 GLuint MaxTexInstructions; 393 GLuint MaxTexIndirections; 394 GLuint MaxAttribs; 395 GLuint MaxTemps; 396 GLuint MaxAddressRegs; 397 GLuint MaxAddressOffset; /**< [-MaxAddressOffset, MaxAddressOffset-1] */ 398 GLuint MaxParameters; 399 GLuint MaxLocalParams; 400 GLuint MaxEnvParams; 401 /* native/hardware limits */ 402 GLuint MaxNativeInstructions; 403 GLuint MaxNativeAluInstructions; 404 GLuint MaxNativeTexInstructions; 405 GLuint MaxNativeTexIndirections; 406 GLuint MaxNativeAttribs; 407 GLuint MaxNativeTemps; 408 GLuint MaxNativeAddressRegs; 409 GLuint MaxNativeParameters; 410 /* For shaders */ 411 GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */ 412 413 /** 414 * \name Per-stage input / output limits 415 * 416 * Previous to OpenGL 3.2, the intrastage data limits were advertised with 417 * a single value: GL_MAX_VARYING_COMPONENTS (GL_MAX_VARYING_VECTORS in 418 * ES). This is stored as \c gl_constants::MaxVarying. 419 * 420 * Starting with OpenGL 3.2, the limits are advertised with per-stage 421 * variables. Each stage as a certain number of outputs that it can feed 422 * to the next stage and a certain number inputs that it can consume from 423 * the previous stage. 424 * 425 * Vertex shader inputs do not participate this in this accounting. 426 * These are tracked exclusively by \c gl_program_constants::MaxAttribs. 427 * 428 * Fragment shader outputs do not participate this in this accounting. 429 * These are tracked exclusively by \c gl_constants::MaxDrawBuffers. 430 */ 431 /*@{*/ 432 GLuint MaxInputComponents; 433 GLuint MaxOutputComponents; 434 /*@}*/ 435 436 /* ES 2.0 and GL_ARB_ES2_compatibility */ 437 struct gl_precision LowFloat, MediumFloat, HighFloat; 438 struct gl_precision LowInt, MediumInt, HighInt; 439 /* GL_ARB_uniform_buffer_object */ 440 GLuint MaxUniformBlocks; 441 uint64_t MaxCombinedUniformComponents; 442 GLuint MaxTextureImageUnits; 443 444 /* GL_ARB_shader_atomic_counters */ 445 GLuint MaxAtomicBuffers; 446 GLuint MaxAtomicCounters; 447 448 /* GL_ARB_shader_image_load_store */ 449 GLuint MaxImageUniforms; 450 451 /* GL_ARB_shader_storage_buffer_object */ 452 GLuint MaxShaderStorageBlocks; 453 }; 454 455 /** 456 * Constants which may be overridden by device driver during context creation 457 * but are never changed after that. 458 */ 459 struct gl_constants 460 { 461 /** 462 * Bitmask of valid primitive types supported by the driver, 463 */ 464 GLbitfield DriverSupportedPrimMask; 465 466 GLuint MaxTextureMbytes; /**< Max memory per image, in MB */ 467 GLuint MaxTextureSize; /**< Max 1D/2D texture size, in pixels*/ 468 GLuint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */ 469 GLuint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */ 470 GLuint MaxArrayTextureLayers; /**< Max layers in array textures */ 471 GLuint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */ 472 GLuint MaxTextureCoordUnits; 473 GLuint MaxCombinedTextureImageUnits; 474 GLuint MaxTextureUnits; /**< = MIN(CoordUnits, FragmentProgram.ImageUnits) */ 475 GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 476 GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ 477 GLuint MaxTextureBufferSize; /**< GL_ARB_texture_buffer_object */ 478 479 GLuint TextureBufferOffsetAlignment; /**< GL_ARB_texture_buffer_range */ 480 481 GLuint MaxArrayLockSize; 482 483 GLint SubPixelBits; 484 485 GLfloat MinPointSize, MaxPointSize; /**< aliased */ 486 GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */ 487 GLfloat PointSizeGranularity; 488 GLfloat MinLineWidth, MaxLineWidth; /**< aliased */ 489 GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */ 490 GLfloat LineWidthGranularity; 491 492 GLuint MaxClipPlanes; 493 GLuint MaxLights; 494 GLfloat MaxShininess; /**< GL_NV_light_max_exponent */ 495 GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */ 496 497 GLuint MaxViewportWidth, MaxViewportHeight; 498 GLuint MaxViewports; /**< GL_ARB_viewport_array */ 499 GLuint ViewportSubpixelBits; /**< GL_ARB_viewport_array */ 500 struct { 501 GLfloat Min; 502 GLfloat Max; 503 } ViewportBounds; /**< GL_ARB_viewport_array */ 504 GLuint MaxWindowRectangles; /**< GL_EXT_window_rectangles */ 505 506 struct gl_program_constants Program[MESA_SHADER_STAGES]; 507 GLuint MaxProgramMatrices; 508 GLuint MaxProgramMatrixStackDepth; 509 510 struct { 511 GLuint SamplesPassed; 512 GLuint TimeElapsed; 513 GLuint Timestamp; 514 GLuint PrimitivesGenerated; 515 GLuint PrimitivesWritten; 516 GLuint VerticesSubmitted; 517 GLuint PrimitivesSubmitted; 518 GLuint VsInvocations; 519 GLuint TessPatches; 520 GLuint TessInvocations; 521 GLuint GsInvocations; 522 GLuint GsPrimitives; 523 GLuint FsInvocations; 524 GLuint ComputeInvocations; 525 GLuint ClInPrimitives; 526 GLuint ClOutPrimitives; 527 } QueryCounterBits; 528 529 GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */ 530 531 GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */ 532 GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ 533 GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ 534 535 /** 536 * GL_ARB_framebuffer_no_attachments 537 */ 538 GLuint MaxFramebufferWidth; 539 GLuint MaxFramebufferHeight; 540 GLuint MaxFramebufferLayers; 541 GLuint MaxFramebufferSamples; 542 543 /** Number of varying vectors between any two shader stages. */ 544 GLuint MaxVarying; 545 546 /** @{ 547 * GL_ARB_uniform_buffer_object 548 */ 549 GLuint MaxCombinedUniformBlocks; 550 GLuint MaxUniformBufferBindings; 551 GLuint MaxUniformBlockSize; 552 GLuint UniformBufferOffsetAlignment; 553 /** @} */ 554 555 /** @{ 556 * GL_ARB_shader_storage_buffer_object 557 */ 558 GLuint MaxCombinedShaderStorageBlocks; 559 GLuint MaxShaderStorageBufferBindings; 560 GLuint MaxShaderStorageBlockSize; 561 GLuint ShaderStorageBufferOffsetAlignment; 562 /** @} */ 563 564 /** 565 * GL_ARB_explicit_uniform_location 566 */ 567 GLuint MaxUserAssignableUniformLocations; 568 569 /** geometry shader */ 570 GLuint MaxGeometryOutputVertices; 571 GLuint MaxGeometryTotalOutputComponents; 572 GLuint MaxGeometryShaderInvocations; 573 574 GLuint GLSLVersion; /**< Desktop GLSL version supported (ex: 120 = 1.20) */ 575 GLuint GLSLVersionCompat; /**< Desktop compat GLSL version supported */ 576 577 /** 578 * Changes default GLSL extension behavior from "error" to "warn". It's out 579 * of spec, but it can make some apps work that otherwise wouldn't. 580 */ 581 GLboolean ForceGLSLExtensionsWarn; 582 583 /** 584 * Force all shaders to behave as if they were declared with the 585 * compatibility token. 586 */ 587 GLboolean ForceCompatShaders; 588 589 /** 590 * If non-zero, forces GLSL shaders to behave as if they began 591 * with "#version ForceGLSLVersion". 592 */ 593 GLuint ForceGLSLVersion; 594 595 /** 596 * Allow GLSL #extension directives in the middle of shaders. 597 */ 598 GLboolean AllowGLSLExtensionDirectiveMidShader; 599 600 /** 601 * Allow a subset of GLSL 1.20 in GLSL 1.10 as needed by SPECviewperf13. 602 */ 603 GLboolean AllowGLSL120SubsetIn110; 604 605 /** 606 * Allow builtins as part of constant expressions. This was not allowed 607 * until GLSL 1.20 this allows it everywhere. 608 */ 609 GLboolean AllowGLSLBuiltinConstantExpression; 610 611 /** 612 * Allow some relaxation of GLSL ES shader restrictions. This encompasses 613 * a number of relaxations to the ES shader rules. 614 */ 615 GLboolean AllowGLSLRelaxedES; 616 617 /** 618 * Allow GLSL built-in variables to be redeclared verbatim 619 */ 620 GLboolean AllowGLSLBuiltinVariableRedeclaration; 621 622 /** 623 * Allow GLSL interpolation qualifier mismatch across shader stages. 624 */ 625 GLboolean AllowGLSLCrossStageInterpolationMismatch; 626 627 /** 628 * Allow creating a higher compat profile (version 3.1+) for apps that 629 * request it. Be careful when adding that driconf option because some 630 * features are unimplemented and might not work correctly. 631 */ 632 GLboolean AllowHigherCompatVersion; 633 634 /** 635 * Allow GLSL shaders with the compatibility version directive 636 * in non-compatibility profiles. (for shader-db) 637 */ 638 GLboolean AllowGLSLCompatShaders; 639 640 /** 641 * Allow extra tokens at end of preprocessor directives. The CTS now tests 642 * to make sure these are not allowed. However, previously drivers would 643 * allow them to exist and just issue a warning so some old applications 644 * depend on this. 645 */ 646 GLboolean AllowExtraPPTokens; 647 648 /** 649 * The spec forbids a shader to "statically write both gl_ClipVertex 650 * and gl_ClipDistance". 651 * This option adds a tolerance for shader that statically writes to 652 * both but at least one of the write can be removed by a dead code 653 * elimination pass. 654 */ 655 GLboolean DoDCEBeforeClipCullAnalysis; 656 657 /** 658 * Force computing the absolute value for sqrt() and inversesqrt() to follow 659 * D3D9 when apps rely on this behaviour. 660 */ 661 GLboolean ForceGLSLAbsSqrt; 662 663 /** 664 * Forces the GLSL compiler to ignore writes to readonly vars rather than 665 * throwing an error. 666 */ 667 GLboolean GLSLIgnoreWriteToReadonlyVar; 668 669 /** 670 * Types of variable to default initialized to zero. Supported values are: 671 * - 0: no zero initialization 672 * - 1: all shader variables and gl_FragColor are initialiazed to 0 673 * - 2: same as 1, but shader out variables are *not* initialized, while 674 * function out variables are now initialized. 675 */ 676 GLchar GLSLZeroInit; 677 678 /** 679 * Force GL names reuse. Needed by SPECviewperf13. 680 */ 681 GLboolean ForceGLNamesReuse; 682 683 /** 684 * Treat integer textures using GL_LINEAR filters as GL_NEAREST. 685 */ 686 GLboolean ForceIntegerTexNearest; 687 688 /** 689 * Does the driver support real 32-bit integers? (Otherwise, integers are 690 * simulated via floats.) 691 */ 692 GLboolean NativeIntegers; 693 694 /** 695 * Does VertexID count from zero or from base vertex? 696 * 697 * \note 698 * If desktop GLSL 1.30 or GLSL ES 3.00 are not supported, this field is 699 * ignored and need not be set. 700 */ 701 bool VertexID_is_zero_based; 702 703 /** 704 * If the driver supports real 32-bit integers, what integer value should be 705 * used for boolean true in uniform uploads? (Usually 1 or ~0.) 706 */ 707 GLuint UniformBooleanTrue; 708 709 /** 710 * Maximum amount of time, measured in nanseconds, that the server can wait. 711 */ 712 GLuint64 MaxServerWaitTimeout; 713 714 /** GL_EXT_provoking_vertex */ 715 GLboolean QuadsFollowProvokingVertexConvention; 716 717 /** GL_ARB_viewport_array */ 718 GLenum16 LayerAndVPIndexProvokingVertex; 719 720 /** OpenGL version 3.0 */ 721 GLbitfield ContextFlags; /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */ 722 723 /** OpenGL version 3.2 */ 724 GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ 725 726 /** OpenGL version 4.4 */ 727 GLuint MaxVertexAttribStride; 728 729 /** GL_EXT_transform_feedback */ 730 GLuint MaxTransformFeedbackBuffers; 731 GLuint MaxTransformFeedbackSeparateComponents; 732 GLuint MaxTransformFeedbackInterleavedComponents; 733 GLuint MaxVertexStreams; 734 735 /** GL_EXT_gpu_shader4 */ 736 GLint MinProgramTexelOffset, MaxProgramTexelOffset; 737 738 /** GL_ARB_texture_gather */ 739 GLuint MinProgramTextureGatherOffset; 740 GLuint MaxProgramTextureGatherOffset; 741 GLuint MaxProgramTextureGatherComponents; 742 743 /* GL_ARB_robustness */ 744 GLenum16 ResetStrategy; 745 746 /* GL_KHR_robustness */ 747 GLboolean RobustAccess; 748 749 /* GL_ARB_blend_func_extended */ 750 GLuint MaxDualSourceDrawBuffers; 751 752 /** 753 * For drivers which can do a better job at eliminating unused uniforms 754 * than the GLSL compiler. 755 * 756 * XXX Remove these as soon as a better solution is available. 757 */ 758 GLboolean GLSLSkipStrictMaxUniformLimitCheck; 759 760 /** 761 * Whether gl_FragCoord, gl_PointCoord and gl_FrontFacing 762 * are system values. 763 **/ 764 bool GLSLFragCoordIsSysVal; 765 bool GLSLPointCoordIsSysVal; 766 bool GLSLFrontFacingIsSysVal; 767 768 /** 769 * Whether to call lower_const_arrays_to_uniforms() during linking. 770 */ 771 bool GLSLLowerConstArrays; 772 773 /** 774 * True if gl_TessLevelInner/Outer[] in the TES should be inputs 775 * (otherwise, they're system values). 776 */ 777 bool GLSLTessLevelsAsInputs; 778 779 /** GL_ARB_map_buffer_alignment */ 780 GLuint MinMapBufferAlignment; 781 782 /** 783 * Disable varying packing. This is out of spec, but potentially useful 784 * for older platforms that supports a limited number of texture 785 * indirections--on these platforms, unpacking the varyings in the fragment 786 * shader increases the number of texture indirections by 1, which might 787 * make some shaders not executable at all. 788 * 789 * Drivers that support transform feedback must set this value to GL_FALSE. 790 */ 791 GLboolean DisableVaryingPacking; 792 793 /** 794 * Disable varying packing if used for transform feedback. This is needed 795 * for some drivers (e.g. Panfrost) where transform feedback requires 796 * unpacked varyings. 797 * 798 * This variable is mutually exlusive with DisableVaryingPacking. 799 */ 800 GLboolean DisableTransformFeedbackPacking; 801 802 /** 803 * Align varyings to POT in a slot 804 * 805 * Drivers that prefer varyings to be aligned to POT must set this value to GL_TRUE 806 */ 807 GLboolean PreferPOTAlignedVaryings; 808 809 810 /** 811 * UBOs and SSBOs can be packed tightly by the OpenGL implementation when 812 * layout is set as shared (the default) or packed. However most Mesa drivers 813 * just use STD140 for these layouts. This flag allows drivers to use STD430 814 * for packed and shared layouts which allows arrays to be packed more 815 * tightly. 816 */ 817 bool UseSTD430AsDefaultPacking; 818 819 /** 820 * Should meaningful names be generated for compiler temporary variables? 821 * 822 * Generally, it is not useful to have the compiler generate "meaningful" 823 * names for temporary variables that it creates. This can, however, be a 824 * useful debugging aid. In Mesa debug builds or release builds when 825 * MESA_GLSL is set at run-time, meaningful names will be generated. 826 * Drivers can also force names to be generated by setting this field. 827 * For example, the i965 driver may set it when INTEL_DEBUG=vs (to dump 828 * vertex shader assembly) is set at run-time. 829 */ 830 bool GenerateTemporaryNames; 831 832 /* 833 * Maximum value supported for an index in DrawElements and friends. 834 * 835 * This must be at least (1ull<<24)-1. The default value is 836 * (1ull<<32)-1. 837 * 838 * \since ES 3.0 or GL_ARB_ES3_compatibility 839 * \sa _mesa_init_constants 840 */ 841 GLuint64 MaxElementIndex; 842 843 /** 844 * Disable interpretation of line continuations (lines ending with a 845 * backslash character ('\') in GLSL source. 846 */ 847 GLboolean DisableGLSLLineContinuations; 848 849 /** GL_ARB_texture_multisample */ 850 GLint MaxColorTextureSamples; 851 GLint MaxDepthTextureSamples; 852 GLint MaxIntegerSamples; 853 854 /** GL_AMD_framebuffer_multisample_advanced */ 855 GLint MaxColorFramebufferSamples; 856 GLint MaxColorFramebufferStorageSamples; 857 GLint MaxDepthStencilFramebufferSamples; 858 859 /* An array of supported MSAA modes allowing different sample 860 * counts per attachment type. 861 */ 862 struct { 863 GLint NumColorSamples; 864 GLint NumColorStorageSamples; 865 GLint NumDepthStencilSamples; 866 } SupportedMultisampleModes[40]; 867 GLint NumSupportedMultisampleModes; 868 869 /** GL_ARB_shader_atomic_counters */ 870 GLuint MaxAtomicBufferBindings; 871 GLuint MaxAtomicBufferSize; 872 GLuint MaxCombinedAtomicBuffers; 873 GLuint MaxCombinedAtomicCounters; 874 875 /** GL_ARB_vertex_attrib_binding */ 876 GLint MaxVertexAttribRelativeOffset; 877 GLint MaxVertexAttribBindings; 878 879 /* GL_ARB_shader_image_load_store */ 880 GLuint MaxImageUnits; 881 GLuint MaxCombinedShaderOutputResources; 882 GLuint MaxImageSamples; 883 GLuint MaxCombinedImageUniforms; 884 885 /** GL_ARB_compute_shader */ 886 GLuint MaxComputeWorkGroupCount[3]; /* Array of x, y, z dimensions */ 887 GLuint MaxComputeWorkGroupSize[3]; /* Array of x, y, z dimensions */ 888 GLuint MaxComputeWorkGroupInvocations; 889 GLuint MaxComputeSharedMemorySize; 890 891 /** GL_ARB_compute_variable_group_size */ 892 GLuint MaxComputeVariableGroupSize[3]; /* Array of x, y, z dimensions */ 893 GLuint MaxComputeVariableGroupInvocations; 894 895 /** GL_ARB_gpu_shader5 */ 896 GLfloat MinFragmentInterpolationOffset; 897 GLfloat MaxFragmentInterpolationOffset; 898 899 GLboolean FakeSWMSAA; 900 901 /** GL_KHR_context_flush_control */ 902 GLenum16 ContextReleaseBehavior; 903 904 struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_STAGES]; 905 906 /** GL_ARB_tessellation_shader */ 907 GLuint MaxPatchVertices; 908 GLuint MaxTessGenLevel; 909 GLuint MaxTessPatchComponents; 910 GLuint MaxTessControlTotalOutputComponents; 911 bool LowerTessLevel; /**< Lower gl_TessLevel* from float[n] to vecn? */ 912 bool PrimitiveRestartForPatches; 913 bool LowerCsDerivedVariables; /**< Lower gl_GlobalInvocationID and 914 * gl_LocalInvocationIndex based on 915 * other builtin variables. */ 916 917 /** GL_OES_primitive_bounding_box */ 918 bool NoPrimitiveBoundingBoxOutput; 919 920 /** GL_ARB_sparse_buffer */ 921 GLuint SparseBufferPageSize; 922 923 /** Used as an input for sha1 generation in the on-disk shader cache */ 924 unsigned char *dri_config_options_sha1; 925 926 /** When drivers are OK with mapped buffers during draw and other calls. */ 927 bool AllowMappedBuffersDuringExecution; 928 929 /** 930 * Whether buffer creation, unsynchronized mapping, unmapping, and 931 * deletion is thread-safe. 932 */ 933 bool BufferCreateMapUnsynchronizedThreadSafe; 934 935 /** Override GL_MAP_UNSYNCHRONIZED_BIT */ 936 bool ForceMapBufferSynchronized; 937 938 /** GL_ARB_get_program_binary */ 939 GLuint NumProgramBinaryFormats; 940 941 /** GL_NV_conservative_raster */ 942 GLuint MaxSubpixelPrecisionBiasBits; 943 944 /** GL_NV_conservative_raster_dilate */ 945 GLfloat ConservativeRasterDilateRange[2]; 946 GLfloat ConservativeRasterDilateGranularity; 947 948 /** Is the drivers uniform storage packed or padded to 16 bytes. */ 949 bool PackedDriverUniformStorage; 950 951 /** Wether or not glBitmap uses red textures rather than alpha */ 952 bool BitmapUsesRed; 953 954 /** Whether the vertex buffer offset is a signed 32-bit integer. */ 955 bool VertexBufferOffsetIsInt32; 956 957 /** Whether out-of-order draw (Begin/End) optimizations are allowed. */ 958 bool AllowDrawOutOfOrder; 959 960 /** Whether to allow the fast path for frequently updated VAOs. */ 961 bool AllowDynamicVAOFastPath; 962 963 /** Whether the driver can support primitive restart with a fixed index. 964 * This is essentially a subset of NV_primitive_restart with enough support 965 * to be able to enable GLES 3.1. Some hardware can support this but not the 966 * full NV extension with arbitrary restart indices. 967 */ 968 bool PrimitiveRestartFixedIndex; 969 970 /** GL_ARB_gl_spirv */ 971 struct spirv_supported_capabilities SpirVCapabilities; 972 973 /** GL_ARB_spirv_extensions */ 974 struct spirv_supported_extensions *SpirVExtensions; 975 976 char *VendorOverride; 977 char *RendererOverride; 978 979 /** Buffer size used to upload vertices from glBegin/glEnd. */ 980 unsigned glBeginEndBufferSize; 981 982 /** Whether the driver doesn't want x/y/width/height clipped based on src size 983 * when doing a copy texture operation (eg: may want out-of-bounds reads that 984 * produce 0 instead of leaving the texture content undefined). 985 */ 986 bool NoClippingOnCopyTex; 987 988 /** 989 * Force glthread to always return GL_FRAMEBUFFER_COMPLETE to prevent 990 * synchronization. Used for apps that call it every frame or multiple times 991 * a frame, but always getting framebuffer completeness. 992 */ 993 bool GLThreadNopCheckFramebufferStatus; 994 995 /** GL_ARB_sparse_texture */ 996 GLuint MaxSparseTextureSize; 997 GLuint MaxSparse3DTextureSize; 998 GLuint MaxSparseArrayTextureLayers; 999 bool SparseTextureFullArrayCubeMipmaps; 1000 1001 /** Use hardware accelerated GL_SELECT */ 1002 bool HardwareAcceleratedSelect; 1003 1004 /** Origin of point coordinates. True if upper left, false if lower left. */ 1005 bool PointCoordOriginUpperLeft; 1006 }; 1007 #endif 1008