Backed out 4 changesets (bug 1578576) for causing build failure with microsoft visual studio 2019. a=backout
authorDorel Luca <dluca@mozilla.com>
Tue, 10 Sep 2019 11:54:20 +0300
changeset 553750 265d683ed5c396f3f0e38044cd2a91f881d931b7
parent 553749 7762fb7ccd1d45652f06ac7c4298efcd1fe83b9a
child 553775 07f1d247491f3ab84b07a66052cd038e7207760d
push id12169
push userffxbld-merge
push dateMon, 14 Oct 2019 16:59:29 +0000
treeherdermozilla-beta@c819687300ed [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbackout
bugs1578576
milestone71.0a1
backs oute5b3436fc27756fb291712258df67e0605d181a8
cd2799d2d190d7a913d3626b567128c011e8c6fc
13282d7a47a57a73be8d060efd9645b4d642f03e
3064469c073d1f789c2a82f76c7af1edbcd1334f
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 4 changesets (bug 1578576) for causing build failure with microsoft visual studio 2019. a=backout Backed out changeset e5b3436fc277 (bug 1578576) Backed out changeset cd2799d2d190 (bug 1578576) Backed out changeset 13282d7a47a5 (bug 1578576) Backed out changeset 3064469c073d (bug 1578576)
dom/canvas/WebGLContext.cpp
dom/canvas/test/webgl-conf/generated-mochitest.ini
dom/canvas/test/webgl-conf/mochitest-errata.ini
gfx/angle/MERGE_BASE
gfx/angle/checkout/include/EGL/egl.h
gfx/angle/checkout/include/EGL/eglext_angle.h
gfx/angle/checkout/include/GLES2/gl2ext_angle.h
gfx/angle/checkout/include/GLES2/gl2ext_explicit_context_autogen.inc
gfx/angle/checkout/include/GLSLANG/ShaderLang.h
gfx/angle/checkout/include/platform/Feature.h
gfx/angle/checkout/include/platform/FeaturesD3D.h
gfx/angle/checkout/include/platform/FeaturesGL.h
gfx/angle/checkout/include/platform/FeaturesVk.h
gfx/angle/checkout/include/platform/FrontendFeatures.h
gfx/angle/checkout/include/platform/Platform.h
gfx/angle/checkout/include/platform/WorkaroundsD3D.h
gfx/angle/checkout/out/gen/angle/id/commit.h
gfx/angle/checkout/src/common/Color.h
gfx/angle/checkout/src/common/Color.inc
gfx/angle/checkout/src/common/Color.inl
gfx/angle/checkout/src/common/FixedVector.h
gfx/angle/checkout/src/common/PackedEGLEnums_autogen.cpp
gfx/angle/checkout/src/common/PackedEGLEnums_autogen.h
gfx/angle/checkout/src/common/PackedEnums.cpp
gfx/angle/checkout/src/common/PackedEnums.h
gfx/angle/checkout/src/common/PackedGLEnums_autogen.cpp
gfx/angle/checkout/src/common/PackedGLEnums_autogen.h
gfx/angle/checkout/src/common/PoolAlloc.cpp
gfx/angle/checkout/src/common/PoolAlloc.h
gfx/angle/checkout/src/common/android_util.cpp
gfx/angle/checkout/src/common/android_util.h
gfx/angle/checkout/src/common/angleutils.h
gfx/angle/checkout/src/common/bitset_utils.h
gfx/angle/checkout/src/common/debug.cpp
gfx/angle/checkout/src/common/debug.h
gfx/angle/checkout/src/common/event_tracer.cpp
gfx/angle/checkout/src/common/event_tracer.h
gfx/angle/checkout/src/common/mathutil.h
gfx/angle/checkout/src/common/string_utils.cpp
gfx/angle/checkout/src/common/string_utils.h
gfx/angle/checkout/src/common/system_utils.cpp
gfx/angle/checkout/src/common/system_utils.h
gfx/angle/checkout/src/common/system_utils_posix.cpp
gfx/angle/checkout/src/common/system_utils_win.cpp
gfx/angle/checkout/src/common/third_party/base/anglebase/numerics/safe_math.h
gfx/angle/checkout/src/common/uniform_type_info_autogen.cpp
gfx/angle/checkout/src/common/utilities.cpp
gfx/angle/checkout/src/common/utilities.h
gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.cpp
gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.h
gfx/angle/checkout/src/compiler/preprocessor/DirectiveHandlerBase.h
gfx/angle/checkout/src/compiler/preprocessor/DirectiveParser.cpp
gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.y
gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.l
gfx/angle/checkout/src/compiler/translator/AtomicCounterFunctionHLSL.cpp
gfx/angle/checkout/src/compiler/translator/AtomicCounterFunctionHLSL.h
gfx/angle/checkout/src/compiler/translator/BaseTypes.h
gfx/angle/checkout/src/compiler/translator/BuiltInFunctionEmulatorGLSL.cpp
gfx/angle/checkout/src/compiler/translator/CallDAG.cpp
gfx/angle/checkout/src/compiler/translator/CollectVariables.cpp
gfx/angle/checkout/src/compiler/translator/Common.h
gfx/angle/checkout/src/compiler/translator/Compiler.cpp
gfx/angle/checkout/src/compiler/translator/Compiler.h
gfx/angle/checkout/src/compiler/translator/ConstantUnion.cpp
gfx/angle/checkout/src/compiler/translator/DirectiveHandler.cpp
gfx/angle/checkout/src/compiler/translator/DirectiveHandler.h
gfx/angle/checkout/src/compiler/translator/ExtensionBehavior.cpp
gfx/angle/checkout/src/compiler/translator/ExtensionBehavior.h
gfx/angle/checkout/src/compiler/translator/FunctionLookup.cpp
gfx/angle/checkout/src/compiler/translator/FunctionLookup.h
gfx/angle/checkout/src/compiler/translator/InfoSink.cpp
gfx/angle/checkout/src/compiler/translator/InfoSink.h
gfx/angle/checkout/src/compiler/translator/Initialize.cpp
gfx/angle/checkout/src/compiler/translator/IntermNode.cpp
gfx/angle/checkout/src/compiler/translator/IntermNode.h
gfx/angle/checkout/src/compiler/translator/Operator.cpp
gfx/angle/checkout/src/compiler/translator/OutputGLSL.cpp
gfx/angle/checkout/src/compiler/translator/OutputGLSLBase.cpp
gfx/angle/checkout/src/compiler/translator/OutputGLSLBase.h
gfx/angle/checkout/src/compiler/translator/OutputHLSL.cpp
gfx/angle/checkout/src/compiler/translator/OutputHLSL.h
gfx/angle/checkout/src/compiler/translator/ParseContext.cpp
gfx/angle/checkout/src/compiler/translator/ParseContext.h
gfx/angle/checkout/src/compiler/translator/ParseContext_autogen.h
gfx/angle/checkout/src/compiler/translator/ResourcesHLSL.cpp
gfx/angle/checkout/src/compiler/translator/ShaderLang.cpp
gfx/angle/checkout/src/compiler/translator/ShaderStorageBlockOutputHLSL.cpp
gfx/angle/checkout/src/compiler/translator/StaticType.h
gfx/angle/checkout/src/compiler/translator/Symbol.cpp
gfx/angle/checkout/src/compiler/translator/SymbolTable.cpp
gfx/angle/checkout/src/compiler/translator/SymbolTable.h
gfx/angle/checkout/src/compiler/translator/SymbolTable_autogen.cpp
gfx/angle/checkout/src/compiler/translator/TextureFunctionHLSL.cpp
gfx/angle/checkout/src/compiler/translator/TranslatorESSL.cpp
gfx/angle/checkout/src/compiler/translator/TranslatorGLSL.cpp
gfx/angle/checkout/src/compiler/translator/Types.cpp
gfx/angle/checkout/src/compiler/translator/Types.h
gfx/angle/checkout/src/compiler/translator/ValidateOutputs.cpp
gfx/angle/checkout/src/compiler/translator/ValidateVaryingLocations.cpp
gfx/angle/checkout/src/compiler/translator/blocklayout.cpp
gfx/angle/checkout/src/compiler/translator/emulated_builtin_functions_hlsl_autogen.cpp
gfx/angle/checkout/src/compiler/translator/glslang.l
gfx/angle/checkout/src/compiler/translator/glslang.y
gfx/angle/checkout/src/compiler/translator/glslang_lex.cpp
gfx/angle/checkout/src/compiler/translator/glslang_tab.cpp
gfx/angle/checkout/src/compiler/translator/glslang_tab.h
gfx/angle/checkout/src/compiler/translator/tree_ops/EmulateGLDrawID.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/EmulateGLDrawID.h
gfx/angle/checkout/src/compiler/translator/tree_ops/EmulateMultiDrawShaderBuiltins.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/EmulateMultiDrawShaderBuiltins.h
gfx/angle/checkout/src/compiler/translator/tree_ops/EmulatePrecision.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/ExpandIntegerPowExpressions.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteAtomicCounters.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteAtomicCounters.h
gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteDfdy.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteDfdy.h
gfx/angle/checkout/src/compiler/translator/tree_util/BuiltIn_autogen.h
gfx/angle/checkout/src/compiler/translator/tree_util/FindFunction.cpp
gfx/angle/checkout/src/compiler/translator/tree_util/FindFunction.h
gfx/angle/checkout/src/compiler/translator/tree_util/IntermNode_util.cpp
gfx/angle/checkout/src/compiler/translator/tree_util/IntermNode_util.h
gfx/angle/checkout/src/compiler/translator/tree_util/ReplaceShadowingVariables.cpp
gfx/angle/checkout/src/compiler/translator/tree_util/ReplaceShadowingVariables.h
gfx/angle/checkout/src/compiler/translator/util.cpp
gfx/angle/checkout/src/compiler/translator/util.h
gfx/angle/checkout/src/gpu_info_util/SystemInfo.cpp
gfx/angle/checkout/src/gpu_info_util/SystemInfo.h
gfx/angle/checkout/src/gpu_info_util/SystemInfo_internal.h
gfx/angle/checkout/src/gpu_info_util/SystemInfo_win.cpp
gfx/angle/checkout/src/image_util/copyimage.h
gfx/angle/checkout/src/image_util/copyimage.inc
gfx/angle/checkout/src/image_util/copyimage.inl
gfx/angle/checkout/src/image_util/generatemip.h
gfx/angle/checkout/src/image_util/generatemip.inc
gfx/angle/checkout/src/image_util/generatemip.inl
gfx/angle/checkout/src/image_util/loadimage.cpp
gfx/angle/checkout/src/image_util/loadimage.h
gfx/angle/checkout/src/image_util/loadimage.inc
gfx/angle/checkout/src/image_util/loadimage.inl
gfx/angle/checkout/src/libANGLE/AttributeMap.cpp
gfx/angle/checkout/src/libANGLE/Buffer.cpp
gfx/angle/checkout/src/libANGLE/Buffer.h
gfx/angle/checkout/src/libANGLE/Caps.cpp
gfx/angle/checkout/src/libANGLE/Caps.h
gfx/angle/checkout/src/libANGLE/Compiler.cpp
gfx/angle/checkout/src/libANGLE/Config.cpp
gfx/angle/checkout/src/libANGLE/Constants.h
gfx/angle/checkout/src/libANGLE/Context.cpp
gfx/angle/checkout/src/libANGLE/Context.h
gfx/angle/checkout/src/libANGLE/Context_gl.cpp
gfx/angle/checkout/src/libANGLE/Context_gl_1_0_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_1_1_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_1_2_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_1_3_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_1_4_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_1_5_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_2_0_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_2_1_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_3_0_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_3_1_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_3_2_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_3_3_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_4_0_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_4_1_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_4_2_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_4_3_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_4_4_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_4_5_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gl_4_6_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gles_1_0_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gles_2_0_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gles_3_0_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gles_3_1_autogen.h
gfx/angle/checkout/src/libANGLE/Context_gles_ext_autogen.h
gfx/angle/checkout/src/libANGLE/Debug.cpp
gfx/angle/checkout/src/libANGLE/Debug.h
gfx/angle/checkout/src/libANGLE/Display.cpp
gfx/angle/checkout/src/libANGLE/Display.h
gfx/angle/checkout/src/libANGLE/EGLSync.cpp
gfx/angle/checkout/src/libANGLE/EGLSync.h
gfx/angle/checkout/src/libANGLE/Error.h
gfx/angle/checkout/src/libANGLE/Error.inc
gfx/angle/checkout/src/libANGLE/Error.inl
gfx/angle/checkout/src/libANGLE/ErrorStrings.h
gfx/angle/checkout/src/libANGLE/FrameCapture.h
gfx/angle/checkout/src/libANGLE/Framebuffer.cpp
gfx/angle/checkout/src/libANGLE/Framebuffer.h
gfx/angle/checkout/src/libANGLE/FramebufferAttachment.cpp
gfx/angle/checkout/src/libANGLE/FramebufferAttachment.h
gfx/angle/checkout/src/libANGLE/Image.cpp
gfx/angle/checkout/src/libANGLE/Image.h
gfx/angle/checkout/src/libANGLE/ImageIndex.cpp
gfx/angle/checkout/src/libANGLE/ImageIndex.h
gfx/angle/checkout/src/libANGLE/LoggingAnnotator.cpp
gfx/angle/checkout/src/libANGLE/MemoryObject.cpp
gfx/angle/checkout/src/libANGLE/MemoryObject.h
gfx/angle/checkout/src/libANGLE/Observer.cpp
gfx/angle/checkout/src/libANGLE/Observer.h
gfx/angle/checkout/src/libANGLE/Program.cpp
gfx/angle/checkout/src/libANGLE/Program.h
gfx/angle/checkout/src/libANGLE/ProgramLinkedResources.cpp
gfx/angle/checkout/src/libANGLE/ProgramLinkedResources.h
gfx/angle/checkout/src/libANGLE/Query.cpp
gfx/angle/checkout/src/libANGLE/Query.h
gfx/angle/checkout/src/libANGLE/Renderbuffer.cpp
gfx/angle/checkout/src/libANGLE/ResourceManager.cpp
gfx/angle/checkout/src/libANGLE/ResourceManager.h
gfx/angle/checkout/src/libANGLE/Sampler.cpp
gfx/angle/checkout/src/libANGLE/Sampler.h
gfx/angle/checkout/src/libANGLE/Semaphore.cpp
gfx/angle/checkout/src/libANGLE/Semaphore.h
gfx/angle/checkout/src/libANGLE/Shader.cpp
gfx/angle/checkout/src/libANGLE/Shader.h
gfx/angle/checkout/src/libANGLE/State.cpp
gfx/angle/checkout/src/libANGLE/State.h
gfx/angle/checkout/src/libANGLE/Surface.cpp
gfx/angle/checkout/src/libANGLE/Surface.h
gfx/angle/checkout/src/libANGLE/Texture.cpp
gfx/angle/checkout/src/libANGLE/Texture.h
gfx/angle/checkout/src/libANGLE/Thread.cpp
gfx/angle/checkout/src/libANGLE/Thread.h
gfx/angle/checkout/src/libANGLE/TransformFeedback.cpp
gfx/angle/checkout/src/libANGLE/TransformFeedback.h
gfx/angle/checkout/src/libANGLE/Uniform.cpp
gfx/angle/checkout/src/libANGLE/Uniform.h
gfx/angle/checkout/src/libANGLE/VaryingPacking.cpp
gfx/angle/checkout/src/libANGLE/VaryingPacking.h
gfx/angle/checkout/src/libANGLE/Version.h
gfx/angle/checkout/src/libANGLE/Version.inc
gfx/angle/checkout/src/libANGLE/Version.inl
gfx/angle/checkout/src/libANGLE/VertexArray.cpp
gfx/angle/checkout/src/libANGLE/VertexArray.h
gfx/angle/checkout/src/libANGLE/VertexAttribute.cpp
gfx/angle/checkout/src/libANGLE/VertexAttribute.h
gfx/angle/checkout/src/libANGLE/VertexAttribute.inc
gfx/angle/checkout/src/libANGLE/VertexAttribute.inl
gfx/angle/checkout/src/libANGLE/Workarounds.h
gfx/angle/checkout/src/libANGLE/WorkerThread.cpp
gfx/angle/checkout/src/libANGLE/WorkerThread.h
gfx/angle/checkout/src/libANGLE/angletypes.cpp
gfx/angle/checkout/src/libANGLE/angletypes.h
gfx/angle/checkout/src/libANGLE/angletypes.inc
gfx/angle/checkout/src/libANGLE/angletypes.inl
gfx/angle/checkout/src/libANGLE/capture_gles_1_0_autogen.h
gfx/angle/checkout/src/libANGLE/capture_gles_2_0_autogen.h
gfx/angle/checkout/src/libANGLE/capture_gles_3_0_autogen.h
gfx/angle/checkout/src/libANGLE/capture_gles_3_1_autogen.h
gfx/angle/checkout/src/libANGLE/capture_gles_ext_autogen.h
gfx/angle/checkout/src/libANGLE/entry_points_enum_autogen.h
gfx/angle/checkout/src/libANGLE/entry_points_utils.h
gfx/angle/checkout/src/libANGLE/es3_copy_conversion_table_autogen.cpp
gfx/angle/checkout/src/libANGLE/features.h
gfx/angle/checkout/src/libANGLE/format_map_autogen.cpp
gfx/angle/checkout/src/libANGLE/formatutils.cpp
gfx/angle/checkout/src/libANGLE/formatutils.h
gfx/angle/checkout/src/libANGLE/frame_capture_utils_autogen.h
gfx/angle/checkout/src/libANGLE/queryconversions.cpp
gfx/angle/checkout/src/libANGLE/queryconversions.h
gfx/angle/checkout/src/libANGLE/queryutils.cpp
gfx/angle/checkout/src/libANGLE/queryutils.h
gfx/angle/checkout/src/libANGLE/renderer/ContextImpl.cpp
gfx/angle/checkout/src/libANGLE/renderer/ContextImpl.h
gfx/angle/checkout/src/libANGLE/renderer/DisplayImpl.h
gfx/angle/checkout/src/libANGLE/renderer/EGLSyncImpl.h
gfx/angle/checkout/src/libANGLE/renderer/Format.h
gfx/angle/checkout/src/libANGLE/renderer/FormatID_autogen.h
gfx/angle/checkout/src/libANGLE/renderer/Format_table_autogen.cpp
gfx/angle/checkout/src/libANGLE/renderer/FramebufferAttachmentObjectImpl.h
gfx/angle/checkout/src/libANGLE/renderer/FramebufferImpl.h
gfx/angle/checkout/src/libANGLE/renderer/GLImplFactory.h
gfx/angle/checkout/src/libANGLE/renderer/MemoryObjectImpl.h
gfx/angle/checkout/src/libANGLE/renderer/RenderTargetCache.h
gfx/angle/checkout/src/libANGLE/renderer/SemaphoreImpl.h
gfx/angle/checkout/src/libANGLE/renderer/ShaderImpl.cpp
gfx/angle/checkout/src/libANGLE/renderer/ShaderImpl.h
gfx/angle/checkout/src/libANGLE/renderer/SurfaceImpl.cpp
gfx/angle/checkout/src/libANGLE/renderer/SurfaceImpl.h
gfx/angle/checkout/src/libANGLE/renderer/TextureImpl.cpp
gfx/angle/checkout/src/libANGLE/renderer/TextureImpl.h
gfx/angle/checkout/src/libANGLE/renderer/TransformFeedbackImpl.h
gfx/angle/checkout/src/libANGLE/renderer/copyvertex.h
gfx/angle/checkout/src/libANGLE/renderer/copyvertex.inc
gfx/angle/checkout/src/libANGLE/renderer/copyvertex.inc.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/BufferD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/DisplayD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/DisplayD3D.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/DynamicHLSL.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/DynamicHLSL.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/DynamicImage2DHLSL.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/EGLImageD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/HLSLCompiler.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/RendererD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/RendererD3D.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/ShaderD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/ShaderD3D.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureD3D.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureD3D.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureStorage.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/VertexBuffer.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/VertexBuffer.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/VertexDataManager.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Buffer11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Context11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/ExternalImageSiblingImpl11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/ExternalImageSiblingImpl11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Image11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Image11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/MappedSubresourceVerifier11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/MappedSubresourceVerifier11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/StateManager11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TransformFeedback11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TransformFeedback11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table_autogen.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Blit9.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Context9.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Renderer9.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/ShaderCache.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/StateManager9.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h
gfx/angle/checkout/src/libANGLE/renderer/driver_utils.cpp
gfx/angle/checkout/src/libANGLE/renderer/driver_utils.h
gfx/angle/checkout/src/libANGLE/renderer/load_functions_table_autogen.cpp
gfx/angle/checkout/src/libANGLE/renderer/renderer_utils.cpp
gfx/angle/checkout/src/libANGLE/renderer/renderer_utils.h
gfx/angle/checkout/src/libANGLE/trace.h
gfx/angle/checkout/src/libANGLE/validationEGL.cpp
gfx/angle/checkout/src/libANGLE/validationEGL.h
gfx/angle/checkout/src/libANGLE/validationES.cpp
gfx/angle/checkout/src/libANGLE/validationES.h
gfx/angle/checkout/src/libANGLE/validationES2.cpp
gfx/angle/checkout/src/libANGLE/validationES2.h
gfx/angle/checkout/src/libANGLE/validationES3.cpp
gfx/angle/checkout/src/libANGLE/validationES3.h
gfx/angle/checkout/src/libANGLE/validationES31.cpp
gfx/angle/checkout/src/libANGLE/validationES3_autogen.h
gfx/angle/checkout/src/libANGLE/validationESEXT_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL1.cpp
gfx/angle/checkout/src/libANGLE/validationGL11.cpp
gfx/angle/checkout/src/libANGLE/validationGL11_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL12.cpp
gfx/angle/checkout/src/libANGLE/validationGL12_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL13.cpp
gfx/angle/checkout/src/libANGLE/validationGL13_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL14.cpp
gfx/angle/checkout/src/libANGLE/validationGL14_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL15.cpp
gfx/angle/checkout/src/libANGLE/validationGL15_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL1_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL2.cpp
gfx/angle/checkout/src/libANGLE/validationGL21.cpp
gfx/angle/checkout/src/libANGLE/validationGL21_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL2_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL3.cpp
gfx/angle/checkout/src/libANGLE/validationGL31.cpp
gfx/angle/checkout/src/libANGLE/validationGL31_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL32.cpp
gfx/angle/checkout/src/libANGLE/validationGL32_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL33.cpp
gfx/angle/checkout/src/libANGLE/validationGL33_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL3_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL4.cpp
gfx/angle/checkout/src/libANGLE/validationGL41.cpp
gfx/angle/checkout/src/libANGLE/validationGL41_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL42.cpp
gfx/angle/checkout/src/libANGLE/validationGL42_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL43.cpp
gfx/angle/checkout/src/libANGLE/validationGL43_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL44.cpp
gfx/angle/checkout/src/libANGLE/validationGL44_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL45.cpp
gfx/angle/checkout/src/libANGLE/validationGL45_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL46.cpp
gfx/angle/checkout/src/libANGLE/validationGL46_autogen.h
gfx/angle/checkout/src/libANGLE/validationGL4_autogen.h
gfx/angle/checkout/src/libEGL/egl_loader_autogen.cpp
gfx/angle/checkout/src/libEGL/egl_loader_autogen.h
gfx/angle/checkout/src/libEGL/libEGL.cpp
gfx/angle/checkout/src/libEGL/libEGL.def
gfx/angle/checkout/src/libGLESv2/entry_points_egl.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_egl_ext.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_egl_ext.h
gfx/angle/checkout/src/libGLESv2/entry_points_enum_autogen.h
gfx/angle/checkout/src/libGLESv2/entry_points_gles_1_0_autogen.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_3_1_autogen.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_ext_autogen.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_ext_autogen.h
gfx/angle/checkout/src/libGLESv2/entry_points_utils.h
gfx/angle/checkout/src/libGLESv2/global_state.cpp
gfx/angle/checkout/src/libGLESv2/global_state.h
gfx/angle/checkout/src/libGLESv2/libGLESv2_autogen.cpp
gfx/angle/checkout/src/libGLESv2/libGLESv2_autogen.def
gfx/angle/checkout/src/libGLESv2/proc_table.h
gfx/angle/checkout/src/libGLESv2/proc_table_autogen.cpp
gfx/angle/checkout/src/libGLESv2/proc_table_egl.h
gfx/angle/checkout/src/libGLESv2/proc_table_egl_autogen.cpp
gfx/angle/checkout/src/third_party/trace_event/trace_event.h
gfx/angle/cherry_picks.txt
gfx/angle/targets/angle_common/moz.build
gfx/angle/targets/angle_gpu_info_util/moz.build
gfx/angle/targets/angle_image_util/moz.build
gfx/angle/targets/libANGLE/moz.build
gfx/angle/targets/libEGL/moz.build
gfx/angle/targets/libGLESv2/moz.build
gfx/angle/targets/preprocessor/moz.build
gfx/angle/targets/translator/moz.build
gfx/angle/update-angle.py
gfx/gl/GLContextProviderEGL.cpp
gfx/gl/GLContextTypes.h
gfx/gl/GLDefs.h
--- a/dom/canvas/WebGLContext.cpp
+++ b/dom/canvas/WebGLContext.cpp
@@ -477,23 +477,18 @@ bool WebGLContext::CreateAndInitGL(
   bool tryANGLE = false;
 
   if (forceEnabled) {
     flags |= gl::CreateContextFlags::FORCE_ENABLE_HARDWARE;
   }
 
   if (IsWebGL2()) {
     flags |= gl::CreateContextFlags::PREFER_ES3;
-  } else {
-    // Request and prefer ES2 context for WebGL1.
-    flags |= gl::CreateContextFlags::PREFER_EXACT_VERSION;
-
-    if (!StaticPrefs::webgl_1_allow_core_profiles()) {
-      flags |= gl::CreateContextFlags::REQUIRE_COMPAT_PROFILE;
-    }
+  } else if (!StaticPrefs::webgl_1_allow_core_profiles()) {
+    flags |= gl::CreateContextFlags::REQUIRE_COMPAT_PROFILE;
   }
 
   {
     auto powerPref = mOptions.powerPreference;
 
     // If "Use hardware acceleration when available" option is disabled:
     if (!gfxConfig::IsEnabled(Feature::HW_COMPOSITING)) {
       powerPref = dom::WebGLPowerPreference::Low_power;
--- a/dom/canvas/test/webgl-conf/generated-mochitest.ini
+++ b/dom/canvas/test/webgl-conf/generated-mochitest.ini
@@ -5323,16 +5323,17 @@ subsuite = webgl2-core
 subsuite = webgl2-core
 [generated/test_2_conformance2__rendering__draw-buffers-driver-hang.html]
 subsuite = webgl2-core
 [generated/test_2_conformance2__rendering__draw-buffers.html]
 subsuite = webgl2-core
 fail-if = (os == 'linux')
 [generated/test_2_conformance2__rendering__draw-with-integer-texture-base-level.html]
 subsuite = webgl2-core
+fail-if = (os == 'win' && processor != "aarch64") #aarch64 has unexpected pass in 1525750, also see 1536182
 [generated/test_2_conformance2__rendering__element-index-uint.html]
 subsuite = webgl2-core
 [generated/test_2_conformance2__rendering__framebuffer-completeness-draw-framebuffer.html]
 subsuite = webgl2-core
 [generated/test_2_conformance2__rendering__framebuffer-completeness-unaffected.html]
 subsuite = webgl2-core
 [generated/test_2_conformance2__rendering__framebuffer-texture-changing-base-level.html]
 subsuite = webgl2-core
@@ -8087,17 +8088,16 @@ subsuite = webgl2-ext
 [generated/test_2_conformance__glsl__misc__shader-with-while-loop.html]
 subsuite = webgl2-ext
 [generated/test_2_conformance__glsl__misc__shader-without-precision.frag.html]
 subsuite = webgl2-ext
 [generated/test_2_conformance__glsl__misc__shaders-with-constant-expression-loop-conditions.html]
 subsuite = webgl2-ext
 [generated/test_2_conformance__glsl__misc__shaders-with-invariance.html]
 subsuite = webgl2-ext
-fail-if = 1 # https://github.com/KhronosGroup/WebGL/pull/2908
 [generated/test_2_conformance__glsl__misc__shaders-with-mis-matching-uniforms.html]
 subsuite = webgl2-ext
 [generated/test_2_conformance__glsl__misc__shaders-with-mis-matching-varyings.html]
 subsuite = webgl2-ext
 [generated/test_2_conformance__glsl__misc__shaders-with-missing-varyings.html]
 subsuite = webgl2-ext
 [generated/test_2_conformance__glsl__misc__shaders-with-name-conflicts.html]
 subsuite = webgl2-ext
@@ -10817,16 +10817,17 @@ skip-if = (os == 'android')
 [generated/test_conformance__canvas__render-after-resize-test.html]
 subsuite = webgl1-core
 [generated/test_conformance__canvas__texture-bindings-unaffected-on-resize.html]
 subsuite = webgl1-core
 [generated/test_conformance__canvas__to-data-url-test.html]
 subsuite = webgl1-core
 [generated/test_conformance__canvas__viewport-unchanged-upon-resize.html]
 subsuite = webgl1-core
+skip-if = (os == 'mac')
 [generated/test_conformance__context__constants-and-properties.html]
 subsuite = webgl1-core
 [generated/test_conformance__context__context-attribute-preserve-drawing-buffer.html]
 subsuite = webgl1-core
 [generated/test_conformance__context__context-attributes-alpha-depth-stencil-antialias.html]
 subsuite = webgl1-core
 skip-if = (os == 'linux') || (os == 'android')
 [generated/test_conformance__context__context-creation-and-destruction.html]
@@ -11524,17 +11525,16 @@ subsuite = webgl1-ext
 [generated/test_conformance__glsl__misc__shader-with-while-loop.html]
 subsuite = webgl1-ext
 [generated/test_conformance__glsl__misc__shader-without-precision.frag.html]
 subsuite = webgl1-ext
 [generated/test_conformance__glsl__misc__shaders-with-constant-expression-loop-conditions.html]
 subsuite = webgl1-ext
 [generated/test_conformance__glsl__misc__shaders-with-invariance.html]
 subsuite = webgl1-ext
-fail-if = 1 # https://github.com/KhronosGroup/WebGL/pull/2908
 [generated/test_conformance__glsl__misc__shaders-with-mis-matching-uniforms.html]
 subsuite = webgl1-ext
 [generated/test_conformance__glsl__misc__shaders-with-mis-matching-varyings.html]
 subsuite = webgl1-ext
 [generated/test_conformance__glsl__misc__shaders-with-missing-varyings.html]
 subsuite = webgl1-ext
 [generated/test_conformance__glsl__misc__shaders-with-name-conflicts.html]
 subsuite = webgl1-ext
--- a/dom/canvas/test/webgl-conf/mochitest-errata.ini
+++ b/dom/canvas/test/webgl-conf/mochitest-errata.ini
@@ -174,22 +174,16 @@ fail-if = 1
 [generated/test_2_conformance2__textures__video__tex-3d-rgb10_a2-rgba-unsigned_int_2_10_10_10_rev.html]
 fail-if = 1
 
 [generated/test_2_conformance2__textures__misc__tex-base-level-bug.html]
 fail-if = os == 'mac' && os_version == '10.14' # macosx1014 due to 1563418
 [generated/test_2_conformance2__textures__misc__tex-unpack-params-with-flip-y-and-premultiply-alpha.html]
 fail-if = 1
 
-[generated/test_conformance__glsl__misc__shaders-with-invariance.html]
-fail-if = 1 # https://github.com/KhronosGroup/WebGL/pull/2908
-
-[generated/test_2_conformance__glsl__misc__shaders-with-invariance.html]
-fail-if = 1 # https://github.com/KhronosGroup/WebGL/pull/2908
-
 ########################################################################
 # Complicated
 
 [generated/test_conformance__context__context-attributes-alpha-depth-stencil-antialias.html]
 # Asserts on linux debug. Crashes on Android.
 skip-if = (os == 'linux') || (os == 'android')
 
 [generated/test_conformance__extensions__webgl-draw-buffers.html]
@@ -1071,16 +1065,18 @@ skip-if = (os == 'win' && os_version == 
 skip-if = (os == 'win' && os_version == '6.1')
 [generated/test_2_conformance__extensions__webgl-compressed-texture-size-limit.html]
 # Frequent but intermittent timeout on win7. Bug 1404234
 skip-if = (os == 'win' && os_version == '6.1')
 [generated/test_2_conformance2__textures__misc__tex-input-validation.html]
 skip-if = (os == 'win')
 [generated/test_2_conformance2__buffers__get-buffer-sub-data.html]
 skip-if = (os == 'win')
+[generated/test_2_conformance2__rendering__draw-with-integer-texture-base-level.html]
+fail-if = (os == 'win' && processor != "aarch64") #aarch64 has unexpected pass in 1525750, also see 1536182
 [generated/test_2_conformance__rendering__preservedrawingbuffer-leak.html]
 skip-if = (os == 'win')
 [generated/test_conformance__context__context-size-change.html]
 skip-if = (os == 'win')
 [generated/test_conformance__rendering__preservedrawingbuffer-leak.html]
 skip-if = (os == 'win')
 [generated/test_2_conformance__misc__webgl-specific-stencil-settings.html]
 # [gl:0D6DE000] mozilla::gl::GLContext::raw_fDrawArrays: Generated unexpected GL_INVALID_OPERATION error. (0x0502)
--- a/gfx/angle/MERGE_BASE
+++ b/gfx/angle/MERGE_BASE
@@ -1,1 +1,1 @@
-chromium/3865
+chromium/3729
--- a/gfx/angle/checkout/include/EGL/egl.h
+++ b/gfx/angle/checkout/include/EGL/egl.h
@@ -28,26 +28,22 @@ extern "C" {
 ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
 */
 /*
 ** This header is generated from the Khronos EGL XML API Registry.
 ** The current version of the Registry, generator scripts
 ** used to make the header, and the header can be found at
 **   http://www.khronos.org/registry/egl
 **
-** Khronos $Git commit SHA1: d738c39fe2 $ on $Git commit date: 2019-06-14 16:17:31 -0600 $
+** Khronos $Git commit SHA1: 4136522c4d $ on $Git commit date: 2018-12-06 03:51:22 -0800 $
 */
 
 #include <EGL/eglplatform.h>
 
-#ifndef EGL_EGL_PROTOTYPES
-#define EGL_EGL_PROTOTYPES 1
-#endif
-
-/* Generated on date 20190716 */
+/* Generated on date 20181214 */
 
 /* Generated C header for:
  * API: egl
  * Versions considered: .*
  * Versions emitted: .*
  * Default extensions included: None
  * Additional extensions included: _nomatch_^
  * Extensions removed: _nomatch_^
--- a/gfx/angle/checkout/include/EGL/eglext_angle.h
+++ b/gfx/angle/checkout/include/EGL/eglext_angle.h
@@ -197,45 +197,11 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLG
 EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncValuesCHROMIUM(EGLDisplay dpy,
                                                              EGLSurface surface,
                                                              EGLuint64KHR *ust,
                                                              EGLuint64KHR *msc,
                                                              EGLuint64KHR *sbc);
 #endif
 #endif /* EGL_CHROMIUM_get_sync_values */
 
-#ifndef EGL_ANGLE_power_preference
-#define EGL_ANGLE_power_preference 1
-#define EGL_POWER_PREFERENCE_ANGLE 0x3482
-#define EGL_LOW_POWER_ANGLE 0x0001
-#define EGL_HIGH_POWER_ANGLE 0x0002
-#endif /* EGL_ANGLE_power_preference */
-
-#ifndef EGL_ANGLE_feature_control
-#define EGL_ANGLE_feature_control 1
-#define EGL_FEATURE_NAME_ANGLE 0x3460
-#define EGL_FEATURE_CATEGORY_ANGLE 0x3461
-#define EGL_FEATURE_DESCRIPTION_ANGLE 0x3462
-#define EGL_FEATURE_BUG_ANGLE 0x3463
-#define EGL_FEATURE_STATUS_ANGLE 0x3464
-#define EGL_FEATURE_COUNT_ANGLE 0x3465
-#define EGL_FEATURE_OVERRIDES_ENABLED_ANGLE 0x3466
-#define EGL_FEATURE_OVERRIDES_DISABLED_ANGLE 0x3467
-typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGIANGLEPROC) (EGLDisplay dpy, EGLint name, EGLint index);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBANGLEPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI const char *EGLAPIENTRY eglQueryStringiANGLE(EGLDisplay dpy, EGLint name, EGLint index);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribANGLE(EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
-#endif
-#endif /* EGL_ANGLE_feature_control */
-
-#ifndef EGL_ANGLE_image_d3d11_texture
-#define EGL_D3D11_TEXTURE_ANGLE 0x3484
-#endif /* EGL_ANGLE_image_d3d11_texture */
-
-#ifndef EGL_ANGLE_create_context_backwards_compatible
-#define EGL_ANGLE_create_context_backwards_compatible 1
-#define EGL_CONTEXT_OPENGL_BACKWARDS_COMPATIBLE_ANGLE 0x3483
-#endif /* EGL_ANGLE_create_context_backwards_compatible */
-
 // clang-format on
 
 #endif  // INCLUDE_EGL_EGLEXT_ANGLE_
--- a/gfx/angle/checkout/include/GLES2/gl2ext_angle.h
+++ b/gfx/angle/checkout/include/GLES2/gl2ext_angle.h
@@ -655,31 +655,11 @@ GL_APICALL void GL_APIENTRY glMultiDrawE
 #ifndef GL_CHROMIUM_bind_uniform_location
 #define GL_CHROMIUM_bind_uniform_location 1
 typedef void (GL_APIENTRYP PFNGLBINDUNIFORMLOCATIONCHROMIUMPROC)(GLuint program, GLint location, const GLchar *name);
 #ifdef GL_GLEXT_PROTOTYPES
 GL_APICALL void GL_APIENTRY glBindUniformLocationCHROMIUM(GLuint program, GLint location, const GLchar *name);
 #endif
 #endif /* GL_CHROMIUM_bind_uniform_location */
 
-/* GL_CHROMIUM_lose_context */
-#ifndef GL_CHROMIUM_lose_context
-#define GL_CHROMIUM_lose_context 1
-#ifdef GL_GLEXT_PROTOTYPES
-GL_APICALL void GL_APIENTRY glLoseContextCHROMIUM(GLenum current, GLenum other);
-#endif
-typedef void (GL_APIENTRYP PFNGLLOSECONTEXTCHROMIUMPROC) (GLenum current, GLenum other);
-#endif  /* GL_CHROMIUM_lose_context */
-
-#ifndef GL_ANGLE_texture_external_update
-#define GL_ANGLE_texture_external_update 1
-#define GL_TEXTURE_NATIVE_ID_ANGLE 0x3481
-typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DEXTERNALANGLEPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type);
-typedef void (GL_APIENTRYP PFNGLINVALIDATETEXTUREANGLEPROC) (GLenum target);
-#ifdef GL_GLEXT_PROTOTYPES
-GL_APICALL void GL_APIENTRY glTexImage2DExternalANGLE (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type);
-GL_APICALL void GL_APIENTRY glInvalidateTextureANGLE (GLenum target);
-#endif
-#endif /* GL_ANGLE_texture_external_update */
-
 // clang-format on
 
 #endif  // INCLUDE_GLES2_GL2EXT_ANGLE_H_
--- a/gfx/angle/checkout/include/GLES2/gl2ext_explicit_context_autogen.inc
+++ b/gfx/angle/checkout/include/GLES2/gl2ext_explicit_context_autogen.inc
@@ -150,117 +150,90 @@ typedef void (GL_APIENTRYP PFNGLVERTEXAT
 typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVCONTEXTANGLEPROC)(GLeglContext ctx, GLuint index, const GLfloat *v);
 typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERCONTEXTANGLEPROC)(GLeglContext ctx, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
 typedef void (GL_APIENTRYP PFNGLVIEWPORTCONTEXTANGLEPROC)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
 typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLuint id);
 typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLuint color, const GLchar *name);
 typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
 typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint array);
 typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEMEMEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
-typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
-typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
-typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-typedef void (GL_APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, GLuint *memoryObjects);
 typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLDEBUGPROCKHR callback, const void *userParam);
 typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
 typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
 typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, const GLuint *fences);
-typedef void (GL_APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, const GLuint *memoryObjects);
 typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, const GLuint *ids);
-typedef void (GL_APIENTRYP PFNGLDELETESEMAPHORESEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, const GLuint *semaphores);
 typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, const GLuint *arrays);
 typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei numAttachments, const GLenum *attachments);
 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, GLint first, GLsizei count, GLsizei primcount);
 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, GLint start, GLsizei count, GLsizei primcount);
 typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, const GLenum *bufs);
 typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
 typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
 typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLeglImageOES image);
 typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLeglImageOES image);
 typedef void (GL_APIENTRYP PFNGLENDQUERYEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target);
 typedef void (GL_APIENTRYP PFNGLFINISHFENCENVCONTEXTANGLEPROC)(GLeglContext ctx, GLuint fence);
 typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length);
-typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level);
 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
 typedef void (GL_APIENTRYP PFNGLGENFENCESNVCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, GLuint *fences);
 typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, GLuint *ids);
-typedef void (GL_APIENTRYP PFNGLGENSEMAPHORESEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, GLuint *semaphores);
 typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei n, GLuint *arrays);
 typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum pname, void **params);
 typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
 typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVCONTEXTANGLEPROC)(GLeglContext ctx, GLuint fence, GLenum pname, GLint *params);
 typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATAINDEXEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, const GLchar *name);
 typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTCONTEXTANGLEPROC)(GLeglContext ctx);
-typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint memoryObject, GLenum pname, GLint *params);
 typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
 typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRCONTEXTANGLEPROC)(GLeglContext ctx, const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
 typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLenum pname, void **params);
 typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
 typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLenum programInterface, const GLchar *name);
 typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint id, GLenum pname, GLint64 *params);
 typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint id, GLenum pname, GLint *params);
 typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint id, GLenum pname, GLuint64 *params);
 typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint id, GLenum pname, GLuint *params);
 typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
 typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint sampler, GLenum pname, GLint *params);
 typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint sampler, GLenum pname, GLuint *params);
-typedef void (GL_APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint semaphore, GLenum pname, GLuint64 *params);
 typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
 typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum pname, GLuint *params);
 typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
-typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum pname, GLubyte *data);
-typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLuint index, GLubyte *data);
 typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
 typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLint *params);
-typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYFDEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
-typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint semaphore, GLenum handleType, GLint fd);
 typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei length, const GLchar *marker);
 typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVCONTEXTANGLEPROC)(GLeglContext ctx, GLuint fence);
-typedef GLboolean (GL_APIENTRYP PFNGLISMEMORYOBJECTEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint memoryObject);
 typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint id);
-typedef GLboolean (GL_APIENTRYP PFNGLISSEMAPHOREEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint semaphore);
 typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint array);
 typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum access);
 typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
 typedef void (GL_APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLuint count);
-typedef void (GL_APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint memoryObject, GLenum pname, const GLint *params);
 typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
 typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRCONTEXTANGLEPROC)(GLeglContext ctx, const void *ptr, GLsizei length, const GLchar *label);
 typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRCONTEXTANGLEPROC)(GLeglContext ctx);
 typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTCONTEXTANGLEPROC)(GLeglContext ctx);
 typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLenum binaryFormat, const void *binary, GLint length);
 typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRCONTEXTANGLEPROC)(GLeglContext ctx, GLenum source, GLuint id, GLsizei length, const GLchar *message);
 typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei length, const GLchar *marker);
 typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint id, GLenum target);
 typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
 typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint sampler, GLenum pname, const GLint *param);
 typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLuint sampler, GLenum pname, const GLuint *param);
-typedef void (GL_APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint semaphore, GLenum pname, const GLuint64 *params);
 typedef void (GL_APIENTRYP PFNGLSETFENCENVCONTEXTANGLEPROC)(GLeglContext ctx, GLuint fence, GLenum condition);
-typedef void (GL_APIENTRYP PFNGLSIGNALSEMAPHOREEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
 typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVCONTEXTANGLEPROC)(GLeglContext ctx, GLuint fence);
-typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
 typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum pname, const GLint *params);
 typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLenum pname, const GLuint *params);
 typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
 typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
 typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
 typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
-typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
-typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
-typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
-typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
-typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
 typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESCONTEXTANGLEPROC)(GLeglContext ctx, GLenum target);
 typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLuint index, GLuint divisor);
 typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint index, GLuint divisor);
-typedef void (GL_APIENTRYP PFNGLWAITSEMAPHOREEXTCONTEXTANGLEPROC)(GLeglContext ctx, GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
 typedef void (GL_APIENTRYP PFNGLBINDUNIFORMLOCATIONCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLuint program, GLint location, const GLchar* name);
 typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLenum components);
 typedef void (GL_APIENTRYP PFNGLMATRIXLOADFCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLenum matrixMode, const GLfloat * matrix);
 typedef void (GL_APIENTRYP PFNGLMATRIXLOADIDENTITYCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLenum matrixMode);
 typedef GLuint (GL_APIENTRYP PFNGLGENPATHSCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLsizei range);
 typedef void (GL_APIENTRYP PFNGLDELETEPATHSCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLuint first, GLsizei range);
 typedef GLboolean (GL_APIENTRYP PFNGLISPATHCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLuint path);
 typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void* coords);
@@ -358,19 +331,16 @@ typedef void (GL_APIENTRYP PFNGLGETTEXLE
 typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLfloat * params);
 typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, const GLint *firsts, const GLsizei *counts, GLsizei drawcount);
 typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSINSTANCEDANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, const GLint *firsts, const GLsizei *counts, const GLsizei *instanceCounts, GLsizei drawcount);
 typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, const GLsizei *counts, GLenum type, const GLvoid *const*indices, GLsizei drawcount);
 typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSINSTANCEDANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode, const GLsizei *counts, GLenum type, const GLvoid *const*indices, const GLsizei*instanceCounts, GLsizei drawcount);
 typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum pname, GLuint index, GLfloat * val);
 typedef void (GL_APIENTRYP PFNGLSAMPLEMASKIANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLuint maskNumber, GLbitfield mask);
 typedef void (GL_APIENTRYP PFNGLPROVOKINGVERTEXANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum mode);
-typedef void (GL_APIENTRYP PFNGLLOSECONTEXTCHROMIUMCONTEXTANGLEPROC)(GLeglContext ctx, GLenum current, GLenum other);
-typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DEXTERNALANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type);
-typedef void (GL_APIENTRYP PFNGLINVALIDATETEXTUREANGLECONTEXTANGLEPROC)(GLeglContext ctx, GLenum target);
 #ifdef GL_GLEXT_PROTOTYPES
 GL_APICALL void GL_APIENTRY glActiveTextureContextANGLE(GLeglContext ctx, GLenum texture);
 GL_APICALL void GL_APIENTRY glAttachShaderContextANGLE(GLeglContext ctx, GLuint program, GLuint shader);
 GL_APICALL void GL_APIENTRY glBindAttribLocationContextANGLE(GLeglContext ctx, GLuint program, GLuint index, const GLchar *name);
 GL_APICALL void GL_APIENTRY glBindBufferContextANGLE(GLeglContext ctx, GLenum target, GLuint buffer);
 GL_APICALL void GL_APIENTRY glBindFramebufferContextANGLE(GLeglContext ctx, GLenum target, GLuint framebuffer);
 GL_APICALL void GL_APIENTRY glBindRenderbufferContextANGLE(GLeglContext ctx, GLenum target, GLuint renderbuffer);
 GL_APICALL void GL_APIENTRY glBindTextureContextANGLE(GLeglContext ctx, GLenum target, GLuint texture);
@@ -509,117 +479,90 @@ GL_APICALL void GL_APIENTRY glVertexAttr
 GL_APICALL void GL_APIENTRY glVertexAttrib4fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v);
 GL_APICALL void GL_APIENTRY glVertexAttribPointerContextANGLE(GLeglContext ctx, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
 GL_APICALL void GL_APIENTRY glViewportContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
 GL_APICALL void GL_APIENTRY glBeginQueryEXTContextANGLE(GLeglContext ctx, GLenum target, GLuint id);
 GL_APICALL void GL_APIENTRY glBindFragDataLocationEXTContextANGLE(GLeglContext ctx, GLuint program, GLuint color, const GLchar *name);
 GL_APICALL void GL_APIENTRY glBindFragDataLocationIndexedEXTContextANGLE(GLeglContext ctx, GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
 GL_APICALL void GL_APIENTRY glBindVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array);
 GL_APICALL void GL_APIENTRY glBlitFramebufferANGLEContextANGLE(GLeglContext ctx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-GL_APICALL void GL_APIENTRY glBufferStorageMemEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
-GL_APICALL void GL_APIENTRY glCompressedTexImage3DOESContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
-GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOESContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
-GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOESContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-GL_APICALL void GL_APIENTRY glCreateMemoryObjectsEXTContextANGLE(GLeglContext ctx, GLsizei n, GLuint *memoryObjects);
 GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHRContextANGLE(GLeglContext ctx, GLDEBUGPROCKHR callback, const void *userParam);
 GL_APICALL void GL_APIENTRY glDebugMessageControlKHRContextANGLE(GLeglContext ctx, GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
 GL_APICALL void GL_APIENTRY glDebugMessageInsertKHRContextANGLE(GLeglContext ctx, GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
 GL_APICALL void GL_APIENTRY glDeleteFencesNVContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *fences);
-GL_APICALL void GL_APIENTRY glDeleteMemoryObjectsEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *memoryObjects);
 GL_APICALL void GL_APIENTRY glDeleteQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids);
-GL_APICALL void GL_APIENTRY glDeleteSemaphoresEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *semaphores);
 GL_APICALL void GL_APIENTRY glDeleteVertexArraysOESContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *arrays);
 GL_APICALL void GL_APIENTRY glDiscardFramebufferEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei numAttachments, const GLenum *attachments);
 GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLEContextANGLE(GLeglContext ctx, GLenum mode, GLint first, GLsizei count, GLsizei primcount);
 GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXTContextANGLE(GLeglContext ctx, GLenum mode, GLint start, GLsizei count, GLsizei primcount);
 GL_APICALL void GL_APIENTRY glDrawBuffersEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLenum *bufs);
 GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLEContextANGLE(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
 GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXTContextANGLE(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
 GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOESContextANGLE(GLeglContext ctx, GLenum target, GLeglImageOES image);
 GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOESContextANGLE(GLeglContext ctx, GLenum target, GLeglImageOES image);
 GL_APICALL void GL_APIENTRY glEndQueryEXTContextANGLE(GLeglContext ctx, GLenum target);
 GL_APICALL void GL_APIENTRY glFinishFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
 GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXTContextANGLE(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length);
-GL_APICALL void GL_APIENTRY glFramebufferTexture3DOESContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
 GL_APICALL void GL_APIENTRY glFramebufferTextureEXTContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level);
 GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewOVRContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
 GL_APICALL void GL_APIENTRY glGenFencesNVContextANGLE(GLeglContext ctx, GLsizei n, GLuint *fences);
 GL_APICALL void GL_APIENTRY glGenQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids);
-GL_APICALL void GL_APIENTRY glGenSemaphoresEXTContextANGLE(GLeglContext ctx, GLsizei n, GLuint *semaphores);
 GL_APICALL void GL_APIENTRY glGenVertexArraysOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *arrays);
 GL_APICALL void GL_APIENTRY glGetBufferPointervOESContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, void **params);
 GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHRContextANGLE(GLeglContext ctx, GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
 GL_APICALL void GL_APIENTRY glGetFenceivNVContextANGLE(GLeglContext ctx, GLuint fence, GLenum pname, GLint *params);
 GL_APICALL GLint GL_APIENTRY glGetFragDataIndexEXTContextANGLE(GLeglContext ctx, GLuint program, const GLchar *name);
 GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXTContextANGLE(GLeglContext ctx);
-GL_APICALL void GL_APIENTRY glGetMemoryObjectParameterivEXTContextANGLE(GLeglContext ctx, GLuint memoryObject, GLenum pname, GLint *params);
 GL_APICALL void GL_APIENTRY glGetObjectLabelKHRContextANGLE(GLeglContext ctx, GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
 GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHRContextANGLE(GLeglContext ctx, const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
 GL_APICALL void GL_APIENTRY glGetPointervKHRContextANGLE(GLeglContext ctx, GLenum pname, void **params);
 GL_APICALL void GL_APIENTRY glGetProgramBinaryOESContextANGLE(GLeglContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
 GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationIndexEXTContextANGLE(GLeglContext ctx, GLuint program, GLenum programInterface, const GLchar *name);
 GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXTContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLint64 *params);
 GL_APICALL void GL_APIENTRY glGetQueryObjectivEXTContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLint *params);
 GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXTContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLuint64 *params);
 GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXTContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLuint *params);
 GL_APICALL void GL_APIENTRY glGetQueryivEXTContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
 GL_APICALL void GL_APIENTRY glGetSamplerParameterIivOESContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLint *params);
 GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivOESContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLuint *params);
-GL_APICALL void GL_APIENTRY glGetSemaphoreParameterui64vEXTContextANGLE(GLeglContext ctx, GLuint semaphore, GLenum pname, GLuint64 *params);
 GL_APICALL void GL_APIENTRY glGetTexParameterIivOESContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
 GL_APICALL void GL_APIENTRY glGetTexParameterIuivOESContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLuint *params);
 GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLEContextANGLE(GLeglContext ctx, GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
-GL_APICALL void GL_APIENTRY glGetUnsignedBytevEXTContextANGLE(GLeglContext ctx, GLenum pname, GLubyte *data);
-GL_APICALL void GL_APIENTRY glGetUnsignedBytei_vEXTContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLubyte *data);
 GL_APICALL void GL_APIENTRY glGetnUniformfvEXTContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
 GL_APICALL void GL_APIENTRY glGetnUniformivEXTContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLint *params);
-GL_APICALL void GL_APIENTRY glImportMemoryFdEXTContextANGLE(GLeglContext ctx, GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
-GL_APICALL void GL_APIENTRY glImportSemaphoreFdEXTContextANGLE(GLeglContext ctx, GLuint semaphore, GLenum handleType, GLint fd);
 GL_APICALL void GL_APIENTRY glInsertEventMarkerEXTContextANGLE(GLeglContext ctx, GLsizei length, const GLchar *marker);
 GL_APICALL GLboolean GL_APIENTRY glIsFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
-GL_APICALL GLboolean GL_APIENTRY glIsMemoryObjectEXTContextANGLE(GLeglContext ctx, GLuint memoryObject);
 GL_APICALL GLboolean GL_APIENTRY glIsQueryEXTContextANGLE(GLeglContext ctx, GLuint id);
-GL_APICALL GLboolean GL_APIENTRY glIsSemaphoreEXTContextANGLE(GLeglContext ctx, GLuint semaphore);
 GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array);
 GL_APICALL void *GL_APIENTRY glMapBufferOESContextANGLE(GLeglContext ctx, GLenum target, GLenum access);
 GL_APICALL void *GL_APIENTRY glMapBufferRangeEXTContextANGLE(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
 GL_APICALL void GL_APIENTRY glMaxShaderCompilerThreadsKHRContextANGLE(GLeglContext ctx, GLuint count);
-GL_APICALL void GL_APIENTRY glMemoryObjectParameterivEXTContextANGLE(GLeglContext ctx, GLuint memoryObject, GLenum pname, const GLint *params);
 GL_APICALL void GL_APIENTRY glObjectLabelKHRContextANGLE(GLeglContext ctx, GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
 GL_APICALL void GL_APIENTRY glObjectPtrLabelKHRContextANGLE(GLeglContext ctx, const void *ptr, GLsizei length, const GLchar *label);
 GL_APICALL void GL_APIENTRY glPopDebugGroupKHRContextANGLE(GLeglContext ctx);
 GL_APICALL void GL_APIENTRY glPopGroupMarkerEXTContextANGLE(GLeglContext ctx);
 GL_APICALL void GL_APIENTRY glProgramBinaryOESContextANGLE(GLeglContext ctx, GLuint program, GLenum binaryFormat, const void *binary, GLint length);
 GL_APICALL void GL_APIENTRY glPushDebugGroupKHRContextANGLE(GLeglContext ctx, GLenum source, GLuint id, GLsizei length, const GLchar *message);
 GL_APICALL void GL_APIENTRY glPushGroupMarkerEXTContextANGLE(GLeglContext ctx, GLsizei length, const GLchar *marker);
 GL_APICALL void GL_APIENTRY glQueryCounterEXTContextANGLE(GLeglContext ctx, GLuint id, GLenum target);
 GL_APICALL void GL_APIENTRY glReadnPixelsEXTContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
 GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLEContextANGLE(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
 GL_APICALL void GL_APIENTRY glSamplerParameterIivOESContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, const GLint *param);
 GL_APICALL void GL_APIENTRY glSamplerParameterIuivOESContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, const GLuint *param);
-GL_APICALL void GL_APIENTRY glSemaphoreParameterui64vEXTContextANGLE(GLeglContext ctx, GLuint semaphore, GLenum pname, const GLuint64 *params);
 GL_APICALL void GL_APIENTRY glSetFenceNVContextANGLE(GLeglContext ctx, GLuint fence, GLenum condition);
-GL_APICALL void GL_APIENTRY glSignalSemaphoreEXTContextANGLE(GLeglContext ctx, GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
 GL_APICALL GLboolean GL_APIENTRY glTestFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
-GL_APICALL void GL_APIENTRY glTexImage3DOESContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
 GL_APICALL void GL_APIENTRY glTexParameterIivOESContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLint *params);
 GL_APICALL void GL_APIENTRY glTexParameterIuivOESContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLuint *params);
 GL_APICALL void GL_APIENTRY glTexStorage1DEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
 GL_APICALL void GL_APIENTRY glTexStorage2DEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
 GL_APICALL void GL_APIENTRY glTexStorage3DEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
 GL_APICALL void GL_APIENTRY glTexStorage3DMultisampleOESContextANGLE(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
-GL_APICALL void GL_APIENTRY glTexStorageMem2DEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
-GL_APICALL void GL_APIENTRY glTexStorageMem2DMultisampleEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
-GL_APICALL void GL_APIENTRY glTexStorageMem3DEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
-GL_APICALL void GL_APIENTRY glTexStorageMem3DMultisampleEXTContextANGLE(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
-GL_APICALL void GL_APIENTRY glTexSubImage3DOESContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
 GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOESContextANGLE(GLeglContext ctx, GLenum target);
 GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLEContextANGLE(GLeglContext ctx, GLuint index, GLuint divisor);
 GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXTContextANGLE(GLeglContext ctx, GLuint index, GLuint divisor);
-GL_APICALL void GL_APIENTRY glWaitSemaphoreEXTContextANGLE(GLeglContext ctx, GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
 GL_APICALL void GL_APIENTRY glBindUniformLocationCHROMIUMContextANGLE(GLeglContext ctx, GLuint program, GLint location, const GLchar* name);
 GL_APICALL void GL_APIENTRY glCoverageModulationCHROMIUMContextANGLE(GLeglContext ctx, GLenum components);
 GL_APICALL void GL_APIENTRY glMatrixLoadfCHROMIUMContextANGLE(GLeglContext ctx, GLenum matrixMode, const GLfloat * matrix);
 GL_APICALL void GL_APIENTRY glMatrixLoadIdentityCHROMIUMContextANGLE(GLeglContext ctx, GLenum matrixMode);
 GL_APICALL GLuint GL_APIENTRY glGenPathsCHROMIUMContextANGLE(GLeglContext ctx, GLsizei range);
 GL_APICALL void GL_APIENTRY glDeletePathsCHROMIUMContextANGLE(GLeglContext ctx, GLuint first, GLsizei range);
 GL_APICALL GLboolean GL_APIENTRY glIsPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path);
 GL_APICALL void GL_APIENTRY glPathCommandsCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void* coords);
@@ -717,12 +660,9 @@ GL_APICALL void GL_APIENTRY glGetTexLeve
 GL_APICALL void GL_APIENTRY glGetTexLevelParameterfvANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLfloat * params);
 GL_APICALL void GL_APIENTRY glMultiDrawArraysANGLEContextANGLE(GLeglContext ctx, GLenum mode, const GLint *firsts, const GLsizei *counts, GLsizei drawcount);
 GL_APICALL void GL_APIENTRY glMultiDrawArraysInstancedANGLEContextANGLE(GLeglContext ctx, GLenum mode, const GLint *firsts, const GLsizei *counts, const GLsizei *instanceCounts, GLsizei drawcount);
 GL_APICALL void GL_APIENTRY glMultiDrawElementsANGLEContextANGLE(GLeglContext ctx, GLenum mode, const GLsizei *counts, GLenum type, const GLvoid *const*indices, GLsizei drawcount);
 GL_APICALL void GL_APIENTRY glMultiDrawElementsInstancedANGLEContextANGLE(GLeglContext ctx, GLenum mode, const GLsizei *counts, GLenum type, const GLvoid *const*indices, const GLsizei*instanceCounts, GLsizei drawcount);
 GL_APICALL void GL_APIENTRY glGetMultisamplefvANGLEContextANGLE(GLeglContext ctx, GLenum pname, GLuint index, GLfloat * val);
 GL_APICALL void GL_APIENTRY glSampleMaskiANGLEContextANGLE(GLeglContext ctx, GLuint maskNumber, GLbitfield mask);
 GL_APICALL void GL_APIENTRY glProvokingVertexANGLEContextANGLE(GLeglContext ctx, GLenum mode);
-GL_APICALL void GL_APIENTRY glLoseContextCHROMIUMContextANGLE(GLeglContext ctx, GLenum current, GLenum other);
-GL_APICALL void GL_APIENTRY glTexImage2DExternalANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type);
-GL_APICALL void GL_APIENTRY glInvalidateTextureANGLEContextANGLE(GLeglContext ctx, GLenum target);
 #endif
--- a/gfx/angle/checkout/include/GLSLANG/ShaderLang.h
+++ b/gfx/angle/checkout/include/GLSLANG/ShaderLang.h
@@ -21,30 +21,28 @@
 // and the shading language compiler.
 //
 
 // Note: make sure to increment ANGLE_SH_VERSION when changing ShaderVars.h
 #include "ShaderVars.h"
 
 // Version number for shader translation API.
 // It is incremented every time the API changes.
-#define ANGLE_SH_VERSION 209
+#define ANGLE_SH_VERSION 205
 
 enum ShShaderSpec
 {
     SH_GLES2_SPEC,
     SH_WEBGL_SPEC,
 
     SH_GLES3_SPEC,
     SH_WEBGL2_SPEC,
 
     SH_GLES3_1_SPEC,
     SH_WEBGL3_SPEC,
-
-    SH_GL3_3_SPEC,
 };
 
 enum ShShaderOutput
 {
     // ESSL output only supported in some configurations.
     SH_ESSL_OUTPUT = 0x8B45,
 
     // GLSL output only supported in some configurations.
@@ -271,26 +269,16 @@ const ShCompileOptions SH_REWRITE_REPEAT
 // Rewrite gl_DrawID as a uniform int
 const ShCompileOptions SH_EMULATE_GL_DRAW_ID = UINT64_C(1) << 40;
 
 // This flag initializes shared variables to 0.
 // It is to avoid ompute shaders being able to read undefined values that could be coming from
 // another webpage/application.
 const ShCompileOptions SH_INIT_SHARED_VARIABLES = UINT64_C(1) << 41;
 
-// Forces the value returned from an atomic operations to be always be resolved. This is targeted to
-// workaround a bug in NVIDIA D3D driver where the return value from
-// RWByteAddressBuffer.InterlockedAdd does not get resolved when used in the .yzw components of a
-// RWByteAddressBuffer.Store operation. Only has an effect on HLSL translation.
-// http://anglebug.com/3246
-const ShCompileOptions SH_FORCE_ATOMIC_VALUE_RESOLUTION = UINT64_C(1) << 42;
-
-// Rewrite gl_BaseVertex and gl_BaseInstance as uniform int
-const ShCompileOptions SH_EMULATE_GL_BASE_VERTEX_BASE_INSTANCE = UINT64_C(1) << 43;
-
 // Defines alternate strategies for implementing array index clamping.
 enum ShArrayIndexClampingStrategy
 {
     // Use the clamp intrinsic for array index clamping.
     SH_CLAMP_WITH_CLAMP_INTRINSIC = 1,
 
     // Use a user-defined function for array index clamping.
     SH_CLAMP_WITH_USER_DEFINED_INT_CLAMP_FUNCTION
@@ -326,25 +314,22 @@ struct ShBuiltInResources
     int EXT_blend_func_extended;
     int EXT_draw_buffers;
     int EXT_frag_depth;
     int EXT_shader_texture_lod;
     int WEBGL_debug_shader_precision;
     int EXT_shader_framebuffer_fetch;
     int NV_shader_framebuffer_fetch;
     int ARM_shader_framebuffer_fetch;
-    int OVR_multiview;
     int OVR_multiview2;
     int EXT_YUV_target;
     int EXT_geometry_shader;
     int OES_texture_storage_multisample_2d_array;
-    int OES_texture_3D;
     int ANGLE_texture_multisample;
     int ANGLE_multi_draw;
-    int ANGLE_base_vertex_base_instance;
 
     // Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
     // with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
     // EXT_draw_buffers by using it in combination with GLES3.0 glDrawBuffers
     // function. This applies to Tegra K1 devices.
     int NV_draw_buffers;
 
     // Set to 1 if highp precision is supported in the ESSL 1.00 version of the
@@ -667,19 +652,11 @@ int GetGeometryShaderMaxVertices(const S
 
 //
 // Helper function to identify specs that are based on the WebGL spec.
 //
 inline bool IsWebGLBasedSpec(ShShaderSpec spec)
 {
     return (spec == SH_WEBGL_SPEC || spec == SH_WEBGL2_SPEC || spec == SH_WEBGL3_SPEC);
 }
-
-//
-// Helper function to identify DesktopGL specs
-//
-inline bool IsDesktopGLSpec(ShShaderSpec spec)
-{
-    return spec == SH_GL3_3_SPEC;
-}
 }  // namespace sh
 
 #endif  // GLSLANG_SHADERLANG_H_
deleted file mode 100644
--- a/gfx/angle/checkout/include/platform/Feature.h
+++ /dev/null
@@ -1,171 +0,0 @@
-//
-// Copyright 2019 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.
-//
-// Feature.h: Definition of structs to hold feature/workaround information.
-//
-
-#ifndef ANGLE_PLATFORM_FEATURE_H_
-#define ANGLE_PLATFORM_FEATURE_H_
-
-#include <map>
-#include <string>
-#include <vector>
-
-namespace angle
-{
-
-enum class FeatureCategory
-{
-    FrontendWorkarounds,
-    OpenGLWorkarounds,
-    D3DWorkarounds,
-    D3DCompilerWorkarounds,
-    VulkanWorkarounds,
-    VulkanFeatures,
-};
-
-constexpr char kFeatureCategoryFrontendWorkarounds[]    = "Frontend workarounds";
-constexpr char kFeatureCategoryOpenGLWorkarounds[]      = "OpenGL workarounds";
-constexpr char kFeatureCategoryD3DWorkarounds[]         = "D3D workarounds";
-constexpr char kFeatureCategoryD3DCompilerWorkarounds[] = "D3D compiler workarounds";
-constexpr char kFeatureCategoryVulkanWorkarounds[]      = "Vulkan workarounds";
-constexpr char kFeatureCategoryVulkanFeatures[]         = "Vulkan features";
-constexpr char kFeatureCategoryUnknown[]                = "Unknown";
-
-inline const char *FeatureCategoryToString(const FeatureCategory &fc)
-{
-    switch (fc)
-    {
-        case FeatureCategory::FrontendWorkarounds:
-            return kFeatureCategoryFrontendWorkarounds;
-            break;
-
-        case FeatureCategory::OpenGLWorkarounds:
-            return kFeatureCategoryOpenGLWorkarounds;
-            break;
-
-        case FeatureCategory::D3DWorkarounds:
-            return kFeatureCategoryD3DWorkarounds;
-            break;
-
-        case FeatureCategory::D3DCompilerWorkarounds:
-            return kFeatureCategoryD3DCompilerWorkarounds;
-            break;
-
-        case FeatureCategory::VulkanWorkarounds:
-            return kFeatureCategoryVulkanWorkarounds;
-            break;
-
-        case FeatureCategory::VulkanFeatures:
-            return kFeatureCategoryVulkanFeatures;
-            break;
-
-        default:
-            return kFeatureCategoryUnknown;
-            break;
-    }
-}
-
-constexpr char kFeatureStatusEnabled[]  = "enabled";
-constexpr char kFeatureStatusDisabled[] = "disabled";
-
-inline const char *FeatureStatusToString(const bool &status)
-{
-    if (status)
-    {
-        return kFeatureStatusEnabled;
-    }
-    return kFeatureStatusDisabled;
-}
-
-struct Feature;
-
-using FeatureMap  = std::map<std::string, Feature *>;
-using FeatureList = std::vector<const Feature *>;
-
-struct Feature
-{
-    Feature(const Feature &other);
-    Feature(const char *name,
-            const FeatureCategory &category,
-            const char *description,
-            FeatureMap *const mapPtr,
-            const char *bug);
-    ~Feature();
-
-    // The name of the workaround, lowercase, camel_case
-    const char *const name;
-
-    // The category that the workaround belongs to. Eg. "Vulkan workarounds"
-    const FeatureCategory category;
-
-    // A short description to be read by the user.
-    const char *const description;
-
-    // A link to the bug, if any
-    const char *const bug;
-
-    // Whether the workaround is enabled or not. Determined by heuristics like vendor ID and
-    // version, but may be overriden to any value.
-    bool enabled = false;
-};
-
-inline Feature::Feature(const Feature &other) = default;
-inline Feature::Feature(const char *name,
-                        const FeatureCategory &category,
-                        const char *description,
-                        FeatureMap *const mapPtr,
-                        const char *bug = "")
-    : name(name), category(category), description(description), bug(bug), enabled(false)
-{
-    if (mapPtr != nullptr)
-    {
-        (*mapPtr)[std::string(name)] = this;
-    }
-}
-
-inline Feature::~Feature() = default;
-
-struct FeatureSetBase
-{
-  public:
-    FeatureSetBase();
-    ~FeatureSetBase();
-
-  private:
-    // Non-copyable
-    FeatureSetBase(const FeatureSetBase &other) = delete;
-    FeatureSetBase &operator=(const FeatureSetBase &other) = delete;
-
-  protected:
-    FeatureMap members = FeatureMap();
-
-  public:
-    void overrideFeatures(const std::vector<std::string> &feature_names, const bool enabled)
-    {
-        for (const std::string &name : feature_names)
-        {
-            if (members.find(name) != members.end())
-            {
-                members[name]->enabled = enabled;
-            }
-        }
-    }
-
-    void populateFeatureList(FeatureList *features) const
-    {
-        for (FeatureMap::const_iterator it = members.begin(); it != members.end(); it++)
-        {
-            features->push_back(it->second);
-        }
-    }
-};
-
-inline FeatureSetBase::FeatureSetBase()  = default;
-inline FeatureSetBase::~FeatureSetBase() = default;
-
-}  // namespace angle
-
-#endif  // ANGLE_PLATFORM_WORKAROUND_H_
deleted file mode 100644
--- a/gfx/angle/checkout/include/platform/FeaturesD3D.h
+++ /dev/null
@@ -1,222 +0,0 @@
-//
-// Copyright (c) 2015 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.
-//
-
-// FeaturesD3D.h: Features and workarounds for D3D driver bugs and other issues.
-
-#ifndef ANGLE_PLATFORM_FEATURESD3D_H_
-#define ANGLE_PLATFORM_FEATURESD3D_H_
-
-#include "platform/Feature.h"
-
-namespace angle
-{
-
-// Workarounds attached to each shader. Do not need to expose information about these workarounds so
-// a simple bool struct suffices.
-struct CompilerWorkaroundsD3D
-{
-    bool skipOptimization = false;
-
-    bool useMaxOptimization = false;
-
-    // IEEE strictness needs to be enabled for NANs to work.
-    bool enableIEEEStrictness = false;
-};
-
-struct FeaturesD3D : FeatureSetBase
-{
-    FeaturesD3D();
-    ~FeaturesD3D();
-
-    // On some systems, having extra rendertargets than necessary slows down the shader.
-    // We can fix this by optimizing those out of the shader. At the same time, we can
-    // work around a bug on some nVidia drivers that they ignore "null" render targets
-    // in D3D11, by compacting the active color attachments list to omit null entries.
-    Feature mrtPerfWorkaround = {
-        "mrt_perf_workaround", FeatureCategory::D3DWorkarounds,
-        "Some NVIDIA D3D11 drivers have a bug where they ignore null render targets", &members};
-
-    Feature setDataFasterThanImageUpload = {"set_data_faster_than_image_upload",
-                                            FeatureCategory::D3DWorkarounds,
-                                            "Set data faster than image upload", &members};
-
-    // Some renderers can't disable mipmaps on a mipmapped texture (i.e. solely sample from level
-    // zero, and ignore the other levels). D3D11 Feature Level 10+ does this by setting MaxLOD to
-    // 0.0f in the Sampler state. D3D9 sets D3DSAMP_MIPFILTER to D3DTEXF_NONE. There is no
-    // equivalent to this in D3D11 Feature Level 9_3. This causes problems when (for example) an
-    // application creates a mipmapped texture2D, but sets GL_TEXTURE_MIN_FILTER to GL_NEAREST
-    // (i.e disables mipmaps). To work around this, D3D11 FL9_3 has to create two copies of the
-    // texture. The textures' level zeros are identical, but only one texture has mips.
-    Feature zeroMaxLodWorkaround = {
-        "zero_max_lod", FeatureCategory::D3DWorkarounds,
-        "D3D11 is missing an option to disable mipmaps on a mipmapped texture", &members};
-
-    // Some renderers do not support Geometry Shaders so the Geometry Shader-based PointSprite
-    // emulation will not work. To work around this, D3D11 FL9_3 has to use a different pointsprite
-    // emulation that is implemented using instanced quads.
-    Feature useInstancedPointSpriteEmulation = {
-        "use_instanced_point_sprite_emulation", FeatureCategory::D3DWorkarounds,
-        "Some D3D11 renderers do not support geometry shaders for pointsprite emulation", &members};
-
-    // A bug fixed in NVIDIA driver version 347.88 < x <= 368.81 triggers a TDR when using
-    // CopySubresourceRegion from a staging texture to a depth/stencil in D3D11. The workaround
-    // is to use UpdateSubresource to trigger an extra copy. We disable this workaround on newer
-    // NVIDIA driver versions because of a second driver bug present with the workaround enabled.
-    // (See: http://anglebug.com/1452)
-    Feature depthStencilBlitExtraCopy = {
-        "depth_stencil_blit_extra_copy", FeatureCategory::D3DWorkarounds,
-        "Bug in NVIDIA D3D11 Driver version <=347.88 and >368.81 triggers a TDR when using "
-        "CopySubresourceRegion from a staging texture to a depth/stencil",
-        &members, "http://anglebug.com/1452"};
-
-    // The HLSL optimizer has a bug with optimizing "pow" in certain integer-valued expressions.
-    // We can work around this by expanding the pow into a series of multiplies if we're running
-    // under the affected compiler.
-    Feature expandIntegerPowExpressions = {
-        "expand_integer_pow_expressions", FeatureCategory::D3DWorkarounds,
-        "The HLSL optimizer has a bug with optimizing 'pow' in certain integer-valued expressions",
-        &members};
-
-    // NVIDIA drivers sometimes write out-of-order results to StreamOut buffers when transform
-    // feedback is used to repeatedly write to the same buffer positions.
-    Feature flushAfterEndingTransformFeedback = {
-        "flush_after_ending_transform_feedback", FeatureCategory::D3DWorkarounds,
-        "NVIDIA drivers sometimes write out-of-order results to StreamOut buffers when transform "
-        "feedback is used to repeatedly write to the same buffer positions",
-        &members};
-
-    // Some drivers (NVIDIA) do not take into account the base level of the texture in the results
-    // of the HLSL GetDimensions builtin.
-    Feature getDimensionsIgnoresBaseLevel = {
-        "get_dimensions_ignores_base_level", FeatureCategory::D3DWorkarounds,
-        "Some NVIDIA drivers do not take into account the base level of the "
-        "texture in the results of the HLSL GetDimensions builtin",
-        &members};
-
-    // On some Intel drivers, HLSL's function texture.Load returns 0 when the parameter Location
-    // is negative, even if the sum of Offset and Location is in range. This may cause errors when
-    // translating GLSL's function texelFetchOffset into texture.Load, as it is valid for
-    // texelFetchOffset to use negative texture coordinates as its parameter P when the sum of P
-    // and Offset is in range. To work around this, we translate texelFetchOffset into texelFetch
-    // by adding Offset directly to Location before reading the texture.
-    Feature preAddTexelFetchOffsets = {
-        "pre_add_texel_fetch_offsets", FeatureCategory::D3DWorkarounds,
-        "On some Intel drivers, HLSL's function texture.Load returns 0 when the parameter Location "
-        "is negative, even if the sum of Offset and Location is in range",
-        &members};
-
-    // On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly.
-    // We can work around this bug by doing an internal blit to a temporary single-channel texture
-    // before we sample.
-    Feature emulateTinyStencilTextures = {
-        "emulate_tiny_stencil_textures", FeatureCategory::D3DWorkarounds,
-        "On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly",
-        &members};
-
-    // In Intel driver, the data with format DXGI_FORMAT_B5G6R5_UNORM will be parsed incorrectly.
-    // This workaroud will disable B5G6R5 support when it's Intel driver. By default, it will use
-    // R8G8B8A8 format. This bug is fixed in version 4539 on Intel drivers.
-    // On older AMD drivers, the data in DXGI_FORMAT_B5G6R5_UNORM becomes corrupted for unknown
-    // reasons.
-    Feature disableB5G6R5Support = {"disable_b5g6r5_support", FeatureCategory::D3DWorkarounds,
-                                    "On Intel and AMD drivers, textures with the format "
-                                    "DXGI_FORMAT_B5G6R5_UNORM have incorrect data",
-                                    &members};
-
-    // On some Intel drivers, evaluating unary minus operator on integer may get wrong answer in
-    // vertex shaders. To work around this bug, we translate -(int) into ~(int)+1.
-    // This driver bug is fixed in 20.19.15.4624.
-    Feature rewriteUnaryMinusOperator = {
-        "rewrite_unary_minus_operator", FeatureCategory::D3DWorkarounds,
-        "On some Intel drivers, evaluating unary minus operator on integer may "
-        "get wrong answer in vertex shaders",
-        &members};
-
-    // On some Intel drivers, using isnan() on highp float will get wrong answer. To work around
-    // this bug, we use an expression to emulate function isnan().
-    // Tracking bug: https://crbug.com/650547
-    // This driver bug is fixed in 21.20.16.4542.
-    Feature emulateIsnanFloat = {
-        "emulate_isnan_float", FeatureCategory::D3DWorkarounds,
-        "On some Intel drivers, using isnan() on highp float will get wrong answer", &members,
-        "https://crbug.com/650547"};
-
-    // On some Intel drivers, using clear() may not take effect. To work around this bug, we call
-    // clear() twice on these platforms.
-    // Tracking bug: https://crbug.com/655534
-    Feature callClearTwice = {"call_clear_twice", FeatureCategory::D3DWorkarounds,
-                              "On some Intel drivers, using clear() may not take effect", &members,
-                              "https://crbug.com/655534"};
-
-    // On some Intel drivers, copying from staging storage to constant buffer storage does not
-    // seem to work. Work around this by keeping system memory storage as a canonical reference
-    // for buffer data.
-    // D3D11-only workaround. See http://crbug.com/593024.
-    Feature useSystemMemoryForConstantBuffers = {
-        "use_system_memory_for_constant_buffers", FeatureCategory::D3DWorkarounds,
-        "On some Intel drivers, copying from staging storage to constant buffer "
-        "storage does not work",
-        &members, "https://crbug.com/593024"};
-
-    // This workaround is for the ANGLE_multiview extension. If enabled the viewport or render
-    // target slice will be selected in the geometry shader stage. The workaround flag is added to
-    // make it possible to select the code path in end2end and performance tests.
-    Feature selectViewInGeometryShader = {
-        "select_view_in_geometry_shader", FeatureCategory::D3DWorkarounds,
-        "The viewport or render target slice will be selected in the geometry shader stage for "
-        "the ANGLE_multiview extension",
-        &members};
-
-    // When rendering with no render target on D3D, two bugs lead to incorrect behavior on Intel
-    // drivers < 4815. The rendering samples always pass neglecting discard statements in pixel
-    // shader.
-    // 1. If rendertarget is not set, the pixel shader will be recompiled to drop 'SV_TARGET'.
-    // When using a pixel shader with no 'SV_TARGET' in a draw, the pixels are always generated even
-    // if they should be discard by 'discard' statements.
-    // 2. If ID3D11BlendState.RenderTarget[].RenderTargetWriteMask is 0 and rendertarget is not set,
-    // then rendering samples also pass neglecting discard statements in pixel shader.
-    // So we add a dummy texture as render target in such case. See http://anglebug.com/2152
-    Feature addDummyTextureNoRenderTarget = {
-        "add_dummy_texture_no_render_target", FeatureCategory::D3DWorkarounds,
-        "On D3D ntel drivers <4815 when rendering with no render target, two "
-        "bugs lead to incorrect behavior",
-        &members, "http://anglebug.com/2152"};
-
-    // Don't use D3D constant register zero when allocating space for uniforms in the vertex shader.
-    // This is targeted to work around a bug in NVIDIA D3D driver version 388.59 where in very
-    // specific cases the driver would not handle constant register zero correctly.
-    Feature skipVSConstantRegisterZero = {
-        "skip_vs_constant_register_zero", FeatureCategory::D3DWorkarounds,
-        "On NVIDIA D3D driver v388.59 in specific cases the driver doesn't "
-        "handle constant register zero correctly",
-        &members};
-
-    // Forces the value returned from an atomic operations to be always be resolved. This is
-    // targeted to workaround a bug in NVIDIA D3D driver where the return value from
-    // RWByteAddressBuffer.InterlockedAdd does not get resolved when used in the .yzw components of
-    // a RWByteAddressBuffer.Store operation. Only has an effect on HLSL translation.
-    // http://anglebug.com/3246
-    Feature forceAtomicValueResolution = {
-        "force_atomic_value_resolution", FeatureCategory::D3DWorkarounds,
-        "On an NVIDIA D3D driver, the return value from RWByteAddressBuffer.InterlockedAdd does "
-        "not resolve when used in the .yzw components of a RWByteAddressBuffer.Store operation",
-        &members, "http://anglebug.com/3246"};
-
-    // Match chromium's robust resource init behaviour by always prefering to upload texture data
-    // instead of clearing. Clear calls have been observed to cause texture corruption for some
-    // formats.
-    Feature allowClearForRobustResourceInit = {
-        "allow_clear_for_robust_resource_init", FeatureCategory::D3DWorkarounds,
-        "Some drivers corrupt texture data when clearing for robust resource initialization.",
-        &members, "http://crbug.com/941620"};
-};
-
-inline FeaturesD3D::FeaturesD3D()  = default;
-inline FeaturesD3D::~FeaturesD3D() = default;
-
-}  // namespace angle
-
-#endif  // ANGLE_PLATFORM_FEATURESD3D_H_
deleted file mode 100644
--- a/gfx/angle/checkout/include/platform/FeaturesGL.h
+++ /dev/null
@@ -1,341 +0,0 @@
-//
-// Copyright (c) 2015 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.h: 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();
-
-    // When writing a float to a normalized integer framebuffer, desktop OpenGL is allowed to write
-    // one of the two closest normalized integer representations (although round to nearest is
-    // preferred) (see section 2.3.5.2 of the GL 4.5 core specification). OpenGL ES requires that
-    // round-to-nearest is used (see "Conversion from Floating-Point to Framebuffer Fixed-Point" in
-    // section 2.1.2 of the OpenGL ES 2.0.25 spec).  This issue only shows up on Intel and AMD
-    // drivers on framebuffer formats that have 1-bit alpha, work around this by using higher
-    // precision formats instead.
-    Feature avoid1BitAlphaTextureFormats = {
-        "avoid_1_bit_alpha_texture_formats", FeatureCategory::OpenGLWorkarounds,
-        "Issue on Intel and AMD drivers with 1-bit alpha framebuffer formats", &members};
-
-    // On some older Intel drivers, GL_RGBA4 is not color renderable, glCheckFramebufferStatus
-    // returns GL_FRAMEBUFFER_UNSUPPORTED. Work around this by using a known color-renderable
-    // format.
-    Feature rgba4IsNotSupportedForColorRendering = {
-        "rgba4_is_not_supported_for_color_rendering", FeatureCategory::OpenGLWorkarounds,
-        "Issue on older Intel drivers, GL_RGBA4 is not color renderable", &members};
-
-    // When clearing a framebuffer on Intel or AMD drivers, when GL_FRAMEBUFFER_SRGB is enabled, the
-    // driver clears to the linearized clear color despite the framebuffer not supporting SRGB
-    // blending.  It only seems to do this when the framebuffer has only linear attachments, mixed
-    // attachments appear to get the correct clear color.
-    Feature doesSRGBClearsOnLinearFramebufferAttachments = {
-        "does_srgb_clears_on_linear_framebuffer_attachments", FeatureCategory::OpenGLWorkarounds,
-        "Issue clearing framebuffers with linear attachments on Intel or AMD "
-        "drivers when GL_FRAMEBUFFER_SRGB is enabled",
-        &members};
-
-    // On Mac some GLSL constructs involving do-while loops cause GPU hangs, such as the following:
-    //  int i = 1;
-    //  do {
-    //      i --;
-    //      continue;
-    //  } while (i > 0)
-    // Work around this by rewriting the do-while to use another GLSL construct (block + while)
-    Feature doWhileGLSLCausesGPUHang = {
-        "do_while_glsl_causes_gpu_hang", FeatureCategory::OpenGLWorkarounds,
-        "On Mac, some GLSL constructs involving do-while loops cause GPU hangs", &members};
-
-    // Calling glFinish doesn't cause all queries to report that the result is available on some
-    // (NVIDIA) drivers.  It was found that enabling GL_DEBUG_OUTPUT_SYNCHRONOUS before the finish
-    // causes it to fully finish.
-    Feature finishDoesNotCauseQueriesToBeAvailable = {
-        "finish_does_not_cause_queries_to_be_available", FeatureCategory::OpenGLWorkarounds,
-        "On some NVIDIA drivers, glFinish doesn't cause all queries to report available result",
-        &members};
-
-    // Always call useProgram after a successful link to avoid a driver bug.
-    // This workaround is meant to reproduce the use_current_program_after_successful_link
-    // workaround in Chromium (http://crbug.com/110263). It has been shown that this workaround is
-    // not necessary for MacOSX 10.9 and higher (http://crrev.com/39eb535b).
-    Feature alwaysCallUseProgramAfterLink = {
-        "always_call_use_program_after_link", FeatureCategory::OpenGLWorkarounds,
-        "Always call useProgram after a successful link to avoid a driver bug", &members};
-
-    // In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row.
-    Feature unpackOverlappingRowsSeparatelyUnpackBuffer = {
-        "unpack_overlapping_rows_separately_unpack_buffer", FeatureCategory::OpenGLWorkarounds,
-        "In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row",
-        &members};
-
-    // In the case of packing to a pixel pack buffer, pack overlapping rows row by row.
-    Feature packOverlappingRowsSeparatelyPackBuffer = {
-        "pack_overlapping_rows_separately_pack_buffer", FeatureCategory::OpenGLWorkarounds,
-        "In the case of packing to a pixel pack buffer, pack overlapping rows row by row",
-        &members};
-
-    // During initialization, assign the current vertex attributes to the spec-mandated defaults.
-    Feature initializeCurrentVertexAttributes = {
-        "initialize_current_vertex_attributes", FeatureCategory::OpenGLWorkarounds,
-        "During initialization, assign the current vertex attributes to the spec-mandated defaults",
-        &members};
-
-    // abs(i) where i is an integer returns unexpected result on Intel Mac.
-    // Emulate abs(i) with i * sign(i).
-    Feature emulateAbsIntFunction = {
-        "emulate_abs_int_function", FeatureCategory::OpenGLWorkarounds,
-        "On Intel Mac, abs(i) where i is an integer returns unexpected result", &members};
-
-    // On Intel Mac, calculation of loop conditions in for and while loop has bug.
-    // Add "&& true" to the end of the condition expression to work around the bug.
-    Feature addAndTrueToLoopCondition = {
-        "add_and_true_to_loop_condition", FeatureCategory::OpenGLWorkarounds,
-        "On Intel Mac, calculation of loop conditions in for and while loop has bug", &members};
-
-    // When uploading textures from an unpack buffer, some drivers count an extra row padding when
-    // checking if the pixel unpack buffer is big enough. Tracking bug: http://anglebug.com/1512
-    // For example considering the pixel buffer below where in memory, each row data (D) of the
-    // texture is followed by some unused data (the dots):
-    //     +-------+--+
-    //     |DDDDDDD|..|
-    //     |DDDDDDD|..|
-    //     |DDDDDDD|..|
-    //     |DDDDDDD|..|
-    //     +-------A--B
-    // The last pixel read will be A, but the driver will think it is B, causing it to generate an
-    // error when the pixel buffer is just big enough.
-    Feature unpackLastRowSeparatelyForPaddingInclusion = {
-        "unpack_last_row_separately_for_padding_inclusion", FeatureCategory::OpenGLWorkarounds,
-        "When uploading textures from an unpack buffer, some drivers count an extra row padding",
-        &members};
-
-    // Equivalent workaround when uploading data from a pixel pack buffer.
-    Feature packLastRowSeparatelyForPaddingInclusion = {
-        "pack_last_row_separately_for_padding_inclusion", FeatureCategory::OpenGLWorkarounds,
-        "When uploading textures from an pack buffer, some drivers count an extra row padding",
-        &members};
-
-    // On some Intel drivers, using isnan() on highp float will get wrong answer. To work around
-    // this bug, we use an expression to emulate function isnan().
-    // Tracking bug: http://crbug.com/650547
-    Feature emulateIsnanFloat = {
-        "emulate_isnan_float", FeatureCategory::OpenGLWorkarounds,
-        "On some Intel drivers, using isnan() on highp float will get wrong answer", &members};
-
-    // On Mac with OpenGL version 4.1, unused std140 or shared uniform blocks will be
-    // treated as inactive which is not consistent with WebGL2.0 spec. Reference all members in a
-    // unused std140 or shared uniform block at the beginning of main to work around it.
-    // Also used on Linux AMD.
-    Feature useUnusedBlocksWithStandardOrSharedLayout = {
-        "use_unused_blocks_with_standard_or_shared_layout", FeatureCategory::OpenGLWorkarounds,
-        "On Mac with OpenGL version 4.1 and Linux AMD, unused std140 or shared uniform blocks "
-        "will be treated as inactive",
-        &members};
-
-    // This flag is used to fix spec difference between GLSL 4.1 or lower and ESSL3.
-    Feature removeInvariantAndCentroidForESSL3 = {
-        "remove_invarient_and_centroid_for_essl3", FeatureCategory::OpenGLWorkarounds,
-        "Fix spec difference between GLSL 4.1 or lower and ESSL3", &members};
-
-    // On Intel Mac OSX 10.11 driver, using "-float" will get wrong answer. Use "0.0 - float" to
-    // replace "-float".
-    // Tracking bug: http://crbug.com/308366
-    Feature rewriteFloatUnaryMinusOperator = {
-        "rewrite_float_unary_minus_operator", FeatureCategory::OpenGLWorkarounds,
-        "On Intel Mac OSX 10.11 driver, using '-<float>' will get wrong answer", &members,
-        "http://crbug.com/308366"};
-
-    // On NVIDIA drivers, atan(y, x) may return a wrong answer.
-    // Tracking bug: http://crbug.com/672380
-    Feature emulateAtan2Float = {"emulate_atan_2_float", FeatureCategory::OpenGLWorkarounds,
-                                 "On NVIDIA drivers, atan(y, x) may return a wrong answer",
-                                 &members, "http://crbug.com/672380"};
-
-    // Some drivers seem to forget about UBO bindings when using program binaries. Work around
-    // this by re-applying the bindings after the program binary is loaded or saved.
-    // This only seems to affect AMD OpenGL drivers, and some Android devices.
-    // http://anglebug.com/1637
-    Feature reapplyUBOBindingsAfterUsingBinaryProgram = {
-        "reapply_ubo_bindings_after_using_binary_program", FeatureCategory::OpenGLWorkarounds,
-        "Some AMD OpenGL drivers and Android devices forget about UBO bindings "
-        "when using program binaries",
-        &members, "http://anglebug.com/1637"};
-
-    // Some OpenGL drivers return 0 when we query MAX_VERTEX_ATTRIB_STRIDE in an OpenGL 4.4 or
-    // higher context.
-    // This only seems to affect AMD OpenGL drivers.
-    // Tracking bug: http://anglebug.com/1936
-    Feature emulateMaxVertexAttribStride = {
-        "emulate_max_vertex_attrib_stride", FeatureCategory::OpenGLWorkarounds,
-        "Some AMD OpenGL >= 4.4 drivers return 0 when MAX_VERTEX_ATTRIB_STRIED queried", &members,
-        "http://anglebug.com/1936"};
-
-    // Initializing uninitialized locals caused odd behavior on Mac in a few WebGL 2 tests.
-    // Tracking bug: http://anglebug/2041
-    Feature dontInitializeUninitializedLocals = {
-        "dont_initialize_uninitialized_locals", FeatureCategory::OpenGLWorkarounds,
-        "On Mac initializing uninitialized locals caused odd behavior in a few WebGL 2 tests",
-        &members, "http://anglebug.com/2041"};
-
-    // On some NVIDIA drivers the point size range reported from the API is inconsistent with the
-    // actual behavior. Clamp the point size to the value from the API to fix this.
-    Feature clampPointSize = {
-        "clamp_point_size", FeatureCategory::OpenGLWorkarounds,
-        "On some NVIDIA drivers the point size range reported from the API is "
-        "inconsistent with the actual behavior",
-        &members};
-
-    // On some NVIDIA drivers certain types of GLSL arithmetic ops mixing vectors and scalars may be
-    // executed incorrectly. Change them in the shader translator. Tracking bug:
-    // http://crbug.com/772651
-    Feature rewriteVectorScalarArithmetic = {
-        "rewrite_vector_scalar_arithmetic", FeatureCategory::OpenGLWorkarounds,
-        "On some NVIDIA drivers certain types of GLSL arithmetic ops mixing "
-        "vectors and scalars may be executed incorrectly",
-        &members, "http://crbug.com/772651"};
-
-    // On some Android devices for loops used to initialize variables hit native GLSL compiler bugs.
-    Feature dontUseLoopsToInitializeVariables = {
-        "dont_use_loops_to_initialize_variables", FeatureCategory::OpenGLWorkarounds,
-        "On some Android devices for loops used to initialize variables hit "
-        "native GLSL compiler bugs",
-        &members};
-
-    // On some NVIDIA drivers gl_FragDepth is not clamped correctly when rendering to a floating
-    // point depth buffer. Clamp it in the translated shader to fix this.
-    Feature clampFragDepth = {"clamp_frag_depth", FeatureCategory::OpenGLWorkarounds,
-                              "On some NVIDIA drivers gl_FragDepth is not clamped correctly when "
-                              "rendering to a floating point depth buffer",
-                              &members};
-
-    // On some NVIDIA drivers before version 397.31 repeated assignment to swizzled values inside a
-    // GLSL user-defined function have incorrect results. Rewrite this type of statements to fix
-    // this.
-    Feature rewriteRepeatedAssignToSwizzled = {
-        "rewrite_repeated_assign_to_swizzled", FeatureCategory::OpenGLWorkarounds,
-        "On some NVIDIA drivers < v397.31, repeated assignment to swizzled "
-        "values inside a GLSL user-defined function have incorrect results",
-        &members};
-    // On some AMD and Intel GL drivers ARB_blend_func_extended does not pass the tests.
-    // It might be possible to work around the Intel bug by rewriting *FragData to *FragColor
-    // instead of disabling the functionality entirely. The AMD bug looked like incorrect blending,
-    // not sure if a workaround is feasible. http://anglebug.com/1085
-    Feature disableBlendFuncExtended = {
-        "disable_blend_func_extended", FeatureCategory::OpenGLWorkarounds,
-        "On some AMD and Intel GL drivers ARB_blend_func_extended does not pass the tests",
-        &members, "http://anglebug.com/1085"};
-
-    // Qualcomm drivers returns raw sRGB values instead of linearized values when calling
-    // glReadPixels on unsized sRGB texture formats. http://crbug.com/550292 and
-    // http://crbug.com/565179
-    Feature unsizedsRGBReadPixelsDoesntTransform = {
-        "unsized_srgb_read_pixels_doesnt_transform", FeatureCategory::OpenGLWorkarounds,
-        "Qualcomm drivers returns raw sRGB values instead of linearized values "
-        "when calling glReadPixels on unsized sRGB texture formats",
-        &members, "http://crbug.com/565179"};
-
-    // Older Qualcomm drivers generate errors when querying the number of bits in timer queries, ex:
-    // GetQueryivEXT(GL_TIME_ELAPSED, GL_QUERY_COUNTER_BITS).  http://anglebug.com/3027
-    Feature queryCounterBitsGeneratesErrors = {
-        "query_counter_bits_generates_errors", FeatureCategory::OpenGLWorkarounds,
-        "Older Qualcomm drivers generate errors when querying the number of bits in timer queries",
-        &members, "http://anglebug.com/3027"};
-
-    // Re-linking a program in parallel is buggy on some Intel Windows OpenGL drivers and Android
-    // platforms.
-    // http://anglebug.com/3045
-    Feature dontRelinkProgramsInParallel = {
-        "dont_relink_programs_in_parallel", FeatureCategory::OpenGLWorkarounds,
-        "On some Intel Windows OpenGL drivers and Android, relinking a program "
-        "in parallel is buggy",
-        &members, "http://anglebug.com/3045"};
-
-    // Some tests have been seen to fail using worker contexts, this switch allows worker contexts
-    // to be disabled for some platforms. http://crbug.com/849576
-    Feature disableWorkerContexts = {"disable_worker_contexts", FeatureCategory::OpenGLWorkarounds,
-                                     "Some tests have been seen to fail using worker contexts",
-                                     &members, "http://crbug.com/849576"};
-
-    // Most Android devices fail to allocate a texture that is larger than 4096. Limit the caps
-    // instead of generating GL_OUT_OF_MEMORY errors. Also causes system to hang on some older
-    // intel mesa drivers on Linux.
-    Feature limitMaxTextureSizeTo4096 = {"max_texture_size_limit_4096",
-                                         FeatureCategory::OpenGLWorkarounds,
-                                         "Limit max texture size to 4096 to avoid frequent "
-                                         "out-of-memory errors on Android or Intel Linux",
-                                         &members, "http://crbug.com/927470"};
-
-    // Prevent excessive MSAA allocations on Android devices, various rendering bugs have been
-    // observed and they tend to be high DPI anyways. http://crbug.com/797243
-    Feature limitMaxMSAASamplesTo4 = {
-        "max_msaa_sample_count_4", FeatureCategory::OpenGLWorkarounds,
-        "Various rendering bugs have been observed when using higher MSAA counts on Android",
-        &members, "http://crbug.com/797243"};
-
-    // Prefer to do the robust resource init clear using a glClear. Calls to TexSubImage2D on large
-    // textures can take hundreds of milliseconds because of slow uploads on macOS. Do this only on
-    // macOS because clears are buggy on other drivers.
-    // https://crbug.com/848952 (slow uploads on macOS)
-    // https://crbug.com/883276 (buggy clears on Android)
-    Feature allowClearForRobustResourceInit = {
-        "allow_clear_for_robust_resource_init", 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, "http://crbug.com/883276"};
-
-    // Some drivers automatically handle out-of-bounds uniform array access but others need manual
-    // clamping to satisfy the WebGL requirements.
-    Feature clampArrayAccess = {"clamp_array_access", FeatureCategory::OpenGLWorkarounds,
-                                "Clamp uniform array access to avoid reading invalid memory.",
-                                &members, "http://anglebug.com/2978"};
-
-    // Reset glTexImage2D base level to workaround pixel comparison failure above Mac OS 10.12.4 on
-    // Intel Mac.
-    Feature resetTexImage2DBaseLevel = {"reset_teximage2d_base_level",
-                                        FeatureCategory::OpenGLWorkarounds,
-                                        "Reset texture base level before calling glTexImage2D to "
-                                        "work around pixel comparison failure.",
-                                        &members, "https://crbug.com/705865"};
-
-    // glClearColor does not always work on Intel 6xxx Mac drivers when the clear color made up of
-    // all zeros and ones.
-    Feature clearToZeroOrOneBroken = {
-        "clear_to_zero_or_one_broken", FeatureCategory::OpenGLWorkarounds,
-        "Clears when the clear color is all zeros or ones do not work.", &members,
-        "https://crbug.com/710443"};
-
-    // Some older Linux Intel mesa drivers will hang the system when allocating large textures. Fix
-    // this by capping the max texture size.
-    Feature limitMax3dArrayTextureSizeTo1024 = {
-        "max_3d_array_texture_size_1024", FeatureCategory::OpenGLWorkarounds,
-        "Limit max 3d texture size and max array texture layers to 1024 to avoid system hang on "
-        "older Intel Linux",
-        &members, "http://crbug.com/927470"};
-
-    // BlitFramebuffer has issues on some platforms with large source/dest texture sizes. This
-    // workaround adjusts the destination rectangle source and dest rectangle to fit within maximum
-    // twice the size of the framebuffer.
-    Feature adjustSrcDstRegionBlitFramebuffer = {
-        "adjust_src_dst_region_for_blitframebuffer", FeatureCategory::OpenGLWorkarounds,
-        "Many platforms have issues with blitFramebuffer when the parameters are large.", &members,
-        "http://crbug.com/830046"};
-};
-
-inline FeaturesGL::FeaturesGL()  = default;
-inline FeaturesGL::~FeaturesGL() = default;
-
-}  // namespace angle
-
-#endif  // ANGLE_PLATFORM_FEATURESGL_H_
--- a/gfx/angle/checkout/include/platform/FeaturesVk.h
+++ b/gfx/angle/checkout/include/platform/FeaturesVk.h
@@ -4,191 +4,76 @@
 // found in the LICENSE file.
 //
 // FeaturesVk.h: Optional features for the Vulkan renderer.
 //
 
 #ifndef ANGLE_PLATFORM_FEATURESVK_H_
 #define ANGLE_PLATFORM_FEATURESVK_H_
 
-#include "platform/Feature.h"
-
 namespace angle
 {
 
-struct FeaturesVk : FeatureSetBase
+struct FeaturesVk
 {
     FeaturesVk();
-    ~FeaturesVk();
 
     // Line segment rasterization must follow OpenGL rules. This means using an algorithm similar
     // to Bresenham's. Vulkan uses a different algorithm. This feature enables the use of pixel
     // shader patching to implement OpenGL basic line rasterization rules. This feature will
     // normally always be enabled. Exposing it as an option enables performance testing.
-    Feature basicGLLineRasterization = {
-        "basic_gl_line_rasterization", FeatureCategory::VulkanFeatures,
-        "Enable the use of pixel shader patching to implement OpenGL basic line "
-        "rasterization rules",
-        &members};
+    bool basicGLLineRasterization = false;
 
     // Flips the viewport to render upside-down. This has the effect to render the same way as
     // OpenGL. If this feature gets enabled, we enable the KHR_MAINTENANCE_1 extension to allow
     // negative viewports. We inverse rendering to the backbuffer by reversing the height of the
     // viewport and increasing Y by the height. So if the viewport was (0,0,width,height), it
     // becomes (0, height, width, -height). Unfortunately, when we start doing this, we also need
     // to adjust a lot of places since the rendering now happens upside-down. Affected places so
     // far:
     // -readPixels
     // -copyTexImage
     // -framebuffer blit
     // -generating mipmaps
     // -Point sprites tests
     // -texStorage
-    Feature flipViewportY = {"flip_viewport_y", FeatureCategory::VulkanFeatures,
-                             "Flips the viewport to render upside-down", &members};
+    bool flipViewportY = false;
 
     // Add an extra copy region when using vkCmdCopyBuffer as the Windows Intel driver seems
     // to have a bug where the last region is ignored.
-    Feature extraCopyBufferRegion = {
-        "extra_copy_buffer_region", FeatureCategory::VulkanWorkarounds,
-        "Windows Intel driver seems to have a bug where the last copy region in "
-        "vkCmdCopyBuffer is ignored",
-        &members};
+    bool extraCopyBufferRegion = false;
 
     // This flag is added for the sole purpose of end2end tests, to test the correctness
     // of various algorithms when a fallback format is used, such as using a packed format to
     // emulate a depth- or stencil-only format.
-    Feature forceFallbackFormat = {"force_fallback_format", FeatureCategory::VulkanWorkarounds,
-                                   "Force a fallback format for angle_end2end_tests", &members};
+    bool forceFallbackFormat = false;
 
     // On some NVIDIA drivers the point size range reported from the API is inconsistent with the
     // actual behavior. Clamp the point size to the value from the API to fix this.
     // Tracked in http://anglebug.com/2970.
-    Feature clampPointSize = {
-        "clamp_point_size", FeatureCategory::VulkanWorkarounds,
-        "On some NVIDIA drivers, the point size range reported from the API is "
-        "inconsistent with the actual behavior",
-        &members, "http://anglebug.com/2970"};
+    bool clampPointSize = false;
 
     // On some android devices, the memory barrier between the compute shader that converts vertex
     // attributes and the vertex shader that reads from it is ineffective.  Only known workaround is
     // to perform a flush after the conversion.  http://anglebug.com/3016
-    Feature flushAfterVertexConversion = {
-        "flush_after_vertex_conversion", FeatureCategory::VulkanWorkarounds,
-        "On some android devices, the memory barrier between the compute shader that converts "
-        "vertex attributes and the vertex shader that reads from it is ineffective",
-        &members, "http://anglebug.com/3016"};
+    bool flushAfterVertexConversion = false;
 
     // Whether the VkDevice supports the VK_KHR_incremental_present extension, on which the
     // EGL_KHR_swap_buffers_with_damage extension can be layered.
-    Feature supportsIncrementalPresent = {
-        "supports_incremental_present", FeatureCategory::VulkanFeatures,
-        "VkDevice supports the VK_KHR_incremental_present extension", &members};
+    bool supportsIncrementalPresent = false;
 
     // Whether texture copies on cube map targets should be done on GPU.  This is a workaround for
     // Intel drivers on windows that have an issue with creating single-layer views on cube map
     // textures.
-    Feature forceCpuPathForCubeMapCopy = {
-        "force_cpu_path_for_cube_map_copy", FeatureCategory::VulkanWorkarounds,
-        "Some Intel Windows drivers have an issue with creating single-layer "
-        "views on cube map textures",
-        &members};
+    bool forceCpuPathForCubeMapCopy = false;
 
     // Whether the VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer
     // extension, on which the EGL_ANDROID_image_native_buffer extension can be layered.
-    Feature supportsAndroidHardwareBuffer = {
-        "supports_android_hardware_buffer", FeatureCategory::VulkanFeatures,
-        "VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension",
-        &members};
-
-    // Whether the VkDevice supports the VK_KHR_external_memory_fd extension, on which the
-    // GL_EXT_memory_object_fd extension can be layered.
-    Feature supportsExternalMemoryFd = {
-        "supports_external_memory_fd", FeatureCategory::VulkanFeatures,
-        "VkDevice supports the VK_KHR_external_memory_fd extension", &members};
-
-    // Whether the VkDevice supports the VK_KHR_external_semaphore_fd extension, on which the
-    // GL_EXT_semaphore_fd extension can be layered.
-    Feature supportsExternalSemaphoreFd = {
-        "supports_external_semaphore_fd", FeatureCategory::VulkanFeatures,
-        "VkDevice supports the VK_KHR_external_semaphore_fd extension", &members};
-
-    // Whether the VkDevice supports the VK_EXT_shader_stencil_export extension, which is used to
-    // perform multisampled resolve of stencil buffer.  A multi-step workaround is used instead if
-    // this extension is not available.
-    Feature supportsShaderStencilExport = {
-        "supports_shader_stencil_export", FeatureCategory::VulkanFeatures,
-        "VkDevice supports the VK_EXT_shader_stencil_export extension", &members};
-
-    // Where VK_EXT_transform_feedback is not support, an emulation path is used.
-    // http://anglebug.com/3205
-    Feature emulateTransformFeedback = {
-        "emulate_transform_feedback", FeatureCategory::VulkanFeatures,
-        "Emulate transform feedback as the VK_EXT_transform_feedback is not present.", &members,
-        "http://anglebug.com/3205"};
+    bool supportsAndroidHardwareBuffer = false;
 
     // VK_PRESENT_MODE_FIFO_KHR causes random timeouts on Linux Intel. http://anglebug.com/3153
-    Feature disableFifoPresentMode = {
-        "disable_fifo_present_mode", FeatureCategory::VulkanWorkarounds,
-        "On Linux Intel, VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members,
-        "http://anglebug.com/3153"};
-
-    // On Qualcomm, a bug is preventing us from using loadOp=Clear with inline commands in the
-    // render pass.  http://anglebug.com/2361
-    Feature restartRenderPassAfterLoadOpClear = {
-        "restart_render_pass_after_load_op_clear", FeatureCategory::VulkanWorkarounds,
-        "On Qualcomm, a bug is preventing us from using loadOp=Clear with inline "
-        "commands in the render pass",
-        &members, "http://anglebug.com/2361"};
-
-    // On Qualcomm, gaps in bound descriptor set indices causes the post-gap sets to misbehave.
-    // For example, binding only descriptor set 3 results in zero being read from a uniform buffer
-    // object within that set.  This flag results in empty descriptor sets being bound for any
-    // unused descriptor set to work around this issue.  http://anglebug.com/2727
-    Feature bindEmptyForUnusedDescriptorSets = {
-        "bind_empty_for_unused_descriptor_sets", FeatureCategory::VulkanWorkarounds,
-        "On Qualcomm, gaps in bound descriptor set indices causes the post-gap sets to misbehave",
-        &members, "http://anglebug.com/2727"};
-
-    // When the scissor is (0,0,0,0) on Windows Intel, the driver acts as if the scissor was
-    // disabled.  Work-around this by setting the scissor to just outside of the render area
-    // (e.g. (renderArea.x, renderArea.y, 1, 1)). http://anglebug.com/3407
-    Feature forceNonZeroScissor = {
-        "force_non_zero_scissor", FeatureCategory::VulkanWorkarounds,
-        "On Windows Intel, when the scissor is (0,0,0,0), the driver acts as if the "
-        "scissor was disabled",
-        &members, "http://anglebug.com/3407"};
-
-    // OES_depth_texture is a commonly expected feature on Android. However it
-    // requires that D16_UNORM support texture filtering
-    // (e.g. VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) and some devices
-    // do not. Work-around this by setting saying D16_UNORM supports filtering
-    // anyway.
-    Feature forceD16TexFilter = {"force_D16_texture_filter", FeatureCategory::VulkanWorkarounds,
-                                 "On some Android devices, VK_FORMAT_D16_UNORM does not support "
-                                 "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "
-                                 "which prevents OES_depth_texture from being supported.",
-                                 &members, "http://anglebug.com/3452"};
-
-    // On some android devices, vkCmdBlitImage with flipped coordinates blits incorrectly.  This
-    // workaround makes sure this path is avoided.  http://anglebug.com/3498
-    Feature disableFlippingBlitWithCommand = {
-        "disable_flipping_blit_with_command", FeatureCategory::VulkanWorkarounds,
-        "On some android devices, vkCmdBlitImage with flipped coordinates blits incorrectly.",
-        &members, "http://anglebug.com/3498"};
-
-    // On platform with Intel or AMD GPU, a window resizing would not trigger the vulkan driver to
-    // return VK_ERROR_OUT_OF_DATE on swapchain present.  Work-around by query current window extent
-    // every frame to detect a window resizing.
-    // http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625
-    Feature perFrameWindowSizeQuery = {
-        "per_frame_window_size_query", FeatureCategory::VulkanWorkarounds,
-        "On platform with Intel or AMD gpu, vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE"
-        "when window resizing",
-        &members, "http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625"};
+    bool disableFifoPresentMode = false;
 };
 
-inline FeaturesVk::FeaturesVk()  = default;
-inline FeaturesVk::~FeaturesVk() = default;
-
+inline FeaturesVk::FeaturesVk() = default;
 }  // namespace angle
 
 #endif  // ANGLE_PLATFORM_FEATURESVK_H_
deleted file mode 100644
--- a/gfx/angle/checkout/include/platform/FrontendFeatures.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Copyright (c) 2016 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.
-//
-
-// FrontendFeatures.h: Features/workarounds for driver bugs and other behaviors seen
-// on all platforms.
-
-#ifndef ANGLE_PLATFORM_FRONTENDFEATURES_H_
-#define ANGLE_PLATFORM_FRONTENDFEATURES_H_
-
-#include "platform/Feature.h"
-
-namespace angle
-{
-
-struct FrontendFeatures : angle::FeatureSetBase
-{
-    FrontendFeatures();
-    ~FrontendFeatures();
-
-    // Force the context to be lost (via KHR_robustness) if a GL_OUT_OF_MEMORY error occurs. The
-    // driver may be in an inconsistent state if this happens, and some users of ANGLE rely on this
-    // notification to prevent further execution.
-    angle::Feature loseContextOnOutOfMemory = {
-        "lose_context_on_out_of_memory", angle::FeatureCategory::FrontendWorkarounds,
-        "Some users rely on a lost context notification if a GL_OUT_OF_MEMORY "
-        "error occurs",
-        &members};
-
-    // Program binaries don't contain transform feedback varyings on Qualcomm GPUs.
-    // Work around this by disabling the program cache for programs with transform feedback.
-    angle::Feature disableProgramCachingForTransformFeedback = {
-        "disable_program_caching_for_transform_feedback",
-        angle::FeatureCategory::FrontendWorkarounds,
-        "On Qualcomm GPUs, program binaries don't contain transform feedback varyings", &members};
-
-    // On Windows Intel OpenGL drivers TexImage sometimes seems to interact with the Framebuffer.
-    // Flaky crashes can occur unless we sync the Framebuffer bindings. The workaround is to add
-    // Framebuffer binding dirty bits to TexImage updates. See http://anglebug.com/2906
-    angle::Feature syncFramebufferBindingsOnTexImage = {
-        "sync_framebuffer_bindings_on_tex_image", angle::FeatureCategory::FrontendWorkarounds,
-        "On Windows Intel OpenGL drivers TexImage sometimes seems to interact "
-        "with the Framebuffer",
-        &members};
-
-    angle::Feature scalarizeVecAndMatConstructorArgs = {
-        "scalarize_vec_and_mat_constructor_args", angle::FeatureCategory::FrontendWorkarounds,
-        "Always rewrite vec/mat constructors to be consistent", &members,
-        "http://crbug.com/398694"};
-};
-
-inline FrontendFeatures::FrontendFeatures()  = default;
-inline FrontendFeatures::~FrontendFeatures() = default;
-
-}  // namespace angle
-
-#endif  // ANGLE_PLATFORM_FRONTENDFEATURES_H_
--- a/gfx/angle/checkout/include/platform/Platform.h
+++ b/gfx/angle/checkout/include/platform/Platform.h
@@ -16,32 +16,31 @@
 
 #if defined(_WIN32)
 #    if !defined(LIBANGLE_IMPLEMENTATION)
 #        define ANGLE_PLATFORM_EXPORT __declspec(dllimport)
 #    else
 #        define ANGLE_PLATFORM_EXPORT __declspec(dllexport)
 #    endif
 #elif defined(__GNUC__) || defined(__clang__)
-// (miko): This visibility setting conflicts with the Firefox build system.
-// #    define ANGLE_PLATFORM_EXPORT __attribute__((visibility("default")))
+#    define ANGLE_PLATFORM_EXPORT __attribute__((visibility("default")))
 #endif
 #if !defined(ANGLE_PLATFORM_EXPORT)
 #    define ANGLE_PLATFORM_EXPORT
 #endif
 
 #if defined(_WIN32)
 #    define ANGLE_APIENTRY __stdcall
 #else
 #    define ANGLE_APIENTRY
 #endif
 
 namespace angle
 {
-struct FeaturesD3D;
+struct WorkaroundsD3D;
 struct FeaturesVk;
 using TraceEventHandle = uint64_t;
 using EGLDisplayType   = void *;
 struct PlatformMethods;
 
 // Use a C-like API to not trigger undefined calling behaviour.
 // Avoid using decltype here to work around sanitizer limitations.
 // TODO(jmadill): Use decltype here if/when UBSAN is fixed.
@@ -211,24 +210,25 @@ inline void DefaultHistogramEnumeration(
 using HistogramSparseFunc = void (*)(PlatformMethods *platform, const char *name, int sample);
 inline void DefaultHistogramSparse(PlatformMethods *platform, const char *name, int sample) {}
 // Boolean histograms track two-state variables.
 using HistogramBooleanFunc = void (*)(PlatformMethods *platform, const char *name, bool sample);
 inline void DefaultHistogramBoolean(PlatformMethods *platform, const char *name, bool sample) {}
 
 // Allows us to programatically override ANGLE's default workarounds for testing purposes.
 using OverrideWorkaroundsD3DFunc = void (*)(PlatformMethods *platform,
-                                            angle::FeaturesD3D *featuresD3D);
+                                            angle::WorkaroundsD3D *workaroundsD3D);
 inline void DefaultOverrideWorkaroundsD3D(PlatformMethods *platform,
-                                          angle::FeaturesD3D *featuresD3D)
+                                          angle::WorkaroundsD3D *workaroundsD3D)
 {}
 
 using OverrideFeaturesVkFunc = void (*)(PlatformMethods *platform,
-                                        angle::FeaturesVk *featuresVulkan);
-inline void DefaultOverrideFeaturesVk(PlatformMethods *platform, angle::FeaturesVk *featuresVulkan)
+                                        angle::FeaturesVk *workaroundsVulkan);
+inline void DefaultOverrideFeaturesVk(PlatformMethods *platform,
+                                      angle::FeaturesVk *workaroundsVulkan)
 {}
 
 // Callback on a successful program link with the program binary. Can be used to store
 // shaders to disk. Keys are a 160-bit SHA-1 hash.
 using ProgramKeyType   = std::array<uint8_t, 20>;
 using CacheProgramFunc = void (*)(PlatformMethods *platform,
                                   const ProgramKeyType &key,
                                   size_t programSize,
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/include/platform/WorkaroundsD3D.h
@@ -0,0 +1,141 @@
+//
+// Copyright (c) 2015 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.
+//
+
+// WorkaroundsD3D.h: Workarounds for D3D driver bugs and other issues.
+
+#ifndef ANGLE_PLATFORM_WORKAROUNDSD3D_H_
+#define ANGLE_PLATFORM_WORKAROUNDSD3D_H_
+
+// TODO(jmadill,zmo,geofflang): make a workarounds library that can operate
+// independent of ANGLE's renderer. Workarounds should also be accessible
+// outside of the Renderer.
+
+namespace angle
+{
+struct CompilerWorkaroundsD3D
+{
+    bool skipOptimization   = false;
+    bool useMaxOptimization = false;
+
+    // IEEE strictness needs to be enabled for NANs to work.
+    bool enableIEEEStrictness = false;
+};
+
+struct WorkaroundsD3D
+{
+    WorkaroundsD3D();
+    WorkaroundsD3D(const WorkaroundsD3D &other);
+
+    // On some systems, having extra rendertargets than necessary slows down the shader.
+    // We can fix this by optimizing those out of the shader. At the same time, we can
+    // work around a bug on some nVidia drivers that they ignore "null" render targets
+    // in D3D11, by compacting the active color attachments list to omit null entries.
+    bool mrtPerfWorkaround = false;
+
+    bool setDataFasterThanImageUpload = false;
+
+    // Some renderers can't disable mipmaps on a mipmapped texture (i.e. solely sample from level
+    // zero, and ignore the other levels). D3D11 Feature Level 10+ does this by setting MaxLOD to
+    // 0.0f in the Sampler state. D3D9 sets D3DSAMP_MIPFILTER to D3DTEXF_NONE. There is no
+    // equivalent to this in D3D11 Feature Level 9_3. This causes problems when (for example) an
+    // application creates a mipmapped texture2D, but sets GL_TEXTURE_MIN_FILTER to GL_NEAREST
+    // (i.e disables mipmaps). To work around this, D3D11 FL9_3 has to create two copies of the
+    // texture. The textures' level zeros are identical, but only one texture has mips.
+    bool zeroMaxLodWorkaround = false;
+
+    // Some renderers do not support Geometry Shaders so the Geometry Shader-based PointSprite
+    // emulation will not work. To work around this, D3D11 FL9_3 has to use a different pointsprite
+    // emulation that is implemented using instanced quads.
+    bool useInstancedPointSpriteEmulation = false;
+
+    // A bug fixed in NVIDIA driver version 347.88 < x <= 368.81 triggers a TDR when using
+    // CopySubresourceRegion from a staging texture to a depth/stencil in D3D11. The workaround
+    // is to use UpdateSubresource to trigger an extra copy. We disable this workaround on newer
+    // NVIDIA driver versions because of a second driver bug present with the workaround enabled.
+    // (See: http://anglebug.com/1452)
+    bool depthStencilBlitExtraCopy = false;
+
+    // The HLSL optimizer has a bug with optimizing "pow" in certain integer-valued expressions.
+    // We can work around this by expanding the pow into a series of multiplies if we're running
+    // under the affected compiler.
+    bool expandIntegerPowExpressions = false;
+
+    // NVIDIA drivers sometimes write out-of-order results to StreamOut buffers when transform
+    // feedback is used to repeatedly write to the same buffer positions.
+    bool flushAfterEndingTransformFeedback = false;
+
+    // Some drivers (NVIDIA) do not take into account the base level of the texture in the results
+    // of the HLSL GetDimensions builtin.
+    bool getDimensionsIgnoresBaseLevel = false;
+
+    // On some Intel drivers, HLSL's function texture.Load returns 0 when the parameter Location
+    // is negative, even if the sum of Offset and Location is in range. This may cause errors when
+    // translating GLSL's function texelFetchOffset into texture.Load, as it is valid for
+    // texelFetchOffset to use negative texture coordinates as its parameter P when the sum of P
+    // and Offset is in range. To work around this, we translate texelFetchOffset into texelFetch
+    // by adding Offset directly to Location before reading the texture.
+    bool preAddTexelFetchOffsets = false;
+
+    // On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly.
+    // We can work around this bug by doing an internal blit to a temporary single-channel texture
+    // before we sample.
+    bool emulateTinyStencilTextures = false;
+
+    // In Intel driver, the data with format DXGI_FORMAT_B5G6R5_UNORM will be parsed incorrectly.
+    // This workaroud will disable B5G6R5 support when it's Intel driver. By default, it will use
+    // R8G8B8A8 format. This bug is fixed in version 4539 on Intel drivers.
+    bool disableB5G6R5Support = false;
+
+    // On some Intel drivers, evaluating unary minus operator on integer may get wrong answer in
+    // vertex shaders. To work around this bug, we translate -(int) into ~(int)+1.
+    // This driver bug is fixed in 20.19.15.4624.
+    bool rewriteUnaryMinusOperator = false;
+
+    // On some Intel drivers, using isnan() on highp float will get wrong answer. To work around
+    // this bug, we use an expression to emulate function isnan().
+    // Tracking bug: https://crbug.com/650547
+    // This driver bug is fixed in 21.20.16.4542.
+    bool emulateIsnanFloat = false;
+
+    // On some Intel drivers, using clear() may not take effect. To work around this bug, we call
+    // clear() twice on these platforms.
+    // Tracking bug: https://crbug.com/655534
+    bool callClearTwice = false;
+
+    // On some Intel drivers, copying from staging storage to constant buffer storage does not
+    // seem to work. Work around this by keeping system memory storage as a canonical reference
+    // for buffer data.
+    // D3D11-only workaround. See http://crbug.com/593024.
+    bool useSystemMemoryForConstantBuffers = false;
+
+    // This workaround is for the ANGLE_multiview extension. If enabled the viewport or render
+    // target slice will be selected in the geometry shader stage. The workaround flag is added to
+    // make it possible to select the code path in end2end and performance tests.
+    bool selectViewInGeometryShader = false;
+
+    // When rendering with no render target on D3D, two bugs lead to incorrect behavior on Intel
+    // drivers < 4815. The rendering samples always pass neglecting discard statements in pixel
+    // shader.
+    // 1. If rendertarget is not set, the pixel shader will be recompiled to drop 'SV_TARGET'.
+    // When using a pixel shader with no 'SV_TARGET' in a draw, the pixels are always generated even
+    // if they should be discard by 'discard' statements.
+    // 2. If ID3D11BlendState.RenderTarget[].RenderTargetWriteMask is 0 and rendertarget is not set,
+    // then rendering samples also pass neglecting discard statements in pixel shader.
+    // So we add a dummy texture as render target in such case. See http://anglebug.com/2152
+    bool addDummyTextureNoRenderTarget = false;
+
+    // Don't use D3D constant register zero when allocating space for uniforms in the vertex shader.
+    // This is targeted to work around a bug in NVIDIA D3D driver version 388.59 where in very
+    // specific cases the driver would not handle constant register zero correctly.
+    bool skipVSConstantRegisterZero = false;
+};
+
+inline WorkaroundsD3D::WorkaroundsD3D()                            = default;
+inline WorkaroundsD3D::WorkaroundsD3D(const WorkaroundsD3D &other) = default;
+
+}  // namespace angle
+
+#endif  // ANGLE_PLATFORM_WORKAROUNDSD3D_H_
--- a/gfx/angle/checkout/out/gen/angle/id/commit.h
+++ b/gfx/angle/checkout/out/gen/angle/id/commit.h
@@ -1,3 +1,3 @@
-#define ANGLE_COMMIT_HASH "0f5a52939b91"
+#define ANGLE_COMMIT_HASH "21dccd386996"
 #define ANGLE_COMMIT_HASH_SIZE 12
-#define ANGLE_COMMIT_DATE "2019-09-03 21:51:25 +0200"
+#define ANGLE_COMMIT_DATE "2019-08-01 14:11:16 -0700"
--- a/gfx/angle/checkout/src/common/Color.h
+++ b/gfx/angle/checkout/src/common/Color.h
@@ -94,11 +94,11 @@ template <typename T>
 using Color        = angle::Color<T>;
 using ColorF       = angle::ColorF;
 using ColorI       = angle::ColorI;
 using ColorUI      = angle::ColorUI;
 using ColorGeneric = angle::ColorGeneric;
 
 }  // namespace gl
 
-#include "Color.inc"
+#include "Color.inl"
 
 #endif  // COMMON_COLOR_H_
rename from gfx/angle/checkout/src/common/Color.inc
rename to gfx/angle/checkout/src/common/Color.inl
--- a/gfx/angle/checkout/src/common/Color.inc
+++ b/gfx/angle/checkout/src/common/Color.inl
@@ -1,15 +1,15 @@
 //
 // Copyright (c) 2016 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.
 //
 
-// Color.inc : Inline definitions of some functions from Color.h
+// Color.inl : Inline definitions of some functions from Color.h
 
 namespace angle
 {
 
 template <typename T>
 Color<T>::Color() : Color(0, 0, 0, 0)
 {
 }
--- a/gfx/angle/checkout/src/common/FixedVector.h
+++ b/gfx/angle/checkout/src/common/FixedVector.h
@@ -59,17 +59,17 @@ class FixedVector final
     iterator begin();
     const_iterator begin() const;
 
     iterator end();
     const_iterator end() const;
 
     bool empty() const;
     size_type size() const;
-    static constexpr size_type max_size();
+    size_type max_size() const;
 
     void clear();
 
     void push_back(const value_type &value);
     void push_back(value_type &&value);
 
     void pop_back();
     reference back();
@@ -228,17 +228,17 @@ bool FixedVector<T, N, Storage>::empty()
 
 template <class T, size_t N, class Storage>
 typename FixedVector<T, N, Storage>::size_type FixedVector<T, N, Storage>::size() const
 {
     return mSize;
 }
 
 template <class T, size_t N, class Storage>
-constexpr typename FixedVector<T, N, Storage>::size_type FixedVector<T, N, Storage>::max_size()
+typename FixedVector<T, N, Storage>::size_type FixedVector<T, N, Storage>::max_size() const
 {
     return N;
 }
 
 template <class T, size_t N, class Storage>
 void FixedVector<T, N, Storage>::clear()
 {
     resize(0);
--- a/gfx/angle/checkout/src/common/PackedEGLEnums_autogen.cpp
+++ b/gfx/angle/checkout/src/common/PackedEGLEnums_autogen.cpp
@@ -42,36 +42,16 @@ EGLenum ToEGLenum(CompositorTiming from)
         case CompositorTiming::CompositToPresentLatency:
             return EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, CompositorTiming value)
-{
-    switch (value)
-    {
-        case CompositorTiming::CompositeDeadline:
-            os << "EGL_COMPOSITE_DEADLINE_ANDROID";
-            break;
-        case CompositorTiming::CompositInterval:
-            os << "EGL_COMPOSITE_INTERVAL_ANDROID";
-            break;
-        case CompositorTiming::CompositToPresentLatency:
-            os << "EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 MessageType FromEGLenum<MessageType>(EGLenum from)
 {
     switch (from)
     {
         case EGL_DEBUG_MSG_CRITICAL_KHR:
             return MessageType::Critical;
         case EGL_DEBUG_MSG_ERROR_KHR:
@@ -98,39 +78,16 @@ EGLenum ToEGLenum(MessageType from)
         case MessageType::Info:
             return EGL_DEBUG_MSG_INFO_KHR;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, MessageType value)
-{
-    switch (value)
-    {
-        case MessageType::Critical:
-            os << "EGL_DEBUG_MSG_CRITICAL_KHR";
-            break;
-        case MessageType::Error:
-            os << "EGL_DEBUG_MSG_ERROR_KHR";
-            break;
-        case MessageType::Warn:
-            os << "EGL_DEBUG_MSG_WARN_KHR";
-            break;
-        case MessageType::Info:
-            os << "EGL_DEBUG_MSG_INFO_KHR";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 ObjectType FromEGLenum<ObjectType>(EGLenum from)
 {
     switch (from)
     {
         case EGL_OBJECT_THREAD_KHR:
             return ObjectType::Thread;
         case EGL_OBJECT_DISPLAY_KHR:
@@ -169,48 +126,16 @@ EGLenum ToEGLenum(ObjectType from)
         case ObjectType::Stream:
             return EGL_OBJECT_STREAM_KHR;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, ObjectType value)
-{
-    switch (value)
-    {
-        case ObjectType::Thread:
-            os << "EGL_OBJECT_THREAD_KHR";
-            break;
-        case ObjectType::Display:
-            os << "EGL_OBJECT_DISPLAY_KHR";
-            break;
-        case ObjectType::Context:
-            os << "EGL_OBJECT_CONTEXT_KHR";
-            break;
-        case ObjectType::Surface:
-            os << "EGL_OBJECT_SURFACE_KHR";
-            break;
-        case ObjectType::Image:
-            os << "EGL_OBJECT_IMAGE_KHR";
-            break;
-        case ObjectType::Sync:
-            os << "EGL_OBJECT_SYNC_KHR";
-            break;
-        case ObjectType::Stream:
-            os << "EGL_OBJECT_STREAM_KHR";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureFormat FromEGLenum<TextureFormat>(EGLenum from)
 {
     switch (from)
     {
         case EGL_NO_TEXTURE:
             return TextureFormat::NoTexture;
         case EGL_TEXTURE_RGB:
@@ -233,36 +158,16 @@ EGLenum ToEGLenum(TextureFormat from)
         case TextureFormat::RGBA:
             return EGL_TEXTURE_RGBA;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureFormat value)
-{
-    switch (value)
-    {
-        case TextureFormat::NoTexture:
-            os << "EGL_NO_TEXTURE";
-            break;
-        case TextureFormat::RGB:
-            os << "EGL_TEXTURE_RGB";
-            break;
-        case TextureFormat::RGBA:
-            os << "EGL_TEXTURE_RGBA";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 Timestamp FromEGLenum<Timestamp>(EGLenum from)
 {
     switch (from)
     {
         case EGL_REQUESTED_PRESENT_TIME_ANDROID:
             return Timestamp::RequestedPresentTime;
         case EGL_RENDERING_COMPLETE_TIME_ANDROID:
@@ -309,47 +214,9 @@ EGLenum ToEGLenum(Timestamp from)
         case Timestamp::ReadsDoneTime:
             return EGL_READS_DONE_TIME_ANDROID;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, Timestamp value)
-{
-    switch (value)
-    {
-        case Timestamp::RequestedPresentTime:
-            os << "EGL_REQUESTED_PRESENT_TIME_ANDROID";
-            break;
-        case Timestamp::RenderingCompleteTime:
-            os << "EGL_RENDERING_COMPLETE_TIME_ANDROID";
-            break;
-        case Timestamp::CompositionLatchTime:
-            os << "EGL_COMPOSITION_LATCH_TIME_ANDROID";
-            break;
-        case Timestamp::FirstCompositionStartTime:
-            os << "EGL_FIRST_COMPOSITION_START_TIME_ANDROID";
-            break;
-        case Timestamp::LastCompositionStartTime:
-            os << "EGL_LAST_COMPOSITION_START_TIME_ANDROID";
-            break;
-        case Timestamp::FirstCompositionGPUFinishedTime:
-            os << "EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID";
-            break;
-        case Timestamp::DisplayPresentTime:
-            os << "EGL_DISPLAY_PRESENT_TIME_ANDROID";
-            break;
-        case Timestamp::DequeueReadyTime:
-            os << "EGL_DEQUEUE_READY_TIME_ANDROID";
-            break;
-        case Timestamp::ReadsDoneTime:
-            os << "EGL_READS_DONE_TIME_ANDROID";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 }  // namespace egl
--- a/gfx/angle/checkout/src/common/PackedEGLEnums_autogen.h
+++ b/gfx/angle/checkout/src/common/PackedEGLEnums_autogen.h
@@ -12,17 +12,16 @@
 #ifndef COMMON_PACKEDEGLENUMS_AUTOGEN_H_
 #define COMMON_PACKEDEGLENUMS_AUTOGEN_H_
 
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 #include <angle_gl.h>
 
 #include <cstdint>
-#include <ostream>
 
 namespace egl
 {
 
 template <typename Enum>
 Enum FromEGLenum(EGLenum from);
 
 enum class CompositorTiming : uint8_t
@@ -33,33 +32,31 @@ enum class CompositorTiming : uint8_t
 
     InvalidEnum = 3,
     EnumCount   = 3,
 };
 
 template <>
 CompositorTiming FromEGLenum<CompositorTiming>(EGLenum from);
 EGLenum ToEGLenum(CompositorTiming from);
-std::ostream &operator<<(std::ostream &os, CompositorTiming value);
 
 enum class MessageType : uint8_t
 {
     Critical = 0,
     Error    = 1,
     Warn     = 2,
     Info     = 3,
 
     InvalidEnum = 4,
     EnumCount   = 4,
 };
 
 template <>
 MessageType FromEGLenum<MessageType>(EGLenum from);
 EGLenum ToEGLenum(MessageType from);
-std::ostream &operator<<(std::ostream &os, MessageType value);
 
 enum class ObjectType : uint8_t
 {
     Thread  = 0,
     Display = 1,
     Context = 2,
     Surface = 3,
     Image   = 4,
@@ -68,32 +65,30 @@ enum class ObjectType : uint8_t
 
     InvalidEnum = 7,
     EnumCount   = 7,
 };
 
 template <>
 ObjectType FromEGLenum<ObjectType>(EGLenum from);
 EGLenum ToEGLenum(ObjectType from);
-std::ostream &operator<<(std::ostream &os, ObjectType value);
 
 enum class TextureFormat : uint8_t
 {
     NoTexture = 0,
     RGB       = 1,
     RGBA      = 2,
 
     InvalidEnum = 3,
     EnumCount   = 3,
 };
 
 template <>
 TextureFormat FromEGLenum<TextureFormat>(EGLenum from);
 EGLenum ToEGLenum(TextureFormat from);
-std::ostream &operator<<(std::ostream &os, TextureFormat value);
 
 enum class Timestamp : uint8_t
 {
     RequestedPresentTime            = 0,
     RenderingCompleteTime           = 1,
     CompositionLatchTime            = 2,
     FirstCompositionStartTime       = 3,
     LastCompositionStartTime        = 4,
@@ -104,13 +99,12 @@ enum class Timestamp : uint8_t
 
     InvalidEnum = 9,
     EnumCount   = 9,
 };
 
 template <>
 Timestamp FromEGLenum<Timestamp>(EGLenum from);
 EGLenum ToEGLenum(Timestamp from);
-std::ostream &operator<<(std::ostream &os, Timestamp value);
 
 }  // namespace egl
 
 #endif  // COMMON_PACKEDEGLENUMS_AUTOGEN_H_
--- a/gfx/angle/checkout/src/common/PackedEnums.cpp
+++ b/gfx/angle/checkout/src/common/PackedEnums.cpp
@@ -33,18 +33,16 @@ TextureType TextureTargetToType(TextureT
         case TextureTarget::_2DArray:
             return TextureType::_2DArray;
         case TextureTarget::_2DMultisample:
             return TextureType::_2DMultisample;
         case TextureTarget::_2DMultisampleArray:
             return TextureType::_2DMultisampleArray;
         case TextureTarget::_3D:
             return TextureType::_3D;
-        case TextureTarget::InvalidEnum:
-            return TextureType::InvalidEnum;
         default:
             UNREACHABLE();
             return TextureType::InvalidEnum;
     }
 }
 
 bool IsCubeMapFaceTarget(TextureTarget target)
 {
@@ -165,124 +163,16 @@ bool IsMultisampled(gl::TextureType type
         case gl::TextureType::_2DMultisample:
         case gl::TextureType::_2DMultisampleArray:
             return true;
         default:
             return false;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, PrimitiveMode value)
-{
-    switch (value)
-    {
-        case PrimitiveMode::LineLoop:
-            os << "GL_LINE_LOOP";
-            break;
-        case PrimitiveMode::Lines:
-            os << "GL_LINES";
-            break;
-        case PrimitiveMode::LinesAdjacency:
-            os << "GL_LINES_ADJACENCY";
-            break;
-        case PrimitiveMode::LineStrip:
-            os << "GL_LINE_STRIP";
-            break;
-        case PrimitiveMode::LineStripAdjacency:
-            os << "GL_LINE_STRIP_ADJANCENCY";
-            break;
-        case PrimitiveMode::Points:
-            os << "GL_POINTS";
-            break;
-        case PrimitiveMode::TriangleFan:
-            os << "GL_TRIANGLE_FAN";
-            break;
-        case PrimitiveMode::Triangles:
-            os << "GL_TRIANGLES";
-            break;
-        case PrimitiveMode::TrianglesAdjacency:
-            os << "GL_TRIANGLES_ADJANCENCY";
-            break;
-        case PrimitiveMode::TriangleStrip:
-            os << "GL_TRIANGLE_STRIP";
-            break;
-        case PrimitiveMode::TriangleStripAdjacency:
-            os << "GL_TRIANGLE_STRIP_ADJACENCY";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
-std::ostream &operator<<(std::ostream &os, DrawElementsType value)
-{
-    switch (value)
-    {
-        case DrawElementsType::UnsignedByte:
-            os << "GL_UNSIGNED_BYTE";
-            break;
-        case DrawElementsType::UnsignedShort:
-            os << "GL_UNSIGNED_SHORT";
-            break;
-        case DrawElementsType::UnsignedInt:
-            os << "GL_UNSIGNED_INT";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-
-    return os;
-}
-
-std::ostream &operator<<(std::ostream &os, VertexAttribType value)
-{
-    switch (value)
-    {
-        case VertexAttribType::Byte:
-            os << "GL_UNSIGNED_BYTE";
-            break;
-        case VertexAttribType::Fixed:
-            os << "GL_FIXED";
-            break;
-        case VertexAttribType::Float:
-            os << "GL_FLOAT";
-            break;
-        case VertexAttribType::HalfFloat:
-            os << "GL_HALF_FLOAT";
-            break;
-        case VertexAttribType::Int:
-            os << "GL_INT";
-            break;
-        case VertexAttribType::Int2101010:
-            os << "GL_INT_10_10_10_2";
-            break;
-        case VertexAttribType::Short:
-            os << "GL_SHORT";
-            break;
-        case VertexAttribType::UnsignedByte:
-            os << "GL_UNSIGNED_BYTE";
-            break;
-        case VertexAttribType::UnsignedInt:
-            os << "GL_UNSIGNED_INT";
-            break;
-        case VertexAttribType::UnsignedInt2101010:
-            os << "GL_UNSIGNED_INT_10_10_10_2";
-            break;
-        case VertexAttribType::UnsignedShort:
-            os << "GL_UNSIGNED_SHORT";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
 }  // namespace gl
 
 namespace egl
 {
 MessageType ErrorCodeToMessageType(EGLint errorCode)
 {
     switch (errorCode)
     {
--- a/gfx/angle/checkout/src/common/PackedEnums.h
+++ b/gfx/angle/checkout/src/common/PackedEnums.h
@@ -264,18 +264,16 @@ static_assert(ToGLenum(PrimitiveMode::Li
               "PrimitiveMode violation");
 static_assert(ToGLenum(PrimitiveMode::LineStripAdjacency) == GL_LINE_STRIP_ADJACENCY,
               "PrimitiveMode violation");
 static_assert(ToGLenum(PrimitiveMode::TrianglesAdjacency) == GL_TRIANGLES_ADJACENCY,
               "PrimitiveMode violation");
 static_assert(ToGLenum(PrimitiveMode::TriangleStripAdjacency) == GL_TRIANGLE_STRIP_ADJACENCY,
               "PrimitiveMode violation");
 
-std::ostream &operator<<(std::ostream &os, PrimitiveMode value);
-
 enum class DrawElementsType : size_t
 {
     UnsignedByte  = 0,
     UnsignedShort = 1,
     UnsignedInt   = 2,
     InvalidEnum   = 3,
     EnumCount     = 3,
 };
@@ -308,18 +306,16 @@ constexpr GLenum ToGLenum(DrawElementsTy
 #define ANGLE_VALIDATE_PACKED_ENUM(type, packed, glenum)                 \
     static_assert(ToGLenum(type::packed) == glenum, #type " violation"); \
     static_assert(FromGLenum<type>(glenum) == type::packed, #type " violation")
 
 ANGLE_VALIDATE_PACKED_ENUM(DrawElementsType, UnsignedByte, GL_UNSIGNED_BYTE);
 ANGLE_VALIDATE_PACKED_ENUM(DrawElementsType, UnsignedShort, GL_UNSIGNED_SHORT);
 ANGLE_VALIDATE_PACKED_ENUM(DrawElementsType, UnsignedInt, GL_UNSIGNED_INT);
 
-std::ostream &operator<<(std::ostream &os, DrawElementsType value);
-
 enum class VertexAttribType
 {
     Byte               = 0,   // GLenum == 0x1400
     UnsignedByte       = 1,   // GLenum == 0x1401
     Short              = 2,   // GLenum == 0x1402
     UnsignedShort      = 3,   // GLenum == 0x1403
     Int                = 4,   // GLenum == 0x1404
     UnsignedInt        = 5,   // GLenum == 0x1405
@@ -366,18 +362,16 @@ ANGLE_VALIDATE_PACKED_ENUM(VertexAttribT
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, UnsignedShort, GL_UNSIGNED_SHORT);
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, Int, GL_INT);
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, UnsignedInt, GL_UNSIGNED_INT);
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, Float, GL_FLOAT);
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, HalfFloat, GL_HALF_FLOAT);
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, Fixed, GL_FIXED);
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, Int2101010, GL_INT_2_10_10_10_REV);
 ANGLE_VALIDATE_PACKED_ENUM(VertexAttribType, UnsignedInt2101010, GL_UNSIGNED_INT_2_10_10_10_REV);
-
-std::ostream &operator<<(std::ostream &os, VertexAttribType value);
 }  // namespace gl
 
 namespace egl
 {
 MessageType ErrorCodeToMessageType(EGLint errorCode);
 }  // namespace egl
 
 namespace egl_gl
--- a/gfx/angle/checkout/src/common/PackedGLEnums_autogen.cpp
+++ b/gfx/angle/checkout/src/common/PackedGLEnums_autogen.cpp
@@ -62,51 +62,16 @@ GLenum ToGLenum(AlphaTestFunc from)
         case AlphaTestFunc::NotEqual:
             return GL_NOTEQUAL;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, AlphaTestFunc value)
-{
-    switch (value)
-    {
-        case AlphaTestFunc::AlwaysPass:
-            os << "GL_ALWAYS";
-            break;
-        case AlphaTestFunc::Equal:
-            os << "GL_EQUAL";
-            break;
-        case AlphaTestFunc::Gequal:
-            os << "GL_GEQUAL";
-            break;
-        case AlphaTestFunc::Greater:
-            os << "GL_GREATER";
-            break;
-        case AlphaTestFunc::Lequal:
-            os << "GL_LEQUAL";
-            break;
-        case AlphaTestFunc::Less:
-            os << "GL_LESS";
-            break;
-        case AlphaTestFunc::Never:
-            os << "GL_NEVER";
-            break;
-        case AlphaTestFunc::NotEqual:
-            os << "GL_NOTEQUAL";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 BufferBinding FromGLenum<BufferBinding>(GLenum from)
 {
     switch (from)
     {
         case GL_ARRAY_BUFFER:
             return BufferBinding::Array;
         case GL_ATOMIC_COUNTER_BUFFER:
@@ -165,63 +130,16 @@ GLenum ToGLenum(BufferBinding from)
         case BufferBinding::Uniform:
             return GL_UNIFORM_BUFFER;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, BufferBinding value)
-{
-    switch (value)
-    {
-        case BufferBinding::Array:
-            os << "GL_ARRAY_BUFFER";
-            break;
-        case BufferBinding::AtomicCounter:
-            os << "GL_ATOMIC_COUNTER_BUFFER";
-            break;
-        case BufferBinding::CopyRead:
-            os << "GL_COPY_READ_BUFFER";
-            break;
-        case BufferBinding::CopyWrite:
-            os << "GL_COPY_WRITE_BUFFER";
-            break;
-        case BufferBinding::DispatchIndirect:
-            os << "GL_DISPATCH_INDIRECT_BUFFER";
-            break;
-        case BufferBinding::DrawIndirect:
-            os << "GL_DRAW_INDIRECT_BUFFER";
-            break;
-        case BufferBinding::ElementArray:
-            os << "GL_ELEMENT_ARRAY_BUFFER";
-            break;
-        case BufferBinding::PixelPack:
-            os << "GL_PIXEL_PACK_BUFFER";
-            break;
-        case BufferBinding::PixelUnpack:
-            os << "GL_PIXEL_UNPACK_BUFFER";
-            break;
-        case BufferBinding::ShaderStorage:
-            os << "GL_SHADER_STORAGE_BUFFER";
-            break;
-        case BufferBinding::TransformFeedback:
-            os << "GL_TRANSFORM_FEEDBACK_BUFFER";
-            break;
-        case BufferBinding::Uniform:
-            os << "GL_UNIFORM_BUFFER";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 BufferUsage FromGLenum<BufferUsage>(GLenum from)
 {
     switch (from)
     {
         case GL_DYNAMIC_COPY:
             return BufferUsage::DynamicCopy;
         case GL_DYNAMIC_DRAW:
@@ -268,54 +186,16 @@ GLenum ToGLenum(BufferUsage from)
         case BufferUsage::StreamRead:
             return GL_STREAM_READ;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, BufferUsage value)
-{
-    switch (value)
-    {
-        case BufferUsage::DynamicCopy:
-            os << "GL_DYNAMIC_COPY";
-            break;
-        case BufferUsage::DynamicDraw:
-            os << "GL_DYNAMIC_DRAW";
-            break;
-        case BufferUsage::DynamicRead:
-            os << "GL_DYNAMIC_READ";
-            break;
-        case BufferUsage::StaticCopy:
-            os << "GL_STATIC_COPY";
-            break;
-        case BufferUsage::StaticDraw:
-            os << "GL_STATIC_DRAW";
-            break;
-        case BufferUsage::StaticRead:
-            os << "GL_STATIC_READ";
-            break;
-        case BufferUsage::StreamCopy:
-            os << "GL_STREAM_COPY";
-            break;
-        case BufferUsage::StreamDraw:
-            os << "GL_STREAM_DRAW";
-            break;
-        case BufferUsage::StreamRead:
-            os << "GL_STREAM_READ";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 ClientVertexArrayType FromGLenum<ClientVertexArrayType>(GLenum from)
 {
     switch (from)
     {
         case GL_COLOR_ARRAY:
             return ClientVertexArrayType::Color;
         case GL_NORMAL_ARRAY:
@@ -346,42 +226,16 @@ GLenum ToGLenum(ClientVertexArrayType fr
         case ClientVertexArrayType::Vertex:
             return GL_VERTEX_ARRAY;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, ClientVertexArrayType value)
-{
-    switch (value)
-    {
-        case ClientVertexArrayType::Color:
-            os << "GL_COLOR_ARRAY";
-            break;
-        case ClientVertexArrayType::Normal:
-            os << "GL_NORMAL_ARRAY";
-            break;
-        case ClientVertexArrayType::PointSize:
-            os << "GL_POINT_SIZE_ARRAY_OES";
-            break;
-        case ClientVertexArrayType::TextureCoord:
-            os << "GL_TEXTURE_COORD_ARRAY";
-            break;
-        case ClientVertexArrayType::Vertex:
-            os << "GL_VERTEX_ARRAY";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 CullFaceMode FromGLenum<CullFaceMode>(GLenum from)
 {
     switch (from)
     {
         case GL_BACK:
             return CullFaceMode::Back;
         case GL_FRONT:
@@ -404,36 +258,16 @@ GLenum ToGLenum(CullFaceMode from)
         case CullFaceMode::FrontAndBack:
             return GL_FRONT_AND_BACK;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, CullFaceMode value)
-{
-    switch (value)
-    {
-        case CullFaceMode::Back:
-            os << "GL_BACK";
-            break;
-        case CullFaceMode::Front:
-            os << "GL_FRONT";
-            break;
-        case CullFaceMode::FrontAndBack:
-            os << "GL_FRONT_AND_BACK";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 FilterMode FromGLenum<FilterMode>(GLenum from)
 {
     switch (from)
     {
         case GL_NEAREST:
             return FilterMode::Nearest;
         case GL_LINEAR:
@@ -464,42 +298,16 @@ GLenum ToGLenum(FilterMode from)
         case FilterMode::LinearMipmapLinear:
             return GL_LINEAR_MIPMAP_LINEAR;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, FilterMode value)
-{
-    switch (value)
-    {
-        case FilterMode::Nearest:
-            os << "GL_NEAREST";
-            break;
-        case FilterMode::Linear:
-            os << "GL_LINEAR";
-            break;
-        case FilterMode::NearestMipmapNearest:
-            os << "GL_NEAREST_MIPMAP_NEAREST";
-            break;
-        case FilterMode::NearestMipmapLinear:
-            os << "GL_NEAREST_MIPMAP_LINEAR";
-            break;
-        case FilterMode::LinearMipmapLinear:
-            os << "GL_LINEAR_MIPMAP_LINEAR";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 FogMode FromGLenum<FogMode>(GLenum from)
 {
     switch (from)
     {
         case GL_EXP:
             return FogMode::Exp;
         case GL_EXP2:
@@ -522,133 +330,16 @@ GLenum ToGLenum(FogMode from)
         case FogMode::Linear:
             return GL_LINEAR;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, FogMode value)
-{
-    switch (value)
-    {
-        case FogMode::Exp:
-            os << "GL_EXP";
-            break;
-        case FogMode::Exp2:
-            os << "GL_EXP2";
-            break;
-        case FogMode::Linear:
-            os << "GL_LINEAR";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
-template <>
-GraphicsResetStatus FromGLenum<GraphicsResetStatus>(GLenum from)
-{
-    switch (from)
-    {
-        case GL_NO_ERROR:
-            return GraphicsResetStatus::NoError;
-        case GL_GUILTY_CONTEXT_RESET:
-            return GraphicsResetStatus::GuiltyContextReset;
-        case GL_INNOCENT_CONTEXT_RESET:
-            return GraphicsResetStatus::InnocentContextReset;
-        case GL_UNKNOWN_CONTEXT_RESET:
-            return GraphicsResetStatus::UnknownContextReset;
-        default:
-            return GraphicsResetStatus::InvalidEnum;
-    }
-}
-
-GLenum ToGLenum(GraphicsResetStatus from)
-{
-    switch (from)
-    {
-        case GraphicsResetStatus::NoError:
-            return GL_NO_ERROR;
-        case GraphicsResetStatus::GuiltyContextReset:
-            return GL_GUILTY_CONTEXT_RESET;
-        case GraphicsResetStatus::InnocentContextReset:
-            return GL_INNOCENT_CONTEXT_RESET;
-        case GraphicsResetStatus::UnknownContextReset:
-            return GL_UNKNOWN_CONTEXT_RESET;
-        default:
-            UNREACHABLE();
-            return 0;
-    }
-}
-
-std::ostream &operator<<(std::ostream &os, GraphicsResetStatus value)
-{
-    switch (value)
-    {
-        case GraphicsResetStatus::NoError:
-            os << "GL_NO_ERROR";
-            break;
-        case GraphicsResetStatus::GuiltyContextReset:
-            os << "GL_GUILTY_CONTEXT_RESET";
-            break;
-        case GraphicsResetStatus::InnocentContextReset:
-            os << "GL_INNOCENT_CONTEXT_RESET";
-            break;
-        case GraphicsResetStatus::UnknownContextReset:
-            os << "GL_UNKNOWN_CONTEXT_RESET";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
-template <>
-HandleType FromGLenum<HandleType>(GLenum from)
-{
-    switch (from)
-    {
-        case GL_HANDLE_TYPE_OPAQUE_FD_EXT:
-            return HandleType::OpaqueFd;
-        default:
-            return HandleType::InvalidEnum;
-    }
-}
-
-GLenum ToGLenum(HandleType from)
-{
-    switch (from)
-    {
-        case HandleType::OpaqueFd:
-            return GL_HANDLE_TYPE_OPAQUE_FD_EXT;
-        default:
-            UNREACHABLE();
-            return 0;
-    }
-}
-
-std::ostream &operator<<(std::ostream &os, HandleType value)
-{
-    switch (value)
-    {
-        case HandleType::OpaqueFd:
-            os << "GL_HANDLE_TYPE_OPAQUE_FD_EXT";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 HintSetting FromGLenum<HintSetting>(GLenum from)
 {
     switch (from)
     {
         case GL_DONT_CARE:
             return HintSetting::DontCare;
         case GL_FASTEST:
@@ -671,137 +362,16 @@ GLenum ToGLenum(HintSetting from)
         case HintSetting::Nicest:
             return GL_NICEST;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, HintSetting value)
-{
-    switch (value)
-    {
-        case HintSetting::DontCare:
-            os << "GL_DONT_CARE";
-            break;
-        case HintSetting::Fastest:
-            os << "GL_FASTEST";
-            break;
-        case HintSetting::Nicest:
-            os << "GL_NICEST";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
-template <>
-ImageLayout FromGLenum<ImageLayout>(GLenum from)
-{
-    switch (from)
-    {
-        case GL_NONE:
-            return ImageLayout::Undefined;
-        case GL_LAYOUT_GENERAL_EXT:
-            return ImageLayout::General;
-        case GL_LAYOUT_COLOR_ATTACHMENT_EXT:
-            return ImageLayout::ColorAttachment;
-        case GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT:
-            return ImageLayout::DepthStencilAttachment;
-        case GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT:
-            return ImageLayout::DepthStencilReadOnlyAttachment;
-        case GL_LAYOUT_SHADER_READ_ONLY_EXT:
-            return ImageLayout::ShaderReadOnly;
-        case GL_LAYOUT_TRANSFER_SRC_EXT:
-            return ImageLayout::TransferSrc;
-        case GL_LAYOUT_TRANSFER_DST_EXT:
-            return ImageLayout::TransferDst;
-        case GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT:
-            return ImageLayout::DepthReadOnlyStencilAttachment;
-        case GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT:
-            return ImageLayout::DepthAttachmentStencilReadOnly;
-        default:
-            return ImageLayout::InvalidEnum;
-    }
-}
-
-GLenum ToGLenum(ImageLayout from)
-{
-    switch (from)
-    {
-        case ImageLayout::Undefined:
-            return GL_NONE;
-        case ImageLayout::General:
-            return GL_LAYOUT_GENERAL_EXT;
-        case ImageLayout::ColorAttachment:
-            return GL_LAYOUT_COLOR_ATTACHMENT_EXT;
-        case ImageLayout::DepthStencilAttachment:
-            return GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT;
-        case ImageLayout::DepthStencilReadOnlyAttachment:
-            return GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT;
-        case ImageLayout::ShaderReadOnly:
-            return GL_LAYOUT_SHADER_READ_ONLY_EXT;
-        case ImageLayout::TransferSrc:
-            return GL_LAYOUT_TRANSFER_SRC_EXT;
-        case ImageLayout::TransferDst:
-            return GL_LAYOUT_TRANSFER_DST_EXT;
-        case ImageLayout::DepthReadOnlyStencilAttachment:
-            return GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT;
-        case ImageLayout::DepthAttachmentStencilReadOnly:
-            return GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT;
-        default:
-            UNREACHABLE();
-            return 0;
-    }
-}
-
-std::ostream &operator<<(std::ostream &os, ImageLayout value)
-{
-    switch (value)
-    {
-        case ImageLayout::Undefined:
-            os << "GL_NONE";
-            break;
-        case ImageLayout::General:
-            os << "GL_LAYOUT_GENERAL_EXT";
-            break;
-        case ImageLayout::ColorAttachment:
-            os << "GL_LAYOUT_COLOR_ATTACHMENT_EXT";
-            break;
-        case ImageLayout::DepthStencilAttachment:
-            os << "GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT";
-            break;
-        case ImageLayout::DepthStencilReadOnlyAttachment:
-            os << "GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT";
-            break;
-        case ImageLayout::ShaderReadOnly:
-            os << "GL_LAYOUT_SHADER_READ_ONLY_EXT";
-            break;
-        case ImageLayout::TransferSrc:
-            os << "GL_LAYOUT_TRANSFER_SRC_EXT";
-            break;
-        case ImageLayout::TransferDst:
-            os << "GL_LAYOUT_TRANSFER_DST_EXT";
-            break;
-        case ImageLayout::DepthReadOnlyStencilAttachment:
-            os << "GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT";
-            break;
-        case ImageLayout::DepthAttachmentStencilReadOnly:
-            os << "GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 LightParameter FromGLenum<LightParameter>(GLenum from)
 {
     switch (from)
     {
         case GL_AMBIENT:
             return LightParameter::Ambient;
         case GL_AMBIENT_AND_DIFFUSE:
@@ -856,60 +426,16 @@ GLenum ToGLenum(LightParameter from)
         case LightParameter::SpotExponent:
             return GL_SPOT_EXPONENT;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, LightParameter value)
-{
-    switch (value)
-    {
-        case LightParameter::Ambient:
-            os << "GL_AMBIENT";
-            break;
-        case LightParameter::AmbientAndDiffuse:
-            os << "GL_AMBIENT_AND_DIFFUSE";
-            break;
-        case LightParameter::ConstantAttenuation:
-            os << "GL_CONSTANT_ATTENUATION";
-            break;
-        case LightParameter::Diffuse:
-            os << "GL_DIFFUSE";
-            break;
-        case LightParameter::LinearAttenuation:
-            os << "GL_LINEAR_ATTENUATION";
-            break;
-        case LightParameter::Position:
-            os << "GL_POSITION";
-            break;
-        case LightParameter::QuadraticAttenuation:
-            os << "GL_QUADRATIC_ATTENUATION";
-            break;
-        case LightParameter::Specular:
-            os << "GL_SPECULAR";
-            break;
-        case LightParameter::SpotCutoff:
-            os << "GL_SPOT_CUTOFF";
-            break;
-        case LightParameter::SpotDirection:
-            os << "GL_SPOT_DIRECTION";
-            break;
-        case LightParameter::SpotExponent:
-            os << "GL_SPOT_EXPONENT";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 LogicalOperation FromGLenum<LogicalOperation>(GLenum from)
 {
     switch (from)
     {
         case GL_AND:
             return LogicalOperation::And;
         case GL_AND_INVERTED:
@@ -984,75 +510,16 @@ GLenum ToGLenum(LogicalOperation from)
         case LogicalOperation::Xor:
             return GL_XOR;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, LogicalOperation value)
-{
-    switch (value)
-    {
-        case LogicalOperation::And:
-            os << "GL_AND";
-            break;
-        case LogicalOperation::AndInverted:
-            os << "GL_AND_INVERTED";
-            break;
-        case LogicalOperation::AndReverse:
-            os << "GL_AND_REVERSE";
-            break;
-        case LogicalOperation::Clear:
-            os << "GL_CLEAR";
-            break;
-        case LogicalOperation::Copy:
-            os << "GL_COPY";
-            break;
-        case LogicalOperation::CopyInverted:
-            os << "GL_COPY_INVERTED";
-            break;
-        case LogicalOperation::Equiv:
-            os << "GL_EQUIV";
-            break;
-        case LogicalOperation::Invert:
-            os << "GL_INVERT";
-            break;
-        case LogicalOperation::Nand:
-            os << "GL_NAND";
-            break;
-        case LogicalOperation::Noop:
-            os << "GL_NOOP";
-            break;
-        case LogicalOperation::Nor:
-            os << "GL_NOR";
-            break;
-        case LogicalOperation::Or:
-            os << "GL_OR";
-            break;
-        case LogicalOperation::OrInverted:
-            os << "GL_OR_INVERTED";
-            break;
-        case LogicalOperation::OrReverse:
-            os << "GL_OR_REVERSE";
-            break;
-        case LogicalOperation::Set:
-            os << "GL_SET";
-            break;
-        case LogicalOperation::Xor:
-            os << "GL_XOR";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 MaterialParameter FromGLenum<MaterialParameter>(GLenum from)
 {
     switch (from)
     {
         case GL_AMBIENT:
             return MaterialParameter::Ambient;
         case GL_AMBIENT_AND_DIFFUSE:
@@ -1087,45 +554,16 @@ GLenum ToGLenum(MaterialParameter from)
         case MaterialParameter::Specular:
             return GL_SPECULAR;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, MaterialParameter value)
-{
-    switch (value)
-    {
-        case MaterialParameter::Ambient:
-            os << "GL_AMBIENT";
-            break;
-        case MaterialParameter::AmbientAndDiffuse:
-            os << "GL_AMBIENT_AND_DIFFUSE";
-            break;
-        case MaterialParameter::Diffuse:
-            os << "GL_DIFFUSE";
-            break;
-        case MaterialParameter::Emission:
-            os << "GL_EMISSION";
-            break;
-        case MaterialParameter::Shininess:
-            os << "GL_SHININESS";
-            break;
-        case MaterialParameter::Specular:
-            os << "GL_SPECULAR";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 MatrixType FromGLenum<MatrixType>(GLenum from)
 {
     switch (from)
     {
         case GL_MODELVIEW:
             return MatrixType::Modelview;
         case GL_PROJECTION:
@@ -1148,36 +586,16 @@ GLenum ToGLenum(MatrixType from)
         case MatrixType::Texture:
             return GL_TEXTURE;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, MatrixType value)
-{
-    switch (value)
-    {
-        case MatrixType::Modelview:
-            os << "GL_MODELVIEW";
-            break;
-        case MatrixType::Projection:
-            os << "GL_PROJECTION";
-            break;
-        case MatrixType::Texture:
-            os << "GL_TEXTURE";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 PointParameter FromGLenum<PointParameter>(GLenum from)
 {
     switch (from)
     {
         case GL_POINT_SIZE_MIN:
             return PointParameter::PointSizeMin;
         case GL_POINT_SIZE_MAX:
@@ -1204,84 +622,44 @@ GLenum ToGLenum(PointParameter from)
         case PointParameter::PointDistanceAttenuation:
             return GL_POINT_DISTANCE_ATTENUATION;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, PointParameter value)
-{
-    switch (value)
-    {
-        case PointParameter::PointSizeMin:
-            os << "GL_POINT_SIZE_MIN";
-            break;
-        case PointParameter::PointSizeMax:
-            os << "GL_POINT_SIZE_MAX";
-            break;
-        case PointParameter::PointFadeThresholdSize:
-            os << "GL_POINT_FADE_THRESHOLD_SIZE";
-            break;
-        case PointParameter::PointDistanceAttenuation:
-            os << "GL_POINT_DISTANCE_ATTENUATION";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
-ProvokingVertexConvention FromGLenum<ProvokingVertexConvention>(GLenum from)
+ProvokingVertex FromGLenum<ProvokingVertex>(GLenum from)
 {
     switch (from)
     {
         case GL_FIRST_VERTEX_CONVENTION:
-            return ProvokingVertexConvention::FirstVertexConvention;
+            return ProvokingVertex::FirstVertexConvention;
         case GL_LAST_VERTEX_CONVENTION:
-            return ProvokingVertexConvention::LastVertexConvention;
+            return ProvokingVertex::LastVertexConvention;
         default:
-            return ProvokingVertexConvention::InvalidEnum;
+            return ProvokingVertex::InvalidEnum;
     }
 }
 
-GLenum ToGLenum(ProvokingVertexConvention from)
+GLenum ToGLenum(ProvokingVertex from)
 {
     switch (from)
     {
-        case ProvokingVertexConvention::FirstVertexConvention:
+        case ProvokingVertex::FirstVertexConvention:
             return GL_FIRST_VERTEX_CONVENTION;
-        case ProvokingVertexConvention::LastVertexConvention:
+        case ProvokingVertex::LastVertexConvention:
             return GL_LAST_VERTEX_CONVENTION;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, ProvokingVertexConvention value)
-{
-    switch (value)
-    {
-        case ProvokingVertexConvention::FirstVertexConvention:
-            os << "GL_FIRST_VERTEX_CONVENTION";
-            break;
-        case ProvokingVertexConvention::LastVertexConvention:
-            os << "GL_LAST_VERTEX_CONVENTION";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 QueryType FromGLenum<QueryType>(GLenum from)
 {
     switch (from)
     {
         case GL_ANY_SAMPLES_PASSED:
             return QueryType::AnySamples;
         case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
@@ -1320,48 +698,16 @@ GLenum ToGLenum(QueryType from)
         case QueryType::TransformFeedbackPrimitivesWritten:
             return GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, QueryType value)
-{
-    switch (value)
-    {
-        case QueryType::AnySamples:
-            os << "GL_ANY_SAMPLES_PASSED";
-            break;
-        case QueryType::AnySamplesConservative:
-            os << "GL_ANY_SAMPLES_PASSED_CONSERVATIVE";
-            break;
-        case QueryType::CommandsCompleted:
-            os << "GL_COMMANDS_COMPLETED_CHROMIUM";
-            break;
-        case QueryType::PrimitivesGenerated:
-            os << "GL_PRIMITIVES_GENERATED_EXT";
-            break;
-        case QueryType::TimeElapsed:
-            os << "GL_TIME_ELAPSED_EXT";
-            break;
-        case QueryType::Timestamp:
-            os << "GL_TIMESTAMP_EXT";
-            break;
-        case QueryType::TransformFeedbackPrimitivesWritten:
-            os << "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 ShaderType FromGLenum<ShaderType>(GLenum from)
 {
     switch (from)
     {
         case GL_VERTEX_SHADER:
             return ShaderType::Vertex;
         case GL_FRAGMENT_SHADER:
@@ -1388,39 +734,16 @@ GLenum ToGLenum(ShaderType from)
         case ShaderType::Compute:
             return GL_COMPUTE_SHADER;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, ShaderType value)
-{
-    switch (value)
-    {
-        case ShaderType::Vertex:
-            os << "GL_VERTEX_SHADER";
-            break;
-        case ShaderType::Fragment:
-            os << "GL_FRAGMENT_SHADER";
-            break;
-        case ShaderType::Geometry:
-            os << "GL_GEOMETRY_SHADER_EXT";
-            break;
-        case ShaderType::Compute:
-            os << "GL_COMPUTE_SHADER";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 ShadingModel FromGLenum<ShadingModel>(GLenum from)
 {
     switch (from)
     {
         case GL_FLAT:
             return ShadingModel::Flat;
         case GL_SMOOTH:
@@ -1439,33 +762,16 @@ GLenum ToGLenum(ShadingModel from)
         case ShadingModel::Smooth:
             return GL_SMOOTH;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, ShadingModel value)
-{
-    switch (value)
-    {
-        case ShadingModel::Flat:
-            os << "GL_FLAT";
-            break;
-        case ShadingModel::Smooth:
-            os << "GL_SMOOTH";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureCombine FromGLenum<TextureCombine>(GLenum from)
 {
     switch (from)
     {
         case GL_ADD:
             return TextureCombine::Add;
         case GL_ADD_SIGNED:
@@ -1508,51 +814,16 @@ GLenum ToGLenum(TextureCombine from)
         case TextureCombine::Subtract:
             return GL_SUBTRACT;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureCombine value)
-{
-    switch (value)
-    {
-        case TextureCombine::Add:
-            os << "GL_ADD";
-            break;
-        case TextureCombine::AddSigned:
-            os << "GL_ADD_SIGNED";
-            break;
-        case TextureCombine::Dot3Rgb:
-            os << "GL_DOT3_RGB";
-            break;
-        case TextureCombine::Dot3Rgba:
-            os << "GL_DOT3_RGBA";
-            break;
-        case TextureCombine::Interpolate:
-            os << "GL_INTERPOLATE";
-            break;
-        case TextureCombine::Modulate:
-            os << "GL_MODULATE";
-            break;
-        case TextureCombine::Replace:
-            os << "GL_REPLACE";
-            break;
-        case TextureCombine::Subtract:
-            os << "GL_SUBTRACT";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureEnvMode FromGLenum<TextureEnvMode>(GLenum from)
 {
     switch (from)
     {
         case GL_ADD:
             return TextureEnvMode::Add;
         case GL_BLEND:
@@ -1587,45 +858,16 @@ GLenum ToGLenum(TextureEnvMode from)
         case TextureEnvMode::Replace:
             return GL_REPLACE;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureEnvMode value)
-{
-    switch (value)
-    {
-        case TextureEnvMode::Add:
-            os << "GL_ADD";
-            break;
-        case TextureEnvMode::Blend:
-            os << "GL_BLEND";
-            break;
-        case TextureEnvMode::Combine:
-            os << "GL_COMBINE";
-            break;
-        case TextureEnvMode::Decal:
-            os << "GL_DECAL";
-            break;
-        case TextureEnvMode::Modulate:
-            os << "GL_MODULATE";
-            break;
-        case TextureEnvMode::Replace:
-            os << "GL_REPLACE";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureEnvParameter FromGLenum<TextureEnvParameter>(GLenum from)
 {
     switch (from)
     {
         case GL_TEXTURE_ENV_MODE:
             return TextureEnvParameter::Mode;
         case GL_TEXTURE_ENV_COLOR:
@@ -1712,84 +954,16 @@ GLenum ToGLenum(TextureEnvParameter from
         case TextureEnvParameter::PointCoordReplace:
             return GL_COORD_REPLACE_OES;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureEnvParameter value)
-{
-    switch (value)
-    {
-        case TextureEnvParameter::Mode:
-            os << "GL_TEXTURE_ENV_MODE";
-            break;
-        case TextureEnvParameter::Color:
-            os << "GL_TEXTURE_ENV_COLOR";
-            break;
-        case TextureEnvParameter::CombineRgb:
-            os << "GL_COMBINE_RGB";
-            break;
-        case TextureEnvParameter::CombineAlpha:
-            os << "GL_COMBINE_ALPHA";
-            break;
-        case TextureEnvParameter::RgbScale:
-            os << "GL_RGB_SCALE";
-            break;
-        case TextureEnvParameter::AlphaScale:
-            os << "GL_ALPHA_SCALE";
-            break;
-        case TextureEnvParameter::Src0Rgb:
-            os << "GL_SRC0_RGB";
-            break;
-        case TextureEnvParameter::Src1Rgb:
-            os << "GL_SRC1_RGB";
-            break;
-        case TextureEnvParameter::Src2Rgb:
-            os << "GL_SRC2_RGB";
-            break;
-        case TextureEnvParameter::Src0Alpha:
-            os << "GL_SRC0_ALPHA";
-            break;
-        case TextureEnvParameter::Src1Alpha:
-            os << "GL_SRC1_ALPHA";
-            break;
-        case TextureEnvParameter::Src2Alpha:
-            os << "GL_SRC2_ALPHA";
-            break;
-        case TextureEnvParameter::Op0Rgb:
-            os << "GL_OPERAND0_RGB";
-            break;
-        case TextureEnvParameter::Op1Rgb:
-            os << "GL_OPERAND1_RGB";
-            break;
-        case TextureEnvParameter::Op2Rgb:
-            os << "GL_OPERAND2_RGB";
-            break;
-        case TextureEnvParameter::Op0Alpha:
-            os << "GL_OPERAND0_ALPHA";
-            break;
-        case TextureEnvParameter::Op1Alpha:
-            os << "GL_OPERAND1_ALPHA";
-            break;
-        case TextureEnvParameter::Op2Alpha:
-            os << "GL_OPERAND2_ALPHA";
-            break;
-        case TextureEnvParameter::PointCoordReplace:
-            os << "GL_COORD_REPLACE_OES";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureEnvTarget FromGLenum<TextureEnvTarget>(GLenum from)
 {
     switch (from)
     {
         case GL_TEXTURE_ENV:
             return TextureEnvTarget::Env;
         case GL_POINT_SPRITE_OES:
@@ -1808,33 +982,16 @@ GLenum ToGLenum(TextureEnvTarget from)
         case TextureEnvTarget::PointSprite:
             return GL_POINT_SPRITE_OES;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureEnvTarget value)
-{
-    switch (value)
-    {
-        case TextureEnvTarget::Env:
-            os << "GL_TEXTURE_ENV";
-            break;
-        case TextureEnvTarget::PointSprite:
-            os << "GL_POINT_SPRITE_OES";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureOp FromGLenum<TextureOp>(GLenum from)
 {
     switch (from)
     {
         case GL_ONE_MINUS_SRC_ALPHA:
             return TextureOp::OneMinusSrcAlpha;
         case GL_ONE_MINUS_SRC_COLOR:
@@ -1861,39 +1018,16 @@ GLenum ToGLenum(TextureOp from)
         case TextureOp::SrcColor:
             return GL_SRC_COLOR;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureOp value)
-{
-    switch (value)
-    {
-        case TextureOp::OneMinusSrcAlpha:
-            os << "GL_ONE_MINUS_SRC_ALPHA";
-            break;
-        case TextureOp::OneMinusSrcColor:
-            os << "GL_ONE_MINUS_SRC_COLOR";
-            break;
-        case TextureOp::SrcAlpha:
-            os << "GL_SRC_ALPHA";
-            break;
-        case TextureOp::SrcColor:
-            os << "GL_SRC_COLOR";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureSrc FromGLenum<TextureSrc>(GLenum from)
 {
     switch (from)
     {
         case GL_CONSTANT:
             return TextureSrc::Constant;
         case GL_PREVIOUS:
@@ -1920,39 +1054,16 @@ GLenum ToGLenum(TextureSrc from)
         case TextureSrc::Texture:
             return GL_TEXTURE;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureSrc value)
-{
-    switch (value)
-    {
-        case TextureSrc::Constant:
-            os << "GL_CONSTANT";
-            break;
-        case TextureSrc::Previous:
-            os << "GL_PREVIOUS";
-            break;
-        case TextureSrc::PrimaryColor:
-            os << "GL_PRIMARY_COLOR";
-            break;
-        case TextureSrc::Texture:
-            os << "GL_TEXTURE";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureTarget FromGLenum<TextureTarget>(GLenum from)
 {
     switch (from)
     {
         case GL_TEXTURE_2D:
             return TextureTarget::_2D;
         case GL_TEXTURE_2D_ARRAY:
@@ -2015,66 +1126,16 @@ GLenum ToGLenum(TextureTarget from)
         case TextureTarget::CubeMapNegativeZ:
             return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureTarget value)
-{
-    switch (value)
-    {
-        case TextureTarget::_2D:
-            os << "GL_TEXTURE_2D";
-            break;
-        case TextureTarget::_2DArray:
-            os << "GL_TEXTURE_2D_ARRAY";
-            break;
-        case TextureTarget::_2DMultisample:
-            os << "GL_TEXTURE_2D_MULTISAMPLE";
-            break;
-        case TextureTarget::_2DMultisampleArray:
-            os << "GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES";
-            break;
-        case TextureTarget::_3D:
-            os << "GL_TEXTURE_3D";
-            break;
-        case TextureTarget::External:
-            os << "GL_TEXTURE_EXTERNAL_OES";
-            break;
-        case TextureTarget::Rectangle:
-            os << "GL_TEXTURE_RECTANGLE_ANGLE";
-            break;
-        case TextureTarget::CubeMapPositiveX:
-            os << "GL_TEXTURE_CUBE_MAP_POSITIVE_X";
-            break;
-        case TextureTarget::CubeMapNegativeX:
-            os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_X";
-            break;
-        case TextureTarget::CubeMapPositiveY:
-            os << "GL_TEXTURE_CUBE_MAP_POSITIVE_Y";
-            break;
-        case TextureTarget::CubeMapNegativeY:
-            os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y";
-            break;
-        case TextureTarget::CubeMapPositiveZ:
-            os << "GL_TEXTURE_CUBE_MAP_POSITIVE_Z";
-            break;
-        case TextureTarget::CubeMapNegativeZ:
-            os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 TextureType FromGLenum<TextureType>(GLenum from)
 {
     switch (from)
     {
         case GL_TEXTURE_2D:
             return TextureType::_2D;
         case GL_TEXTURE_2D_ARRAY:
@@ -2117,51 +1178,16 @@ GLenum ToGLenum(TextureType from)
         case TextureType::CubeMap:
             return GL_TEXTURE_CUBE_MAP;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, TextureType value)
-{
-    switch (value)
-    {
-        case TextureType::_2D:
-            os << "GL_TEXTURE_2D";
-            break;
-        case TextureType::_2DArray:
-            os << "GL_TEXTURE_2D_ARRAY";
-            break;
-        case TextureType::_2DMultisample:
-            os << "GL_TEXTURE_2D_MULTISAMPLE";
-            break;
-        case TextureType::_2DMultisampleArray:
-            os << "GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES";
-            break;
-        case TextureType::_3D:
-            os << "GL_TEXTURE_3D";
-            break;
-        case TextureType::External:
-            os << "GL_TEXTURE_EXTERNAL_OES";
-            break;
-        case TextureType::Rectangle:
-            os << "GL_TEXTURE_RECTANGLE_ANGLE";
-            break;
-        case TextureType::CubeMap:
-            os << "GL_TEXTURE_CUBE_MAP";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 VertexArrayType FromGLenum<VertexArrayType>(GLenum from)
 {
     switch (from)
     {
         case GL_COLOR_ARRAY:
             return VertexArrayType::Color;
         case GL_NORMAL_ARRAY:
@@ -2192,42 +1218,16 @@ GLenum ToGLenum(VertexArrayType from)
         case VertexArrayType::Vertex:
             return GL_VERTEX_ARRAY;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, VertexArrayType value)
-{
-    switch (value)
-    {
-        case VertexArrayType::Color:
-            os << "GL_COLOR_ARRAY";
-            break;
-        case VertexArrayType::Normal:
-            os << "GL_NORMAL_ARRAY";
-            break;
-        case VertexArrayType::PointSize:
-            os << "GL_POINT_SIZE_ARRAY_OES";
-            break;
-        case VertexArrayType::TextureCoord:
-            os << "GL_TEXTURE_COORD_ARRAY";
-            break;
-        case VertexArrayType::Vertex:
-            os << "GL_VERTEX_ARRAY";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 template <>
 WrapMode FromGLenum<WrapMode>(GLenum from)
 {
     switch (from)
     {
         case GL_CLAMP_TO_EDGE:
             return WrapMode::ClampToEdge;
         case GL_CLAMP_TO_BORDER:
@@ -2254,32 +1254,9 @@ GLenum ToGLenum(WrapMode from)
         case WrapMode::Repeat:
             return GL_REPEAT;
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
-std::ostream &operator<<(std::ostream &os, WrapMode value)
-{
-    switch (value)
-    {
-        case WrapMode::ClampToEdge:
-            os << "GL_CLAMP_TO_EDGE";
-            break;
-        case WrapMode::ClampToBorder:
-            os << "GL_CLAMP_TO_BORDER";
-            break;
-        case WrapMode::MirroredRepeat:
-            os << "GL_MIRRORED_REPEAT";
-            break;
-        case WrapMode::Repeat:
-            os << "GL_REPEAT";
-            break;
-        default:
-            os << "GL_INVALID_ENUM";
-            break;
-    }
-    return os;
-}
-
 }  // namespace gl
--- a/gfx/angle/checkout/src/common/PackedGLEnums_autogen.h
+++ b/gfx/angle/checkout/src/common/PackedGLEnums_autogen.h
@@ -12,17 +12,16 @@
 #ifndef COMMON_PACKEDGLENUMS_AUTOGEN_H_
 #define COMMON_PACKEDGLENUMS_AUTOGEN_H_
 
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 #include <angle_gl.h>
 
 #include <cstdint>
-#include <ostream>
 
 namespace gl
 {
 
 template <typename Enum>
 Enum FromGLenum(GLenum from);
 
 enum class AlphaTestFunc : uint8_t
@@ -38,17 +37,16 @@ enum class AlphaTestFunc : uint8_t
 
     InvalidEnum = 8,
     EnumCount   = 8,
 };
 
 template <>
 AlphaTestFunc FromGLenum<AlphaTestFunc>(GLenum from);
 GLenum ToGLenum(AlphaTestFunc from);
-std::ostream &operator<<(std::ostream &os, AlphaTestFunc value);
 
 enum class BufferBinding : uint8_t
 {
     Array             = 0,
     AtomicCounter     = 1,
     CopyRead          = 2,
     CopyWrite         = 3,
     DispatchIndirect  = 4,
@@ -62,17 +60,16 @@ enum class BufferBinding : uint8_t
 
     InvalidEnum = 12,
     EnumCount   = 12,
 };
 
 template <>
 BufferBinding FromGLenum<BufferBinding>(GLenum from);
 GLenum ToGLenum(BufferBinding from);
-std::ostream &operator<<(std::ostream &os, BufferBinding value);
 
 enum class BufferUsage : uint8_t
 {
     DynamicCopy = 0,
     DynamicDraw = 1,
     DynamicRead = 2,
     StaticCopy  = 3,
     StaticDraw  = 4,
@@ -83,147 +80,90 @@ enum class BufferUsage : uint8_t
 
     InvalidEnum = 9,
     EnumCount   = 9,
 };
 
 template <>
 BufferUsage FromGLenum<BufferUsage>(GLenum from);
 GLenum ToGLenum(BufferUsage from);
-std::ostream &operator<<(std::ostream &os, BufferUsage value);
 
 enum class ClientVertexArrayType : uint8_t
 {
     Color        = 0,
     Normal       = 1,
     PointSize    = 2,
     TextureCoord = 3,
     Vertex       = 4,
 
     InvalidEnum = 5,
     EnumCount   = 5,
 };
 
 template <>
 ClientVertexArrayType FromGLenum<ClientVertexArrayType>(GLenum from);
 GLenum ToGLenum(ClientVertexArrayType from);
-std::ostream &operator<<(std::ostream &os, ClientVertexArrayType value);
 
 enum class CullFaceMode : uint8_t
 {
     Back         = 0,
     Front        = 1,
     FrontAndBack = 2,
 
     InvalidEnum = 3,
     EnumCount   = 3,
 };
 
 template <>
 CullFaceMode FromGLenum<CullFaceMode>(GLenum from);
 GLenum ToGLenum(CullFaceMode from);
-std::ostream &operator<<(std::ostream &os, CullFaceMode value);
 
 enum class FilterMode : uint8_t
 {
     Nearest              = 0,
     Linear               = 1,
     NearestMipmapNearest = 2,
     NearestMipmapLinear  = 3,
     LinearMipmapLinear   = 4,
 
     InvalidEnum = 5,
     EnumCount   = 5,
 };
 
 template <>
 FilterMode FromGLenum<FilterMode>(GLenum from);
 GLenum ToGLenum(FilterMode from);
-std::ostream &operator<<(std::ostream &os, FilterMode value);
 
 enum class FogMode : uint8_t
 {
     Exp    = 0,
     Exp2   = 1,
     Linear = 2,
 
     InvalidEnum = 3,
     EnumCount   = 3,
 };
 
 template <>
 FogMode FromGLenum<FogMode>(GLenum from);
 GLenum ToGLenum(FogMode from);
-std::ostream &operator<<(std::ostream &os, FogMode value);
-
-enum class GraphicsResetStatus : uint8_t
-{
-    NoError              = 0,
-    GuiltyContextReset   = 1,
-    InnocentContextReset = 2,
-    UnknownContextReset  = 3,
-
-    InvalidEnum = 4,
-    EnumCount   = 4,
-};
-
-template <>
-GraphicsResetStatus FromGLenum<GraphicsResetStatus>(GLenum from);
-GLenum ToGLenum(GraphicsResetStatus from);
-std::ostream &operator<<(std::ostream &os, GraphicsResetStatus value);
-
-enum class HandleType : uint8_t
-{
-    OpaqueFd = 0,
-
-    InvalidEnum = 1,
-    EnumCount   = 1,
-};
-
-template <>
-HandleType FromGLenum<HandleType>(GLenum from);
-GLenum ToGLenum(HandleType from);
-std::ostream &operator<<(std::ostream &os, HandleType value);
 
 enum class HintSetting : uint8_t
 {
     DontCare = 0,
     Fastest  = 1,
     Nicest   = 2,
 
     InvalidEnum = 3,
     EnumCount   = 3,
 };
 
 template <>
 HintSetting FromGLenum<HintSetting>(GLenum from);
 GLenum ToGLenum(HintSetting from);
-std::ostream &operator<<(std::ostream &os, HintSetting value);
-
-enum class ImageLayout : uint8_t
-{
-    Undefined                      = 0,
-    General                        = 1,
-    ColorAttachment                = 2,
-    DepthStencilAttachment         = 3,
-    DepthStencilReadOnlyAttachment = 4,
-    ShaderReadOnly                 = 5,
-    TransferSrc                    = 6,
-    TransferDst                    = 7,
-    DepthReadOnlyStencilAttachment = 8,
-    DepthAttachmentStencilReadOnly = 9,
-
-    InvalidEnum = 10,
-    EnumCount   = 10,
-};
-
-template <>
-ImageLayout FromGLenum<ImageLayout>(GLenum from);
-GLenum ToGLenum(ImageLayout from);
-std::ostream &operator<<(std::ostream &os, ImageLayout value);
 
 enum class LightParameter : uint8_t
 {
     Ambient              = 0,
     AmbientAndDiffuse    = 1,
     ConstantAttenuation  = 2,
     Diffuse              = 3,
     LinearAttenuation    = 4,
@@ -236,17 +176,16 @@ enum class LightParameter : uint8_t
 
     InvalidEnum = 11,
     EnumCount   = 11,
 };
 
 template <>
 LightParameter FromGLenum<LightParameter>(GLenum from);
 GLenum ToGLenum(LightParameter from);
-std::ostream &operator<<(std::ostream &os, LightParameter value);
 
 enum class LogicalOperation : uint8_t
 {
     And          = 0,
     AndInverted  = 1,
     AndReverse   = 2,
     Clear        = 3,
     Copy         = 4,
@@ -264,17 +203,16 @@ enum class LogicalOperation : uint8_t
 
     InvalidEnum = 16,
     EnumCount   = 16,
 };
 
 template <>
 LogicalOperation FromGLenum<LogicalOperation>(GLenum from);
 GLenum ToGLenum(LogicalOperation from);
-std::ostream &operator<<(std::ostream &os, LogicalOperation value);
 
 enum class MaterialParameter : uint8_t
 {
     Ambient           = 0,
     AmbientAndDiffuse = 1,
     Diffuse           = 2,
     Emission          = 3,
     Shininess         = 4,
@@ -282,62 +220,58 @@ enum class MaterialParameter : uint8_t
 
     InvalidEnum = 6,
     EnumCount   = 6,
 };
 
 template <>
 MaterialParameter FromGLenum<MaterialParameter>(GLenum from);
 GLenum ToGLenum(MaterialParameter from);
-std::ostream &operator<<(std::ostream &os, MaterialParameter value);
 
 enum class MatrixType : uint8_t
 {
     Modelview  = 0,
     Projection = 1,
     Texture    = 2,
 
     InvalidEnum = 3,
     EnumCount   = 3,
 };
 
 template <>
 MatrixType FromGLenum<MatrixType>(GLenum from);
 GLenum ToGLenum(MatrixType from);
-std::ostream &operator<<(std::ostream &os, MatrixType value);
 
 enum class PointParameter : uint8_t
 {
     PointSizeMin             = 0,
     PointSizeMax             = 1,
     PointFadeThresholdSize   = 2,
     PointDistanceAttenuation = 3,
 
     InvalidEnum = 4,
     EnumCount   = 4,
 };
 
 template <>
 PointParameter FromGLenum<PointParameter>(GLenum from);
 GLenum ToGLenum(PointParameter from);
-std::ostream &operator<<(std::ostream &os, PointParameter value);
 
-enum class ProvokingVertexConvention : uint8_t
+enum class ProvokingVertex : uint8_t
 {
     FirstVertexConvention = 0,
     LastVertexConvention  = 1,
 
     InvalidEnum = 2,
     EnumCount   = 2,
 };
 
 template <>
-ProvokingVertexConvention FromGLenum<ProvokingVertexConvention>(GLenum from);
-GLenum ToGLenum(ProvokingVertexConvention from);
-std::ostream &operator<<(std::ostream &os, ProvokingVertexConvention value);
+ProvokingVertex FromGLenum<ProvokingVertex>(GLenum from);
+GLenum ToGLenum(ProvokingVertex from);
 
 enum class QueryType : uint8_t
 {
     AnySamples                         = 0,
     AnySamplesConservative             = 1,
     CommandsCompleted                  = 2,
     PrimitivesGenerated                = 3,
     TimeElapsed                        = 4,
@@ -346,47 +280,44 @@ enum class QueryType : uint8_t
 
     InvalidEnum = 7,
     EnumCount   = 7,
 };
 
 template <>
 QueryType FromGLenum<QueryType>(GLenum from);
 GLenum ToGLenum(QueryType from);
-std::ostream &operator<<(std::ostream &os, QueryType value);
 
 enum class ShaderType : uint8_t
 {
     Vertex   = 0,
     Fragment = 1,
     Geometry = 2,
     Compute  = 3,
 
     InvalidEnum = 4,
     EnumCount   = 4,
 };
 
 template <>
 ShaderType FromGLenum<ShaderType>(GLenum from);
 GLenum ToGLenum(ShaderType from);
-std::ostream &operator<<(std::ostream &os, ShaderType value);
 
 enum class ShadingModel : uint8_t
 {
     Flat   = 0,
     Smooth = 1,
 
     InvalidEnum = 2,
     EnumCount   = 2,
 };
 
 template <>
 ShadingModel FromGLenum<ShadingModel>(GLenum from);
 GLenum ToGLenum(ShadingModel from);
-std::ostream &operator<<(std::ostream &os, ShadingModel value);
 
 enum class TextureCombine : uint8_t
 {
     Add         = 0,
     AddSigned   = 1,
     Dot3Rgb     = 2,
     Dot3Rgba    = 3,
     Interpolate = 4,
@@ -396,17 +327,16 @@ enum class TextureCombine : uint8_t
 
     InvalidEnum = 8,
     EnumCount   = 8,
 };
 
 template <>
 TextureCombine FromGLenum<TextureCombine>(GLenum from);
 GLenum ToGLenum(TextureCombine from);
-std::ostream &operator<<(std::ostream &os, TextureCombine value);
 
 enum class TextureEnvMode : uint8_t
 {
     Add      = 0,
     Blend    = 1,
     Combine  = 2,
     Decal    = 3,
     Modulate = 4,
@@ -414,17 +344,16 @@ enum class TextureEnvMode : uint8_t
 
     InvalidEnum = 6,
     EnumCount   = 6,
 };
 
 template <>
 TextureEnvMode FromGLenum<TextureEnvMode>(GLenum from);
 GLenum ToGLenum(TextureEnvMode from);
-std::ostream &operator<<(std::ostream &os, TextureEnvMode value);
 
 enum class TextureEnvParameter : uint8_t
 {
     Mode              = 0,
     Color             = 1,
     CombineRgb        = 2,
     CombineAlpha      = 3,
     RgbScale          = 4,
@@ -445,63 +374,59 @@ enum class TextureEnvParameter : uint8_t
 
     InvalidEnum = 19,
     EnumCount   = 19,
 };
 
 template <>
 TextureEnvParameter FromGLenum<TextureEnvParameter>(GLenum from);
 GLenum ToGLenum(TextureEnvParameter from);
-std::ostream &operator<<(std::ostream &os, TextureEnvParameter value);
 
 enum class TextureEnvTarget : uint8_t
 {
     Env         = 0,
     PointSprite = 1,
 
     InvalidEnum = 2,
     EnumCount   = 2,
 };
 
 template <>
 TextureEnvTarget FromGLenum<TextureEnvTarget>(GLenum from);
 GLenum ToGLenum(TextureEnvTarget from);
-std::ostream &operator<<(std::ostream &os, TextureEnvTarget value);
 
 enum class TextureOp : uint8_t
 {
     OneMinusSrcAlpha = 0,
     OneMinusSrcColor = 1,
     SrcAlpha         = 2,
     SrcColor         = 3,
 
     InvalidEnum = 4,
     EnumCount   = 4,
 };
 
 template <>
 TextureOp FromGLenum<TextureOp>(GLenum from);
 GLenum ToGLenum(TextureOp from);
-std::ostream &operator<<(std::ostream &os, TextureOp value);
 
 enum class TextureSrc : uint8_t
 {
     Constant     = 0,
     Previous     = 1,
     PrimaryColor = 2,
     Texture      = 3,
 
     InvalidEnum = 4,
     EnumCount   = 4,
 };
 
 template <>
 TextureSrc FromGLenum<TextureSrc>(GLenum from);
 GLenum ToGLenum(TextureSrc from);
-std::ostream &operator<<(std::ostream &os, TextureSrc value);
 
 enum class TextureTarget : uint8_t
 {
     _2D                 = 0,
     _2DArray            = 1,
     _2DMultisample      = 2,
     _2DMultisampleArray = 3,
     _3D                 = 4,
@@ -516,17 +441,16 @@ enum class TextureTarget : uint8_t
 
     InvalidEnum = 13,
     EnumCount   = 13,
 };
 
 template <>
 TextureTarget FromGLenum<TextureTarget>(GLenum from);
 GLenum ToGLenum(TextureTarget from);
-std::ostream &operator<<(std::ostream &os, TextureTarget value);
 
 enum class TextureType : uint8_t
 {
     _2D                 = 0,
     _2DArray            = 1,
     _2DMultisample      = 2,
     _2DMultisampleArray = 3,
     _3D                 = 4,
@@ -536,46 +460,43 @@ enum class TextureType : uint8_t
 
     InvalidEnum = 8,
     EnumCount   = 8,
 };
 
 template <>
 TextureType FromGLenum<TextureType>(GLenum from);
 GLenum ToGLenum(TextureType from);
-std::ostream &operator<<(std::ostream &os, TextureType value);
 
 enum class VertexArrayType : uint8_t
 {
     Color        = 0,
     Normal       = 1,
     PointSize    = 2,
     TextureCoord = 3,
     Vertex       = 4,
 
     InvalidEnum = 5,
     EnumCount   = 5,
 };
 
 template <>
 VertexArrayType FromGLenum<VertexArrayType>(GLenum from);
 GLenum ToGLenum(VertexArrayType from);
-std::ostream &operator<<(std::ostream &os, VertexArrayType value);
 
 enum class WrapMode : uint8_t
 {
     ClampToEdge    = 0,
     ClampToBorder  = 1,
     MirroredRepeat = 2,
     Repeat         = 3,
 
     InvalidEnum = 4,
     EnumCount   = 4,
 };
 
 template <>
 WrapMode FromGLenum<WrapMode>(GLenum from);
 GLenum ToGLenum(WrapMode from);
-std::ostream &operator<<(std::ostream &os, WrapMode value);
 
 }  // namespace gl
 
 #endif  // COMMON_PACKEDGLENUMS_AUTOGEN_H_
--- a/gfx/angle/checkout/src/common/PoolAlloc.cpp
+++ b/gfx/angle/checkout/src/common/PoolAlloc.cpp
@@ -10,17 +10,16 @@
 #include "common/PoolAlloc.h"
 
 #include <assert.h>
 #include <stdint.h>
 #include <stdio.h>
 
 #include "common/angleutils.h"
 #include "common/debug.h"
-#include "common/mathutil.h"
 #include "common/platform.h"
 #include "common/tls.h"
 
 namespace angle
 {
 
 //
 // Implement the functionality of the PoolAllocator class, which
@@ -32,58 +31,52 @@ PoolAllocator::PoolAllocator(int growthI
       mPageSize(growthIncrement),
       mFreeList(0),
       mInUseList(0),
       mNumCalls(0),
       mTotalBytes(0),
 #endif
       mLocked(false)
 {
-#if !defined(ANGLE_DISABLE_POOL_ALLOC)
-    if (mAlignment == 1)
-    {
-        // This is a special fast-path where fastAllocation() is enabled
-        mAlignmentMask = 0;
-        mHeaderSkip    = sizeof(Header);
-    }
-    else
-    {
-#endif
-        //
-        // Adjust mAlignment to be at least pointer aligned and
-        // power of 2.
-        //
-        size_t minAlign = sizeof(void *);
-        mAlignment &= ~(minAlign - 1);
-        if (mAlignment < minAlign)
-            mAlignment = minAlign;
-        mAlignment     = gl::ceilPow2(mAlignment);
-        mAlignmentMask = mAlignment - 1;
+    //
+    // Adjust mAlignment to be at least pointer aligned and
+    // power of 2.
+    //
+    size_t minAlign = sizeof(void *);
+    mAlignment &= ~(minAlign - 1);
+    if (mAlignment < minAlign)
+        mAlignment = minAlign;
+    size_t a = 1;
+    while (a < mAlignment)
+        a <<= 1;
+    mAlignment     = a;
+    mAlignmentMask = a - 1;
 
 #if !defined(ANGLE_DISABLE_POOL_ALLOC)
-        //
-        // Align header skip
-        //
-        mHeaderSkip = minAlign;
-        if (mHeaderSkip < sizeof(Header))
-        {
-            mHeaderSkip = rx::roundUp(sizeof(Header), mAlignment);
-        }
-    }
     //
     // Don't allow page sizes we know are smaller than all common
     // OS page sizes.
     //
     if (mPageSize < 4 * 1024)
         mPageSize = 4 * 1024;
+
     //
     // A large mCurrentPageOffset indicates a new page needs to
     // be obtained to allocate memory.
     //
     mCurrentPageOffset = mPageSize;
+
+    //
+    // Align header skip
+    //
+    mHeaderSkip = minAlign;
+    if (mHeaderSkip < sizeof(Header))
+    {
+        mHeaderSkip = (sizeof(Header) + mAlignmentMask) & ~mAlignmentMask;
+    }
 #else  // !defined(ANGLE_DISABLE_POOL_ALLOC)
     mStack.push_back({});
 #endif
 }
 
 PoolAllocator::~PoolAllocator()
 {
 #if !defined(ANGLE_DISABLE_POOL_ALLOC)
@@ -264,56 +257,49 @@ void *PoolAllocator::allocate(size_t num
 
         mCurrentPageOffset = mPageSize;  // make next allocation come from a new page
 
         // No guard blocks for multi-page allocations (yet)
         void *unalignedPtr =
             reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(memory) + mHeaderSkip);
         return std::align(mAlignment, numBytes, unalignedPtr, allocationSize);
     }
-    unsigned char *newPageAddr =
-        static_cast<unsigned char *>(allocateNewPage(numBytes, allocationSize));
-    return initializeAllocation(mInUseList, newPageAddr, numBytes);
-#else  // !defined(ANGLE_DISABLE_POOL_ALLOC)
-    void *alloc = malloc(numBytes + mAlignmentMask);
-    mStack.back().push_back(alloc);
 
-    intptr_t intAlloc = reinterpret_cast<intptr_t>(alloc);
-    intAlloc          = (intAlloc + mAlignmentMask) & ~mAlignmentMask;
-    return reinterpret_cast<void *>(intAlloc);
-#endif
-}
-
-#if !defined(ANGLE_DISABLE_POOL_ALLOC)
-void *PoolAllocator::allocateNewPage(size_t numBytes, size_t allocationSize)
-{
     //
     // Need a simple page to allocate from.
     //
     Header *memory;
     if (mFreeList)
     {
         memory    = mFreeList;
         mFreeList = mFreeList->nextPage;
     }
     else
     {
         memory = reinterpret_cast<Header *>(::new char[mPageSize]);
         if (memory == 0)
             return 0;
     }
+
     // Use placement-new to initialize header
     new (memory) Header(mInUseList, 1);
     mInUseList = memory;
 
     unsigned char *ret = reinterpret_cast<unsigned char *>(mInUseList) + mHeaderSkip;
     mCurrentPageOffset = (mHeaderSkip + allocationSize + mAlignmentMask) & ~mAlignmentMask;
-    return ret;
+    return initializeAllocation(mInUseList, ret, numBytes);
+#else  // !defined(ANGLE_DISABLE_POOL_ALLOC)
+    void *alloc = malloc(numBytes + mAlignmentMask);
+    mStack.back().push_back(alloc);
+
+    intptr_t intAlloc = reinterpret_cast<intptr_t>(alloc);
+    intAlloc          = (intAlloc + mAlignmentMask) & ~mAlignmentMask;
+    return reinterpret_cast<void *>(intAlloc);
+#endif
 }
-#endif
 
 void PoolAllocator::lock()
 {
     ASSERT(!mLocked);
     mLocked = true;
 }
 
 void PoolAllocator::unlock()
--- a/gfx/angle/checkout/src/common/PoolAlloc.h
+++ b/gfx/angle/checkout/src/common/PoolAlloc.h
@@ -33,17 +33,16 @@
 //
 
 #include <stddef.h>
 #include <string.h>
 #include <memory>
 #include <vector>
 
 #include "angleutils.h"
-#include "common/debug.h"
 
 namespace angle
 {
 // If we are using guard blocks, we must track each individual
 // allocation.  If we aren't using guard blocks, these
 // never get instantiated, so won't have any impact.
 //
 
@@ -119,20 +118,16 @@ class Allocation
 // The "page size" used is not, nor must it match, the underlying OS
 // page size.  But, having it be about that size or equal to a set of
 // pages is likely most optimal.
 //
 class PoolAllocator : angle::NonCopyable
 {
   public:
     static const int kDefaultAlignment = 16;
-    //
-    // Create PoolAllocator. If alignment is be set to 1 byte then fastAllocate()
-    //  function can be used to make allocations with less overhead.
-    //
     PoolAllocator(int growthIncrement = 8 * 1024, int allocationAlignment = kDefaultAlignment);
 
     //
     // Don't call the destructor just to free up the memory, call pop()
     //
     ~PoolAllocator();
 
     //
@@ -154,43 +149,16 @@ class PoolAllocator : angle::NonCopyable
 
     //
     // Call allocate() to actually acquire memory.  Returns 0 if no memory
     // available, otherwise a properly aligned pointer to 'numBytes' of memory.
     //
     void *allocate(size_t numBytes);
 
     //
-    // Call fastAllocate() for a faster allocate function that does minimal bookkeeping
-    // preCondition: Allocator must have been created w/ alignment of 1
-    ANGLE_INLINE uint8_t *fastAllocate(size_t numBytes)
-    {
-#if defined(ANGLE_DISABLE_POOL_ALLOC)
-        return reinterpret_cast<uint8_t *>(allocate(numBytes));
-#else
-        ASSERT(mAlignment == 1);
-        // No multi-page allocations
-        ASSERT(numBytes <= (mPageSize - mHeaderSkip));
-        //
-        // Do the allocation, most likely case inline first, for efficiency.
-        //
-        if (numBytes <= mPageSize - mCurrentPageOffset)
-        {
-            //
-            // Safe to allocate from mCurrentPageOffset.
-            //
-            uint8_t *memory = reinterpret_cast<uint8_t *>(mInUseList) + mCurrentPageOffset;
-            mCurrentPageOffset += numBytes;
-            return memory;
-        }
-        return reinterpret_cast<uint8_t *>(allocateNewPage(numBytes, numBytes));
-#endif
-    }
-
-    //
     // There is no deallocate.  The point of this class is that
     // deallocation can be skipped by the user of it, as the model
     // of use is to simultaneously deallocate everything at once
     // by calling pop(), and to not have to solve memory leak problems.
     //
 
     // Catch unwanted allocations.
     // TODO(jmadill): Remove this when we remove the global allocator.
@@ -232,18 +200,16 @@ class PoolAllocator : angle::NonCopyable
 
     struct AllocState
     {
         size_t offset;
         Header *page;
     };
     using AllocStack = std::vector<AllocState>;
 
-    // Slow path of allocation when we have to get a new page.
-    void *allocateNewPage(size_t numBytes, size_t allocationSize);
     // Track allocations if and only if we're using guard blocks
     void *initializeAllocation(Header *block, unsigned char *memory, size_t numBytes)
     {
 #    if defined(ANGLE_POOL_ALLOC_GUARD_BLOCKS)
         new (memory) Allocation(numBytes + mAlignment, memory, block->lastAllocation);
         block->lastAllocation = reinterpret_cast<Allocation *>(memory);
 #    endif
         // The OffsetAllocation() call is optimized away if !defined(ANGLE_POOL_ALLOC_GUARD_BLOCKS)
deleted file mode 100644
--- a/gfx/angle/checkout/src/common/android_util.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-//
-// Copyright 2018 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.
-//
-
-// android_util.cpp: Utilities for the using the Android platform
-
-#include "common/android_util.h"
-
-#include <cstdint>
-
-// Taken from cutils/native_handle.h:
-// https://android.googlesource.com/platform/system/core/+/master/libcutils/include/cutils/native_handle.h
-typedef struct native_handle
-{
-    int version; /* sizeof(native_handle_t) */
-    int numFds;  /* number of file-descriptors at &data[0] */
-    int numInts; /* number of ints at &data[numFds] */
-    int data[0]; /* numFds + numInts ints */
-} native_handle_t;
-
-// Taken from nativebase/nativebase.h
-// https://android.googlesource.com/platform/frameworks/native/+/master/libs/nativebase/include/nativebase/nativebase.h
-typedef const native_handle_t *buffer_handle_t;
-
-typedef struct android_native_base_t
-{
-    /* a magic value defined by the actual EGL native type */
-    int magic;
-    /* the sizeof() of the actual EGL native type */
-    int version;
-    void *reserved[4];
-    /* reference-counting interface */
-    void (*incRef)(struct android_native_base_t *base);
-    void (*decRef)(struct android_native_base_t *base);
-} android_native_base_t;
-
-typedef struct ANativeWindowBuffer
-{
-    struct android_native_base_t common;
-    int width;
-    int height;
-    int stride;
-    int format;
-    int usage_deprecated;
-    uintptr_t layerCount;
-    void *reserved[1];
-    const native_handle_t *handle;
-    uint64_t usage;
-    // we needed extra space for storing the 64-bits usage flags
-    // the number of slots to use from reserved_proc depends on the
-    // architecture.
-    void *reserved_proc[8 - (sizeof(uint64_t) / sizeof(void *))];
-} ANativeWindowBuffer_t;
-
-// Taken from android/hardware_buffer.h
-// https://android.googlesource.com/platform/frameworks/native/+/master/libs/nativewindow/include/android/hardware_buffer.h
-
-// AHARDWAREBUFFER_FORMAT_B8G8R8A8_UNORM AHARDWAREBUFFER_FORMAT_B4G4R4A4_UNORM,
-// AHARDWAREBUFFER_FORMAT_B5G5R5A1_UNORM formats were deprecated and re-added explicitly.
-
-// clang-format off
-/**
- * Buffer pixel formats.
- */
-enum {
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_R8G8B8A8_UNORM
-     *   OpenGL ES: GL_RGBA8
-     */
-    AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM           = 1,
-
-    /**
-     * 32 bits per pixel, 8 bits per channel format where alpha values are
-     * ignored (always opaque).
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_R8G8B8A8_UNORM
-     *   OpenGL ES: GL_RGB8
-     */
-    AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM           = 2,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_R8G8B8_UNORM
-     *   OpenGL ES: GL_RGB8
-     */
-    AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM             = 3,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_R5G6B5_UNORM_PACK16
-     *   OpenGL ES: GL_RGB565
-     */
-    AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM             = 4,
-
-    AHARDWAREBUFFER_FORMAT_B8G8R8A8_UNORM           = 5,
-    AHARDWAREBUFFER_FORMAT_B5G5R5A1_UNORM           = 6,
-    AHARDWAREBUFFER_FORMAT_B4G4R4A4_UNORM           = 7,
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_R16G16B16A16_SFLOAT
-     *   OpenGL ES: GL_RGBA16F
-     */
-    AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT       = 0x16,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_A2B10G10R10_UNORM_PACK32
-     *   OpenGL ES: GL_RGB10_A2
-     */
-    AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM        = 0x2b,
-
-    /**
-     * An opaque binary blob format that must have height 1, with width equal to
-     * the buffer size in bytes.
-     */
-    AHARDWAREBUFFER_FORMAT_BLOB                     = 0x21,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_D16_UNORM
-     *   OpenGL ES: GL_DEPTH_COMPONENT16
-     */
-    AHARDWAREBUFFER_FORMAT_D16_UNORM                = 0x30,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_X8_D24_UNORM_PACK32
-     *   OpenGL ES: GL_DEPTH_COMPONENT24
-     */
-    AHARDWAREBUFFER_FORMAT_D24_UNORM                = 0x31,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_D24_UNORM_S8_UINT
-     *   OpenGL ES: GL_DEPTH24_STENCIL8
-     */
-    AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT        = 0x32,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_D32_SFLOAT
-     *   OpenGL ES: GL_DEPTH_COMPONENT32F
-     */
-    AHARDWAREBUFFER_FORMAT_D32_FLOAT                = 0x33,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_D32_SFLOAT_S8_UINT
-     *   OpenGL ES: GL_DEPTH32F_STENCIL8
-     */
-    AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT        = 0x34,
-
-    /**
-     * Corresponding formats:
-     *   Vulkan: VK_FORMAT_S8_UINT
-     *   OpenGL ES: GL_STENCIL_INDEX8
-     */
-    AHARDWAREBUFFER_FORMAT_S8_UINT                  = 0x35,
-};
-// clang-format on
-
-namespace
-{
-
-// In the Android system:
-// - AHardwareBuffer is essentially a typedef of GraphicBuffer. Conversion functions simply
-// reinterpret_cast.
-// - GraphicBuffer inherits from two base classes, ANativeWindowBuffer and RefBase.
-//
-// GraphicBuffer implements a getter for ANativeWindowBuffer (getNativeBuffer) by static_casting
-// itself to its base class ANativeWindowBuffer. The offset of the ANativeWindowBuffer pointer
-// from the GraphicBuffer pointer is 16 bytes. This is likely due to two pointers: The vtable of
-// GraphicBuffer and the one pointer member of the RefBase class.
-//
-// This is not future proof at all. We need to look into getting utilities added to Android to
-// perform this cast for us.
-constexpr int kAHardwareBufferToANativeWindowBufferOffset = static_cast<int>(sizeof(void *)) * 2;
-
-template <typename T1, typename T2>
-T1 *offsetPointer(T2 *ptr, int bytes)
-{
-    return reinterpret_cast<T1 *>(reinterpret_cast<intptr_t>(ptr) + bytes);
-}
-
-}  // anonymous namespace
-
-namespace angle
-{
-
-namespace android
-{
-
-ANativeWindowBuffer *ClientBufferToANativeWindowBuffer(EGLClientBuffer clientBuffer)
-{
-    return reinterpret_cast<ANativeWindowBuffer *>(clientBuffer);
-}
-
-void GetANativeWindowBufferProperties(const ANativeWindowBuffer *buffer,
-                                      int *width,
-                                      int *height,
-                                      int *depth,
-                                      int *pixelFormat)
-{
-    *width       = buffer->width;
-    *height      = buffer->height;
-    *depth       = static_cast<int>(buffer->layerCount);
-    *height      = buffer->height;
-    *pixelFormat = buffer->format;
-}
-
-GLenum NativePixelFormatToGLInternalFormat(int pixelFormat)
-{
-    switch (pixelFormat)
-    {
-        case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM:
-            return GL_RGBA8;
-        case AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM:
-            return GL_RGB8;
-        case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
-            return GL_RGB8;
-        case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
-            return GL_RGB565;
-        case AHARDWAREBUFFER_FORMAT_B8G8R8A8_UNORM:
-            return GL_BGRA8_EXT;
-        case AHARDWAREBUFFER_FORMAT_B5G5R5A1_UNORM:
-            return GL_RGB5_A1;
-        case AHARDWAREBUFFER_FORMAT_B4G4R4A4_UNORM:
-            return GL_RGBA4;
-        case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
-            return GL_RGBA16F;
-        case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
-            return GL_RGB10_A2;
-        case AHARDWAREBUFFER_FORMAT_BLOB:
-            return GL_NONE;
-        case AHARDWAREBUFFER_FORMAT_D16_UNORM:
-            return GL_DEPTH_COMPONENT16;
-        case AHARDWAREBUFFER_FORMAT_D24_UNORM:
-            return GL_DEPTH_COMPONENT24;
-        case AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT:
-            return GL_DEPTH24_STENCIL8;
-        case AHARDWAREBUFFER_FORMAT_D32_FLOAT:
-            return GL_DEPTH_COMPONENT32F;
-        case AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT:
-            return GL_DEPTH32F_STENCIL8;
-        case AHARDWAREBUFFER_FORMAT_S8_UINT:
-            return GL_STENCIL_INDEX8;
-        default:
-            return GL_NONE;
-    }
-}
-
-AHardwareBuffer *ANativeWindowBufferToAHardwareBuffer(ANativeWindowBuffer *windowBuffer)
-{
-    return offsetPointer<AHardwareBuffer>(windowBuffer,
-                                          -kAHardwareBufferToANativeWindowBufferOffset);
-}
-
-EGLClientBuffer AHardwareBufferToClientBuffer(const AHardwareBuffer *hardwareBuffer)
-{
-    return offsetPointer<EGLClientBuffer>(hardwareBuffer,
-                                          kAHardwareBufferToANativeWindowBufferOffset);
-}
-
-}  // namespace android
-}  // namespace angle
deleted file mode 100644
--- a/gfx/angle/checkout/src/common/android_util.h
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Copyright 2018 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.
-//
-
-// android_util.h: Utilities for the using the Android platform
-
-#ifndef COMMON_ANDROIDUTIL_H_
-#define COMMON_ANDROIDUTIL_H_
-
-#include <EGL/egl.h>
-#include "angle_gl.h"
-
-struct ANativeWindowBuffer;
-struct AHardwareBuffer;
-
-namespace angle
-{
-
-namespace android
-{
-
-ANativeWindowBuffer *ClientBufferToANativeWindowBuffer(EGLClientBuffer clientBuffer);
-EGLClientBuffer AHardwareBufferToClientBuffer(const AHardwareBuffer *hardwareBuffer);
-
-void GetANativeWindowBufferProperties(const ANativeWindowBuffer *buffer,
-                                      int *width,
-                                      int *height,
-                                      int *depth,
-                                      int *pixelFormat);
-GLenum NativePixelFormatToGLInternalFormat(int pixelFormat);
-
-AHardwareBuffer *ANativeWindowBufferToAHardwareBuffer(ANativeWindowBuffer *windowBuffer);
-
-}  // namespace android
-}  // namespace angle
-
-#endif  // COMMON_ANDROIDUTIL_H_
--- a/gfx/angle/checkout/src/common/angleutils.h
+++ b/gfx/angle/checkout/src/common/angleutils.h
@@ -319,15 +319,9 @@ std::string ToString(const T &value)
 #endif  // !defined(__has_cpp_attribute)
 
 #if __has_cpp_attribute(nodiscard)
 #    define ANGLE_NO_DISCARD [[nodiscard]]
 #else
 #    define ANGLE_NO_DISCARD
 #endif  // __has_cpp_attribute(nodiscard)
 
-#if __has_cpp_attribute(maybe_unused)
-#    define ANGLE_MAYBE_UNUSED [[maybe_unused]]
-#else
-#    define ANGLE_MAYBE_UNUSED
-#endif  // __has_cpp_attribute(maybe_unused)
-
 #endif  // COMMON_ANGLEUTILS_H_
--- a/gfx/angle/checkout/src/common/bitset_utils.h
+++ b/gfx/angle/checkout/src/common/bitset_utils.h
@@ -16,21 +16,16 @@
 
 #include "common/angleutils.h"
 #include "common/debug.h"
 #include "common/mathutil.h"
 #include "common/platform.h"
 
 namespace angle
 {
-template <typename BitsT, typename ParamT>
-constexpr static BitsT Bit(ParamT x)
-{
-    return (static_cast<BitsT>(1) << static_cast<size_t>(x));
-}
 
 template <size_t N, typename BitsT, typename ParamT = std::size_t>
 class BitSetT final
 {
   public:
     class Reference final
     {
       public:
@@ -128,20 +123,24 @@ class BitSetT final
 
     unsigned long to_ulong() const { return static_cast<unsigned long>(mBits); }
     BitsT bits() const { return mBits; }
 
     Iterator begin() const { return Iterator(*this); }
     Iterator end() const { return Iterator(BitSetT()); }
 
   private:
+    constexpr static BitsT Bit(ParamT x)
+    {
+        return (static_cast<BitsT>(1) << static_cast<size_t>(x));
+    }
     // Produces a mask of ones up to the "x"th bit.
     constexpr static BitsT Mask(std::size_t x)
     {
-        return ((Bit<BitsT>(static_cast<ParamT>(x - 1)) - 1) << 1) + 1;
+        return ((Bit(static_cast<ParamT>(x - 1)) - 1) << 1) + 1;
     }
 
     BitsT mBits;
 };
 
 template <size_t N>
 class IterableBitSet : public std::bitset<N>
 {
@@ -279,17 +278,17 @@ template <size_t N, typename BitsT, type
 constexpr bool BitSetT<N, BitsT, ParamT>::operator[](ParamT pos) const
 {
     return test(pos);
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 bool BitSetT<N, BitsT, ParamT>::test(ParamT pos) const
 {
-    return (mBits & Bit<BitsT>(pos)) != 0;
+    return (mBits & Bit(pos)) != 0;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 bool BitSetT<N, BitsT, ParamT>::all() const
 {
     ASSERT(mBits == (mBits & Mask(N)));
     return mBits == Mask(N);
 }
@@ -326,17 +325,17 @@ BitSetT<N, BitsT, ParamT> &BitSetT<N, Bi
 {
     mBits |= other.mBits;
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::operator^=(const BitSetT &other)
 {
-    mBits = mBits ^ other.mBits;
+    mBits = (mBits ^ other.mBits) & Mask(N);
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> BitSetT<N, BitsT, ParamT>::operator~() const
 {
     return BitSetT<N, BitsT, ParamT>(~mBits & Mask(N));
 }
@@ -346,24 +345,24 @@ BitSetT<N, BitsT, ParamT> &BitSetT<N, Bi
 {
     mBits &= value;
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::operator|=(BitsT value)
 {
-    mBits |= value & Mask(N);
+    mBits |= value;
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::operator^=(BitsT value)
 {
-    mBits ^= value & Mask(N);
+    mBits ^= value;
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> BitSetT<N, BitsT, ParamT>::operator<<(std::size_t pos) const
 {
     return BitSetT<N, BitsT, ParamT>((mBits << pos) & Mask(N));
 }
@@ -386,65 +385,59 @@ BitSetT<N, BitsT, ParamT> &BitSetT<N, Bi
 {
     mBits = ((mBits >> pos) & Mask(N));
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::set()
 {
-    ASSERT(mBits == (mBits & Mask(N)));
     mBits = Mask(N);
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::set(ParamT pos, bool value)
 {
-    ASSERT(mBits == (mBits & Mask(N)));
     if (value)
     {
-        mBits |= Bit<BitsT>(pos) & Mask(N);
+        mBits |= Bit(pos);
     }
     else
     {
         reset(pos);
     }
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::reset()
 {
-    ASSERT(mBits == (mBits & Mask(N)));
     mBits = 0;
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::reset(ParamT pos)
 {
-    ASSERT(mBits == (mBits & Mask(N)));
-    mBits &= ~Bit<BitsT>(pos);
+    mBits &= ~Bit(pos);
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::flip()
 {
-    ASSERT(mBits == (mBits & Mask(N)));
     mBits ^= Mask(N);
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT> &BitSetT<N, BitsT, ParamT>::flip(ParamT pos)
 {
-    ASSERT(mBits == (mBits & Mask(N)));
-    mBits ^= Bit<BitsT>(pos) & Mask(N);
+    mBits ^= Bit(pos);
     return *this;
 }
 
 template <size_t N, typename BitsT, typename ParamT>
 BitSetT<N, BitsT, ParamT>::Iterator::Iterator(const BitSetT &bits) : mBitsCopy(bits), mCurrentBit(0)
 {
     if (bits.any())
     {
--- a/gfx/angle/checkout/src/common/debug.cpp
+++ b/gfx/angle/checkout/src/common/debug.cpp
@@ -18,30 +18,29 @@
 #include <vector>
 
 #if defined(ANGLE_PLATFORM_ANDROID)
 #    include <android/log.h>
 #endif
 
 #include "common/Optional.h"
 #include "common/angleutils.h"
-#include "common/system_utils.h"
 
 namespace gl
 {
 
 namespace
 {
 
 DebugAnnotator *g_debugAnnotator = nullptr;
 
 std::mutex *g_debugMutex = nullptr;
 
 constexpr std::array<const char *, LOG_NUM_SEVERITIES> g_logSeverityNames = {
-    {"EVENT", "INFO", "WARN", "ERR", "FATAL"}};
+    {"EVENT", "WARN", "ERR"}};
 
 constexpr const char *LogSeverityName(int severity)
 {
     return (severity >= 0 && severity < LOG_NUM_SEVERITIES) ? g_logSeverityNames[severity]
                                                             : "UNKNOWN";
 }
 
 bool ShouldCreateLogMessage(LogSeverity severity)
@@ -153,36 +152,24 @@ LogMessage::LogMessage(const char *funct
 LogMessage::~LogMessage()
 {
     std::unique_lock<std::mutex> lock;
     if (g_debugMutex != nullptr)
     {
         lock = std::unique_lock<std::mutex>(*g_debugMutex);
     }
 
-    if (DebugAnnotationsInitialized() && (mSeverity >= LOG_INFO))
+    if (DebugAnnotationsInitialized() && (mSeverity == LOG_ERR || mSeverity == LOG_WARN))
     {
         g_debugAnnotator->logMessage(*this);
     }
     else
     {
         Trace(getSeverity(), getMessage().c_str());
     }
-
-    if (mSeverity == LOG_FATAL)
-    {
-        if (angle::IsDebuggerAttached())
-        {
-            angle::BreakDebugger();
-        }
-        else
-        {
-            ANGLE_CRASH();
-        }
-    }
 }
 
 void Trace(LogSeverity severity, const char *message)
 {
     if (!ShouldCreateLogMessage(severity))
     {
         return;
     }
@@ -198,60 +185,41 @@ void Trace(LogSeverity severity, const c
                 // Debugging logging done in ScopedPerfEventHelper
                 break;
             default:
                 g_debugAnnotator->setMarker(message);
                 break;
         }
     }
 
-    if (severity == LOG_FATAL || severity == LOG_ERR || severity == LOG_WARN ||
-        severity == LOG_INFO)
+    if (severity == LOG_ERR || severity == LOG_WARN)
     {
 #if defined(ANGLE_PLATFORM_ANDROID)
-        android_LogPriority android_priority = ANDROID_LOG_ERROR;
-        switch (severity)
-        {
-            case LOG_INFO:
-                android_priority = ANDROID_LOG_INFO;
-                break;
-            case LOG_WARN:
-                android_priority = ANDROID_LOG_WARN;
-                break;
-            case LOG_ERR:
-                android_priority = ANDROID_LOG_ERROR;
-                break;
-            case LOG_FATAL:
-                android_priority = ANDROID_LOG_FATAL;
-                break;
-            default:
-                UNREACHABLE();
-        }
-        __android_log_print(android_priority, "ANGLE", "%s: %s\n", LogSeverityName(severity),
-                            str.c_str());
+        __android_log_print((severity == LOG_ERR) ? ANDROID_LOG_ERROR : ANDROID_LOG_WARN, "ANGLE",
+                            "%s: %s\n", LogSeverityName(severity), str.c_str());
 #else
         // Note: we use fprintf because <iostream> includes static initializers.
-        fprintf((severity >= LOG_ERR) ? stderr : stdout, "%s: %s\n", LogSeverityName(severity),
+        fprintf((severity == LOG_ERR) ? stderr : stdout, "%s: %s\n", LogSeverityName(severity),
                 str.c_str());
 #endif
     }
 
 #if defined(ANGLE_PLATFORM_WINDOWS) && \
     (defined(ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER) || !defined(NDEBUG))
 #    if !defined(ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER)
-    if (severity >= LOG_ERR)
+    if (severity == LOG_ERR)
 #    endif  // !defined(ANGLE_ENABLE_DEBUG_TRACE_TO_DEBUGGER)
     {
         OutputDebugStringA(str.c_str());
     }
 #endif
 
 #if defined(ANGLE_ENABLE_DEBUG_TRACE)
 #    if defined(NDEBUG)
-    if (severity == LOG_EVENT || severity == LOG_WARN || severity == LOG_INFO)
+    if (severity == LOG_EVENT || severity == LOG_WARN)
     {
         return;
     }
 #    endif  // defined(NDEBUG)
     static std::ofstream file(TRACE_OUTPUT_FILE, std::ofstream::app);
     if (file)
     {
         file << LogSeverityName(severity) << ": " << str << std::endl;
--- a/gfx/angle/checkout/src/common/debug.h
+++ b/gfx/angle/checkout/src/common/debug.h
@@ -39,21 +39,19 @@ class ScopedPerfEventHelper : angle::Non
   private:
     const char *mFunctionName;
 };
 
 using LogSeverity = int;
 // Note: the log severities are used to index into the array of names,
 // see g_logSeverityNames.
 constexpr LogSeverity LOG_EVENT          = 0;
-constexpr LogSeverity LOG_INFO           = 1;
-constexpr LogSeverity LOG_WARN           = 2;
-constexpr LogSeverity LOG_ERR            = 3;
-constexpr LogSeverity LOG_FATAL          = 4;
-constexpr LogSeverity LOG_NUM_SEVERITIES = 5;
+constexpr LogSeverity LOG_WARN           = 1;
+constexpr LogSeverity LOG_ERR            = 2;
+constexpr LogSeverity LOG_NUM_SEVERITIES = 3;
 
 void Trace(LogSeverity severity, const char *message);
 
 // This class more or less represents a particular log message.  You
 // create an instance of LogMessage and then stream stuff to it.
 // When you finish streaming to it, ~LogMessage is called and the
 // full message gets streamed to the appropriate destination.
 //
@@ -184,30 +182,24 @@ std::ostream &FmtHex(std::ostream &os, T
     return priv::FmtHexAutoSized(os, value);
 }
 
 // A few definitions of macros that don't generate much code. These are used
 // by ANGLE_LOG(). Since these are used all over our code, it's
 // better to have compact code for these operations.
 #define COMPACT_ANGLE_LOG_EX_EVENT(ClassName, ...) \
     ::gl::ClassName(__FUNCTION__, __LINE__, ::gl::LOG_EVENT, ##__VA_ARGS__)
-#define COMPACT_ANGLE_LOG_EX_INFO(ClassName, ...) \
-    ::gl::ClassName(__FUNCTION__, __LINE__, ::gl::LOG_INFO, ##__VA_ARGS__)
 #define COMPACT_ANGLE_LOG_EX_WARN(ClassName, ...) \
     ::gl::ClassName(__FUNCTION__, __LINE__, ::gl::LOG_WARN, ##__VA_ARGS__)
 #define COMPACT_ANGLE_LOG_EX_ERR(ClassName, ...) \
     ::gl::ClassName(__FUNCTION__, __LINE__, ::gl::LOG_ERR, ##__VA_ARGS__)
-#define COMPACT_ANGLE_LOG_EX_FATAL(ClassName, ...) \
-    ::gl::ClassName(__FUNCTION__, __LINE__, ::gl::LOG_FATAL, ##__VA_ARGS__)
 
 #define COMPACT_ANGLE_LOG_EVENT COMPACT_ANGLE_LOG_EX_EVENT(LogMessage)
-#define COMPACT_ANGLE_LOG_INFO COMPACT_ANGLE_LOG_EX_INFO(LogMessage)
 #define COMPACT_ANGLE_LOG_WARN COMPACT_ANGLE_LOG_EX_WARN(LogMessage)
 #define COMPACT_ANGLE_LOG_ERR COMPACT_ANGLE_LOG_EX_ERR(LogMessage)
-#define COMPACT_ANGLE_LOG_FATAL COMPACT_ANGLE_LOG_EX_FATAL(LogMessage)
 
 #define ANGLE_LOG_IS_ON(severity) (::gl::priv::ShouldCreatePlatformLogMessage(::gl::LOG_##severity))
 
 // Helper macro which avoids evaluating the arguments to a stream if the condition doesn't hold.
 // Condition is evaluated once and only once.
 #define ANGLE_LAZY_STREAM(stream, condition) \
     !(condition) ? static_cast<void>(0) : ::gl::priv::LogMessageVoidify() & (stream)
 
@@ -228,73 +220,74 @@ std::ostream &FmtHex(std::ostream &os, T
 #if defined(ANGLE_ENABLE_DEBUG_TRACE) || defined(ANGLE_ENABLE_DEBUG_ANNOTATIONS)
 #    define ANGLE_TRACE_ENABLED
 #endif
 
 #if !defined(NDEBUG) || defined(ANGLE_ENABLE_RELEASE_ASSERTS)
 #    define ANGLE_ENABLE_ASSERTS
 #endif
 
-#define INFO() ANGLE_LOG(INFO)
 #define WARN() ANGLE_LOG(WARN)
 #define ERR() ANGLE_LOG(ERR)
-#define FATAL() ANGLE_LOG(FATAL)
 
 // A macro to log a performance event around a scope.
 #if defined(ANGLE_TRACE_ENABLED)
 #    if defined(_MSC_VER)
 #        define EVENT(message, ...)                                                      \
             gl::ScopedPerfEventHelper scopedPerfEventHelper##__LINE__("%s" message "\n", \
                                                                       __FUNCTION__, __VA_ARGS__)
 #    else
 #        define EVENT(message, ...)                                                          \
             gl::ScopedPerfEventHelper scopedPerfEventHelper("%s" message "\n", __FUNCTION__, \
                                                             ##__VA_ARGS__)
 #    endif  // _MSC_VER
 #else
 #    define EVENT(message, ...) (void(0))
 #endif
 
-#if defined(__GNUC__)
+#if defined(COMPILER_GCC) || defined(__clang__)
 #    define ANGLE_CRASH() __builtin_trap()
 #else
 #    define ANGLE_CRASH() ((void)(*(volatile char *)0 = 0)), __assume(0)
 #endif
 
 #if !defined(NDEBUG)
 #    define ANGLE_ASSERT_IMPL(expression) assert(expression)
+#    define ANGLE_ASSERT_IMPL_IS_NORETURN 0
 #else
 // TODO(jmadill): Detect if debugger is attached and break.
 #    define ANGLE_ASSERT_IMPL(expression) ANGLE_CRASH()
+#    define ANGLE_ASSERT_IMPL_IS_NORETURN 1
 #endif  // !defined(NDEBUG)
 
 // Note that gSwallowStream is used instead of an arbitrary LOG() stream to avoid the creation of an
 // object with a non-trivial destructor (LogMessage). On MSVC x86 (checked on 2015 Update 3), this
 // causes a few additional pointless instructions to be emitted even at full optimization level,
 // even though the : arm of the ternary operator is clearly never executed. Using a simpler object
 // to be &'d with Voidify() avoids these extra instructions. Using a simpler POD object with a
 // templated operator<< also works to avoid these instructions. However, this causes warnings on
 // statically defined implementations of operator<<(std::ostream, ...) in some .cpp files, because
 // they become defined-but-unreferenced functions. A reinterpret_cast of 0 to an ostream* also is
 // not suitable, because some compilers warn of undefined behavior.
 #define ANGLE_EAT_STREAM_PARAMETERS \
     true ? static_cast<void>(0) : ::gl::priv::LogMessageVoidify() & (*::gl::priv::gSwallowStream)
 
 // A macro asserting a condition and outputting failures to the debug log
 #if defined(ANGLE_ENABLE_ASSERTS)
-#    define ASSERT(expression)                                                                \
-        (expression ? static_cast<void>(0)                                                    \
-                    : (FATAL() << "\t! Assert failed in " << __FUNCTION__ << " (" << __FILE__ \
-                               << ":" << __LINE__ << "): " << #expression))
+#    define ASSERT(expression)                                                              \
+        (expression ? static_cast<void>(0)                                                  \
+                    : ((ERR() << "\t! Assert failed in " << __FUNCTION__ << "(" << __LINE__ \
+                              << "): " << #expression),                                     \
+                       ANGLE_ASSERT_IMPL(expression)))
+#    define UNREACHABLE_IS_NORETURN ANGLE_ASSERT_IMPL_IS_NORETURN
 #else
 #    define ASSERT(condition) ANGLE_EAT_STREAM_PARAMETERS << !(condition)
+#    define UNREACHABLE_IS_NORETURN 0
 #endif  // defined(ANGLE_ENABLE_ASSERTS)
 
-#define UNREACHABLE_IS_NORETURN 0
-
 #define ANGLE_UNUSED_VARIABLE(variable) (static_cast<void>(variable))
 
 // A macro to indicate unimplemented functionality
 #ifndef NOASSERT_UNIMPLEMENTED
 #    define NOASSERT_UNIMPLEMENTED 1
 #endif
 
 #if defined(ANGLE_TRACE_ENABLED) || defined(ANGLE_ENABLE_ASSERTS)
@@ -302,21 +295,22 @@ std::ostream &FmtHex(std::ostream &os, T
         do                                                                                        \
         {                                                                                         \
             WARN() << "\t! Unimplemented: " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ \
                    << ")";                                                                        \
             ASSERT(NOASSERT_UNIMPLEMENTED);                                                       \
         } while (0)
 
 // A macro for code which is not expected to be reached under valid assumptions
-#    define UNREACHABLE()                                                                    \
-        do                                                                                   \
-        {                                                                                    \
-            FATAL() << "\t! Unreachable reached: " << __FUNCTION__ << "(" << __FILE__ << ":" \
-                    << __LINE__ << ")";                                                      \
+#    define UNREACHABLE()                                                                  \
+        do                                                                                 \
+        {                                                                                  \
+            ERR() << "\t! Unreachable reached: " << __FUNCTION__ << "(" << __FILE__ << ":" \
+                  << __LINE__ << ")";                                                      \
+            ASSERT(false);                                                                 \
         } while (0)
 #else
 #    define UNIMPLEMENTED()                 \
         do                                  \
         {                                   \
             ASSERT(NOASSERT_UNIMPLEMENTED); \
         } while (0)
 
@@ -336,17 +330,17 @@ std::ostream &FmtHex(std::ostream &os, T
 
 // Defining ANGLE_ENABLE_STRUCT_PADDING_WARNINGS will enable warnings when members are added to
 // structs to enforce packing. This is helpful for diagnosing unexpected struct sizes when making
 // fast cache variables.
 #if defined(__clang__)
 #    define ANGLE_ENABLE_STRUCT_PADDING_WARNINGS \
         _Pragma("clang diagnostic push") _Pragma("clang diagnostic error \"-Wpadded\"")
 #    define ANGLE_DISABLE_STRUCT_PADDING_WARNINGS _Pragma("clang diagnostic pop")
-#elif defined(__GNUC__)
+#elif defined(COMPILER_GCC)
 #    define ANGLE_ENABLE_STRUCT_PADDING_WARNINGS \
         _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic error \"-Wpadded\"")
 #    define ANGLE_DISABLE_STRUCT_PADDING_WARNINGS _Pragma("GCC diagnostic pop")
 #elif defined(_MSC_VER)
 #    define ANGLE_ENABLE_STRUCT_PADDING_WARNINGS \
         __pragma(warning(push)) __pragma(warning(error : 4820))
 #    define ANGLE_DISABLE_STRUCT_PADDING_WARNINGS __pragma(warning(pop))
 #else
--- a/gfx/angle/checkout/src/common/event_tracer.cpp
+++ b/gfx/angle/checkout/src/common/event_tracer.cpp
@@ -4,42 +4,43 @@
 
 #include "common/event_tracer.h"
 
 #include "common/debug.h"
 
 namespace angle
 {
 
-const unsigned char *GetTraceCategoryEnabledFlag(PlatformMethods *platform, const char *name)
+const unsigned char *GetTraceCategoryEnabledFlag(const char *name)
 {
+    auto *platform = ANGLEPlatformCurrent();
     ASSERT(platform);
 
     const unsigned char *categoryEnabledFlag =
         platform->getTraceCategoryEnabledFlag(platform, name);
     if (categoryEnabledFlag != nullptr)
     {
         return categoryEnabledFlag;
     }
 
     static unsigned char disabled = 0;
     return &disabled;
 }
 
-angle::TraceEventHandle AddTraceEvent(PlatformMethods *platform,
-                                      char phase,
+angle::TraceEventHandle AddTraceEvent(char phase,
                                       const unsigned char *categoryGroupEnabled,
                                       const char *name,
                                       unsigned long long id,
                                       int numArgs,
                                       const char **argNames,
                                       const unsigned char *argTypes,
                                       const unsigned long long *argValues,
                                       unsigned char flags)
 {
+    auto *platform = ANGLEPlatformCurrent();
     ASSERT(platform);
 
     double timestamp = platform->monotonicallyIncreasingTime(platform);
 
     if (timestamp != 0)
     {
         angle::TraceEventHandle handle =
             platform->addTraceEvent(platform, phase, categoryGroupEnabled, name, id, timestamp,
--- a/gfx/angle/checkout/src/common/event_tracer.h
+++ b/gfx/angle/checkout/src/common/event_tracer.h
@@ -5,19 +5,19 @@
 #ifndef COMMON_EVENT_TRACER_H_
 #define COMMON_EVENT_TRACER_H_
 
 #include "common/platform.h"
 #include "platform/Platform.h"
 
 namespace angle
 {
-const unsigned char *GetTraceCategoryEnabledFlag(PlatformMethods *platform, const char *name);
-angle::TraceEventHandle AddTraceEvent(PlatformMethods *platform,
-                                      char phase,
+
+const unsigned char *GetTraceCategoryEnabledFlag(const char *name);
+angle::TraceEventHandle AddTraceEvent(char phase,
                                       const unsigned char *categoryGroupEnabled,
                                       const char *name,
                                       unsigned long long id,
                                       int numArgs,
                                       const char **argNames,
                                       const unsigned char *argTypes,
                                       const unsigned long long *argValues,
                                       unsigned char flags);
--- a/gfx/angle/checkout/src/common/mathutil.h
+++ b/gfx/angle/checkout/src/common/mathutil.h
@@ -182,23 +182,19 @@ destType bitCast(const sourceType &sourc
 }
 
 inline unsigned short float32ToFloat16(float fp32)
 {
     unsigned int fp32i = bitCast<unsigned int>(fp32);
     unsigned int sign  = (fp32i & 0x80000000) >> 16;
     unsigned int abs   = fp32i & 0x7FFFFFFF;
 
-    if (abs > 0x7F800000)
-    {  // NaN
-        return 0x7FFF;
-    }
-    else if (abs > 0x47FFEFFF)
-    {  // Infinity
-        return static_cast<uint16_t>(sign | 0x7C00);
+    if (abs > 0x47FFEFFF)  // Infinity
+    {
+        return static_cast<unsigned short>(sign | 0x7FFF);
     }
     else if (abs < 0x38800000)  // Denormal
     {
         unsigned int mantissa = (abs & 0x007FFFFF) | 0x00800000;
         int e                 = 113 - (abs >> 23);
 
         if (e < 24)
         {
@@ -1243,60 +1239,40 @@ T roundUp(const T value, const T alignme
 template <typename T>
 angle::CheckedNumeric<T> CheckedRoundUp(const T value, const T alignment)
 {
     angle::CheckedNumeric<T> checkedValue(value);
     angle::CheckedNumeric<T> checkedAlignment(alignment);
     return roundUp(checkedValue, checkedAlignment);
 }
 
-inline constexpr unsigned int UnsignedCeilDivide(unsigned int value, unsigned int divisor)
+inline unsigned int UnsignedCeilDivide(unsigned int value, unsigned int divisor)
 {
     unsigned int divided = value / divisor;
     return (divided + ((value % divisor == 0) ? 0 : 1));
 }
 
-#if defined(__has_builtin)
-#    define ANGLE_HAS_BUILTIN(x) __has_builtin(x)
-#else
-#    define ANGLE_HAS_BUILTIN(x) 0
-#endif
-
 #if defined(_MSC_VER)
 
 #    define ANGLE_ROTL(x, y) _rotl(x, y)
-#    define ANGLE_ROTL64(x, y) _rotl64(x, y)
 #    define ANGLE_ROTR16(x, y) _rotr16(x, y)
 
-#elif defined(__clang__) && ANGLE_HAS_BUILTIN(__builtin_rotateleft32) && \
-    ANGLE_HAS_BUILTIN(__builtin_rotateleft64) && ANGLE_HAS_BUILTIN(__builtin_rotateright16)
-
-#    define ANGLE_ROTL(x, y) __builtin_rotateleft32(x, y)
-#    define ANGLE_ROTL64(x, y) __builtin_rotateleft64(x, y)
-#    define ANGLE_ROTR16(x, y) __builtin_rotateright16(x, y)
-
 #else
 
 inline uint32_t RotL(uint32_t x, int8_t r)
 {
     return (x << r) | (x >> (32 - r));
 }
 
-inline uint64_t RotL64(uint64_t x, int8_t r)
-{
-    return (x << r) | (x >> (64 - r));
-}
-
 inline uint16_t RotR16(uint16_t x, int8_t r)
 {
     return (x >> r) | (x << (16 - r));
 }
 
 #    define ANGLE_ROTL(x, y) ::rx::RotL(x, y)
-#    define ANGLE_ROTL64(x, y) ::rx::RotL64(x, y)
 #    define ANGLE_ROTR16(x, y) ::rx::RotR16(x, y)
 
 #endif  // namespace rx
 
 constexpr unsigned int Log2(unsigned int bytes)
 {
     return bytes == 1 ? 0 : (1 + Log2(bytes / 2));
 }
--- a/gfx/angle/checkout/src/common/string_utils.cpp
+++ b/gfx/angle/checkout/src/common/string_utils.cpp
@@ -52,17 +52,17 @@ std::vector<std::string> SplitString(con
 
         if (whitespace == TRIM_WHITESPACE)
         {
             piece = TrimString(piece, kWhitespaceASCII);
         }
 
         if (resultType == SPLIT_WANT_ALL || !piece.empty())
         {
-            result.push_back(std::move(piece));
+            result.push_back(piece);
         }
     }
 
     return result;
 }
 
 void SplitStringAlongWhitespace(const std::string &input, std::vector<std::string> *tokensOut)
 {
@@ -96,36 +96,16 @@ std::string TrimString(const std::string
     if (end == std::string::npos)
     {
         return input.substr(begin);
     }
 
     return input.substr(begin, end - begin + 1);
 }
 
-std::string GetPrefix(const std::string &input, size_t offset, const char *delimiter)
-{
-    size_t match = input.find(delimiter, offset);
-    if (match == std::string::npos)
-    {
-        return input.substr(offset);
-    }
-    return input.substr(offset, match - offset);
-}
-
-std::string GetPrefix(const std::string &input, size_t offset, char delimiter)
-{
-    size_t match = input.find(delimiter, offset);
-    if (match == std::string::npos)
-    {
-        return input.substr(offset);
-    }
-    return input.substr(offset, match - offset);
-}
-
 bool HexStringToUInt(const std::string &input, unsigned int *uintOut)
 {
     unsigned int offset = 0;
 
     if (input.size() >= 2 && input[0] == '0' && input[1] == 'x')
     {
         offset = 2u;
     }
@@ -152,16 +132,37 @@ bool ReadFileToString(const std::string 
     inFile.seekg(0, std::ios::end);
     stringOut->reserve(static_cast<std::string::size_type>(inFile.tellg()));
     inFile.seekg(0, std::ios::beg);
 
     stringOut->assign(std::istreambuf_iterator<char>(inFile), std::istreambuf_iterator<char>());
     return !inFile.fail();
 }
 
+Optional<std::vector<wchar_t>> WidenString(size_t length, const char *cString)
+{
+    std::vector<wchar_t> wcstring(length + 1);
+#if !defined(ANGLE_PLATFORM_WINDOWS)
+    mbstate_t mbstate = {};
+    size_t written    = mbsrtowcs(wcstring.data(), &cString, length + 1, &mbstate);
+    if (written == 0)
+    {
+        return Optional<std::vector<wchar_t>>::Invalid();
+    }
+#else
+    size_t convertedChars = 0;
+    errno_t err = mbstowcs_s(&convertedChars, wcstring.data(), length + 1, cString, _TRUNCATE);
+    if (err != 0)
+    {
+        return Optional<std::vector<wchar_t>>::Invalid();
+    }
+#endif
+    return Optional<std::vector<wchar_t>>(wcstring);
+}
+
 bool BeginsWith(const std::string &str, const std::string &prefix)
 {
     return strncmp(str.c_str(), prefix.c_str(), prefix.length()) == 0;
 }
 
 bool BeginsWith(const std::string &str, const char *prefix)
 {
     return strncmp(str.c_str(), prefix, strlen(prefix)) == 0;
--- a/gfx/angle/checkout/src/common/string_utils.h
+++ b/gfx/angle/checkout/src/common/string_utils.h
@@ -36,24 +36,22 @@ std::vector<std::string> SplitString(con
                                      const std::string &delimiters,
                                      WhitespaceHandling whitespace,
                                      SplitResult resultType);
 
 void SplitStringAlongWhitespace(const std::string &input, std::vector<std::string> *tokensOut);
 
 std::string TrimString(const std::string &input, const std::string &trimChars);
 
-// Return the substring starting at offset and up to the first occurance of the |delimeter|.
-std::string GetPrefix(const std::string &input, size_t offset, const char *delimiter);
-std::string GetPrefix(const std::string &input, size_t offset, char delimiter);
-
 bool HexStringToUInt(const std::string &input, unsigned int *uintOut);
 
 bool ReadFileToString(const std::string &path, std::string *stringOut);
 
+Optional<std::vector<wchar_t>> WidenString(size_t length, const char *cString);
+
 // Check if the string str begins with the given prefix.
 // The comparison is case sensitive.
 bool BeginsWith(const std::string &str, const std::string &prefix);
 
 // Check if the string str begins with the given prefix.
 // Prefix may not be NULL and needs to be NULL terminated.
 // The comparison is case sensitive.
 bool BeginsWith(const std::string &str, const char *prefix);
--- a/gfx/angle/checkout/src/common/system_utils.cpp
+++ b/gfx/angle/checkout/src/common/system_utils.cpp
@@ -5,16 +5,17 @@
 //
 
 // system_utils.cpp: Implementation of common functions
 
 #include "system_utils.h"
 
 namespace angle
 {
+
 bool PrependPathToEnvironmentVar(const char *variableName, const char *path)
 {
     std::string oldValue = GetEnvironmentVar(variableName);
     const char *newValue = nullptr;
     std::string buf;
     if (oldValue.empty())
     {
         newValue = path;
@@ -23,9 +24,10 @@ bool PrependPathToEnvironmentVar(const c
     {
         buf = path;
         buf += GetPathSeparator();
         buf += oldValue;
         newValue = buf.c_str();
     }
     return SetEnvironmentVar(variableName, newValue);
 }
+
 }  // namespace angle
--- a/gfx/angle/checkout/src/common/system_utils.h
+++ b/gfx/angle/checkout/src/common/system_utils.h
@@ -19,23 +19,20 @@ std::string GetExecutableDirectory();
 const char *GetSharedLibraryExtension();
 Optional<std::string> GetCWD();
 bool SetCWD(const char *dirName);
 bool SetEnvironmentVar(const char *variableName, const char *value);
 bool UnsetEnvironmentVar(const char *variableName);
 std::string GetEnvironmentVar(const char *variableName);
 const char *GetPathSeparator();
 bool PrependPathToEnvironmentVar(const char *variableName, const char *path);
-bool IsDirectory(const char *filename);
 
 // Run an application and get the output.  Gets a nullptr-terminated set of args to execute the
 // application with, and returns the stdout and stderr outputs as well as the exit code.
 //
-// Pass nullptr for stdoutOut/stderrOut if you don't need to capture. exitCodeOut is required.
-//
 // Returns false if it fails to actually execute the application.
 bool RunApp(const std::vector<const char *> &args,
             std::string *stdoutOut,
             std::string *stderrOut,
             int *exitCodeOut);
 
 class Library : angle::NonCopyable
 {
@@ -46,26 +43,12 @@ class Library : angle::NonCopyable