tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FeaturesGL_autogen.h (23572B)


      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_FEATURESGL_H_
     11 #define ANGLE_PLATFORM_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 doesSRGBClearsOnLinearFramebufferAttachments = {
     52        "doesSRGBClearsOnLinearFramebufferAttachments",
     53        FeatureCategory::OpenGLWorkarounds,
     54        "Issue clearing framebuffers with linear attachments when GL_FRAMEBUFFER_SRGB is enabled",
     55        &members,
     56    };
     57 
     58    FeatureInfo doWhileGLSLCausesGPUHang = {
     59        "doWhileGLSLCausesGPUHang", FeatureCategory::OpenGLWorkarounds,
     60        "Some GLSL constructs involving do-while loops cause GPU hangs", &members,
     61        "http://crbug.com/644669"};
     62 
     63    FeatureInfo vertexIDDoesNotIncludeBaseVertex = {
     64        "vertexIDDoesNotIncludeBaseVertex",
     65        FeatureCategory::OpenGLWorkarounds,
     66        "gl_VertexID in GLSL vertex shader doesn't include base vertex value",
     67        &members,
     68    };
     69 
     70    FeatureInfo finishDoesNotCauseQueriesToBeAvailable = {
     71        "finishDoesNotCauseQueriesToBeAvailable",
     72        FeatureCategory::OpenGLWorkarounds,
     73        "glFinish doesn't cause all queries to report available result",
     74        &members,
     75    };
     76 
     77    FeatureInfo alwaysCallUseProgramAfterLink = {
     78        "alwaysCallUseProgramAfterLink", FeatureCategory::OpenGLWorkarounds,
     79        "Always call useProgram after a successful link to avoid a driver bug", &members,
     80        "http://crbug.com/110263"};
     81 
     82    FeatureInfo unpackOverlappingRowsSeparatelyUnpackBuffer = {
     83        "unpackOverlappingRowsSeparatelyUnpackBuffer",
     84        FeatureCategory::OpenGLWorkarounds,
     85        "In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row",
     86        &members,
     87    };
     88 
     89    FeatureInfo packOverlappingRowsSeparatelyPackBuffer = {
     90        "packOverlappingRowsSeparatelyPackBuffer",
     91        FeatureCategory::OpenGLWorkarounds,
     92        "In the case of packing to a pixel pack buffer, pack overlapping rows row by row",
     93        &members,
     94    };
     95 
     96    FeatureInfo initializeCurrentVertexAttributes = {
     97        "initializeCurrentVertexAttributes",
     98        FeatureCategory::OpenGLWorkarounds,
     99        "During initialization, assign the current vertex attributes to the spec-mandated defaults",
    100        &members,
    101    };
    102 
    103    FeatureInfo emulateAbsIntFunction = {"emulateAbsIntFunction",
    104                                         FeatureCategory::OpenGLWorkarounds,
    105                                         "abs(i) where i is an integer returns unexpected result",
    106                                         &members, "http://crbug.com/642227"};
    107 
    108    FeatureInfo addAndTrueToLoopCondition = {
    109        "addAndTrueToLoopCondition",
    110        FeatureCategory::OpenGLWorkarounds,
    111        "Calculation of loop conditions in for and while loop has bug",
    112        &members,
    113    };
    114 
    115    FeatureInfo unpackLastRowSeparatelyForPaddingInclusion = {
    116        "unpackLastRowSeparatelyForPaddingInclusion", FeatureCategory::OpenGLWorkarounds,
    117        "When uploading textures from an unpack buffer, some drivers count an extra row padding",
    118        &members, "http://anglebug.com/1512"};
    119 
    120    FeatureInfo packLastRowSeparatelyForPaddingInclusion = {
    121        "packLastRowSeparatelyForPaddingInclusion", FeatureCategory::OpenGLWorkarounds,
    122        "When uploading textures from an pack buffer, some drivers count an extra row padding",
    123        &members, "http://anglebug.com/1512"};
    124 
    125    FeatureInfo emulateIsnanFloat = {"emulateIsnanFloat", FeatureCategory::OpenGLWorkarounds,
    126                                     "Using isnan() on highp float will get wrong answer", &members,
    127                                     "http://crbug.com/650547"};
    128 
    129    FeatureInfo useUnusedBlocksWithStandardOrSharedLayout = {
    130        "useUnusedBlocksWithStandardOrSharedLayout",
    131        FeatureCategory::OpenGLWorkarounds,
    132        "Unused std140 or shared uniform blocks will be treated as inactive",
    133        &members,
    134    };
    135 
    136    FeatureInfo removeInvariantAndCentroidForESSL3 = {
    137        "removeInvariantAndCentroidForESSL3",
    138        FeatureCategory::OpenGLWorkarounds,
    139        "Fix spec difference between GLSL 4.1 or lower and ESSL3",
    140        &members,
    141    };
    142 
    143    FeatureInfo rewriteFloatUnaryMinusOperator = {
    144        "rewriteFloatUnaryMinusOperator", FeatureCategory::OpenGLWorkarounds,
    145        "Using '-<float>' will get wrong answer", &members, "http://crbug.com/308366"};
    146 
    147    FeatureInfo emulateAtan2Float = {"emulateAtan2Float", FeatureCategory::OpenGLWorkarounds,
    148                                     "atan(y, x) may return a wrong answer", &members,
    149                                     "http://crbug.com/672380"};
    150 
    151    FeatureInfo reapplyUBOBindingsAfterUsingBinaryProgram = {
    152        "reapplyUBOBindingsAfterUsingBinaryProgram", FeatureCategory::OpenGLWorkarounds,
    153        "Some drivers forget about UBO bindings when using program binaries", &members,
    154        "http://anglebug.com/1637"};
    155 
    156    FeatureInfo emulateMaxVertexAttribStride = {
    157        "emulateMaxVertexAttribStride", FeatureCategory::OpenGLWorkarounds,
    158        "Some drivers return 0 when MAX_VERTEX_ATTRIB_STRIED queried", &members,
    159        "http://anglebug.com/1936"};
    160 
    161    FeatureInfo dontInitializeUninitializedLocals = {
    162        "dontInitializeUninitializedLocals", FeatureCategory::OpenGLWorkarounds,
    163        "Initializing uninitialized locals caused odd behavior in a few WebGL 2 tests", &members,
    164        "http://anglebug.com/2046"};
    165 
    166    FeatureInfo clampPointSize = {
    167        "clampPointSize",
    168        FeatureCategory::OpenGLWorkarounds,
    169        "The point size range reported from the API is inconsistent with the actual behavior",
    170        &members,
    171    };
    172 
    173    FeatureInfo dontUseLoopsToInitializeVariables = {
    174        "dontUseLoopsToInitializeVariables", FeatureCategory::OpenGLWorkarounds,
    175        "For loops used to initialize variables hit native GLSL compiler bugs", &members,
    176        "http://crbug.com/809422"};
    177 
    178    FeatureInfo clampFragDepth = {
    179        "clampFragDepth",
    180        FeatureCategory::OpenGLWorkarounds,
    181        "gl_FragDepth is not clamped correctly when rendering to a floating point depth buffer",
    182        &members,
    183    };
    184 
    185    FeatureInfo rewriteRepeatedAssignToSwizzled = {
    186        "rewriteRepeatedAssignToSwizzled",
    187        FeatureCategory::OpenGLWorkarounds,
    188        "Repeated assignment to swizzled values inside a "
    189        "GLSL user-defined function have incorrect results",
    190        &members,
    191    };
    192 
    193    FeatureInfo disableBlendFuncExtended = {
    194        "disableBlendFuncExtended", FeatureCategory::OpenGLWorkarounds,
    195        "ARB_blend_func_extended does not pass the tests", &members, "http://anglebug.com/1085"};
    196 
    197    FeatureInfo unsizedSRGBReadPixelsDoesntTransform = {
    198        "unsizedSRGBReadPixelsDoesntTransform", FeatureCategory::OpenGLWorkarounds,
    199        "Drivers returning raw sRGB values instead of linearized values when calling glReadPixels "
    200        "on unsized sRGB texture formats",
    201        &members, "http://crbug.com/550292 http://crbug.com/565179"};
    202 
    203    FeatureInfo queryCounterBitsGeneratesErrors = {
    204        "queryCounterBitsGeneratesErrors", FeatureCategory::OpenGLWorkarounds,
    205        "Drivers generate errors when querying the number of bits in timer queries", &members,
    206        "http://anglebug.com/3027"};
    207 
    208    FeatureInfo dontRelinkProgramsInParallel = {
    209        "dontRelinkProgramsInParallel", FeatureCategory::OpenGLWorkarounds,
    210        "Relinking a program in parallel is buggy", &members, "http://anglebug.com/3045"};
    211 
    212    FeatureInfo disableWorkerContexts = {"disableWorkerContexts",
    213                                         FeatureCategory::OpenGLWorkarounds,
    214                                         "Some tests have been seen to fail using worker contexts",
    215                                         &members, "http://crbug.com/849576"};
    216 
    217    FeatureInfo limitWebglMaxTextureSizeTo4096 = {
    218        "limitWebglMaxTextureSizeTo4096", FeatureCategory::OpenGLWorkarounds,
    219        "Limit webgl max texture size to 4096 to avoid frequent "
    220        "out-of-memory errors",
    221        &members, "http://crbug.com/927470"};
    222 
    223    FeatureInfo limitMaxMSAASamplesTo4 = {
    224        "limitMaxMSAASamplesTo4", FeatureCategory::OpenGLWorkarounds,
    225        "Various rendering bugs have been observed when using higher MSAA counts", &members,
    226        "http://crbug.com/797243"};
    227 
    228    FeatureInfo allowClearForRobustResourceInit = {
    229        "allowClearForRobustResourceInit", FeatureCategory::OpenGLWorkarounds,
    230        "Using glClear for robust resource initialization is buggy on some drivers and leads to "
    231        "texture corruption. Default to data uploads except on MacOS where it is very slow.",
    232        &members, "https://crbug.com/848952 http://crbug.com/883276"};
    233 
    234    FeatureInfo clampArrayAccess = {"clampArrayAccess", FeatureCategory::OpenGLWorkarounds,
    235                                    "Clamp uniform array access to avoid reading invalid memory.",
    236                                    &members, "http://anglebug.com/2978"};
    237 
    238    FeatureInfo resetTexImage2DBaseLevel = {
    239        "resetTexImage2DBaseLevel", FeatureCategory::OpenGLWorkarounds,
    240        "Reset texture base level before calling glTexImage2D to "
    241        "work around pixel comparison failure.",
    242        &members, "https://crbug.com/705865"};
    243 
    244    FeatureInfo clearToZeroOrOneBroken = {
    245        "clearToZeroOrOneBroken", FeatureCategory::OpenGLWorkarounds,
    246        "Clears when the clear color is all zeros or ones do not work.", &members,
    247        "https://crbug.com/710443"};
    248 
    249    FeatureInfo limitMax3dArrayTextureSizeTo1024 = {
    250        "limitMax3dArrayTextureSizeTo1024", FeatureCategory::OpenGLWorkarounds,
    251        "Limit max 3d texture size and max array texture layers to 1024 to avoid system hang",
    252        &members, "http://crbug.com/927470"};
    253 
    254    FeatureInfo adjustSrcDstRegionForBlitFramebuffer = {
    255        "adjustSrcDstRegionForBlitFramebuffer", FeatureCategory::OpenGLWorkarounds,
    256        "Many platforms have issues with blitFramebuffer when the parameters are large.", &members,
    257        "http://crbug.com/830046"};
    258 
    259    FeatureInfo clipSrcRegionForBlitFramebuffer = {
    260        "clipSrcRegionForBlitFramebuffer", FeatureCategory::OpenGLWorkarounds,
    261        "Issues with blitFramebuffer when the parameters don't match the framebuffer size.",
    262        &members, "http://crbug.com/830046"};
    263 
    264    FeatureInfo RGBDXT1TexturesSampleZeroAlpha = {
    265        "RGBDXT1TexturesSampleZeroAlpha", FeatureCategory::OpenGLWorkarounds,
    266        "Sampling BLACK texels from RGB DXT1 textures returns transparent black on Mac.", &members,
    267        "http://anglebug.com/3729"};
    268 
    269    FeatureInfo unfoldShortCircuits = {
    270        "unfoldShortCircuits", FeatureCategory::OpenGLWorkarounds,
    271        "Mac incorrectly executes both sides of && and || expressions when they should "
    272        "short-circuit.",
    273        &members, "http://anglebug.com/482"};
    274 
    275    FeatureInfo emulatePrimitiveRestartFixedIndex = {
    276        "emulatePrimitiveRestartFixedIndex", FeatureCategory::OpenGLWorkarounds,
    277        "When GL_PRIMITIVE_RESTART_FIXED_INDEX is not available, emulate it with "
    278        "GL_PRIMITIVE_RESTART and glPrimitiveRestartIndex.",
    279        &members, "http://anglebug.com/3997"};
    280 
    281    FeatureInfo setPrimitiveRestartFixedIndexForDrawArrays = {
    282        "setPrimitiveRestartFixedIndexForDrawArrays", FeatureCategory::OpenGLWorkarounds,
    283        "Some drivers discard vertex data in DrawArrays calls when the fixed primitive restart "
    284        "index is within the number of primitives being drawn.",
    285        &members, "http://anglebug.com/3997"};
    286 
    287    FeatureInfo removeDynamicIndexingOfSwizzledVector = {
    288        "removeDynamicIndexingOfSwizzledVector", FeatureCategory::OpenGLWorkarounds,
    289        "Dynamic indexing of swizzled l-values doesn't work correctly on various platforms.",
    290        &members, "http://crbug.com/709351"};
    291 
    292    FeatureInfo preAddTexelFetchOffsets = {
    293        "preAddTexelFetchOffsets", FeatureCategory::OpenGLWorkarounds,
    294        "Intel Mac drivers mistakenly consider the parameter position of nagative vaule as invalid "
    295        "even if the sum of position and offset is in range, so we need to add workarounds by "
    296        "rewriting texelFetchOffset(sampler, position, lod, offset) into texelFetch(sampler, "
    297        "position + offset, lod).",
    298        &members, "http://crbug.com/642605"};
    299 
    300    FeatureInfo regenerateStructNames = {
    301        "regenerateStructNames", FeatureCategory::OpenGLWorkarounds,
    302        "All Mac drivers do not handle struct scopes correctly. This workaround overwrites a struct"
    303        "name with a unique prefix.",
    304        &members, "http://crbug.com/403957"};
    305 
    306    FeatureInfo readPixelsUsingImplementationColorReadFormatForNorm16 = {
    307        "readPixelsUsingImplementationColorReadFormatForNorm16", FeatureCategory::OpenGLWorkarounds,
    308        "Quite some OpenGL ES drivers don't implement readPixels for RGBA/UNSIGNED_SHORT from "
    309        "EXT_texture_norm16 correctly",
    310        &members, "http://anglebug.com/4214"};
    311 
    312    FeatureInfo flushBeforeDeleteTextureIfCopiedTo = {
    313        "flushBeforeDeleteTextureIfCopiedTo", FeatureCategory::OpenGLWorkarounds,
    314        "Some drivers track CopyTex{Sub}Image texture dependencies incorrectly. Flush"
    315        " before glDeleteTextures in this case",
    316        &members, "http://anglebug.com/4267"};
    317 
    318    FeatureInfo rewriteRowMajorMatrices = {
    319        "rewriteRowMajorMatrices", FeatureCategory::OpenGLWorkarounds,
    320        "Rewrite row major matrices in shaders as column major as a driver bug workaround",
    321        &members, "http://anglebug.com/2273"};
    322 
    323    FeatureInfo disableDrawBuffersIndexed = {
    324        "disableDrawBuffersIndexed",
    325        FeatureCategory::OpenGLWorkarounds,
    326        "Disable OES_draw_buffers_indexed extension.",
    327        &members,
    328    };
    329 
    330    FeatureInfo disableSemaphoreFd = {"disableSemaphoreFd", FeatureCategory::OpenGLWorkarounds,
    331                                      "Disable GL_EXT_semaphore_fd extension", &members,
    332                                      "https://crbug.com/1046462"};
    333 
    334    FeatureInfo disableTimestampQueries = {
    335        "disableTimestampQueries", FeatureCategory::OpenGLWorkarounds,
    336        "Disable GL_EXT_disjoint_timer_query extension", &members, "https://crbug.com/811661"};
    337 
    338    FeatureInfo decodeEncodeSRGBForGenerateMipmap = {
    339        "decodeEncodeSRGBForGenerateMipmap", FeatureCategory::OpenGLWorkarounds,
    340        "Decode and encode before generateMipmap for srgb format textures.", &members,
    341        "http://anglebug.com/4646"};
    342 
    343    FeatureInfo emulateCopyTexImage2D = {
    344        "emulateCopyTexImage2D",
    345        FeatureCategory::OpenGLWorkarounds,
    346        "Replace CopyTexImage2D with TexImage2D + CopyTexSubImage2D.",
    347        &members,
    348    };
    349 
    350    FeatureInfo emulateCopyTexImage2DFromRenderbuffers = {
    351        "emulateCopyTexImage2DFromRenderbuffers", FeatureCategory::OpenGLWorkarounds,
    352        "CopyTexImage2D spuriously returns errors on iOS when copying from renderbuffers.",
    353        &members, "https://anglebug.com/4674"};
    354 
    355    FeatureInfo disableGPUSwitchingSupport = {
    356        "disableGPUSwitchingSupport", FeatureCategory::OpenGLWorkarounds,
    357        "Disable GPU switching support (use only the low-power GPU) on older MacBook Pros.",
    358        &members, "https://crbug.com/1091824"};
    359 
    360    FeatureInfo disableNativeParallelCompile = {
    361        "disableNativeParallelCompile", FeatureCategory::OpenGLWorkarounds,
    362        "Do not use native KHR_parallel_shader_compile even when available.", &members,
    363        "http://crbug.com/1094869"};
    364 
    365    FeatureInfo emulatePackSkipRowsAndPackSkipPixels = {
    366        "emulatePackSkipRowsAndPackSkipPixels", FeatureCategory::OpenGLWorkarounds,
    367        "GL_PACK_SKIP_ROWS and GL_PACK_SKIP_PIXELS are ignored in Apple's OpenGL driver.", &members,
    368        "https://anglebug.com/4849"};
    369 
    370    FeatureInfo clampMscRate = {
    371        "clampMscRate", FeatureCategory::OpenGLWorkarounds,
    372        "Some drivers return bogus values for GetMscRate, so we clamp it to 30Hz", &members,
    373        "https://crbug.com/1042393"};
    374 
    375    FeatureInfo bindTransformFeedbackBufferBeforeBindBufferRange = {
    376        "bindTransformFeedbackBufferBeforeBindBufferRange", FeatureCategory::OpenGLWorkarounds,
    377        "Bind transform feedback buffers to the generic binding point before calling "
    378        "glBindBufferBase or glBindBufferRange.",
    379        &members, "https://anglebug.com/5140"};
    380 
    381    FeatureInfo disableSyncControlSupport = {
    382        "disableSyncControlSupport", FeatureCategory::OpenGLWorkarounds,
    383        "Speculative fix for issues on Linux/Wayland where exposing GLX_OML_sync_control renders "
    384        "Chrome unusable",
    385        &members, "https://crbug.com/1137851"};
    386 
    387    FeatureInfo keepBufferShadowCopy = {
    388        "keepBufferShadowCopy",
    389        FeatureCategory::OpenGLWorkarounds,
    390        "Maintain a shadow copy of buffer data when the GL API does not permit reading data back.",
    391        &members,
    392    };
    393 
    394    FeatureInfo setZeroLevelBeforeGenerateMipmap = {
    395        "setZeroLevelBeforeGenerateMipmap",
    396        FeatureCategory::OpenGLWorkarounds,
    397        "glGenerateMipmap fails if the zero texture level is not set on some Mac drivers.",
    398        &members,
    399    };
    400 
    401    FeatureInfo promotePackedFormatsTo8BitPerChannel = {
    402        "promotePackedFormatsTo8BitPerChannel", FeatureCategory::OpenGLWorkarounds,
    403        "Packed color formats are buggy on Macs with AMD GPUs", &members,
    404        "http://anglebug.com/5469"};
    405 
    406    FeatureInfo initFragmentOutputVariables = {
    407        "initFragmentOutputVariables", FeatureCategory::OpenGLWorkarounds,
    408        "No init gl_FragColor causes context lost", &members, "http://crbug.com/1171371"};
    409 
    410    FeatureInfo shiftInstancedArrayDataWithOffset = {
    411        "shiftInstancedArrayDataWithOffset", FeatureCategory::OpenGLWorkarounds,
    412        "glDrawArraysInstanced is buggy on certain new Mac Intel GPUs", &members,
    413        "http://crbug.com/1144207"};
    414 
    415    FeatureInfo syncVertexArraysToDefault = {
    416        "syncVertexArraysToDefault", FeatureCategory::OpenGLWorkarounds,
    417        "Only use the default VAO because of missing support or driver bugs", &members,
    418        "http://anglebug.com/5577"};
    419 
    420    FeatureInfo sanitizeAMDGPURendererString = {
    421        "sanitizeAMDGPURendererString", FeatureCategory::OpenGLWorkarounds,
    422        "Strip precise kernel and DRM version information from amdgpu renderer strings.", &members,
    423        "http://crbug.com/1181193"};
    424 
    425    FeatureInfo unbindFBOBeforeSwitchingContext = {
    426        "unbindFBOBeforeSwitchingContext", FeatureCategory::OpenGLWorkarounds,
    427        "Imagination GL drivers are buggy with context switching.", &members,
    428        "http://crbug.com/1181193"};
    429 
    430    FeatureInfo flushOnFramebufferChange = {"flushOnFramebufferChange",
    431                                            FeatureCategory::OpenGLWorkarounds,
    432                                            "Switching framebuffers without a flush can lead to "
    433                                            "crashes on Intel 9th Generation GPU Macs.",
    434                                            &members, "http://crbug.com/1181068"};
    435 
    436    FeatureInfo disableMultisampledRenderToTexture = {
    437        "disableMultisampledRenderToTexture", FeatureCategory::OpenGLWorkarounds,
    438        "Many drivers have bugs when using GL_EXT_multisampled_render_to_texture", &members,
    439        "http://anglebug.com/2894"};
    440 
    441    FeatureInfo uploadTextureDataInChunks = {
    442        "uploadTextureDataInChunks", FeatureCategory::OpenGLWorkarounds,
    443        "Upload texture data in <120kb chunks to work around Mac driver hangs and crashes.",
    444        &members, "http://crbug.com/1181068"};
    445 
    446    FeatureInfo emulateImmutableCompressedTexture3D = {
    447        "emulateImmutableCompressedTexture3D", FeatureCategory::OpenGLWorkarounds,
    448        "Use non-immutable texture allocation to work around a driver bug.", &members,
    449        "https://crbug.com/1060012"};
    450 
    451    FeatureInfo emulateRGB10 = {"emulateRGB10", FeatureCategory::OpenGLWorkarounds,
    452                                "Emulate RGB10 support using RGB10_A2.", &members,
    453                                "https://crbug.com/1300575"};
    454 
    455    FeatureInfo alwaysUnbindFramebufferTexture2D = {
    456        "alwaysUnbindFramebufferTexture2D", FeatureCategory::OpenGLWorkarounds,
    457        "Force unbind framebufferTexture2D before binding renderbuffer to work around driver bug.",
    458        &members, "https://anglebug.com/5536"};
    459 
    460    FeatureInfo disableTextureClampToBorder = {
    461        "disableTextureClampToBorder", FeatureCategory::OpenGLWorkarounds,
    462        "Imagination devices generate INVALID_ENUM when setting the texture border color.",
    463        &members, "https://anglebug.com/7405"};
    464 
    465    FeatureInfo passHighpToPackUnormSnormBuiltins = {
    466        "passHighpToPackUnormSnormBuiltins", FeatureCategory::OpenGLWorkarounds,
    467        "packUnorm4x8 fails on Pixel 4 if it is not passed a highp vec4.", &members,
    468        "http://anglebug.com/7527"};
    469 
    470    FeatureInfo supportsFragmentShaderInterlockNV = {
    471        "supportsFragmentShaderInterlockNV", FeatureCategory::OpenGLFeatures,
    472        "Backend GL context supports NV_fragment_shader_interlock extension", &members,
    473        "http://anglebug.com/7279"};
    474 
    475    FeatureInfo supportsFragmentShaderOrderingINTEL = {
    476        "supportsFragmentShaderOrderingINTEL", FeatureCategory::OpenGLFeatures,
    477        "Backend GL context supports GL_INTEL_fragment_shader_ordering extension", &members,
    478        "http://anglebug.com/7279"};
    479 
    480    FeatureInfo supportsFragmentShaderInterlockARB = {
    481        "supportsFragmentShaderInterlockARB", FeatureCategory::OpenGLFeatures,
    482        "Backend GL context supports ARB_fragment_shader_interlock extension", &members,
    483        "http://anglebug.com/7279"};
    484 
    485    FeatureInfo supportsShaderFramebufferFetchEXT = {
    486        "supportsShaderFramebufferFetchEXT", FeatureCategory::OpenGLFeatures,
    487        "Backend GL context supports EXT_shader_framebuffer_fetch extension", &members,
    488        "http://anglebug.com/7279"};
    489 
    490    FeatureInfo supportsShaderFramebufferFetchNonCoherentEXT = {
    491        "supportsShaderFramebufferFetchNonCoherentEXT", FeatureCategory::OpenGLFeatures,
    492        "Backend GL context supports EXT_shader_framebuffer_fetch_non_coherent extension", &members,
    493        "http://anglebug.com/7279"};
    494 };
    495 
    496 inline FeaturesGL::FeaturesGL()  = default;
    497 inline FeaturesGL::~FeaturesGL() = default;
    498 
    499 }  // namespace angle
    500 
    501 #endif  // ANGLE_PLATFORM_FEATURESGL_H_