• 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 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