492 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			492 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C++
		
	
	
	
| // GENERATED FILE - DO NOT EDIT.
 | |
| // Generated by gen_features.py using data from gl_features.json.
 | |
| //
 | |
| // Copyright 2022 The ANGLE Project Authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style license that can be
 | |
| // found in the LICENSE file.
 | |
| //
 | |
| // FeaturesGL_autogen.h: angle::Features and workarounds for GL driver bugs and other issues.
 | |
| 
 | |
| #ifndef ANGLE_PLATFORM_FEATURESGL_H_
 | |
| #define ANGLE_PLATFORM_FEATURESGL_H_
 | |
| 
 | |
| #include "platform/Feature.h"
 | |
| 
 | |
| namespace angle
 | |
| {
 | |
| 
 | |
| struct FeaturesGL : FeatureSetBase
 | |
| {
 | |
|     FeaturesGL();
 | |
|     ~FeaturesGL();
 | |
| 
 | |
|     FeatureInfo avoid1BitAlphaTextureFormats = {
 | |
|         "avoid1BitAlphaTextureFormats",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Issue with 1-bit alpha framebuffer formats",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo RGBA4IsNotSupportedForColorRendering = {
 | |
|         "RGBA4IsNotSupportedForColorRendering",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "GL_RGBA4 is not color renderable",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo allowETCFormats = {
 | |
|         "allowETCFormats",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Enable ETC2/EAC on desktop OpenGL",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo allowAstcFormats = {
 | |
|         "allowAstcFormats",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Enable ASTC on desktop OpenGL",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo doesSRGBClearsOnLinearFramebufferAttachments = {
 | |
|         "doesSRGBClearsOnLinearFramebufferAttachments",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Issue clearing framebuffers with linear attachments when GL_FRAMEBUFFER_SRGB is enabled",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo doWhileGLSLCausesGPUHang = {
 | |
|         "doWhileGLSLCausesGPUHang", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Some GLSL constructs involving do-while loops cause GPU hangs", &members,
 | |
|         "http://crbug.com/644669"};
 | |
| 
 | |
|     FeatureInfo vertexIDDoesNotIncludeBaseVertex = {
 | |
|         "vertexIDDoesNotIncludeBaseVertex",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "gl_VertexID in GLSL vertex shader doesn't include base vertex value",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo finishDoesNotCauseQueriesToBeAvailable = {
 | |
|         "finishDoesNotCauseQueriesToBeAvailable",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "glFinish doesn't cause all queries to report available result",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo alwaysCallUseProgramAfterLink = {
 | |
|         "alwaysCallUseProgramAfterLink", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Always call useProgram after a successful link to avoid a driver bug", &members,
 | |
|         "http://crbug.com/110263"};
 | |
| 
 | |
|     FeatureInfo unpackOverlappingRowsSeparatelyUnpackBuffer = {
 | |
|         "unpackOverlappingRowsSeparatelyUnpackBuffer",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo packOverlappingRowsSeparatelyPackBuffer = {
 | |
|         "packOverlappingRowsSeparatelyPackBuffer",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "In the case of packing to a pixel pack buffer, pack overlapping rows row by row",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo initializeCurrentVertexAttributes = {
 | |
|         "initializeCurrentVertexAttributes",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "During initialization, assign the current vertex attributes to the spec-mandated defaults",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo emulateAbsIntFunction = {"emulateAbsIntFunction",
 | |
|                                          FeatureCategory::OpenGLWorkarounds,
 | |
|                                          "abs(i) where i is an integer returns unexpected result",
 | |
|                                          &members, "http://crbug.com/642227"};
 | |
| 
 | |
|     FeatureInfo addAndTrueToLoopCondition = {
 | |
|         "addAndTrueToLoopCondition",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Calculation of loop conditions in for and while loop has bug",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo unpackLastRowSeparatelyForPaddingInclusion = {
 | |
|         "unpackLastRowSeparatelyForPaddingInclusion", FeatureCategory::OpenGLWorkarounds,
 | |
|         "When uploading textures from an unpack buffer, some drivers count an extra row padding",
 | |
|         &members, "http://anglebug.com/1512"};
 | |
| 
 | |
|     FeatureInfo packLastRowSeparatelyForPaddingInclusion = {
 | |
|         "packLastRowSeparatelyForPaddingInclusion", FeatureCategory::OpenGLWorkarounds,
 | |
|         "When uploading textures from an pack buffer, some drivers count an extra row padding",
 | |
|         &members, "http://anglebug.com/1512"};
 | |
| 
 | |
|     FeatureInfo emulateIsnanFloat = {"emulateIsnanFloat", FeatureCategory::OpenGLWorkarounds,
 | |
|                                      "Using isnan() on highp float will get wrong answer", &members,
 | |
|                                      "http://crbug.com/650547"};
 | |
| 
 | |
|     FeatureInfo useUnusedBlocksWithStandardOrSharedLayout = {
 | |
|         "useUnusedBlocksWithStandardOrSharedLayout",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Unused std140 or shared uniform blocks will be treated as inactive",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo removeInvariantAndCentroidForESSL3 = {
 | |
|         "removeInvariantAndCentroidForESSL3",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Fix spec difference between GLSL 4.1 or lower and ESSL3",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo rewriteFloatUnaryMinusOperator = {
 | |
|         "rewriteFloatUnaryMinusOperator", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Using '-<float>' will get wrong answer", &members, "http://crbug.com/308366"};
 | |
| 
 | |
|     FeatureInfo emulateAtan2Float = {"emulateAtan2Float", FeatureCategory::OpenGLWorkarounds,
 | |
|                                      "atan(y, x) may return a wrong answer", &members,
 | |
|                                      "http://crbug.com/672380"};
 | |
| 
 | |
|     FeatureInfo reapplyUBOBindingsAfterUsingBinaryProgram = {
 | |
|         "reapplyUBOBindingsAfterUsingBinaryProgram", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Some drivers forget about UBO bindings when using program binaries", &members,
 | |
|         "http://anglebug.com/1637"};
 | |
| 
 | |
|     FeatureInfo emulateMaxVertexAttribStride = {
 | |
|         "emulateMaxVertexAttribStride", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Some drivers return 0 when MAX_VERTEX_ATTRIB_STRIED queried", &members,
 | |
|         "http://anglebug.com/1936"};
 | |
| 
 | |
|     FeatureInfo dontInitializeUninitializedLocals = {
 | |
|         "dontInitializeUninitializedLocals", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Initializing uninitialized locals caused odd behavior in a few WebGL 2 tests", &members,
 | |
|         "http://anglebug.com/2046"};
 | |
| 
 | |
|     FeatureInfo clampPointSize = {
 | |
|         "clampPointSize",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "The point size range reported from the API is inconsistent with the actual behavior",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo dontUseLoopsToInitializeVariables = {
 | |
|         "dontUseLoopsToInitializeVariables", FeatureCategory::OpenGLWorkarounds,
 | |
|         "For loops used to initialize variables hit native GLSL compiler bugs", &members,
 | |
|         "http://crbug.com/809422"};
 | |
| 
 | |
|     FeatureInfo clampFragDepth = {
 | |
|         "clampFragDepth",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "gl_FragDepth is not clamped correctly when rendering to a floating point depth buffer",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo rewriteRepeatedAssignToSwizzled = {
 | |
|         "rewriteRepeatedAssignToSwizzled",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Repeated assignment to swizzled values inside a "
 | |
|         "GLSL user-defined function have incorrect results",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo disableBlendFuncExtended = {
 | |
|         "disableBlendFuncExtended", FeatureCategory::OpenGLWorkarounds,
 | |
|         "ARB_blend_func_extended does not pass the tests", &members, "http://anglebug.com/1085"};
 | |
| 
 | |
|     FeatureInfo unsizedSRGBReadPixelsDoesntTransform = {
 | |
|         "unsizedSRGBReadPixelsDoesntTransform", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Drivers returning raw sRGB values instead of linearized values when calling glReadPixels "
 | |
|         "on unsized sRGB texture formats",
 | |
|         &members, "http://crbug.com/550292 http://crbug.com/565179"};
 | |
| 
 | |
|     FeatureInfo queryCounterBitsGeneratesErrors = {
 | |
|         "queryCounterBitsGeneratesErrors", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Drivers generate errors when querying the number of bits in timer queries", &members,
 | |
|         "http://anglebug.com/3027"};
 | |
| 
 | |
|     FeatureInfo dontRelinkProgramsInParallel = {
 | |
|         "dontRelinkProgramsInParallel", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Relinking a program in parallel is buggy", &members, "http://anglebug.com/3045"};
 | |
| 
 | |
|     FeatureInfo disableWorkerContexts = {"disableWorkerContexts",
 | |
|                                          FeatureCategory::OpenGLWorkarounds,
 | |
|                                          "Some tests have been seen to fail using worker contexts",
 | |
|                                          &members, "http://crbug.com/849576"};
 | |
| 
 | |
|     FeatureInfo limitWebglMaxTextureSizeTo4096 = {
 | |
|         "limitWebglMaxTextureSizeTo4096", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Limit webgl max texture size to 4096 to avoid frequent "
 | |
|         "out-of-memory errors",
 | |
|         &members, "http://crbug.com/927470"};
 | |
| 
 | |
|     FeatureInfo limitMaxMSAASamplesTo4 = {
 | |
|         "limitMaxMSAASamplesTo4", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Various rendering bugs have been observed when using higher MSAA counts", &members,
 | |
|         "http://crbug.com/797243"};
 | |
| 
 | |
|     FeatureInfo allowClearForRobustResourceInit = {
 | |
|         "allowClearForRobustResourceInit", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Using glClear for robust resource initialization is buggy on some drivers and leads to "
 | |
|         "texture corruption. Default to data uploads except on MacOS where it is very slow.",
 | |
|         &members, "https://crbug.com/848952 http://crbug.com/883276"};
 | |
| 
 | |
|     FeatureInfo clampArrayAccess = {"clampArrayAccess", FeatureCategory::OpenGLWorkarounds,
 | |
|                                     "Clamp uniform array access to avoid reading invalid memory.",
 | |
|                                     &members, "http://anglebug.com/2978"};
 | |
| 
 | |
|     FeatureInfo resetTexImage2DBaseLevel = {
 | |
|         "resetTexImage2DBaseLevel", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Reset texture base level before calling glTexImage2D to "
 | |
|         "work around pixel comparison failure.",
 | |
|         &members, "https://crbug.com/705865"};
 | |
| 
 | |
|     FeatureInfo clearToZeroOrOneBroken = {
 | |
|         "clearToZeroOrOneBroken", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Clears when the clear color is all zeros or ones do not work.", &members,
 | |
|         "https://crbug.com/710443"};
 | |
| 
 | |
|     FeatureInfo limitMax3dArrayTextureSizeTo1024 = {
 | |
|         "limitMax3dArrayTextureSizeTo1024", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Limit max 3d texture size and max array texture layers to 1024 to avoid system hang",
 | |
|         &members, "http://crbug.com/927470"};
 | |
| 
 | |
|     FeatureInfo adjustSrcDstRegionForBlitFramebuffer = {
 | |
|         "adjustSrcDstRegionForBlitFramebuffer", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Many platforms have issues with blitFramebuffer when the parameters are large.", &members,
 | |
|         "http://crbug.com/830046"};
 | |
| 
 | |
|     FeatureInfo clipSrcRegionForBlitFramebuffer = {
 | |
|         "clipSrcRegionForBlitFramebuffer", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Issues with blitFramebuffer when the parameters don't match the framebuffer size.",
 | |
|         &members, "http://crbug.com/830046"};
 | |
| 
 | |
|     FeatureInfo RGBDXT1TexturesSampleZeroAlpha = {
 | |
|         "RGBDXT1TexturesSampleZeroAlpha", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Sampling BLACK texels from RGB DXT1 textures returns transparent black on Mac.", &members,
 | |
|         "http://anglebug.com/3729"};
 | |
| 
 | |
|     FeatureInfo unfoldShortCircuits = {
 | |
|         "unfoldShortCircuits", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Mac incorrectly executes both sides of && and || expressions when they should "
 | |
|         "short-circuit.",
 | |
|         &members, "http://anglebug.com/482"};
 | |
| 
 | |
|     FeatureInfo emulatePrimitiveRestartFixedIndex = {
 | |
|         "emulatePrimitiveRestartFixedIndex", FeatureCategory::OpenGLWorkarounds,
 | |
|         "When GL_PRIMITIVE_RESTART_FIXED_INDEX is not available, emulate it with "
 | |
|         "GL_PRIMITIVE_RESTART and glPrimitiveRestartIndex.",
 | |
|         &members, "http://anglebug.com/3997"};
 | |
| 
 | |
|     FeatureInfo setPrimitiveRestartFixedIndexForDrawArrays = {
 | |
|         "setPrimitiveRestartFixedIndexForDrawArrays", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Some drivers discard vertex data in DrawArrays calls when the fixed primitive restart "
 | |
|         "index is within the number of primitives being drawn.",
 | |
|         &members, "http://anglebug.com/3997"};
 | |
| 
 | |
|     FeatureInfo removeDynamicIndexingOfSwizzledVector = {
 | |
|         "removeDynamicIndexingOfSwizzledVector", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Dynamic indexing of swizzled l-values doesn't work correctly on various platforms.",
 | |
|         &members, "http://crbug.com/709351"};
 | |
| 
 | |
|     FeatureInfo preAddTexelFetchOffsets = {
 | |
|         "preAddTexelFetchOffsets", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Intel Mac drivers mistakenly consider the parameter position of nagative vaule as invalid "
 | |
|         "even if the sum of position and offset is in range, so we need to add workarounds by "
 | |
|         "rewriting texelFetchOffset(sampler, position, lod, offset) into texelFetch(sampler, "
 | |
|         "position + offset, lod).",
 | |
|         &members, "http://crbug.com/642605"};
 | |
| 
 | |
|     FeatureInfo regenerateStructNames = {
 | |
|         "regenerateStructNames", FeatureCategory::OpenGLWorkarounds,
 | |
|         "All Mac drivers do not handle struct scopes correctly. This workaround overwrites a struct"
 | |
|         "name with a unique prefix.",
 | |
|         &members, "http://crbug.com/403957"};
 | |
| 
 | |
|     FeatureInfo readPixelsUsingImplementationColorReadFormatForNorm16 = {
 | |
|         "readPixelsUsingImplementationColorReadFormatForNorm16", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Quite some OpenGL ES drivers don't implement readPixels for RGBA/UNSIGNED_SHORT from "
 | |
|         "EXT_texture_norm16 correctly",
 | |
|         &members, "http://anglebug.com/4214"};
 | |
| 
 | |
|     FeatureInfo flushBeforeDeleteTextureIfCopiedTo = {
 | |
|         "flushBeforeDeleteTextureIfCopiedTo", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Some drivers track CopyTex{Sub}Image texture dependencies incorrectly. Flush"
 | |
|         " before glDeleteTextures in this case",
 | |
|         &members, "http://anglebug.com/4267"};
 | |
| 
 | |
|     FeatureInfo rewriteRowMajorMatrices = {
 | |
|         "rewriteRowMajorMatrices", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Rewrite row major matrices in shaders as column major as a driver bug workaround",
 | |
|         &members, "http://anglebug.com/2273"};
 | |
| 
 | |
|     FeatureInfo disableDrawBuffersIndexed = {
 | |
|         "disableDrawBuffersIndexed",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Disable OES_draw_buffers_indexed extension.",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo disableSemaphoreFd = {"disableSemaphoreFd", FeatureCategory::OpenGLWorkarounds,
 | |
|                                       "Disable GL_EXT_semaphore_fd extension", &members,
 | |
|                                       "https://crbug.com/1046462"};
 | |
| 
 | |
|     FeatureInfo disableTimestampQueries = {
 | |
|         "disableTimestampQueries", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Disable GL_EXT_disjoint_timer_query extension", &members, "https://crbug.com/811661"};
 | |
| 
 | |
|     FeatureInfo decodeEncodeSRGBForGenerateMipmap = {
 | |
|         "decodeEncodeSRGBForGenerateMipmap", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Decode and encode before generateMipmap for srgb format textures.", &members,
 | |
|         "http://anglebug.com/4646"};
 | |
| 
 | |
|     FeatureInfo emulateCopyTexImage2D = {
 | |
|         "emulateCopyTexImage2D",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Replace CopyTexImage2D with TexImage2D + CopyTexSubImage2D.",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo emulateCopyTexImage2DFromRenderbuffers = {
 | |
|         "emulateCopyTexImage2DFromRenderbuffers", FeatureCategory::OpenGLWorkarounds,
 | |
|         "CopyTexImage2D spuriously returns errors on iOS when copying from renderbuffers.",
 | |
|         &members, "https://anglebug.com/4674"};
 | |
| 
 | |
|     FeatureInfo disableGPUSwitchingSupport = {
 | |
|         "disableGPUSwitchingSupport", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Disable GPU switching support (use only the low-power GPU) on older MacBook Pros.",
 | |
|         &members, "https://crbug.com/1091824"};
 | |
| 
 | |
|     FeatureInfo disableNativeParallelCompile = {
 | |
|         "disableNativeParallelCompile", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Do not use native KHR_parallel_shader_compile even when available.", &members,
 | |
|         "http://crbug.com/1094869"};
 | |
| 
 | |
|     FeatureInfo emulatePackSkipRowsAndPackSkipPixels = {
 | |
|         "emulatePackSkipRowsAndPackSkipPixels", FeatureCategory::OpenGLWorkarounds,
 | |
|         "GL_PACK_SKIP_ROWS and GL_PACK_SKIP_PIXELS are ignored in Apple's OpenGL driver.", &members,
 | |
|         "https://anglebug.com/4849"};
 | |
| 
 | |
|     FeatureInfo clampMscRate = {
 | |
|         "clampMscRate", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Some drivers return bogus values for GetMscRate, so we clamp it to 30Hz", &members,
 | |
|         "https://crbug.com/1042393"};
 | |
| 
 | |
|     FeatureInfo bindTransformFeedbackBufferBeforeBindBufferRange = {
 | |
|         "bindTransformFeedbackBufferBeforeBindBufferRange", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Bind transform feedback buffers to the generic binding point before calling "
 | |
|         "glBindBufferBase or glBindBufferRange.",
 | |
|         &members, "https://anglebug.com/5140"};
 | |
| 
 | |
|     FeatureInfo disableSyncControlSupport = {
 | |
|         "disableSyncControlSupport", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Speculative fix for issues on Linux/Wayland where exposing GLX_OML_sync_control renders "
 | |
|         "Chrome unusable",
 | |
|         &members, "https://crbug.com/1137851"};
 | |
| 
 | |
|     FeatureInfo keepBufferShadowCopy = {
 | |
|         "keepBufferShadowCopy",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "Maintain a shadow copy of buffer data when the GL API does not permit reading data back.",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo setZeroLevelBeforeGenerateMipmap = {
 | |
|         "setZeroLevelBeforeGenerateMipmap",
 | |
|         FeatureCategory::OpenGLWorkarounds,
 | |
|         "glGenerateMipmap fails if the zero texture level is not set on some Mac drivers.",
 | |
|         &members,
 | |
|     };
 | |
| 
 | |
|     FeatureInfo promotePackedFormatsTo8BitPerChannel = {
 | |
|         "promotePackedFormatsTo8BitPerChannel", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Packed color formats are buggy on Macs with AMD GPUs", &members,
 | |
|         "http://anglebug.com/5469"};
 | |
| 
 | |
|     FeatureInfo initFragmentOutputVariables = {
 | |
|         "initFragmentOutputVariables", FeatureCategory::OpenGLWorkarounds,
 | |
|         "No init gl_FragColor causes context lost", &members, "http://crbug.com/1171371"};
 | |
| 
 | |
|     FeatureInfo shiftInstancedArrayDataWithOffset = {
 | |
|         "shiftInstancedArrayDataWithOffset", FeatureCategory::OpenGLWorkarounds,
 | |
|         "glDrawArraysInstanced is buggy on certain new Mac Intel GPUs", &members,
 | |
|         "http://crbug.com/1144207"};
 | |
| 
 | |
|     FeatureInfo syncVertexArraysToDefault = {
 | |
|         "syncVertexArraysToDefault", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Only use the default VAO because of missing support or driver bugs", &members,
 | |
|         "http://anglebug.com/5577"};
 | |
| 
 | |
|     FeatureInfo sanitizeAMDGPURendererString = {
 | |
|         "sanitizeAMDGPURendererString", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Strip precise kernel and DRM version information from amdgpu renderer strings.", &members,
 | |
|         "http://crbug.com/1181193"};
 | |
| 
 | |
|     FeatureInfo unbindFBOBeforeSwitchingContext = {
 | |
|         "unbindFBOBeforeSwitchingContext", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Imagination GL drivers are buggy with context switching.", &members,
 | |
|         "http://crbug.com/1181193"};
 | |
| 
 | |
|     FeatureInfo flushOnFramebufferChange = {"flushOnFramebufferChange",
 | |
|                                             FeatureCategory::OpenGLWorkarounds,
 | |
|                                             "Switching framebuffers without a flush can lead to "
 | |
|                                             "crashes on Intel 9th Generation GPU Macs.",
 | |
|                                             &members, "http://crbug.com/1181068"};
 | |
| 
 | |
|     FeatureInfo disableMultisampledRenderToTexture = {
 | |
|         "disableMultisampledRenderToTexture", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Many drivers have bugs when using GL_EXT_multisampled_render_to_texture", &members,
 | |
|         "http://anglebug.com/2894"};
 | |
| 
 | |
|     FeatureInfo uploadTextureDataInChunks = {
 | |
|         "uploadTextureDataInChunks", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Upload texture data in <120kb chunks to work around Mac driver hangs and crashes.",
 | |
|         &members, "http://crbug.com/1181068"};
 | |
| 
 | |
|     FeatureInfo emulateImmutableCompressedTexture3D = {
 | |
|         "emulateImmutableCompressedTexture3D", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Use non-immutable texture allocation to work around a driver bug.", &members,
 | |
|         "https://crbug.com/1060012"};
 | |
| 
 | |
|     FeatureInfo emulateRGB10 = {"emulateRGB10", FeatureCategory::OpenGLWorkarounds,
 | |
|                                 "Emulate RGB10 support using RGB10_A2.", &members,
 | |
|                                 "https://crbug.com/1300575"};
 | |
| 
 | |
|     FeatureInfo alwaysUnbindFramebufferTexture2D = {
 | |
|         "alwaysUnbindFramebufferTexture2D", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Force unbind framebufferTexture2D before binding renderbuffer to work around driver bug.",
 | |
|         &members, "https://anglebug.com/5536"};
 | |
| 
 | |
|     FeatureInfo disableTextureClampToBorder = {
 | |
|         "disableTextureClampToBorder", FeatureCategory::OpenGLWorkarounds,
 | |
|         "Imagination devices generate INVALID_ENUM when setting the texture border color.",
 | |
|         &members, "https://anglebug.com/7405"};
 | |
| 
 | |
|     FeatureInfo passHighpToPackUnormSnormBuiltins = {
 | |
|         "passHighpToPackUnormSnormBuiltins", FeatureCategory::OpenGLWorkarounds,
 | |
|         "packUnorm4x8 fails on Pixel 4 if it is not passed a highp vec4.", &members,
 | |
|         "http://anglebug.com/7527"};
 | |
| 
 | |
|     FeatureInfo supportsFragmentShaderInterlockNV = {
 | |
|         "supportsFragmentShaderInterlockNV", FeatureCategory::OpenGLFeatures,
 | |
|         "GL context supports NV_fragment_shader_interlock extension", &members,
 | |
|         "http://anglebug.com/7279"};
 | |
| 
 | |
|     FeatureInfo supportsFragmentShaderOrderingINTEL = {
 | |
|         "supportsFragmentShaderOrderingINTEL", FeatureCategory::OpenGLFeatures,
 | |
|         "GL context supports GL_INTEL_fragment_shader_ordering extension", &members,
 | |
|         "http://anglebug.com/7279"};
 | |
| 
 | |
|     FeatureInfo supportsFragmentShaderInterlockARB = {
 | |
|         "supportsFragmentShaderInterlockARB", FeatureCategory::OpenGLFeatures,
 | |
|         "GL context supports ARB_fragment_shader_interlock extension", &members,
 | |
|         "http://anglebug.com/7279"};
 | |
| };
 | |
| 
 | |
| inline FeaturesGL::FeaturesGL()  = default;
 | |
| inline FeaturesGL::~FeaturesGL() = default;
 | |
| 
 | |
| }  // namespace angle
 | |
| 
 | |
| #endif  // ANGLE_PLATFORM_FEATURESGL_H_
 |