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