1 // GENERATED FILE - DO NOT EDIT. 2 // Generated by gen_features.py using data from gl_features.json. 3 // 4 // Copyright 2022 The ANGLE Project Authors. All rights reserved. 5 // Use of this source code is governed by a BSD-style license that can be 6 // found in the LICENSE file. 7 // 8 // FeaturesGL_autogen.h: angle::Features and workarounds for GL driver bugs and other issues. 9 10 #ifndef ANGLE_PLATFORM_AUTOGEN_FEATURESGL_H_ 11 #define ANGLE_PLATFORM_AUTOGEN_FEATURESGL_H_ 12 13 #include "platform/Feature.h" 14 15 namespace angle 16 { 17 18 struct FeaturesGL : FeatureSetBase 19 { 20 FeaturesGL(); 21 ~FeaturesGL(); 22 23 FeatureInfo avoid1BitAlphaTextureFormats = { 24 "avoid1BitAlphaTextureFormats", 25 FeatureCategory::OpenGLWorkarounds, 26 "Issue with 1-bit alpha framebuffer formats", 27 &members, 28 }; 29 30 FeatureInfo RGBA4IsNotSupportedForColorRendering = { 31 "RGBA4IsNotSupportedForColorRendering", 32 FeatureCategory::OpenGLWorkarounds, 33 "GL_RGBA4 is not color renderable", 34 &members, 35 }; 36 37 FeatureInfo allowETCFormats = { 38 "allowETCFormats", 39 FeatureCategory::OpenGLWorkarounds, 40 "Enable ETC2/EAC on desktop OpenGL", 41 &members, 42 }; 43 44 FeatureInfo allowAstcFormats = { 45 "allowAstcFormats", 46 FeatureCategory::OpenGLWorkarounds, 47 "Enable ASTC on desktop OpenGL", 48 &members, 49 }; 50 51 FeatureInfo clearsWithGapsNeedFlush = { 52 "clearsWithGapsNeedFlush", 53 FeatureCategory::OpenGLWorkarounds, 54 "Clearing an FBO with multiple attachments may need a flush to avoid race conditions", 55 &members, 56 }; 57 58 FeatureInfo doesSRGBClearsOnLinearFramebufferAttachments = { 59 "doesSRGBClearsOnLinearFramebufferAttachments", 60 FeatureCategory::OpenGLWorkarounds, 61 "Issue clearing framebuffers with linear attachments when GL_FRAMEBUFFER_SRGB is enabled", 62 &members, 63 }; 64 65 FeatureInfo doWhileGLSLCausesGPUHang = { 66 "doWhileGLSLCausesGPUHang", 67 FeatureCategory::OpenGLWorkarounds, 68 "Some GLSL constructs involving do-while loops cause GPU hangs", 69 &members, "http://crbug.com/644669" 70 }; 71 72 FeatureInfo vertexIDDoesNotIncludeBaseVertex = { 73 "vertexIDDoesNotIncludeBaseVertex", 74 FeatureCategory::OpenGLWorkarounds, 75 "gl_VertexID in GLSL vertex shader doesn't include base vertex value", 76 &members, 77 }; 78 79 FeatureInfo finishDoesNotCauseQueriesToBeAvailable = { 80 "finishDoesNotCauseQueriesToBeAvailable", 81 FeatureCategory::OpenGLWorkarounds, 82 "glFinish doesn't cause all queries to report available result", 83 &members, 84 }; 85 86 FeatureInfo alwaysCallUseProgramAfterLink = { 87 "alwaysCallUseProgramAfterLink", 88 FeatureCategory::OpenGLWorkarounds, 89 "Always call useProgram after a successful link to avoid a driver bug", 90 &members, "http://crbug.com/110263" 91 }; 92 93 FeatureInfo unpackOverlappingRowsSeparatelyUnpackBuffer = { 94 "unpackOverlappingRowsSeparatelyUnpackBuffer", 95 FeatureCategory::OpenGLWorkarounds, 96 "In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row", 97 &members, 98 }; 99 100 FeatureInfo packOverlappingRowsSeparatelyPackBuffer = { 101 "packOverlappingRowsSeparatelyPackBuffer", 102 FeatureCategory::OpenGLWorkarounds, 103 "In the case of packing to a pixel pack buffer, pack overlapping rows row by row", 104 &members, 105 }; 106 107 FeatureInfo initializeCurrentVertexAttributes = { 108 "initializeCurrentVertexAttributes", 109 FeatureCategory::OpenGLWorkarounds, 110 "During initialization, assign the current vertex attributes to the spec-mandated defaults", 111 &members, 112 }; 113 114 FeatureInfo emulateAbsIntFunction = { 115 "emulateAbsIntFunction", 116 FeatureCategory::OpenGLWorkarounds, 117 "abs(i) where i is an integer returns unexpected result", 118 &members, "http://crbug.com/642227" 119 }; 120 121 FeatureInfo addAndTrueToLoopCondition = { 122 "addAndTrueToLoopCondition", 123 FeatureCategory::OpenGLWorkarounds, 124 "Calculation of loop conditions in for and while loop has bug", 125 &members, 126 }; 127 128 FeatureInfo unpackLastRowSeparatelyForPaddingInclusion = { 129 "unpackLastRowSeparatelyForPaddingInclusion", 130 FeatureCategory::OpenGLWorkarounds, 131 "When uploading textures from an unpack buffer, some drivers count an extra row padding", 132 &members, "http://anglebug.com/1512" 133 }; 134 135 FeatureInfo packLastRowSeparatelyForPaddingInclusion = { 136 "packLastRowSeparatelyForPaddingInclusion", 137 FeatureCategory::OpenGLWorkarounds, 138 "When uploading textures from an pack buffer, some drivers count an extra row padding", 139 &members, "http://anglebug.com/1512" 140 }; 141 142 FeatureInfo emulateIsnanFloat = { 143 "emulateIsnanFloat", 144 FeatureCategory::OpenGLWorkarounds, 145 "Using isnan() on highp float will get wrong answer", 146 &members, "http://crbug.com/650547" 147 }; 148 149 FeatureInfo useUnusedBlocksWithStandardOrSharedLayout = { 150 "useUnusedBlocksWithStandardOrSharedLayout", 151 FeatureCategory::OpenGLWorkarounds, 152 "Unused std140 or shared uniform blocks will be treated as inactive", 153 &members, 154 }; 155 156 FeatureInfo removeInvariantAndCentroidForESSL3 = { 157 "removeInvariantAndCentroidForESSL3", 158 FeatureCategory::OpenGLWorkarounds, 159 "Fix spec difference between GLSL 4.1 or lower and ESSL3", 160 &members, 161 }; 162 163 FeatureInfo rewriteFloatUnaryMinusOperator = { 164 "rewriteFloatUnaryMinusOperator", 165 FeatureCategory::OpenGLWorkarounds, 166 "Using '-<float>' will get wrong answer", 167 &members, "http://crbug.com/308366" 168 }; 169 170 FeatureInfo emulateAtan2Float = { 171 "emulateAtan2Float", 172 FeatureCategory::OpenGLWorkarounds, 173 "atan(y, x) may return a wrong answer", 174 &members, "http://crbug.com/672380" 175 }; 176 177 FeatureInfo reapplyUBOBindingsAfterUsingBinaryProgram = { 178 "reapplyUBOBindingsAfterUsingBinaryProgram", 179 FeatureCategory::OpenGLWorkarounds, 180 "Some drivers forget about UBO bindings when using program binaries", 181 &members, "http://anglebug.com/1637" 182 }; 183 184 FeatureInfo emulateMaxVertexAttribStride = { 185 "emulateMaxVertexAttribStride", 186 FeatureCategory::OpenGLWorkarounds, 187 "Some drivers return 0 when MAX_VERTEX_ATTRIB_STRIED queried", 188 &members, "http://anglebug.com/1936" 189 }; 190 191 FeatureInfo dontInitializeUninitializedLocals = { 192 "dontInitializeUninitializedLocals", 193 FeatureCategory::OpenGLWorkarounds, 194 "Initializing uninitialized locals caused odd behavior in a few WebGL 2 tests", 195 &members, "http://anglebug.com/2046" 196 }; 197 198 FeatureInfo clampPointSize = { 199 "clampPointSize", 200 FeatureCategory::OpenGLWorkarounds, 201 "The point size range reported from the API is inconsistent with the actual behavior", 202 &members, 203 }; 204 205 FeatureInfo dontUseLoopsToInitializeVariables = { 206 "dontUseLoopsToInitializeVariables", 207 FeatureCategory::OpenGLWorkarounds, 208 "For loops used to initialize variables hit native GLSL compiler bugs", 209 &members, "http://crbug.com/809422" 210 }; 211 212 FeatureInfo clampFragDepth = { 213 "clampFragDepth", 214 FeatureCategory::OpenGLWorkarounds, 215 "gl_FragDepth is not clamped correctly when rendering to a floating point depth buffer", 216 &members, 217 }; 218 219 FeatureInfo rewriteRepeatedAssignToSwizzled = { 220 "rewriteRepeatedAssignToSwizzled", 221 FeatureCategory::OpenGLWorkarounds, 222 "Repeated assignment to swizzled values inside a " 223 "GLSL user-defined function have incorrect results", 224 &members, 225 }; 226 227 FeatureInfo preTransformTextureCubeGradDerivatives = { 228 "preTransformTextureCubeGradDerivatives", 229 FeatureCategory::OpenGLWorkarounds, 230 "Apply a vendor-specific transformation to explicit cubemap derivatives", 231 &members, 232 }; 233 234 FeatureInfo disableBlendFuncExtended = { 235 "disableBlendFuncExtended", 236 FeatureCategory::OpenGLWorkarounds, 237 "ARB_blend_func_extended does not pass the tests", 238 &members, "http://anglebug.com/1085" 239 }; 240 241 FeatureInfo unsizedSRGBReadPixelsDoesntTransform = { 242 "unsizedSRGBReadPixelsDoesntTransform", 243 FeatureCategory::OpenGLWorkarounds, 244 "Drivers returning raw sRGB values instead of linearized values when calling glReadPixels " 245 "on unsized sRGB texture formats", 246 &members, "http://crbug.com/550292 http://crbug.com/565179" 247 }; 248 249 FeatureInfo queryCounterBitsGeneratesErrors = { 250 "queryCounterBitsGeneratesErrors", 251 FeatureCategory::OpenGLWorkarounds, 252 "Drivers generate errors when querying the number of bits in timer queries", 253 &members, "http://anglebug.com/3027" 254 }; 255 256 FeatureInfo limitWebglMaxTextureSizeTo4096 = { 257 "limitWebglMaxTextureSizeTo4096", 258 FeatureCategory::OpenGLWorkarounds, 259 "Limit webgl max texture size to 4096 to avoid frequent " 260 "out-of-memory errors", 261 &members, "http://crbug.com/927470" 262 }; 263 264 FeatureInfo limitWebglMaxTextureSizeTo8192 = { 265 "limitWebglMaxTextureSizeTo8192", 266 FeatureCategory::OpenGLWorkarounds, 267 "Limit webgl max texture size to 8192 to avoid frequent " 268 "out-of-memory errors", 269 &members, "http://anglebug.com/8611" 270 }; 271 272 FeatureInfo limitMaxMSAASamplesTo4 = { 273 "limitMaxMSAASamplesTo4", 274 FeatureCategory::OpenGLWorkarounds, 275 "Various rendering bugs have been observed when using higher MSAA counts", 276 &members, "http://crbug.com/797243" 277 }; 278 279 FeatureInfo allowClearForRobustResourceInit = { 280 "allowClearForRobustResourceInit", 281 FeatureCategory::OpenGLWorkarounds, 282 "Using glClear for robust resource initialization is buggy on some drivers and leads to " 283 "texture corruption. Default to data uploads except on MacOS where it is very slow.", 284 &members, "https://crbug.com/848952 http://crbug.com/883276" 285 }; 286 287 FeatureInfo clampArrayAccess = { 288 "clampArrayAccess", 289 FeatureCategory::OpenGLWorkarounds, 290 "Clamp uniform array access to avoid reading invalid memory.", 291 &members, "http://anglebug.com/2978" 292 }; 293 294 FeatureInfo resetTexImage2DBaseLevel = { 295 "resetTexImage2DBaseLevel", 296 FeatureCategory::OpenGLWorkarounds, 297 "Reset texture base level before calling glTexImage2D to " 298 "work around pixel comparison failure.", 299 &members, "https://crbug.com/705865" 300 }; 301 302 FeatureInfo clearToZeroOrOneBroken = { 303 "clearToZeroOrOneBroken", 304 FeatureCategory::OpenGLWorkarounds, 305 "Clears when the clear color is all zeros or ones do not work.", 306 &members, "https://crbug.com/710443" 307 }; 308 309 FeatureInfo limitMax3dArrayTextureSizeTo1024 = { 310 "limitMax3dArrayTextureSizeTo1024", 311 FeatureCategory::OpenGLWorkarounds, 312 "Limit max 3d texture size and max array texture layers to 1024 to avoid system hang", 313 &members, "http://crbug.com/927470" 314 }; 315 316 FeatureInfo adjustSrcDstRegionForBlitFramebuffer = { 317 "adjustSrcDstRegionForBlitFramebuffer", 318 FeatureCategory::OpenGLWorkarounds, 319 "Many platforms have issues with blitFramebuffer when the parameters are large.", 320 &members, "http://crbug.com/830046" 321 }; 322 323 FeatureInfo clipSrcRegionForBlitFramebuffer = { 324 "clipSrcRegionForBlitFramebuffer", 325 FeatureCategory::OpenGLWorkarounds, 326 "Issues with blitFramebuffer when the parameters don't match the framebuffer size.", 327 &members, "http://crbug.com/830046" 328 }; 329 330 FeatureInfo RGBDXT1TexturesSampleZeroAlpha = { 331 "RGBDXT1TexturesSampleZeroAlpha", 332 FeatureCategory::OpenGLWorkarounds, 333 "Sampling BLACK texels from RGB DXT1 textures returns transparent black on Mac.", 334 &members, "http://anglebug.com/3729" 335 }; 336 337 FeatureInfo unfoldShortCircuits = { 338 "unfoldShortCircuits", 339 FeatureCategory::OpenGLWorkarounds, 340 "Mac incorrectly executes both sides of && and || expressions when they should " 341 "short-circuit.", 342 &members, "http://anglebug.com/482" 343 }; 344 345 FeatureInfo emulatePrimitiveRestartFixedIndex = { 346 "emulatePrimitiveRestartFixedIndex", 347 FeatureCategory::OpenGLWorkarounds, 348 "When GL_PRIMITIVE_RESTART_FIXED_INDEX is not available, emulate it with " 349 "GL_PRIMITIVE_RESTART and glPrimitiveRestartIndex.", 350 &members, "http://anglebug.com/3997" 351 }; 352 353 FeatureInfo setPrimitiveRestartFixedIndexForDrawArrays = { 354 "setPrimitiveRestartFixedIndexForDrawArrays", 355 FeatureCategory::OpenGLWorkarounds, 356 "Some drivers discard vertex data in DrawArrays calls when the fixed primitive restart " 357 "index is within the number of primitives being drawn.", 358 &members, "http://anglebug.com/3997" 359 }; 360 361 FeatureInfo removeDynamicIndexingOfSwizzledVector = { 362 "removeDynamicIndexingOfSwizzledVector", 363 FeatureCategory::OpenGLWorkarounds, 364 "Dynamic indexing of swizzled l-values doesn't work correctly on various platforms.", 365 &members, "http://crbug.com/709351" 366 }; 367 368 FeatureInfo preAddTexelFetchOffsets = { 369 "preAddTexelFetchOffsets", 370 FeatureCategory::OpenGLWorkarounds, 371 "Intel Mac drivers mistakenly consider the parameter position of nagative vaule as invalid " 372 "even if the sum of position and offset is in range, so we need to add workarounds by " 373 "rewriting texelFetchOffset(sampler, position, lod, offset) into texelFetch(sampler, " 374 "position + offset, lod).", 375 &members, "http://crbug.com/642605" 376 }; 377 378 FeatureInfo regenerateStructNames = { 379 "regenerateStructNames", 380 FeatureCategory::OpenGLWorkarounds, 381 "All Mac drivers do not handle struct scopes correctly. This workaround overwrites a struct" 382 "name with a unique prefix.", 383 &members, "http://crbug.com/403957" 384 }; 385 386 FeatureInfo readPixelsUsingImplementationColorReadFormatForNorm16 = { 387 "readPixelsUsingImplementationColorReadFormatForNorm16", 388 FeatureCategory::OpenGLWorkarounds, 389 "Quite some OpenGL ES drivers don't implement readPixels for RGBA/UNSIGNED_SHORT from " 390 "EXT_texture_norm16 correctly", 391 &members, "http://anglebug.com/4214" 392 }; 393 394 FeatureInfo flushBeforeDeleteTextureIfCopiedTo = { 395 "flushBeforeDeleteTextureIfCopiedTo", 396 FeatureCategory::OpenGLWorkarounds, 397 "Some drivers track CopyTex{Sub}Image texture dependencies incorrectly. Flush" 398 " before glDeleteTextures in this case", 399 &members, "http://anglebug.com/4267" 400 }; 401 402 FeatureInfo rewriteRowMajorMatrices = { 403 "rewriteRowMajorMatrices", 404 FeatureCategory::OpenGLWorkarounds, 405 "Rewrite row major matrices in shaders as column major as a driver bug workaround", 406 &members, "http://anglebug.com/2273" 407 }; 408 409 FeatureInfo disableDrawBuffersIndexed = { 410 "disableDrawBuffersIndexed", 411 FeatureCategory::OpenGLWorkarounds, 412 "Disable OES_draw_buffers_indexed extension.", 413 &members, 414 }; 415 416 FeatureInfo disableSemaphoreFd = { 417 "disableSemaphoreFd", 418 FeatureCategory::OpenGLWorkarounds, 419 "Disable GL_EXT_semaphore_fd extension", 420 &members, "https://crbug.com/1046462" 421 }; 422 423 FeatureInfo disableTimestampQueries = { 424 "disableTimestampQueries", 425 FeatureCategory::OpenGLWorkarounds, 426 "Disable GL_EXT_disjoint_timer_query extension", 427 &members, "https://crbug.com/811661" 428 }; 429 430 FeatureInfo decodeEncodeSRGBForGenerateMipmap = { 431 "decodeEncodeSRGBForGenerateMipmap", 432 FeatureCategory::OpenGLWorkarounds, 433 "Decode and encode before generateMipmap for srgb format textures.", 434 &members, "http://anglebug.com/4646" 435 }; 436 437 FeatureInfo emulateCopyTexImage2D = { 438 "emulateCopyTexImage2D", 439 FeatureCategory::OpenGLWorkarounds, 440 "Replace CopyTexImage2D with TexImage2D + CopyTexSubImage2D.", 441 &members, 442 }; 443 444 FeatureInfo emulateCopyTexImage2DFromRenderbuffers = { 445 "emulateCopyTexImage2DFromRenderbuffers", 446 FeatureCategory::OpenGLWorkarounds, 447 "CopyTexImage2D spuriously returns errors on iOS when copying from renderbuffers.", 448 &members, "https://anglebug.com/4674" 449 }; 450 451 FeatureInfo disableGPUSwitchingSupport = { 452 "disableGPUSwitchingSupport", 453 FeatureCategory::OpenGLWorkarounds, 454 "Disable GPU switching support (use only the low-power GPU) on older MacBook Pros.", 455 &members, "https://crbug.com/1091824" 456 }; 457 458 FeatureInfo disableNativeParallelCompile = { 459 "disableNativeParallelCompile", 460 FeatureCategory::OpenGLWorkarounds, 461 "Do not use native KHR_parallel_shader_compile even when available.", 462 &members, "http://crbug.com/1094869" 463 }; 464 465 FeatureInfo emulatePackSkipRowsAndPackSkipPixels = { 466 "emulatePackSkipRowsAndPackSkipPixels", 467 FeatureCategory::OpenGLWorkarounds, 468 "GL_PACK_SKIP_ROWS and GL_PACK_SKIP_PIXELS are ignored in Apple's OpenGL driver.", 469 &members, "https://anglebug.com/4849" 470 }; 471 472 FeatureInfo clampMscRate = { 473 "clampMscRate", 474 FeatureCategory::OpenGLWorkarounds, 475 "Some drivers return bogus values for GetMscRate, so we clamp it to 30Hz", 476 &members, "https://crbug.com/1042393" 477 }; 478 479 FeatureInfo bindTransformFeedbackBufferBeforeBindBufferRange = { 480 "bindTransformFeedbackBufferBeforeBindBufferRange", 481 FeatureCategory::OpenGLWorkarounds, 482 "Bind transform feedback buffers to the generic binding point before calling " 483 "glBindBufferBase or glBindBufferRange.", 484 &members, "https://anglebug.com/5140" 485 }; 486 487 FeatureInfo disableSyncControlSupport = { 488 "disableSyncControlSupport", 489 FeatureCategory::OpenGLWorkarounds, 490 "Speculative fix for issues on Linux/Wayland where exposing GLX_OML_sync_control renders " 491 "Chrome unusable", 492 &members, "https://crbug.com/1137851" 493 }; 494 495 FeatureInfo keepBufferShadowCopy = { 496 "keepBufferShadowCopy", 497 FeatureCategory::OpenGLWorkarounds, 498 "Maintain a shadow copy of buffer data when the GL API does not permit reading data back.", 499 &members, 500 }; 501 502 FeatureInfo setZeroLevelBeforeGenerateMipmap = { 503 "setZeroLevelBeforeGenerateMipmap", 504 FeatureCategory::OpenGLWorkarounds, 505 "glGenerateMipmap fails if the zero texture level is not set on some Mac drivers.", 506 &members, 507 }; 508 509 FeatureInfo promotePackedFormatsTo8BitPerChannel = { 510 "promotePackedFormatsTo8BitPerChannel", 511 FeatureCategory::OpenGLWorkarounds, 512 "Packed color formats are buggy on Macs with AMD GPUs", 513 &members, "http://anglebug.com/5469" 514 }; 515 516 FeatureInfo initFragmentOutputVariables = { 517 "initFragmentOutputVariables", 518 FeatureCategory::OpenGLWorkarounds, 519 "No init gl_FragColor causes context lost", 520 &members, "http://crbug.com/1171371" 521 }; 522 523 FeatureInfo shiftInstancedArrayDataWithOffset = { 524 "shiftInstancedArrayDataWithOffset", 525 FeatureCategory::OpenGLWorkarounds, 526 "glDrawArraysInstanced is buggy on certain new Mac Intel GPUs", 527 &members, "http://crbug.com/1144207" 528 }; 529 530 FeatureInfo syncVertexArraysToDefault = { 531 "syncVertexArraysToDefault", 532 FeatureCategory::OpenGLWorkarounds, 533 "Only use the default VAO because of missing support or driver bugs", 534 &members, "http://anglebug.com/5577" 535 }; 536 537 FeatureInfo sanitizeAMDGPURendererString = { 538 "sanitizeAMDGPURendererString", 539 FeatureCategory::OpenGLWorkarounds, 540 "Strip precise kernel and DRM version information from amdgpu renderer strings.", 541 &members, "http://crbug.com/1181193" 542 }; 543 544 FeatureInfo unbindFBOBeforeSwitchingContext = { 545 "unbindFBOBeforeSwitchingContext", 546 FeatureCategory::OpenGLWorkarounds, 547 "Imagination GL drivers are buggy with context switching.", 548 &members, "http://crbug.com/1181193" 549 }; 550 551 FeatureInfo flushOnFramebufferChange = { 552 "flushOnFramebufferChange", 553 FeatureCategory::OpenGLWorkarounds, 554 "Switching framebuffers without a flush can lead to " 555 "crashes on Intel 9th Generation GPU Macs.", 556 &members, "http://crbug.com/1181068" 557 }; 558 559 FeatureInfo disableMultisampledRenderToTexture = { 560 "disableMultisampledRenderToTexture", 561 FeatureCategory::OpenGLWorkarounds, 562 "Many drivers have bugs when using GL_EXT_multisampled_render_to_texture", 563 &members, "http://anglebug.com/2894" 564 }; 565 566 FeatureInfo uploadTextureDataInChunks = { 567 "uploadTextureDataInChunks", 568 FeatureCategory::OpenGLWorkarounds, 569 "Upload texture data in <120kb chunks to work around Mac driver hangs and crashes.", 570 &members, "http://crbug.com/1181068" 571 }; 572 573 FeatureInfo emulateImmutableCompressedTexture3D = { 574 "emulateImmutableCompressedTexture3D", 575 FeatureCategory::OpenGLWorkarounds, 576 "Use non-immutable texture allocation to work around a driver bug.", 577 &members, "https://crbug.com/1060012" 578 }; 579 580 FeatureInfo emulateRGB10 = { 581 "emulateRGB10", 582 FeatureCategory::OpenGLWorkarounds, 583 "Emulate RGB10 support using RGB10_A2.", 584 &members, "https://crbug.com/1300575" 585 }; 586 587 FeatureInfo alwaysUnbindFramebufferTexture2D = { 588 "alwaysUnbindFramebufferTexture2D", 589 FeatureCategory::OpenGLWorkarounds, 590 "Force unbind framebufferTexture2D before binding renderbuffer to work around driver bug.", 591 &members, "https://anglebug.com/5536" 592 }; 593 594 FeatureInfo disableTextureClampToBorder = { 595 "disableTextureClampToBorder", 596 FeatureCategory::OpenGLWorkarounds, 597 "Imagination devices generate INVALID_ENUM when setting the texture border color.", 598 &members, "https://anglebug.com/7405" 599 }; 600 601 FeatureInfo passHighpToPackUnormSnormBuiltins = { 602 "passHighpToPackUnormSnormBuiltins", 603 FeatureCategory::OpenGLWorkarounds, 604 "packUnorm4x8 fails on Pixel 4 if it is not passed a highp vec4.", 605 &members, "http://anglebug.com/7527" 606 }; 607 608 FeatureInfo emulateClipDistanceState = { 609 "emulateClipDistanceState", 610 FeatureCategory::OpenGLWorkarounds, 611 "Some drivers ignore GL_CLIP_DISTANCEi_EXT state.", 612 &members, 613 }; 614 615 FeatureInfo emulateClipOrigin = { 616 "emulateClipOrigin", 617 FeatureCategory::OpenGLWorkarounds, 618 "Some drivers incorrectly apply GL_CLIP_ORIGIN_EXT state.", 619 &members, 620 }; 621 622 FeatureInfo bindCompleteFramebufferForTimerQueries = { 623 "bindCompleteFramebufferForTimerQueries", 624 FeatureCategory::OpenGLWorkarounds, 625 "Some drivers require a complete framebuffer when beginQuery for TimeElapsed or" 626 "Timestampis called.", 627 &members, "https://crbug.com/1356053" 628 }; 629 630 FeatureInfo disableBaseInstanceVertex = { 631 "disableBaseInstanceVertex", 632 FeatureCategory::OpenGLWorkarounds, 633 "Some drivers have buggy implementations of glDraw*BaseVertex*.", 634 &members, "http://anglebug.com/8172" 635 }; 636 637 FeatureInfo supportsFragmentShaderInterlockNV = { 638 "supportsFragmentShaderInterlockNV", 639 FeatureCategory::OpenGLFeatures, 640 "Backend GL context supports NV_fragment_shader_interlock extension", 641 &members, "http://anglebug.com/7279" 642 }; 643 644 FeatureInfo supportsFragmentShaderOrderingINTEL = { 645 "supportsFragmentShaderOrderingINTEL", 646 FeatureCategory::OpenGLFeatures, 647 "Backend GL context supports GL_INTEL_fragment_shader_ordering extension", 648 &members, "http://anglebug.com/7279" 649 }; 650 651 FeatureInfo supportsFragmentShaderInterlockARB = { 652 "supportsFragmentShaderInterlockARB", 653 FeatureCategory::OpenGLFeatures, 654 "Backend GL context supports ARB_fragment_shader_interlock extension", 655 &members, "http://anglebug.com/7279" 656 }; 657 658 FeatureInfo supportsShaderFramebufferFetchEXT = { 659 "supportsShaderFramebufferFetchEXT", 660 FeatureCategory::OpenGLFeatures, 661 "Backend GL context supports EXT_shader_framebuffer_fetch extension", 662 &members, "http://anglebug.com/7279" 663 }; 664 665 FeatureInfo supportsShaderFramebufferFetchNonCoherentEXT = { 666 "supportsShaderFramebufferFetchNonCoherentEXT", 667 FeatureCategory::OpenGLFeatures, 668 "Backend GL context supports EXT_shader_framebuffer_fetch_non_coherent extension", 669 &members, "http://anglebug.com/7279" 670 }; 671 672 FeatureInfo supportsShaderPixelLocalStorageEXT = { 673 "supportsShaderPixelLocalStorageEXT", 674 FeatureCategory::OpenGLFeatures, 675 "Backend GL context supports EXT_shader_pixel_local_storage extension", 676 &members, "http://anglebug.com/7279" 677 }; 678 679 FeatureInfo disableClipControl = { 680 "disableClipControl", 681 FeatureCategory::OpenGLFeatures, 682 "Some devices genenerate errors when querying the clip control state", 683 &members, "http://crbug.com/1434317" 684 }; 685 686 FeatureInfo scalarizeVecAndMatConstructorArgs = { 687 "scalarizeVecAndMatConstructorArgs", 688 FeatureCategory::OpenGLWorkarounds, 689 "Rewrite vec/mat constructors to work around driver bugs", 690 &members, "http://crbug.com/1420130" 691 }; 692 693 FeatureInfo ensureNonEmptyBufferIsBoundForDraw = { 694 "ensureNonEmptyBufferIsBoundForDraw", 695 FeatureCategory::OpenGLFeatures, 696 "Apple OpenGL drivers crash when drawing with a zero-sized buffer bound using a non-zero divisor.", 697 &members, "http://crbug.com/1456243" 698 }; 699 700 FeatureInfo explicitFragmentLocations = { 701 "explicitFragmentLocations", 702 FeatureCategory::OpenGLWorkarounds, 703 "Always write explicit location layout qualifiers for fragment outputs.", 704 &members, "https://anglebug.com/8308" 705 }; 706 707 FeatureInfo disableRenderSnorm = { 708 "disableRenderSnorm", 709 FeatureCategory::OpenGLWorkarounds, 710 "Disable EXT_render_snorm extension.", 711 &members, "https://anglebug.com/8315" 712 }; 713 714 FeatureInfo disableTextureMirrorClampToEdge = { 715 "disableTextureMirrorClampToEdge", 716 FeatureCategory::OpenGLWorkarounds, 717 "Disable EXT_texture_mirror_clamp_to_edge extension.", 718 &members, "https://anglebug.com/8319" 719 }; 720 721 FeatureInfo resyncDepthRangeOnClipControl = { 722 "resyncDepthRangeOnClipControl", 723 FeatureCategory::OpenGLWorkarounds, 724 "Resync depth range to apply clip control updates.", 725 &members, "https://anglebug.com/8381" 726 }; 727 728 FeatureInfo corruptProgramBinaryForTesting = { 729 "corruptProgramBinaryForTesting", 730 FeatureCategory::OpenGLWorkarounds, 731 "Corrupt the program binary retrieved from the driver for testing purposes.", 732 &members, "https://anglebug.com/8471" 733 }; 734 735 FeatureInfo useIntermediateTextureForGenerateMipmap = { 736 "useIntermediateTextureForGenerateMipmap", 737 FeatureCategory::OpenGLWorkarounds, 738 "Some drivers lose context when repeatedly generating mipmaps on textures that were used as framebuffers.", 739 &members, "https://crbug.com/40279678" 740 }; 741 742 }; 743 744 inline FeaturesGL::FeaturesGL() = default; 745 inline FeaturesGL::~FeaturesGL() = default; 746 747 } // namespace angle 748 749 #endif // ANGLE_PLATFORM_AUTOGEN_FEATURESGL_H_ 750