Bug 1472851 - Update ANGLE to mozilla/angle/firefox-63. (chromium 3440) draft
authorjgilbert@mozilla.com <jdashg@gmail.com>
Fri, 29 Jun 2018 19:13:04 -0700
changeset 813372 c1c0e5590eeede637d48aa0777471e136ac03d0c
parent 813370 cb68e83c86b7b70d0a661a5f5f9b455fd115a368
child 813395 5e2350334545e9934d3b5a35e2fe5356112c3578
push id114867
push userbmo:jgilbert@mozilla.com
push dateMon, 02 Jul 2018 23:01:55 +0000
bugs1472851
milestone63.0a1
Bug 1472851 - Update ANGLE to mozilla/angle/firefox-63. (chromium 3440) MozReview-Commit-ID: Hm6jbnqpaTt
gfx/angle/checkout/include/EGL/eglext_angle.h
gfx/angle/checkout/include/GLES/glext_angle.h
gfx/angle/checkout/include/GLES/glext_explicit_context_autogen.inc
gfx/angle/checkout/include/GLES2/gl2ext_angle.h
gfx/angle/checkout/include/GLES2/gl2ext_explicit_context_autogen.inc
gfx/angle/checkout/include/GLES3/gl31ext_explicit_context_autogen.inc
gfx/angle/checkout/include/GLES3/gl3ext_explicit_context_autogen.inc
gfx/angle/checkout/include/GLSLANG/ShaderLang.h
gfx/angle/checkout/out/gen/angle/id/commit.h
gfx/angle/checkout/src/common/debug.cpp
gfx/angle/checkout/src/common/debug.h
gfx/angle/checkout/src/common/platform.h
gfx/angle/checkout/src/common/third_party/base/anglebase/logging.h
gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.cpp
gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.h
gfx/angle/checkout/src/compiler/preprocessor/DirectiveHandlerBase.cpp
gfx/angle/checkout/src/compiler/preprocessor/DirectiveHandlerBase.h
gfx/angle/checkout/src/compiler/preprocessor/DirectiveParser.cpp
gfx/angle/checkout/src/compiler/preprocessor/DirectiveParser.h
gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.cpp
gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.h
gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.y
gfx/angle/checkout/src/compiler/preprocessor/Input.cpp
gfx/angle/checkout/src/compiler/preprocessor/Input.h
gfx/angle/checkout/src/compiler/preprocessor/Lexer.cpp
gfx/angle/checkout/src/compiler/preprocessor/Lexer.h
gfx/angle/checkout/src/compiler/preprocessor/Macro.cpp
gfx/angle/checkout/src/compiler/preprocessor/Macro.h
gfx/angle/checkout/src/compiler/preprocessor/MacroExpander.cpp
gfx/angle/checkout/src/compiler/preprocessor/MacroExpander.h
gfx/angle/checkout/src/compiler/preprocessor/Preprocessor.cpp
gfx/angle/checkout/src/compiler/preprocessor/Preprocessor.h
gfx/angle/checkout/src/compiler/preprocessor/SourceLocation.h
gfx/angle/checkout/src/compiler/preprocessor/Token.cpp
gfx/angle/checkout/src/compiler/preprocessor/Token.h
gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.cpp
gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.h
gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.l
gfx/angle/checkout/src/compiler/preprocessor/numeric_lex.h
gfx/angle/checkout/src/compiler/translator/CollectVariables.cpp
gfx/angle/checkout/src/compiler/translator/Compiler.cpp
gfx/angle/checkout/src/compiler/translator/ConstantUnion.cpp
gfx/angle/checkout/src/compiler/translator/Diagnostics.cpp
gfx/angle/checkout/src/compiler/translator/Diagnostics.h
gfx/angle/checkout/src/compiler/translator/DirectiveHandler.cpp
gfx/angle/checkout/src/compiler/translator/DirectiveHandler.h
gfx/angle/checkout/src/compiler/translator/IntermNode.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/ParseContext.cpp
gfx/angle/checkout/src/compiler/translator/ParseContext.h
gfx/angle/checkout/src/compiler/translator/Symbol.cpp
gfx/angle/checkout/src/compiler/translator/Symbol.h
gfx/angle/checkout/src/compiler/translator/SymbolTable.cpp
gfx/angle/checkout/src/compiler/translator/SymbolTable.h
gfx/angle/checkout/src/compiler/translator/glslang.l
gfx/angle/checkout/src/compiler/translator/glslang_lex.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteRepeatedAssignToSwizzled.cpp
gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteRepeatedAssignToSwizzled.h
gfx/angle/checkout/src/compiler/translator/tree_util/IntermTraverse.h
gfx/angle/checkout/src/compiler/translator/util.cpp
gfx/angle/checkout/src/gpu_info_util/SystemInfo.h
gfx/angle/checkout/src/libANGLE/AttributeMap.h
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/Compiler.h
gfx/angle/checkout/src/libANGLE/Context.cpp
gfx/angle/checkout/src/libANGLE/Context.h
gfx/angle/checkout/src/libANGLE/Context_gles_1_0.cpp
gfx/angle/checkout/src/libANGLE/Context_gles_1_0_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/Error.cpp
gfx/angle/checkout/src/libANGLE/Error.h
gfx/angle/checkout/src/libANGLE/ErrorStrings.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/GLES1Renderer.cpp
gfx/angle/checkout/src/libANGLE/GLES1Renderer.h
gfx/angle/checkout/src/libANGLE/GLES1Shaders.inc
gfx/angle/checkout/src/libANGLE/GLES1State.cpp
gfx/angle/checkout/src/libANGLE/GLES1State.h
gfx/angle/checkout/src/libANGLE/Image.cpp
gfx/angle/checkout/src/libANGLE/ImageIndex.cpp
gfx/angle/checkout/src/libANGLE/ImageIndex.h
gfx/angle/checkout/src/libANGLE/Observer.h
gfx/angle/checkout/src/libANGLE/PackedEGLEnums_autogen.cpp
gfx/angle/checkout/src/libANGLE/PackedEGLEnums_autogen.h
gfx/angle/checkout/src/libANGLE/PackedEnums.cpp
gfx/angle/checkout/src/libANGLE/PackedEnums.h
gfx/angle/checkout/src/libANGLE/PackedGLEnums.cpp
gfx/angle/checkout/src/libANGLE/PackedGLEnums.h
gfx/angle/checkout/src/libANGLE/PackedGLEnums_autogen.cpp
gfx/angle/checkout/src/libANGLE/PackedGLEnums_autogen.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/Shader.cpp
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/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/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/angletypes.cpp
gfx/angle/checkout/src/libANGLE/angletypes.h
gfx/angle/checkout/src/libANGLE/entry_points_enum_autogen.h
gfx/angle/checkout/src/libANGLE/formatutils.cpp
gfx/angle/checkout/src/libANGLE/queryutils.cpp
gfx/angle/checkout/src/libANGLE/queryutils.h
gfx/angle/checkout/src/libANGLE/renderer/BufferImpl.h
gfx/angle/checkout/src/libANGLE/renderer/FramebufferImpl.h
gfx/angle/checkout/src/libANGLE/renderer/GLImplFactory.h
gfx/angle/checkout/src/libANGLE/renderer/QueryImpl.h
gfx/angle/checkout/src/libANGLE/renderer/RenderTargetCache.h
gfx/angle/checkout/src/libANGLE/renderer/ShaderImpl.h
gfx/angle/checkout/src/libANGLE/renderer/SurfaceImpl.h
gfx/angle/checkout/src/libANGLE/renderer/TextureImpl.h
gfx/angle/checkout/src/libANGLE/renderer/VertexArrayImpl.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/ImageD3D.h
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.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/SurfaceD3D.h
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/d3d11/Blit11.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/Fence11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Image11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Query11.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/TextureStorage11.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/VertexArray11.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/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/Framebuffer9.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Query9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Query9.h
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.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/renderer_utils.cpp
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/validationES1.cpp
gfx/angle/checkout/src/libANGLE/validationES1.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/validationES31.h
gfx/angle/checkout/src/libGLESv2/entry_points_egl.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_1_0_autogen.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_2_0_ext.cpp
gfx/angle/checkout/src/libGLESv2/entry_points_gles_2_0_ext.h
gfx/angle/checkout/src/libGLESv2/entry_points_gles_3_0_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/libGLESv2.cpp
gfx/angle/checkout/src/libGLESv2/libGLESv2.def
gfx/angle/checkout/src/libGLESv2/libGLESv2_autogen.cpp
gfx/angle/checkout/src/libGLESv2/libGLESv2_autogen.def
gfx/angle/checkout/src/libGLESv2/proc_table_autogen.cpp
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
--- a/gfx/angle/checkout/include/EGL/eglext_angle.h
+++ b/gfx/angle/checkout/include/EGL/eglext_angle.h
@@ -64,16 +64,17 @@
 #define EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE 0x320C
 #define EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE 0x320F
 #endif /* EGL_ANGLE_platform_angle_d3d */
 
 #ifndef EGL_ANGLE_platform_angle_opengl
 #define EGL_ANGLE_platform_angle_opengl 1
 #define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320D
 #define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320E
+#define EGL_PLATFORM_ANGLE_EGL_HANDLE_ANGLE 0x3480
 #endif /* EGL_ANGLE_platform_angle_opengl */
 
 #ifndef EGL_ANGLE_platform_angle_null
 #define EGL_ANGLE_platform_angle_null 1
 #define EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE 0x33AE
 #endif /* EGL_ANGLE_platform_angle_null */
 
 #ifndef EGL_ANGLE_platform_angle_vulkan
--- a/gfx/angle/checkout/include/GLES/glext_angle.h
+++ b/gfx/angle/checkout/include/GLES/glext_angle.h
@@ -7,11 +7,17 @@
 //   Currently we don't include this file directly, we patch glext.h
 //   to include it implicitly so it is visible throughout our code.
 
 #ifndef INCLUDE_GLES_GLEXT_ANGLE_H_
 #define INCLUDE_GLES_GLEXT_ANGLE_H_
 
 // clang-format off
 
+#ifndef GL_ANGLE_explicit_context_gles1
+#define GL_ANGLE_explicit_context_gles1
+typedef void *GLeglContext;
+#include "glext_explicit_context_autogen.inc"
+#endif /* GL_ANGLE_explicit_context_gles1 */
+
 // clang-format on
 
 #endif  // INCLUDE_GLES_GLEXT_ANGLE_H_
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/include/GLES/glext_explicit_context_autogen.inc
@@ -0,0 +1,260 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
+//
+// 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.
+//
+// glext_explicit_context_autogen.inc:
+//   Function declarations for the EGL_ANGLE_explicit_context extension
+
+typedef void (GL_APIENTRYP PFNGLALPHAFUNCCONTEXTANGLE)(GLeglContext ctx, GLenum func, GLfloat ref);
+typedef void (GL_APIENTRYP PFNGLALPHAFUNCXCONTEXTANGLE)(GLeglContext ctx, GLenum func, GLfixed ref);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORXCONTEXTANGLE)(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHXCONTEXTANGLE)(GLeglContext ctx, GLfixed depth);
+typedef void (GL_APIENTRYP PFNGLCLIENTACTIVETEXTURECONTEXTANGLE)(GLeglContext ctx, GLenum texture);
+typedef void (GL_APIENTRYP PFNGLCLIPPLANEFCONTEXTANGLE)(GLeglContext ctx, GLenum p, const GLfloat *eqn);
+typedef void (GL_APIENTRYP PFNGLCLIPPLANEXCONTEXTANGLE)(GLeglContext ctx, GLenum plane, const GLfixed *equation);
+typedef void (GL_APIENTRYP PFNGLCOLOR4FCONTEXTANGLE)(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCOLOR4UBCONTEXTANGLE)(GLeglContext ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+typedef void (GL_APIENTRYP PFNGLCOLOR4XCONTEXTANGLE)(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (GL_APIENTRYP PFNGLCOLORPOINTERCONTEXTANGLE)(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEXCONTEXTANGLE)(GLeglContext ctx, GLfixed n, GLfixed f);
+typedef void (GL_APIENTRYP PFNGLDISABLECLIENTSTATECONTEXTANGLE)(GLeglContext ctx, GLenum array);
+typedef void (GL_APIENTRYP PFNGLENABLECLIENTSTATECONTEXTANGLE)(GLeglContext ctx, GLenum array);
+typedef void (GL_APIENTRYP PFNGLFOGFCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLFOGFVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLFOGXCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLFOGXVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, const GLfixed *param);
+typedef void (GL_APIENTRYP PFNGLFRUSTUMFCONTEXTANGLE)(GLeglContext ctx, GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLFRUSTUMXCONTEXTANGLE)(GLeglContext ctx, GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEFCONTEXTANGLE)(GLeglContext ctx, GLenum plane, GLfloat *equation);
+typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEXCONTEXTANGLE)(GLeglContext ctx, GLenum plane, GLfixed *equation);
+typedef void (GL_APIENTRYP PFNGLGETFIXEDVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLGETLIGHTFVCONTEXTANGLE)(GLeglContext ctx, GLenum light, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETLIGHTXVCONTEXTANGLE)(GLeglContext ctx, GLenum light, GLenum pname, GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLGETMATERIALFVCONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETMATERIALXVCONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum pname, GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLGETPOINTERVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLGETTEXENVFVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXENVIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXENVXVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERXVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLLIGHTMODELFCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLLIGHTMODELFVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLLIGHTMODELXCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLLIGHTMODELXVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, const GLfixed *param);
+typedef void (GL_APIENTRYP PFNGLLIGHTFCONTEXTANGLE)(GLeglContext ctx, GLenum light, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLLIGHTFVCONTEXTANGLE)(GLeglContext ctx, GLenum light, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLLIGHTXCONTEXTANGLE)(GLeglContext ctx, GLenum light, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLLIGHTXVCONTEXTANGLE)(GLeglContext ctx, GLenum light, GLenum pname, const GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHXCONTEXTANGLE)(GLeglContext ctx, GLfixed width);
+typedef void (GL_APIENTRYP PFNGLLOADIDENTITYCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLLOADMATRIXFCONTEXTANGLE)(GLeglContext ctx, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLLOADMATRIXXCONTEXTANGLE)(GLeglContext ctx, const GLfixed *m);
+typedef void (GL_APIENTRYP PFNGLLOGICOPCONTEXTANGLE)(GLeglContext ctx, GLenum opcode);
+typedef void (GL_APIENTRYP PFNGLMATERIALFCONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLMATERIALFVCONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLMATERIALXCONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLMATERIALXVCONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum pname, const GLfixed *param);
+typedef void (GL_APIENTRYP PFNGLMATRIXMODECONTEXTANGLE)(GLeglContext ctx, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLMULTMATRIXFCONTEXTANGLE)(GLeglContext ctx, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMULTMATRIXXCONTEXTANGLE)(GLeglContext ctx, const GLfixed *m);
+typedef void (GL_APIENTRYP PFNGLMULTITEXCOORD4FCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (GL_APIENTRYP PFNGLMULTITEXCOORD4XCONTEXTANGLE)(GLeglContext ctx, GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (GL_APIENTRYP PFNGLNORMAL3FCONTEXTANGLE)(GLeglContext ctx, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (GL_APIENTRYP PFNGLNORMAL3XCONTEXTANGLE)(GLeglContext ctx, GLfixed nx, GLfixed ny, GLfixed nz);
+typedef void (GL_APIENTRYP PFNGLNORMALPOINTERCONTEXTANGLE)(GLeglContext ctx, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLORTHOFCONTEXTANGLE)(GLeglContext ctx, GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLORTHOXCONTEXTANGLE)(GLeglContext ctx, GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERFCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERFVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, const GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLPOINTSIZECONTEXTANGLE)(GLeglContext ctx, GLfloat size);
+typedef void (GL_APIENTRYP PFNGLPOINTSIZEXCONTEXTANGLE)(GLeglContext ctx, GLfixed size);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETXCONTEXTANGLE)(GLeglContext ctx, GLfixed factor, GLfixed units);
+typedef void (GL_APIENTRYP PFNGLPOPMATRIXCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLPUSHMATRIXCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLROTATEFCONTEXTANGLE)(GLeglContext ctx, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLROTATEXCONTEXTANGLE)(GLeglContext ctx, GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEXCONTEXTANGLE)(GLeglContext ctx, GLclampx value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCALEFCONTEXTANGLE)(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLSCALEXCONTEXTANGLE)(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z);
+typedef void (GL_APIENTRYP PFNGLSHADEMODELCONTEXTANGLE)(GLeglContext ctx, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLTEXCOORDPOINTERCONTEXTANGLE)(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLTEXENVFCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXENVFVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXENVICONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXENVIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXENVXCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLTEXENVXVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, const GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, const GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLTRANSLATEFCONTEXTANGLE)(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLTRANSLATEXCONTEXTANGLE)(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z);
+typedef void (GL_APIENTRYP PFNGLVERTEXPOINTERCONTEXTANGLE)(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFEROESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFEROESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint renderbuffer);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSOESCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLCURRENTPALETTEMATRIXOESCONTEXTANGLE)(GLeglContext ctx, GLuint matrixpaletteindex);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSOESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSOESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXFOESCONTEXTANGLE)(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXFVOESCONTEXTANGLE)(GLeglContext ctx, const GLfloat *coords);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXIOESCONTEXTANGLE)(GLeglContext ctx, GLint x, GLint y, GLint z, GLint width, GLint height);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXIVOESCONTEXTANGLE)(GLeglContext ctx, const GLint *coords);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXSOESCONTEXTANGLE)(GLeglContext ctx, GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXSVOESCONTEXTANGLE)(GLeglContext ctx, const GLshort *coords);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXXOESCONTEXTANGLE)(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
+typedef void (GL_APIENTRYP PFNGLDRAWTEXXVOESCONTEXTANGLE)(GLeglContext ctx, const GLfixed *coords);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEROESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DOESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSOESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSOESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPOESCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVOESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXGENFVOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXGENIVOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXGENXVOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, GLfixed *params);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFEROESCONTEXTANGLE)(GLeglContext ctx, GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFEROESCONTEXTANGLE)(GLeglContext ctx, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLMATRIXINDEXPOINTEROESCONTEXTANGLE)(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLPOINTSIZEPOINTEROESCONTEXTANGLE)(GLeglContext ctx, GLenum type, GLsizei stride, const void *pointer);
+typedef GLbitfield (GL_APIENTRYP PFNGLQUERYMATRIXXOESCONTEXTANGLE)(GLeglContext ctx, GLfixed *mantissa, GLint *exponent);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEOESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXGENFOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXGENFVOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXGENIOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXGENIVOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXGENXOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, GLfixed param);
+typedef void (GL_APIENTRYP PFNGLTEXGENXVOESCONTEXTANGLE)(GLeglContext ctx, GLenum coord, GLenum pname, const GLfixed *params);
+typedef void (GL_APIENTRYP PFNGLWEIGHTPOINTEROESCONTEXTANGLE)(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_API void GL_APIENTRY glAlphaFuncContextANGLE(GLeglContext ctx, GLenum func, GLfloat ref);
+GL_API void GL_APIENTRY glAlphaFuncxContextANGLE(GLeglContext ctx, GLenum func, GLfixed ref);
+GL_API void GL_APIENTRY glClearColorxContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GL_API void GL_APIENTRY glClearDepthxContextANGLE(GLeglContext ctx, GLfixed depth);
+GL_API void GL_APIENTRY glClientActiveTextureContextANGLE(GLeglContext ctx, GLenum texture);
+GL_API void GL_APIENTRY glClipPlanefContextANGLE(GLeglContext ctx, GLenum p, const GLfloat *eqn);
+GL_API void GL_APIENTRY glClipPlanexContextANGLE(GLeglContext ctx, GLenum plane, const GLfixed *equation);
+GL_API void GL_APIENTRY glColor4fContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_API void GL_APIENTRY glColor4ubContextANGLE(GLeglContext ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+GL_API void GL_APIENTRY glColor4xContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GL_API void GL_APIENTRY glColorPointerContextANGLE(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_API void GL_APIENTRY glDepthRangexContextANGLE(GLeglContext ctx, GLfixed n, GLfixed f);
+GL_API void GL_APIENTRY glDisableClientStateContextANGLE(GLeglContext ctx, GLenum array);
+GL_API void GL_APIENTRY glEnableClientStateContextANGLE(GLeglContext ctx, GLenum array);
+GL_API void GL_APIENTRY glFogfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param);
+GL_API void GL_APIENTRY glFogfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params);
+GL_API void GL_APIENTRY glFogxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glFogxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *param);
+GL_API void GL_APIENTRY glFrustumfContextANGLE(GLeglContext ctx, GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+GL_API void GL_APIENTRY glFrustumxContextANGLE(GLeglContext ctx, GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GL_API void GL_APIENTRY glGetClipPlanefContextANGLE(GLeglContext ctx, GLenum plane, GLfloat *equation);
+GL_API void GL_APIENTRY glGetClipPlanexContextANGLE(GLeglContext ctx, GLenum plane, GLfixed *equation);
+GL_API void GL_APIENTRY glGetFixedvContextANGLE(GLeglContext ctx, GLenum pname, GLfixed *params);
+GL_API void GL_APIENTRY glGetLightfvContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfloat *params);
+GL_API void GL_APIENTRY glGetLightxvContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfixed *params);
+GL_API void GL_APIENTRY glGetMaterialfvContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfloat *params);
+GL_API void GL_APIENTRY glGetMaterialxvContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfixed *params);
+GL_API void GL_APIENTRY glGetPointervContextANGLE(GLeglContext ctx, GLenum pname, void **params);
+GL_API void GL_APIENTRY glGetTexEnvfvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfloat *params);
+GL_API void GL_APIENTRY glGetTexEnvivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+GL_API void GL_APIENTRY glGetTexEnvxvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfixed *params);
+GL_API void GL_APIENTRY glGetTexParameterxvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfixed *params);
+GL_API void GL_APIENTRY glLightModelfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param);
+GL_API void GL_APIENTRY glLightModelfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params);
+GL_API void GL_APIENTRY glLightModelxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glLightModelxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *param);
+GL_API void GL_APIENTRY glLightfContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfloat param);
+GL_API void GL_APIENTRY glLightfvContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, const GLfloat *params);
+GL_API void GL_APIENTRY glLightxContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glLightxvContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, const GLfixed *params);
+GL_API void GL_APIENTRY glLineWidthxContextANGLE(GLeglContext ctx, GLfixed width);
+GL_API void GL_APIENTRY glLoadIdentityContextANGLE(GLeglContext ctx);
+GL_API void GL_APIENTRY glLoadMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m);
+GL_API void GL_APIENTRY glLoadMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m);
+GL_API void GL_APIENTRY glLogicOpContextANGLE(GLeglContext ctx, GLenum opcode);
+GL_API void GL_APIENTRY glMaterialfContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfloat param);
+GL_API void GL_APIENTRY glMaterialfvContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, const GLfloat *params);
+GL_API void GL_APIENTRY glMaterialxContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glMaterialxvContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, const GLfixed *param);
+GL_API void GL_APIENTRY glMatrixModeContextANGLE(GLeglContext ctx, GLenum mode);
+GL_API void GL_APIENTRY glMultMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m);
+GL_API void GL_APIENTRY glMultMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m);
+GL_API void GL_APIENTRY glMultiTexCoord4fContextANGLE(GLeglContext ctx, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GL_API void GL_APIENTRY glMultiTexCoord4xContextANGLE(GLeglContext ctx, GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GL_API void GL_APIENTRY glNormal3fContextANGLE(GLeglContext ctx, GLfloat nx, GLfloat ny, GLfloat nz);
+GL_API void GL_APIENTRY glNormal3xContextANGLE(GLeglContext ctx, GLfixed nx, GLfixed ny, GLfixed nz);
+GL_API void GL_APIENTRY glNormalPointerContextANGLE(GLeglContext ctx, GLenum type, GLsizei stride, const void *pointer);
+GL_API void GL_APIENTRY glOrthofContextANGLE(GLeglContext ctx, GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+GL_API void GL_APIENTRY glOrthoxContextANGLE(GLeglContext ctx, GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GL_API void GL_APIENTRY glPointParameterfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param);
+GL_API void GL_APIENTRY glPointParameterfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params);
+GL_API void GL_APIENTRY glPointParameterxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glPointParameterxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *params);
+GL_API void GL_APIENTRY glPointSizeContextANGLE(GLeglContext ctx, GLfloat size);
+GL_API void GL_APIENTRY glPointSizexContextANGLE(GLeglContext ctx, GLfixed size);
+GL_API void GL_APIENTRY glPolygonOffsetxContextANGLE(GLeglContext ctx, GLfixed factor, GLfixed units);
+GL_API void GL_APIENTRY glPopMatrixContextANGLE(GLeglContext ctx);
+GL_API void GL_APIENTRY glPushMatrixContextANGLE(GLeglContext ctx);
+GL_API void GL_APIENTRY glRotatefContextANGLE(GLeglContext ctx, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GL_API void GL_APIENTRY glRotatexContextANGLE(GLeglContext ctx, GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+GL_API void GL_APIENTRY glSampleCoveragexContextANGLE(GLeglContext ctx, GLclampx value, GLboolean invert);
+GL_API void GL_APIENTRY glScalefContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z);
+GL_API void GL_APIENTRY glScalexContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z);
+GL_API void GL_APIENTRY glShadeModelContextANGLE(GLeglContext ctx, GLenum mode);
+GL_API void GL_APIENTRY glTexCoordPointerContextANGLE(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_API void GL_APIENTRY glTexEnvfContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfloat param);
+GL_API void GL_APIENTRY glTexEnvfvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLfloat *params);
+GL_API void GL_APIENTRY glTexEnviContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint param);
+GL_API void GL_APIENTRY glTexEnvivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLint *params);
+GL_API void GL_APIENTRY glTexEnvxContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glTexEnvxvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLfixed *params);
+GL_API void GL_APIENTRY glTexParameterxContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glTexParameterxvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLfixed *params);
+GL_API void GL_APIENTRY glTranslatefContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z);
+GL_API void GL_APIENTRY glTranslatexContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z);
+GL_API void GL_APIENTRY glVertexPointerContextANGLE(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_API void GL_APIENTRY glBindFramebufferOESContextANGLE(GLeglContext ctx, GLenum target, GLuint framebuffer);
+GL_API void GL_APIENTRY glBindRenderbufferOESContextANGLE(GLeglContext ctx, GLenum target, GLuint renderbuffer);
+GL_API GLenum GL_APIENTRY glCheckFramebufferStatusOESContextANGLE(GLeglContext ctx, GLenum target);
+GL_API void GL_APIENTRY glCurrentPaletteMatrixOESContextANGLE(GLeglContext ctx, GLuint matrixpaletteindex);
+GL_API void GL_APIENTRY glDeleteFramebuffersOESContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *framebuffers);
+GL_API void GL_APIENTRY glDeleteRenderbuffersOESContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *renderbuffers);
+GL_API void GL_APIENTRY glDrawTexfOESContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
+GL_API void GL_APIENTRY glDrawTexfvOESContextANGLE(GLeglContext ctx, const GLfloat *coords);
+GL_API void GL_APIENTRY glDrawTexiOESContextANGLE(GLeglContext ctx, GLint x, GLint y, GLint z, GLint width, GLint height);
+GL_API void GL_APIENTRY glDrawTexivOESContextANGLE(GLeglContext ctx, const GLint *coords);
+GL_API void GL_APIENTRY glDrawTexsOESContextANGLE(GLeglContext ctx, GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
+GL_API void GL_APIENTRY glDrawTexsvOESContextANGLE(GLeglContext ctx, const GLshort *coords);
+GL_API void GL_APIENTRY glDrawTexxOESContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
+GL_API void GL_APIENTRY glDrawTexxvOESContextANGLE(GLeglContext ctx, const GLfixed *coords);
+GL_API void GL_APIENTRY glFramebufferRenderbufferOESContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_API void GL_APIENTRY glFramebufferTexture2DOESContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_API void GL_APIENTRY glGenFramebuffersOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *framebuffers);
+GL_API void GL_APIENTRY glGenRenderbuffersOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *renderbuffers);
+GL_API void GL_APIENTRY glGenerateMipmapOESContextANGLE(GLeglContext ctx, GLenum target);
+GL_API void GL_APIENTRY glGetFramebufferAttachmentParameterivOESContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GL_API void GL_APIENTRY glGetRenderbufferParameterivOESContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+GL_API void GL_APIENTRY glGetTexGenfvOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLfloat *params);
+GL_API void GL_APIENTRY glGetTexGenivOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLint *params);
+GL_API void GL_APIENTRY glGetTexGenxvOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLfixed *params);
+GL_API GLboolean GL_APIENTRY glIsFramebufferOESContextANGLE(GLeglContext ctx, GLuint framebuffer);
+GL_API GLboolean GL_APIENTRY glIsRenderbufferOESContextANGLE(GLeglContext ctx, GLuint renderbuffer);
+GL_API void GL_APIENTRY glLoadPaletteFromModelViewMatrixOESContextANGLE(GLeglContext ctx);
+GL_API void GL_APIENTRY glMatrixIndexPointerOESContextANGLE(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_API void GL_APIENTRY glPointSizePointerOESContextANGLE(GLeglContext ctx, GLenum type, GLsizei stride, const void *pointer);
+GL_API GLbitfield GL_APIENTRY glQueryMatrixxOESContextANGLE(GLeglContext ctx, GLfixed *mantissa, GLint *exponent);
+GL_API void GL_APIENTRY glRenderbufferStorageOESContextANGLE(GLeglContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_API void GL_APIENTRY glTexGenfOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLfloat param);
+GL_API void GL_APIENTRY glTexGenfvOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, const GLfloat *params);
+GL_API void GL_APIENTRY glTexGeniOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLint param);
+GL_API void GL_APIENTRY glTexGenivOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, const GLint *params);
+GL_API void GL_APIENTRY glTexGenxOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLfixed param);
+GL_API void GL_APIENTRY glTexGenxvOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, const GLfixed *params);
+GL_API void GL_APIENTRY glWeightPointerOESContextANGLE(GLeglContext ctx, GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
\ No newline at end of file
--- a/gfx/angle/checkout/include/GLES2/gl2ext_angle.h
+++ b/gfx/angle/checkout/include/GLES2/gl2ext_angle.h
@@ -541,11 +541,19 @@ GL_APICALL void GL_APIENTRY glFramebuffe
 #ifndef GL_ANGLE_texture_rectangle
 #define GL_ANGLE_texture_rectangle 1
 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE 0x84F8
 #define GL_TEXTURE_RECTANGLE_ANGLE 0x84F5
 #define GL_TEXTURE_BINDING_RECTANGLE_ANGLE 0x84F6
 #define GL_SAMPLER_2D_RECT_ANGLE 0x8B63
 #endif /* GL_ANGLE_texture_rectangle */
 
+#ifndef GL_ANGLE_explicit_context
+#define GL_ANGLE_explicit_context
+typedef void *GLeglContext;
+#include "gl2ext_explicit_context_autogen.inc"
+#include "../GLES3/gl3ext_explicit_context_autogen.inc"
+#include "../GLES3/gl31ext_explicit_context_autogen.inc"
+#endif /* GL_ANGLE_explicit_context */
+
 // clang-format on
 
 #endif  // INCLUDE_GLES2_GL2EXT_ANGLE_H_
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/include/GLES2/gl2ext_explicit_context_autogen.inc
@@ -0,0 +1,610 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
+//
+// 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.
+//
+// gl2ext_explicit_context_autogen.inc:
+//   Function declarations for the EGL_ANGLE_explicit_context extension
+
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTURECONTEXTANGLE)(GLeglContext ctx, GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTURECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORCONTEXTANGLE)(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONCONTEXTANGLE)(GLeglContext ctx, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATECONTEXTANGLE)(GLeglContext ctx, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCCONTEXTANGLE)(GLeglContext ctx, GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATECONTEXTANGLE)(GLeglContext ctx, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATACONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATACONTEXTANGLE)(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARCONTEXTANGLE)(GLeglContext ctx, GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORCONTEXTANGLE)(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFCONTEXTANGLE)(GLeglContext ctx, GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILCONTEXTANGLE)(GLeglContext ctx, GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKCONTEXTANGLE)(GLeglContext ctx, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERCONTEXTANGLE)(GLeglContext ctx, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMCONTEXTANGLE)(GLeglContext ctx);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERCONTEXTANGLE)(GLeglContext ctx, GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACECONTEXTANGLE)(GLeglContext ctx, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMCONTEXTANGLE)(GLeglContext ctx, GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERCONTEXTANGLE)(GLeglContext ctx, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCCONTEXTANGLE)(GLeglContext ctx, GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKCONTEXTANGLE)(GLeglContext ctx, GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFCONTEXTANGLE)(GLeglContext ctx, GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLECONTEXTANGLE)(GLeglContext ctx, GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYCONTEXTANGLE)(GLeglContext ctx, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSCONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSCONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLECONTEXTANGLE)(GLeglContext ctx, GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYCONTEXTANGLE)(GLeglContext ctx, GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLFLUSHCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACECONTEXTANGLE)(GLeglContext ctx, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONCONTEXTANGLE)(GLeglContext ctx, GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGCONTEXTANGLE)(GLeglContext ctx, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATCONTEXTANGLE)(GLeglContext ctx, GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCECONTEXTANGLE)(GLeglContext ctx, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVCONTEXTANGLE)(GLeglContext ctx, GLuint shader, GLenum pname, GLint *params);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGCONTEXTANGLE)(GLeglContext ctx, GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONCONTEXTANGLE)(GLeglContext ctx, GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLHINTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERCONTEXTANGLE)(GLeglContext ctx, GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDCONTEXTANGLE)(GLeglContext ctx, GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERCONTEXTANGLE)(GLeglContext ctx, GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMCONTEXTANGLE)(GLeglContext ctx, GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERCONTEXTANGLE)(GLeglContext ctx, GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERCONTEXTANGLE)(GLeglContext ctx, GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTURECONTEXTANGLE)(GLeglContext ctx, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHCONTEXTANGLE)(GLeglContext ctx, GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMCONTEXTANGLE)(GLeglContext ctx, GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREICONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETCONTEXTANGLE)(GLeglContext ctx, GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSCONTEXTANGLE)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGECONTEXTANGLE)(GLeglContext ctx, GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORCONTEXTANGLE)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYCONTEXTANGLE)(GLeglContext ctx, GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCECONTEXTANGLE)(GLeglContext ctx, GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCCONTEXTANGLE)(GLeglContext ctx, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATECONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKCONTEXTANGLE)(GLeglContext ctx, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATECONTEXTANGLE)(GLeglContext ctx, GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPCONTEXTANGLE)(GLeglContext ctx, GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATECONTEXTANGLE)(GLeglContext ctx, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERICONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FCONTEXTANGLE)(GLeglContext ctx, GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1ICONTEXTANGLE)(GLeglContext ctx, GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FCONTEXTANGLE)(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2ICONTEXTANGLE)(GLeglContext ctx, GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FCONTEXTANGLE)(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3ICONTEXTANGLE)(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FCONTEXTANGLE)(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4ICONTEXTANGLE)(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMCONTEXTANGLE)(GLeglContext ctx, GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMCONTEXTANGLE)(GLeglContext ctx, GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVCONTEXTANGLE)(GLeglContext ctx, GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVCONTEXTANGLE)(GLeglContext ctx, GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVCONTEXTANGLE)(GLeglContext ctx, GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVCONTEXTANGLE)(GLeglContext ctx, GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTCONTEXTANGLE)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESCONTEXTANGLE)(GLeglContext ctx, GLuint array);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLECONTEXTANGLE)(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 PFNGLDEBUGMESSAGECALLBACKKHRCONTEXTANGLE)(GLeglContext ctx, GLDEBUGPROCKHR callback, const void *userParam);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRCONTEXTANGLE)(GLeglContext ctx, GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRCONTEXTANGLE)(GLeglContext ctx, GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *fences);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLECONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLECONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLeglImageOES image);
+typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLeglImageOES image);
+typedef void (GL_APIENTRYP PFNGLENDQUERYEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLFINISHFENCENVCONTEXTANGLE)(GLeglContext ctx, GLuint fence);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLGENFENCESNVCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *fences);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, void **params);
+typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRCONTEXTANGLE)(GLeglContext ctx, GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVCONTEXTANGLE)(GLeglContext ctx, GLuint fence, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRCONTEXTANGLE)(GLeglContext ctx, GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRCONTEXTANGLE)(GLeglContext ctx, const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRCONTEXTANGLE)(GLeglContext ctx, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTCONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTCONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTCONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLuint64 *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTCONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLECONTEXTANGLE)(GLeglContext ctx, GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTCONTEXTANGLE)(GLeglContext ctx, GLsizei length, const GLchar *marker);
+typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVCONTEXTANGLE)(GLeglContext ctx, GLuint fence);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTCONTEXTANGLE)(GLeglContext ctx, GLuint id);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESCONTEXTANGLE)(GLeglContext ctx, GLuint array);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum access);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRCONTEXTANGLE)(GLeglContext ctx, GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRCONTEXTANGLE)(GLeglContext ctx, const void *ptr, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum binaryFormat, const void *binary, GLint length);
+typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRCONTEXTANGLE)(GLeglContext ctx, GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTCONTEXTANGLE)(GLeglContext ctx, GLsizei length, const GLchar *marker);
+typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTCONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum target);
+typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTCONTEXTANGLE)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSETFENCENVCONTEXTANGLE)(GLeglContext ctx, GLuint fence, GLenum condition);
+typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVCONTEXTANGLE)(GLeglContext ctx, GLuint fence);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLECONTEXTANGLE)(GLeglContext ctx, GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLBINDUNIFORMLOCATIONCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, const GLchar* name);
+typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLenum components);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADFCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLenum matrixMode, const GLfloat * matrix);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADIDENTITYCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLenum matrixMode);
+typedef GLuint (GL_APIENTRYP PFNGLGENPATHSCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLsizei range);
+typedef void (GL_APIENTRYP PFNGLDELETEPATHSCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint first, GLsizei range);
+typedef GLboolean (GL_APIENTRYP PFNGLISPATHCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path);
+typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void* coords);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum pname, GLfloat value);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERICHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERFVCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum pname, GLfloat * value);
+typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERIVCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum pname, GLint * value);
+typedef void (GL_APIENTRYP PFNGLPATHSTENCILFUNCCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum fillMode, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLint reference, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLsizei numPath, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLsizei numPath, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLsizei numPath, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+typedef void (GL_APIENTRYP PFNGLBINDFRAGMENTINPUTLOCATIONCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint programs, GLint location, const GLchar * name);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENCHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXTURECHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint sourceId, GLint sourceLevel, GLenum destTarget, GLuint destId, GLint destLevel, GLint internalFormat, GLenum destType, GLboolean unpackFlipY, GLboolean unpackPremultiplyAlpha, GLboolean unpackUnmultiplyAlpha);
+typedef void (GL_APIENTRYP PFNGLCOPYSUBTEXTURECHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint sourceId, GLint sourceLevel, GLenum destTarget, GLuint destId, GLint destLevel, GLint xoffset, GLint yoffset, GLint x, GLint y, GLint width, GLint height, GLboolean unpackFlipY, GLboolean unpackPremultiplyAlpha, GLboolean unpackUnmultiplyAlpha);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDCOPYTEXTURECHROMIUMCONTEXTANGLE)(GLeglContext ctx, GLuint sourceId, GLuint destId);
+typedef void (GL_APIENTRYP PFNGLREQUESTEXTENSIONANGLECONTEXTANGLE)(GLeglContext ctx, const GLchar * name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLboolean * params);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint shader, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, void ** pointer);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei * length, GLsizei * columns, GLsizei * rows, void * pixels);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLint * params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLsizei xoffset, GLsizei yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, void ** params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLsizei bufSize, GLsizei * length, GLint * data);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLuint * params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLint64 * data);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLsizei bufSize, GLsizei * length, GLint64 * data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint64 * params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLuint pname, GLsizei bufSize, const GLint * param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, const GLfloat * param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINTERFACEIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum programInterface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANI_VROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLsizei bufSize, GLsizei * length, GLboolean * data);
+typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLuint index, GLsizei bufSize, GLsizei * length, GLfloat * val);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLGETPOINTERVROBUSTANGLEROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, void ** params);
+typedef void (GL_APIENTRYP PFNGLREADNPIXELSROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei * length, GLsizei * columns, GLsizei * rows, void * data);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLfloat * params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLuint * params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLint * params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLuint * params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, const GLint * param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, const GLuint * param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLint64 * params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VROBUSTANGLECONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint64 * params);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWLAYEREDANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWSIDEBYSIDEANGLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei numViews, const GLint * viewportOffsets);
+#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);
+GL_APICALL void GL_APIENTRY glBlendColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glBlendEquationContextANGLE(GLeglContext ctx, GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparateContextANGLE(GLeglContext ctx, GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFuncContextANGLE(GLeglContext ctx, GLenum sfactor, GLenum dfactor);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparateContextANGLE(GLeglContext ctx, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GL_APICALL void GL_APIENTRY glBufferDataContextANGLE(GLeglContext ctx, GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GL_APICALL void GL_APIENTRY glBufferSubDataContextANGLE(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatusContextANGLE(GLeglContext ctx, GLenum target);
+GL_APICALL void GL_APIENTRY glClearContextANGLE(GLeglContext ctx, GLbitfield mask);
+GL_APICALL void GL_APIENTRY glClearColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glClearDepthfContextANGLE(GLeglContext ctx, GLfloat d);
+GL_APICALL void GL_APIENTRY glClearStencilContextANGLE(GLeglContext ctx, GLint s);
+GL_APICALL void GL_APIENTRY glColorMaskContextANGLE(GLeglContext ctx, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GL_APICALL void GL_APIENTRY glCompileShaderContextANGLE(GLeglContext ctx, GLuint shader);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2DContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2DContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCopyTexImage2DContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage2DContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL GLuint GL_APIENTRY glCreateProgramContextANGLE(GLeglContext ctx);
+GL_APICALL GLuint GL_APIENTRY glCreateShaderContextANGLE(GLeglContext ctx, GLenum type);
+GL_APICALL void GL_APIENTRY glCullFaceContextANGLE(GLeglContext ctx, GLenum mode);
+GL_APICALL void GL_APIENTRY glDeleteBuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *buffers);
+GL_APICALL void GL_APIENTRY glDeleteFramebuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glDeleteProgramContextANGLE(GLeglContext ctx, GLuint program);
+GL_APICALL void GL_APIENTRY glDeleteRenderbuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glDeleteShaderContextANGLE(GLeglContext ctx, GLuint shader);
+GL_APICALL void GL_APIENTRY glDeleteTexturesContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *textures);
+GL_APICALL void GL_APIENTRY glDepthFuncContextANGLE(GLeglContext ctx, GLenum func);
+GL_APICALL void GL_APIENTRY glDepthMaskContextANGLE(GLeglContext ctx, GLboolean flag);
+GL_APICALL void GL_APIENTRY glDepthRangefContextANGLE(GLeglContext ctx, GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glDetachShaderContextANGLE(GLeglContext ctx, GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glDisableContextANGLE(GLeglContext ctx, GLenum cap);
+GL_APICALL void GL_APIENTRY glDisableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index);
+GL_APICALL void GL_APIENTRY glDrawArraysContextANGLE(GLeglContext ctx, GLenum mode, GLint first, GLsizei count);
+GL_APICALL void GL_APIENTRY glDrawElementsContextANGLE(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glEnableContextANGLE(GLeglContext ctx, GLenum cap);
+GL_APICALL void GL_APIENTRY glEnableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index);
+GL_APICALL void GL_APIENTRY glFinishContextANGLE(GLeglContext ctx);
+GL_APICALL void GL_APIENTRY glFlushContextANGLE(GLeglContext ctx);
+GL_APICALL void GL_APIENTRY glFramebufferRenderbufferContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2DContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glFrontFaceContextANGLE(GLeglContext ctx, GLenum mode);
+GL_APICALL void GL_APIENTRY glGenBuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *buffers);
+GL_APICALL void GL_APIENTRY glGenFramebuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glGenRenderbuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glGenTexturesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *textures);
+GL_APICALL void GL_APIENTRY glGenerateMipmapContextANGLE(GLeglContext ctx, GLenum target);
+GL_APICALL void GL_APIENTRY glGetActiveAttribContextANGLE(GLeglContext ctx, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetActiveUniformContextANGLE(GLeglContext ctx, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetAttachedShadersContextANGLE(GLeglContext ctx, GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GL_APICALL GLint GL_APIENTRY glGetAttribLocationContextANGLE(GLeglContext ctx, GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetBooleanvContextANGLE(GLeglContext ctx, GLenum pname, GLboolean *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameterivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+GL_APICALL GLenum GL_APIENTRY glGetErrorContextANGLE(GLeglContext ctx);
+GL_APICALL void GL_APIENTRY glGetFloatvContextANGLE(GLeglContext ctx, GLenum pname, GLfloat *data);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameterivContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetIntegervContextANGLE(GLeglContext ctx, GLenum pname, GLint *data);
+GL_APICALL void GL_APIENTRY glGetProgramInfoLogContextANGLE(GLeglContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetProgramivContextANGLE(GLeglContext ctx, GLuint program, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameterivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderInfoLogContextANGLE(GLeglContext ctx, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormatContextANGLE(GLeglContext ctx, GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GL_APICALL void GL_APIENTRY glGetShaderSourceContextANGLE(GLeglContext ctx, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GL_APICALL void GL_APIENTRY glGetShaderivContextANGLE(GLeglContext ctx, GLuint shader, GLenum pname, GLint *params);
+GL_APICALL const GLubyte *GL_APIENTRY glGetStringContextANGLE(GLeglContext ctx, GLenum name);
+GL_APICALL void GL_APIENTRY glGetTexParameterfvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetUniformLocationContextANGLE(GLeglContext ctx, GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetUniformfvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetUniformivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointervContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, void **pointer);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfvContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribivContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glHintContextANGLE(GLeglContext ctx, GLenum target, GLenum mode);
+GL_APICALL GLboolean GL_APIENTRY glIsBufferContextANGLE(GLeglContext ctx, GLuint buffer);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabledContextANGLE(GLeglContext ctx, GLenum cap);
+GL_APICALL GLboolean GL_APIENTRY glIsFramebufferContextANGLE(GLeglContext ctx, GLuint framebuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsProgramContextANGLE(GLeglContext ctx, GLuint program);
+GL_APICALL GLboolean GL_APIENTRY glIsRenderbufferContextANGLE(GLeglContext ctx, GLuint renderbuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsShaderContextANGLE(GLeglContext ctx, GLuint shader);
+GL_APICALL GLboolean GL_APIENTRY glIsTextureContextANGLE(GLeglContext ctx, GLuint texture);
+GL_APICALL void GL_APIENTRY glLineWidthContextANGLE(GLeglContext ctx, GLfloat width);
+GL_APICALL void GL_APIENTRY glLinkProgramContextANGLE(GLeglContext ctx, GLuint program);
+GL_APICALL void GL_APIENTRY glPixelStoreiContextANGLE(GLeglContext ctx, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glPolygonOffsetContextANGLE(GLeglContext ctx, GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glReadPixelsContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GL_APICALL void GL_APIENTRY glReleaseShaderCompilerContextANGLE(GLeglContext ctx);
+GL_APICALL void GL_APIENTRY glRenderbufferStorageContextANGLE(GLeglContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glSampleCoverageContextANGLE(GLeglContext ctx, GLfloat value, GLboolean invert);
+GL_APICALL void GL_APIENTRY glScissorContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glShaderBinaryContextANGLE(GLeglContext ctx, GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glShaderSourceContextANGLE(GLeglContext ctx, GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GL_APICALL void GL_APIENTRY glStencilFuncContextANGLE(GLeglContext ctx, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFuncSeparateContextANGLE(GLeglContext ctx, GLenum face, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskContextANGLE(GLeglContext ctx, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskSeparateContextANGLE(GLeglContext ctx, GLenum face, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilOpContextANGLE(GLeglContext ctx, GLenum fail, GLenum zfail, GLenum zpass);
+GL_APICALL void GL_APIENTRY glStencilOpSeparateContextANGLE(GLeglContext ctx, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GL_APICALL void GL_APIENTRY glTexImage2DContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexParameterfContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glTexParameterfvContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLfloat *params);
+GL_APICALL void GL_APIENTRY glTexParameteriContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glTexParameterivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexSubImage2DContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glUniform1fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glUniform1fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform1iContextANGLE(GLeglContext ctx, GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glUniform1ivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform2fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glUniform2fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform2iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glUniform2ivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform3fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glUniform3fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform3iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glUniform3ivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform4fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glUniform4fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform4iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glUniform4ivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgramContextANGLE(GLeglContext ctx, GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgramContextANGLE(GLeglContext ctx, GLuint program);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib4fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+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 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 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 glDeleteQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids);
+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 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 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 glGenFencesNVContextANGLE(GLeglContext ctx, GLsizei n, GLuint *fences);
+GL_APICALL void GL_APIENTRY glGenQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids);
+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 GLenum GL_APIENTRY glGetGraphicsResetStatusEXTContextANGLE(GLeglContext ctx);
+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 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 glGetTranslatedShaderSourceANGLEContextANGLE(GLeglContext ctx, GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
+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 glInsertEventMarkerEXTContextANGLE(GLeglContext ctx, GLsizei length, const GLchar *marker);
+GL_APICALL GLboolean GL_APIENTRY glIsFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
+GL_APICALL GLboolean GL_APIENTRY glIsQueryEXTContextANGLE(GLeglContext ctx, GLuint id);
+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 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 glSetFenceNVContextANGLE(GLeglContext ctx, GLuint fence, GLenum condition);
+GL_APICALL GLboolean GL_APIENTRY glTestFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
+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 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 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);
+GL_APICALL void GL_APIENTRY glPathParameterfCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum pname, GLfloat value);
+GL_APICALL void GL_APIENTRY glPathParameteriCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glGetPathParameterfvCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum pname, GLfloat * value);
+GL_APICALL void GL_APIENTRY glGetPathParameterivCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum pname, GLint * value);
+GL_APICALL void GL_APIENTRY glPathStencilFuncCHROMIUMContextANGLE(GLeglContext ctx, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFillPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum fillMode, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilStrokePathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLint reference, GLuint mask);
+GL_APICALL void GL_APIENTRY glCoverFillPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx, GLsizei numPath, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx, GLsizei numPath, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx, GLsizei numPath, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues);
+GL_APICALL void GL_APIENTRY glStencilFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues);
+GL_APICALL void GL_APIENTRY glBindFragmentInputLocationCHROMIUMContextANGLE(GLeglContext ctx, GLuint programs, GLint location, const GLchar * name);
+GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenCHROMIUMContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs);
+GL_APICALL void GL_APIENTRY glCopyTextureCHROMIUMContextANGLE(GLeglContext ctx, GLuint sourceId, GLint sourceLevel, GLenum destTarget, GLuint destId, GLint destLevel, GLint internalFormat, GLenum destType, GLboolean unpackFlipY, GLboolean unpackPremultiplyAlpha, GLboolean unpackUnmultiplyAlpha);
+GL_APICALL void GL_APIENTRY glCopySubTextureCHROMIUMContextANGLE(GLeglContext ctx, GLuint sourceId, GLint sourceLevel, GLenum destTarget, GLuint destId, GLint destLevel, GLint xoffset, GLint yoffset, GLint x, GLint y, GLint width, GLint height, GLboolean unpackFlipY, GLboolean unpackPremultiplyAlpha, GLboolean unpackUnmultiplyAlpha);
+GL_APICALL void GL_APIENTRY glCompressedCopyTextureCHROMIUMContextANGLE(GLeglContext ctx, GLuint sourceId, GLuint destId);
+GL_APICALL void GL_APIENTRY glRequestExtensionANGLEContextANGLE(GLeglContext ctx, const GLchar * name);
+GL_APICALL void GL_APIENTRY glGetBooleanvRobustANGLEContextANGLE(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLboolean * params);
+GL_APICALL void GL_APIENTRY glGetBufferParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetFloatvRobustANGLEContextANGLE(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetIntegervRobustANGLEContextANGLE(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * data);
+GL_APICALL void GL_APIENTRY glGetProgramivRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetShaderivRobustANGLEContextANGLE(GLeglContext ctx, GLuint shader, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetTexParameterfvRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+GL_APICALL void GL_APIENTRY glGetTexParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetUniformfvRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLfloat * params);
+GL_APICALL void GL_APIENTRY glGetUniformivRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfvRobustANGLEContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribivRobustANGLEContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointervRobustANGLEContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, void ** pointer);
+GL_APICALL void GL_APIENTRY glReadPixelsRobustANGLEContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei * length, GLsizei * columns, GLsizei * rows, void * pixels);
+GL_APICALL void GL_APIENTRY glTexImage2DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+GL_APICALL void GL_APIENTRY glTexParameterfvRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLfloat * params);
+GL_APICALL void GL_APIENTRY glTexParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLint * params);
+GL_APICALL void GL_APIENTRY glTexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+GL_APICALL void GL_APIENTRY glTexImage3DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+GL_APICALL void GL_APIENTRY glTexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, const void * pixels);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLsizei xoffset, GLsizei yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+GL_APICALL void GL_APIENTRY glCompressedTexImage3DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLsizei dataSize, const GLvoid * data);
+GL_APICALL void GL_APIENTRY glGetQueryivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuivRobustANGLEContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+GL_APICALL void GL_APIENTRY glGetBufferPointervRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, void ** params);
+GL_APICALL void GL_APIENTRY glGetIntegeri_vRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLsizei bufSize, GLsizei * length, GLint * data);
+GL_APICALL void GL_APIENTRY glGetInternalformativRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIivRobustANGLEContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIuivRobustANGLEContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+GL_APICALL void GL_APIENTRY glGetUniformuivRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLuint * params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockivRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetInteger64vRobustANGLEContextANGLE(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, GLint64 * data);
+GL_APICALL void GL_APIENTRY glGetInteger64i_vRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLsizei bufSize, GLsizei * length, GLint64 * data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteri64vRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint64 * params);
+GL_APICALL void GL_APIENTRY glSamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLuint pname, GLsizei bufSize, const GLint * param);
+GL_APICALL void GL_APIENTRY glSamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, const GLfloat * param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+GL_APICALL void GL_APIENTRY glGetFramebufferParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetProgramInterfaceivRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLenum programInterface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetBooleani_vRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLsizei bufSize, GLsizei * length, GLboolean * data);
+GL_APICALL void GL_APIENTRY glGetMultisamplefvRobustANGLEContextANGLE(GLeglContext ctx, GLenum pname, GLuint index, GLsizei bufSize, GLsizei * length, GLfloat * val);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameterivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameterfvRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei * length, GLfloat * params);
+GL_APICALL void GL_APIENTRY glGetPointervRobustANGLERobustANGLEContextANGLE(GLeglContext ctx, GLenum pname, GLsizei bufSize, GLsizei * length, void ** params);
+GL_APICALL void GL_APIENTRY glReadnPixelsRobustANGLEContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei * length, GLsizei * columns, GLsizei * rows, void * data);
+GL_APICALL void GL_APIENTRY glGetnUniformfvRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLfloat * params);
+GL_APICALL void GL_APIENTRY glGetnUniformivRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetnUniformuivRobustANGLEContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei bufSize, GLsizei * length, GLuint * params);
+GL_APICALL void GL_APIENTRY glTexParameterIivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLint * params);
+GL_APICALL void GL_APIENTRY glTexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, const GLuint * params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+GL_APICALL void GL_APIENTRY glSamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, const GLint * param);
+GL_APICALL void GL_APIENTRY glSamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, const GLuint * param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint * params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectivRobustANGLEContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * params);
+GL_APICALL void GL_APIENTRY glGetQueryObjecti64vRobustANGLEContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLint64 * params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectui64vRobustANGLEContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLsizei bufSize, GLsizei * length, GLuint64 * params);
+GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewLayeredANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewSideBySideANGLEContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei numViews, const GLint * viewportOffsets);
+#endif
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/include/GLES3/gl31ext_explicit_context_autogen.inc
@@ -0,0 +1,148 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
+//
+// 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.
+//
+// gl31ext_explicit_context_autogen.inc:
+//   Function declarations for the EGL_ANGLE_explicit_context extension
+
+typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMCONTEXTANGLE)(GLeglContext ctx, GLuint pipeline, GLuint program);
+typedef void (GL_APIENTRYP PFNGLBINDIMAGETEXTURECONTEXTANGLE)(GLeglContext ctx, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINECONTEXTANGLE)(GLeglContext ctx, GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXBUFFERCONTEXTANGLE)(GLeglContext ctx, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVCONTEXTANGLE)(GLeglContext ctx, GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTECONTEXTANGLE)(GLeglContext ctx, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTCONTEXTANGLE)(GLeglContext ctx, GLintptr indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINDIRECTCONTEXTANGLE)(GLeglContext ctx, GLenum mode, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINDIRECTCONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLenum type, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERICONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANI_VCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLuint index, GLfloat *val);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINTERFACEIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGCONTEXTANGLE)(GLeglContext ctx, GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVCONTEXTANGLE)(GLeglContext ctx, GLuint pipeline, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCENAMECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINECONTEXTANGLE)(GLeglContext ctx, GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERCONTEXTANGLE)(GLeglContext ctx, GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERBYREGIONCONTEXTANGLE)(GLeglContext ctx, GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1ICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2ICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3ICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4ICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLSAMPLEMASKICONTEXTANGLE)(GLeglContext ctx, GLuint maskNumber, GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESCONTEXTANGLE)(GLeglContext ctx, GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINECONTEXTANGLE)(GLeglContext ctx, GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBBINDINGCONTEXTANGLE)(GLeglContext ctx, GLuint attribindex, GLuint bindingindex);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBFORMATCONTEXTANGLE)(GLeglContext ctx, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIFORMATCONTEXTANGLE)(GLeglContext ctx, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXBINDINGDIVISORCONTEXTANGLE)(GLeglContext ctx, GLuint bindingindex, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glActiveShaderProgramContextANGLE(GLeglContext ctx, GLuint pipeline, GLuint program);
+GL_APICALL void GL_APIENTRY glBindImageTextureContextANGLE(GLeglContext ctx, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GL_APICALL void GL_APIENTRY glBindProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline);
+GL_APICALL void GL_APIENTRY glBindVertexBufferContextANGLE(GLeglContext ctx, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvContextANGLE(GLeglContext ctx, GLenum type, GLsizei count, const GLchar *const*strings);
+GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glDispatchComputeContextANGLE(GLeglContext ctx, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GL_APICALL void GL_APIENTRY glDispatchComputeIndirectContextANGLE(GLeglContext ctx, GLintptr indirect);
+GL_APICALL void GL_APIENTRY glDrawArraysIndirectContextANGLE(GLeglContext ctx, GLenum mode, const void *indirect);
+GL_APICALL void GL_APIENTRY glDrawElementsIndirectContextANGLE(GLeglContext ctx, GLenum mode, GLenum type, const void *indirect);
+GL_APICALL void GL_APIENTRY glFramebufferParameteriContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glGenProgramPipelinesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glGetBooleani_vContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLboolean *data);
+GL_APICALL void GL_APIENTRY glGetFramebufferParameterivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetMultisamplefvContextANGLE(GLeglContext ctx, GLenum pname, GLuint index, GLfloat *val);
+GL_APICALL void GL_APIENTRY glGetProgramInterfaceivContextANGLE(GLeglContext ctx, GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogContextANGLE(GLeglContext ctx, GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineivContextANGLE(GLeglContext ctx, GLuint pipeline, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetProgramResourceIndexContextANGLE(GLeglContext ctx, GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationContextANGLE(GLeglContext ctx, GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceNameContextANGLE(GLeglContext ctx, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceivContextANGLE(GLeglContext ctx, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameterfvContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameterivContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLenum pname, GLint *params);
+GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline);
+GL_APICALL void GL_APIENTRY glMemoryBarrierContextANGLE(GLeglContext ctx, GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glMemoryBarrierByRegionContextANGLE(GLeglContext ctx, GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glProgramUniform1fContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glProgramUniform1fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1iContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform1ivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1uiContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform1uivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2fContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glProgramUniform2fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2iContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform2ivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2uiContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform2uivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3fContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glProgramUniform3fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3iContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform3ivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3uiContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform3uivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4fContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glProgramUniform4fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4iContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform4ivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4uiContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform4uivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glSampleMaskiContextANGLE(GLeglContext ctx, GLuint maskNumber, GLbitfield mask);
+GL_APICALL void GL_APIENTRY glTexStorage2DMultisampleContextANGLE(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GL_APICALL void GL_APIENTRY glUseProgramStagesContextANGLE(GLeglContext ctx, GLuint pipeline, GLbitfield stages, GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline);
+GL_APICALL void GL_APIENTRY glVertexAttribBindingContextANGLE(GLeglContext ctx, GLuint attribindex, GLuint bindingindex);
+GL_APICALL void GL_APIENTRY glVertexAttribFormatContextANGLE(GLeglContext ctx, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexAttribIFormatContextANGLE(GLeglContext ctx, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexBindingDivisorContextANGLE(GLeglContext ctx, GLuint bindingindex, GLuint divisor);
+#endif
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/include/GLES3/gl3ext_explicit_context_autogen.inc
@@ -0,0 +1,220 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
+//
+// 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.
+//
+// gl3ext_explicit_context_autogen.inc:
+//   Function declarations for the EGL_ANGLE_explicit_context extension
+
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKCONTEXTANGLE)(GLeglContext ctx, GLenum primitiveMode);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERBASECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERRANGECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLBINDSAMPLERCONTEXTANGLE)(GLeglContext ctx, GLuint unit, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYCONTEXTANGLE)(GLeglContext ctx, GLuint array);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERCONTEXTANGLE)(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 PFNGLCLEARBUFFERFICONTEXTANGLE)(GLeglContext ctx, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFVCONTEXTANGLE)(GLeglContext ctx, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERIVCONTEXTANGLE)(GLeglContext ctx, GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERUIVCONTEXTANGLE)(GLeglContext ctx, GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCCONTEXTANGLE)(GLeglContext ctx, GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DCONTEXTANGLE)(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 PFNGLCOMPRESSEDTEXSUBIMAGE3DCONTEXTANGLE)(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 PFNGLCOPYBUFFERSUBDATACONTEXTANGLE)(GLeglContext ctx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETESAMPLERSCONTEXTANGLE)(GLeglContext ctx, GLsizei count, const GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCCONTEXTANGLE)(GLeglContext ctx, GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDCONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDCONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSCONTEXTANGLE)(GLeglContext ctx, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENDQUERYCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKCONTEXTANGLE)(GLeglContext ctx);
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCCONTEXTANGLE)(GLeglContext ctx, GLenum condition, GLbitfield flags);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENSAMPLERSCONTEXTANGLE)(GLeglContext ctx, GLsizei count, GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSCONTEXTANGLE)(GLeglContext ctx, GLsizei n, GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMECONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, void **params);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATALOCATIONCONTEXTANGLE)(GLeglContext ctx, GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VCONTEXTANGLE)(GLeglContext ctx, GLenum pname, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLuint index, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVCONTEXTANGLE)(GLeglContext ctx, GLuint id, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVCONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLint *params);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGICONTEXTANGLE)(GLeglContext ctx, GLenum name, GLuint index);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVCONTEXTANGLE)(GLeglContext ctx, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef GLuint (GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXCONTEXTANGLE)(GLeglContext ctx, GLuint program, const GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMINDICESCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLint location, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYCONTEXTANGLE)(GLeglContext ctx, GLuint id);
+typedef GLboolean (GL_APIENTRYP PFNGLISSAMPLERCONTEXTANGLE)(GLeglContext ctx, GLuint sampler);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCCONTEXTANGLE)(GLeglContext ctx, GLsync sync);
+typedef GLboolean (GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKCONTEXTANGLE)(GLeglContext ctx, GLuint id);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYCONTEXTANGLE)(GLeglContext ctx, GLuint array);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERICONTEXTANGLE)(GLeglContext ctx, GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLREADBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum src);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKCONTEXTANGLE)(GLeglContext ctx);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFCONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVCONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERICONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVCONTEXTANGLE)(GLeglContext ctx, GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DCONTEXTANGLE)(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DCONTEXTANGLE)(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 void (GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UICONTEXTANGLE)(GLeglContext ctx, GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UICONTEXTANGLE)(GLeglContext ctx, GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UICONTEXTANGLE)(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UICONTEXTANGLE)(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGCONTEXTANGLE)(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVCONTEXTANGLE)(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFERCONTEXTANGLE)(GLeglContext ctx, GLenum target);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4ICONTEXTANGLE)(GLeglContext ctx, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IVCONTEXTANGLE)(GLeglContext ctx, GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UICONTEXTANGLE)(GLeglContext ctx, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVCONTEXTANGLE)(GLeglContext ctx, GLuint index, const GLuint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERCONTEXTANGLE)(GLeglContext ctx, GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCCONTEXTANGLE)(GLeglContext ctx, GLsync sync, GLbitfield flags, GLuint64 timeout);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBeginQueryContextANGLE(GLeglContext ctx, GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glBeginTransformFeedbackContextANGLE(GLeglContext ctx, GLenum primitiveMode);
+GL_APICALL void GL_APIENTRY glBindBufferBaseContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindBufferRangeContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glBindSamplerContextANGLE(GLeglContext ctx, GLuint unit, GLuint sampler);
+GL_APICALL void GL_APIENTRY glBindTransformFeedbackContextANGLE(GLeglContext ctx, GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glBindVertexArrayContextANGLE(GLeglContext ctx, GLuint array);
+GL_APICALL void GL_APIENTRY glBlitFramebufferContextANGLE(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 glClearBufferfiContextANGLE(GLeglContext ctx, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GL_APICALL void GL_APIENTRY glClearBufferfvContextANGLE(GLeglContext ctx, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glClearBufferivContextANGLE(GLeglContext ctx, GLenum buffer, GLint drawbuffer, const GLint *value);
+GL_APICALL void GL_APIENTRY glClearBufferuivContextANGLE(GLeglContext ctx, GLenum buffer, GLint drawbuffer, const GLuint *value);
+GL_APICALL GLenum GL_APIENTRY glClientWaitSyncContextANGLE(GLeglContext ctx, GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glCompressedTexImage3DContextANGLE(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 glCompressedTexSubImage3DContextANGLE(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 glCopyBufferSubDataContextANGLE(GLeglContext ctx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage3DContextANGLE(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 glDeleteQueriesContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteSamplersContextANGLE(GLeglContext ctx, GLsizei count, const GLuint *samplers);
+GL_APICALL void GL_APIENTRY glDeleteSyncContextANGLE(GLeglContext ctx, GLsync sync);
+GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacksContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteVertexArraysContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *arrays);
+GL_APICALL void GL_APIENTRY glDrawArraysInstancedContextANGLE(GLeglContext ctx, GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GL_APICALL void GL_APIENTRY glDrawBuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLenum *bufs);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedContextANGLE(GLeglContext ctx, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GL_APICALL void GL_APIENTRY glDrawRangeElementsContextANGLE(GLeglContext ctx, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glEndQueryContextANGLE(GLeglContext ctx, GLenum target);
+GL_APICALL void GL_APIENTRY glEndTransformFeedbackContextANGLE(GLeglContext ctx);
+GL_APICALL GLsync GL_APIENTRY glFenceSyncContextANGLE(GLeglContext ctx, GLenum condition, GLbitfield flags);
+GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeContextANGLE(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length);
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayerContextANGLE(GLeglContext ctx, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GL_APICALL void GL_APIENTRY glGenQueriesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glGenSamplersContextANGLE(GLeglContext ctx, GLsizei count, GLuint *samplers);
+GL_APICALL void GL_APIENTRY glGenTransformFeedbacksContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glGenVertexArraysContextANGLE(GLeglContext ctx, GLsizei n, GLuint *arrays);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockNameContextANGLE(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockivContextANGLE(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformsivContextANGLE(GLeglContext ctx, GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetBufferParameteri64vContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint64 *params);
+GL_APICALL void GL_APIENTRY glGetBufferPointervContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, void **params);
+GL_APICALL GLint GL_APIENTRY glGetFragDataLocationContextANGLE(GLeglContext ctx, GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetInteger64i_vContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetInteger64vContextANGLE(GLeglContext ctx, GLenum pname, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetIntegeri_vContextANGLE(GLeglContext ctx, GLenum target, GLuint index, GLint *data);
+GL_APICALL void GL_APIENTRY glGetInternalformativContextANGLE(GLeglContext ctx, GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramBinaryContextANGLE(GLeglContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuivContextANGLE(GLeglContext ctx, GLuint id, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glGetQueryivContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterfvContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterivContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL const GLubyte *GL_APIENTRY glGetStringiContextANGLE(GLeglContext ctx, GLenum name, GLuint index);
+GL_APICALL void GL_APIENTRY glGetSyncivContextANGLE(GLeglContext ctx, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GL_APICALL void GL_APIENTRY glGetTransformFeedbackVaryingContextANGLE(GLeglContext ctx, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndexContextANGLE(GLeglContext ctx, GLuint program, const GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glGetUniformIndicesContextANGLE(GLeglContext ctx, GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GL_APICALL void GL_APIENTRY glGetUniformuivContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLuint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIivContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIuivContextANGLE(GLeglContext ctx, GLuint index, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glInvalidateFramebufferContextANGLE(GLeglContext ctx, GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GL_APICALL void GL_APIENTRY glInvalidateSubFramebufferContextANGLE(GLeglContext ctx, GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL GLboolean GL_APIENTRY glIsQueryContextANGLE(GLeglContext ctx, GLuint id);
+GL_APICALL GLboolean GL_APIENTRY glIsSamplerContextANGLE(GLeglContext ctx, GLuint sampler);
+GL_APICALL GLboolean GL_APIENTRY glIsSyncContextANGLE(GLeglContext ctx, GLsync sync);
+GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedbackContextANGLE(GLeglContext ctx, GLuint id);
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayContextANGLE(GLeglContext ctx, GLuint array);
+GL_APICALL void *GL_APIENTRY glMapBufferRangeContextANGLE(GLeglContext ctx, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GL_APICALL void GL_APIENTRY glPauseTransformFeedbackContextANGLE(GLeglContext ctx);
+GL_APICALL void GL_APIENTRY glProgramBinaryContextANGLE(GLeglContext ctx, GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glProgramParameteriContextANGLE(GLeglContext ctx, GLuint program, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glReadBufferContextANGLE(GLeglContext ctx, GLenum src);
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleContextANGLE(GLeglContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glResumeTransformFeedbackContextANGLE(GLeglContext ctx);
+GL_APICALL void GL_APIENTRY glSamplerParameterfContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glSamplerParameterfvContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, const GLfloat *param);
+GL_APICALL void GL_APIENTRY glSamplerParameteriContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glSamplerParameterivContextANGLE(GLeglContext ctx, GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glTexImage3DContextANGLE(GLeglContext ctx, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexStorage2DContextANGLE(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage3DContextANGLE(GLeglContext ctx, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GL_APICALL void GL_APIENTRY glTexSubImage3DContextANGLE(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 void GL_APIENTRY glTransformFeedbackVaryingsContextANGLE(GLeglContext ctx, GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GL_APICALL void GL_APIENTRY glUniform1uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glUniform1uivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform2uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glUniform2uivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform3uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glUniform3uivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform4uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glUniform4uivContextANGLE(GLeglContext ctx, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniformBlockBindingContextANGLE(GLeglContext ctx, GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x3fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x4fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x2fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x4fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x2fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvContextANGLE(GLeglContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL GLboolean GL_APIENTRY glUnmapBufferContextANGLE(GLeglContext ctx, GLenum target);
+GL_APICALL void GL_APIENTRY glVertexAttribDivisorContextANGLE(GLeglContext ctx, GLuint index, GLuint divisor);
+GL_APICALL void GL_APIENTRY glVertexAttribI4iContextANGLE(GLeglContext ctx, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4ivContextANGLE(GLeglContext ctx, GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glVertexAttribI4uiContextANGLE(GLeglContext ctx, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4uivContextANGLE(GLeglContext ctx, GLuint index, const GLuint *v);
+GL_APICALL void GL_APIENTRY glVertexAttribIPointerContextANGLE(GLeglContext ctx, GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glWaitSyncContextANGLE(GLeglContext ctx, GLsync sync, GLbitfield flags, GLuint64 timeout);
+#endif
--- a/gfx/angle/checkout/include/GLSLANG/ShaderLang.h
+++ b/gfx/angle/checkout/include/GLSLANG/ShaderLang.h
@@ -256,16 +256,20 @@ const ShCompileOptions SH_DONT_USE_LOOPS
 // Don't use D3D constant register zero when allocating space for uniforms. 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. Only has an effect on HLSL translation.
 const ShCompileOptions SH_SKIP_D3D_CONSTANT_REGISTER_ZERO = UINT64_C(1) << 37;
 
 // Clamp gl_FragDepth to the range [0.0, 1.0] in case it is statically used.
 const ShCompileOptions SH_CLAMP_FRAG_DEPTH = UINT64_C(1) << 38;
 
+// Rewrite expressions like "v.x = z = expression;". Works around a bug in NVIDIA OpenGL drivers
+// prior to version 397.31.
+const ShCompileOptions SH_REWRITE_REPEATED_ASSIGN_TO_SWIZZLED = UINT64_C(1) << 39;
+
 // 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
--- 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 "595ccab4acc3"
+#define ANGLE_COMMIT_HASH "fc96a1a98357"
 #define ANGLE_COMMIT_HASH_SIZE 12
-#define ANGLE_COMMIT_DATE "2018-06-01 17:26:22 -0700"
+#define ANGLE_COMMIT_DATE "2018-06-29 19:06:56 -0700"
--- a/gfx/angle/checkout/src/common/debug.cpp
+++ b/gfx/angle/checkout/src/common/debug.cpp
@@ -40,17 +40,17 @@ constexpr const char *LogSeverityName(in
                                                             : "UNKNOWN";
 }
 
 bool ShouldCreateLogMessage(LogSeverity severity)
 {
 #if defined(ANGLE_TRACE_ENABLED)
     return true;
 #elif defined(ANGLE_ENABLE_ASSERTS)
-    return severity == LOG_ERR;
+    return severity != LOG_EVENT;
 #else
     return false;
 #endif
 }
 
 }  // namespace
 
 namespace priv
@@ -60,16 +60,19 @@ bool ShouldCreatePlatformLogMessage(LogS
 {
 #if defined(ANGLE_TRACE_ENABLED)
     return true;
 #else
     return severity != LOG_EVENT;
 #endif
 }
 
+// This is never instantiated, it's just used for EAT_STREAM_PARAMETERS to an object of the correct
+// type on the LHS of the unused part of the ternary operator.
+std::ostream *gSwallowStream;
 }  // namespace priv
 
 bool DebugAnnotationsActive()
 {
 #if defined(ANGLE_ENABLE_DEBUG_ANNOTATIONS)
     return g_debugAnnotator != nullptr && g_debugAnnotator->getStatus();
 #else
     return false;
@@ -208,23 +211,20 @@ LogSeverity LogMessage::getSeverity() co
 }
 
 std::string LogMessage::getMessage() const
 {
     return mStream.str();
 }
 
 #if defined(ANGLE_PLATFORM_WINDOWS)
-std::ostream &operator<<(std::ostream &os, const FmtHR &fmt)
+priv::FmtHexHelper<HRESULT> FmtHR(HRESULT value)
 {
-    os << "HRESULT: ";
-    return FmtHexInt(os, fmt.mHR);
+    return priv::FmtHexHelper<HRESULT>("HRESULT: ", value);
 }
 
-std::ostream &operator<<(std::ostream &os, const FmtErr &fmt)
+priv::FmtHexHelper<DWORD> FmtErr(DWORD value)
 {
-    os << "error: ";
-    return FmtHexInt(os, fmt.mErr);
+    return priv::FmtHexHelper<DWORD>("error: ", value);
 }
-
 #endif  // defined(ANGLE_PLATFORM_WINDOWS)
 
 }  // namespace gl
--- a/gfx/angle/checkout/src/common/debug.h
+++ b/gfx/angle/checkout/src/common/debug.h
@@ -1,15 +1,16 @@
 //
 // Copyright (c) 2002-2010 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.
 //
 
-// debug.h: Debugging utilities.
+// debug.h: Debugging utilities. A lot of the logging code is adapted from Chromium's
+// base/logging.h.
 
 #ifndef COMMON_DEBUG_H_
 #define COMMON_DEBUG_H_
 
 #include <assert.h>
 #include <stdio.h>
 
 #include <ios>
@@ -99,16 +100,18 @@ namespace priv
 class LogMessageVoidify
 {
   public:
     LogMessageVoidify() {}
     // This has to be an operator with a precedence lower than << but higher than ?:
     void operator&(std::ostream &) {}
 };
 
+extern std::ostream *gSwallowStream;
+
 // Used by ANGLE_LOG_IS_ON to lazy-evaluate stream arguments.
 bool ShouldCreatePlatformLogMessage(LogSeverity severity);
 
 template <int N, typename T>
 std::ostream &FmtHex(std::ostream &os, T value)
 {
     os << "0x";
 
@@ -119,49 +122,62 @@ std::ostream &FmtHex(std::ostream &os, T
     os << std::hex << std::uppercase << std::setw(N) << std::setfill('0') << value;
 
     os.flags(oldFlags);
     os.width(oldWidth);
     os.fill(oldFill);
 
     return os;
 }
-}  // namespace priv
 
-#if defined(ANGLE_PLATFORM_WINDOWS)
-class FmtHR
+template <typename T>
+std::ostream &FmtHexAutoSized(std::ostream &os, T value)
+{
+    constexpr int N = sizeof(T) * 2;
+    return priv::FmtHex<N>(os, value);
+}
+
+template <typename T>
+class FmtHexHelper
 {
   public:
-    explicit FmtHR(HRESULT hresult) : mHR(hresult) {}
+    FmtHexHelper(const char *prefix, T value) : mPrefix(prefix), mValue(value) {}
+    explicit FmtHexHelper(T value) : mPrefix(nullptr), mValue(value) {}
+
   private:
-    HRESULT mHR;
-    friend std::ostream &operator<<(std::ostream &os, const FmtHR &fmt);
+    const char *mPrefix;
+    T mValue;
+
+    friend std::ostream &operator<<(std::ostream &os, const FmtHexHelper &fmt)
+    {
+        if (fmt.mPrefix)
+        {
+            os << fmt.mPrefix;
+        }
+        return FmtHexAutoSized(os, fmt.mValue);
+    }
 };
 
-class FmtErr
-{
-  public:
-    explicit FmtErr(DWORD err) : mErr(err) {}
+}  // namespace priv
 
-  private:
-    DWORD mErr;
-    friend std::ostream &operator<<(std::ostream &os, const FmtErr &fmt);
-};
+template <typename T>
+priv::FmtHexHelper<T> FmtHex(T value)
+{
+    return priv::FmtHexHelper<T>(value);
+}
+
+#if defined(ANGLE_PLATFORM_WINDOWS)
+priv::FmtHexHelper<HRESULT> FmtHR(HRESULT value);
+priv::FmtHexHelper<DWORD> FmtErr(DWORD value);
 #endif  // defined(ANGLE_PLATFORM_WINDOWS)
 
 template <typename T>
-std::ostream &FmtHexShort(std::ostream &os, T value)
+std::ostream &FmtHex(std::ostream &os, T value)
 {
-    return priv::FmtHex<4>(os, value);
-}
-
-template <typename T>
-std::ostream &FmtHexInt(std::ostream &os, T value)
-{
-    return priv::FmtHex<8>(os, value);
+    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_WARN(ClassName, ...) \
@@ -227,64 +243,72 @@ std::ostream &FmtHexInt(std::ostream &os
 #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) : ((ERR() << "\t! Assert failed in " << __FUNCTION__ << "(" \
                                                  << __LINE__ << "): " << #expression),             \
                                           ANGLE_ASSERT_IMPL(expression)))
 #define UNREACHABLE_IS_NORETURN ANGLE_ASSERT_IMPL_IS_NORETURN
 #else
-// These are just dummy values.
-#define COMPACT_ANGLE_LOG_EX_ASSERT(ClassName, ...) \
-    COMPACT_ANGLE_LOG_EX_EVENT(ClassName, ##__VA_ARGS__)
-#define COMPACT_ANGLE_LOG_ASSERT COMPACT_ANGLE_LOG_EVENT
-namespace gl
-{
-constexpr LogSeverity LOG_ASSERT = LOG_EVENT;
-}  // namespace gl
-
-#define ASSERT(condition)                                                     \
-    ANGLE_LAZY_STREAM(ANGLE_LOG_STREAM(ASSERT), false ? !(condition) : false) \
-        << "Check failed: " #condition ". "
+#define ASSERT(condition) ANGLE_EAT_STREAM_PARAMETERS << !(condition)
 #define UNREACHABLE_IS_NORETURN 0
 #endif  // defined(ANGLE_ENABLE_ASSERTS)
 
-#define UNUSED_VARIABLE(variable) ((void)variable)
+#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)
-#define UNIMPLEMENTED()                                                                      \
-    {                                                                                        \
-        ERR() << "\t! Unimplemented: " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ \
-              << ")";                                                                        \
-        ASSERT(NOASSERT_UNIMPLEMENTED);                                                      \
-    }                                                                                        \
+#define UNIMPLEMENTED()                                                                       \
+    {                                                                                         \
+        WARN() << "\t! Unimplemented: " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ \
+               << ")";                                                                        \
+        ASSERT(NOASSERT_UNIMPLEMENTED);                                                       \
+    }                                                                                         \
     ANGLE_EMPTY_STATEMENT
 
 // A macro for code which is not expected to be reached under valid assumptions
-#define UNREACHABLE()                                                                            \
-    ((ERR() << "\t! Unreachable reached: " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ \
-            << ")"),                                                                             \
-     ASSERT(false))
+#define UNREACHABLE()                                                                              \
+    {                                                                                              \
+        ERR() << "\t! Unreachable reached: " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ \
+              << ")";                                                                              \
+        ASSERT(false);                                                                             \
+    }                                                                                              \
+    ANGLE_EMPTY_STATEMENT
 #else
 #define UNIMPLEMENTED()                 \
     {                                   \
         ASSERT(NOASSERT_UNIMPLEMENTED); \
     }                                   \
     ANGLE_EMPTY_STATEMENT
 
 // A macro for code which is not expected to be reached under valid assumptions
-#define UNREACHABLE() ASSERT(false)
+#define UNREACHABLE()  \
+    {                  \
+        ASSERT(false); \
+    }                  \
+    ANGLE_EMPTY_STATEMENT
 #endif  // defined(ANGLE_TRACE_ENABLED) || defined(ANGLE_ENABLE_ASSERTS)
 
 #endif   // COMMON_DEBUG_H_
--- a/gfx/angle/checkout/src/common/platform.h
+++ b/gfx/angle/checkout/src/common/platform.h
@@ -96,9 +96,20 @@
 #if defined(__mips__) || defined(__arm__) || defined(__aarch64__)
 #include <stddef.h>
 #endif
 
 // The MemoryBarrier function name collides with a macro under Windows
 // We will undef the macro so that the function name does not get replaced
 #undef MemoryBarrier
 
+// Macro for hinting that an expression is likely to be true/false.
+#if !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY)
+#if defined(__GNUC__) || defined(__clang__)
+#define ANGLE_LIKELY(x) __builtin_expect(!!(x), 1)
+#define ANGLE_UNLIKELY(x) __builtin_expect(!!(x), 0)
+#else
+#define ANGLE_LIKELY(x) (x)
+#define ANGLE_UNLIKELY(x) (x)
+#endif  // defined(__GNUC__) || defined(__clang__)
+#endif  // !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY)
+
 #endif // COMMON_PLATFORM_H_
--- a/gfx/angle/checkout/src/common/third_party/base/anglebase/logging.h
+++ b/gfx/angle/checkout/src/common/third_party/base/anglebase/logging.h
@@ -15,12 +15,12 @@
 #endif
 
 #ifndef CHECK
 #define CHECK(X) ASSERT(X)
 #endif
 
 // Unfortunately ANGLE relies on ASSERT being an empty statement, which these libs don't respect.
 #ifndef NOTREACHED
-#define NOTREACHED() UNREACHABLE()
+#define NOTREACHED() ({ UNREACHABLE(); })
 #endif
 
 #endif  // ANGLEBASE_LOGGING_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.cpp
@@ -3,16 +3,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
 
 #include "compiler/preprocessor/DiagnosticsBase.h"
 
 #include "common/debug.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 Diagnostics::~Diagnostics()
 {
 }
 
 void Diagnostics::report(ID id, const SourceLocation &loc, const std::string &text)
@@ -136,8 +139,10 @@ const char *Diagnostics::message(ID id)
         // Warnings end.
         default:
             UNREACHABLE();
             return "";
     }
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/DiagnosticsBase.h
@@ -4,16 +4,19 @@
 // found in the LICENSE file.
 //
 
 #ifndef COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_
 #define COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_
 
 #include <string>
 
+namespace angle
+{
+
 namespace pp
 {
 
 struct SourceLocation;
 
 // Base class for reporting diagnostic messages.
 // Derived classes are responsible for formatting and printing the messages.
 class Diagnostics
@@ -82,9 +85,11 @@ class Diagnostics
     bool isError(ID id);
     const char *message(ID id);
 
     virtual void print(ID id, const SourceLocation &loc, const std::string &text) = 0;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/DirectiveHandlerBase.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/DirectiveHandlerBase.cpp
@@ -1,16 +1,21 @@
 //
 // Copyright (c) 2012 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.
 //
 
 #include "compiler/preprocessor/DirectiveHandlerBase.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 DirectiveHandler::~DirectiveHandler()
 {
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/DirectiveHandlerBase.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/DirectiveHandlerBase.h
@@ -4,16 +4,19 @@
 // found in the LICENSE file.
 //
 
 #ifndef COMPILER_PREPROCESSOR_DIRECTIVEHANDLERBASE_H_
 #define COMPILER_PREPROCESSOR_DIRECTIVEHANDLERBASE_H_
 
 #include <string>
 
+namespace angle
+{
+
 namespace pp
 {
 
 struct SourceLocation;
 
 // Base class for handling directives.
 // Preprocessor uses this class to notify the clients about certain
 // preprocessor directives. Derived classes are responsible for
@@ -35,9 +38,11 @@ class DirectiveHandler
                                  const std::string &name,
                                  const std::string &behavior) = 0;
 
     virtual void handleVersion(const SourceLocation &loc, int version) = 0;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_DIRECTIVEHANDLERBASE_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/DirectiveParser.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/DirectiveParser.cpp
@@ -13,16 +13,19 @@
 #include "common/debug.h"
 #include "compiler/preprocessor/DiagnosticsBase.h"
 #include "compiler/preprocessor/DirectiveHandlerBase.h"
 #include "compiler/preprocessor/ExpressionParser.h"
 #include "compiler/preprocessor/MacroExpander.h"
 #include "compiler/preprocessor/Token.h"
 #include "compiler/preprocessor/Tokenizer.h"
 
+namespace angle
+{
+
 namespace
 {
 enum DirectiveType
 {
     DIRECTIVE_NONE,
     DIRECTIVE_DEFINE,
     DIRECTIVE_UNDEF,
     DIRECTIVE_IF,
@@ -993,8 +996,10 @@ int DirectiveParser::parseExpressionIfde
         mDiagnostics->report(Diagnostics::PP_CONDITIONAL_UNEXPECTED_TOKEN, token->location,
                              token->text);
         skipUntilEOD(mTokenizer, token);
     }
     return expression;
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/DirectiveParser.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/DirectiveParser.h
@@ -6,16 +6,19 @@
 
 #ifndef COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_
 #define COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_
 
 #include "compiler/preprocessor/Lexer.h"
 #include "compiler/preprocessor/Macro.h"
 #include "compiler/preprocessor/SourceLocation.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 class Diagnostics;
 class DirectiveHandler;
 class Tokenizer;
 
 class DirectiveParser : public Lexer
@@ -75,9 +78,11 @@ class DirectiveParser : public Lexer
     Diagnostics *mDiagnostics;
     DirectiveHandler *mDirectiveHandler;
     int mShaderVersion;
     int mMaxMacroExpansionDepth;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.cpp
@@ -112,23 +112,23 @@ typedef uint32_t UNSIGNED_TYPE;
 #define YYENABLE_NLS 0
 #define YYLTYPE_IS_TRIVIAL 1
 #define YYSTYPE_IS_TRIVIAL 1
 #define YYSTYPE_IS_DECLARED 1
 
 namespace {
 struct Context
 {
-    pp::Diagnostics* diagnostics;
-    pp::Lexer* lexer;
-    pp::Token* token;
+    angle::pp::Diagnostics *diagnostics;
+    angle::pp::Lexer *lexer;
+    angle::pp::Token *token;
     int* result;
     bool parsePresetToken;
 
-    pp::ExpressionParser::ErrorSettings errorSettings;
+    angle::pp::ExpressionParser::ErrorSettings errorSettings;
     bool *valid;
 
     void startIgnoreErrors() { ++ignoreErrors; }
     void endIgnoreErrors() { --ignoreErrors; }
 
     bool isIgnoringErrors() { return ignoreErrors > 0; }
 
     int ignoreErrors;
@@ -1492,19 +1492,18 @@ yyreduce:
     {
         if ((yyvsp[0]) < 0 || (yyvsp[0]) > 31)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << (yyvsp[-2]) << " >> " << (yyvsp[0]);
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_UNDEFINED_SHIFT,
-                                             context->token->location,
-                                             text.c_str());
+                context->diagnostics->report(angle::pp::Diagnostics::PP_UNDEFINED_SHIFT,
+                                             context->token->location, text.c_str());
                 *(context->valid) = false;
             }
             (yyval) = static_cast<YYSTYPE>(0);
         }
         else if ((yyvsp[-2]) < 0)
         {
             // Logical shift right.
             (yyval) = static_cast<YYSTYPE>(static_cast<UNSIGNED_TYPE>((yyvsp[-2])) >> (yyvsp[0]));
@@ -1522,19 +1521,18 @@ yyreduce:
     {
         if ((yyvsp[0]) < 0 || (yyvsp[0]) > 31)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << (yyvsp[-2]) << " << " << (yyvsp[0]);
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_UNDEFINED_SHIFT,
-                                             context->token->location,
-                                             text.c_str());
+                context->diagnostics->report(angle::pp::Diagnostics::PP_UNDEFINED_SHIFT,
+                                             context->token->location, text.c_str());
                 *(context->valid) = false;
             }
             (yyval) = static_cast<YYSTYPE>(0);
         }
         else
         {
             // Logical shift left. Casting to unsigned is needed to ensure there's no signed integer
             // overflow, which some tools treat as an error.
@@ -1565,19 +1563,18 @@ yyreduce:
     {
         if ((yyvsp[0]) == 0)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << (yyvsp[-2]) << " % " << (yyvsp[0]);
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
-                                             context->token->location,
-                                             text.c_str());
+                context->diagnostics->report(angle::pp::Diagnostics::PP_DIVISION_BY_ZERO,
+                                             context->token->location, text.c_str());
                 *(context->valid) = false;
             }
             (yyval) = static_cast<YYSTYPE>(0);
         }
         else if (((yyvsp[-2]) == std::numeric_limits<YYSTYPE>::min()) && ((yyvsp[0]) == -1))
         {
             // Check for the special case where the minimum representable number is
             // divided by -1. If left alone this has undefined results.
@@ -1596,19 +1593,18 @@ yyreduce:
     {
         if ((yyvsp[0]) == 0)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << (yyvsp[-2]) << " / " << (yyvsp[0]);
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
-                                            context->token->location,
-                                            text.c_str());
+                context->diagnostics->report(angle::pp::Diagnostics::PP_DIVISION_BY_ZERO,
+                                             context->token->location, text.c_str());
                 *(context->valid) = false;
             }
             (yyval) = static_cast<YYSTYPE>(0);
         }
         else if (((yyvsp[-2]) == std::numeric_limits<YYSTYPE>::min()) && ((yyvsp[0]) == -1))
         {
             // Check for the special case where the minimum representable number is
             // divided by -1. If left alone this leads to integer overflow in C++, which
@@ -1909,69 +1905,71 @@ yyreturn:
 #endif
   return yyresult;
 }
 
 
 
 int yylex(YYSTYPE *lvalp, Context *context)
 {
-    pp::Token *token = context->token;
+    angle::pp::Token *token = context->token;
     if (!context->parsePresetToken)
     {
         context->lexer->lex(token);
     }
     context->parsePresetToken = false;
 
     int type = 0;
 
     switch (token->type)
     {
-      case pp::Token::CONST_INT: {
-        unsigned int val = 0;
-        int testVal = 0;
-        if (!token->uValue(&val) || (!token->iValue(&testVal) &&
-                                     context->errorSettings.integerLiteralsMustFit32BitSignedRange))
+        case angle::pp::Token::CONST_INT:
         {
-            context->diagnostics->report(pp::Diagnostics::PP_INTEGER_OVERFLOW,
-                                         token->location, token->text);
-            *(context->valid) = false;
-        }
-        *lvalp = static_cast<YYSTYPE>(val);
-        type = TOK_CONST_INT;
-        break;
+            unsigned int val = 0;
+            int testVal      = 0;
+            if (!token->uValue(&val) ||
+                (!token->iValue(&testVal) &&
+                 context->errorSettings.integerLiteralsMustFit32BitSignedRange))
+            {
+                context->diagnostics->report(angle::pp::Diagnostics::PP_INTEGER_OVERFLOW,
+                                             token->location, token->text);
+                *(context->valid) = false;
+            }
+            *lvalp = static_cast<YYSTYPE>(val);
+            type   = TOK_CONST_INT;
+            break;
       }
-      case pp::Token::IDENTIFIER:
-        *lvalp = static_cast<YYSTYPE>(-1);
-        type = TOK_IDENTIFIER;
-        break;
-      case pp::Token::OP_OR:
-        type = TOK_OP_OR;
-        break;
-      case pp::Token::OP_AND:
-        type = TOK_OP_AND;
-        break;
-      case pp::Token::OP_NE:
-        type = TOK_OP_NE;
-        break;
-      case pp::Token::OP_EQ:
-        type = TOK_OP_EQ;
-        break;
-      case pp::Token::OP_GE:
-        type = TOK_OP_GE;
-        break;
-      case pp::Token::OP_LE:
-        type = TOK_OP_LE;
-        break;
-      case pp::Token::OP_RIGHT:
-        type = TOK_OP_RIGHT;
-        break;
-      case pp::Token::OP_LEFT:
-        type = TOK_OP_LEFT;
-        break;
+      case angle::pp::Token::IDENTIFIER:
+          *lvalp = static_cast<YYSTYPE>(-1);
+          type   = TOK_IDENTIFIER;
+          break;
+      case angle::pp::Token::OP_OR:
+          type = TOK_OP_OR;
+          break;
+      case angle::pp::Token::OP_AND:
+          type = TOK_OP_AND;
+          break;
+      case angle::pp::Token::OP_NE:
+          type = TOK_OP_NE;
+          break;
+      case angle::pp::Token::OP_EQ:
+          type = TOK_OP_EQ;
+          break;
+      case angle::pp::Token::OP_GE:
+          type = TOK_OP_GE;
+          break;
+      case angle::pp::Token::OP_LE:
+          type = TOK_OP_LE;
+          break;
+      case angle::pp::Token::OP_RIGHT:
+          type = TOK_OP_RIGHT;
+          break;
+      case angle::pp::Token::OP_LEFT:
+          type = TOK_OP_LEFT;
+          break;
       case '|':
       case '^':
       case '&':
       case '>':
       case '<':
       case '-':
       case '+':
       case '%':
@@ -1988,21 +1986,23 @@ int yylex(YYSTYPE *lvalp, Context *conte
         break;
     }
 
     return type;
 }
 
 void yyerror(Context *context, const char *reason)
 {
-    context->diagnostics->report(pp::Diagnostics::PP_INVALID_EXPRESSION,
-                                 context->token->location,
-                                 reason);
+    context->diagnostics->report(angle::pp::Diagnostics::PP_INVALID_EXPRESSION,
+                                 context->token->location, reason);
 }
 
+namespace angle
+{
+
 namespace pp {
 
 ExpressionParser::ExpressionParser(Lexer *lexer, Diagnostics *diagnostics)
     : mLexer(lexer),
       mDiagnostics(diagnostics)
 {
 }
 
@@ -2037,8 +2037,10 @@ bool ExpressionParser::parse(Token *toke
         mDiagnostics->report(Diagnostics::PP_INTERNAL_ERROR, token->location, "");
         break;
     }
 
     return ret == 0;
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.h
@@ -5,16 +5,19 @@
 //
 
 #ifndef COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_
 #define COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_
 
 #include "common/angleutils.h"
 #include "compiler/preprocessor/DiagnosticsBase.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 class Lexer;
 struct Token;
 
 class ExpressionParser : angle::NonCopyable
 {
@@ -35,9 +38,11 @@ class ExpressionParser : angle::NonCopya
 
   private:
     Lexer *mLexer;
     Diagnostics *mDiagnostics;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.y
+++ b/gfx/angle/checkout/src/compiler/preprocessor/ExpressionParser.y
@@ -54,23 +54,23 @@ typedef uint32_t UNSIGNED_TYPE;
 #define YYENABLE_NLS 0
 #define YYLTYPE_IS_TRIVIAL 1
 #define YYSTYPE_IS_TRIVIAL 1
 #define YYSTYPE_IS_DECLARED 1
 
 namespace {
 struct Context
 {
-    pp::Diagnostics* diagnostics;
-    pp::Lexer* lexer;
-    pp::Token* token;
+    angle::pp::Diagnostics *diagnostics;
+    angle::pp::Lexer *lexer;
+    angle::pp::Token *token;
     int* result;
     bool parsePresetToken;
 
-    pp::ExpressionParser::ErrorSettings errorSettings;
+    angle::pp::ExpressionParser::ErrorSettings errorSettings;
     bool *valid;
 
     void startIgnoreErrors() { ++ignoreErrors; }
     void endIgnoreErrors() { --ignoreErrors; }
 
     bool isIgnoringErrors() { return ignoreErrors > 0; }
 
     int ignoreErrors;
@@ -196,17 +196,17 @@ expression
     | expression TOK_OP_RIGHT expression {
         if ($3 < 0 || $3 > 31)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << $1 << " >> " << $3;
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_UNDEFINED_SHIFT,
+                context->diagnostics->report(angle::pp::Diagnostics::PP_UNDEFINED_SHIFT,
                                              context->token->location,
                                              text.c_str());
                 *(context->valid) = false;
             }
             $$ = static_cast<YYSTYPE>(0);
         }
         else if ($1 < 0)
         {
@@ -221,17 +221,17 @@ expression
     | expression TOK_OP_LEFT expression {
         if ($3 < 0 || $3 > 31)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << $1 << " << " << $3;
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_UNDEFINED_SHIFT,
+                context->diagnostics->report(angle::pp::Diagnostics::PP_UNDEFINED_SHIFT,
                                              context->token->location,
                                              text.c_str());
                 *(context->valid) = false;
             }
             $$ = static_cast<YYSTYPE>(0);
         }
         else
         {
@@ -249,17 +249,17 @@ expression
     | expression '%' expression {
         if ($3 == 0)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << $1 << " % " << $3;
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
+                context->diagnostics->report(angle::pp::Diagnostics::PP_DIVISION_BY_ZERO,
                                              context->token->location,
                                              text.c_str());
                 *(context->valid) = false;
             }
             $$ = static_cast<YYSTYPE>(0);
         }
         else if (($1 == std::numeric_limits<YYSTYPE>::min()) && ($3 == -1))
         {
@@ -275,17 +275,17 @@ expression
     | expression '/' expression {
         if ($3 == 0)
         {
             if (!context->isIgnoringErrors())
             {
                 std::ostringstream stream;
                 stream << $1 << " / " << $3;
                 std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
+                context->diagnostics->report(angle::pp::Diagnostics::PP_DIVISION_BY_ZERO,
                                             context->token->location,
                                             text.c_str());
                 *(context->valid) = false;
             }
             $$ = static_cast<YYSTYPE>(0);
         }
         else if (($1 == std::numeric_limits<YYSTYPE>::min()) && ($3 == -1))
         {
@@ -327,67 +327,67 @@ expression
         $$ = $2;
     }
 ;
 
 %%
 
 int yylex(YYSTYPE *lvalp, Context *context)
 {
-    pp::Token *token = context->token;
+    angle::pp::Token *token = context->token;
     if (!context->parsePresetToken)
     {
         context->lexer->lex(token);
     }
     context->parsePresetToken = false;
 
     int type = 0;
 
     switch (token->type)
     {
-      case pp::Token::CONST_INT: {
+      case angle::pp::Token::CONST_INT: {
         unsigned int val = 0;
         int testVal = 0;
         if (!token->uValue(&val) || (!token->iValue(&testVal) &&
                                      context->errorSettings.integerLiteralsMustFit32BitSignedRange))
         {
-            context->diagnostics->report(pp::Diagnostics::PP_INTEGER_OVERFLOW,
+            context->diagnostics->report(angle::pp::Diagnostics::PP_INTEGER_OVERFLOW,
                                          token->location, token->text);
             *(context->valid) = false;
         }
         *lvalp = static_cast<YYSTYPE>(val);
         type = TOK_CONST_INT;
         break;
       }
-      case pp::Token::IDENTIFIER:
+      case angle::pp::Token::IDENTIFIER:
         *lvalp = static_cast<YYSTYPE>(-1);
         type = TOK_IDENTIFIER;
         break;
-      case pp::Token::OP_OR:
+      case angle::pp::Token::OP_OR:
         type = TOK_OP_OR;
         break;
-      case pp::Token::OP_AND:
+      case angle::pp::Token::OP_AND:
         type = TOK_OP_AND;
         break;
-      case pp::Token::OP_NE:
+      case angle::pp::Token::OP_NE:
         type = TOK_OP_NE;
         break;
-      case pp::Token::OP_EQ:
+      case angle::pp::Token::OP_EQ:
         type = TOK_OP_EQ;
         break;
-      case pp::Token::OP_GE:
+      case angle::pp::Token::OP_GE:
         type = TOK_OP_GE;
         break;
-      case pp::Token::OP_LE:
+      case angle::pp::Token::OP_LE:
         type = TOK_OP_LE;
         break;
-      case pp::Token::OP_RIGHT:
+      case angle::pp::Token::OP_RIGHT:
         type = TOK_OP_RIGHT;
         break;
-      case pp::Token::OP_LEFT:
+      case angle::pp::Token::OP_LEFT:
         type = TOK_OP_LEFT;
         break;
       case '|':
       case '^':
       case '&':
       case '>':
       case '<':
       case '-':
@@ -406,21 +406,23 @@ int yylex(YYSTYPE *lvalp, Context *conte
         break;
     }
 
     return type;
 }
 
 void yyerror(Context *context, const char *reason)
 {
-    context->diagnostics->report(pp::Diagnostics::PP_INVALID_EXPRESSION,
+    context->diagnostics->report(angle::pp::Diagnostics::PP_INVALID_EXPRESSION,
                                  context->token->location,
                                  reason);
 }
 
+namespace angle {
+
 namespace pp {
 
 ExpressionParser::ExpressionParser(Lexer *lexer, Diagnostics *diagnostics)
     : mLexer(lexer),
       mDiagnostics(diagnostics)
 {
 }
 
@@ -455,8 +457,10 @@ bool ExpressionParser::parse(Token *toke
         mDiagnostics->report(Diagnostics::PP_INTERNAL_ERROR, token->location, "");
         break;
     }
 
     return ret == 0;
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/Input.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Input.cpp
@@ -6,16 +6,19 @@
 
 #include "compiler/preprocessor/Input.h"
 
 #include <algorithm>
 #include <cstring>
 
 #include "common/debug.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 Input::Input() : mCount(0), mString(0)
 {
 }
 
 Input::~Input()
@@ -122,8 +125,10 @@ size_t Input::read(char *buf, size_t max
             ++mReadLoc.sIndex;
             mReadLoc.cIndex = 0;
         }
     }
     return nRead;
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/Input.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Input.h
@@ -5,16 +5,19 @@
 //
 
 #ifndef COMPILER_PREPROCESSOR_INPUT_H_
 #define COMPILER_PREPROCESSOR_INPUT_H_
 
 #include <cstddef>
 #include <vector>
 
+namespace angle
+{
+
 namespace pp
 {
 
 // Holds and reads input for Lexer.
 class Input
 {
   public:
     Input();
@@ -46,9 +49,11 @@ class Input
     const char *const *mString;
     std::vector<size_t> mLength;
 
     Location mReadLoc;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_INPUT_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/Lexer.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Lexer.cpp
@@ -1,16 +1,21 @@
 //
 // Copyright (c) 2012 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.
 //
 
 #include "compiler/preprocessor/Lexer.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 Lexer::~Lexer()
 {
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/Lexer.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Lexer.h
@@ -4,24 +4,29 @@
 // found in the LICENSE file.
 //
 
 #ifndef COMPILER_PREPROCESSOR_LEXER_H_
 #define COMPILER_PREPROCESSOR_LEXER_H_
 
 #include "common/angleutils.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 struct Token;
 
 class Lexer : angle::NonCopyable
 {
   public:
     virtual ~Lexer();
 
     virtual void lex(Token *token) = 0;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_LEXER_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/Macro.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Macro.cpp
@@ -4,16 +4,19 @@
 // found in the LICENSE file.
 //
 
 #include "compiler/preprocessor/Macro.h"
 
 #include "common/angleutils.h"
 #include "compiler/preprocessor/Token.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 Macro::Macro() : predefined(false), disabled(false), expansionCount(0), type(kTypeObj)
 {
 }
 
 Macro::~Macro()
@@ -37,8 +40,10 @@ void PredefineMacro(MacroSet *macroSet, 
     macro->type                  = Macro::kTypeObj;
     macro->name                  = name;
     macro->replacements.push_back(token);
 
     (*macroSet)[name] = macro;
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/Macro.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Macro.h
@@ -7,16 +7,19 @@
 #ifndef COMPILER_PREPROCESSOR_MACRO_H_
 #define COMPILER_PREPROCESSOR_MACRO_H_
 
 #include <map>
 #include <memory>
 #include <string>
 #include <vector>
 
+namespace angle
+{
+
 namespace pp
 {
 
 struct Token;
 
 struct Macro
 {
     enum Type
@@ -42,9 +45,11 @@ struct Macro
 };
 
 typedef std::map<std::string, std::shared_ptr<Macro>> MacroSet;
 
 void PredefineMacro(MacroSet *macroSet, const char *name, int value);
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_MACRO_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/MacroExpander.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/MacroExpander.cpp
@@ -7,16 +7,19 @@
 #include "compiler/preprocessor/MacroExpander.h"
 
 #include <algorithm>
 
 #include "common/debug.h"
 #include "compiler/preprocessor/DiagnosticsBase.h"
 #include "compiler/preprocessor/Token.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 namespace
 {
 
 const size_t kMaxContextTokens = 10000;
 
@@ -474,8 +477,10 @@ const Token &MacroExpander::MacroContext
 
 void MacroExpander::MacroContext::unget()
 {
     ASSERT(index > 0);
     --index;
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/MacroExpander.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/MacroExpander.h
@@ -8,16 +8,19 @@
 #define COMPILER_PREPROCESSOR_MACROEXPANDER_H_
 
 #include <memory>
 #include <vector>
 
 #include "compiler/preprocessor/Lexer.h"
 #include "compiler/preprocessor/Macro.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 class Diagnostics;
 struct SourceLocation;
 
 class MacroExpander : public Lexer
 {
@@ -75,9 +78,11 @@ class MacroExpander : public Lexer
     bool mDeferReenablingMacros;
     std::vector<std::shared_ptr<Macro>> mMacrosToReenable;
 
     class ScopedMacroReenabler;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_MACROEXPANDER_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/Preprocessor.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Preprocessor.cpp
@@ -9,16 +9,19 @@
 #include "common/debug.h"
 #include "compiler/preprocessor/DiagnosticsBase.h"
 #include "compiler/preprocessor/DirectiveParser.h"
 #include "compiler/preprocessor/Macro.h"
 #include "compiler/preprocessor/MacroExpander.h"
 #include "compiler/preprocessor/Token.h"
 #include "compiler/preprocessor/Tokenizer.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 struct PreprocessorImpl
 {
     Diagnostics *diagnostics;
     MacroSet macroSet;
     Tokenizer tokenizer;
@@ -100,8 +103,10 @@ void Preprocessor::lex(Token *token)
 }
 
 void Preprocessor::setMaxTokenSize(size_t maxTokenSize)
 {
     mImpl->tokenizer.setMaxTokenSize(maxTokenSize);
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/Preprocessor.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Preprocessor.h
@@ -6,16 +6,19 @@
 
 #ifndef COMPILER_PREPROCESSOR_PREPROCESSOR_H_
 #define COMPILER_PREPROCESSOR_PREPROCESSOR_H_
 
 #include <cstddef>
 
 #include "common/angleutils.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 class Diagnostics;
 class DirectiveHandler;
 struct PreprocessorImpl;
 struct Token;
 
@@ -52,9 +55,11 @@ class Preprocessor : angle::NonCopyable
     void setMaxTokenSize(size_t maxTokenSize);
 
   private:
     PreprocessorImpl *mImpl;
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_PREPROCESSOR_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/SourceLocation.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/SourceLocation.h
@@ -2,16 +2,19 @@
 // Copyright (c) 2012 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.
 //
 
 #ifndef COMPILER_PREPROCESSOR_SOURCELOCATION_H_
 #define COMPILER_PREPROCESSOR_SOURCELOCATION_H_
 
+namespace angle
+{
+
 namespace pp
 {
 
 struct SourceLocation
 {
     SourceLocation() : file(0), line(0) {}
     SourceLocation(int f, int l) : file(f), line(l) {}
 
@@ -31,9 +34,11 @@ inline bool operator==(const SourceLocat
 
 inline bool operator!=(const SourceLocation &lhs, const SourceLocation &rhs)
 {
     return !lhs.equals(rhs);
 }
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_SOURCELOCATION_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/Token.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Token.cpp
@@ -4,16 +4,19 @@
 // found in the LICENSE file.
 //
 
 #include "compiler/preprocessor/Token.h"
 
 #include "common/debug.h"
 #include "compiler/preprocessor/numeric_lex.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 void Token::reset()
 {
     type     = 0;
     flags    = 0;
     location = SourceLocation();
@@ -73,8 +76,10 @@ std::ostream &operator<<(std::ostream &o
     if (token.hasLeadingSpace())
         out << " ";
 
     out << token.text;
     return out;
 }
 
 }  // namespace pp
+
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/Token.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Token.h
@@ -7,16 +7,19 @@
 #ifndef COMPILER_PREPROCESSOR_TOKEN_H_
 #define COMPILER_PREPROCESSOR_TOKEN_H_
 
 #include <ostream>
 #include <string>
 
 #include "compiler/preprocessor/SourceLocation.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 struct Token
 {
     enum Type
     {
         // Calling this ERROR causes a conflict with wingdi.h
@@ -99,11 +102,13 @@ inline bool operator==(const Token &lhs,
 
 inline bool operator!=(const Token &lhs, const Token &rhs)
 {
     return !lhs.equals(rhs);
 }
 
 std::ostream &operator<<(std::ostream &out, const Token &token);
 
-}  // namepsace pp
+}  // namespace pp
+
+}  // namespace angle
 
 #endif  // COMPILER_PREPROCESSOR_TOKEN_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.cpp
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.cpp
@@ -919,65 +919,58 @@ IF YOU MODIFY THIS FILE YOU ALSO NEED TO
 // Workaround for flex using the register keyword, deprecated in C++11.
 #ifdef __cplusplus
 #if __cplusplus > 199711L
 #define register
 #endif
 #endif
 
 typedef std::string YYSTYPE;
-typedef pp::SourceLocation YYLTYPE;
+typedef angle::pp::SourceLocation YYLTYPE;
 
 // Use the unused yycolumn variable to track file (string) number.
 #define yyfileno yycolumn
 
 #define YY_USER_INIT                   \
     do {                               \
         yyfileno = 0;                  \
         yylineno = 1;                  \
         yyextra->leadingSpace = false; \
         yyextra->lineStart = true;     \
     } while(0);
 
 #define YY_NO_INPUT
 #define YY_USER_ACTION                                              \
     do                                                              \
     {                                                               \
-        pp::Input* input = &yyextra->input;                         \
-        pp::Input::Location* scanLoc = &yyextra->scanLoc;           \
+        angle::pp::Input *input             = &yyextra->input;      \
+        angle::pp::Input::Location *scanLoc = &yyextra->scanLoc;    \
         while ((scanLoc->sIndex < input->count()) &&                \
                (scanLoc->cIndex >= input->length(scanLoc->sIndex))) \
         {                                                           \
             scanLoc->cIndex -= input->length(scanLoc->sIndex++);    \
-            ++yyfileno; yylineno = 1;                               \
+            ++yyfileno;                                             \
+            yylineno = 1;                                           \
         }                                                           \
         yylloc->file = yyfileno;                                    \
         yylloc->line = yylineno;                                    \
         scanLoc->cIndex += yyleng;                                  \
-    } while(0);
+    } while (0);
 
 #define YY_INPUT(buf, result, maxSize) \
     result = yyextra->input.read(buf, maxSize, &yylineno);
 
 
 
 
 
 #define INITIAL 0
 #define COMMENT 1
 
-
-
-
-
-
-#define YY_EXTRA_TYPE pp::Tokenizer::Context*
-
-
-
+#define YY_EXTRA_TYPE angle::pp::Tokenizer::Context *
 
 /* Holds the entire state of the reentrant scanner. */
 struct yyguts_t
     {
 
     /* User-defined. Not touched by flex. */
     YY_EXTRA_TYPE yyextra_r;
 
@@ -1431,211 +1424,211 @@ YY_RULE_SETUP
 	YY_BREAK
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
 {
     if (yylineno == INT_MAX)
     {
         *yylval = "Integer overflow on line number";
-        return pp::Token::GOT_ERROR;
+        return angle::pp::Token::GOT_ERROR;
     }
     ++yylineno;
 }
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
 {
     yyextra->leadingSpace = true;
     BEGIN(INITIAL);
 }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
 {
     // # is only valid at start of line for preprocessor directives.
     yylval->assign(1, yytext[0]);
-    return yyextra->lineStart ? pp::Token::PP_HASH : pp::Token::PP_OTHER;
+    return yyextra->lineStart ? angle::pp::Token::PP_HASH : angle::pp::Token::PP_OTHER;
 }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::IDENTIFIER;
+    return angle::pp::Token::IDENTIFIER;
 }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::CONST_INT;
+    return angle::pp::Token::CONST_INT;
 }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::CONST_FLOAT;
+    return angle::pp::Token::CONST_FLOAT;
 }
 	YY_BREAK
 /* Anything that starts with a {DIGIT} or .{DIGIT} must be a number. */
 /* Rule to catch all invalid integers and floats. */
 case 11:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::PP_NUMBER;
+    return angle::pp::Token::PP_NUMBER;
 }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_INC;
+    return angle::pp::Token::OP_INC;
 }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_DEC;
+    return angle::pp::Token::OP_DEC;
 }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_LEFT;
+    return angle::pp::Token::OP_LEFT;
 }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_RIGHT;
+    return angle::pp::Token::OP_RIGHT;
 }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_LE;
+    return angle::pp::Token::OP_LE;
 }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_GE;
+    return angle::pp::Token::OP_GE;
 }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_EQ;
+    return angle::pp::Token::OP_EQ;
 }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_NE;
+    return angle::pp::Token::OP_NE;
 }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_AND;
+    return angle::pp::Token::OP_AND;
 }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_XOR;
+    return angle::pp::Token::OP_XOR;
 }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_OR;
+    return angle::pp::Token::OP_OR;
 }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_ADD_ASSIGN;
+    return angle::pp::Token::OP_ADD_ASSIGN;
 }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_SUB_ASSIGN;
+    return angle::pp::Token::OP_SUB_ASSIGN;
 }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_MUL_ASSIGN;
+    return angle::pp::Token::OP_MUL_ASSIGN;
 }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_DIV_ASSIGN;
+    return angle::pp::Token::OP_DIV_ASSIGN;
 }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_MOD_ASSIGN;
+    return angle::pp::Token::OP_MOD_ASSIGN;
 }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_LEFT_ASSIGN;
+    return angle::pp::Token::OP_LEFT_ASSIGN;
 }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_RIGHT_ASSIGN;
+    return angle::pp::Token::OP_RIGHT_ASSIGN;
 }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_AND_ASSIGN;
+    return angle::pp::Token::OP_AND_ASSIGN;
 }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_XOR_ASSIGN;
+    return angle::pp::Token::OP_XOR_ASSIGN;
 }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_OR_ASSIGN;
+    return angle::pp::Token::OP_OR_ASSIGN;
 }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 {
     yylval->assign(1, yytext[0]);
     return yytext[0];
 }
@@ -1646,61 +1639,61 @@ YY_RULE_SETUP
 	YY_BREAK
 case 35:
 /* rule 35 can match eol */
 YY_RULE_SETUP
 {
     if (yylineno == INT_MAX)
     {
         *yylval = "Integer overflow on line number";
-        return pp::Token::GOT_ERROR;
+        return angle::pp::Token::GOT_ERROR;
     }
     ++yylineno;
     yylval->assign(1, '\n');
     return '\n';
 }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 {
     yylval->assign(1, yytext[0]);
-    return pp::Token::PP_OTHER;
+    return angle::pp::Token::PP_OTHER;
 }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
 {
     // YY_USER_ACTION is not invoked for handling EOF.
     // Set the location for EOF token manually.
-    pp::Input* input = &yyextra->input;
-    pp::Input::Location* scanLoc = &yyextra->scanLoc;
+    angle::pp::Input *input             = &yyextra->input;
+    angle::pp::Input::Location *scanLoc = &yyextra->scanLoc;
     yy_size_t sIndexMax = input->count() ? input->count() - 1 : 0;
     if (scanLoc->sIndex != sIndexMax)
     {
         // We can only reach here if there are empty strings at the
         // end of the input.
         scanLoc->sIndex = sIndexMax; scanLoc->cIndex = 0;
         // FIXME: this is not 64-bit clean.
         yyfileno = static_cast<int>(sIndexMax); yylineno = 1;
     }
     yylloc->file = yyfileno;
     yylloc->line = yylineno;
     yylval->clear();
 
     // Line number overflows fake EOFs to exit early, check for this case.
     if (yylineno == INT_MAX)
     {
-        yyextra->diagnostics->report(pp::Diagnostics::PP_TOKENIZER_ERROR,
-                                     pp::SourceLocation(yyfileno, yylineno),
+        yyextra->diagnostics->report(angle::pp::Diagnostics::PP_TOKENIZER_ERROR,
+                                     angle::pp::SourceLocation(yyfileno, yylineno),
                                      "Integer overflow on line number");
     }
     else if (YY_START == COMMENT)
     {
-        yyextra->diagnostics->report(pp::Diagnostics::PP_EOF_IN_COMMENT,
-                                     pp::SourceLocation(yyfileno, yylineno),
+        yyextra->diagnostics->report(angle::pp::Diagnostics::PP_EOF_IN_COMMENT,
+                                     angle::pp::SourceLocation(yyfileno, yylineno),
                                      "EOF while in a comment");
     }
     yyterminate();
 }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 ECHO;
@@ -2971,22 +2964,18 @@ void yyfree (void * ptr , yyscan_t yysca
 	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 	(void)yyg;
 	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
 }
 
 
 #define YYTABLES_NAME "yytables"
 
-
-
-
-
-
-
+namespace angle
+{
 
 namespace pp {
 
 Tokenizer::Tokenizer(Diagnostics *diagnostics) : mHandle(nullptr), mMaxTokenSize(256)
 {
     mContext.diagnostics = diagnostics;
 }
 
@@ -3066,9 +3055,9 @@ void Tokenizer::destroyScanner()
         return;
 
     yylex_destroy(mHandle);
     mHandle = nullptr;
 }
 
 }  // namespace pp
 
-
+}  // namespace angle
--- a/gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.h
@@ -6,16 +6,19 @@
 
 #ifndef COMPILER_PREPROCESSOR_TOKENIZER_H_
 #define COMPILER_PREPROCESSOR_TOKENIZER_H_
 
 #include "common/angleutils.h"
 #include "compiler/preprocessor/Input.h"
 #include "compiler/preprocessor/Lexer.h"
 
+namespace angle
+{
+
 namespace pp
 {
 
 class Diagnostics;
 
 class Tokenizer : public Lexer
 {
   public:
@@ -50,9 +53,11 @@ class Tokenizer : public Lexer
 
     void *mHandle;         // Scanner handle.
     Context mContext;      // Scanner extra.
     size_t mMaxTokenSize;  // Maximum token size
 };
 
 }  // namespace pp
 
+}  // namespace angle
+
 #endif  // COMPILER_PREPROCESSOR_TOKENIZER_H_
--- a/gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.l
+++ b/gfx/angle/checkout/src/compiler/preprocessor/Tokenizer.l
@@ -46,35 +46,35 @@ IF YOU MODIFY THIS FILE YOU ALSO NEED TO
 // Workaround for flex using the register keyword, deprecated in C++11.
 #ifdef __cplusplus
 #if __cplusplus > 199711L
 #define register
 #endif
 #endif
 
 typedef std::string YYSTYPE;
-typedef pp::SourceLocation YYLTYPE;
+typedef angle::pp::SourceLocation YYLTYPE;
 
 // Use the unused yycolumn variable to track file (string) number.
 #define yyfileno yycolumn
 
 #define YY_USER_INIT                   \
     do {                               \
         yyfileno = 0;                  \
         yylineno = 1;                  \
         yyextra->leadingSpace = false; \
         yyextra->lineStart = true;     \
     } while(0);
 
 #define YY_NO_INPUT
 #define YY_USER_ACTION                                              \
     do                                                              \
     {                                                               \
-        pp::Input* input = &yyextra->input;                         \
-        pp::Input::Location* scanLoc = &yyextra->scanLoc;           \
+        angle::pp::Input* input = &yyextra->input;                  \
+        angle::pp::Input::Location* scanLoc = &yyextra->scanLoc;    \
         while ((scanLoc->sIndex < input->count()) &&                \
                (scanLoc->cIndex >= input->length(scanLoc->sIndex))) \
         {                                                           \
             scanLoc->cIndex -= input->length(scanLoc->sIndex++);    \
             ++yyfileno; yylineno = 1;                               \
         }                                                           \
         yylloc->file = yyfileno;                                    \
         yylloc->line = yylineno;                                    \
@@ -84,17 +84,17 @@ typedef pp::SourceLocation YYLTYPE;
 #define YY_INPUT(buf, result, maxSize) \
     result = yyextra->input.read(buf, maxSize, &yylineno);
 
 %}
 
 %option noyywrap nounput never-interactive
 %option reentrant bison-bridge bison-locations
 %option prefix="pp"
-%option extra-type="pp::Tokenizer::Context*"
+%option extra-type="angle::pp::Tokenizer::Context*"
 %x COMMENT
 
 NEWLINE     \n|\r|\r\n
 IDENTIFIER  [_a-zA-Z][_a-zA-Z0-9]*
 PUNCTUATOR  [][<>(){}.+-/*%^|&~=!:;,?]
 
 DECIMAL_CONSTANT      [1-9][0-9]*[uU]?
 OCTAL_CONSTANT        0[0-7]*[uU]?
@@ -114,196 +114,198 @@ FRACTIONAL_CONSTANT  ({DIGIT}*"."{DIGIT}
     /* The comment is replaced by a single space. */
 "/*" { BEGIN(COMMENT); }
 <COMMENT>[^*\r\n]+
 <COMMENT>"*"
 <COMMENT>{NEWLINE} {
     if (yylineno == INT_MAX)
     {
         *yylval = "Integer overflow on line number";
-        return pp::Token::GOT_ERROR;
+        return angle::pp::Token::GOT_ERROR;
     }
     ++yylineno;
 }
 <COMMENT>"*/" {
     yyextra->leadingSpace = true;
     BEGIN(INITIAL);
 }
 
 # {
     // # is only valid at start of line for preprocessor directives.
     yylval->assign(1, yytext[0]);
-    return yyextra->lineStart ? pp::Token::PP_HASH : pp::Token::PP_OTHER;
+    return yyextra->lineStart ? angle::pp::Token::PP_HASH : angle::pp::Token::PP_OTHER;
 }
 
 {IDENTIFIER} {
     yylval->assign(yytext, yyleng);
-    return pp::Token::IDENTIFIER;
+    return angle::pp::Token::IDENTIFIER;
 }
 
 ({DECIMAL_CONSTANT}[uU]?)|({OCTAL_CONSTANT}[uU]?)|({HEXADECIMAL_CONSTANT}[uU]?) {
     yylval->assign(yytext, yyleng);
-    return pp::Token::CONST_INT;
+    return angle::pp::Token::CONST_INT;
 }
 
 ({DIGIT}+{EXPONENT_PART}[fF]?)|({FRACTIONAL_CONSTANT}{EXPONENT_PART}?[fF]?) {
     yylval->assign(yytext, yyleng);
-    return pp::Token::CONST_FLOAT;
+    return angle::pp::Token::CONST_FLOAT;
 }
 
     /* Anything that starts with a {DIGIT} or .{DIGIT} must be a number. */
     /* Rule to catch all invalid integers and floats. */
 ({DIGIT}+[_a-zA-Z0-9.]*)|("."{DIGIT}+[_a-zA-Z0-9.]*) {
     yylval->assign(yytext, yyleng);
-    return pp::Token::PP_NUMBER;
+    return angle::pp::Token::PP_NUMBER;
 }
 
 "++" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_INC;
+    return angle::pp::Token::OP_INC;
 }
 "--" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_DEC;
+    return angle::pp::Token::OP_DEC;
 }
 "<<" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_LEFT;
+    return angle::pp::Token::OP_LEFT;
 }
 ">>" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_RIGHT;
+    return angle::pp::Token::OP_RIGHT;
 }
 "<=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_LE;
+    return angle::pp::Token::OP_LE;
 }
 ">=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_GE;
+    return angle::pp::Token::OP_GE;
 }
 "==" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_EQ;
+    return angle::pp::Token::OP_EQ;
 }
 "!=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_NE;
+    return angle::pp::Token::OP_NE;
 }
 "&&" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_AND;
+    return angle::pp::Token::OP_AND;
 }
 "^^" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_XOR;
+    return angle::pp::Token::OP_XOR;
 }
 "||" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_OR;
+    return angle::pp::Token::OP_OR;
 }
 "+=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_ADD_ASSIGN;
+    return angle::pp::Token::OP_ADD_ASSIGN;
 }
 "-=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_SUB_ASSIGN;
+    return angle::pp::Token::OP_SUB_ASSIGN;
 }
 "*=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_MUL_ASSIGN;
+    return angle::pp::Token::OP_MUL_ASSIGN;
 }
 "/=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_DIV_ASSIGN;
+    return angle::pp::Token::OP_DIV_ASSIGN;
 }
 "%=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_MOD_ASSIGN;
+    return angle::pp::Token::OP_MOD_ASSIGN;
 }
 "<<=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_LEFT_ASSIGN;
+    return angle::pp::Token::OP_LEFT_ASSIGN;
 }
 ">>=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_RIGHT_ASSIGN;
+    return angle::pp::Token::OP_RIGHT_ASSIGN;
 }
 "&=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_AND_ASSIGN;
+    return angle::pp::Token::OP_AND_ASSIGN;
 }
 "^=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_XOR_ASSIGN;
+    return angle::pp::Token::OP_XOR_ASSIGN;
 }
 "|=" {
     yylval->assign(yytext, yyleng);
-    return pp::Token::OP_OR_ASSIGN;
+    return angle::pp::Token::OP_OR_ASSIGN;
 }
 
 {PUNCTUATOR} {
     yylval->assign(1, yytext[0]);
     return yytext[0];
 }
 
 [ \t\v\f]+   { yyextra->leadingSpace = true; }
 
 {NEWLINE} {
     if (yylineno == INT_MAX)
     {
         *yylval = "Integer overflow on line number";
-        return pp::Token::GOT_ERROR;
+        return angle::pp::Token::GOT_ERROR;
     }
     ++yylineno;
     yylval->assign(1, '\n');
     return '\n';
 }
 
 . {
     yylval->assign(1, yytext[0]);
-    return pp::Token::PP_OTHER;
+    return angle::pp::Token::PP_OTHER;
 }
 
 <*><<EOF>> {
     // YY_USER_ACTION is not invoked for handling EOF.
     // Set the location for EOF token manually.
-    pp::Input* input = &yyextra->input;
-    pp::Input::Location* scanLoc = &yyextra->scanLoc;
+    angle::pp::Input* input = &yyextra->input;
+    angle::pp::Input::Location* scanLoc = &yyextra->scanLoc;
     yy_size_t sIndexMax = input->count() ? input->count() - 1 : 0;
     if (scanLoc->sIndex != sIndexMax)
     {
         // We can only reach here if there are empty strings at the
         // end of the input.
         scanLoc->sIndex = sIndexMax; scanLoc->cIndex = 0;
         // FIXME: this is not 64-bit clean.
         yyfileno = static_cast<int>(sIndexMax); yylineno = 1;
     }
     yylloc->file = yyfileno;
     yylloc->line = yylineno;
     yylval->clear();
 
     // Line number overflows fake EOFs to exit early, check for this case.
     if (yylineno == INT_MAX) {
-        yyextra->diagnostics->report(pp::Diagnostics::PP_TOKENIZER_ERROR,
-                pp::SourceLocation(yyfileno, yylineno),
+        yyextra->diagnostics->report(angle::pp::Diagnostics::PP_TOKENIZER_ERROR,
+                angle::pp::SourceLocation(yyfileno, yylineno),
                 "Integer overflow on line number");
     }
     else if (YY_START == COMMENT)
     {
-        yyextra->diagnostics->report(pp::Diagnostics::PP_EOF_IN_COMMENT,
-                                     pp::SourceLocation(yyfileno, yylineno),
+        yyextra->diagnostics->report(angle::pp::Diagnostics::PP_EOF_IN_COMMENT,
+                                     angle::pp::SourceLocation(yyfileno, yylineno),
                                      "EOF while in a comment");
     }
     yyterminate();
 }
 
 %%
 
+namespace angle {
+
 namespace pp {
 
 Tokenizer::Tokenizer(Diagnostics *diagnostics) : mHandle(nullptr), mMaxTokenSize(256)
 {
     mContext.diagnostics = diagnostics;
 }
 
 Tokenizer::~Tokenizer()
@@ -382,8 +384,10 @@ void Tokenizer::destroyScanner()
         return;
 
     yylex_destroy(mHandle);
     mHandle = nullptr;
 }
 
 }  // namespace pp
 
+} // namespace angle
+
--- a/gfx/angle/checkout/src/compiler/preprocessor/numeric_lex.h
+++ b/gfx/angle/checkout/src/compiler/preprocessor/numeric_lex.h
@@ -7,16 +7,19 @@
 // numeric_lex.h: Functions to extract numeric values from string.
 
 #ifndef COMPILER_PREPROCESSOR_NUMERICLEX_H_
 #define COMPILER_PREPROCESSOR_NUMERICLEX_H_
 
 #include <cmath>
 #include <sstream>
 
+namespace angle
+{
+
 namespace pp
 {
 
 inline std::ios::fmtflags numeric_base_int(const std::string &str)
 {
     if ((str.size() >= 2) && (str[0] == '0') && (str[1] == 'x' || str[1] == 'X'))
     {
         return std::ios::hex;
@@ -56,11 +59,13 @@ bool numeric_lex_float(const std::string
     // locale.
     stream.imbue(std::locale::classic());
 #endif
 
     stream >> (*value);
     return !stream.fail() && std::isfinite(*value);
 }
 
-}  // namespace pp.
+}  // namespace pp
+
+}  // namespace angle
 
 #endif  // COMPILER_PREPROCESSOR_NUMERICLEX_H_
--- a/gfx/angle/checkout/src/compiler/translator/CollectVariables.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/CollectVariables.cpp
@@ -279,17 +279,17 @@ void CollectVariablesTraverser::recordBu
 {
     ASSERT(varyings);
     if (!(*addedFlag))
     {
         Varying info;
         setBuiltInInfoFromSymbol(variable, &info);
         info.staticUse   = true;
         info.active      = true;
-        info.isInvariant = mSymbolTable->isVaryingInvariant(variable.name());
+        info.isInvariant = mSymbolTable->isVaryingInvariant(variable);
         varyings->push_back(info);
         (*addedFlag) = true;
     }
 }
 
 void CollectVariablesTraverser::recordBuiltInFragmentOutputUsed(const TVariable &variable,
                                                                 bool *addedFlag)
 {
@@ -663,17 +663,17 @@ Varying CollectVariablesTraverser::recor
     {
         case EvqVaryingIn:
         case EvqVaryingOut:
         case EvqVertexOut:
         case EvqSmoothOut:
         case EvqFlatOut:
         case EvqCentroidOut:
         case EvqGeometryOut:
-            if (mSymbolTable->isVaryingInvariant(variable.getName()) || type.isInvariant())
+            if (mSymbolTable->isVaryingInvariant(variable.variable()) || type.isInvariant())
             {
                 varying.isInvariant = true;
             }
             break;
         default:
             break;
     }
 
--- a/gfx/angle/checkout/src/compiler/translator/Compiler.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/Compiler.cpp
@@ -33,16 +33,17 @@
 #include "compiler/translator/tree_ops/PruneEmptyCases.h"
 #include "compiler/translator/tree_ops/PruneNoOps.h"
 #include "compiler/translator/tree_ops/RegenerateStructNames.h"
 #include "compiler/translator/tree_ops/RemoveArrayLengthMethod.h"
 #include "compiler/translator/tree_ops/RemoveInvariantDeclaration.h"
 #include "compiler/translator/tree_ops/RemovePow.h"
 #include "compiler/translator/tree_ops/RemoveUnreferencedVariables.h"
 #include "compiler/translator/tree_ops/RewriteDoWhile.h"
+#include "compiler/translator/tree_ops/RewriteRepeatedAssignToSwizzled.h"
 #include "compiler/translator/tree_ops/ScalarizeVecAndMatConstructorArgs.h"
 #include "compiler/translator/tree_ops/SeparateDeclarations.h"
 #include "compiler/translator/tree_ops/SimplifyLoopConditions.h"
 #include "compiler/translator/tree_ops/SplitSequenceOperator.h"
 #include "compiler/translator/tree_ops/UnfoldShortCircuitAST.h"
 #include "compiler/translator/tree_ops/UseInterfaceBlockFields.h"
 #include "compiler/translator/tree_ops/VectorizeVectorScalarArithmetic.h"
 #include "compiler/translator/tree_util/BuiltIn_autogen.h"
@@ -732,16 +733,21 @@ bool TCompiler::checkAndSimplifyAST(TInt
         ClampPointSize(root, compileResources.MaxPointSize, &getSymbolTable());
     }
 
     if (getShaderType() == GL_FRAGMENT_SHADER && (compileOptions & SH_CLAMP_FRAG_DEPTH))
     {
         ClampFragDepth(root, &getSymbolTable());
     }
 
+    if (compileOptions & SH_REWRITE_REPEATED_ASSIGN_TO_SWIZZLED)
+    {
+        sh::RewriteRepeatedAssignToSwizzled(root);
+    }
+
     if (compileOptions & SH_REWRITE_VECTOR_SCALAR_ARITHMETIC)
     {
         VectorizeVectorScalarArithmetic(root, &getSymbolTable());
     }
 
     return true;
 }
 
--- a/gfx/angle/checkout/src/compiler/translator/ConstantUnion.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/ConstantUnion.cpp
@@ -152,17 +152,26 @@ bool TConstantUnion::cast(TBasicType new
                     break;
                 case EbtUInt:
                     setUConst(static_cast<unsigned int>(constant.getUConst()));
                     break;
                 case EbtBool:
                     setUConst(static_cast<unsigned int>(constant.getBConst()));
                     break;
                 case EbtFloat:
-                    setUConst(static_cast<unsigned int>(constant.getFConst()));
+                    if (constant.getFConst() < 0.0f)
+                    {
+                        // Avoid undefined behavior in C++ by first casting to signed int.
+                        setUConst(
+                            static_cast<unsigned int>(static_cast<int>(constant.getFConst())));
+                    }
+                    else
+                    {
+                        setUConst(static_cast<unsigned int>(constant.getFConst()));
+                    }
                     break;
                 default:
                     return false;
             }
             break;
         case EbtBool:
             switch (constant.type)
             {
--- a/gfx/angle/checkout/src/compiler/translator/Diagnostics.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/Diagnostics.cpp
@@ -19,17 +19,17 @@ TDiagnostics::TDiagnostics(TInfoSinkBase
 {
 }
 
 TDiagnostics::~TDiagnostics()
 {
 }
 
 void TDiagnostics::writeInfo(Severity severity,
-                             const pp::SourceLocation &loc,
+                             const angle::pp::SourceLocation &loc,
                              const char *reason,
                              const char *token)
 {
     switch (severity)
     {
         case SH_ERROR:
             ++mNumErrors;
             break;
@@ -49,43 +49,47 @@ void TDiagnostics::writeInfo(Severity se
 
 void TDiagnostics::globalError(const char *message)
 {
     ++mNumErrors;
     mInfoSink.prefix(SH_ERROR);
     mInfoSink << message << "\n";
 }
 
-void TDiagnostics::error(const pp::SourceLocation &loc, const char *reason, const char *token)
+void TDiagnostics::error(const angle::pp::SourceLocation &loc,
+                         const char *reason,
+                         const char *token)
 {
     writeInfo(SH_ERROR, loc, reason, token);
 }
 
-void TDiagnostics::warning(const pp::SourceLocation &loc, const char *reason, const char *token)
+void TDiagnostics::warning(const angle::pp::SourceLocation &loc,
+                           const char *reason,
+                           const char *token)
 {
     writeInfo(SH_WARNING, loc, reason, token);
 }
 
 void TDiagnostics::error(const TSourceLoc &loc, const char *reason, const char *token)
 {
-    pp::SourceLocation srcLoc;
+    angle::pp::SourceLocation srcLoc;
     srcLoc.file = loc.first_file;
     srcLoc.line = loc.first_line;
     error(srcLoc, reason, token);
 }
 
 void TDiagnostics::warning(const TSourceLoc &loc, const char *reason, const char *token)
 {
-    pp::SourceLocation srcLoc;
+    angle::pp::SourceLocation srcLoc;
     srcLoc.file = loc.first_file;
     srcLoc.line = loc.first_line;
     warning(srcLoc, reason, token);
 }
 
-void TDiagnostics::print(ID id, const pp::SourceLocation &loc, const std::string &text)
+void TDiagnostics::print(ID id, const angle::pp::SourceLocation &loc, const std::string &text)
 {
     writeInfo(isError(id) ? SH_ERROR : SH_WARNING, loc, message(id), text.c_str());
 }
 
 void TDiagnostics::resetErrorCount()
 {
     mNumErrors   = 0;
     mNumWarnings = 0;
--- a/gfx/angle/checkout/src/compiler/translator/Diagnostics.h
+++ b/gfx/angle/checkout/src/compiler/translator/Diagnostics.h
@@ -12,42 +12,42 @@
 #include "compiler/translator/Severity.h"
 
 namespace sh
 {
 
 class TInfoSinkBase;
 struct TSourceLoc;
 
-class TDiagnostics : public pp::Diagnostics, angle::NonCopyable
+class TDiagnostics : public angle::pp::Diagnostics, angle::NonCopyable
 {
   public:
     TDiagnostics(TInfoSinkBase &infoSink);
     ~TDiagnostics() override;
 
     int numErrors() const { return mNumErrors; }
     int numWarnings() const { return mNumWarnings; }
 
-    void error(const pp::SourceLocation &loc, const char *reason, const char *token);
-    void warning(const pp::SourceLocation &loc, const char *reason, const char *token);
+    void error(const angle::pp::SourceLocation &loc, const char *reason, const char *token);
+    void warning(const angle::pp::SourceLocation &loc, const char *reason, const char *token);
 
     void error(const TSourceLoc &loc, const char *reason, const char *token);
     void warning(const TSourceLoc &loc, const char *reason, const char *token);
 
     void globalError(const char *message);
 
     void resetErrorCount();
 
   protected:
     void writeInfo(Severity severity,
-                   const pp::SourceLocation &loc,
+                   const angle::pp::SourceLocation &loc,
                    const char *reason,
                    const char *token);
 
-    void print(ID id, const pp::SourceLocation &loc, const std::string &text) override;
+    void print(ID id, const angle::pp::SourceLocation &loc, const std::string &text) override;
 
   private:
     TInfoSinkBase &mInfoSink;
     int mNumErrors;
     int mNumWarnings;
 };
 
 // Diagnostics wrapper to use when the code is only allowed to generate warnings.
--- a/gfx/angle/checkout/src/compiler/translator/DirectiveHandler.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/DirectiveHandler.cpp
@@ -45,22 +45,22 @@ TDirectiveHandler::TDirectiveHandler(TEx
       mDebugShaderPrecisionSupported(debugShaderPrecisionSupported)
 {
 }
 
 TDirectiveHandler::~TDirectiveHandler()
 {
 }
 
-void TDirectiveHandler::handleError(const pp::SourceLocation &loc, const std::string &msg)
+void TDirectiveHandler::handleError(const angle::pp::SourceLocation &loc, const std::string &msg)
 {
     mDiagnostics.error(loc, msg.c_str(), "");
 }
 
-void TDirectiveHandler::handlePragma(const pp::SourceLocation &loc,
+void TDirectiveHandler::handlePragma(const angle::pp::SourceLocation &loc,
                                      const std::string &name,
                                      const std::string &value,
                                      bool stdgl)
 {
     if (stdgl)
     {
         const char kInvariant[] = "invariant";
         const char kAll[]       = "all";
@@ -114,28 +114,28 @@ void TDirectiveHandler::handlePragma(con
                 mPragma.debugShaderPrecision = true;
             else if (value == kOff)
                 mPragma.debugShaderPrecision = false;
             else
                 invalidValue = true;
         }
         else
         {
-            mDiagnostics.report(pp::Diagnostics::PP_UNRECOGNIZED_PRAGMA, loc, name);
+            mDiagnostics.report(angle::pp::Diagnostics::PP_UNRECOGNIZED_PRAGMA, loc, name);
             return;
         }
 
         if (invalidValue)
         {
             mDiagnostics.error(loc, "invalid pragma value - 'on' or 'off' expected", value.c_str());
         }
     }
 }
 
-void TDirectiveHandler::handleExtension(const pp::SourceLocation &loc,
+void TDirectiveHandler::handleExtension(const angle::pp::SourceLocation &loc,
                                         const std::string &name,
                                         const std::string &behavior)
 {
     const char kExtAll[] = "all";
 
     TBehavior behaviorVal = getBehavior(behavior);
     if (behaviorVal == EBhUndefined)
     {
@@ -180,17 +180,17 @@ void TDirectiveHandler::handleExtension(
             mDiagnostics.warning(loc, "extension is not supported", name.c_str());
             break;
         default:
             UNREACHABLE();
             break;
     }
 }
 
-void TDirectiveHandler::handleVersion(const pp::SourceLocation &loc, int version)
+void TDirectiveHandler::handleVersion(const angle::pp::SourceLocation &loc, int version)
 {
     if (version == 100 || version == 300 || version == 310)
     {
         mShaderVersion = version;
     }
     else
     {
         std::stringstream stream;
--- a/gfx/angle/checkout/src/compiler/translator/DirectiveHandler.h
+++ b/gfx/angle/checkout/src/compiler/translator/DirectiveHandler.h
@@ -12,41 +12,41 @@
 #include "compiler/translator/Pragma.h"
 #include "compiler/preprocessor/DirectiveHandlerBase.h"
 #include "GLSLANG/ShaderLang.h"
 
 namespace sh
 {
 class TDiagnostics;
 
-class TDirectiveHandler : public pp::DirectiveHandler, angle::NonCopyable
+class TDirectiveHandler : public angle::pp::DirectiveHandler, angle::NonCopyable
 {
   public:
     TDirectiveHandler(TExtensionBehavior &extBehavior,
                       TDiagnostics &diagnostics,
                       int &shaderVersion,
                       sh::GLenum shaderType,
                       bool debugShaderPrecisionSupported);
     ~TDirectiveHandler() override;
 
     const TPragma &pragma() const { return mPragma; }
     const TExtensionBehavior &extensionBehavior() const { return mExtensionBehavior; }
 
-    void handleError(const pp::SourceLocation &loc, const std::string &msg) override;
+    void handleError(const angle::pp::SourceLocation &loc, const std::string &msg) override;
 
-    void handlePragma(const pp::SourceLocation &loc,
+    void handlePragma(const angle::pp::SourceLocation &loc,
                       const std::string &name,
                       const std::string &value,
                       bool stdgl) override;
 
-    void handleExtension(const pp::SourceLocation &loc,
+    void handleExtension(const angle::pp::SourceLocation &loc,
                          const std::string &name,
                          const std::string &behavior) override;
 
-    void handleVersion(const pp::SourceLocation &loc, int version) override;
+    void handleVersion(const angle::pp::SourceLocation &loc, int version) override;
 
   private:
     TPragma mPragma;
     TExtensionBehavior &mExtensionBehavior;
     TDiagnostics &mDiagnostics;
     int &mShaderVersion;
     sh::GLenum mShaderType;
     bool mDebugShaderPrecisionSupported;
--- a/gfx/angle/checkout/src/compiler/translator/IntermNode.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/IntermNode.cpp
@@ -1706,16 +1706,42 @@ TIntermTyped *TIntermAggregate::fold(TDi
         }
     }
     const TConstantUnion *constArray = nullptr;
     if (isConstructor())
     {
         if (mType.canReplaceWithConstantUnion())
         {
             constArray = getConstantValue();
+            if (constArray && mType.getBasicType() == EbtUInt)
+            {
+                // Check if we converted a negative float to uint and issue a warning in that case.
+                size_t sizeRemaining = mType.getObjectSize();
+                for (TIntermNode *arg : mArguments)
+                {
+                    TIntermTyped *typedArg = arg->getAsTyped();
+                    if (typedArg->getBasicType() == EbtFloat)
+                    {
+                        const TConstantUnion *argValue = typedArg->getConstantValue();
+                        size_t castSize =
+                            std::min(typedArg->getType().getObjectSize(), sizeRemaining);
+                        for (size_t i = 0; i < castSize; ++i)
+                        {
+                            if (argValue[i].getFConst() < 0.0f)
+                            {
+                                // ESSL 3.00.6 section 5.4.1.
+                                diagnostics->warning(
+                                    mLine, "casting a negative float to uint is undefined",
+                                    mType.getBuiltInTypeNameString());
+                            }
+                        }
+                    }
+                    sizeRemaining -= typedArg->getType().getObjectSize();
+                }
+            }
         }
     }
     else if (CanFoldAggregateBuiltInOp(mOp))
     {
         constArray = TIntermConstantUnion::FoldAggregateBuiltIn(this, diagnostics);
     }
     if (constArray == nullptr)
     {
@@ -1895,21 +1921,21 @@ const TConstantUnion *TIntermConstantUni
                                 }
                             }
                             else
                             {
                                 ASSERT(op == EOpIMod);
                                 if (lhs < 0 || divisor < 0)
                                 {
                                     // ESSL 3.00.6 section 5.9: Results of modulus are undefined
-                                    // when
-                                    // either one of the operands is negative.
+                                    // when either one of the operands is negative.
                                     diagnostics->warning(line,
                                                          "Negative modulus operator operand "
-                                                         "encountered during constant folding",
+                                                         "encountered during constant folding. "
+                                                         "Results are undefined.",
                                                          "%");
                                     resultArray[i].setIConst(0);
                                 }
                                 else
                                 {
                                     resultArray[i].setIConst(lhs % divisor);
                                 }
                             }
--- a/gfx/angle/checkout/src/compiler/translator/OutputGLSLBase.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/OutputGLSLBase.cpp
@@ -209,16 +209,25 @@ void TOutputGLSLBase::writeLayoutQualifi
     if (IsAtomicCounter(type.getBasicType()))
     {
         out << listItemPrefix << "offset = " << layoutQualifier.offset;
     }
 
     out << ") ";
 }
 
+void TOutputGLSLBase::writeQualifier(TQualifier qualifier, const TSymbol *symbol)
+{
+    const char *result = mapQualifierToString(qualifier);
+    if (result && result[0] != '\0')
+    {
+        objSink() << result << " ";
+    }
+}
+
 const char *TOutputGLSLBase::mapQualifierToString(TQualifier qualifier)
 {
     if (sh::IsGLSL410OrOlder(mOutput) && mShaderVersion >= 300 &&
         (mCompileOptions & SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3) != 0)
     {
         switch (qualifier)
         {
             // The return string is consistent with sh::getQualifierString() from
@@ -245,36 +254,32 @@ const char *TOutputGLSLBase::mapQualifie
                 return "out";
             default:
                 break;
         }
     }
     return sh::getQualifierString(qualifier);
 }
 
-void TOutputGLSLBase::writeVariableType(const TType &type)
+void TOutputGLSLBase::writeVariableType(const TType &type, const TSymbol *symbol)
 {
     TQualifier qualifier = type.getQualifier();
     TInfoSinkBase &out   = objSink();
     if (type.isInvariant())
     {
         writeInvariantQualifier(type);
     }
     if (type.getBasicType() == EbtInterfaceBlock)
     {
         const TInterfaceBlock *interfaceBlock = type.getInterfaceBlock();
         declareInterfaceBlockLayout(interfaceBlock);
     }
     if (qualifier != EvqTemporary && qualifier != EvqGlobal)
     {
-        const char *qualifierString = mapQualifierToString(qualifier);
-        if (qualifierString && qualifierString[0] != '\0')
-        {
-            out << qualifierString << " ";
-        }
+        writeQualifier(qualifier, symbol);
     }
 
     const TMemoryQualifier &memoryQualifier = type.getMemoryQualifier();
     if (memoryQualifier.readonly)
     {
         ASSERT(IsImage(type.getBasicType()));
         out << "readonly ";
     }
@@ -304,21 +309,16 @@ void TOutputGLSLBase::writeVariableType(
     }
 
     // Declare the struct if we have not done so already.
     if (type.getBasicType() == EbtStruct && !structDeclared(type.getStruct()))
     {
         const TStructure *structure = type.getStruct();
 
         declareStruct(structure);
-
-        if (structure->symbolType() != SymbolType::Empty)
-        {
-            mDeclaredStructs.insert(structure->uniqueId().get());
-        }
     }
     else if (type.getBasicType() == EbtInterfaceBlock)
     {
         const TInterfaceBlock *interfaceBlock = type.getInterfaceBlock();
         declareInterfaceBlock(interfaceBlock);
     }
     else
     {
@@ -331,17 +331,17 @@ void TOutputGLSLBase::writeVariableType(
 void TOutputGLSLBase::writeFunctionParameters(const TFunction *func)
 {
     TInfoSinkBase &out = objSink();
     size_t paramCount  = func->getParamCount();
     for (size_t i = 0; i < paramCount; ++i)
     {
         const TVariable *param = func->getParam(i);
         const TType &type      = param->getType();
-        writeVariableType(type);
+        writeVariableType(type, param);
 
         if (param->symbolType() != SymbolType::Empty)
             out << " " << hashName(param);
         if (type.isArray())
             out << ArrayString(type);
 
         // Put a comma if this is not the last argument.
         if (i != paramCount - 1)
@@ -889,17 +889,17 @@ bool TOutputGLSLBase::visitInvariantDecl
     return false;
 }
 
 void TOutputGLSLBase::visitFunctionPrototype(TIntermFunctionPrototype *node)
 {
     TInfoSinkBase &out = objSink();
 
     const TType &type = node->getType();
-    writeVariableType(type);
+    writeVariableType(type, node->getFunction());
     if (type.isArray())
         out << ArrayString(type);
 
     out << " " << hashFunctionNameIfNeeded(node->getFunction());
 
     out << "(";
     writeFunctionParameters(node->getFunction());
     out << ")";
@@ -990,17 +990,18 @@ bool TOutputGLSLBase::visitDeclaration(V
     TInfoSinkBase &out = objSink();
 
     // Variable declaration.
     if (visit == PreVisit)
     {
         const TIntermSequence &sequence = *(node->getSequence());
         TIntermTyped *variable          = sequence.front()->getAsTyped();
         writeLayoutQualifier(variable);
-        writeVariableType(variable->getType());
+        TIntermSymbol *symbolNode = variable->getAsSymbolNode();
+        writeVariableType(variable->getType(), symbolNode ? &symbolNode->variable() : nullptr);
         if (variable->getAsSymbolNode() == nullptr ||
             variable->getAsSymbolNode()->variable().symbolType() != SymbolType::Empty)
         {
             out << " ";
         }
         mDeclaringVariable = true;
     }
     else if (visit == InVisit)
@@ -1169,16 +1170,21 @@ void TOutputGLSLBase::declareStruct(cons
         if (writeVariablePrecision(field->type()->getPrecision()))
             out << " ";
         out << getTypeName(*field->type()) << " " << hashFieldName(structure, field->name());
         if (field->type()->isArray())
             out << ArrayString(*field->type());
         out << ";\n";
     }
     out << "}";
+
+    if (structure->symbolType() != SymbolType::Empty)
+    {
+        mDeclaredStructs.insert(structure->uniqueId().get());
+    }
 }
 
 void TOutputGLSLBase::declareInterfaceBlockLayout(const TInterfaceBlock *interfaceBlock)
 {
     TInfoSinkBase &out = objSink();
 
     out << "layout(";
 
--- a/gfx/angle/checkout/src/compiler/translator/OutputGLSLBase.h
+++ b/gfx/angle/checkout/src/compiler/translator/OutputGLSLBase.h
@@ -37,17 +37,17 @@ class TOutputGLSLBase : public TIntermTr
     ImmutableString hashName(const TSymbol *symbol);
 
   protected:
     TInfoSinkBase &objSink() { return mObjSink; }
     void writeFloat(TInfoSinkBase &out, float f);
     void writeTriplet(Visit visit, const char *preStr, const char *inStr, const char *postStr);
     virtual void writeLayoutQualifier(TIntermTyped *variable);
     void writeInvariantQualifier(const TType &type);
-    void writeVariableType(const TType &type);
+    void writeVariableType(const TType &type, const TSymbol *symbol);
     virtual bool writeVariablePrecision(TPrecision precision) = 0;
     void writeFunctionParameters(const TFunction *func);
     const TConstantUnion *writeConstantUnion(const TType &type, const TConstantUnion *pConstUnion);
     void writeConstructorTriplet(Visit visit, const TType &type);
     ImmutableString getTypeName(const TType &type);
 
     void visitSymbol(TIntermSymbol *node) override;
     void visitConstantUnion(TIntermConstantUnion *node) override;
@@ -72,26 +72,27 @@ class TOutputGLSLBase : public TIntermTr
     ImmutableString hashFieldName(const TSymbol *containingStruct,
                                   const ImmutableString &fieldName);
     // Same as hashName(), but without hashing "main".
     ImmutableString hashFunctionNameIfNeeded(const TFunction *func);
     // Used to translate function names for differences between ESSL and GLSL
     virtual ImmutableString translateTextureFunction(const ImmutableString &name) { return name; }
 
     void declareStruct(const TStructure *structure);
+    virtual void writeQualifier(TQualifier qualifier, const TSymbol *symbol);
+    bool structDeclared(const TStructure *structure) const;
 
   private:
-    bool structDeclared(const TStructure *structure) const;
 
     void declareInterfaceBlockLayout(const TInterfaceBlock *interfaceBlock);
     void declareInterfaceBlock(const TInterfaceBlock *interfaceBlock);
 
     void writeBuiltInFunctionTriplet(Visit visit, TOperator op, bool useEmulatedFunction);
 
-    const char *mapQualifierToString(TQualifier qialifier);
+    const char *mapQualifierToString(TQualifier qualifier);
 
     TInfoSinkBase &mObjSink;
     bool mDeclaringVariable;
 
     // This set contains all the ids of the structs from every scope.
     std::set<int> mDeclaredStructs;
 
     ShArrayIndexClampingStrategy mClampingStrategy;
--- a/gfx/angle/checkout/src/compiler/translator/OutputHLSL.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/OutputHLSL.cpp
@@ -621,24 +621,16 @@ void OutputHLSL::header(TInfoSinkBase &o
 
         if (mUsesDepthRange)
         {
             out << "static gl_DepthRangeParameters gl_DepthRange = {dx_DepthRange.x, "
                    "dx_DepthRange.y, dx_DepthRange.z};\n"
                    "\n";
         }
 
-        if (!mappedStructs.empty())
-        {
-            out << "// Structures from std140 blocks with padding removed\n";
-            out << "\n";
-            out << mappedStructs;
-            out << "\n";
-        }
-
         if (usingMRTExtension && mNumRenderTargets > 1)
         {
             out << "#define GL_USES_MRT\n";
         }
 
         if (mUsesFragColor)
         {
             out << "#define GL_USES_FRAG_COLOR\n";
@@ -733,24 +725,16 @@ void OutputHLSL::header(TInfoSinkBase &o
         }
 
         if (mUsesDepthRange)
         {
             out << "static gl_DepthRangeParameters gl_DepthRange = {dx_DepthRange.x, "
                    "dx_DepthRange.y, dx_DepthRange.z};\n"
                    "\n";
         }
-
-        if (!mappedStructs.empty())
-        {
-            out << "// Structures from std140 blocks with padding removed\n";
-            out << "\n";
-            out << mappedStructs;
-            out << "\n";
-        }
     }
     else  // Compute shader
     {
         ASSERT(mShaderType == GL_COMPUTE_SHADER);
 
         out << "cbuffer DriverConstants : register(b1)\n"
                "{\n";
         if (mUsesNumWorkGroups)
@@ -780,16 +764,24 @@ void OutputHLSL::header(TInfoSinkBase &o
         }
 
         if (mUsesLocalInvocationIndex)
         {
             out << "static uint gl_LocalInvocationIndex = uint(0);\n";
         }
     }
 
+    if (!mappedStructs.empty())
+    {
+        out << "// Structures from std140 blocks with padding removed\n";
+        out << "\n";
+        out << mappedStructs;
+        out << "\n";
+    }
+
     bool getDimensionsIgnoresBaseLevel =
         (mCompileOptions & SH_HLSL_GET_DIMENSIONS_IGNORES_BASE_LEVEL) != 0;
     mTextureFunctionHLSL->textureFunctionHeader(out, mOutputType, getDimensionsIgnoresBaseLevel);
     mImageFunctionHLSL->imageFunctionHeader(out);
 
     if (mUsesFragCoord)
     {
         out << "#define GL_USES_FRAG_COORD\n";
--- a/gfx/angle/checkout/src/compiler/translator/ParseContext.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/ParseContext.cpp
@@ -189,17 +189,17 @@ TParseContext::TParseContext(TSymbolTabl
       mDefaultBufferMatrixPacking(EmpColumnMajor),
       mDefaultBufferBlockStorage(sh::IsWebGLBasedSpec(spec) ? EbsStd140 : EbsShared),
       mDiagnostics(diagnostics),
       mDirectiveHandler(ext,
                         *mDiagnostics,
                         mShaderVersion,
                         mShaderType,
                         resources.WEBGL_debug_shader_precision == 1),
-      mPreprocessor(mDiagnostics, &mDirectiveHandler, pp::PreprocessorSettings()),
+      mPreprocessor(mDiagnostics, &mDirectiveHandler, angle::pp::PreprocessorSettings()),
       mScanner(nullptr),
       mMinProgramTexelOffset(resources.MinProgramTexelOffset),
       mMaxProgramTexelOffset(resources.MaxProgramTexelOffset),
       mMinProgramTextureGatherOffset(resources.MinProgramTextureGatherOffset),
       mMaxProgramTextureGatherOffset(resources.MaxProgramTextureGatherOffset),
       mComputeShaderLocalSizeDeclared(false),
       mComputeShaderLocalSize(-1),
       mNumViews(-1),
@@ -1750,28 +1750,28 @@ bool TParseContext::isExtensionEnabled(T
 {
     return IsExtensionEnabled(extensionBehavior(), extension);
 }
 
 void TParseContext::handleExtensionDirective(const TSourceLoc &loc,
                                              const char *extName,
                                              const char *behavior)
 {
-    pp::SourceLocation srcLoc;
+    angle::pp::SourceLocation srcLoc;
     srcLoc.file = loc.first_file;
     srcLoc.line = loc.first_line;
     mDirectiveHandler.handleExtension(srcLoc, extName, behavior);
 }
 
 void TParseContext::handlePragmaDirective(const TSourceLoc &loc,
                                           const char *name,
                                           const char *value,
                                           bool stdgl)
 {
-    pp::SourceLocation srcLoc;
+    angle::pp::SourceLocation srcLoc;
     srcLoc.file = loc.first_file;
     srcLoc.line = loc.first_line;
     mDirectiveHandler.handlePragma(srcLoc, name, value, stdgl);
 }
 
 sh::WorkGroupSize TParseContext::getComputeShaderLocalSize() const
 {
     sh::WorkGroupSize result(-1);
@@ -2627,17 +2627,17 @@ TIntermInvariantDeclaration *TParseConte
         return nullptr;
     }
     const TType &type = variable->getType();
 
     checkInvariantVariableQualifier(typeQualifier.invariant, type.getQualifier(),
                                     typeQualifier.line);
     checkMemoryQualifierIsNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line);
 
-    symbolTable.addInvariantVarying(identifier);
+    symbolTable.addInvariantVarying(*variable);
 
     TIntermSymbol *intermSymbol = new TIntermSymbol(variable);
     intermSymbol->setLine(identifierLoc);
 
     return new TIntermInvariantDeclaration(intermSymbol, identifierLoc);
 }
 
 void TParseContext::parseDeclarator(TPublicType &publicType,
--- a/gfx/angle/checkout/src/compiler/translator/ParseContext.h
+++ b/gfx/angle/checkout/src/compiler/translator/ParseContext.h
@@ -38,18 +38,18 @@ class TParseContext : angle::NonCopyable
                   sh::GLenum type,
                   ShShaderSpec spec,
                   ShCompileOptions options,
                   bool checksPrecErrors,
                   TDiagnostics *diagnostics,
                   const ShBuiltInResources &resources);
     ~TParseContext();
 
-    const pp::Preprocessor &getPreprocessor() const { return mPreprocessor; }
-    pp::Preprocessor &getPreprocessor() { return mPreprocessor; }
+    const angle::pp::Preprocessor &getPreprocessor() const { return mPreprocessor; }
+    angle::pp::Preprocessor &getPreprocessor() { return mPreprocessor; }
     void *getScanner() const { return mScanner; }
     void setScanner(void *scanner) { mScanner = scanner; }
     int getShaderVersion() const { return mShaderVersion; }
     sh::GLenum getShaderType() const { return mShaderType; }
     ShShaderSpec getShaderSpec() const { return mShaderSpec; }
     int numErrors() const { return mDiagnostics->numErrors(); }
     void error(const TSourceLoc &loc, const char *reason, const char *token);
     void error(const TSourceLoc &loc, const char *reason, const ImmutableString &token);
@@ -602,17 +602,17 @@ class TParseContext : angle::NonCopyable
                                          // ESSL1.
     TLayoutMatrixPacking mDefaultUniformMatrixPacking;
     TLayoutBlockStorage mDefaultUniformBlockStorage;
     TLayoutMatrixPacking mDefaultBufferMatrixPacking;
     TLayoutBlockStorage mDefaultBufferBlockStorage;
     TString mHashErrMsg;
     TDiagnostics *mDiagnostics;
     TDirectiveHandler mDirectiveHandler;
-    pp::Preprocessor mPreprocessor;
+    angle::pp::Preprocessor mPreprocessor;
     void *mScanner;
     int mMinProgramTexelOffset;
     int mMaxProgramTexelOffset;
 
     int mMinProgramTextureGatherOffset;
     int mMaxProgramTextureGatherOffset;
 
     // keep track of local group size declared in layout. It should be declared only once.
--- a/gfx/angle/checkout/src/compiler/translator/Symbol.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/Symbol.cpp
@@ -28,21 +28,23 @@ constexpr const ImmutableString kImageSi
 
 static const char kFunctionMangledNameSeparator = '(';
 
 }  // anonymous namespace
 
 TSymbol::TSymbol(TSymbolTable *symbolTable,
                  const ImmutableString &name,
                  SymbolType symbolType,
+                 SymbolClass symbolClass,
                  TExtension extension)
     : mName(name),
       mUniqueId(symbolTable->nextUniqueId()),
       mSymbolType(symbolType),
-      mExtension(extension)
+      mExtension(extension),
+      mSymbolClass(symbolClass)
 {
     ASSERT(mSymbolType == SymbolType::BuiltIn || mExtension == TExtension::UNDEFINED);
     ASSERT(mName != "" || mSymbolType == SymbolType::AngleInternal ||
            mSymbolType == SymbolType::Empty);
 }
 
 ImmutableString TSymbol::name() const
 {
@@ -57,43 +59,52 @@ ImmutableString TSymbol::name() const
     ImmutableStringBuilder symbolNameOut(sizeof(uniqueId) * 2u + 1u);
     symbolNameOut << 's';
     symbolNameOut.appendHex(mUniqueId.get());
     return symbolNameOut;
 }
 
 ImmutableString TSymbol::getMangledName() const
 {
+    if (mSymbolClass == SymbolClass::Function)
+    {
+        // We do this instead of using proper virtual functions so that we can better support
+        // constexpr symbols.
+        return static_cast<const TFunction *>(this)->getFunctionMangledName();
+    }
     ASSERT(mSymbolType != SymbolType::Empty);
     return name();
 }
 
 TVariable::TVariable(TSymbolTable *symbolTable,
                      const ImmutableString &name,
                      const TType *type,
                      SymbolType symbolType,
                      TExtension extension)
-    : TSymbol(symbolTable, name, symbolType, extension), mType(type), unionArray(nullptr)
+    : TSymbol(symbolTable, name, symbolType, SymbolClass::Variable, extension),
+      mType(type),
+      unionArray(nullptr)
 {
     ASSERT(mType);
 }
 
 TStructure::TStructure(TSymbolTable *symbolTable,
                        const ImmutableString &name,
                        const TFieldList *fields,
                        SymbolType symbolType)
-    : TSymbol(symbolTable, name, symbolType), TFieldListCollection(fields)
+    : TSymbol(symbolTable, name, symbolType, SymbolClass::Struct), TFieldListCollection(fields)
 {
 }
 
 TStructure::TStructure(const TSymbolUniqueId &id,
                        const ImmutableString &name,
                        TExtension extension,
                        const TFieldList *fields)
-    : TSymbol(id, name, SymbolType::BuiltIn, extension), TFieldListCollection(fields)
+    : TSymbol(id, name, SymbolType::BuiltIn, extension, SymbolClass::Struct),
+      TFieldListCollection(fields)
 {
 }
 
 void TStructure::createSamplerSymbols(const char *namePrefix,
                                       const TString &apiNamePrefix,
                                       TVector<const TVariable *> *outputSymbols,
                                       TMap<const TVariable *, TString> *outputSymbolsToAPINames,
                                       TSymbolTable *symbolTable) const
@@ -121,41 +132,41 @@ void TStructure::setName(const Immutable
 }
 
 TInterfaceBlock::TInterfaceBlock(TSymbolTable *symbolTable,
                                  const ImmutableString &name,
                                  const TFieldList *fields,
                                  const TLayoutQualifier &layoutQualifier,
                                  SymbolType symbolType,
                                  TExtension extension)
-    : TSymbol(symbolTable, name, symbolType, extension),
+    : TSymbol(symbolTable, name, symbolType, SymbolClass::InterfaceBlock, extension),
       TFieldListCollection(fields),
       mBlockStorage(layoutQualifier.blockStorage),
       mBinding(layoutQualifier.binding)
 {
     ASSERT(name != nullptr);
 }
 
 TInterfaceBlock::TInterfaceBlock(const TSymbolUniqueId &id,
                                  const ImmutableString &name,
                                  TExtension extension,
                                  const TFieldList *fields)
-    : TSymbol(id, name, SymbolType::BuiltIn, extension),
+    : TSymbol(id, name, SymbolType::BuiltIn, extension, SymbolClass::InterfaceBlock),
       TFieldListCollection(fields),
       mBlockStorage(EbsUnspecified),
       mBinding(0)
 {
 }
 
 TFunction::TFunction(TSymbolTable *symbolTable,
                      const ImmutableString &name,
                      SymbolType symbolType,
                      const TType *retType,
                      bool knownToNotHaveSideEffects)
-    : TSymbol(symbolTable, name, symbolType, TExtension::UNDEFINED),
+    : TSymbol(symbolTable, name, symbolType, SymbolClass::Function, TExtension::UNDEFINED),
       mParametersVector(new TParamVector()),
       mParameters(nullptr),
       mParamCount(0u),
       returnType(retType),
       mMangledName(""),
       mOp(EOpNull),
       defined(false),
       mHasPrototypeDeclaration(false),
--- a/gfx/angle/checkout/src/compiler/translator/Symbol.h
+++ b/gfx/angle/checkout/src/compiler/translator/Symbol.h
@@ -23,86 +23,105 @@ class TSymbolTable;
 enum class SymbolType
 {
     BuiltIn,
     UserDefined,
     AngleInternal,
     Empty  // Meaning symbol without a name.
 };
 
+enum class SymbolClass
+{
+    Function,
+    Variable,
+    Struct,
+    InterfaceBlock
+};
+
 // Symbol base class. (Can build functions or variables out of these...)
 class TSymbol : angle::NonCopyable
 {
   public:
     POOL_ALLOCATOR_NEW_DELETE();
     TSymbol(TSymbolTable *symbolTable,
             const ImmutableString &name,
             SymbolType symbolType,
+            SymbolClass symbolClass,
             TExtension extension = TExtension::UNDEFINED);
 
-    // Note that we don't have a virtual destructor in order to support constexpr symbols. Data is
+    // Note that we can't have a virtual destructor in order to support constexpr symbols. Data is
     // either statically allocated or pool allocated.
     ~TSymbol() = default;
 
     // Calling name() for empty symbols (symbolType == SymbolType::Empty) generates a similar name
     // as for internal variables.
     ImmutableString name() const;
     // Don't call getMangledName() for empty symbols (symbolType == SymbolType::Empty).
-    virtual ImmutableString getMangledName() const;
+    ImmutableString getMangledName() const;
 
-    virtual bool isFunction() const { return false; }
-    virtual bool isVariable() const { return false; }
-    virtual bool isStruct() const { return false; }
+    bool isFunction() const { return mSymbolClass == SymbolClass::Function; }
+    bool isVariable() const { return mSymbolClass == SymbolClass::Variable; }
+    bool isStruct() const { return mSymbolClass == SymbolClass::Struct; }
 
     const TSymbolUniqueId &uniqueId() const { return mUniqueId; }
     SymbolType symbolType() const { return mSymbolType; }
     TExtension extension() const { return mExtension; }
 
   protected:
     constexpr TSymbol(const TSymbolUniqueId &id,
                       const ImmutableString &name,
                       SymbolType symbolType,
-                      TExtension extension)
-        : mName(name), mUniqueId(id), mSymbolType(symbolType), mExtension(extension)
+                      TExtension extension,
+                      SymbolClass symbolClass)
+        : mName(name),
+          mUniqueId(id),
+          mSymbolType(symbolType),
+          mExtension(extension),
+          mSymbolClass(symbolClass)
     {
     }
 
     const ImmutableString mName;
 
   private:
     const TSymbolUniqueId mUniqueId;
     const SymbolType mSymbolType;
     const TExtension mExtension;
+
+    // We use this instead of having virtual functions for querying the class in order to support
+    // constexpr symbols.
+    const SymbolClass mSymbolClass;
 };
 
 // Variable.
 // May store the value of a constant variable of any type (float, int, bool or struct).
 class TVariable : public TSymbol
 {
   public:
     TVariable(TSymbolTable *symbolTable,
               const ImmutableString &name,
               const TType *type,
               SymbolType symbolType,
               TExtension ext = TExtension::UNDEFINED);
 
-    bool isVariable() const override { return true; }
     const TType &getType() const { return *mType; }
 
     const TConstantUnion *getConstPointer() const { return unionArray; }
 
     void shareConstPointer(const TConstantUnion *constArray) { unionArray = constArray; }
 
     // Note: only to be used for built-in variables with autogenerated ids!
     constexpr TVariable(const TSymbolUniqueId &id,
                         const ImmutableString &name,
                         SymbolType symbolType,
                         TExtension extension,
                         const TType *type)
-        : TSymbol(id, name, symbolType, extension), mType(type), unionArray(nullptr)
+        : TSymbol(id, name, symbolType, extension, SymbolClass::Variable),
+          mType(type),
+          unionArray(nullptr)
     {
     }
 
   private:
     const TType *mType;
     const TConstantUnion *unionArray;
 };
 
@@ -110,18 +129,16 @@ class TVariable : public TSymbol
 class TStructure : public TSymbol, public TFieldListCollection
 {
   public:
     TStructure(TSymbolTable *symbolTable,
                const ImmutableString &name,
                const TFieldList *fields,
                SymbolType symbolType);
 
-    bool isStruct() const override { return true; }
-
     // The char arrays passed in must be pool allocated or static.
     void createSamplerSymbols(const char *namePrefix,
                               const TString &apiNamePrefix,
                               TVector<const TVariable *> *outputSymbols,
                               TMap<const TVariable *, TString> *outputSymbolsToAPINames,
                               TSymbolTable *symbolTable) const;
 
     void setAtGlobalScope(bool atGlobalScope) { mAtGlobalScope = atGlobalScope; }
@@ -199,22 +216,20 @@ class TFunction : public TSymbol
   public:
     // User-defined function
     TFunction(TSymbolTable *symbolTable,
               const ImmutableString &name,
               SymbolType symbolType,
               const TType *retType,
               bool knownToNotHaveSideEffects);
 
-    bool isFunction() const override { return true; }
-
     void addParameter(const TVariable *p);
     void shareParameters(const TFunction &parametersSource);
 
-    ImmutableString getMangledName() const override
+    ImmutableString getFunctionMangledName() const
     {
         ASSERT(symbolType() != SymbolType::BuiltIn);
         if (mMangledName.empty())
         {
             mMangledName = buildMangledName();
         }
         return mMangledName;
     }
@@ -240,17 +255,17 @@ class TFunction : public TSymbol
     constexpr TFunction(const TSymbolUniqueId &id,
                         const ImmutableString &name,
                         TExtension extension,
                         const TVariable *const *parameters,
                         size_t paramCount,
                         const TType *retType,
                         TOperator op,
                         bool knownToNotHaveSideEffects)
-        : TSymbol(id, name, SymbolType::BuiltIn, extension),
+        : TSymbol(id, name, SymbolType::BuiltIn, extension, SymbolClass::Function),
           mParametersVector(nullptr),
           mParameters(parameters),
           mParamCount(paramCount),
           returnType(retType),
           mMangledName(nullptr),
           mOp(op),
           defined(false),
           mHasPrototypeDeclaration(false),
--- a/gfx/angle/checkout/src/compiler/translator/SymbolTable.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/SymbolTable.cpp
@@ -8,59 +8,44 @@
 //
 
 #if defined(_MSC_VER)
 #pragma warning(disable : 4718)
 #endif
 
 #include "compiler/translator/SymbolTable.h"
 
-#include <algorithm>
-#include <set>
-
 #include "angle_gl.h"
 #include "compiler/translator/ImmutableString.h"
 #include "compiler/translator/IntermNode.h"
 #include "compiler/translator/StaticType.h"
 
 namespace sh
 {
 
 class TSymbolTable::TSymbolTableLevel
 {
   public:
-    TSymbolTableLevel() : mGlobalInvariant(false) {}
+    TSymbolTableLevel() {}
 
     bool insert(TSymbol *symbol);
 
     // Insert a function using its unmangled name as the key.
     void insertUnmangled(TFunction *function);
 
     TSymbol *find(const ImmutableString &name) const;
 
-    void addInvariantVarying(const ImmutableString &name) { mInvariantVaryings.insert(name); }
-
-    bool isVaryingInvariant(const ImmutableString &name)
-    {
-        return (mGlobalInvariant || mInvariantVaryings.count(name) > 0);
-    }
-
-    void setGlobalInvariant(bool invariant) { mGlobalInvariant = invariant; }
-
   private:
     using tLevel        = TUnorderedMap<ImmutableString,
                                  TSymbol *,
                                  ImmutableString::FowlerNollVoHash<sizeof(size_t)>>;
     using tLevelPair    = const tLevel::value_type;
     using tInsertResult = std::pair<tLevel::iterator, bool>;
 
     tLevel level;
-
-    std::set<ImmutableString> mInvariantVaryings;
-    bool mGlobalInvariant;
 };
 
 bool TSymbolTable::TSymbolTableLevel::insert(TSymbol *symbol)
 {
     // returning true means symbol was added to the table
     tInsertResult result = level.insert(tLevelPair(symbol->getMangledName(), symbol));
     return result.second;
 }
@@ -75,17 +60,20 @@ TSymbol *TSymbolTable::TSymbolTableLevel
     tLevel::const_iterator it = level.find(name);
     if (it == level.end())
         return nullptr;
     else
         return (*it).second;
 }
 
 TSymbolTable::TSymbolTable()
-    : mUniqueIdCounter(0), mShaderType(GL_FRAGMENT_SHADER), mGlInVariableWithArraySize(nullptr)
+    : mGlobalInvariant(false),
+      mUniqueIdCounter(0),
+      mShaderType(GL_FRAGMENT_SHADER),
+      mGlInVariableWithArraySize(nullptr)
 {
 }
 
 TSymbolTable::~TSymbolTable() = default;
 
 bool TSymbolTable::isEmpty() const
 {
     return mTable.empty();
@@ -163,44 +151,69 @@ const TVariable *TSymbolTable::gl_FragDa
     return mVar_gl_FragData;
 }
 
 const TVariable *TSymbolTable::gl_SecondaryFragDataEXT() const
 {
     return mVar_gl_SecondaryFragDataEXT;
 }
 
-void TSymbolTable::markStaticWrite(const TVariable &variable)
-{
-    int id    = variable.uniqueId().get();
+TSymbolTable::VariableMetadata *TSymbolTable::getOrCreateVariableMetadata(const TVariable &variable) {
+    int id = variable.uniqueId().get();
     auto iter = mVariableMetadata.find(id);
     if (iter == mVariableMetadata.end())
     {
         iter = mVariableMetadata.insert(std::make_pair(id, VariableMetadata())).first;
     }
-    iter->second.staticWrite = true;
+    return &iter->second;
+}
+
+void TSymbolTable::markStaticWrite(const TVariable &variable)
+{
+    auto metadata = getOrCreateVariableMetadata(variable);
+    metadata->staticWrite = true;
 }
 
 void TSymbolTable::markStaticRead(const TVariable &variable)
 {
-    int id    = variable.uniqueId().get();
-    auto iter = mVariableMetadata.find(id);
-    if (iter == mVariableMetadata.end())
-    {
-        iter = mVariableMetadata.insert(std::make_pair(id, VariableMetadata())).first;
-    }
-    iter->second.staticRead = true;
+    auto metadata = getOrCreateVariableMetadata(variable);
+    metadata->staticRead = true;
 }
 
 bool TSymbolTable::isStaticallyUsed(const TVariable &variable) const
 {
     ASSERT(!variable.getConstPointer());
     int id    = variable.uniqueId().get();
     auto iter = mVariableMetadata.find(id);
-    return iter != mVariableMetadata.end();
+    return iter != mVariableMetadata.end() && (iter->second.staticRead || iter->second.staticWrite);
+}
+
+void TSymbolTable::addInvariantVarying(const TVariable &variable)
+{
+    ASSERT(atGlobalLevel());
+    auto metadata = getOrCreateVariableMetadata(variable);
+    metadata->invariant = true;
+}
+
+bool TSymbolTable::isVaryingInvariant(const TVariable &variable) const
+{
+    ASSERT(atGlobalLevel());
+    if (mGlobalInvariant)
+    {
+        return true;
+    }
+    int id = variable.uniqueId().get();
+    auto iter = mVariableMetadata.find(id);
+    return iter != mVariableMetadata.end() && iter->second.invariant;
+}
+
+void TSymbolTable::setGlobalInvariant(bool invariant)
+{
+    ASSERT(atGlobalLevel());
+    mGlobalInvariant = invariant;
 }
 
 const TSymbol *TSymbolTable::find(const ImmutableString &name, int shaderVersion) const
 {
     int userDefinedLevel = static_cast<int>(mTable.size()) - 1;
     while (userDefinedLevel >= 0)
     {
         const TSymbol *symbol = mTable[userDefinedLevel]->find(name);
@@ -273,36 +286,19 @@ TPrecision TSymbolTable::getDefaultPreci
             prec = (*it).second;
             break;
         }
         level--;
     }
     return prec;
 }
 
-void TSymbolTable::addInvariantVarying(const ImmutableString &originalName)
-{
-    ASSERT(atGlobalLevel());
-    mTable.back()->addInvariantVarying(originalName);
-}
-
-bool TSymbolTable::isVaryingInvariant(const ImmutableString &originalName) const
-{
-    ASSERT(atGlobalLevel());
-    return mTable.back()->isVaryingInvariant(originalName);
-}
-
-void TSymbolTable::setGlobalInvariant(bool invariant)
-{
-    ASSERT(atGlobalLevel());
-    mTable.back()->setGlobalInvariant(invariant);
-}
-
 void TSymbolTable::clearCompilationResults()
 {
+    mGlobalInvariant = false;
     mUniqueIdCounter = kLastBuiltInId + 1;
     mVariableMetadata.clear();
     mGlInVariableWithArraySize = nullptr;
 
     // User-defined scopes should have already been cleared when the compilation finished.
     ASSERT(mTable.size() == 0u);
 }
 
@@ -355,13 +351,13 @@ void TSymbolTable::initializeBuiltIns(sh
 }
 
 void TSymbolTable::initSamplerDefaultPrecision(TBasicType samplerType)
 {
     ASSERT(samplerType >= EbtGuardSamplerBegin && samplerType <= EbtGuardSamplerEnd);
     setDefaultPrecision(samplerType, EbpLow);
 }
 
-TSymbolTable::VariableMetadata::VariableMetadata() : staticRead(false), staticWrite(false)
+TSymbolTable::VariableMetadata::VariableMetadata() : staticRead(false), staticWrite(false), invariant(false)
 {
 }
 
 }  // namespace sh
--- a/gfx/angle/checkout/src/compiler/translator/SymbolTable.h
+++ b/gfx/angle/checkout/src/compiler/translator/SymbolTable.h
@@ -26,16 +26,17 @@
 //   in the symbol table.  The parser can substitute constants at parse
 //   time, including doing constant folding and constant propagation.
 //
 // * No temporaries:  Temporaries made from operations (+, --, .xy, etc.)
 //   are tracked in the intermediate representation, not the symbol table.
 //
 
 #include <memory>
+#include <set>
 
 #include "common/angleutils.h"
 #include "compiler/translator/ExtensionBehavior.h"
 #include "compiler/translator/ImmutableString.h"
 #include "compiler/translator/InfoSink.h"
 #include "compiler/translator/IntermNode.h"
 #include "compiler/translator/Symbol.h"
 #include "compiler/translator/SymbolTable_autogen.h"
@@ -112,74 +113,76 @@ class TSymbolTable : angle::NonCopyable,
     const TSymbol *findBuiltIn(const ImmutableString &name, int shaderVersion) const;
 
     void setDefaultPrecision(TBasicType type, TPrecision prec);
 
     // Searches down the precisionStack for a precision qualifier
     // for the specified TBasicType
     TPrecision getDefaultPrecision(TBasicType type) const;
 
-    // This records invariant varyings declared through
-    // "invariant varying_name;".
-    void addInvariantVarying(const ImmutableString &originalName);
+    // This records invariant varyings declared through "invariant varying_name;".
+    void addInvariantVarying(const TVariable &variable);
 
-    // If this returns false, the varying could still be invariant
-    // if it is set as invariant during the varying variable
-    // declaration - this piece of information is stored in the
-    // variable's type, not here.
-    bool isVaryingInvariant(const ImmutableString &originalName) const;
+    // If this returns false, the varying could still be invariant if it is set as invariant during the varying variable declaration - this piece of information is stored in the variable's type, not here.
+    bool isVaryingInvariant(const TVariable &variable) const;
 
     void setGlobalInvariant(bool invariant);
 
     const TSymbolUniqueId nextUniqueId() { return TSymbolUniqueId(this); }
 
     // Gets the built-in accessible by a shader with the specified version, if any.
     const UnmangledBuiltIn *getUnmangledBuiltInForShaderVersion(const ImmutableString &name,
                                                                 int shaderVersion);
 
     void initializeBuiltIns(sh::GLenum type,
                             ShShaderSpec spec,
                             const ShBuiltInResources &resources);
     void clearCompilationResults();
 
   private:
     friend class TSymbolUniqueId;
+
+    struct VariableMetadata
+    {
+        VariableMetadata();
+        bool staticRead;
+        bool staticWrite;
+        bool invariant;
+    };
+
     int nextUniqueIdValue();
 
     class TSymbolTableLevel;
 
     TFunction *findUserDefinedFunction(const ImmutableString &name) const;
 
     void initSamplerDefaultPrecision(TBasicType samplerType);
 
     void initializeBuiltInVariables(sh::GLenum shaderType,
                                     ShShaderSpec spec,
                                     const ShBuiltInResources &resources);
 
+    VariableMetadata *getOrCreateVariableMetadata(const TVariable &variable);
+
     std::vector<std::unique_ptr<TSymbolTableLevel>> mTable;
 
     // There's one precision stack level for predefined precisions and then one level for each scope
     // in table.
     typedef TMap<TBasicType, TPrecision> PrecisionStackLevel;
     std::vector<std::unique_ptr<PrecisionStackLevel>> mPrecisionStack;
 
+    bool mGlobalInvariant;
+
     int mUniqueIdCounter;
 
     static const int kLastBuiltInId;
 
     sh::GLenum mShaderType;
     ShBuiltInResources mResources;
 
-    struct VariableMetadata
-    {
-        VariableMetadata();
-        bool staticRead;
-        bool staticWrite;
-    };
-
     // Indexed by unique id. Map instead of vector since the variables are fairly sparse.
     std::map<int, VariableMetadata> mVariableMetadata;
 
     // Store gl_in variable with its array size once the array size can be determined. The array
     // size can also be checked against latter input primitive type declaration.
     TVariable *mGlInVariableWithArraySize;
 };
 
--- a/gfx/angle/checkout/src/compiler/translator/glslang.l
+++ b/gfx/angle/checkout/src/compiler/translator/glslang.l
@@ -61,16 +61,17 @@ using namespace sh;
 
 // Workaround for flex using the register keyword, deprecated in C++11.
 #ifdef __cplusplus
 #if __cplusplus > 199711L
 #define register
 #endif
 #endif
 
+#define YY_NO_INPUT
 #define YY_USER_ACTION                                 \
     yylloc->first_file = yylloc->last_file = yycolumn; \
     yylloc->first_line = yylloc->last_line = yylineno;
 
 #define YY_INPUT(buf, result, max_size) \
     result = string_input(buf, max_size, yyscanner);
 
 static yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner);
@@ -420,19 +421,19 @@ 0{O}+[uU]         { return uint_constant
 
 [ \t\v\n\f\r] { }
 <*><<EOF>>    { yyterminate(); }
 <*>.          { assert(false); return 0; }
 
 %%
 
 yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) {
-    pp::Token token;
+    angle::pp::Token token;
     yyget_extra(yyscanner)->getPreprocessor().lex(&token);
-    yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size();
+    yy_size_t len = token.type == angle::pp::Token::LAST ? 0 : token.text.size();
     if (len < max_size)
         memcpy(buf, token.text.c_str(), len);
     yyset_column(token.location.file, yyscanner);
     yyset_lineno(token.location.line, yyscanner);
 
     if (len >= max_size)
         YY_FATAL_ERROR("Input buffer overflow");
     else if (len > 0)
@@ -674,17 +675,17 @@ int glslang_finalize(TParseContext* cont
 
 int glslang_scan(size_t count, const char* const string[], const int length[],
                  TParseContext* context) {
     yyrestart(NULL, context->getScanner());
     yyset_column(0, context->getScanner());
     yyset_lineno(1, context->getScanner());
 
     // Initialize preprocessor.
-    pp::Preprocessor *preprocessor = &context->getPreprocessor();
+    angle::pp::Preprocessor *preprocessor = &context->getPreprocessor();
 
     if (!preprocessor->init(count, string, length))
         return 1;
 
     // Define extension macros.
     const TExtensionBehavior& extBehavior = context->extensionBehavior();
     for (TExtensionBehavior::const_iterator iter = extBehavior.begin();
          iter != extBehavior.end(); ++iter) {
--- a/gfx/angle/checkout/src/compiler/translator/glslang_lex.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/glslang_lex.cpp
@@ -1200,16 +1200,17 @@ using namespace sh;
 
 // Workaround for flex using the register keyword, deprecated in C++11.
 #ifdef __cplusplus
 #if __cplusplus > 199711L
 #define register
 #endif
 #endif
 
+#define YY_NO_INPUT
 #define YY_USER_ACTION                                 \
     yylloc->first_file = yylloc->last_file = yycolumn; \
     yylloc->first_line = yylloc->last_line = yylineno;
 
 #define YY_INPUT(buf, result, max_size) \
     result = string_input(buf, max_size, yyscanner);
 
 static yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner);
@@ -3776,19 +3777,19 @@ void yyfree (void * ptr , yyscan_t yysca
 
 
 
 
 
 
 
 yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) {
-    pp::Token token;
+    angle::pp::Token token;
     yyget_extra(yyscanner)->getPreprocessor().lex(&token);
-    yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size();
+    yy_size_t len = token.type == angle::pp::Token::LAST ? 0 : token.text.size();
     if (len < max_size)
         memcpy(buf, token.text.c_str(), len);
     yyset_column(token.location.file, yyscanner);
     yyset_lineno(token.location.line, yyscanner);
 
     if (len >= max_size)
         YY_FATAL_ERROR("Input buffer overflow");
     else if (len > 0)
@@ -4030,17 +4031,17 @@ int glslang_finalize(TParseContext* cont
 
 int glslang_scan(size_t count, const char* const string[], const int length[],
                  TParseContext* context) {
     yyrestart(NULL, context->getScanner());
     yyset_column(0, context->getScanner());
     yyset_lineno(1, context->getScanner());
 
     // Initialize preprocessor.
-    pp::Preprocessor *preprocessor = &context->getPreprocessor();
+    angle::pp::Preprocessor *preprocessor = &context->getPreprocessor();
 
     if (!preprocessor->init(count, string, length))
         return 1;
 
     // Define extension macros.
     const TExtensionBehavior& extBehavior = context->extensionBehavior();
     for (TExtensionBehavior::const_iterator iter = extBehavior.begin();
          iter != extBehavior.end(); ++iter) {
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteRepeatedAssignToSwizzled.cpp
@@ -0,0 +1,93 @@
+//
+// Copyright (c) 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.
+//
+// RewriteRepeatedAssignToSwizzled.cpp: Rewrite expressions that assign an assignment to a swizzled
+// vector, like:
+//     v.x = z = expression;
+// to:
+//     z = expression;
+//     v.x = z;
+//
+// Note that this doesn't handle some corner cases: expressions nested inside other expressions,
+// inside loop headers, or inside if conditions.
+
+#include "compiler/translator/tree_ops/RewriteRepeatedAssignToSwizzled.h"
+
+#include "compiler/translator/tree_util/IntermNode_util.h"
+#include "compiler/translator/tree_util/IntermTraverse.h"
+
+namespace sh
+{
+
+namespace
+{
+
+class RewriteAssignToSwizzledTraverser : public TIntermTraverser
+{
+  public:
+    static void rewrite(TIntermBlock *root);
+
+  private:
+    RewriteAssignToSwizzledTraverser();
+
+    bool visitBinary(Visit, TIntermBinary *node) override;
+
+    void nextIteration();
+
+    bool didRewrite() { return mDidRewrite; }
+
+    bool mDidRewrite;
+};
+
+// static
+void RewriteAssignToSwizzledTraverser::rewrite(TIntermBlock *root)
+{
+    RewriteAssignToSwizzledTraverser rewrite;
+    do
+    {
+        rewrite.nextIteration();
+        root->traverse(&rewrite);
+        rewrite.updateTree();
+    } while (rewrite.didRewrite());
+}
+
+RewriteAssignToSwizzledTraverser::RewriteAssignToSwizzledTraverser()
+    : TIntermTraverser(true, false, false), mDidRewrite(false)
+{
+}
+
+void RewriteAssignToSwizzledTraverser::nextIteration()
+{
+    mDidRewrite = false;
+}
+
+bool RewriteAssignToSwizzledTraverser::visitBinary(Visit, TIntermBinary *node)
+{
+    TIntermBinary *rightBinary = node->getRight()->getAsBinaryNode();
+    TIntermBlock *parentBlock  = getParentNode()->getAsBlock();
+    if (parentBlock && node->isAssignment() && node->getLeft()->getAsSwizzleNode() && rightBinary &&
+        rightBinary->isAssignment())
+    {
+        TIntermSequence replacements;
+        replacements.push_back(rightBinary);
+        TIntermTyped *rightAssignmentTargetCopy = rightBinary->getLeft()->deepCopy();
+        TIntermBinary *lastAssign =
+            new TIntermBinary(EOpAssign, node->getLeft(), rightAssignmentTargetCopy);
+        replacements.push_back(lastAssign);
+        mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
+        mDidRewrite = true;
+        return false;
+    }
+    return true;
+}
+
+}  // anonymous namespace
+
+void RewriteRepeatedAssignToSwizzled(TIntermBlock *root)
+{
+    RewriteAssignToSwizzledTraverser::rewrite(root);
+}
+
+}  // namespace sh
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/compiler/translator/tree_ops/RewriteRepeatedAssignToSwizzled.h
@@ -0,0 +1,28 @@
+//
+// Copyright (c) 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.
+//
+// RewriteRepeatedAssignToSwizzled.h: Rewrite expressions that assign an assignment to a swizzled
+// vector, like:
+//     v.x = z = expression;
+// to:
+//     z = expression;
+//     v.x = z;
+//
+// Note that this doesn't handle some corner cases: expressions nested inside other expressions,
+// inside loop headers, or inside if conditions.
+
+#ifndef COMPILER_TRANSLATOR_TREEOPS_REWRITEREPEATEDASSIGNTOSWIZZLED_H_
+#define COMPILER_TRANSLATOR_TREEOPS_REWRITEREPEATEDASSIGNTOSWIZZLED_H_
+
+namespace sh
+{
+
+class TIntermBlock;
+
+void RewriteRepeatedAssignToSwizzled(TIntermBlock *root);
+
+}  // namespace sh
+
+#endif  // COMPILER_TRANSLATOR_TREEOPS_REWRITEREPEATEDASSIGNTOSWIZZLED_H_
--- a/gfx/angle/checkout/src/compiler/translator/tree_util/IntermTraverse.h
+++ b/gfx/angle/checkout/src/compiler/translator/tree_util/IntermTraverse.h
@@ -28,16 +28,19 @@ enum Visit
 // and then pass an object of the subclass to a traverse method of a node.
 //
 // The traverse*() functions may also be overridden to do other bookkeeping on the tree to provide
 // contextual information to the visit functions, such as whether the node is the target of an
 // assignment. This is complex to maintain and so should only be done in special cases.
 //
 // When using this, just fill in the methods for nodes you want visited.
 // Return false from a pre-visit to skip visiting that node's subtree.
+//
+// See also how to write AST transformations documentation:
+//   https://github.com/google/angle/blob/master/doc/WritingShaderASTTransformations.md
 class TIntermTraverser : angle::NonCopyable
 {
   public:
     POOL_ALLOCATOR_NEW_DELETE();
     TIntermTraverser(bool preVisit,
                      bool inVisit,
                      bool postVisit,
                      TSymbolTable *symbolTable = nullptr);
--- a/gfx/angle/checkout/src/compiler/translator/util.cpp
+++ b/gfx/angle/checkout/src/compiler/translator/util.cpp
@@ -9,17 +9,17 @@
 #include <limits>
 
 #include "common/utilities.h"
 #include "compiler/preprocessor/numeric_lex.h"
 #include "compiler/translator/SymbolTable.h"
 
 bool atoi_clamp(const char *str, unsigned int *value)
 {
-    bool success = pp::numeric_lex_int(str, value);
+    bool success = angle::pp::numeric_lex_int(str, value);
     if (!success)
         *value = std::numeric_limits<unsigned int>::max();
     return success;
 }
 
 namespace sh
 {
 
@@ -179,17 +179,17 @@ float NumericLexFloat32OutOfRangeToInfin
         return 0.0f;
     }
     return static_cast<float>(value);
 }
 
 bool strtof_clamp(const std::string &str, float *value)
 {
     // Try the standard float parsing path first.
-    bool success = pp::numeric_lex_float(str, value);
+    bool success = angle::pp::numeric_lex_float(str, value);
 
     // If the standard path doesn't succeed, take the path that can handle the following corner
     // cases:
     //   1. The decimal mantissa is very small but the exponent is very large, putting the resulting
     //   number inside the float range.
     //   2. The decimal mantissa is very large but the exponent is very small, putting the resulting
     //   number inside the float range.
     //   3. The value is out-of-range and should be evaluated as infinity.
--- a/gfx/angle/checkout/src/gpu_info_util/SystemInfo.h
+++ b/gfx/angle/checkout/src/gpu_info_util/SystemInfo.h
@@ -14,21 +14,16 @@
 #include <vector>
 
 namespace angle
 {
 
 using VendorID = uint32_t;
 using DeviceID = uint32_t;
 
-constexpr VendorID kVendorID_AMD      = 0x1002;
-constexpr VendorID kVendorID_Intel    = 0x8086;
-constexpr VendorID kVendorID_Nvidia   = 0x10DE;
-constexpr VendorID kVendorID_Qualcomm = 0x5143;
-
 struct GPUDeviceInfo
 {
     GPUDeviceInfo();
     ~GPUDeviceInfo();
 
     GPUDeviceInfo(const GPUDeviceInfo &other);
 
     VendorID vendorId = 0;
@@ -42,32 +37,47 @@ struct GPUDeviceInfo
 struct SystemInfo
 {
     SystemInfo();
     ~SystemInfo();
 
     SystemInfo(const SystemInfo &other);
 
     std::vector<GPUDeviceInfo> gpus;
+
+    // Index of the primary GPU (the discrete one on dual GPU systems) in `gpus`.
+    // Will never be -1 after a successful GetSystemInfo.
     int primaryGPUIndex = -1;
+    // Index of the currently active GPU in `gpus`, can be -1 if the active GPU could not be
+    // detected.
     int activeGPUIndex  = -1;
 
     bool isOptimus       = false;
     bool isAMDSwitchable = false;
 
     // Only available on macOS
     std::string machineModelName;
     std::string machineModelVersion;
 
     // Only available on Windows, set even on failure.
     std::string primaryDisplayDeviceId;
 };
 
+// Gathers information about the system without starting a GPU driver and returns them in `info`.
+// Returns true if all info was gathered, false otherwise. Even when false is returned, `info` will
+// be filled with partial information.
 bool GetSystemInfo(SystemInfo *info);
 
+// Known PCI vendor IDs
+constexpr VendorID kVendorID_AMD      = 0x1002;
+constexpr VendorID kVendorID_Intel    = 0x8086;
+constexpr VendorID kVendorID_Nvidia   = 0x10DE;
+constexpr VendorID kVendorID_Qualcomm = 0x5143;
+
+// Predicates on vendor IDs
 bool IsAMD(VendorID vendorId);
 bool IsIntel(VendorID vendorId);
 bool IsNvidia(VendorID vendorId);
 bool IsQualcomm(VendorID vendorId);
 
 }  // namespace angle
 
 #endif  // GPU_INFO_UTIL_SYSTEM_INFO_H_
--- a/gfx/angle/checkout/src/libANGLE/AttributeMap.h
+++ b/gfx/angle/checkout/src/libANGLE/AttributeMap.h
@@ -2,16 +2,17 @@
 // Copyright (c) 2014 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.
 //
 
 #ifndef LIBANGLE_ATTRIBUTEMAP_H_
 #define LIBANGLE_ATTRIBUTEMAP_H_
 
+#include "libANGLE/PackedEnums.h"
 
 #include <EGL/egl.h>
 
 #include <map>
 #include <vector>
 
 namespace egl
 {
@@ -20,20 +21,37 @@ class AttributeMap final
 {
   public:
     AttributeMap();
     AttributeMap(const AttributeMap &other);
     ~AttributeMap();
 
     void insert(EGLAttrib key, EGLAttrib value);
     bool contains(EGLAttrib key) const;
+
     EGLAttrib get(EGLAttrib key) const;
     EGLAttrib get(EGLAttrib key, EGLAttrib defaultValue) const;
     EGLint getAsInt(EGLAttrib key) const;
     EGLint getAsInt(EGLAttrib key, EGLint defaultValue) const;
+
+    template <typename PackedEnumT>
+    PackedEnumT getAsPackedEnum(EGLAttrib key) const
+    {
+        return FromEGLenum<PackedEnumT>(static_cast<EGLenum>(get(key)));
+    }
+
+    template <typename PackedEnumT>
+    PackedEnumT getAsPackedEnum(EGLAttrib key, PackedEnumT defaultValue) const
+    {
+        auto iter = mAttributes.find(key);
+        return (mAttributes.find(key) != mAttributes.end())
+                   ? FromEGLenum<PackedEnumT>(static_cast<EGLenum>(iter->second))
+                   : defaultValue;
+    }
+
     bool isEmpty() const;
     std::vector<EGLint> toIntVector() const;
 
     typedef std::map<EGLAttrib, EGLAttrib>::const_iterator const_iterator;
 
     const_iterator begin() const;
     const_iterator end() const;
 
--- a/gfx/angle/checkout/src/libANGLE/Buffer.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Buffer.cpp
@@ -83,18 +83,18 @@ Error Buffer::bufferData(const Context *
     }
 
     ANGLE_TRY(mImpl->setData(context, target, dataForImpl, size, usage));
 
     mIndexRangeCache.clear();
     mState.mUsage = usage;
     mState.mSize  = size;
 
-    // Notify when data changes.
-    mImpl->onStateChange(context, angle::SubjectMessage::CONTENTS_CHANGED);
+    // Notify when storage changes.
+    mImpl->onStateChange(context, angle::SubjectMessage::STORAGE_CHANGED);
 
     return NoError();
 }
 
 Error Buffer::bufferSubData(const Context *context,
                             BufferBinding target,
                             const void *data,
                             GLsizeiptr size,
@@ -238,20 +238,22 @@ bool Buffer::isBound() const
 }
 
 bool Buffer::isBoundForTransformFeedbackAndOtherUse() const
 {
     return mState.mTransformFeedbackBindingCount > 0 &&
            mState.mTransformFeedbackBindingCount != mState.mBindingCount;
 }
 
-void Buffer::onBindingChanged(bool bound, BufferBinding target)
+void Buffer::onBindingChanged(const Context *context, bool bound, BufferBinding target)
 {
     ASSERT(bound || mState.mBindingCount > 0);
     mState.mBindingCount += bound ? 1 : -1;
     if (target == BufferBinding::TransformFeedback)
     {
         ASSERT(bound || mState.mTransformFeedbackBindingCount > 0);
         mState.mTransformFeedbackBindingCount += bound ? 1 : -1;
+
+        mImpl->onStateChange(context, angle::SubjectMessage::BINDING_CHANGED);
     }
 }
 
 }  // namespace gl
--- a/gfx/angle/checkout/src/libANGLE/Buffer.h
+++ b/gfx/angle/checkout/src/libANGLE/Buffer.h
@@ -10,17 +10,17 @@
 
 #ifndef LIBANGLE_BUFFER_H_
 #define LIBANGLE_BUFFER_H_
 
 #include "common/angleutils.h"
 #include "libANGLE/Debug.h"
 #include "libANGLE/Error.h"
 #include "libANGLE/IndexRangeCache.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/RefCountObject.h"
 
 namespace rx
 {
 class BufferImpl;
 class GLImplFactory;
 };
 
@@ -111,17 +111,17 @@ class Buffer final : public RefCountObje
     GLint64 getMapOffset() const { return mState.mMapOffset; }
     GLint64 getMapLength() const { return mState.mMapLength; }
     GLint64 getSize() const { return mState.mSize; }
 
     rx::BufferImpl *getImplementation() const { return mImpl; }
 
     bool isBound() const;
     bool isBoundForTransformFeedbackAndOtherUse() const;
-    void onBindingChanged(bool bound, BufferBinding target);
+    void onBindingChanged(const Context *context, bool bound, BufferBinding target);
 
   private:
     BufferState mState;
     rx::BufferImpl *mImpl;
 
     mutable IndexRangeCache mIndexRangeCache;
 };
 
--- a/gfx/angle/checkout/src/libANGLE/Caps.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Caps.cpp
@@ -155,16 +155,26 @@ Extensions::Extensions()
       textureRG(false),
       textureCompressionDXT1(false),
       textureCompressionDXT3(false),
       textureCompressionDXT5(false),
       textureCompressionS3TCsRGB(false),
       textureCompressionASTCHDR(false),
       textureCompressionASTCLDR(false),
       compressedETC1RGB8Texture(false),
+      compressedETC2RGB8Texture(false),
+      compressedETC2sRGB8Texture(false),
+      compressedETC2PunchthroughARGB8Texture(false),
+      compressedETC2PunchthroughAsRGB8AlphaTexture(false),
+      compressedETC2RGBA8Texture(false),
+      compressedETC2sRGB8Alpha8Texture(false),
+      compressedEACR11UnsignedTexture(false),
+      compressedEACR11SignedTexture(false),
+      compressedEACRG11UnsignedTexture(false),
+      compressedEACRG11SignedTexture(false),
       sRGB(false),
       depthTextures(false),
       depth32(false),
       textureStorage(false),
       textureNPOT(false),
       drawBuffers(false),
       textureFilterAnisotropic(false),
       maxTextureAnisotropy(0.0f),
@@ -221,17 +231,21 @@ Extensions::Extensions()
       framebufferMixedSamples(false),
       textureNorm16(false),
       pathRendering(false),
       surfacelessContext(false),
       clientArrays(false),
       robustResourceInitialization(false),
       programCacheControl(false),
       textureRectangle(false),
-      geometryShader(false)
+      geometryShader(false),
+      pointSizeArray(false),
+      textureCubeMap(false),
+      explicitContextGles1(false),
+      explicitContext(false)
 {
 }
 
 std::vector<std::string> Extensions::getStrings() const
 {
     std::vector<std::string> extensionStrings;
 
     for (const auto &extensionInfo : GetExtensionInfoMap())
@@ -485,16 +499,116 @@ static bool DetermineETC1RGB8TextureSupp
 {
     constexpr GLenum requiredFormats[] = {
         GL_ETC1_RGB8_OES,
     };
 
     return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
 }
 
+// Check for OES_compressed_ETC2_RGB8_texture
+static bool DetermineETC2RGB8TextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_RGB8_ETC2,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_ETC2_sRGB8_texture
+static bool DetermineETC2sRGB8TextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_SRGB8_ETC2,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_ETC2_punchthroughA_RGBA8_texture
+static bool DetermineETC2PunchthroughARGB8TextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture
+static bool DetermineETC2PunchthroughAsRGB8AlphaTextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_ETC2_RGBA8_texture
+static bool DetermineETC2RGBA8TextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_RGBA8_ETC2_EAC,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_ETC2_sRGB8_alpha8_texture
+static bool DetermineETC2sRGB8Alpha8TextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_EAC_R11_unsigned_texture
+static bool DetermineEACR11UnsignedTextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_R11_EAC,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_EAC_R11_signed_texture
+static bool DetermineEACR11SignedTextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_SIGNED_R11_EAC,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_EAC_RG11_unsigned_texture
+static bool DetermineEACRG11UnsignedTextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_RG11_EAC,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
+// Check for OES_compressed_EAC_RG11_signed_texture
+static bool DetermineEACRG11SignedTextureSupport(const TextureCapsMap &textureCaps)
+{
+    constexpr GLenum requiredFormats[] = {
+        GL_COMPRESSED_SIGNED_RG11_EAC,
+    };
+
+    return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
+}
+
 // Check for GL_ANGLE_texture_compression_dxt5
 static bool DetermineSRGBTextureSupport(const TextureCapsMap &textureCaps)
 {
     constexpr GLenum requiredFilterFormats[] = {
         GL_SRGB8, GL_SRGB8_ALPHA8,
     };
 
     constexpr GLenum requiredRenderFormats[] = {
@@ -584,16 +698,28 @@ void Extensions::setTextureExtensionSupp
     textureRG              = DetermineRGTextureSupport(textureCaps, textureHalfFloat, textureFloat);
     textureCompressionDXT1 = DetermineDXT1TextureSupport(textureCaps);
     textureCompressionDXT3 = DetermineDXT3TextureSupport(textureCaps);
     textureCompressionDXT5 = DetermineDXT5TextureSupport(textureCaps);
     textureCompressionS3TCsRGB = DetermineS3TCsRGBTextureSupport(textureCaps);
     textureCompressionASTCHDR  = DetermineASTCTextureSupport(textureCaps);
     textureCompressionASTCLDR  = textureCompressionASTCHDR;
     compressedETC1RGB8Texture  = DetermineETC1RGB8TextureSupport(textureCaps);
+    compressedETC2RGB8Texture  = DetermineETC2RGB8TextureSupport(textureCaps);
+    compressedETC2sRGB8Texture = DetermineETC2sRGB8TextureSupport(textureCaps);
+    compressedETC2PunchthroughARGB8Texture =
+        DetermineETC2PunchthroughARGB8TextureSupport(textureCaps);
+    compressedETC2PunchthroughAsRGB8AlphaTexture =
+        DetermineETC2PunchthroughAsRGB8AlphaTextureSupport(textureCaps);
+    compressedETC2RGBA8Texture       = DetermineETC2RGBA8TextureSupport(textureCaps);
+    compressedETC2sRGB8Alpha8Texture = DetermineETC2sRGB8Alpha8TextureSupport(textureCaps);
+    compressedEACR11UnsignedTexture  = DetermineEACR11UnsignedTextureSupport(textureCaps);
+    compressedEACR11SignedTexture    = DetermineEACR11SignedTextureSupport(textureCaps);
+    compressedEACRG11UnsignedTexture = DetermineEACRG11UnsignedTextureSupport(textureCaps);
+    compressedEACRG11SignedTexture   = DetermineEACRG11SignedTextureSupport(textureCaps);
     sRGB                       = DetermineSRGBTextureSupport(textureCaps);
     depthTextures              = DetermineDepthTextureSupport(textureCaps);
     depth32                    = DetermineDepth32Support(textureCaps);
     colorBufferFloatRGB        = DetermineColorBufferFloatRGBSupport(textureCaps);
     colorBufferFloatRGBA       = DetermineColorBufferFloatRGBASupport(textureCaps);
     colorBufferFloat           = DetermineColorBufferFloatSupport(textureCaps);
     textureNorm16              = DetermineTextureNorm16Support(textureCaps);
 }
@@ -633,20 +759,30 @@ const ExtensionInfoMap &GetExtensionInfo
         map["GL_EXT_texture_rg"] = enableableExtension(&Extensions::textureRG);
         map["GL_EXT_texture_compression_dxt1"] = enableableExtension(&Extensions::textureCompressionDXT1);
         map["GL_ANGLE_texture_compression_dxt3"] = enableableExtension(&Extensions::textureCompressionDXT3);
         map["GL_ANGLE_texture_compression_dxt5"] = enableableExtension(&Extensions::textureCompressionDXT5);
         map["GL_EXT_texture_compression_s3tc_srgb"] = enableableExtension(&Extensions::textureCompressionS3TCsRGB);
         map["GL_KHR_texture_compression_astc_hdr"] = enableableExtension(&Extensions::textureCompressionASTCHDR);
         map["GL_KHR_texture_compression_astc_ldr"] = enableableExtension(&Extensions::textureCompressionASTCLDR);
         map["GL_OES_compressed_ETC1_RGB8_texture"] = enableableExtension(&Extensions::compressedETC1RGB8Texture);
+        map["OES_compressed_ETC2_RGB8_texture"] = enableableExtension(&Extensions::compressedETC2RGB8Texture);
+        map["OES_compressed_ETC2_sRGB8_texture"] = enableableExtension(&Extensions::compressedETC2sRGB8Texture);
+        map["OES_compressed_ETC2_punchthroughA_RGBA8_texture"] = enableableExtension(&Extensions::compressedETC2PunchthroughARGB8Texture);
+        map["OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture"] = enableableExtension(&Extensions::compressedETC2PunchthroughAsRGB8AlphaTexture);
+        map["OES_compressed_ETC2_RGBA8_texture"] = enableableExtension(&Extensions::compressedETC2RGBA8Texture);
+        map["OES_compressed_ETC2_sRGB8_alpha8_texture"] = enableableExtension(&Extensions::compressedETC2sRGB8Alpha8Texture);
+        map["OES_compressed_EAC_R11_unsigned_texture"] = enableableExtension(&Extensions::compressedEACR11UnsignedTexture);
+        map["OES_compressed_EAC_R11_signed_texture"] = enableableExtension(&Extensions::compressedEACR11SignedTexture);
+        map["OES_compressed_EAC_RG11_unsigned_texture"] = enableableExtension(&Extensions::compressedEACRG11UnsignedTexture);
+        map["OES_compressed_EAC_RG11_signed_texture"] = enableableExtension(&Extensions::compressedEACRG11SignedTexture);
         map["GL_EXT_sRGB"] = enableableExtension(&Extensions::sRGB);
         map["GL_ANGLE_depth_texture"] = esOnlyExtension(&Extensions::depthTextures);
         map["GL_OES_depth32"] = esOnlyExtension(&Extensions::depth32);
-        map["GL_EXT_texture_storage"] = esOnlyExtension(&Extensions::textureStorage);
+        map["GL_EXT_texture_storage"] = enableableExtension(&Extensions::textureStorage);
         map["GL_OES_texture_npot"] = enableableExtension(&Extensions::textureNPOT);
         map["GL_EXT_draw_buffers"] = enableableExtension(&Extensions::drawBuffers);
         map["GL_EXT_texture_filter_anisotropic"] = enableableExtension(&Extensions::textureFilterAnisotropic);
         map["GL_EXT_occlusion_query_boolean"] = enableableExtension(&Extensions::occlusionQueryBoolean);
         map["GL_NV_fence"] = esOnlyExtension(&Extensions::fence);
         map["GL_EXT_disjoint_timer_query"] = enableableExtension(&Extensions::disjointTimerQuery);
         map["GL_EXT_robustness"] = esOnlyExtension(&Extensions::robustness);
         map["GL_KHR_robust_buffer_access_behavior"] = esOnlyExtension(&Extensions::robustBufferAccessBehavior);
@@ -659,24 +795,24 @@ const ExtensionInfoMap &GetExtensionInfo
         map["GL_EXT_shader_texture_lod"] = enableableExtension(&Extensions::shaderTextureLOD);
         map["GL_EXT_frag_depth"] = enableableExtension(&Extensions::fragDepth);
         map["GL_ANGLE_multiview"] = enableableExtension(&Extensions::multiview);
         map["GL_ANGLE_texture_usage"] = enableableExtension(&Extensions::textureUsage);
         map["GL_ANGLE_translated_shader_source"] = esOnlyExtension(&Extensions::translatedShaderSource);
         map["GL_OES_fbo_render_mipmap"] = enableableExtension(&Extensions::fboRenderMipmap);
         map["GL_EXT_discard_framebuffer"] = esOnlyExtension(&Extensions::discardFramebuffer);
         map["GL_EXT_debug_marker"] = esOnlyExtension(&Extensions::debugMarker);
-        map["GL_OES_EGL_image"] = esOnlyExtension(&Extensions::eglImage);
-        map["GL_OES_EGL_image_external"] = esOnlyExtension(&Extensions::eglImageExternal);
-        map["GL_OES_EGL_image_external_essl3"] = esOnlyExtension(&Extensions::eglImageExternalEssl3);
-        map["GL_NV_EGL_stream_consumer_external"] = esOnlyExtension(&Extensions::eglStreamConsumerExternal);
+        map["GL_OES_EGL_image"] = enableableExtension(&Extensions::eglImage);
+        map["GL_OES_EGL_image_external"] = enableableExtension(&Extensions::eglImageExternal);
+        map["GL_OES_EGL_image_external_essl3"] = enableableExtension(&Extensions::eglImageExternalEssl3);
+        map["GL_NV_EGL_stream_consumer_external"] = enableableExtension(&Extensions::eglStreamConsumerExternal);
         map["GL_EXT_unpack_subimage"] = enableableExtension(&Extensions::unpackSubimage);
         map["GL_NV_pack_subimage"] = enableableExtension(&Extensions::packSubimage);
         map["GL_EXT_color_buffer_float"] = enableableExtension(&Extensions::colorBufferFloat);
-        map["GL_OES_vertex_array_object"] = esOnlyExtension(&Extensions::vertexArrayObject);
+        map["GL_OES_vertex_array_object"] = enableableExtension(&Extensions::vertexArrayObject);
         map["GL_KHR_debug"] = esOnlyExtension(&Extensions::debug);
         // TODO(jmadill): Enable this when complete.
         //map["GL_KHR_no_error"] = esOnlyExtension(&Extensions::noError);
         map["GL_ANGLE_lossy_etc_decode"] = enableableExtension(&Extensions::lossyETCDecode);
         map["GL_CHROMIUM_bind_uniform_location"] = esOnlyExtension(&Extensions::bindUniformLocation);
         map["GL_CHROMIUM_sync_query"] = enableableExtension(&Extensions::syncQuery);
         map["GL_CHROMIUM_copy_texture"] = esOnlyExtension(&Extensions::copyTexture);
         map["GL_CHROMIUM_copy_compressed_texture"] = esOnlyExtension(&Extensions::copyCompressedTexture);
@@ -693,16 +829,21 @@ const ExtensionInfoMap &GetExtensionInfo
         map["GL_EXT_texture_norm16"] = esOnlyExtension(&Extensions::textureNorm16);
         map["GL_CHROMIUM_path_rendering"] = esOnlyExtension(&Extensions::pathRendering);
         map["GL_OES_surfaceless_context"] = esOnlyExtension(&Extensions::surfacelessContext);
         map["GL_ANGLE_client_arrays"] = esOnlyExtension(&Extensions::clientArrays);
         map["GL_ANGLE_robust_resource_initialization"] = esOnlyExtension(&Extensions::robustResourceInitialization);
         map["GL_ANGLE_program_cache_control"] = esOnlyExtension(&Extensions::programCacheControl);
         map["GL_ANGLE_texture_rectangle"] = enableableExtension(&Extensions::textureRectangle);
         map["GL_EXT_geometry_shader"] = enableableExtension(&Extensions::geometryShader);
+        map["GL_ANGLE_explicit_context_gles1"] = enableableExtension(&Extensions::explicitContextGles1);
+        map["GL_ANGLE_explicit_context"] = enableableExtension(&Extensions::explicitContext);
+        // GLES1 extensinos
+        map["GL_OES_point_size_array"] = enableableExtension(&Extensions::pointSizeArray);
+        map["GL_OES_texture_cube_map"] = enableableExtension(&Extensions::textureCubeMap);
         // clang-format on
 
         return map;
     };
 
     static const ExtensionInfoMap extensionInfo = buildExtensionInfoMap();
     return extensionInfo;
 }
@@ -774,53 +915,52 @@ Caps::Caps()
       // Table 20.41
       maxVertexAttribRelativeOffset(0),
       maxVertexAttribBindings(0),
       maxVertexAttribStride(0),
       maxElementsIndices(0),
       maxElementsVertices(0),
 
       // Table 20.43
+      // Table 20.44
+      // Table 20.45
+      // Table 20.43gs (GL_EXT_geometry_shader)
+      maxShaderUniformBlocks({}),
+      maxShaderTextureImageUnits({}),
+      maxShaderStorageBlocks({}),
+
+      // Table 20.43
       maxVertexAttributes(0),
       maxVertexUniformComponents(0),
       maxVertexUniformVectors(0),
-      maxVertexUniformBlocks(0),
       maxVertexOutputComponents(0),
-      maxVertexTextureImageUnits(0),
       maxVertexAtomicCounterBuffers(0),
       maxVertexAtomicCounters(0),
       maxVertexImageUniforms(0),
-      maxVertexShaderStorageBlocks(0),
 
       // Table 20.44
       maxFragmentUniformComponents(0),
       maxFragmentUniformVectors(0),
-      maxFragmentUniformBlocks(0),
       maxFragmentInputComponents(0),
-      maxTextureImageUnits(0),
       maxFragmentAtomicCounterBuffers(0),
       maxFragmentAtomicCounters(0),
       maxFragmentImageUniforms(0),
-      maxFragmentShaderStorageBlocks(0),
       minProgramTextureGatherOffset(0),
       maxProgramTextureGatherOffset(0),
       minProgramTexelOffset(0),
       maxProgramTexelOffset(0),
 
       // Table 20.45
       maxComputeWorkGroupInvocations(0),
-      maxComputeUniformBlocks(0),
-      maxComputeTextureImageUnits(0),
       maxComputeSharedMemorySize(0),
       maxComputeUniformComponents(0),
       maxComputeAtomicCounterBuffers(0),
       maxComputeAtomicCounters(0),
       maxComputeImageUniforms(0),
       maxCombinedComputeUniformComponents(0),
-      maxComputeShaderStorageBlocks(0),
 
       // Table 20.46
       maxUniformBufferBindings(0),
       maxUniformBlockSize(0),
       uniformBufferOffsetAlignment(0),
       maxCombinedUniformBlocks(0),
       maxCombinedVertexUniformComponents(0),
       maxCombinedFragmentUniformComponents(0),
@@ -851,25 +991,22 @@ Caps::Caps()
       maxSamples(0),
 
       // Table 20.40 (cont.) (GL_EXT_geometry_shader)
       maxFramebufferLayers(0),
       layerProvokingVertex(0),
 
       // Table 20.43gs (GL_EXT_geometry_shader)
       maxGeometryUniformComponents(0),
-      maxGeometryUniformBlocks(0),
       maxGeometryInputComponents(0),
       maxGeometryOutputComponents(0),
       maxGeometryOutputVertices(0),
       maxGeometryTotalOutputComponents(0),
-      maxGeometryTextureImageUnits(0),
       maxGeometryAtomicCounterBuffers(0),
       maxGeometryAtomicCounters(0),
-      maxGeometryShaderStorageBlocks(0),
       maxGeometryShaderInvocations(0),
 
       // Table 20.46 (GL_EXT_geometry_shader)
       maxGeometryImageUniforms(0),
       maxCombinedGeometryUniformComponents(0),
 
       // GLES1 emulation: Table 6.20 / 6.22 (ES 1.1 spec)
       maxMultitextureUnits(0),
@@ -932,17 +1069,17 @@ Caps GenerateMinimumCaps(const Version &
         caps.fragmentMediumpInt.setSimulatedInt(10);
         caps.fragmentLowpInt.setSimulatedInt(8);
 
         // Table 6.20
         caps.maxVertexAttributes          = 8;
         caps.maxVertexUniformVectors      = 128;
         caps.maxVaryingVectors            = 8;
         caps.maxCombinedTextureImageUnits = 8;
-        caps.maxTextureImageUnits         = 8;
+        caps.maxShaderTextureImageUnits[ShaderType::Fragment] = 8;
         caps.maxFragmentUniformVectors    = 16;
         caps.maxRenderbufferSize          = 1;
     }
 
     if (clientVersion >= Version(3, 0))
     {
         // Table 6.28
         caps.maxElementIndex       = (1 << 24) - 1;
@@ -977,39 +1114,39 @@ Caps GenerateMinimumCaps(const Version &
         caps.fragmentMediumpInt.setTwosComplementInt(16);
         caps.fragmentLowpInt.setTwosComplementInt(8);
         caps.maxServerWaitTimeout = 0;
 
         // Table 6.31
         caps.maxVertexAttributes        = 16;
         caps.maxVertexUniformComponents = 1024;
         caps.maxVertexUniformVectors    = 256;
-        caps.maxVertexUniformBlocks     = 12;
+        caps.maxShaderUniformBlocks[ShaderType::Vertex]     = 12;
         caps.maxVertexOutputComponents  = 64;
-        caps.maxVertexTextureImageUnits = 16;
+        caps.maxShaderTextureImageUnits[ShaderType::Vertex] = 16;
 
         // Table 6.32
         caps.maxFragmentUniformComponents = 896;
         caps.maxFragmentUniformVectors    = 224;
-        caps.maxFragmentUniformBlocks     = 12;
+        caps.maxShaderUniformBlocks[ShaderType::Fragment]     = 12;
         caps.maxFragmentInputComponents   = 60;
-        caps.maxTextureImageUnits         = 16;
+        caps.maxShaderTextureImageUnits[ShaderType::Fragment] = 16;
         caps.minProgramTexelOffset        = -8;
         caps.maxProgramTexelOffset        = 7;
 
         // Table 6.33
         caps.maxUniformBufferBindings     = 24;
         caps.maxUniformBlockSize          = 16384;
         caps.uniformBufferOffsetAlignment = 256;
         caps.maxCombinedUniformBlocks     = 24;
         caps.maxCombinedVertexUniformComponents =
-            caps.maxVertexUniformBlocks * (caps.maxUniformBlockSize / 4) +
+            caps.maxShaderUniformBlocks[ShaderType::Vertex] * (caps.maxUniformBlockSize / 4) +
             caps.maxVertexUniformComponents;
         caps.maxCombinedFragmentUniformComponents =
-            caps.maxFragmentUniformBlocks * (caps.maxUniformBlockSize / 4) +
+            caps.maxShaderUniformBlocks[ShaderType::Fragment] * (caps.maxUniformBlockSize / 4) +
             caps.maxFragmentUniformComponents;
         caps.maxVaryingComponents         = 60;
         caps.maxVaryingVectors            = 15;
         caps.maxCombinedTextureImageUnits = 32;
 
         // Table 6.34
         caps.maxTransformFeedbackInterleavedComponents = 64;
         caps.maxTransformFeedbackSeparateAttributes    = 4;
@@ -1034,48 +1171,49 @@ Caps GenerateMinimumCaps(const Version &
         caps.maxVertexAttribRelativeOffset = 2047;
         caps.maxVertexAttribBindings       = 16;
         caps.maxVertexAttribStride         = 2048;
 
         // Table 20.43
         caps.maxVertexAtomicCounterBuffers = 0;
         caps.maxVertexAtomicCounters       = 0;
         caps.maxVertexImageUniforms        = 0;
-        caps.maxVertexShaderStorageBlocks  = 0;
+        caps.maxShaderStorageBlocks[ShaderType::Vertex] = 0;
 
         // Table 20.44
         caps.maxFragmentUniformComponents    = 1024;
         caps.maxFragmentUniformVectors       = 256;
         caps.maxFragmentAtomicCounterBuffers = 0;
         caps.maxFragmentAtomicCounters       = 0;
         caps.maxFragmentImageUniforms        = 0;
-        caps.maxFragmentShaderStorageBlocks  = 0;
+        caps.maxShaderStorageBlocks[ShaderType::Fragment] = 0;
         caps.minProgramTextureGatherOffset   = 0;
         caps.maxProgramTextureGatherOffset   = 0;
 
         // Table 20.45
         caps.maxComputeWorkGroupCount       = {{65535, 65535, 65535}};
         caps.maxComputeWorkGroupSize        = {{128, 128, 64}};
         caps.maxComputeWorkGroupInvocations = 12;
-        caps.maxComputeUniformBlocks        = 12;
-        caps.maxComputeTextureImageUnits    = 16;
+        caps.maxShaderUniformBlocks[ShaderType::Compute]     = 12;
+        caps.maxShaderTextureImageUnits[ShaderType::Compute] = 16;
         caps.maxComputeSharedMemorySize     = 16384;
         caps.maxComputeUniformComponents    = 1024;
         caps.maxComputeAtomicCounterBuffers = 1;
         caps.maxComputeAtomicCounters       = 8;
         caps.maxComputeImageUniforms        = 4;
         caps.maxCombinedComputeUniformComponents =
-            caps.maxComputeUniformBlocks * static_cast<GLuint>(caps.maxUniformBlockSize / 4) +
+            caps.maxShaderUniformBlocks[ShaderType::Compute] *
+                static_cast<GLuint>(caps.maxUniformBlockSize / 4) +
             caps.maxComputeUniformComponents;
-        caps.maxComputeShaderStorageBlocks = 4;
+        caps.maxShaderStorageBlocks[ShaderType::Compute] = 4;
 
         // Table 20.46
         caps.maxUniformBufferBindings = 36;
         caps.maxCombinedFragmentUniformComponents =
-            caps.maxFragmentUniformBlocks * (caps.maxUniformBlockSize / 4) +
+            caps.maxShaderUniformBlocks[ShaderType::Fragment] * (caps.maxUniformBlockSize / 4) +
             caps.maxFragmentUniformComponents;
         caps.maxCombinedTextureImageUnits     = 48;
         caps.maxCombinedShaderOutputResources = 4;
 
         // Table 20.47
         caps.maxUniformLocations                = 1024;
         caps.maxAtomicCounterBufferBindings     = 1;
         caps.maxAtomicCounterBufferSize         = 32;
@@ -1097,31 +1235,32 @@ Caps GenerateMinimumCaps(const Version &
     if (extensions.geometryShader)
     {
         // Table 20.40 (GL_EXT_geometry_shader)
         caps.maxFramebufferLayers = 256;
         caps.layerProvokingVertex = GL_LAST_VERTEX_CONVENTION_EXT;
 
         // Table 20.43gs (GL_EXT_geometry_shader)
         caps.maxGeometryUniformComponents     = 1024;
-        caps.maxGeometryUniformBlocks         = 12;
+        caps.maxShaderUniformBlocks[ShaderType::Geometry]     = 12;
         caps.maxGeometryInputComponents       = 64;
         caps.maxGeometryOutputComponents      = 64;
         caps.maxGeometryOutputVertices        = 256;
         caps.maxGeometryTotalOutputComponents = 1024;
-        caps.maxGeometryTextureImageUnits     = 16;
+        caps.maxShaderTextureImageUnits[ShaderType::Geometry] = 16;
         caps.maxGeometryAtomicCounterBuffers  = 0;
         caps.maxGeometryAtomicCounters        = 0;
-        caps.maxGeometryShaderStorageBlocks   = 0;
+        caps.maxShaderStorageBlocks[ShaderType::Geometry]     = 0;
         caps.maxGeometryShaderInvocations     = 32;
 
         // Table 20.46 (GL_EXT_geometry_shader)
         caps.maxGeometryImageUniforms = 0;
         caps.maxCombinedGeometryUniformComponents =
-            caps.maxGeometryUniformBlocks * static_cast<GLuint>(caps.maxUniformBlockSize / 4) +
+            caps.maxShaderUniformBlocks[ShaderType::Geometry] *
+                static_cast<GLuint>(caps.maxUniformBlockSize / 4) +
             caps.maxGeometryUniformComponents;
 
         // Table 20.46 (GL_EXT_geometry_shader)
         caps.maxUniformBufferBindings     = 48;
         caps.maxCombinedUniformBlocks     = 36;
         caps.maxCombinedTextureImageUnits = 64;
     }
 
@@ -1251,17 +1390,18 @@ ClientExtensions::ClientExtensions()
       platformANGLE(false),
       platformANGLED3D(false),
       platformANGLEOpenGL(false),
       platformANGLEVulkan(false),
       deviceCreation(false),
       deviceCreationD3D11(false),
       x11Visual(false),
       experimentalPresentPath(false),
-      clientGetAllProcAddresses(false)
+      clientGetAllProcAddresses(false),
+      explicitContext(false)
 {
 }
 
 ClientExtensions::ClientExtensions(const ClientExtensions &other) = default;
 
 std::vector<std::string> ClientExtensions::getStrings() const
 {
     std::vector<std::string> extensionStrings;
@@ -1276,14 +1416,15 @@ std::vector<std::string> ClientExtension
     InsertExtensionString("EGL_ANGLE_platform_angle_opengl",       platformANGLEOpenGL,       &extensionStrings);
     InsertExtensionString("EGL_ANGLE_platform_angle_null",         platformANGLENULL,         &extensionStrings);
     InsertExtensionString("EGL_ANGLE_platform_angle_vulkan",       platformANGLEVulkan,       &extensionStrings);
     InsertExtensionString("EGL_ANGLE_device_creation",             deviceCreation,            &extensionStrings);
     InsertExtensionString("EGL_ANGLE_device_creation_d3d11",       deviceCreationD3D11,       &extensionStrings);
     InsertExtensionString("EGL_ANGLE_x11_visual",                  x11Visual,                 &extensionStrings);
     InsertExtensionString("EGL_ANGLE_experimental_present_path",   experimentalPresentPath,   &extensionStrings);
     InsertExtensionString("EGL_KHR_client_get_all_proc_addresses", clientGetAllProcAddresses, &extensionStrings);
+    InsertExtensionString("EGL_ANGLE_explicit_context",            explicitContext,           &extensionStrings);
     // clang-format on
 
     return extensionStrings;
 }
 
 }  // namespace egl
--- a/gfx/angle/checkout/src/libANGLE/Caps.h
+++ b/gfx/angle/checkout/src/libANGLE/Caps.h
@@ -178,16 +178,46 @@ struct Extensions
 
     // GL_KHR_texture_compression_astc_ldr
     bool textureCompressionASTCLDR;
 
     // GL_OES_compressed_ETC1_RGB8_texture
     // Implies that TextureCaps for GL_ETC1_RGB8_OES exist
     bool compressedETC1RGB8Texture;
 
+    // OES_compressed_ETC2_RGB8_texture
+    bool compressedETC2RGB8Texture;
+
+    // OES_compressed_ETC2_sRGB8_texture
+    bool compressedETC2sRGB8Texture;
+
+    // OES_compressed_ETC2_punchthroughA_RGBA8_texture
+    bool compressedETC2PunchthroughARGB8Texture;
+
+    // OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture
+    bool compressedETC2PunchthroughAsRGB8AlphaTexture;
+
+    // OES_compressed_ETC2_RGBA8_texture
+    bool compressedETC2RGBA8Texture;
+
+    // OES_compressed_ETC2_sRGB8_alpha8_texture
+    bool compressedETC2sRGB8Alpha8Texture;
+
+    // OES_compressed_EAC_R11_unsigned_texture
+    bool compressedEACR11UnsignedTexture;
+
+    // OES_compressed_EAC_R11_signed_texture
+    bool compressedEACR11SignedTexture;
+
+    // OES_compressed_EAC_RG11_unsigned_texture
+    bool compressedEACRG11UnsignedTexture;
+
+    // OES_compressed_EAC_RG11_signed_texture
+    bool compressedEACRG11SignedTexture;
+
     // GL_EXT_sRGB
     // Implies that TextureCaps for GL_SRGB8_ALPHA8 and GL_SRGB8 exist
     // TODO: Don't advertise this extension in ES3
     bool sRGB;
 
     // GL_ANGLE_depth_texture
     bool depthTextures;
 
@@ -369,16 +399,28 @@ struct Extensions
     // GL_ANGLE_program_cache_control
     bool programCacheControl;
 
     // GL_ANGLE_texture_rectangle
     bool textureRectangle;
 
     // GL_EXT_geometry_shader
     bool geometryShader;
+
+    // GLES1 emulation: GLES1 extensions
+    // GL_OES_point_size_array
+    bool pointSizeArray;
+    // GL_OES_texture_cube_map
+    bool textureCubeMap;
+
+    // EGL_ANGLE_explicit_context GL subextensions
+    // GL_ANGLE_explicit_context_gles1
+    bool explicitContextGles1;
+    // GL_ANGLE_explicit_context
+    bool explicitContext;
 };
 
 struct ExtensionInfo
 {
     // If this extension can be enabled with glRequestExtension (GL_ANGLE_request_extension)
     bool Requestable = false;
 
     // Pointer to a boolean member of the Extensions struct
@@ -483,56 +525,58 @@ struct Caps
     TypePrecision vertexLowpInt;
     TypePrecision fragmentHighpFloat;
     TypePrecision fragmentMediumpFloat;
     TypePrecision fragmentLowpFloat;
     TypePrecision fragmentHighpInt;
     TypePrecision fragmentMediumpInt;
     TypePrecision fragmentLowpInt;
 
+    // Implementation dependent limits required on all shader types.
+    // TODO(jiawei.shao@intel.com): organize all such limits into ShaderMap.
+    // ES 3.1 (April 29, 2015) Table 20.43: Implementation dependent Vertex shader limits
+    // ES 3.1 (April 29, 2015) Table 20.44: Implementation dependent Fragment shader limits
+    // ES 3.1 (April 29, 2015) Table 20.45: implementation dependent compute shader limits
+    // GL_EXT_geometry_shader (May 31, 2016) Table 20.43gs: Implementation dependent geometry shader
+    // limits
+    ShaderMap<GLuint> maxShaderUniformBlocks;
+    ShaderMap<GLuint> maxShaderTextureImageUnits;
+    ShaderMap<GLuint> maxShaderStorageBlocks;
+
     // ES 3.1 (April 29, 2015) Table 20.43: Implementation dependent Vertex shader limits
     GLuint maxVertexAttributes;
     GLuint maxVertexUniformComponents;
     GLuint maxVertexUniformVectors;
-    GLuint maxVertexUniformBlocks;
     GLuint maxVertexOutputComponents;
-    GLuint maxVertexTextureImageUnits;
     GLuint maxVertexAtomicCounterBuffers;
     GLuint maxVertexAtomicCounters;
     GLuint maxVertexImageUniforms;
-    GLuint maxVertexShaderStorageBlocks;
 
     // ES 3.1 (April 29, 2015) Table 20.44: Implementation dependent Fragment shader limits
     GLuint maxFragmentUniformComponents;
     GLuint maxFragmentUniformVectors;
-    GLuint maxFragmentUniformBlocks;
     GLuint maxFragmentInputComponents;
-    GLuint maxTextureImageUnits;
     GLuint maxFragmentAtomicCounterBuffers;
     GLuint maxFragmentAtomicCounters;
     GLuint maxFragmentImageUniforms;
-    GLuint maxFragmentShaderStorageBlocks;
     GLint minProgramTextureGatherOffset;
     GLuint maxProgramTextureGatherOffset;
     GLint minProgramTexelOffset;
     GLint maxProgramTexelOffset;
 
     // ES 3.1 (April 29, 2015) Table 20.45: implementation dependent compute shader limits
     std::array<GLuint, 3> maxComputeWorkGroupCount;
     std::array<GLuint, 3> maxComputeWorkGroupSize;
     GLuint maxComputeWorkGroupInvocations;
-    GLuint maxComputeUniformBlocks;
-    GLuint maxComputeTextureImageUnits;
     GLuint maxComputeSharedMemorySize;
     GLuint maxComputeUniformComponents;
     GLuint maxComputeAtomicCounterBuffers;
     GLuint maxComputeAtomicCounters;
     GLuint maxComputeImageUniforms;
     GLuint maxCombinedComputeUniformComponents;
-    GLuint maxComputeShaderStorageBlocks;
 
     // ES 3.1 (April 29, 2015) Table 20.46: implementation dependent aggregate shader limits
     GLuint maxUniformBufferBindings;
     GLuint64 maxUniformBlockSize;
     GLuint uniformBufferOffsetAlignment;
     GLuint maxCombinedUniformBlocks;
     GLuint64 maxCombinedVertexUniformComponents;
     GLuint64 maxCombinedFragmentUniformComponents;
@@ -564,25 +608,22 @@ struct Caps
 
     // GL_EXT_geometry_shader (May 31, 2016) Table 20.40: Implementation-Dependent Values (cont.)
     GLuint maxFramebufferLayers;
     GLuint layerProvokingVertex;
 
     // GL_EXT_geometry_shader (May 31, 2016) Table 20.43gs: Implementation dependent geometry shader
     // limits
     GLuint maxGeometryUniformComponents;
-    GLuint maxGeometryUniformBlocks;
     GLuint maxGeometryInputComponents;
     GLuint maxGeometryOutputComponents;
     GLuint maxGeometryOutputVertices;
     GLuint maxGeometryTotalOutputComponents;
-    GLuint maxGeometryTextureImageUnits;
     GLuint maxGeometryAtomicCounterBuffers;
     GLuint maxGeometryAtomicCounters;
-    GLuint maxGeometryShaderStorageBlocks;
     GLuint maxGeometryShaderInvocations;
 
     // GL_EXT_geometry_shader (May 31, 2016) Table 20.46: Implementation dependent aggregate shader
     // limits
     GLuint maxGeometryImageUniforms;
     GLuint maxCombinedGeometryUniformComponents;
 
     // GLES1 emulation: Caps for ES 1.1. Taken from Table 6.20 / 6.22 in the OpenGL ES 1.1 spec.
@@ -783,13 +824,16 @@ struct ClientExtensions
     // EGL_ANGLE_x11_visual
     bool x11Visual;
 
     // EGL_ANGLE_experimental_present_path
     bool experimentalPresentPath;
 
     // EGL_KHR_client_get_all_proc_addresses
     bool clientGetAllProcAddresses;
+
+    // EGL_ANGLE_explicit_context
+    bool explicitContext;
 };
 
 }  // namespace egl
 
 #endif  // LIBANGLE_CAPS_H_
--- a/gfx/angle/checkout/src/libANGLE/Compiler.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Compiler.cpp
@@ -50,40 +50,38 @@ ShShaderSpec SelectShaderSpec(GLint majo
 
 Compiler::Compiler(rx::GLImplFactory *implFactory, const ContextState &state)
     : mImplementation(implFactory->createCompiler()),
       mSpec(SelectShaderSpec(state.getClientMajorVersion(),
                              state.getClientMinorVersion(),
                              state.getExtensions().webglCompatibility)),
       mOutputType(mImplementation->getTranslatorOutputType()),
       mResources(),
-      mFragmentCompiler(nullptr),
-      mVertexCompiler(nullptr),
-      mComputeCompiler(nullptr),
-      mGeometryCompiler(nullptr)
+      mShaderCompilers({})
 {
-    ASSERT(state.getClientMajorVersion() == 2 || state.getClientMajorVersion() == 3);
+    ASSERT(state.getClientMajorVersion() == 1 || state.getClientMajorVersion() == 2 ||
+           state.getClientMajorVersion() == 3);
 
     const gl::Caps &caps             = state.getCaps();
     const gl::Extensions &extensions = state.getExtensions();
 
     sh::InitBuiltInResources(&mResources);
     mResources.MaxVertexAttribs             = caps.maxVertexAttributes;
     mResources.MaxVertexUniformVectors      = caps.maxVertexUniformVectors;
     mResources.MaxVaryingVectors            = caps.maxVaryingVectors;
-    mResources.MaxVertexTextureImageUnits   = caps.maxVertexTextureImageUnits;
+    mResources.MaxVertexTextureImageUnits   = caps.maxShaderTextureImageUnits[ShaderType::Vertex];
     mResources.MaxCombinedTextureImageUnits = caps.maxCombinedTextureImageUnits;
-    mResources.MaxTextureImageUnits         = caps.maxTextureImageUnits;
+    mResources.MaxTextureImageUnits         = caps.maxShaderTextureImageUnits[ShaderType::Fragment];
     mResources.MaxFragmentUniformVectors    = caps.maxFragmentUniformVectors;
     mResources.MaxDrawBuffers               = caps.maxDrawBuffers;
     mResources.OES_standard_derivatives     = extensions.standardDerivatives;
     mResources.EXT_draw_buffers             = extensions.drawBuffers;
     mResources.EXT_shader_texture_lod       = extensions.shaderTextureLOD;
-    mResources.OES_EGL_image_external          = extensions.eglImageExternal;
-    mResources.OES_EGL_image_external_essl3    = extensions.eglImageExternalEssl3;
+    mResources.OES_EGL_image_external       = extensions.eglImageExternal;
+    mResources.OES_EGL_image_external_essl3 = extensions.eglImageExternalEssl3;
     mResources.NV_EGL_stream_consumer_external = extensions.eglStreamConsumerExternal;
     mResources.ARB_texture_rectangle           = extensions.textureRectangle;
     // TODO: use shader precision caps to determine if high precision is supported?
     mResources.FragmentPrecisionHigh = 1;
     mResources.EXT_frag_depth        = extensions.fragDepth;
 
     // OVR_multiview state
     mResources.OVR_multiview = extensions.multiview;
@@ -108,125 +106,84 @@ Compiler::Compiler(rx::GLImplFactory *im
 
     for (size_t index = 0u; index < 3u; ++index)
     {
         mResources.MaxComputeWorkGroupCount[index] = caps.maxComputeWorkGroupCount[index];
         mResources.MaxComputeWorkGroupSize[index]  = caps.maxComputeWorkGroupSize[index];
     }
 
     mResources.MaxComputeUniformComponents = caps.maxComputeUniformComponents;
-    mResources.MaxComputeTextureImageUnits = caps.maxComputeTextureImageUnits;
+    mResources.MaxComputeTextureImageUnits = caps.maxShaderTextureImageUnits[ShaderType::Compute];
 
     mResources.MaxComputeAtomicCounters       = caps.maxComputeAtomicCounters;
     mResources.MaxComputeAtomicCounterBuffers = caps.maxComputeAtomicCounterBuffers;
 
     mResources.MaxVertexAtomicCounters         = caps.maxVertexAtomicCounters;
     mResources.MaxFragmentAtomicCounters       = caps.maxFragmentAtomicCounters;
     mResources.MaxCombinedAtomicCounters       = caps.maxCombinedAtomicCounters;
     mResources.MaxAtomicCounterBindings        = caps.maxAtomicCounterBufferBindings;
     mResources.MaxVertexAtomicCounterBuffers   = caps.maxVertexAtomicCounterBuffers;
     mResources.MaxFragmentAtomicCounterBuffers = caps.maxFragmentAtomicCounterBuffers;
     mResources.MaxCombinedAtomicCounterBuffers = caps.maxCombinedAtomicCounterBuffers;
     mResources.MaxAtomicCounterBufferSize      = caps.maxAtomicCounterBufferSize;
 
-    mResources.MaxUniformBufferBindings = caps.maxUniformBufferBindings;
+    mResources.MaxUniformBufferBindings       = caps.maxUniformBufferBindings;
     mResources.MaxShaderStorageBufferBindings = caps.maxShaderStorageBufferBindings;
 
     // Needed by point size clamping workaround
     mResources.MaxPointSize = caps.maxAliasedPointSize;
 
     if (state.getClientMajorVersion() == 2 && !extensions.drawBuffers)
     {
         mResources.MaxDrawBuffers = 1;
     }
 
     // Geometry Shader constants
     mResources.EXT_geometry_shader              = extensions.geometryShader;
     mResources.MaxGeometryUniformComponents     = caps.maxGeometryUniformComponents;
-    mResources.MaxGeometryUniformBlocks         = caps.maxGeometryUniformBlocks;
+    mResources.MaxGeometryUniformBlocks         = caps.maxShaderUniformBlocks[ShaderType::Geometry];
     mResources.MaxGeometryInputComponents       = caps.maxGeometryInputComponents;
     mResources.MaxGeometryOutputComponents      = caps.maxGeometryOutputComponents;
     mResources.MaxGeometryOutputVertices        = caps.maxGeometryOutputVertices;
     mResources.MaxGeometryTotalOutputComponents = caps.maxGeometryTotalOutputComponents;
-    mResources.MaxGeometryTextureImageUnits     = caps.maxGeometryTextureImageUnits;
-    mResources.MaxGeometryAtomicCounterBuffers  = caps.maxGeometryAtomicCounterBuffers;
-    mResources.MaxGeometryAtomicCounters        = caps.maxGeometryAtomicCounters;
-    mResources.MaxGeometryShaderStorageBlocks   = caps.maxGeometryShaderStorageBlocks;
-    mResources.MaxGeometryShaderInvocations     = caps.maxGeometryShaderInvocations;
-    mResources.MaxGeometryImageUniforms         = caps.maxGeometryImageUniforms;
+    mResources.MaxGeometryTextureImageUnits = caps.maxShaderTextureImageUnits[ShaderType::Geometry];
+    mResources.MaxGeometryAtomicCounterBuffers = caps.maxGeometryAtomicCounterBuffers;
+    mResources.MaxGeometryAtomicCounters       = caps.maxGeometryAtomicCounters;
+    mResources.MaxGeometryShaderStorageBlocks  = caps.maxShaderStorageBlocks[ShaderType::Geometry];
+    mResources.MaxGeometryShaderInvocations    = caps.maxGeometryShaderInvocations;
+    mResources.MaxGeometryImageUniforms        = caps.maxGeometryImageUniforms;
 }
 
 Compiler::~Compiler()
 {
-    if (mFragmentCompiler)
+    for (ShaderType shaderType : AllShaderTypes())
     {
-        sh::Destruct(mFragmentCompiler);
-        mFragmentCompiler = nullptr;
-
-        ASSERT(activeCompilerHandles > 0);
-        activeCompilerHandles--;
-    }
-
-    if (mVertexCompiler)
-    {
-        sh::Destruct(mVertexCompiler);
-        mVertexCompiler = nullptr;
+        ShHandle compilerHandle = mShaderCompilers[shaderType];
+        if (compilerHandle)
+        {
+            sh::Destruct(compilerHandle);
+            mShaderCompilers[shaderType] = nullptr;
 
-        ASSERT(activeCompilerHandles > 0);
-        activeCompilerHandles--;
-    }
-
-    if (mComputeCompiler)
-    {
-        sh::Destruct(mComputeCompiler);
-        mComputeCompiler = nullptr;
-
-        ASSERT(activeCompilerHandles > 0);
-        activeCompilerHandles--;
-    }
-
-    if (mGeometryCompiler)
-    {
-        sh::Destruct(mGeometryCompiler);
-        mGeometryCompiler = nullptr;
-
-        ASSERT(activeCompilerHandles > 0);
-        activeCompilerHandles--;
+            ASSERT(activeCompilerHandles > 0);
+            activeCompilerHandles--;
+        }
     }
 
     if (activeCompilerHandles == 0)
     {
         sh::Finalize();
     }
 
     ANGLE_SWALLOW_ERR(mImplementation->release());
 }
 
 ShHandle Compiler::getCompilerHandle(ShaderType type)
 {
-    ShHandle *compiler = nullptr;
-    switch (type)
-    {
-        case ShaderType::Vertex:
-            compiler = &mVertexCompiler;
-            break;
-
-        case ShaderType::Fragment:
-            compiler = &mFragmentCompiler;
-            break;
-        case ShaderType::Compute:
-            compiler = &mComputeCompiler;
-            break;
-        case ShaderType::Geometry:
-            compiler = &mGeometryCompiler;
-            break;
-        default:
-            UNREACHABLE();
-            return nullptr;
-    }
+    ASSERT(type != ShaderType::InvalidEnum);
+    ShHandle *compiler = &mShaderCompilers[type];
 
     if (!(*compiler))
     {
         if (activeCompilerHandles == 0)
         {
             sh::Initialize();
         }
 
--- a/gfx/angle/checkout/src/libANGLE/Compiler.h
+++ b/gfx/angle/checkout/src/libANGLE/Compiler.h
@@ -7,17 +7,17 @@
 // Compiler.h: Defines the gl::Compiler class, abstracting the ESSL compiler
 // that a GL context holds.
 
 #ifndef LIBANGLE_COMPILER_H_
 #define LIBANGLE_COMPILER_H_
 
 #include "GLSLANG/ShaderLang.h"
 #include "libANGLE/Error.h"
-#include "libANGLE/PackedGLEnums_autogen.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/RefCountObject.h"
 
 namespace rx
 {
 class CompilerImpl;
 class GLImplFactory;
 }
 
@@ -36,17 +36,14 @@ class Compiler final : public RefCountOb
 
   private:
     ~Compiler() override;
     std::unique_ptr<rx::CompilerImpl> mImplementation;
     ShShaderSpec mSpec;
     ShShaderOutput mOutputType;
     ShBuiltInResources mResources;
 
-    ShHandle mFragmentCompiler;
-    ShHandle mVertexCompiler;
-    ShHandle mComputeCompiler;
-    ShHandle mGeometryCompiler;
+    ShaderMap<ShHandle> mShaderCompilers;
 };
 
 }  // namespace gl
 
 #endif // LIBANGLE_COMPILER_H_
--- a/gfx/angle/checkout/src/libANGLE/Context.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Context.cpp
@@ -19,16 +19,17 @@
 #include "common/utilities.h"
 #include "common/version.h"
 #include "libANGLE/Buffer.h"
 #include "libANGLE/Compiler.h"
 #include "libANGLE/Display.h"
 #include "libANGLE/Fence.h"
 #include "libANGLE/Framebuffer.h"
 #include "libANGLE/FramebufferAttachment.h"
+#include "libANGLE/GLES1Renderer.h"
 #include "libANGLE/Path.h"
 #include "libANGLE/Program.h"
 #include "libANGLE/ProgramPipeline.h"
 #include "libANGLE/Query.h"
 #include "libANGLE/Renderbuffer.h"
 #include "libANGLE/ResourceManager.h"
 #include "libANGLE/Sampler.h"
 #include "libANGLE/Surface.h"
@@ -259,17 +260,18 @@ namespace gl
 {
 
 Context::Context(rx::EGLImplFactory *implFactory,
                  const egl::Config *config,
                  const Context *shareContext,
                  TextureManager *shareTextures,
                  MemoryProgramCache *memoryProgramCache,
                  const egl::AttributeMap &attribs,
-                 const egl::DisplayExtensions &displayExtensions)
+                 const egl::DisplayExtensions &displayExtensions,
+                 const egl::ClientExtensions &clientExtensions)
     : mState(reinterpret_cast<ContextID>(this),
              shareContext ? &shareContext->mState : nullptr,
              shareTextures,
              GetClientVersion(attribs),
              &mGLState,
              mCaps,
              mTextureCaps,
              mExtensions,
@@ -292,23 +294,23 @@ Context::Context(rx::EGLImplFactory *imp
       mSurfacelessFramebuffer(nullptr),
       mWebGLContext(GetWebGLContext(attribs)),
       mExtensionsEnabled(GetExtensionsEnabled(attribs, mWebGLContext)),
       mMemoryProgramCache(memoryProgramCache),
       mScratchBuffer(1000u),
       mZeroFilledBuffer(1000u)
 {
     // Needed to solve a Clang warning of unused variables.
-    UNUSED_VARIABLE(mSavedArgsType);
-    UNUSED_VARIABLE(mParamsBuffer);
+    ANGLE_UNUSED_VARIABLE(mSavedArgsType);
+    ANGLE_UNUSED_VARIABLE(mParamsBuffer);
 
     mImplementation->setMemoryProgramCache(memoryProgramCache);
 
     bool robustResourceInit = GetRobustResourceInit(attribs);
-    initCaps(displayExtensions, robustResourceInit);
+    initCaps(displayExtensions, clientExtensions, robustResourceInit);
     initWorkarounds();
 
     mGLState.initialize(this, GetDebug(attribs), GetBindGeneratesResource(attribs),
                         GetClientArraysEnabled(attribs), robustResourceInit,
                         mMemoryProgramCache != nullptr);
 
     mFenceNVHandleAllocator.setBaseHandle(0);
 
@@ -345,25 +347,24 @@ Context::Context(rx::EGLImplFactory *imp
         }
 
         for (unsigned int i = 0; i < mCaps.maxShaderStorageBufferBindings; i++)
         {
             bindBufferRange(BufferBinding::ShaderStorage, i, 0, 0, 0);
         }
     }
 
-    const Extensions &nativeExtensions = mImplementation->getNativeExtensions();
-    if (nativeExtensions.textureRectangle)
+    if (mSupportedExtensions.textureRectangle)
     {
         Texture *zeroTextureRectangle =
             new Texture(mImplementation.get(), 0, TextureType::Rectangle);
         mZeroTextures[TextureType::Rectangle].set(this, zeroTextureRectangle);
     }
 
-    if (nativeExtensions.eglImageExternal || nativeExtensions.eglStreamConsumerExternal)
+    if (mSupportedExtensions.eglImageExternal || mSupportedExtensions.eglStreamConsumerExternal)
     {
         Texture *zeroTextureExternal = new Texture(mImplementation.get(), 0, TextureType::External);
         mZeroTextures[TextureType::External].set(this, zeroTextureExternal);
     }
 
     mGLState.initializeZeroTextures(this, mZeroTextures);
 
     bindVertexArray(0);
@@ -384,16 +385,22 @@ Context::Context(rx::EGLImplFactory *imp
 
     bindRenderbuffer(GL_RENDERBUFFER, 0);
 
     for (unsigned int i = 0; i < mCaps.maxUniformBufferBindings; i++)
     {
         bindBufferRange(BufferBinding::Uniform, i, 0, 0, -1);
     }
 
+    // Initialize GLES1 renderer if appropriate.
+    if (getClientVersion() < Version(2, 0))
+    {
+        mGLES1Renderer.reset(new GLES1Renderer());
+    }
+
     // Initialize dirty bit masks
     mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_STATE);
     mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_BUFFER_BINDING);
     // No dirty objects.
 
     // Readpixels uses the pack state and read FBO
     mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_STATE);
     mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_BUFFER_BINDING);
@@ -427,18 +434,27 @@ Context::Context(rx::EGLImplFactory *imp
     mComputeDirtyBits.set(State::DIRTY_BIT_DISPATCH_INDIRECT_BUFFER_BINDING);
     mComputeDirtyObjects.set(State::DIRTY_OBJECT_PROGRAM_TEXTURES);
 
     handleError(mImplementation->initialize());
 }
 
 egl::Error Context::onDestroy(const egl::Display *display)
 {
+    if (mGLES1Renderer)
+    {
+        mGLES1Renderer->onDestroy(this, &mGLState);
+    }
+
     // Delete the Surface first to trigger a finish() in Vulkan.
-    SafeDelete(mSurfacelessFramebuffer);
+    if (mSurfacelessFramebuffer)
+    {
+        mSurfacelessFramebuffer->onDestroy(this);
+        SafeDelete(mSurfacelessFramebuffer);
+    }
 
     ANGLE_TRY(releaseSurface(display));
 
     for (auto fence : mFenceNVMap)
     {
         SafeDelete(fence.second);
     }
     mFenceNVMap.clear();
@@ -1008,17 +1024,17 @@ void Context::bindDrawFramebuffer(GLuint
     Framebuffer *framebuffer = mState.mFramebuffers->checkFramebufferAllocation(
         mImplementation.get(), mCaps, framebufferHandle);
     mGLState.setDrawFramebufferBinding(framebuffer);
 }
 
 void Context::bindVertexArray(GLuint vertexArrayHandle)
 {
     VertexArray *vertexArray = checkVertexArrayAllocation(vertexArrayHandle);
-    mGLState.setVertexArrayBinding(vertexArray);
+    mGLState.setVertexArrayBinding(this, vertexArray);
 }
 
 void Context::bindVertexBuffer(GLuint bindingIndex,
                                GLuint bufferHandle,
                                GLintptr offset,
                                GLsizei stride)
 {
     Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
@@ -1065,78 +1081,78 @@ void Context::bindTransformFeedback(GLen
 
 void Context::bindProgramPipeline(GLuint pipelineHandle)
 {
     ProgramPipeline *pipeline =
         mState.mPipelines->checkProgramPipelineAllocation(mImplementation.get(), pipelineHandle);
     mGLState.setProgramPipelineBinding(this, pipeline);
 }
 
-void Context::beginQuery(GLenum target, GLuint query)
+void Context::beginQuery(QueryType target, GLuint query)
 {
     Query *queryObject = getQuery(query, true, target);
     ASSERT(queryObject);
 
     // begin query
     ANGLE_CONTEXT_TRY(queryObject->begin());
 
     // set query as active for specified target only if begin succeeded
     mGLState.setActiveQuery(this, target, queryObject);
 }
 
-void Context::endQuery(GLenum target)
+void Context::endQuery(QueryType target)
 {
     Query *queryObject = mGLState.getActiveQuery(target);
     ASSERT(queryObject);
 
     handleError(queryObject->end());
 
     // Always unbind the query, even if there was an error. This may delete the query object.
     mGLState.setActiveQuery(this, target, nullptr);
 }
 
-void Context::queryCounter(GLuint id, GLenum target)
-{
-    ASSERT(target == GL_TIMESTAMP_EXT);
+void Context::queryCounter(GLuint id, QueryType target)
+{
+    ASSERT(target == QueryType::Timestamp);
 
     Query *queryObject = getQuery(id, true, target);
     ASSERT(queryObject);
 
     handleError(queryObject->queryCounter());
 }
 
-void Context::getQueryiv(GLenum target, GLenum pname, GLint *params)
+void Context::getQueryiv(QueryType target, GLenum pname, GLint *params)
 {
     switch (pname)
     {
         case GL_CURRENT_QUERY_EXT:
             params[0] = mGLState.getActiveQueryId(target);
             break;
         case GL_QUERY_COUNTER_BITS_EXT:
             switch (target)
             {
-                case GL_TIME_ELAPSED_EXT:
+                case QueryType::TimeElapsed:
                     params[0] = getExtensions().queryCounterBitsTimeElapsed;
                     break;
-                case GL_TIMESTAMP_EXT:
+                case QueryType::Timestamp:
                     params[0] = getExtensions().queryCounterBitsTimestamp;
                     break;
                 default:
                     UNREACHABLE();
                     params[0] = 0;
                     break;
             }
             break;
         default:
             UNREACHABLE();
             return;
     }
 }
 
-void Context::getQueryivRobust(GLenum target,
+void Context::getQueryivRobust(QueryType target,
                                GLenum pname,
                                GLsizei bufSize,
                                GLsizei *length,
                                GLint *params)
 {
     getQueryiv(target, pname, params);
 }
 
@@ -1201,26 +1217,27 @@ Framebuffer *Context::getFramebuffer(GLu
     return mState.mFramebuffers->getFramebuffer(handle);
 }
 
 FenceNV *Context::getFenceNV(GLuint handle)
 {
     return mFenceNVMap.query(handle);
 }
 
-Query *Context::getQuery(GLuint handle, bool create, GLenum type)
+Query *Context::getQuery(GLuint handle, bool create, QueryType type)
 {
     if (!mQueryMap.contains(handle))
     {
         return nullptr;
     }
 
     Query *query = mQueryMap.query(handle);
     if (!query && create)
     {
+        ASSERT(type != QueryType::InvalidEnum);
         query = new Query(mImplementation->createQuery(type), handle);
         query->addRef();
         mQueryMap.assign(handle, query);
     }
     return query;
 }
 
 Query *Context::getQuery(GLuint handle) const
@@ -1331,20 +1348,20 @@ void Context::getIntegervImpl(GLenum pna
             break;
         case GL_MAX_VARYING_COMPONENTS:
             *params = mCaps.maxVertexOutputComponents;
             break;
         case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
             *params = mCaps.maxCombinedTextureImageUnits;
             break;
         case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
-            *params = mCaps.maxVertexTextureImageUnits;
+            *params = mCaps.maxShaderTextureImageUnits[ShaderType::Vertex];
             break;
         case GL_MAX_TEXTURE_IMAGE_UNITS:
-            *params = mCaps.maxTextureImageUnits;
+            *params = mCaps.maxShaderTextureImageUnits[ShaderType::Fragment];
             break;
         case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
             *params = mCaps.maxFragmentUniformVectors;
             break;
         case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
             *params = mCaps.maxFragmentUniformComponents;
             break;
         case GL_MAX_RENDERBUFFER_SIZE:
@@ -1378,20 +1395,20 @@ void Context::getIntegervImpl(GLenum pna
             break;
         case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
             *params = mCaps.uniformBufferOffsetAlignment;
             break;
         case GL_MAX_UNIFORM_BUFFER_BINDINGS:
             *params = mCaps.maxUniformBufferBindings;
             break;
         case GL_MAX_VERTEX_UNIFORM_BLOCKS:
-            *params = mCaps.maxVertexUniformBlocks;
+            *params = mCaps.maxShaderUniformBlocks[ShaderType::Vertex];
             break;
         case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
-            *params = mCaps.maxFragmentUniformBlocks;
+            *params = mCaps.maxShaderUniformBlocks[ShaderType::Fragment];
             break;
         case GL_MAX_COMBINED_UNIFORM_BLOCKS:
             *params = mCaps.maxCombinedTextureImageUnits;
             break;
         case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
             *params = mCaps.maxVertexOutputComponents;
             break;
         case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
@@ -1517,44 +1534,44 @@ void Context::getIntegervImpl(GLenum pna
             break;
         case GL_MAX_VERTEX_ATOMIC_COUNTERS:
             *params = mCaps.maxVertexAtomicCounters;
             break;
         case GL_MAX_VERTEX_IMAGE_UNIFORMS:
             *params = mCaps.maxVertexImageUniforms;
             break;
         case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS:
-            *params = mCaps.maxVertexShaderStorageBlocks;
+            *params = mCaps.maxShaderStorageBlocks[ShaderType::Vertex];
             break;
         case GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS:
             *params = mCaps.maxFragmentAtomicCounterBuffers;
             break;
         case GL_MAX_FRAGMENT_ATOMIC_COUNTERS:
             *params = mCaps.maxFragmentAtomicCounters;
             break;
         case GL_MAX_FRAGMENT_IMAGE_UNIFORMS:
             *params = mCaps.maxFragmentImageUniforms;
             break;
         case GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS:
-            *params = mCaps.maxFragmentShaderStorageBlocks;
+            *params = mCaps.maxShaderStorageBlocks[ShaderType::Fragment];
             break;
         case GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET:
             *params = mCaps.minProgramTextureGatherOffset;
             break;
         case GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET:
             *params = mCaps.maxProgramTextureGatherOffset;
             break;
         case GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:
             *params = mCaps.maxComputeWorkGroupInvocations;
             break;
         case GL_MAX_COMPUTE_UNIFORM_BLOCKS:
-            *params = mCaps.maxComputeUniformBlocks;
+            *params = mCaps.maxShaderUniformBlocks[ShaderType::Compute];
             break;
         case GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS:
-            *params = mCaps.maxComputeTextureImageUnits;
+            *params = mCaps.maxShaderTextureImageUnits[ShaderType::Compute];
             break;
         case GL_MAX_COMPUTE_SHARED_MEMORY_SIZE:
             *params = mCaps.maxComputeSharedMemorySize;
             break;
         case GL_MAX_COMPUTE_UNIFORM_COMPONENTS:
             *params = mCaps.maxComputeUniformComponents;
             break;
         case GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS:
@@ -1565,17 +1582,17 @@ void Context::getIntegervImpl(GLenum pna
             break;
         case GL_MAX_COMPUTE_IMAGE_UNIFORMS:
             *params = mCaps.maxComputeImageUniforms;
             break;
         case GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS:
             *params = mCaps.maxCombinedComputeUniformComponents;
             break;
         case GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS:
-            *params = mCaps.maxComputeShaderStorageBlocks;
+            *params = mCaps.maxShaderStorageBlocks[ShaderType::Compute];
             break;
         case GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
             *params = mCaps.maxCombinedShaderOutputResources;
             break;
         case GL_MAX_UNIFORM_LOCATIONS:
             *params = mCaps.maxUniformLocations;
             break;
         case GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS:
@@ -1612,17 +1629,17 @@ void Context::getIntegervImpl(GLenum pna
             break;
         case GL_LAYER_PROVOKING_VERTEX_EXT:
             *params = mCaps.layerProvokingVertex;
             break;
         case GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT:
             *params = mCaps.maxGeometryUniformComponents;
             break;
         case GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT:
-            *params = mCaps.maxGeometryUniformBlocks;
+            *params = mCaps.maxShaderUniformBlocks[ShaderType::Geometry];
             break;
         case GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT:
             *params = mCaps.maxCombinedGeometryUniformComponents;
             break;
         case GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT:
             *params = mCaps.maxGeometryInputComponents;
             break;
         case GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT:
@@ -1633,43 +1650,75 @@ void Context::getIntegervImpl(GLenum pna
             break;
         case GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT:
             *params = mCaps.maxGeometryTotalOutputComponents;
             break;
         case GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT:
             *params = mCaps.maxGeometryShaderInvocations;
             break;
         case GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT:
-            *params = mCaps.maxGeometryTextureImageUnits;
+            *params = mCaps.maxShaderTextureImageUnits[ShaderType::Geometry];
             break;
         case GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT:
             *params = mCaps.maxGeometryAtomicCounterBuffers;
             break;
         case GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT:
             *params = mCaps.maxGeometryAtomicCounters;
             break;
         case GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT:
             *params = mCaps.maxGeometryImageUniforms;
             break;
         case GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT:
-            *params = mCaps.maxGeometryShaderStorageBlocks;
+            *params = mCaps.maxShaderStorageBlocks[ShaderType::Geometry];
             break;
         // GLES1 emulation: Caps queries
         case GL_MAX_TEXTURE_UNITS:
             *params = mCaps.maxMultitextureUnits;
             break;
         case GL_MAX_MODELVIEW_STACK_DEPTH:
             *params = mCaps.maxModelviewMatrixStackDepth;
             break;
         case GL_MAX_PROJECTION_STACK_DEPTH:
             *params = mCaps.maxProjectionMatrixStackDepth;
             break;
         case GL_MAX_TEXTURE_STACK_DEPTH:
             *params = mCaps.maxTextureMatrixStackDepth;
             break;
+        // GLES1 emulation: Vertex attribute queries
+        case GL_VERTEX_ARRAY_BUFFER_BINDING:
+        case GL_NORMAL_ARRAY_BUFFER_BINDING:
+        case GL_COLOR_ARRAY_BUFFER_BINDING:
+        case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
+        case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
+            getVertexAttribiv(static_cast<GLuint>(vertexArrayIndex(ParamToVertexArrayType(pname))),
+                              GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, params);
+            break;
+        case GL_VERTEX_ARRAY_STRIDE:
+        case GL_NORMAL_ARRAY_STRIDE:
+        case GL_COLOR_ARRAY_STRIDE:
+        case GL_POINT_SIZE_ARRAY_STRIDE_OES:
+        case GL_TEXTURE_COORD_ARRAY_STRIDE:
+            getVertexAttribiv(static_cast<GLuint>(vertexArrayIndex(ParamToVertexArrayType(pname))),
+                              GL_VERTEX_ATTRIB_ARRAY_STRIDE, params);
+            break;
+        case GL_VERTEX_ARRAY_SIZE:
+        case GL_COLOR_ARRAY_SIZE:
+        case GL_TEXTURE_COORD_ARRAY_SIZE:
+            getVertexAttribiv(static_cast<GLuint>(vertexArrayIndex(ParamToVertexArrayType(pname))),
+                              GL_VERTEX_ATTRIB_ARRAY_SIZE, params);
+            break;
+        case GL_VERTEX_ARRAY_TYPE:
+        case GL_COLOR_ARRAY_TYPE:
+        case GL_NORMAL_ARRAY_TYPE:
+        case GL_POINT_SIZE_ARRAY_TYPE_OES:
+        case GL_TEXTURE_COORD_ARRAY_TYPE:
+            getVertexAttribiv(static_cast<GLuint>(vertexArrayIndex(ParamToVertexArrayType(pname))),
+                              GL_VERTEX_ATTRIB_ARRAY_TYPE, params);
+            break;
+
         default:
             handleError(mGLState.getIntegerv(this, pname, params));
             break;
     }
 }
 
 void Context::getInteger64vImpl(GLenum pname, GLint64 *params)
 {
@@ -1704,17 +1753,17 @@ void Context::getInteger64vImpl(GLenum p
         default:
             UNREACHABLE();
             break;
     }
 }
 
 void Context::getPointerv(GLenum pname, void **params) const
 {
-    mGLState.getPointerv(pname, params);
+    mGLState.getPointerv(this, pname, params);
 }
 
 void Context::getPointervRobustANGLERobust(GLenum pname,
                                            GLsizei bufSize,
                                            GLsizei *length,
                                            void **params)
 {
     UNIMPLEMENTED();
@@ -2415,19 +2464,19 @@ void Context::getProgramInterfaceivRobus
                                           GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei *length,
                                           GLint *params)
 {
     UNIMPLEMENTED();
 }
 
-void Context::handleError(const Error &error)
-{
-    if (error.isError())
+void Context::handleError(const Error &error) const
+{
+    if (ANGLE_UNLIKELY(error.isError()))
     {
         GLenum code = error.getCode();
         mErrors.insert(code);
         if (code == GL_OUT_OF_MEMORY && getWorkarounds().loseContextOnOutOfMemory)
         {
             markContextLost();
         }
 
@@ -2449,27 +2498,27 @@ GLenum Context::getError()
     {
         GLenum error = *mErrors.begin();
         mErrors.erase(mErrors.begin());
         return error;
     }
 }
 
 // NOTE: this function should not assume that this context is current!
-void Context::markContextLost()
+void Context::markContextLost() const
 {
     if (mResetStrategy == GL_LOSE_CONTEXT_ON_RESET_EXT)
     {
         mResetStatus       = GL_UNKNOWN_CONTEXT_RESET_EXT;
         mContextLostForced = true;
     }
     mContextLost = true;
 }
 
-bool Context::isContextLost()
+bool Context::isContextLost() const
 {
     return mContextLost;
 }
 
 GLenum Context::getGraphicsResetStatus()
 {
     // Even if the application doesn't want to know about resets, we want to know
     // as it will allow us to skip all the calls.
@@ -2633,17 +2682,17 @@ void Context::detachVertexArray(GLuint v
 {
     // Vertex array detachment is handled by Context, because 0 is a valid
     // VAO, and a pointer to it must be passed from Context to State at
     // binding time.
 
     // [OpenGL ES 3.0.2] section 2.10 page 43:
     // If a vertex array object that is currently bound is deleted, the binding
     // for that object reverts to zero and the default vertex array becomes current.
-    if (mGLState.removeVertexArrayBinding(vertexArray))
+    if (mGLState.removeVertexArrayBinding(this, vertexArray))
     {
         bindVertexArray(0);
     }
 }
 
 void Context::detachTransformFeedback(GLuint transformFeedback)
 {
     // Transform feedback detachment is handled by Context, because 0 is a valid
@@ -2834,24 +2883,22 @@ void Context::initExtensionStrings()
 
     mExtensionStrings.clear();
     for (const auto &extensionString : mExtensions.getStrings())
     {
         mExtensionStrings.push_back(MakeStaticString(extensionString));
     }
     mExtensionString = mergeExtensionStrings(mExtensionStrings);
 
-    const gl::Extensions &nativeExtensions = mImplementation->getNativeExtensions();
-
     mRequestableExtensionStrings.clear();
     for (const auto &extensionInfo : GetExtensionInfoMap())
     {
         if (extensionInfo.second.Requestable &&
             !(mExtensions.*(extensionInfo.second.ExtensionsMember)) &&
-            nativeExtensions.*(extensionInfo.second.ExtensionsMember))
+            mSupportedExtensions.*(extensionInfo.second.ExtensionsMember))
         {
             mRequestableExtensionStrings.push_back(MakeStaticString(extensionInfo.first));
         }
     }
     mRequestableExtensionString = mergeExtensionStrings(mRequestableExtensionStrings);
 }
 
 const GLubyte *Context::getString(GLenum name) const
@@ -2903,28 +2950,27 @@ size_t Context::getExtensionStringCount(
     return mExtensionStrings.size();
 }
 
 bool Context::isExtensionRequestable(const char *name)
 {
     const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap();
     auto extension                         = extensionInfos.find(name);
 
-    const Extensions &nativeExtensions = mImplementation->getNativeExtensions();
     return extension != extensionInfos.end() && extension->second.Requestable &&
-           nativeExtensions.*(extension->second.ExtensionsMember);
+           mSupportedExtensions.*(extension->second.ExtensionsMember);
 }
 
 void Context::requestExtension(const char *name)
 {
     const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap();
     ASSERT(extensionInfos.find(name) != extensionInfos.end());
     const auto &extension = extensionInfos.at(name);
     ASSERT(extension.Requestable);
-    ASSERT(mImplementation->getNativeExtensions().*(extension.ExtensionsMember));
+    ASSERT(isExtensionRequestable(name));
 
     if (mExtensions.*(extension.ExtensionsMember))
     {
         // Extension already enabled
         return;
     }
 
     mExtensions.*(extension.ExtensionsMember) = true;
@@ -2969,111 +3015,143 @@ bool Context::hasActiveTransformFeedback
         if (pair.second != nullptr && pair.second->hasBoundProgram(program))
         {
             return true;
         }
     }
     return false;
 }
 
-void Context::initCaps(const egl::DisplayExtensions &displayExtensions, bool robustResourceInit)
+Extensions Context::generateSupportedExtensions(const egl::DisplayExtensions &displayExtensions,
+                                                const egl::ClientExtensions &clientExtensions,
+                                                bool robustResourceInit) const
+{
+    Extensions supportedExtensions = mImplementation->getNativeExtensions();
+
+    if (getClientVersion() < ES_2_0)
+    {
+        // Default extensions for GLES1
+        supportedExtensions.pointSizeArray = true;
+        supportedExtensions.textureCubeMap = true;
+    }
+
+    if (getClientVersion() < ES_3_0)
+    {
+        // Disable ES3+ extensions
+        supportedExtensions.colorBufferFloat      = false;
+        supportedExtensions.eglImageExternalEssl3 = false;
+        supportedExtensions.textureNorm16         = false;
+        supportedExtensions.multiview             = false;
+        supportedExtensions.maxViews              = 1u;
+    }
+
+    if (getClientVersion() < ES_3_1)
+    {
+        // Disable ES3.1+ extensions
+        supportedExtensions.geometryShader = false;
+    }
+
+    if (getClientVersion() > ES_2_0)
+    {
+        // FIXME(geofflang): Don't support EXT_sRGB in non-ES2 contexts
+        // supportedExtensions.sRGB = false;
+    }
+
+    // Some extensions are always available because they are implemented in the GL layer.
+    supportedExtensions.bindUniformLocation   = true;
+    supportedExtensions.vertexArrayObject     = true;
+    supportedExtensions.bindGeneratesResource = true;
+    supportedExtensions.clientArrays          = true;
+    supportedExtensions.requestExtension      = true;
+
+    // Enable the no error extension if the context was created with the flag.
+    supportedExtensions.noError = mSkipValidation;
+
+    // Enable surfaceless to advertise we'll have the correct behavior when there is no default FBO
+    supportedExtensions.surfacelessContext = displayExtensions.surfacelessContext;
+
+    // Explicitly enable GL_KHR_debug
+    supportedExtensions.debug                   = true;
+    supportedExtensions.maxDebugMessageLength   = 1024;
+    supportedExtensions.maxDebugLoggedMessages  = 1024;
+    supportedExtensions.maxDebugGroupStackDepth = 1024;
+    supportedExtensions.maxLabelLength          = 1024;
+
+    // Explicitly enable GL_ANGLE_robust_client_memory
+    supportedExtensions.robustClientMemory = true;
+
+    // Determine robust resource init availability from EGL.
+    supportedExtensions.robustResourceInitialization = robustResourceInit;
+
+    // mExtensions.robustBufferAccessBehavior is true only if robust access is true and the backend
+    // supports it.
+    supportedExtensions.robustBufferAccessBehavior =
+        mRobustAccess && supportedExtensions.robustBufferAccessBehavior;
+
+    // Enable the cache control query unconditionally.
+    supportedExtensions.programCacheControl = true;
+
+    // Enable EGL_ANGLE_explicit_context subextensions
+    if (clientExtensions.explicitContext)
+    {
+        // GL_ANGLE_explicit_context_gles1
+        supportedExtensions.explicitContextGles1 = true;
+        // GL_ANGLE_explicit_context
+        supportedExtensions.explicitContext = true;
+    }
+
+    return supportedExtensions;
+}
+
+void Context::initCaps(const egl::DisplayExtensions &displayExtensions,
+                       const egl::ClientExtensions &clientExtensions,
+                       bool robustResourceInit)
 {
     mCaps = mImplementation->getNativeCaps();
 
+    mSupportedExtensions =
+        generateSupportedExtensions(displayExtensions, clientExtensions, robustResourceInit);
+    mExtensions          = mSupportedExtensions;
+
+    mLimitations = mImplementation->getNativeLimitations();
+
     // GLES1 emulation: Initialize caps (Table 6.20 / 6.22 in the ES 1.1 spec)
     if (getClientVersion() < Version(2, 0))
     {
         mCaps.maxMultitextureUnits          = 4;
         mCaps.maxClipPlanes                 = 6;
         mCaps.maxLights                     = 8;
         mCaps.maxModelviewMatrixStackDepth  = Caps::GlobalMatrixStackDepth;
         mCaps.maxProjectionMatrixStackDepth = Caps::GlobalMatrixStackDepth;
         mCaps.maxTextureMatrixStackDepth    = Caps::GlobalMatrixStackDepth;
     }
 
-    mExtensions = mImplementation->getNativeExtensions();
-
-    mLimitations = mImplementation->getNativeLimitations();
-
-    if (getClientVersion() < Version(3, 0))
-    {
-        // Disable ES3+ extensions
-        mExtensions.colorBufferFloat      = false;
-        mExtensions.eglImageExternalEssl3 = false;
-        mExtensions.textureNorm16         = false;
-        mExtensions.multiview             = false;
-        mExtensions.maxViews              = 1u;
-    }
-
-    if (getClientVersion() < ES_3_1)
-    {
-        // Disable ES3.1+ extensions
-        mExtensions.geometryShader = false;
-    }
-
-    if (getClientVersion() > Version(2, 0))
-    {
-        // FIXME(geofflang): Don't support EXT_sRGB in non-ES2 contexts
-        // mExtensions.sRGB = false;
-    }
-
-    // Some extensions are always available because they are implemented in the GL layer.
-    mExtensions.bindUniformLocation   = true;
-    mExtensions.vertexArrayObject     = true;
-    mExtensions.bindGeneratesResource = true;
-    mExtensions.clientArrays          = true;
-    mExtensions.requestExtension      = true;
-
-    // Enable the no error extension if the context was created with the flag.
-    mExtensions.noError = mSkipValidation;
-
-    // Enable surfaceless to advertise we'll have the correct behavior when there is no default FBO
-    mExtensions.surfacelessContext = displayExtensions.surfacelessContext;
-
-    // Explicitly enable GL_KHR_debug
-    mExtensions.debug                   = true;
-    mExtensions.maxDebugMessageLength   = 1024;
-    mExtensions.maxDebugLoggedMessages  = 1024;
-    mExtensions.maxDebugGroupStackDepth = 1024;
-    mExtensions.maxLabelLength          = 1024;
-
-    // Explicitly enable GL_ANGLE_robust_client_memory
-    mExtensions.robustClientMemory = true;
-
-    // Determine robust resource init availability from EGL.
-    mExtensions.robustResourceInitialization = robustResourceInit;
-
-    // mExtensions.robustBufferAccessBehavior is true only if robust access is true and the backend
-    // supports it.
-    mExtensions.robustBufferAccessBehavior =
-        mRobustAccess && mExtensions.robustBufferAccessBehavior;
-
-    // Enable the cache control query unconditionally.
-    mExtensions.programCacheControl = true;
-
     // Apply implementation limits
     LimitCap(&mCaps.maxVertexAttributes, MAX_VERTEX_ATTRIBS);
 
     if (getClientVersion() < ES_3_1)
     {
         mCaps.maxVertexAttribBindings = mCaps.maxVertexAttributes;
     }
     else
     {
         LimitCap(&mCaps.maxVertexAttribBindings, MAX_VERTEX_ATTRIB_BINDINGS);
     }
 
-    LimitCap(&mCaps.maxVertexUniformBlocks, IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS);
+    LimitCap(&mCaps.maxShaderUniformBlocks[ShaderType::Vertex],
+             IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS);
     LimitCap(&mCaps.maxVertexOutputComponents, IMPLEMENTATION_MAX_VARYING_VECTORS * 4);
     LimitCap(&mCaps.maxFragmentInputComponents, IMPLEMENTATION_MAX_VARYING_VECTORS * 4);
 
     // Limit textures as well, so we can use fast bitsets with texture bindings.
     LimitCap(&mCaps.maxCombinedTextureImageUnits, IMPLEMENTATION_MAX_ACTIVE_TEXTURES);
-    LimitCap(&mCaps.maxVertexTextureImageUnits, IMPLEMENTATION_MAX_ACTIVE_TEXTURES / 2);
-    LimitCap(&mCaps.maxTextureImageUnits, IMPLEMENTATION_MAX_ACTIVE_TEXTURES / 2);
+    LimitCap(&mCaps.maxShaderTextureImageUnits[ShaderType::Vertex],
+             IMPLEMENTATION_MAX_ACTIVE_TEXTURES / 2);
+    LimitCap(&mCaps.maxShaderTextureImageUnits[ShaderType::Fragment],
+             IMPLEMENTATION_MAX_ACTIVE_TEXTURES / 2);
 
     mCaps.maxSampleMaskWords = std::min<GLuint>(mCaps.maxSampleMaskWords, MAX_SAMPLE_MASK_WORDS);
 
     // WebGL compatibility
     mExtensions.webglCompatibility = mWebGLContext;
     for (const auto &extensionInfo : GetExtensionInfoMap())
     {
         // If the user has requested that extensions start disabled and they are requestable,
@@ -3167,17 +3245,17 @@ void Context::updateCaps()
         {
             mCaps.compressedTextureFormats.push_back(sizedInternalFormat);
         }
 
         mTextureCaps.insert(sizedInternalFormat, formatCaps);
     }
 
     // If program binary is disabled, blank out the memory cache pointer.
-    if (!mImplementation->getNativeExtensions().getProgramBinary)
+    if (!mSupportedExtensions.getProgramBinary)
     {
         mMemoryProgramCache = nullptr;
     }
 
     // Compute which buffer types are allowed
     mValidBufferBindings.reset();
     mValidBufferBindings.set(BufferBinding::ElementArray);
     mValidBufferBindings.set(BufferBinding::Array);
@@ -3212,16 +3290,21 @@ void Context::initWorkarounds()
 
     // Lose the context upon out of memory error if the application is
     // expecting to watch for those events.
     mWorkarounds.loseContextOnOutOfMemory = (mResetStrategy == GL_LOSE_CONTEXT_ON_RESET_EXT);
 }
 
 Error Context::prepareForDraw()
 {
+    if (mGLES1Renderer)
+    {
+        ANGLE_TRY(mGLES1Renderer->prepareForDraw(this, &mGLState));
+    }
+
     ANGLE_TRY(syncDirtyObjects());
 
     if (isRobustResourceInitEnabled())
     {
         ANGLE_TRY(mGLState.clearUnclearedActiveTextures(this));
         ANGLE_TRY(mGLState.getDrawFramebuffer()->ensureDrawAttachmentsInitialized(this));
     }
 
@@ -3488,38 +3571,17 @@ void Context::framebufferTexture2D(GLenu
                                    GLint level)
 {
     Framebuffer *framebuffer = mGLState.getTargetFramebuffer(target);
     ASSERT(framebuffer);
 
     if (texture != 0)
     {
         Texture *textureObj = getTexture(texture);
-
-        ImageIndex index = ImageIndex::MakeInvalid();
-
-        if (textarget == TextureTarget::_2D)
-        {
-            index = ImageIndex::Make2D(level);
-        }
-        else if (textarget == TextureTarget::Rectangle)
-        {
-            index = ImageIndex::MakeRectangle(level);
-        }
-        else if (textarget == TextureTarget::_2DMultisample)
-        {
-            ASSERT(level == 0);
-            index = ImageIndex::Make2DMultisample();
-        }
-        else
-        {
-            ASSERT(TextureTargetToType(textarget) == TextureType::CubeMap);
-            index = ImageIndex::MakeCube(textarget, level);
-        }
-
+        ImageIndex index    = ImageIndex::MakeFromTarget(textarget, level);
         framebuffer->setAttachment(this, GL_TEXTURE, attachment, index, textureObj);
     }
     else
     {
         framebuffer->resetAttachment(this, attachment);
     }
 
     mGLState.setObjectDirty(target);
@@ -3532,17 +3594,17 @@ void Context::framebufferRenderbuffer(GL
 {
     Framebuffer *framebuffer = mGLState.getTargetFramebuffer(target);
     ASSERT(framebuffer);
 
     if (renderbuffer != 0)
     {
         Renderbuffer *renderbufferObject = getRenderbuffer(renderbuffer);
 
-        framebuffer->setAttachment(this, GL_RENDERBUFFER, attachment, gl::ImageIndex::MakeInvalid(),
+        framebuffer->setAttachment(this, GL_RENDERBUFFER, attachment, gl::ImageIndex(),
                                    renderbufferObject);
     }
     else
     {
         framebuffer->resetAttachment(this, attachment);
     }
 
     mGLState.setObjectDirty(target);
@@ -3555,29 +3617,17 @@ void Context::framebufferTextureLayer(GL
                                       GLint layer)
 {
     Framebuffer *framebuffer = mGLState.getTargetFramebuffer(target);
     ASSERT(framebuffer);
 
     if (texture != 0)
     {
         Texture *textureObject = getTexture(texture);
-
-        ImageIndex index = ImageIndex::MakeInvalid();
-
-        if (textureObject->getType() == TextureType::_3D)
-        {
-            index = ImageIndex::Make3D(level, layer);
-        }
-        else
-        {
-            ASSERT(textureObject->getType() == TextureType::_2DArray);
-            index = ImageIndex::Make2DArray(level, layer);
-        }
-
+        ImageIndex index       = ImageIndex::MakeFromType(textureObject->getType(), level, layer);
         framebuffer->setAttachment(this, GL_TEXTURE, attachment, index, textureObject);
     }
     else
     {
         framebuffer->resetAttachment(this, attachment);
     }
 
     mGLState.setObjectDirty(target);
@@ -3668,19 +3718,17 @@ void Context::invalidateFramebuffer(GLen
                                     const GLenum *attachments)
 {
     // Only sync the FBO
     ANGLE_CONTEXT_TRY(mGLState.syncDirtyObject(this, target));
 
     Framebuffer *framebuffer = mGLState.getTargetFramebuffer(target);
     ASSERT(framebuffer);
 
-    bool complete = false;
-    ANGLE_CONTEXT_TRY(framebuffer->isComplete(this, &complete));
-    if (!complete)
+    if (!framebuffer->isComplete(this))
     {
         return;
     }
 
     handleError(framebuffer->invalidate(this, numAttachments, attachments));
 }
 
 void Context::invalidateSubFramebuffer(GLenum target,
@@ -3692,19 +3740,17 @@ void Context::invalidateSubFramebuffer(G
                                        GLsizei height)
 {
     // Only sync the FBO
     ANGLE_CONTEXT_TRY(mGLState.syncDirtyObject(this, target));
 
     Framebuffer *framebuffer = mGLState.getTargetFramebuffer(target);
     ASSERT(framebuffer);
 
-    bool complete = false;
-    ANGLE_CONTEXT_TRY(framebuffer->isComplete(this, &complete));
-    if (!complete)
+    if (!framebuffer->isComplete(this))
     {
         return;
     }
 
     Rectangle area(x, y, width, height);
     handleError(framebuffer->invalidateSub(this, numAttachments, attachments, area));
 }
 
@@ -4788,17 +4834,17 @@ void Context::getMultisamplefv(GLenum pn
     // According to spec 3.1 Table 20.49: Framebuffer Dependent Values,
     // the sample position should be queried by DRAW_FRAMEBUFFER.
     ANGLE_CONTEXT_TRY(mGLState.syncDirtyObject(this, GL_DRAW_FRAMEBUFFER));
     const Framebuffer *framebuffer = mGLState.getDrawFramebuffer();
 
     switch (pname)
     {
         case GL_SAMPLE_POSITION:
-            handleError(framebuffer->getSamplePosition(index, val));
+            handleError(framebuffer->getSamplePosition(this, index, val));
             break;
         default:
             UNREACHABLE();
     }
 }
 
 void Context::getMultisamplefvRobust(GLenum pname,
                                      GLuint index,
@@ -4943,25 +4989,17 @@ void Context::memoryBarrierByRegion(GLbi
 {
     handleError(mImplementation->memoryBarrierByRegion(this, barriers));
 }
 
 GLenum Context::checkFramebufferStatus(GLenum target)
 {
     Framebuffer *framebuffer = mGLState.getTargetFramebuffer(target);
     ASSERT(framebuffer);
-
-    GLenum status = GL_NONE;
-    Error err     = framebuffer->checkStatus(this, &status);
-    if (err.isError())
-    {
-        handleError(err);
-        return 0;
-    }
-    return status;
+    return framebuffer->checkStatus(this);
 }
 
 void Context::compileShader(GLuint shader)
 {
     Shader *shaderObject = GetValidShader(this, shader);
     if (!shaderObject)
     {
         return;
@@ -5686,17 +5724,17 @@ void Context::deleteQueries(GLsizei n, c
                 queryObject->release(this);
             }
         }
     }
 }
 
 GLboolean Context::isQuery(GLuint id)
 {
-    return (getQuery(id, false, GL_NONE) != nullptr) ? GL_TRUE : GL_FALSE;
+    return (getQuery(id, false, QueryType::InvalidEnum) != nullptr) ? GL_TRUE : GL_FALSE;
 }
 
 void Context::uniformMatrix2x3fv(GLint location,
                                  GLsizei count,
                                  GLboolean transpose,
                                  const GLfloat *value)
 {
     Program *program = mGLState.getProgram();
@@ -7015,16 +7053,34 @@ bool Context::getQueryParameterInfo(GLen
         {
             case GL_ALPHA_TEST_FUNC:
             case GL_CLIENT_ACTIVE_TEXTURE:
             case GL_MATRIX_MODE:
             case GL_MAX_TEXTURE_UNITS:
             case GL_MAX_MODELVIEW_STACK_DEPTH:
             case GL_MAX_PROJECTION_STACK_DEPTH:
             case GL_MAX_TEXTURE_STACK_DEPTH:
+            case GL_VERTEX_ARRAY_STRIDE:
+            case GL_NORMAL_ARRAY_STRIDE:
+            case GL_COLOR_ARRAY_STRIDE:
+            case GL_TEXTURE_COORD_ARRAY_STRIDE:
+            case GL_VERTEX_ARRAY_SIZE:
+            case GL_COLOR_ARRAY_SIZE:
+            case GL_TEXTURE_COORD_ARRAY_SIZE:
+            case GL_VERTEX_ARRAY_TYPE:
+            case GL_NORMAL_ARRAY_TYPE:
+            case GL_COLOR_ARRAY_TYPE:
+            case GL_TEXTURE_COORD_ARRAY_TYPE:
+            case GL_VERTEX_ARRAY_BUFFER_BINDING:
+            case GL_NORMAL_ARRAY_BUFFER_BINDING:
+            case GL_COLOR_ARRAY_BUFFER_BINDING:
+            case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
+            case GL_POINT_SIZE_ARRAY_STRIDE_OES:
+            case GL_POINT_SIZE_ARRAY_TYPE_OES:
+            case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
                 *type      = GL_INT;
                 *numParams = 1;
                 return true;
             case GL_ALPHA_TEST_REF:
                 *type      = GL_FLOAT;
                 *numParams = 1;
                 return true;
             case GL_CURRENT_COLOR:
--- a/gfx/angle/checkout/src/libANGLE/Context.h
+++ b/gfx/angle/checkout/src/libANGLE/Context.h
@@ -17,17 +17,17 @@
 #include "common/MemoryBuffer.h"
 #include "common/angleutils.h"
 #include "libANGLE/Caps.h"
 #include "libANGLE/Constants.h"
 #include "libANGLE/ContextState.h"
 #include "libANGLE/Context_gles_1_0_autogen.h"
 #include "libANGLE/Error.h"
 #include "libANGLE/HandleAllocator.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/RefCountObject.h"
 #include "libANGLE/ResourceMap.h"
 #include "libANGLE/VertexAttribute.h"
 #include "libANGLE/Workarounds.h"
 #include "libANGLE/angletypes.h"
 
 namespace rx
 {
@@ -43,40 +43,42 @@ struct Config;
 class Thread;
 }
 
 namespace gl
 {
 class Buffer;
 class Compiler;
 class FenceNV;
-class Sync;
 class Framebuffer;
+class GLES1Renderer;
 class MemoryProgramCache;
 class Program;
+class ProgramPipeline;
 class Query;
 class Renderbuffer;
 class Sampler;
 class Shader;
+class Sync;
 class Texture;
 class TransformFeedback;
 class VertexArray;
 struct VertexAttribute;
-class ProgramPipeline;
 
 class Context final : angle::NonCopyable
 {
   public:
     Context(rx::EGLImplFactory *implFactory,
             const egl::Config *config,
             const Context *shareContext,
             TextureManager *shareTextures,
             MemoryProgramCache *memoryProgramCache,
             const egl::AttributeMap &attribs,
-            const egl::DisplayExtensions &displayExtensions);
+            const egl::DisplayExtensions &displayExtensions,
+            const egl::ClientExtensions &clientExtensions);
 
     egl::Error onDestroy(const egl::Display *display);
     ~Context();
 
     egl::Error makeCurrent(egl::Display *display, egl::Surface *surface);
     egl::Error releaseSurface(const egl::Display *display);
 
     // These create  and destroy methods are merely pass-throughs to
@@ -146,26 +148,25 @@ class Context final : angle::NonCopyable
                           GLint layer,
                           GLenum access,
                           GLenum format);
     void useProgram(GLuint program);
     void useProgramStages(GLuint pipeline, GLbitfield stages, GLuint program);
     void bindTransformFeedback(GLenum target, GLuint transformFeedbackHandle);
     void bindProgramPipeline(GLuint pipelineHandle);
 
-    void beginQuery(GLenum target, GLuint query);
-    void endQuery(GLenum target);
-    void queryCounter(GLuint id, GLenum target);
-    void getQueryiv(GLenum target, GLenum pname, GLint *params);
-    void getQueryivRobust(GLenum target,
+    void beginQuery(QueryType target, GLuint query);
+    void endQuery(QueryType target);
+    void queryCounter(GLuint id, QueryType target);
+    void getQueryiv(QueryType target, GLenum pname, GLint *params);
+    void getQueryivRobust(QueryType target,
                           GLenum pname,
                           GLsizei bufSize,
                           GLsizei *length,
                           GLint *params);
-
     void getQueryObjectiv(GLuint id, GLenum pname, GLint *params);
     void getQueryObjectivRobust(GLuint id,
                                 GLenum pname,
                                 GLsizei bufSize,
                                 GLsizei *length,
                                 GLint *params);
     void getQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
     void getQueryObjectuivRobust(GLuint id,
@@ -347,17 +348,17 @@ class Context final : angle::NonCopyable
     Buffer *getBuffer(GLuint handle) const;
     FenceNV *getFenceNV(GLuint handle);
     Sync *getSync(GLsync handle) const;
     Texture *getTexture(GLuint handle) const;
     Framebuffer *getFramebuffer(GLuint handle) const;
     Renderbuffer *getRenderbuffer(GLuint handle) const;
     VertexArray *getVertexArray(GLuint handle) const;
     Sampler *getSampler(GLuint handle) const;
-    Query *getQuery(GLuint handle, bool create, GLenum type);
+    Query *getQuery(GLuint handle, bool create, QueryType type);
     Query *getQuery(GLuint handle) const;
     TransformFeedback *getTransformFeedback(GLuint handle) const;
     ProgramPipeline *getProgramPipeline(GLuint handle) const;
 
     void objectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
     void objectPtrLabel(const void *ptr, GLsizei length, const GLchar *label);
     void getObjectLabel(GLenum identifier,
                         GLuint name,
@@ -1369,21 +1370,21 @@ class Context final : angle::NonCopyable
                       GLsizei width,
                       GLsizei height,
                       GLsizei depth);
 
     void memoryBarrier(GLbitfield barriers);
     void memoryBarrierByRegion(GLbitfield barriers);
 
     // Consumes the error.
-    void handleError(const Error &error);
+    void handleError(const Error &error) const;
 
     GLenum getError();
-    void markContextLost();
-    bool isContextLost();
+    void markContextLost() const;
+    bool isContextLost() const;
     GLenum getGraphicsResetStatus();
     bool isResetNotificationEnabled();
 
     const egl::Config *getConfig() const;
     EGLenum getClientType() const;
     EGLenum getRenderBuffer() const;
 
     const GLubyte *getString(GLenum name) const;
@@ -1452,16 +1453,21 @@ class Context final : angle::NonCopyable
     bool isWebGL() const { return mState.isWebGL(); }
     bool isWebGL1() const { return mState.isWebGL1(); }
 
     template <typename T>
     const T &getParams() const;
 
     bool isValidBufferBinding(BufferBinding binding) const { return mValidBufferBindings[binding]; }
 
+    // GLES1 emulation: Renderer level (for validation)
+    int vertexArrayIndex(ClientVertexArrayType type) const;
+    static int TexCoordArrayIndex(unsigned int unit);
+    AttributesMask getVertexArraysAttributeMask() const;
+
   private:
     Error prepareForDraw();
     Error prepareForClear(GLbitfield mask);
     Error prepareForClearBuffer(GLenum buffer, GLint drawbuffer);
     Error syncState();
     Error syncState(const State::DirtyBits &bitMask, const State::DirtyObjects &objectMask);
     Error syncDirtyBits();
     Error syncDirtyBits(const State::DirtyBits &bitMask);
@@ -1482,17 +1488,22 @@ class Context final : angle::NonCopyable
     void detachTransformFeedback(GLuint transformFeedback);
     void detachSampler(GLuint sampler);
     void detachProgramPipeline(GLuint pipeline);
 
     void initRendererString();
     void initVersionStrings();
     void initExtensionStrings();
 
-    void initCaps(const egl::DisplayExtensions &displayExtensions, bool robustResourceInit);
+    Extensions generateSupportedExtensions(const egl::DisplayExtensions &displayExtensions,
+                                           const egl::ClientExtensions &clientExtensions,
+                                           bool robustResourceInit) const;
+    void initCaps(const egl::DisplayExtensions &displayExtensions,
+                  const egl::ClientExtensions &clientExtensions,
+                  bool robustResourceInit);
     void updateCaps();
     void initWorkarounds();
 
     LabeledObject *getLabeledObject(GLenum identifier, GLuint name) const;
     LabeledObject *getLabeledObjectFromPtr(const void *ptr) const;
 
     ContextState mState;
     bool mSkipValidation;
@@ -1509,16 +1520,20 @@ class Context final : angle::NonCopyable
     std::unique_ptr<rx::ContextImpl> mImplementation;
 
     // Caps to use for validation
     Caps mCaps;
     TextureCapsMap mTextureCaps;
     Extensions mExtensions;
     Limitations mLimitations;
 
+    // Extensions supported by the implementation plus extensions that are implemented entirely
+    // within the frontend.
+    Extensions mSupportedExtensions;
+
     // Shader compiler. Lazily initialized hence the mutable value.
     mutable BindingPointer<Compiler> mCompiler;
 
     State mGLState;
 
     const egl::Config *mConfig;
     EGLenum mClientType;
 
@@ -1541,23 +1556,26 @@ class Context final : angle::NonCopyable
     const char *mRendererString;
     const char *mExtensionString;
     std::vector<const char *> mExtensionStrings;
     const char *mRequestableExtensionString;
     std::vector<const char *> mRequestableExtensionStrings;
 
     // Recorded errors
     typedef std::set<GLenum> ErrorSet;
-    ErrorSet mErrors;
+    mutable ErrorSet mErrors;
+
+    // GLES1 renderer state
+    std::unique_ptr<GLES1Renderer> mGLES1Renderer;
 
     // Current/lost context flags
     bool mHasBeenCurrent;
-    bool mContextLost;
-    GLenum mResetStatus;
-    bool mContextLostForced;
+    mutable bool mContextLost;
+    mutable GLenum mResetStatus;
+    mutable bool mContextLostForced;
     GLenum mResetStrategy;
     bool mRobustAccess;
     egl::Surface *mCurrentSurface;
     egl::Display *mCurrentDisplay;
     Framebuffer *mSurfacelessFramebuffer;
     bool mWebGLContext;
     bool mExtensionsEnabled;
     MemoryProgramCache *mMemoryProgramCache;
--- a/gfx/angle/checkout/src/libANGLE/Context_gles_1_0.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Context_gles_1_0.cpp
@@ -6,16 +6,18 @@
 
 // Context_gles_1_0.cpp: Implements the GLES1-specific parts of Context.
 
 #include "libANGLE/Context.h"
 
 #include "common/mathutil.h"
 #include "common/utilities.h"
 
+#include "libANGLE/GLES1Renderer.h"
+
 namespace
 {
 
 angle::Mat4 FixedMatrixToMat4(const GLfixed *m)
 {
     angle::Mat4 matrixAsFloat;
     GLfloat *floatData = matrixAsFloat.data();
 
@@ -82,32 +84,35 @@ void Context::color4ub(GLubyte red, GLub
 void Context::color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
 {
     mGLState.gles1().setCurrentColor(
         {FixedToFloat(red), FixedToFloat(green), FixedToFloat(blue), FixedToFloat(alpha)});
 }
 
 void Context::colorPointer(GLint size, GLenum type, GLsizei stride, const void *ptr)
 {
-    UNIMPLEMENTED();
+    vertexAttribPointer(vertexArrayIndex(ClientVertexArrayType::Color), size, type, GL_FALSE,
+                        stride, ptr);
 }
 
 void Context::depthRangex(GLfixed n, GLfixed f)
 {
     UNIMPLEMENTED();
 }
 
-void Context::disableClientState(GLenum clientState)
+void Context::disableClientState(ClientVertexArrayType clientState)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().setClientStateEnabled(clientState, false);
+    disableVertexAttribArray(vertexArrayIndex(clientState));
 }
 
-void Context::enableClientState(GLenum clientState)
+void Context::enableClientState(ClientVertexArrayType clientState)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().setClientStateEnabled(clientState, true);
+    enableVertexAttribArray(vertexArrayIndex(clientState));
 }
 
 void Context::fogf(GLenum pname, GLfloat param)
 {
     UNIMPLEMENTED();
 }
 
 void Context::fogfv(GLenum pname, const GLfloat *params)
@@ -120,29 +125,26 @@ void Context::fogx(GLenum pname, GLfixed
     UNIMPLEMENTED();
 }
 
 void Context::fogxv(GLenum pname, const GLfixed *param)
 {
     UNIMPLEMENTED();
 }
 
-void Context::frustumf(GLfloat left,
-                       GLfloat right,
-                       GLfloat bottom,
-                       GLfloat top,
-                       GLfloat zNear,
-                       GLfloat zFar)
+void Context::frustumf(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Frustum(l, r, b, t, n, f));
 }
 
 void Context::frustumx(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Frustum(FixedToFloat(l), FixedToFloat(r),
+                                                     FixedToFloat(b), FixedToFloat(t),
+                                                     FixedToFloat(n), FixedToFloat(f)));
 }
 
 void Context::getClipPlanef(GLenum plane, GLfloat *equation)
 {
     UNIMPLEMENTED();
 }
 
 void Context::getClipPlanex(GLenum plane, GLfixed *equation)
@@ -317,32 +319,35 @@ void Context::normal3f(GLfloat nx, GLflo
 
 void Context::normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
 {
     mGLState.gles1().setCurrentNormal({FixedToFloat(nx), FixedToFloat(ny), FixedToFloat(nz)});
 }
 
 void Context::normalPointer(GLenum type, GLsizei stride, const void *ptr)
 {
-    UNIMPLEMENTED();
+    vertexAttribPointer(vertexArrayIndex(ClientVertexArrayType::Normal), 3, type, GL_FALSE, stride,
+                        ptr);
 }
 
 void Context::orthof(GLfloat left,
                      GLfloat right,
                      GLfloat bottom,
                      GLfloat top,
                      GLfloat zNear,
                      GLfloat zFar)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Ortho(left, right, bottom, top, zNear, zFar));
 }
 
 void Context::orthox(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Ortho(FixedToFloat(l), FixedToFloat(r),
+                                                   FixedToFloat(b), FixedToFloat(t),
+                                                   FixedToFloat(n), FixedToFloat(f)));
 }
 
 void Context::pointParameterf(GLenum pname, GLfloat param)
 {
     UNIMPLEMENTED();
 }
 
 void Context::pointParameterfv(GLenum pname, const GLfloat *params)
@@ -382,47 +387,50 @@ void Context::popMatrix()
 
 void Context::pushMatrix()
 {
     mGLState.gles1().pushMatrix();
 }
 
 void Context::rotatef(float angle, float x, float y, float z)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Rotate(angle, angle::Vector3(x, y, z)));
 }
 
 void Context::rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Rotate(
+        FixedToFloat(angle), angle::Vector3(FixedToFloat(x), FixedToFloat(y), FixedToFloat(z))));
 }
 
 void Context::sampleCoveragex(GLclampx value, GLboolean invert)
 {
     UNIMPLEMENTED();
 }
 
 void Context::scalef(float x, float y, float z)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Scale(angle::Vector3(x, y, z)));
 }
 
 void Context::scalex(GLfixed x, GLfixed y, GLfixed z)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(
+        angle::Mat4::Scale(angle::Vector3(FixedToFloat(x), FixedToFloat(y), FixedToFloat(z))));
 }
 
 void Context::shadeModel(GLenum mode)
 {
     UNIMPLEMENTED();
 }
 
 void Context::texCoordPointer(GLint size, GLenum type, GLsizei stride, const void *ptr)
 {
-    UNIMPLEMENTED();
+    vertexAttribPointer(vertexArrayIndex(ClientVertexArrayType::TextureCoord), size, type, GL_FALSE,
+                        stride, ptr);
 }
 
 void Context::texEnvf(GLenum target, GLenum pname, GLfloat param)
 {
     UNIMPLEMENTED();
 }
 
 void Context::texEnvfv(GLenum target, GLenum pname, const GLfloat *params)
@@ -457,27 +465,29 @@ void Context::texParameterx(TextureType 
 
 void Context::texParameterxv(TextureType target, GLenum pname, const GLfixed *params)
 {
     UNIMPLEMENTED();
 }
 
 void Context::translatef(float x, float y, float z)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(angle::Mat4::Translate(angle::Vector3(x, y, z)));
 }
 
 void Context::translatex(GLfixed x, GLfixed y, GLfixed z)
 {
-    UNIMPLEMENTED();
+    mGLState.gles1().multMatrix(
+        angle::Mat4::Translate(angle::Vector3(FixedToFloat(x), FixedToFloat(y), FixedToFloat(z))));
 }
 
 void Context::vertexPointer(GLint size, GLenum type, GLsizei stride, const void *ptr)
 {
-    UNIMPLEMENTED();
+    vertexAttribPointer(vertexArrayIndex(ClientVertexArrayType::Vertex), size, type, GL_FALSE,
+                        stride, ptr);
 }
 
 // GL_OES_draw_texture
 void Context::drawTexf(float x, float y, float z, float width, float height)
 {
     UNIMPLEMENTED();
 }
 
@@ -535,17 +545,18 @@ void Context::matrixIndexPointer(GLint s
 void Context::weightPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
 {
     UNIMPLEMENTED();
 }
 
 // GL_OES_point_size_array
 void Context::pointSizePointer(GLenum type, GLsizei stride, const void *ptr)
 {
-    UNIMPLEMENTED();
+    vertexAttribPointer(vertexArrayIndex(ClientVertexArrayType::PointSize), 1, type, GL_FALSE,
+                        stride, ptr);
 }
 
 // GL_OES_query_matrix
 GLbitfield Context::queryMatrixx(GLfixed *mantissa, GLint *exponent)
 {
     UNIMPLEMENTED();
     return 0;
 }
@@ -591,9 +602,26 @@ void Context::texGenx(GLenum coord, GLen
     UNIMPLEMENTED();
 }
 
 void Context::texGenxv(GLenum coord, GLenum pname, const GLint *params)
 {
     UNIMPLEMENTED();
 }
 
+int Context::vertexArrayIndex(ClientVertexArrayType type) const
+{
+    return mGLES1Renderer->vertexArrayIndex(type, &mGLState);
+}
+
+// static
+int Context::TexCoordArrayIndex(unsigned int unit)
+{
+    return GLES1Renderer::TexCoordArrayIndex(unit);
+}
+
+AttributesMask Context::getVertexArraysAttributeMask() const
+{
+    return mGLES1Renderer->getVertexArraysAttributeMask(&mGLState);
+}
+
+// static
 }  // namespace gl
--- a/gfx/angle/checkout/src/libANGLE/Context_gles_1_0_autogen.h
+++ b/gfx/angle/checkout/src/libANGLE/Context_gles_1_0_autogen.h
@@ -18,18 +18,18 @@
     void clientActiveTexture(GLenum texture);                                              \
     void clipPlanef(GLenum p, const GLfloat *eqn);                                         \
     void clipPlanex(GLenum plane, const GLfixed *equation);                                \
     void color4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);                 \
     void color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);                \
     void color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);                 \
     void colorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer);       \
     void depthRangex(GLfixed n, GLfixed f);                                                \
-    void disableClientState(GLenum array);                                                 \
-    void enableClientState(GLenum array);                                                  \
+    void disableClientState(ClientVertexArrayType arrayPacked);                            \
+    void enableClientState(ClientVertexArrayType arrayPacked);                             \
     void fogf(GLenum pname, GLfloat param);                                                \
     void fogfv(GLenum pname, const GLfloat *params);                                       \
     void fogx(GLenum pname, GLfixed param);                                                \
     void fogxv(GLenum pname, const GLfixed *param);                                        \
     void frustumf(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);       \
     void frustumx(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);       \
     void getClipPlanef(GLenum plane, GLfloat *equation);                                   \
     void getClipPlanex(GLenum plane, GLfixed *equation);                                   \
--- a/gfx/angle/checkout/src/libANGLE/Debug.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Debug.cpp
@@ -92,27 +92,27 @@ const void *Debug::getUserParam() const
 {
     return mCallbackUserParam;
 }
 
 void Debug::insertMessage(GLenum source,
                           GLenum type,
                           GLuint id,
                           GLenum severity,
-                          const std::string &message)
+                          const std::string &message) const
 {
     std::string messageCopy(message);
     insertMessage(source, type, id, severity, std::move(messageCopy));
 }
 
 void Debug::insertMessage(GLenum source,
                           GLenum type,
                           GLuint id,
                           GLenum severity,
-                          std::string &&message)
+                          std::string &&message) const
 {
     if (!isMessageEnabled(source, type, id, severity))
     {
         return;
     }
 
     if (mCallbackFunction != nullptr)
     {
--- a/gfx/angle/checkout/src/libANGLE/Debug.h
+++ b/gfx/angle/checkout/src/libANGLE/Debug.h
@@ -44,22 +44,22 @@ class Debug : angle::NonCopyable
     void setCallback(GLDEBUGPROCKHR callback, const void *userParam);
     GLDEBUGPROCKHR getCallback() const;
     const void *getUserParam() const;
 
     void insertMessage(GLenum source,
                        GLenum type,
                        GLuint id,
                        GLenum severity,
-                       const std::string &message);
+                       const std::string &message) const;
     void insertMessage(GLenum source,
                        GLenum type,
                        GLuint id,
                        GLenum severity,
-                       std::string &&message);
+                       std::string &&message) const;
 
     void setMessageControl(GLenum source,
                            GLenum type,
                            GLenum severity,
                            std::vector<GLuint> &&ids,
                            bool enabled);
     size_t getMessages(GLuint count,
                        GLsizei bufSize,
@@ -114,16 +114,16 @@ class Debug : angle::NonCopyable
         std::string message;
 
         std::vector<Control> controls;
     };
 
     bool mOutputEnabled;
     GLDEBUGPROCKHR mCallbackFunction;
     const void *mCallbackUserParam;
-    std::deque<Message> mMessages;
+    mutable std::deque<Message> mMessages;
     GLuint mMaxLoggedMessages;
     bool mOutputSynchronous;
     std::vector<Group> mGroups;
 };
 }  // namespace gl
 
 #endif  // LIBANGLE_DEBUG_H_
--- a/gfx/angle/checkout/src/libANGLE/Display.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Display.cpp
@@ -494,49 +494,60 @@ Error Display::initialize()
 
     // Populate the Display's EGLDeviceEXT if the Display wasn't created using one
     if (mPlatform != EGL_PLATFORM_DEVICE_EXT)
     {
         if (mDisplayExtensions.deviceQuery)
         {
             std::unique_ptr<rx::DeviceImpl> impl(mImplementation->createDevice());
             ASSERT(impl != nullptr);
-            ANGLE_TRY(impl->initialize());
+            error = impl->initialize();
+            if (error.isError())
+            {
+                ERR() << "Failed to initialize display because device creation failed: "
+                      << error.getMessage();
+                mImplementation->terminate();
+                return error;
+            }
             mDevice = new Device(this, impl.release());
         }
         else
         {
             mDevice = nullptr;
         }
     }
     else
     {
         // For EGL_PLATFORM_DEVICE_EXT, mDevice should always be populated using
         // an external device
         ASSERT(mDevice != nullptr);
     }
 
     mProxyContext.reset(nullptr);
-    gl::Context *proxyContext = new gl::Context(mImplementation, nullptr, nullptr, nullptr, nullptr,
-                                                egl::AttributeMap(), mDisplayExtensions);
+    gl::Context *proxyContext =
+        new gl::Context(mImplementation, nullptr, nullptr, nullptr, nullptr, egl::AttributeMap(),
+                        mDisplayExtensions, GetClientExtensions());
     mProxyContext.reset(proxyContext);
 
     mInitialized = true;
 
     return NoError();
 }
 
 Error Display::terminate()
 {
+    if (!mInitialized)
+    {
+        return NoError();
+    }
+
     ANGLE_TRY(makeCurrent(nullptr, nullptr, nullptr));
 
     mMemoryProgramCache.clear();
 
-    mProxyContext.reset(nullptr);
-
     while (!mContextSet.empty())
     {
         ANGLE_TRY(destroyContext(*mContextSet.begin()));
     }
 
     // The global texture manager should be deleted with the last context that uses it.
     ASSERT(mGlobalTextureShareGroupUsers == 0 && mTextureManager == nullptr);
 
@@ -550,16 +561,19 @@ Error Display::terminate()
         destroyStream(*mStreamSet.begin());
     }
 
     while (!mState.surfaceSet.empty())
     {
         ANGLE_TRY(destroySurface(*mState.surfaceSet.begin()));
     }
 
+    // Allow the EGL objects that are being deleted to use the proxy context.
+    mProxyContext.reset(nullptr);
+
     mConfigSet.clear();
 
     if (mDevice != nullptr && mDevice->getOwningDisplay() != nullptr)
     {
         // Don't delete the device if it was created externally using eglCreateDeviceANGLE
         // We also shouldn't set it to null in case eglInitialize() is called again later
         SafeDelete(mDevice);
     }
@@ -775,17 +789,17 @@ Error Display::createContext(const Confi
     // A program cache size of zero indicates it should be disabled.
     if (mMemoryProgramCache.maxSize() == 0)
     {
         cachePointer = nullptr;
     }
 
     gl::Context *context =
         new gl::Context(mImplementation, configuration, shareContext, shareTextures, cachePointer,
-                        attribs, mDisplayExtensions);
+                        attribs, mDisplayExtensions, GetClientExtensions());
 
     ASSERT(context != nullptr);
     mContextSet.insert(context);
 
     ASSERT(outContext != nullptr);
     *outContext = context;
     return NoError();
 }
@@ -997,16 +1011,17 @@ static ClientExtensions GenerateClientEx
     extensions.platformANGLEVulkan = true;
 #endif
 
 #if defined(ANGLE_USE_X11)
     extensions.x11Visual = true;
 #endif
 
     extensions.clientGetAllProcAddresses = true;
+    extensions.explicitContext           = true;
 
     return extensions;
 }
 
 template <typename T>
 static std::string GenerateExtensionsString(const T &extensions)
 {
     std::vector<std::string> extensionsVector = extensions.getStrings();
--- a/gfx/angle/checkout/src/libANGLE/Error.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Error.cpp
@@ -65,17 +65,17 @@ bool Error::operator==(const Error &othe
 
 bool Error::operator!=(const Error &other) const
 {
     return !(*this == other);
 }
 
 std::ostream &operator<<(std::ostream &os, const Error &err)
 {
-    return gl::FmtHexShort(os, err.getCode());
+    return gl::FmtHex(os, err.getCode());
 }
 
 }  // namespace gl
 
 namespace egl
 {
 
 Error::Error(EGLint errorCode, std::string &&message)
@@ -99,12 +99,12 @@ void Error::createMessageString() const
 const std::string &Error::getMessage() const
 {
     createMessageString();
     return *mMessage;
 }
 
 std::ostream &operator<<(std::ostream &os, const Error &err)
 {
-    return gl::FmtHexShort(os, err.getCode());
+    return gl::FmtHex(os, err.getCode());
 }
 
 }  // namespace egl
--- a/gfx/angle/checkout/src/libANGLE/Error.h
+++ b/gfx/angle/checkout/src/libANGLE/Error.h
@@ -218,45 +218,45 @@ inline Error NoError()
 }
 
 }  // namespace egl
 
 #define ANGLE_CONCAT1(x, y) x##y
 #define ANGLE_CONCAT2(x, y) ANGLE_CONCAT1(x, y)
 #define ANGLE_LOCAL_VAR ANGLE_CONCAT2(_localVar, __LINE__)
 
-#define ANGLE_TRY_TEMPLATE(EXPR, FUNC) \
-    {                                  \
-        auto ANGLE_LOCAL_VAR = EXPR;   \
-        if (ANGLE_LOCAL_VAR.isError()) \
-        {                              \
-            FUNC(ANGLE_LOCAL_VAR);     \
-        }                              \
-    }                                  \
+#define ANGLE_TRY_TEMPLATE(EXPR, FUNC)                 \
+    {                                                  \
+        auto ANGLE_LOCAL_VAR = EXPR;                   \
+        if (ANGLE_UNLIKELY(ANGLE_LOCAL_VAR.isError())) \
+        {                                              \
+            FUNC(ANGLE_LOCAL_VAR);                     \
+        }                                              \
+    }                                                  \
     ANGLE_EMPTY_STATEMENT
 
 #define ANGLE_RETURN(X) return X;
 #define ANGLE_TRY(EXPR) ANGLE_TRY_TEMPLATE(EXPR, ANGLE_RETURN);
 
-#define ANGLE_TRY_RESULT(EXPR, RESULT)         \
-    {                                          \
-        auto ANGLE_LOCAL_VAR = EXPR;           \
-        if (ANGLE_LOCAL_VAR.isError())         \
-        {                                      \
-            return ANGLE_LOCAL_VAR.getError(); \
-        }                                      \
-        RESULT = ANGLE_LOCAL_VAR.getResult();  \
-    }                                          \
+#define ANGLE_TRY_RESULT(EXPR, RESULT)                 \
+    {                                                  \
+        auto ANGLE_LOCAL_VAR = EXPR;                   \
+        if (ANGLE_UNLIKELY(ANGLE_LOCAL_VAR.isError())) \
+        {                                              \
+            return ANGLE_LOCAL_VAR.getError();         \
+        }                                              \
+        RESULT = ANGLE_LOCAL_VAR.getResult();          \
+    }                                                  \
     ANGLE_EMPTY_STATEMENT
 
 // TODO(jmadill): Introduce way to store errors to a const Context.
 #define ANGLE_SWALLOW_ERR(EXPR)                                       \
     {                                                                 \
         auto ANGLE_LOCAL_VAR = EXPR;                                  \
-        if (ANGLE_LOCAL_VAR.isError())                                \
+        if (ANGLE_UNLIKELY(ANGLE_LOCAL_VAR.isError()))                \
         {                                                             \
             ERR() << "Unhandled internal error: " << ANGLE_LOCAL_VAR; \
         }                                                             \
     }                                                                 \
     ANGLE_EMPTY_STATEMENT
 
 #undef ANGLE_LOCAL_VAR
 #undef ANGLE_CONCAT2
--- a/gfx/angle/checkout/src/libANGLE/ErrorStrings.h
+++ b/gfx/angle/checkout/src/libANGLE/ErrorStrings.h
@@ -11,16 +11,17 @@
 
 #define ERRMSG(name, message) \
     static const constexpr char *kError##name = static_cast<const char *>(message);
 #define ANGLE_VALIDATION_ERR(context, error, errorName) \
     context->handleError(error << kError##errorName)
 
 namespace gl
 {
+ERRMSG(BlitDimensionsOutOfRange, "BlitFramebuffer dimensions out of 32-bit integer range.");
 ERRMSG(BufferBoundForTransformFeedback, "Buffer is bound for transform feedback.");
 ERRMSG(BufferNotBound, "A buffer must be bound.");
 ERRMSG(CompressedTextureDimensionsMustMatchData,
        "Compressed texture dimensions must exactly match the dimensions of the data passed in.");
 ERRMSG(CompressedTexturesNotAttachable, "Compressed textures cannot be attached to a framebuffer.");
 ERRMSG(CubemapFacesEqualDimensions, "Each cubemap face must have equal width and height.");
 ERRMSG(CubemapIncomplete,
        "Texture is not cubemap complete. All cubemaps faces must be defined and be the same size.");
@@ -59,16 +60,17 @@ ERRMSG(InternalFormatRequiresTexture2DAr
        "internalformat is an ETC2/EAC format and target is not GL_TEXTURE_2D_ARRAY.");
 ERRMSG(InvalidAttachment, "Invalid Attachment Type.");
 ERRMSG(InvalidBlendEquation, "Invalid blend equation.");
 ERRMSG(InvalidBlendFunction, "Invalid blend function.");
 ERRMSG(InvalidBorder, "Border must be 0.");
 ERRMSG(InvalidBufferTypes, "Invalid buffer target enum.");
 ERRMSG(InvalidBufferUsage, "Invalid buffer usage enum.");
 ERRMSG(InvalidClearMask, "Invalid mask bits.");
+ERRMSG(InvalidClientState, "Invalid client vertex array type.");
 ERRMSG(InvalidCombinedImageUnit,
        "Specified unit must be in [GL_TEXTURE0, GL_TEXTURE0 + GL_MAX_COMBINED_IMAGE_UNITS)");
 ERRMSG(InvalidConstantColor,
        "CONSTANT_COLOR (or ONE_MINUS_CONSTANT_COLOR) and CONSTANT_ALPHA (or "
        "ONE_MINUS_CONSTANT_ALPHA) cannot be used together as source and destination factors in the "
        "blend function.");
 ERRMSG(InvalidCoverMode, "Invalid cover mode.");
 ERRMSG(InvalidCullMode, "Cull mode not recognized.");
@@ -82,29 +84,35 @@ ERRMSG(InvalidDrawModeTransformFeedback,
 ERRMSG(InvalidFence, "Invalid fence object.");
 ERRMSG(InvalidFenceState, "Fence must be set.");
 ERRMSG(InvalidFillMode, "Invalid fill mode.");
 ERRMSG(InvalidFilterTexture, "Texture only supports NEAREST and LINEAR filtering.");
 ERRMSG(InvalidFormat, "Invalid format.");
 ERRMSG(InvalidFramebufferTarget, "Invalid framebuffer target.");
 ERRMSG(InvalidFramebufferTextureLevel, "Mipmap level must be 0 when attaching a texture.");
 ERRMSG(InvalidFramebufferAttachmentParameter, "Invalid parameter name for framebuffer attachment.");
+ERRMSG(InvalidFramebufferLayer,
+       "Framebuffer layer cannot be less than 0 or greater than GL_MAX_FRAMEBUFFER_LAYERS_EXT.");
 ERRMSG(InvalidImageUnit,
        "Image unit cannot be greater than or equal to the value of MAX_IMAGE_UNITS.");
 ERRMSG(InvalidInternalFormat, "Invalid internal format.");
 ERRMSG(InvalidMatrixMode, "Invalid matrix mode.");
 ERRMSG(InvalidMemoryBarrierBit, "Invalid memory barrier bit.");
 ERRMSG(InvalidMipLevel, "Level of detail outside of range.");
 ERRMSG(InvalidMultitextureUnit,
        "Specified unit must be in [GL_TEXTURE0, GL_TEXTURE0 + GL_MAX_TEXTURE_UNITS)");
 ERRMSG(InvalidName, "Invalid name.");
 ERRMSG(InvalidNameCharacters, "Name contains invalid characters.");
 ERRMSG(InvalidPname, "Invalid pname.");
+ERRMSG(InvalidPointerQuery, "Invalid pointer query.");
 ERRMSG(InvalidPrecision, "Invalid or unsupported precision type.");
 ERRMSG(InvalidProgramName, "Program object expected.");
+ERRMSG(InvalidProjectionMatrix,
+       "Invalid projection matrix. Left/right, top/bottom, near/far intervals cannot be zero, and "
+       "near/far cannot be less than zero.");
 ERRMSG(InvalidQueryId, "Invalid query Id.");
 ERRMSG(InvalidQueryTarget, "Invalid query target.");
 ERRMSG(InvalidQueryType, "Invalid query type.");
 ERRMSG(InvalidRange, "Invalid range.");
 ERRMSG(InvalidRenderbufferInternalFormat, "Invalid renderbuffer internalformat.");
 ERRMSG(InvalidRenderbufferTarget, "Invalid renderbuffer target.");
 ERRMSG(InvalidRenderbufferTextureParameter, "Invalid parameter name for renderbuffer attachment.");
 ERRMSG(InvalidRenderbufferWidthHeight,
@@ -120,16 +128,19 @@ ERRMSG(InvalidTarget, "Invalid target.")
 ERRMSG(InvalidTextureFilterParam, "Texture filter not recognized.");
 ERRMSG(InvalidTextureRange, "Cannot be less than 0 or greater than maximum number of textures.");
 ERRMSG(InvalidTextureTarget, "Invalid or unsupported texture target.");
 ERRMSG(InvalidTextureWrap, "Texture wrap mode not recognized.");
 ERRMSG(InvalidType, "Invalid type.");
 ERRMSG(InvalidTypePureInt, "Invalid type, should be integer");
 ERRMSG(InvalidUnpackAlignment, "Unpack alignment must be 1, 2, 4, or 8.");
 ERRMSG(InvalidVertexAttrSize, "Vertex attribute size must be 1, 2, 3, or 4.");
+ERRMSG(InvalidVertexPointerSize, "Size for built-in vertex attribute is outside allowed range.");
+ERRMSG(InvalidVertexPointerStride, "Invalid stride for built-in vertex attribute.");
+ERRMSG(InvalidVertexPointerType, "Invalid type for built-in vertex attribute.");
 ERRMSG(InvalidWidth, "Invalid width.");
 ERRMSG(InvalidWrapModeTexture, "Invalid wrap mode for texture type.");
 ERRMSG(LevelNotZero, "Texture level must be zero.");
 ERRMSG(MatrixStackOverflow, "Current matrix stack is full.");
 ERRMSG(MatrixStackUnderflow, "Current matrix stack has only a single matrix.");
 ERRMSG(MismatchedByteCountType, "Buffer size does not align with data type.");
 ERRMSG(MismatchedFormat, "Format must match internal format.");
 ERRMSG(MismatchedTargetAndFormat, "Invalid texture target and format combination.");
@@ -164,16 +175,17 @@ ERRMSG(OutsideOfBounds, "Parameter outsi
 ERRMSG(ParamOverflow, "The provided parameters overflow with the provided buffer.");
 ERRMSG(PixelDataNotNull, "Pixel data must be null.");
 ERRMSG(PixelDataNull, "Pixel data cannot be null.");
 ERRMSG(PixelPackBufferBoundForTransformFeedback,
        "It is undefined behavior to use a pixel pack buffer that is bound for transform feedback.");
 ERRMSG(
     PixelUnpackBufferBoundForTransformFeedback,
     "It is undefined behavior to use a pixel unpack buffer that is bound for transform feedback.");
+ERRMSG(PointSizeArrayExtensionNotEnabled, "GL_OES_point_size_array not enabled.");
 ERRMSG(ProgramDoesNotExist, "Program doesn't exist.");
 ERRMSG(ProgramNotBound, "A program must be bound.");
 ERRMSG(ProgramNotLinked, "Program not linked.");
 ERRMSG(QueryActive, "Query is active.");
 ERRMSG(QueryExtensionNotEnabled, "Query extension not enabled.");
 ERRMSG(ReadBufferNone, "Read buffer is GL_NONE.");
 ERRMSG(RenderbufferNotBound, "A renderbuffer must be bound.");
 ERRMSG(ResourceMaxTextureSize, "Desired resource size is greater than max texture size.");
@@ -196,16 +208,18 @@ ERRMSG(TransformFeedbackDoesNotExist, "T
 ERRMSG(TypeMismatch,
        "Passed in texture target and format must match the one originally used to define the "
        "texture.");
 ERRMSG(TypeNotUnsignedShortByte, "Only UNSIGNED_SHORT and UNSIGNED_BYTE types are supported.");
 ERRMSG(UniformBufferBoundForTransformFeedback,
        "It is undefined behavior to use an uniform buffer that is bound for transform feedback.");
 ERRMSG(UniformSizeMismatch, "Uniform size does not match uniform method.");
 ERRMSG(UnknownParameter, "Unknown parameter value.");
+ERRMSG(UnsupportedDrawModeForTransformFeedback,
+       "The draw command is unsupported when transform feedback is active and not paused.");
 ERRMSG(VertexArrayNoBuffer, "An enabled vertex array has no buffer.");
 ERRMSG(VertexArrayNoBufferPointer, "An enabled vertex array has no buffer and no pointer.");
 ERRMSG(VertexBufferBoundForTransformFeedback,
        "It is undefined behavior to use a vertex buffer that is bound for transform feedback.");
 ERRMSG(VertexShaderTypeMismatch,
        "Vertex shader input type does not match the type of the bound vertex attribute.")
 ERRMSG(ViewportNegativeSize, "Viewport size cannot be negative.");
 ERRMSG(Webgl2NameLengthLimitExceeded, "Location lengths must not be greater than 1024 characters.");
--- a/gfx/angle/checkout/src/libANGLE/Framebuffer.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Framebuffer.cpp
@@ -141,18 +141,18 @@ bool CheckAttachmentSampleCompleteness(c
     {
         const Texture *texture = attachment.getTexture();
         ASSERT(texture);
 
         const ImageIndex &attachmentImageIndex = attachment.getTextureImageIndex();
 
         // ES3.1 (section 9.4) requires that the value of TEXTURE_FIXED_SAMPLE_LOCATIONS should be
         // the same for all attached textures.
-        bool fixedSampleloc = texture->getFixedSampleLocations(attachmentImageIndex.target,
-                                                               attachmentImageIndex.mipIndex);
+        bool fixedSampleloc = texture->getFixedSampleLocations(
+            attachmentImageIndex.getTarget(), attachmentImageIndex.getLevelIndex());
         if (fixedSampleLocations->valid() && fixedSampleloc != fixedSampleLocations->value())
         {
             return false;
         }
         else
         {
             *fixedSampleLocations = fixedSampleloc;
         }
@@ -256,32 +256,34 @@ FramebufferState::FramebufferState()
       mColorAttachments(1),
       mDrawBufferStates(1, GL_BACK),
       mReadBufferState(GL_BACK),
       mDrawBufferTypeMask(),
       mDefaultWidth(0),
       mDefaultHeight(0),
       mDefaultSamples(0),
       mDefaultFixedSampleLocations(GL_FALSE),
+      mDefaultLayers(0),
       mWebGLDepthStencilConsistent(true)
 {
     ASSERT(mDrawBufferStates.size() > 0);
     mEnabledDrawBuffers.set(0);
 }
 
 FramebufferState::FramebufferState(const Caps &caps)
     : mLabel(),
       mColorAttachments(caps.maxColorAttachments),
       mDrawBufferStates(caps.maxDrawBuffers, GL_NONE),
       mReadBufferState(GL_COLOR_ATTACHMENT0_EXT),
       mDrawBufferTypeMask(),
       mDefaultWidth(0),
       mDefaultHeight(0),
       mDefaultSamples(0),
       mDefaultFixedSampleLocations(GL_FALSE),
+      mDefaultLayers(0),
       mWebGLDepthStencilConsistent(true)
 {
     ASSERT(mDrawBufferStates.size() > 0);
     mDrawBufferStates[0] = GL_COLOR_ATTACHMENT0_EXT;
 }
 
 FramebufferState::~FramebufferState()
 {
@@ -637,38 +639,38 @@ Framebuffer::Framebuffer(const egl::Disp
       mDirtyDepthAttachmentBinding(this, DIRTY_BIT_DEPTH_ATTACHMENT),
       mDirtyStencilAttachmentBinding(this, DIRTY_BIT_STENCIL_ATTACHMENT)
 {
     ASSERT(mImpl != nullptr);
     mDirtyColorAttachmentBindings.emplace_back(this, DIRTY_BIT_COLOR_ATTACHMENT_0);
 
     const Context *proxyContext = display->getProxyContext();
 
-    setAttachmentImpl(proxyContext, GL_FRAMEBUFFER_DEFAULT, GL_BACK, ImageIndex::MakeInvalid(),
-                      surface, FramebufferAttachment::kDefaultNumViews,
+    setAttachmentImpl(proxyContext, GL_FRAMEBUFFER_DEFAULT, GL_BACK, ImageIndex(), surface,
+                      FramebufferAttachment::kDefaultNumViews,
                       FramebufferAttachment::kDefaultBaseViewIndex,
                       FramebufferAttachment::kDefaultMultiviewLayout,
                       FramebufferAttachment::kDefaultViewportOffsets);
 
     if (surface->getConfig()->depthSize > 0)
     {
-        setAttachmentImpl(proxyContext, GL_FRAMEBUFFER_DEFAULT, GL_DEPTH, ImageIndex::MakeInvalid(),
-                          surface, FramebufferAttachment::kDefaultNumViews,
+        setAttachmentImpl(proxyContext, GL_FRAMEBUFFER_DEFAULT, GL_DEPTH, ImageIndex(), surface,
+                          FramebufferAttachment::kDefaultNumViews,
                           FramebufferAttachment::kDefaultBaseViewIndex,
                           FramebufferAttachment::kDefaultMultiviewLayout,
                           FramebufferAttachment::kDefaultViewportOffsets);
     }
 
     if (surface->getConfig()->stencilSize > 0)
     {
-        setAttachmentImpl(
-            proxyContext, GL_FRAMEBUFFER_DEFAULT, GL_STENCIL, ImageIndex::MakeInvalid(), surface,
-            FramebufferAttachment::kDefaultNumViews, FramebufferAttachment::kDefaultBaseViewIndex,
-            FramebufferAttachment::kDefaultMultiviewLayout,
-            FramebufferAttachment::kDefaultViewportOffsets);
+        setAttachmentImpl(proxyContext, GL_FRAMEBUFFER_DEFAULT, GL_STENCIL, ImageIndex(), surface,
+                          FramebufferAttachment::kDefaultNumViews,
+                          FramebufferAttachment::kDefaultBaseViewIndex,
+                          FramebufferAttachment::kDefaultMultiviewLayout,
+                          FramebufferAttachment::kDefaultViewportOffsets);
     }
     mState.mDrawBufferTypeMask.setIndex(getDrawbufferWriteType(0), 0);
 }
 
 Framebuffer::Framebuffer(rx::GLImplFactory *factory)
     : mState(),
       mImpl(factory->createFramebuffer(mState)),
       mId(0),
@@ -695,21 +697,16 @@ void Framebuffer::onDestroy(const Contex
     mState.mStencilAttachment.detach(context);
     mState.mWebGLDepthAttachment.detach(context);
     mState.mWebGLStencilAttachment.detach(context);
     mState.mWebGLDepthStencilAttachment.detach(context);
 
     mImpl->destroy(context);
 }
 
-void Framebuffer::destroyDefault(const egl::Display *display)
-{
-    mImpl->destroyDefault(display);
-}
-
 void Framebuffer::setLabel(const std::string &label)
 {
     mState.mLabel = label;
 }
 
 const std::string &Framebuffer::getLabel() const
 {
     return mState.mLabel;
@@ -976,46 +973,49 @@ bool Framebuffer::usingExtendedDrawBuffe
 void Framebuffer::invalidateCompletenessCache()
 {
     if (mId != 0)
     {
         mCachedStatus.reset();
     }
 }
 
-Error Framebuffer::checkStatus(const Context *context, GLenum *statusOut)
+GLenum Framebuffer::checkStatus(const Context *context)
 {
     // The default framebuffer is always complete except when it is surfaceless in which
     // case it is always unsupported. We return early because the default framebuffer may
     // not be subject to the same rules as application FBOs. ie, it could have 0x0 size.
     if (mId == 0)
     {
         ASSERT(mCachedStatus.valid());
         ASSERT(mCachedStatus.value() == GL_FRAMEBUFFER_COMPLETE ||
                mCachedStatus.value() == GL_FRAMEBUFFER_UNDEFINED_OES);
-        *statusOut = mCachedStatus.value();
-        return NoError();
+        return mCachedStatus.value();
     }
 
     if (hasAnyDirtyBit() || !mCachedStatus.valid())
     {
         mCachedStatus = checkStatusWithGLFrontEnd(context);
 
         if (mCachedStatus.value() == GL_FRAMEBUFFER_COMPLETE)
         {
-            ANGLE_TRY(syncState(context));
+            Error err = syncState(context);
+            if (err.isError())
+            {
+                context->handleError(err);
+                return GetDefaultReturnValue<EntryPoint::CheckFramebufferStatus, GLenum>();
+            }
             if (!mImpl->checkStatus(context))
             {
                 mCachedStatus = GL_FRAMEBUFFER_UNSUPPORTED;
             }
         }
     }
 
-    *statusOut = mCachedStatus.value();
-    return NoError();
+    return mCachedStatus.value();
 }
 
 GLenum Framebuffer::checkStatusWithGLFrontEnd(const Context *context)
 {
     const ContextState &state = context->getContextState();
 
     ASSERT(mId != 0);
 
@@ -1428,22 +1428,19 @@ Error Framebuffer::blit(const Context *c
     ANGLE_TRY(sourceFBO->ensureReadAttachmentInitialized(context, blitMask));
 
     // TODO(jmadill): Only clear if not the full FBO dimensions, and only specified bitmask.
     ANGLE_TRY(ensureDrawAttachmentsInitialized(context));
 
     return mImpl->blit(context, sourceArea, destArea, blitMask, filter);
 }
 
-Error Framebuffer::getSamples(const Context *context, int *samplesOut)
+int Framebuffer::getSamples(const Context *context)
 {
-    bool completeness = false;
-    ANGLE_TRY(isComplete(context, &completeness));
-    *samplesOut = completeness ? getCachedSamples(context) : 0;
-    return NoError();
+    return (isComplete(context) ? getCachedSamples(context) : 0);
 }
 
 int Framebuffer::getCachedSamples(const Context *context)
 {
     ASSERT(mCachedStatus.valid() && mCachedStatus.value() == GL_FRAMEBUFFER_COMPLETE);
 
     // For a complete framebuffer, all attachments must have the same sample count.
     // In this case return the first nonzero sample size.
@@ -1453,19 +1450,19 @@ int Framebuffer::getCachedSamples(const 
         ASSERT(firstNonNullAttachment->isAttached());
         return firstNonNullAttachment->getSamples();
     }
 
     // No attachments found.
     return 0;
 }
 
-Error Framebuffer::getSamplePosition(size_t index, GLfloat *xy) const
+Error Framebuffer::getSamplePosition(const Context *context, size_t index, GLfloat *xy) const
 {
-    ANGLE_TRY(mImpl->getSamplePosition(index, xy));
+    ANGLE_TRY(mImpl->getSamplePosition(context, index, xy));
     return NoError();
 }
 
 bool Framebuffer::hasValidDepthStencil() const
 {
     return mState.getDepthStencilAttachment() != nullptr;
 }
 
@@ -1584,34 +1581,34 @@ void Framebuffer::commitWebGL1DepthStenc
 
     auto getImageIndexIfTextureAttachment = [](const FramebufferAttachment &attachment) {
         if (attachment.type() == GL_TEXTURE)
         {
             return attachment.getTextureImageIndex();
         }
         else
         {
-            return ImageIndex::MakeInvalid();
+            return ImageIndex();
         }
     };
 
     if (mState.mWebGLDepthAttachment.isAttached())
     {
         const auto &depth = mState.mWebGLDepthAttachment;
         setAttachmentImpl(context, depth.type(), GL_DEPTH_ATTACHMENT,
                           getImageIndexIfTextureAttachment(depth), depth.getResource(), numViews,
                           baseViewIndex, multiviewLayout, viewportOffsets);
-        setAttachmentImpl(context, GL_NONE, GL_STENCIL_ATTACHMENT, ImageIndex::MakeInvalid(),
-                          nullptr, numViews, baseViewIndex, multiviewLayout, viewportOffsets);
+        setAttachmentImpl(context, GL_NONE, GL_STENCIL_ATTACHMENT, ImageIndex(), nullptr, numViews,
+                          baseViewIndex, multiviewLayout, viewportOffsets);
     }
     else if (mState.mWebGLStencilAttachment.isAttached())
     {
         const auto &stencil = mState.mWebGLStencilAttachment;
-        setAttachmentImpl(context, GL_NONE, GL_DEPTH_ATTACHMENT, ImageIndex::MakeInvalid(), nullptr,
-                          numViews, baseViewIndex, multiviewLayout, viewportOffsets);
+        setAttachmentImpl(context, GL_NONE, GL_DEPTH_ATTACHMENT, ImageIndex(), nullptr, numViews,
+                          baseViewIndex, multiviewLayout, viewportOffsets);
         setAttachmentImpl(context, stencil.type(), GL_STENCIL_ATTACHMENT,
                           getImageIndexIfTextureAttachment(stencil), stencil.getResource(),
                           numViews, baseViewIndex, multiviewLayout, viewportOffsets);
     }
     else if (mState.mWebGLDepthStencilAttachment.isAttached())
     {
         const auto &depthStencil = mState.mWebGLDepthStencilAttachment;
         setAttachmentImpl(context, depthStencil.type(), GL_DEPTH_ATTACHMENT,
@@ -1620,20 +1617,20 @@ void Framebuffer::commitWebGL1DepthStenc
                           viewportOffsets);
         setAttachmentImpl(context, depthStencil.type(), GL_STENCIL_ATTACHMENT,
                           getImageIndexIfTextureAttachment(depthStencil),
                           depthStencil.getResource(), numViews, baseViewIndex, multiviewLayout,
                           viewportOffsets);
     }
     else
     {
-        setAttachmentImpl(context, GL_NONE, GL_DEPTH_ATTACHMENT, ImageIndex::MakeInvalid(), nullptr,
-                          numViews, baseViewIndex, multiviewLayout, viewportOffsets);
-        setAttachmentImpl(context, GL_NONE, GL_STENCIL_ATTACHMENT, ImageIndex::MakeInvalid(),
-                          nullptr, numViews, baseViewIndex, multiviewLayout, viewportOffsets);
+        setAttachmentImpl(context, GL_NONE, GL_DEPTH_ATTACHMENT, ImageIndex(), nullptr, numViews,
+                          baseViewIndex, multiviewLayout, viewportOffsets);
+        setAttachmentImpl(context, GL_NONE, GL_STENCIL_ATTACHMENT, ImageIndex(), nullptr, numViews,
+                          baseViewIndex, multiviewLayout, viewportOffsets);
     }
 }
 
 void Framebuffer::setAttachmentImpl(const Context *context,
                                     GLenum type,
                                     GLenum binding,
                                     const ImageIndex &textureIndex,
                                     FramebufferAttachmentObject *resource,
@@ -1731,17 +1728,17 @@ void Framebuffer::updateAttachment(const
     mState.mResourceNeedsInit.set(dirtyBit, attachment->initState() == InitState::MayNeedInit);
     onDirtyBinding->bind(resource ? resource->getSubject() : nullptr);
 
     invalidateCompletenessCache();
 }
 
 void Framebuffer::resetAttachment(const Context *context, GLenum binding)
 {
-    setAttachment(context, GL_NONE, binding, ImageIndex::MakeInvalid(), nullptr);
+    setAttachment(context, GL_NONE, binding, ImageIndex(), nullptr);
 }
 
 Error Framebuffer::syncState(const Context *context)
 {
     if (mDirtyBits.any())
     {
         mDirtyBitsGuard = mDirtyBits;
         ANGLE_TRY(mImpl->syncState(context, mDirtyBits));
@@ -1787,22 +1784,19 @@ FramebufferAttachment *Framebuffer::getA
             return &mState.mStencilAttachment;
         default:
             size_t colorIndex = (index - DIRTY_BIT_COLOR_ATTACHMENT_0);
             ASSERT(colorIndex < mState.mColorAttachments.size());
             return &mState.mColorAttachments[colorIndex];
     }
 }
 
-Error Framebuffer::isComplete(const Context *context, bool *completeOut)
+bool Framebuffer::isComplete(const Context *context)
 {
-    GLenum status = GL_NONE;
-    ANGLE_TRY(checkStatus(context, &status));
-    *completeOut = (status == GL_FRAMEBUFFER_COMPLETE);
-    return NoError();
+    return (checkStatus(context) == GL_FRAMEBUFFER_COMPLETE);
 }
 
 bool Framebuffer::formsRenderingFeedbackLoopWith(const State &state) const
 {
     const Program *program = state.getProgram();
 
     // TODO(jmadill): Default framebuffer feedback loops.
     if (mId == 0)
@@ -1874,22 +1868,21 @@ bool Framebuffer::formsCopyingFeedbackLo
     }
 
     const FramebufferAttachment *readAttachment = getReadColorbuffer();
     ASSERT(readAttachment);
 
     if (readAttachment->isTextureWithId(copyTextureID))
     {
         const auto &imageIndex = readAttachment->getTextureImageIndex();
-        if (imageIndex.mipIndex == copyTextureLevel)
+        if (imageIndex.getLevelIndex() == copyTextureLevel)
         {
             // Check 3D/Array texture layers.
-            return imageIndex.layerIndex == ImageIndex::ENTIRE_LEVEL ||
-                   copyTextureLayer == ImageIndex::ENTIRE_LEVEL ||
-                   imageIndex.layerIndex == copyTextureLayer;
+            return !imageIndex.hasLayer() || copyTextureLayer == ImageIndex::kEntireLevel ||
+                   imageIndex.getLayerIndex() == copyTextureLayer;
         }
     }
     return false;
 }
 
 GLint Framebuffer::getDefaultWidth() const
 {
     return mState.getDefaultWidth();
@@ -1905,16 +1898,21 @@ GLint Framebuffer::getDefaultSamples() c
     return mState.getDefaultSamples();
 }
 
 bool Framebuffer::getDefaultFixedSampleLocations() const
 {
     return mState.getDefaultFixedSampleLocations();
 }
 
+GLint Framebuffer::getDefaultLayers() const
+{
+    return mState.getDefaultLayers();
+}
+
 void Framebuffer::setDefaultWidth(GLint defaultWidth)
 {
     mState.mDefaultWidth = defaultWidth;
     mDirtyBits.set(DIRTY_BIT_DEFAULT_WIDTH);
     invalidateCompletenessCache();
 }
 
 void Framebuffer::setDefaultHeight(GLint defaultHeight)
@@ -1933,16 +1931,22 @@ void Framebuffer::setDefaultSamples(GLin
 
 void Framebuffer::setDefaultFixedSampleLocations(bool defaultFixedSampleLocations)
 {
     mState.mDefaultFixedSampleLocations = defaultFixedSampleLocations;
     mDirtyBits.set(DIRTY_BIT_DEFAULT_FIXED_SAMPLE_LOCATIONS);
     invalidateCompletenessCache();
 }
 
+void Framebuffer::setDefaultLayers(GLint defaultLayers)
+{
+    mState.mDefaultLayers = defaultLayers;
+    mDirtyBits.set(DIRTY_BIT_DEFAULT_LAYERS);
+}
+
 GLsizei Framebuffer::getNumViews() const
 {
     return mState.getNumViews();
 }
 
 GLint Framebuffer::getBaseViewIndex() const
 {
     return mState.getBaseViewIndex();
--- a/gfx/angle/checkout/src/libANGLE/Framebuffer.h
+++ b/gfx/angle/checkout/src/libANGLE/Framebuffer.h
@@ -35,23 +35,23 @@ class Display;
 class Surface;
 }
 
 namespace gl
 {
 class Context;
 class ContextState;
 class Framebuffer;
+class ImageIndex;
 class Renderbuffer;
 class State;
 class Texture;
 class TextureCapsMap;
 struct Caps;
 struct Extensions;
-struct ImageIndex;
 struct Rectangle;
 
 class FramebufferState final : angle::NonCopyable
 {
   public:
     FramebufferState();
     explicit FramebufferState(const Caps &caps);
     ~FramebufferState();
@@ -84,16 +84,17 @@ class FramebufferState final : angle::No
 
     const FramebufferAttachment *getDrawBuffer(size_t drawBufferIdx) const;
     size_t getDrawBufferCount() const;
 
     GLint getDefaultWidth() const { return mDefaultWidth; };
     GLint getDefaultHeight() const { return mDefaultHeight; };
     GLint getDefaultSamples() const { return mDefaultSamples; };
     bool getDefaultFixedSampleLocations() const { return mDefaultFixedSampleLocations; };
+    GLint getDefaultLayers() const { return mDefaultLayers; }
 
     bool hasDepth() const;
     bool hasStencil() const;
 
     GLenum getMultiviewLayout() const;
     GLsizei getNumViews() const;
     const std::vector<Offset> *getViewportOffsets() const;
     GLint getBaseViewIndex() const;
@@ -115,16 +116,17 @@ class FramebufferState final : angle::No
     GLenum mReadBufferState;
     DrawBufferMask mEnabledDrawBuffers;
     ComponentTypeMask mDrawBufferTypeMask;
 
     GLint mDefaultWidth;
     GLint mDefaultHeight;
     GLint mDefaultSamples;
     bool mDefaultFixedSampleLocations;
+    GLint mDefaultLayers;
 
     // It's necessary to store all this extra state so we can restore attachments
     // when DEPTH_STENCIL/DEPTH/STENCIL is unbound in WebGL 1.
     FramebufferAttachment mWebGLDepthStencilAttachment;
     FramebufferAttachment mWebGLDepthAttachment;
     FramebufferAttachment mWebGLStencilAttachment;
     bool mWebGLDepthStencilConsistent;
 
@@ -139,17 +141,16 @@ class Framebuffer final : public angle::
     Framebuffer(const Caps &caps, rx::GLImplFactory *factory, GLuint id);
     // Constructor to build default framebuffers for a surface
     Framebuffer(const egl::Display *display, egl::Surface *surface);
     // Constructor to build a fake default framebuffer when surfaceless
     Framebuffer(rx::GLImplFactory *factory);
 
     ~Framebuffer() override;
     void onDestroy(const Context *context);
-    void destroyDefault(const egl::Display *display);
 
     void setLabel(const std::string &label) override;
     const std::string &getLabel() const override;
 
     rx::FramebufferImpl *getImplementation() const { return mImpl; }
 
     GLuint id() const { return mId; }
 
@@ -209,38 +210,40 @@ class Framebuffer final : public angle::
 
     size_t getNumColorBuffers() const;
     bool hasDepth() const;
     bool hasStencil() const;
 
     bool usingExtendedDrawBuffers() const;
 
     // This method calls checkStatus.
-    Error getSamples(const Context *context, int *samplesOut);
+    int getSamples(const Context *context);
 
-    Error getSamplePosition(size_t index, GLfloat *xy) const;
+    Error getSamplePosition(const Context *context, size_t index, GLfloat *xy) const;
 
     GLint getDefaultWidth() const;
     GLint getDefaultHeight() const;
     GLint getDefaultSamples() const;
     bool getDefaultFixedSampleLocations() const;
+    GLint getDefaultLayers() const;
     void setDefaultWidth(GLint defaultWidth);
     void setDefaultHeight(GLint defaultHeight);
     void setDefaultSamples(GLint defaultSamples);
     void setDefaultFixedSampleLocations(bool defaultFixedSampleLocations);
+    void setDefaultLayers(GLint defaultLayers);
 
     void invalidateCompletenessCache();
 
-    Error checkStatus(const Context *context, GLenum *statusOut);
+    GLenum checkStatus(const Context *context);
 
     // For when we don't want to check completeness in getSamples().
     int getCachedSamples(const Context *context);
 
     // Helper for checkStatus == GL_FRAMEBUFFER_COMPLETE.
-    Error isComplete(const Context *context, bool *completeOut);
+    bool isComplete(const Context *context);
 
     bool hasValidDepthStencil() const;
 
     Error discard(const Context *context, size_t count, const GLenum *attachments);
     Error invalidate(const Context *context, size_t count, const GLenum *attachments);
     Error invalidateSub(const Context *context,
                         size_t count,
                         const GLenum *attachments,
@@ -289,16 +292,17 @@ class Framebuffer final : public angle::
         DIRTY_BIT_DEPTH_ATTACHMENT = DIRTY_BIT_COLOR_ATTACHMENT_MAX,
         DIRTY_BIT_STENCIL_ATTACHMENT,
         DIRTY_BIT_DRAW_BUFFERS,
         DIRTY_BIT_READ_BUFFER,
         DIRTY_BIT_DEFAULT_WIDTH,
         DIRTY_BIT_DEFAULT_HEIGHT,
         DIRTY_BIT_DEFAULT_SAMPLES,
         DIRTY_BIT_DEFAULT_FIXED_SAMPLE_LOCATIONS,
+        DIRTY_BIT_DEFAULT_LAYERS,
         DIRTY_BIT_UNKNOWN,
         DIRTY_BIT_MAX = DIRTY_BIT_UNKNOWN
     };
 
     using DirtyBits = angle::BitSet<DIRTY_BIT_MAX>;
     bool hasAnyDirtyBit() const { return mDirtyBits.any(); }
 
     Error syncState(const Context *context);
--- a/gfx/angle/checkout/src/libANGLE/FramebufferAttachment.cpp
+++ b/gfx/angle/checkout/src/libANGLE/FramebufferAttachment.cpp
@@ -48,19 +48,17 @@ const GLint FramebufferAttachment::kDefa
 const GLint FramebufferAttachment::kDefaultViewportOffsets[2] = {0};
 
 std::vector<Offset> FramebufferAttachment::GetDefaultViewportOffsetVector()
 {
     return TransformViewportOffsetArrayToVectorOfOffsets(
         FramebufferAttachment::kDefaultViewportOffsets, FramebufferAttachment::kDefaultNumViews);
 }
 
-FramebufferAttachment::Target::Target()
-    : mBinding(GL_NONE),
-      mTextureIndex(ImageIndex::MakeInvalid())
+FramebufferAttachment::Target::Target() : mBinding(GL_NONE), mTextureIndex()
 {
 }
 
 FramebufferAttachment::Target::Target(GLenum binding, const ImageIndex &imageIndex)
     : mBinding(binding),
       mTextureIndex(imageIndex)
 {
 }
@@ -231,31 +229,31 @@ const ImageIndex &FramebufferAttachment:
     return mTarget.textureIndex();
 }
 
 TextureTarget FramebufferAttachment::cubeMapFace() const
 {
     ASSERT(mType == GL_TEXTURE);
 
     const auto &index = mTarget.textureIndex();
-    return index.type == TextureType::CubeMap ? index.target : TextureTarget::InvalidEnum;
+    return index.getType() == TextureType::CubeMap ? index.getTarget() : TextureTarget::InvalidEnum;
 }
 
 GLint FramebufferAttachment::mipLevel() const
 {
     ASSERT(type() == GL_TEXTURE);
-    return mTarget.textureIndex().mipIndex;
+    return mTarget.textureIndex().getLevelIndex();
 }
 
 GLint FramebufferAttachment::layer() const
 {
     ASSERT(mType == GL_TEXTURE);
 
-    const auto &index = mTarget.textureIndex();
-    return index.hasLayer() ? index.layerIndex : 0;
+    const gl::ImageIndex &index = mTarget.textureIndex();
+    return (index.has3DLayer() ? index.getLayerIndex() : 0);
 }
 
 GLsizei FramebufferAttachment::getNumViews() const
 {
     return mNumViews;
 }
 
 GLenum FramebufferAttachment::getMultiviewLayout() const
@@ -365,20 +363,20 @@ angle::Subject *FramebufferAttachmentObj
 
 Error FramebufferAttachmentObject::initializeContents(const Context *context,
                                                       const ImageIndex &imageIndex)
 {
     ASSERT(context->isRobustResourceInitEnabled());
 
     // Because gl::Texture cannot support tracking individual layer dirtiness, we only handle
     // initializing entire mip levels for 2D array textures.
-    if (imageIndex.type == TextureType::_2DArray && imageIndex.hasLayer())
+    if (imageIndex.getType() == TextureType::_2DArray && imageIndex.hasLayer())
     {
-        ImageIndex fullMipIndex = imageIndex;
-        fullMipIndex.layerIndex = ImageIndex::ENTIRE_LEVEL;
+        ImageIndex fullMipIndex =
+            ImageIndex::Make2DArray(imageIndex.getLevelIndex(), ImageIndex::kEntireLevel);
         return getAttachmentImpl()->initializeContents(context, fullMipIndex);
     }
     else
     {
         return getAttachmentImpl()->initializeContents(context, imageIndex);
     }
 }
 
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/GLES1Renderer.cpp
@@ -0,0 +1,410 @@
+//
+// 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.
+//
+
+// GLES1Renderer.cpp: Implements the GLES1Renderer renderer.
+
+#include "libANGLE/GLES1Renderer.h"
+
+#include <string.h>
+#include <iterator>
+#include <sstream>
+#include <vector>
+
+#include "libANGLE/Context.h"
+#include "libANGLE/Program.h"
+#include "libANGLE/ResourceManager.h"
+#include "libANGLE/Shader.h"
+#include "libANGLE/State.h"
+#include "libANGLE/renderer/ContextImpl.h"
+
+namespace
+{
+#include "libANGLE/GLES1Shaders.inc"
+}  // anonymous namespace
+
+namespace gl
+{
+
+GLES1Renderer::GLES1Renderer() : mRendererProgramInitialized(false)
+{
+}
+
+void GLES1Renderer::onDestroy(Context *context, State *state)
+{
+    if (mRendererProgramInitialized)
+    {
+        state->setProgram(context, 0);
+
+        mShaderPrograms->deleteProgram(context, mProgramState.program);
+        mShaderPrograms->release(context);
+        mShaderPrograms             = nullptr;
+        mRendererProgramInitialized = false;
+    }
+}
+
+GLES1Renderer::~GLES1Renderer() = default;
+
+Error GLES1Renderer::prepareForDraw(Context *context, State *glState)
+{
+    ANGLE_TRY(initializeRendererProgram(context, glState));
+
+    const GLES1State &gles1State = glState->gles1();
+
+    Program *programObject = getProgram(mProgramState.program);
+
+    GLES1UniformBuffers &uniformBuffers = mUniformBuffers;
+
+    if (!gles1State.isClientStateEnabled(ClientVertexArrayType::Normal))
+    {
+        const angle::Vector3 normal = gles1State.getCurrentNormal();
+        context->vertexAttrib3f(kNormalAttribIndex, normal.x(), normal.y(), normal.z());
+    }
+
+    if (!gles1State.isClientStateEnabled(ClientVertexArrayType::Color))
+    {
+        const ColorF color = gles1State.getCurrentColor();
+        context->vertexAttrib4f(kColorAttribIndex, color.red, color.green, color.blue, color.alpha);
+    }
+
+    if (!gles1State.isClientStateEnabled(ClientVertexArrayType::PointSize))
+    {
+        GLfloat pointSize = gles1State.mPointParameters.pointSize;
+        context->vertexAttrib1f(kPointSizeAttribIndex, pointSize);
+    }
+
+    for (int i = 0; i < kTexUnitCount; i++)
+    {
+        if (!gles1State.mTexCoordArrayEnabled[i])
+        {
+            const TextureCoordF texcoord = gles1State.getCurrentTextureCoords(i);
+            context->vertexAttrib4f(kTextureCoordAttribIndexBase + i, texcoord.s, texcoord.t,
+                                    texcoord.r, texcoord.q);
+        }
+    }
+
+    {
+        angle::Mat4 proj = gles1State.mProjectionMatrices.back();
+        if (mProgramState.projMatrixLoc != -1)
+        {
+            programObject->setUniformMatrix4fv(mProgramState.projMatrixLoc, 1, GL_FALSE,
+                                               proj.data());
+        }
+
+        angle::Mat4 modelview = gles1State.mModelviewMatrices.back();
+        if (mProgramState.modelviewMatrixLoc != -1)
+        {
+            programObject->setUniformMatrix4fv(mProgramState.modelviewMatrixLoc, 1, GL_FALSE,
+                                               modelview.data());
+        }
+
+        angle::Mat4 modelviewInvTr = modelview.transpose().inverse();
+        if (mProgramState.modelviewInvTrLoc != -1)
+        {
+            programObject->setUniformMatrix4fv(mProgramState.modelviewInvTrLoc, 1, GL_FALSE,
+                                               modelviewInvTr.data());
+        }
+
+        Mat4Uniform *textureMatrixBuffer = uniformBuffers.textureMatrices.data();
+
+        for (int i = 0; i < kTexUnitCount; i++)
+        {
+            angle::Mat4 textureMatrix = gles1State.mTextureMatrices[i].back();
+            memcpy(textureMatrixBuffer + i, textureMatrix.data(), sizeof(Mat4Uniform));
+        }
+
+        if (mProgramState.textureMatrixLoc != -1)
+        {
+            programObject->setUniformMatrix4fv(mProgramState.textureMatrixLoc, 4, GL_FALSE,
+                                               (float *)uniformBuffers.textureMatrices.data());
+        }
+    }
+
+    {
+        std::array<GLint, kTexUnitCount> &tex2DEnables   = uniformBuffers.tex2DEnables;
+        std::array<GLint, kTexUnitCount> &texCubeEnables = uniformBuffers.texCubeEnables;
+
+        for (int i = 0; i < kTexUnitCount; i++)
+        {
+            // GL_OES_cube_map allows only one of TEXTURE_2D / TEXTURE_CUBE_MAP
+            // to be enabled per unit, thankfully. From the extension text:
+            //
+            //  --  Section 3.8.10 "Texture Application"
+            //
+            //      Replace the beginning sentences of the first paragraph (page 138)
+            //      with:
+            //
+            //      "Texturing is enabled or disabled using the generic Enable
+            //      and Disable commands, respectively, with the symbolic constants
+            //      TEXTURE_2D or TEXTURE_CUBE_MAP_OES to enable the two-dimensional or cube
+            //      map texturing respectively.  If the cube map texture and the two-
+            //      dimensional texture are enabled, then cube map texturing is used.  If
+            //      texturing is disabled, a rasterized fragment is passed on unaltered to the
+            //      next stage of the GL (although its texture coordinates may be discarded).
+            //      Otherwise, a texture value is found according to the parameter values of
+            //      the currently bound texture image of the appropriate dimensionality.
+
+            texCubeEnables[i] = gles1State.isTextureTargetEnabled(i, TextureType::CubeMap);
+            tex2DEnables[i] =
+                !texCubeEnables[i] && (gles1State.isTextureTargetEnabled(i, TextureType::_2D));
+        }
+
+        if (mProgramState.enableTexture2DLoc != -1)
+        {
+            programObject->setUniform1iv(mProgramState.enableTexture2DLoc, kTexUnitCount,
+                                         tex2DEnables.data());
+        }
+        if (mProgramState.enableTextureCubeMapLoc != -1)
+        {
+            programObject->setUniform1iv(mProgramState.enableTextureCubeMapLoc, kTexUnitCount,
+                                         texCubeEnables.data());
+        }
+
+        GLint flatShading = gles1State.mShadeModel == ShadingModel::Flat;
+
+        if (mProgramState.shadeModelFlatLoc != -1)
+        {
+            programObject->setUniform1iv(mProgramState.shadeModelFlatLoc, 1, &flatShading);
+        }
+    }
+
+    // None of those are changes in sampler, so there is no need to set the GL_PROGRAM dirty.
+    // Otherwise, put the dirtying here.
+
+    return NoError();
+}
+
+int GLES1Renderer::vertexArrayIndex(ClientVertexArrayType type, const State *glState) const
+{
+    switch (type)
+    {
+        case ClientVertexArrayType::Vertex:
+            return kVertexAttribIndex;
+        case ClientVertexArrayType::Normal:
+            return kNormalAttribIndex;
+        case ClientVertexArrayType::Color:
+            return kColorAttribIndex;
+        case ClientVertexArrayType::PointSize:
+            return kPointSizeAttribIndex;
+        case ClientVertexArrayType::TextureCoord:
+            return kTextureCoordAttribIndexBase + glState->gles1().getClientTextureUnit();
+        default:
+            UNREACHABLE();
+            return 0;
+    }
+}
+
+// static
+int GLES1Renderer::TexCoordArrayIndex(unsigned int unit)
+{
+    return kTextureCoordAttribIndexBase + unit;
+}
+
+AttributesMask GLES1Renderer::getVertexArraysAttributeMask(const State *glState) const
+{
+    AttributesMask res;
+    const GLES1State &gles1 = glState->gles1();
+
+    ClientVertexArrayType nonTexcoordArrays[] = {
+        ClientVertexArrayType::Vertex, ClientVertexArrayType::Normal, ClientVertexArrayType::Color,
+        ClientVertexArrayType::PointSize,
+    };
+
+    for (const ClientVertexArrayType attrib : nonTexcoordArrays)
+    {
+        res.set(vertexArrayIndex(attrib, glState), gles1.isClientStateEnabled(attrib));
+    }
+
+    for (unsigned int i = 0; i < kTexUnitCount; i++)
+    {
+        res.set(TexCoordArrayIndex(i), gles1.isTexCoordArrayEnabled(i));
+    }
+
+    return res;
+}
+
+Shader *GLES1Renderer::getShader(GLuint handle) const
+{
+    return mShaderPrograms->getShader(handle);
+}
+
+Program *GLES1Renderer::getProgram(GLuint handle) const
+{
+    return mShaderPrograms->getProgram(handle);
+}
+
+Error GLES1Renderer::compileShader(Context *context,
+                                   ShaderType shaderType,
+                                   const char *src,
+                                   GLuint *shaderOut)
+{
+    rx::ContextImpl *implementation = context->getImplementation();
+    const Limitations &limitations  = implementation->getNativeLimitations();
+
+    GLuint shader = mShaderPrograms->createShader(implementation, limitations, shaderType);
+
+    Shader *shaderObject = getShader(shader);
+
+    if (!shaderObject)
+        return InternalError();
+
+    shaderObject->setSource(1, &src, nullptr);
+    shaderObject->compile(context);
+
+    *shaderOut = shader;
+
+    if (!shaderObject->isCompiled(context))
+    {
+        GLint infoLogLength = shaderObject->getInfoLogLength(context);
+        std::vector<char> infoLog(infoLogLength, 0);
+        shaderObject->getInfoLog(context, infoLogLength - 1, nullptr, infoLog.data());
+        fprintf(stderr, "GLES1Renderer::%s: Info log: %s\n", __func__, infoLog.data());
+        return InternalError() << "GLES1Renderer shader compile failed. Source: " << src
+                               << " Info log: " << infoLog.data();
+    }
+
+    return NoError();
+}
+
+Error GLES1Renderer::linkProgram(Context *context,
+                                 State *glState,
+                                 GLuint vertexShader,
+                                 GLuint fragmentShader,
+                                 const std::unordered_map<GLint, std::string> &attribLocs,
+                                 GLuint *programOut)
+{
+    GLuint program = mShaderPrograms->createProgram(context->getImplementation());
+
+    Program *programObject = getProgram(program);
+
+    if (!programObject)
+    {
+        return InternalError();
+    }
+
+    *programOut = program;
+
+    programObject->attachShader(getShader(vertexShader));
+    programObject->attachShader(getShader(fragmentShader));
+
+    for (auto it : attribLocs)
+    {
+        GLint index             = it.first;
+        const std::string &name = it.second;
+        programObject->bindAttributeLocation(index, name.c_str());
+    }
+
+    ANGLE_TRY(programObject->link(context));
+
+    glState->onProgramExecutableChange(programObject);
+
+    if (!programObject->isLinked())
+    {
+        GLint infoLogLength = programObject->getInfoLogLength();
+        std::vector<char> infoLog(infoLogLength, 0);
+        programObject->getInfoLog(infoLogLength - 1, nullptr, infoLog.data());
+        return InternalError() << "GLES1Renderer program link failed. Info log: " << infoLog.data();
+    }
+
+    programObject->detachShader(context, getShader(vertexShader));
+    programObject->detachShader(context, getShader(fragmentShader));
+
+    return NoError();
+}
+
+Error GLES1Renderer::initializeRendererProgram(Context *context, State *glState)
+{
+    if (mRendererProgramInitialized)
+    {
+        return NoError();
+    }
+
+    mShaderPrograms = new ShaderProgramManager();
+
+    GLuint vertexShader;
+    GLuint fragmentShader;
+
+    ANGLE_TRY(compileShader(context, ShaderType::Vertex, kGLES1DrawVShader, &vertexShader));
+
+    std::stringstream fragmentStream;
+    fragmentStream << kGLES1DrawFShaderHeader;
+    fragmentStream << kGLES1DrawFShaderUniformDefs;
+    fragmentStream << kGLES1DrawFShaderFunctions;
+    fragmentStream << kGLES1DrawFShaderMain;
+
+    ANGLE_TRY(compileShader(context, ShaderType::Fragment, fragmentStream.str().c_str(),
+                            &fragmentShader));
+
+    std::unordered_map<GLint, std::string> attribLocs;
+
+    attribLocs[(GLint)kVertexAttribIndex]    = "pos";
+    attribLocs[(GLint)kNormalAttribIndex]    = "normal";
+    attribLocs[(GLint)kColorAttribIndex]     = "color";
+    attribLocs[(GLint)kPointSizeAttribIndex] = "pointsize";
+
+    for (int i = 0; i < kTexUnitCount; i++)
+    {
+        std::stringstream ss;
+        ss << "texcoord" << i;
+        attribLocs[kTextureCoordAttribIndexBase + i] = ss.str();
+    }
+
+    ANGLE_TRY(linkProgram(context, glState, vertexShader, fragmentShader, attribLocs,
+                          &mProgramState.program));
+
+    mShaderPrograms->deleteShader(context, vertexShader);
+    mShaderPrograms->deleteShader(context, fragmentShader);
+
+    Program *programObject = getProgram(mProgramState.program);
+
+    mProgramState.projMatrixLoc      = programObject->getUniformLocation("projection");
+    mProgramState.modelviewMatrixLoc = programObject->getUniformLocation("modelview");
+    mProgramState.textureMatrixLoc   = programObject->getUniformLocation("texture_matrix");
+    mProgramState.modelviewInvTrLoc  = programObject->getUniformLocation("modelview_invtr");
+
+    for (int i = 0; i < kTexUnitCount; i++)
+    {
+        std::stringstream ss2d;
+        std::stringstream sscube;
+
+        ss2d << "tex_sampler" << i;
+        sscube << "tex_cube_sampler" << i;
+
+        mProgramState.tex2DSamplerLocs[i] = programObject->getUniformLocation(ss2d.str().c_str());
+        mProgramState.texCubeSamplerLocs[i] =
+            programObject->getUniformLocation(sscube.str().c_str());
+    }
+
+    mProgramState.shadeModelFlatLoc = programObject->getUniformLocation("shade_model_flat");
+
+    mProgramState.enableTexture2DLoc = programObject->getUniformLocation("enable_texture_2d");
+    mProgramState.enableTextureCubeMapLoc =
+        programObject->getUniformLocation("enable_texture_cube_map");
+
+    glState->setProgram(context, programObject);
+
+    for (int i = 0; i < kTexUnitCount; i++)
+    {
+
+        if (mProgramState.tex2DSamplerLocs[i] != -1)
+        {
+            GLint val = i;
+            programObject->setUniform1iv(mProgramState.tex2DSamplerLocs[i], 1, &val);
+        }
+
+        if (mProgramState.texCubeSamplerLocs[i] != -1)
+        {
+            GLint val = i + kTexUnitCount;
+            programObject->setUniform1iv(mProgramState.texCubeSamplerLocs[i], 1, &val);
+        }
+    }
+
+    glState->setObjectDirty(GL_PROGRAM);
+
+    mRendererProgramInitialized = true;
+    return NoError();
+}
+
+}  // namespace gl
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/GLES1Renderer.h
@@ -0,0 +1,104 @@
+//
+// 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.
+//
+
+// GLES1Renderer.h: Defines GLES1 emulation rendering operations on top of a GLES3
+// context. Used by Context.h.
+
+#ifndef LIBANGLE_GLES1_RENDERER_H_
+#define LIBANGLE_GLES1_RENDERER_H_
+
+#include "angle_gl.h"
+#include "common/angleutils.h"
+#include "libANGLE/angletypes.h"
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+
+namespace gl
+{
+
+class Context;
+class Program;
+class State;
+class Shader;
+class ShaderProgramManager;
+
+class GLES1Renderer final : angle::NonCopyable
+{
+  public:
+    GLES1Renderer();
+    ~GLES1Renderer();
+
+    void onDestroy(Context *context, State *state);
+
+    Error prepareForDraw(Context *context, State *glState);
+
+    int vertexArrayIndex(ClientVertexArrayType type, const State *glState) const;
+    static int TexCoordArrayIndex(unsigned int unit);
+    AttributesMask getVertexArraysAttributeMask(const State *glState) const;
+
+  private:
+    using Mat4Uniform = float[16];
+
+    Shader *getShader(GLuint handle) const;
+    Program *getProgram(GLuint handle) const;
+
+    Error compileShader(Context *context,
+                        ShaderType shaderType,
+                        const char *src,
+                        GLuint *shaderOut);
+    Error linkProgram(Context *context,
+                      State *glState,
+                      GLuint vshader,
+                      GLuint fshader,
+                      const std::unordered_map<GLint, std::string> &attribLocs,
+                      GLuint *programOut);
+    Error initializeRendererProgram(Context *context, State *glState);
+
+    static constexpr int kTexUnitCount = 4;
+
+    static constexpr int kVertexAttribIndex           = 0;
+    static constexpr int kNormalAttribIndex           = 1;
+    static constexpr int kColorAttribIndex            = 2;
+    static constexpr int kPointSizeAttribIndex        = 3;
+    static constexpr int kTextureCoordAttribIndexBase = 4;
+
+    bool mRendererProgramInitialized;
+    ShaderProgramManager *mShaderPrograms;
+
+    struct GLES1ProgramState
+    {
+        GLuint program;
+
+        GLint projMatrixLoc;
+        GLint modelviewMatrixLoc;
+        GLint textureMatrixLoc;
+        GLint modelviewInvTrLoc;
+
+        std::array<GLint, kTexUnitCount> tex2DSamplerLocs;
+        std::array<GLint, kTexUnitCount> texCubeSamplerLocs;
+
+        GLint shadeModelFlatLoc;
+
+        GLint enableTexture2DLoc;
+        GLint enableTextureCubeMapLoc;
+    };
+
+    struct GLES1UniformBuffers
+    {
+        std::array<Mat4Uniform, kTexUnitCount> textureMatrices;
+        std::array<GLint, kTexUnitCount> tex2DEnables;
+        std::array<GLint, kTexUnitCount> texCubeEnables;
+    };
+
+    GLES1UniformBuffers mUniformBuffers;
+    GLES1ProgramState mProgramState;
+};
+
+}  // namespace gl
+
+#endif  // LIBANGLE_GLES1_RENDERER_H_
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/GLES1Shaders.inc
@@ -0,0 +1,262 @@
+//
+// 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.
+//
+
+// GLES1Shaders.inc: Defines GLES1 emulation shader.
+
+constexpr char kGLES1DrawVShader[] = R"(#version 300 es
+precision highp float;
+
+#define kMaxTexUnits                         4
+
+in vec4 pos;
+in vec3 normal;
+in vec4 color;
+in float pointsize;
+in vec4 texcoord0;
+in vec4 texcoord1;
+in vec4 texcoord2;
+in vec4 texcoord3;
+
+uniform mat4 projection;
+uniform mat4 modelview;
+uniform mat4 modelview_invtr;
+uniform mat4 texture_matrix[4];
+
+out vec4 pos_varying;
+out vec3 normal_varying;
+out vec4 color_varying;
+flat out vec4 color_varying_flat;
+out float pointsize_varying;
+out vec4 texcoord0_varying;
+out vec4 texcoord1_varying;
+out vec4 texcoord2_varying;
+out vec4 texcoord3_varying;
+
+void main()
+{
+    pos_varying = modelview * pos;
+    mat3 mvInvTr3 = mat3(modelview_invtr);
+    normal_varying = mvInvTr3 * normal;
+
+    color_varying = color;
+    color_varying_flat = color;
+    pointsize_varying = pointsize;
+    texcoord0_varying = texture_matrix[0] * texcoord0;
+    texcoord1_varying = texture_matrix[1] * texcoord1;
+    texcoord2_varying = texture_matrix[2] * texcoord2;
+    texcoord3_varying = texture_matrix[3] * texcoord3;
+
+    vec4 vertexPos = projection * modelview * pos;
+    gl_Position = vertexPos;
+}
+)";
+
+// version, flat,
+constexpr char kGLES1DrawFShaderHeader[] = R"(#version 300 es
+precision highp float;
+
+// Defines for GL constants
+#define kMaxLights                           8
+#define kMaxTexUnits                         4
+
+#define kModulate                       0x2100
+#define kDecal                          0x2101
+#define kCombine                        0x8570
+#define kReplace                        0x1E01
+#define kBlend                          0x0BE2
+#define kAdd                            0x0104
+
+#define kAddSigned                      0x8574
+#define kInterpolate                    0x8575
+#define kSubtract                       0x84E7
+#define kDot3Rgb                        0x86AE
+#define kDot3Rgba                       0x86AF
+
+#define kAlpha                          0x1906
+#define kRGB                            0x1907
+#define kRGBA                           0x1908
+#define kLuminance                      0x1909
+#define kLuminanceAlpha                 0x190A
+
+#define kTexture                        0x1702
+#define kConstant                       0x8576
+#define kPrimaryColor                   0x8577
+#define kPrevious                       0x8578
+
+#define kSrcColor                       0x0300
+#define kOneMinusSrcColor               0x0301
+#define kSrcAlpha                       0x0302
+#define kOneMinusSrcAlpha               0x0303
+
+#define kLinear                         0x2601
+#define kExp                            0x0800
+#define kExp2                           0x0801
+
+#define kNever                          0x0200
+#define kLess                           0x0201
+#define kEqual                          0x0202
+#define kLequal                         0x0203
+#define kGreater                        0x0204
+#define kNotequal                       0x0205
+#define kGequal                         0x0206
+#define kAlways                         0x0207
+#define kZero                              0x0
+#define kOne                               0x1
+
+#define kClear                          0x1500
+#define kAnd                            0x1501
+#define kAnd_reverse                    0x1502
+#define kCopy                           0x1503
+#define kAnd_inverted                   0x1504
+#define kNoop                           0x1505
+#define kXor                            0x1506
+#define kOr                             0x1507
+#define kNor                            0x1508
+#define kEquiv                          0x1509
+#define kInvert                         0x150A
+#define kOr_reverse                     0x150B
+#define kCopy_inverted                  0x150C
+#define kOr_inverted                    0x150D
+#define kNand                           0x150E
+#define kSet                            0x150F)";
+
+constexpr char kGLES1DrawFShaderUniformDefs[] = R"(
+
+// Texture units ///////////////////////////////////////////////////////////////
+
+uniform bool enable_texture_2d[kMaxTexUnits];
+uniform bool enable_texture_cube_map[kMaxTexUnits];
+
+// These are not arrays because hw support for arrays
+// of samplers is rather lacking.
+
+uniform sampler2D tex_sampler0;
+uniform samplerCube tex_cube_sampler0;
+
+uniform sampler2D tex_sampler1;
+uniform samplerCube tex_cube_sampler1;
+
+uniform sampler2D tex_sampler2;
+uniform samplerCube tex_cube_sampler2;
+
+uniform sampler2D tex_sampler3;
+uniform samplerCube tex_cube_sampler3;
+
+// Global enables, alpha func, logic op ////////////////////////////////////////
+
+uniform bool shade_model_flat;
+
+// Vertex attributes////////////////////////////////////////////////////////////
+
+in vec4 pos_varying;
+in vec3 normal_varying;
+in vec4 color_varying;
+flat in vec4 color_varying_flat;
+in float pointsize_varying;
+in vec4 texcoord0_varying;
+in vec4 texcoord1_varying;
+in vec4 texcoord2_varying;
+in vec4 texcoord3_varying;
+
+// Outgoing fragment////////////////////////////////////////////////////////////
+
+out vec4 frag_color;
+)";
+
+constexpr char kGLES1DrawFShaderFunctions[] = R"(
+
+bool isTextureUnitEnabled(int unit)
+{
+    return enable_texture_2d[unit] || enable_texture_cube_map[unit];
+}
+
+vec4 getTextureColor(int unit)
+{
+    vec4 res;
+
+    switch (unit)
+    {
+    case 0:
+        if (enable_texture_2d[0])
+        {
+            res = texture(tex_sampler0, texcoord0_varying.xy);
+        }
+        else if (enable_texture_cube_map[0])
+        {
+            res = texture(tex_cube_sampler0, texcoord0_varying.xyz);
+        }
+        break;
+    case 1:
+        if (enable_texture_2d[1])
+        {
+            res = texture(tex_sampler1, texcoord1_varying.xy);
+        }
+        else if (enable_texture_cube_map[1])
+        {
+            res = texture(tex_cube_sampler1, texcoord1_varying.xyz);
+        }
+        break;
+    case 2:
+        if (enable_texture_2d[2])
+        {
+            res = texture(tex_sampler2, texcoord2_varying.xy);
+        }
+        else if (enable_texture_cube_map[2])
+        {
+            res = texture(tex_cube_sampler2, texcoord2_varying.xyz);
+        }
+        break;
+    case 3:
+        if (enable_texture_2d[3])
+        {
+            res = texture(tex_sampler3, texcoord3_varying.xy);
+        }
+        else if (enable_texture_cube_map[3])
+        {
+            // TODO: Weird stuff happens
+            // res = texture(tex_cube_sampler3, texcoord3_varying.xyz);
+        }
+        break;
+    default:
+        break;
+    }
+
+    return res;
+}
+
+vec4 getColor(int unit, vec4 vertexColor)
+{
+    if (!isTextureUnitEnabled(unit))
+    {
+        return vertexColor;
+    }
+
+    return getTextureColor(unit);
+}
+
+)";
+
+constexpr char kGLES1DrawFShaderMain[] = R"(
+void main()
+{
+    vec4 currentFragment;
+    vec4 vertex_color;
+
+    if (shade_model_flat)
+    {
+        vertex_color = color_varying_flat;
+    }
+    else
+    {
+        vertex_color = color_varying;
+    }
+
+    // Unit 0 only for now
+    currentFragment = getColor(0, vertex_color);
+
+    frag_color = currentFragment;
+}
+)";
--- a/gfx/angle/checkout/src/libANGLE/GLES1State.cpp
+++ b/gfx/angle/checkout/src/libANGLE/GLES1State.cpp
@@ -64,18 +64,17 @@ void GLES1State::initialize(const Contex
 {
     mGLState = state;
 
     const Caps &caps = context->getCaps();
 
     mTexUnitEnables.resize(caps.maxMultitextureUnits);
     for (auto &enables : mTexUnitEnables)
     {
-        enables.enable2D      = false;
-        enables.enableCubeMap = false;
+        enables.reset();
     }
 
     mVertexArrayEnabled    = false;
     mNormalArrayEnabled    = false;
     mColorArrayEnabled     = false;
     mPointSizeArrayEnabled = false;
     mTexCoordArrayEnabled.resize(caps.maxMultitextureUnits, false);
 
@@ -259,13 +258,69 @@ const GLES1State::MatrixStack &GLES1Stat
 
 void GLES1State::loadMatrix(const angle::Mat4 &m)
 {
     currentMatrixStack().back() = m;
 }
 
 void GLES1State::multMatrix(const angle::Mat4 &m)
 {
-    angle::Mat4 currentMatrix             = currentMatrixStack().back();
+    angle::Mat4 currentMatrix   = currentMatrixStack().back();
     currentMatrixStack().back() = currentMatrix.product(m);
 }
 
+void GLES1State::setClientStateEnabled(ClientVertexArrayType clientState, bool enable)
+{
+    switch (clientState)
+    {
+        case ClientVertexArrayType::Vertex:
+            mVertexArrayEnabled = enable;
+            break;
+        case ClientVertexArrayType::Normal:
+            mNormalArrayEnabled = enable;
+            break;
+        case ClientVertexArrayType::Color:
+            mColorArrayEnabled = enable;
+            break;
+        case ClientVertexArrayType::PointSize:
+            mPointSizeArrayEnabled = enable;
+            break;
+        case ClientVertexArrayType::TextureCoord:
+            mTexCoordArrayEnabled[mClientActiveTexture] = enable;
+            break;
+        default:
+            UNREACHABLE();
+            break;
+    }
+}
+
+bool GLES1State::isClientStateEnabled(ClientVertexArrayType clientState) const
+{
+    switch (clientState)
+    {
+        case ClientVertexArrayType::Vertex:
+            return mVertexArrayEnabled;
+        case ClientVertexArrayType::Normal:
+            return mNormalArrayEnabled;
+        case ClientVertexArrayType::Color:
+            return mColorArrayEnabled;
+        case ClientVertexArrayType::PointSize:
+            return mPointSizeArrayEnabled;
+        case ClientVertexArrayType::TextureCoord:
+            return mTexCoordArrayEnabled[mClientActiveTexture];
+        default:
+            UNREACHABLE();
+            return false;
+    }
+}
+
+bool GLES1State::isTexCoordArrayEnabled(unsigned int unit) const
+{
+    ASSERT(unit < mTexCoordArrayEnabled.size());
+    return mTexCoordArrayEnabled[unit];
+}
+
+bool GLES1State::isTextureTargetEnabled(unsigned int unit, const TextureType type) const
+{
+    return mTexUnitEnables[unit].test(type);
+}
+
 }  // namespace gl
--- a/gfx/angle/checkout/src/libANGLE/GLES1State.h
+++ b/gfx/angle/checkout/src/libANGLE/GLES1State.h
@@ -110,17 +110,19 @@ struct PointParameters
     GLfloat pointSizeMin;
     GLfloat pointSizeMax;
     GLfloat pointFadeThresholdSize;
     angle::Vector3 pointDistanceAttenuation;
     GLfloat pointSize;
 };
 
 class Context;
+class GLES1Renderer;
 class State;
+
 class GLES1State final : angle::NonCopyable
 {
   public:
     GLES1State();
     ~GLES1State();
 
     void initialize(const Context *context, const State *state);
 
@@ -145,30 +147,31 @@ class GLES1State final : angle::NonCopya
 
     using MatrixStack = angle::FixedVector<angle::Mat4, Caps::GlobalMatrixStackDepth>;
     MatrixStack &currentMatrixStack();
     const MatrixStack &currentMatrixStack() const;
 
     void loadMatrix(const angle::Mat4 &m);
     void multMatrix(const angle::Mat4 &m);
 
+    void setClientStateEnabled(ClientVertexArrayType clientState, bool enable);
+    bool isClientStateEnabled(ClientVertexArrayType clientState) const;
+    bool isTexCoordArrayEnabled(unsigned int unit) const;
+    bool isTextureTargetEnabled(unsigned int unit, const TextureType type) const;
+
   private:
     friend class State;
+    friend class GLES1Renderer;
 
     // Back pointer for reading from State.
     const State *mGLState;
 
     // All initial state values come from the
     // OpenGL ES 1.1 spec.
-    struct TextureEnables
-    {
-        bool enable2D      = false;
-        bool enableCubeMap = false;
-    };
-    std::vector<TextureEnables> mTexUnitEnables;
+    std::vector<angle::PackedEnumBitSet<TextureType>> mTexUnitEnables;
 
     // Table 6.4, 6.5 (IsEnabled)
     bool mVertexArrayEnabled;
     bool mNormalArrayEnabled;
     bool mColorArrayEnabled;
     bool mPointSizeArrayEnabled;
     std::vector<bool> mTexCoordArrayEnabled;
 
--- a/gfx/angle/checkout/src/libANGLE/Image.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Image.cpp
@@ -21,31 +21,31 @@ namespace egl
 {
 
 namespace
 {
 gl::ImageIndex GetImageIndex(EGLenum eglTarget, const egl::AttributeMap &attribs)
 {
     if (eglTarget == EGL_GL_RENDERBUFFER)
     {
-        return gl::ImageIndex::MakeInvalid();
+        return gl::ImageIndex();
     }
 
     gl::TextureTarget target = egl_gl::EGLImageTargetToTextureTarget(eglTarget);
     GLint mip     = static_cast<GLint>(attribs.get(EGL_GL_TEXTURE_LEVEL_KHR, 0));
     GLint layer   = static_cast<GLint>(attribs.get(EGL_GL_TEXTURE_ZOFFSET_KHR, 0));
 
     if (target == gl::TextureTarget::_3D)
     {
         return gl::ImageIndex::Make3D(mip, layer);
     }
     else
     {
         ASSERT(layer == 0);
-        return gl::ImageIndex::MakeGeneric(target, mip);
+        return gl::ImageIndex::MakeFromTarget(target, mip);
     }
 }
 }  // anonymous namespace
 
 ImageSibling::ImageSibling(GLuint id)
     : RefCountObject(id), FramebufferAttachmentObject(), mSourcesOf(), mTargetOf()
 {
 }
--- a/gfx/angle/checkout/src/libANGLE/ImageIndex.cpp
+++ b/gfx/angle/checkout/src/libANGLE/ImageIndex.cpp
@@ -1,241 +1,300 @@
-#include "ImageIndex.h"
 //
 // Copyright 2014 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.
 //
 
 // ImageIndex.cpp: Implementation for ImageIndex methods.
 
 #include "libANGLE/ImageIndex.h"
+
+#include "common/utilities.h"
 #include "libANGLE/Constants.h"
-#include "common/utilities.h"
+#include "libANGLE/angletypes.h"
 
 #include <tuple>
 
 namespace gl
 {
+namespace
+{
+GLint TextureTargetToLayer(TextureTarget target)
+{
+    switch (target)
+    {
+        case TextureTarget::CubeMapPositiveX:
+            return 0;
+        case TextureTarget::CubeMapNegativeX:
+            return 1;
+        case TextureTarget::CubeMapPositiveY:
+            return 2;
+        case TextureTarget::CubeMapNegativeY:
+            return 3;
+        case TextureTarget::CubeMapPositiveZ:
+            return 4;
+        case TextureTarget::CubeMapNegativeZ:
+            return 5;
+        case TextureTarget::External:
+            return ImageIndex::kEntireLevel;
+        case TextureTarget::Rectangle:
+            return ImageIndex::kEntireLevel;
+        case TextureTarget::_2D:
+            return ImageIndex::kEntireLevel;
+        case TextureTarget::_2DArray:
+            return ImageIndex::kEntireLevel;
+        case TextureTarget::_2DMultisample:
+            return ImageIndex::kEntireLevel;
+        case TextureTarget::_3D:
+            return ImageIndex::kEntireLevel;
+        default:
+            UNREACHABLE();
+            return 0;
+    }
+}
+
+TextureTarget TextureTypeToTarget(TextureType type, GLint layerIndex)
+{
+    if (type == TextureType::CubeMap)
+    {
+        return CubeFaceIndexToTextureTarget(layerIndex);
+    }
+    else
+    {
+        return NonCubeTextureTypeToTarget(type);
+    }
+}
+}  // anonymous namespace
+
+ImageIndex::ImageIndex()
+    : mType(TextureType::InvalidEnum), mLevelIndex(0), mLayerIndex(0), mLayerCount(kEntireLevel)
+{
+}
 
 ImageIndex::ImageIndex(const ImageIndex &other) = default;
+
 ImageIndex &ImageIndex::operator=(const ImageIndex &other) = default;
 
-bool ImageIndex::is3D() const
+bool ImageIndex::hasLayer() const
+{
+    return mLayerIndex != kEntireLevel;
+}
+
+bool ImageIndex::has3DLayer() const
 {
-    return type == TextureType::_3D || type == TextureType::_2DArray;
+    // It's quicker to check != CubeMap than calling usesTex3D, which checks multiple types. This
+    // ASSERT validates the check gives the same result.
+    ASSERT(!hasLayer() || (mType != TextureType::CubeMap == usesTex3D()));
+    return (hasLayer() && mType != TextureType::CubeMap);
+}
+
+bool ImageIndex::usesTex3D() const
+{
+    return mType == TextureType::_3D || mType == TextureType::_2DArray;
+}
+
+TextureTarget ImageIndex::getTarget() const
+{
+    return TextureTypeToTarget(mType, mLayerIndex);
 }
 
 GLint ImageIndex::cubeMapFaceIndex() const
 {
-    ASSERT(type == TextureType::CubeMap);
-    ASSERT(TextureTargetToType(target) == TextureType::CubeMap);
-    return static_cast<GLint>(CubeMapTextureTargetToFaceIndex(target));
+    ASSERT(mType == TextureType::CubeMap);
+    ASSERT(mLayerIndex == kEntireLevel || mLayerIndex < static_cast<GLint>(CUBE_FACE_COUNT));
+    return mLayerIndex;
 }
 
 bool ImageIndex::valid() const
 {
-    return type != TextureType::InvalidEnum;
+    return mType != TextureType::InvalidEnum;
 }
 
-ImageIndex ImageIndex::Make2D(GLint mipIndex)
+ImageIndex ImageIndex::Make2D(GLint levelIndex)
 {
-    return ImageIndex(TextureType::_2D, TextureTarget::_2D, mipIndex, ENTIRE_LEVEL, 1);
+    return ImageIndex(TextureType::_2D, levelIndex, kEntireLevel, 1);
 }
 
-ImageIndex ImageIndex::MakeRectangle(GLint mipIndex)
+ImageIndex ImageIndex::MakeRectangle(GLint levelIndex)
 {
-    return ImageIndex(TextureType::Rectangle, TextureTarget::Rectangle, mipIndex, ENTIRE_LEVEL, 1);
+    return ImageIndex(TextureType::Rectangle, levelIndex, kEntireLevel, 1);
 }
 
-ImageIndex ImageIndex::MakeCube(TextureTarget target, GLint mipIndex)
+ImageIndex ImageIndex::MakeCube(TextureTarget target, GLint levelIndex)
 {
     ASSERT(TextureTargetToType(target) == TextureType::CubeMap);
-    return ImageIndex(TextureType::CubeMap, target, mipIndex, ENTIRE_LEVEL, 1);
+    return ImageIndex(TextureType::CubeMap, levelIndex, TextureTargetToLayer(target), 1);
+}
+
+ImageIndex ImageIndex::Make2DArray(GLint levelIndex, GLint layerIndex)
+{
+    return ImageIndex(TextureType::_2DArray, levelIndex, layerIndex, 1);
 }
 
-ImageIndex ImageIndex::Make2DArray(GLint mipIndex, GLint layerIndex)
+ImageIndex ImageIndex::Make2DArrayRange(GLint levelIndex, GLint layerIndex, GLint numLayers)
 {
-    return ImageIndex(TextureType::_2DArray, TextureTarget::_2DArray, mipIndex, layerIndex, 1);
+    return ImageIndex(TextureType::_2DArray, levelIndex, layerIndex, numLayers);
+}
+
+ImageIndex ImageIndex::Make3D(GLint levelIndex, GLint layerIndex)
+{
+    return ImageIndex(TextureType::_3D, levelIndex, layerIndex, 1);
 }
 
-ImageIndex ImageIndex::Make2DArrayRange(GLint mipIndex, GLint layerIndex, GLint numLayers)
+ImageIndex ImageIndex::MakeFromTarget(TextureTarget target, GLint levelIndex)
 {
-    return ImageIndex(TextureType::_2DArray, TextureTarget::_2DArray, mipIndex, layerIndex,
-                      numLayers);
+    return ImageIndex(TextureTargetToType(target), levelIndex, TextureTargetToLayer(target), 1);
 }
 
-ImageIndex ImageIndex::Make3D(GLint mipIndex, GLint layerIndex)
+ImageIndex ImageIndex::MakeFromType(TextureType type,
+                                    GLint levelIndex,
+                                    GLint layerIndex,
+                                    GLint layerCount)
 {
-    return ImageIndex(TextureType::_3D, TextureTarget::_3D, mipIndex, layerIndex, 1);
-}
-
-ImageIndex ImageIndex::MakeGeneric(TextureTarget target, GLint mipIndex)
-{
-    return ImageIndex(TextureTargetToType(target), target, mipIndex, ENTIRE_LEVEL, 1);
+    GLint overrideLayerCount =
+        (type == TextureType::CubeMap && layerIndex == kEntireLevel ? CUBE_FACE_COUNT : layerCount);
+    return ImageIndex(type, levelIndex, layerIndex, overrideLayerCount);
 }
 
 ImageIndex ImageIndex::Make2DMultisample()
 {
-    return ImageIndex(TextureType::_2DMultisample, TextureTarget::_2DMultisample, 0, ENTIRE_LEVEL,
-                      1);
+    return ImageIndex(TextureType::_2DMultisample, 0, kEntireLevel, 1);
 }
 
-ImageIndex ImageIndex::MakeInvalid()
+bool ImageIndex::operator<(const ImageIndex &b) const
 {
-    return ImageIndex(TextureType::InvalidEnum, TextureTarget::InvalidEnum, -1, -1, -1);
+    return std::tie(mType, mLevelIndex, mLayerIndex, mLayerCount) <
+           std::tie(b.mType, b.mLevelIndex, b.mLayerIndex, b.mLayerCount);
 }
 
-bool operator<(const ImageIndex &a, const ImageIndex &b)
+bool ImageIndex::operator==(const ImageIndex &b) const
 {
-    return std::tie(a.type, a.target, a.mipIndex, a.layerIndex, a.numLayers) <
-           std::tie(b.type, b.target, b.mipIndex, b.layerIndex, b.numLayers);
+    return std::tie(mType, mLevelIndex, mLayerIndex, mLayerCount) ==
+           std::tie(b.mType, b.mLevelIndex, b.mLayerIndex, b.mLayerCount);
 }
 
-bool operator==(const ImageIndex &a, const ImageIndex &b)
+bool ImageIndex::operator!=(const ImageIndex &b) const
 {
-    return std::tie(a.type, a.target, a.mipIndex, a.layerIndex, a.numLayers) ==
-           std::tie(b.type, b.target, b.mipIndex, b.layerIndex, b.numLayers);
-}
-
-bool operator!=(const ImageIndex &a, const ImageIndex &b)
-{
-    return !(a == b);
+    return !(*this == b);
 }
 
-ImageIndex::ImageIndex(TextureType typeIn,
-                       TextureTarget targetIn,
-                       GLint mipIndexIn,
-                       GLint layerIndexIn,
-                       GLint numLayersIn)
-    : type(typeIn),
-      target(targetIn),
-      mipIndex(mipIndexIn),
-      layerIndex(layerIndexIn),
-      numLayers(numLayersIn)
+ImageIndex::ImageIndex(TextureType type, GLint levelIndex, GLint layerIndex, GLint layerCount)
+    : mType(type), mLevelIndex(levelIndex), mLayerIndex(layerIndex), mLayerCount(layerCount)
 {}
 
+ImageIndexIterator ImageIndex::getLayerIterator(GLint layerCount) const
+{
+    ASSERT(mType != TextureType::_2D && !hasLayer());
+    return ImageIndexIterator::MakeGeneric(mType, mLevelIndex, mLevelIndex + 1, 0, layerCount);
+}
+
 ImageIndexIterator::ImageIndexIterator(const ImageIndexIterator &other) = default;
 
 ImageIndexIterator ImageIndexIterator::Make2D(GLint minMip, GLint maxMip)
 {
-    return ImageIndexIterator(
-        TextureType::_2D, TextureTarget::_2D, TextureTarget::_2D, Range<GLint>(minMip, maxMip),
-        Range<GLint>(ImageIndex::ENTIRE_LEVEL, ImageIndex::ENTIRE_LEVEL), nullptr);
+    return ImageIndexIterator(TextureType::_2D, Range<GLint>(minMip, maxMip),
+                              Range<GLint>(ImageIndex::kEntireLevel, ImageIndex::kEntireLevel),
+                              nullptr);
 }
 
 ImageIndexIterator ImageIndexIterator::MakeRectangle(GLint minMip, GLint maxMip)
 {
-    return ImageIndexIterator(TextureType::Rectangle, TextureTarget::Rectangle,
-                              TextureTarget::Rectangle, Range<GLint>(minMip, maxMip),
-                              Range<GLint>(ImageIndex::ENTIRE_LEVEL, ImageIndex::ENTIRE_LEVEL),
+    return ImageIndexIterator(TextureType::Rectangle, Range<GLint>(minMip, maxMip),
+                              Range<GLint>(ImageIndex::kEntireLevel, ImageIndex::kEntireLevel),
                               nullptr);
 }
 
 ImageIndexIterator ImageIndexIterator::MakeCube(GLint minMip, GLint maxMip)
 {
-    return ImageIndexIterator(TextureType::CubeMap, kCubeMapTextureTargetMin,
-                              kCubeMapTextureTargetMax, Range<GLint>(minMip, maxMip),
-                              Range<GLint>(ImageIndex::ENTIRE_LEVEL, ImageIndex::ENTIRE_LEVEL),
-                              nullptr);
+    return ImageIndexIterator(TextureType::CubeMap, Range<GLint>(minMip, maxMip),
+                              Range<GLint>(0, 6), nullptr);
 }
 
 ImageIndexIterator ImageIndexIterator::Make3D(GLint minMip, GLint maxMip,
                                               GLint minLayer, GLint maxLayer)
 {
-    return ImageIndexIterator(TextureType::_3D, TextureTarget::_3D, TextureTarget::_3D,
-                              Range<GLint>(minMip, maxMip), Range<GLint>(minLayer, maxLayer),
-                              nullptr);
+    return ImageIndexIterator(TextureType::_3D, Range<GLint>(minMip, maxMip),
+                              Range<GLint>(minLayer, maxLayer), nullptr);
 }
 
 ImageIndexIterator ImageIndexIterator::Make2DArray(GLint minMip, GLint maxMip,
                                                    const GLsizei *layerCounts)
 {
-    return ImageIndexIterator(TextureType::_2DArray, TextureTarget::_2DArray,
-                              TextureTarget::_2DArray, Range<GLint>(minMip, maxMip),
+    return ImageIndexIterator(TextureType::_2DArray, Range<GLint>(minMip, maxMip),
                               Range<GLint>(0, IMPLEMENTATION_MAX_2D_ARRAY_TEXTURE_LAYERS),
                               layerCounts);
 }
 
 ImageIndexIterator ImageIndexIterator::Make2DMultisample()
 {
-    return ImageIndexIterator(TextureType::_2DMultisample, TextureTarget::_2DMultisample,
-                              TextureTarget::_2DMultisample, Range<GLint>(0, 0),
-                              Range<GLint>(ImageIndex::ENTIRE_LEVEL, ImageIndex::ENTIRE_LEVEL),
+    return ImageIndexIterator(TextureType::_2DMultisample, Range<GLint>(0, 0),
+                              Range<GLint>(ImageIndex::kEntireLevel, ImageIndex::kEntireLevel),
                               nullptr);
 }
 
-ImageIndexIterator ImageIndexIterator::MakeGeneric(TextureType type, GLint minMip, GLint maxMip)
+ImageIndexIterator ImageIndexIterator::MakeGeneric(TextureType type,
+                                                   GLint minMip,
+                                                   GLint maxMip,
+                                                   GLint minLayer,
+                                                   GLint maxLayer)
 {
     if (type == TextureType::CubeMap)
     {
         return MakeCube(minMip, maxMip);
     }
 
-    TextureTarget target = NonCubeTextureTypeToTarget(type);
-    return ImageIndexIterator(type, target, target, Range<GLint>(minMip, maxMip),
-                              Range<GLint>(ImageIndex::ENTIRE_LEVEL, ImageIndex::ENTIRE_LEVEL),
+    return ImageIndexIterator(type, Range<GLint>(minMip, maxMip), Range<GLint>(minLayer, maxLayer),
                               nullptr);
 }
 
 ImageIndexIterator::ImageIndexIterator(TextureType type,
-                                       angle::EnumIterator<TextureTarget> targetLow,
-                                       angle::EnumIterator<TextureTarget> targetHigh,
                                        const Range<GLint> &mipRange,
                                        const Range<GLint> &layerRange,
                                        const GLsizei *layerCounts)
-    : mTargetLow(targetLow),
-      mTargetHigh(targetHigh),
-      mMipRange(mipRange),
+    : mMipRange(mipRange),
       mLayerRange(layerRange),
       mLayerCounts(layerCounts),
-      mCurrentIndex(type, *targetLow, mipRange.low(), layerRange.low(), 1)
+      mCurrentIndex(type, mipRange.low(), layerRange.low(), 1)
 {}
 
 GLint ImageIndexIterator::maxLayer() const
 {
     if (mLayerCounts)
     {
         ASSERT(mCurrentIndex.hasLayer());
-        return (mCurrentIndex.mipIndex < mMipRange.high()) ? mLayerCounts[mCurrentIndex.mipIndex]
-                                                           : 0;
+        return (mCurrentIndex.getLevelIndex() < mMipRange.high())
+                   ? mLayerCounts[mCurrentIndex.getLevelIndex()]
+                   : 0;
     }
     return mLayerRange.high();
 }
 
 ImageIndex ImageIndexIterator::next()
 {
     ASSERT(hasNext());
 
     // Make a copy of the current index to return
     ImageIndex previousIndex = mCurrentIndex;
 
     // Iterate layers in the inner loop for now. We can add switchable
     // layer or mip iteration if we need it.
 
-    angle::EnumIterator<TextureTarget> currentTarget = mCurrentIndex.target;
-    if (currentTarget != mTargetHigh)
-    {
-        ++currentTarget;
-        mCurrentIndex.target = *currentTarget;
-    }
-    else if (mCurrentIndex.hasLayer() && mCurrentIndex.layerIndex < maxLayer() - 1)
+    if (mCurrentIndex.hasLayer() && mCurrentIndex.getLayerIndex() < maxLayer() - 1)
     {
-        mCurrentIndex.target = *mTargetLow;
-        mCurrentIndex.layerIndex++;
+        mCurrentIndex.mLayerIndex++;
     }
-    else if (mCurrentIndex.mipIndex < mMipRange.high() - 1)
+    else if (mCurrentIndex.mLevelIndex < mMipRange.high() - 1)
     {
-        mCurrentIndex.target     = *mTargetLow;
-        mCurrentIndex.layerIndex = mLayerRange.low();
-        mCurrentIndex.mipIndex++;
+        mCurrentIndex.mLayerIndex = mLayerRange.low();
+        mCurrentIndex.mLevelIndex++;
     }
     else
     {
-        mCurrentIndex = ImageIndex::MakeInvalid();
+        mCurrentIndex = ImageIndex();
     }
 
     return previousIndex;
 }
 
 ImageIndex ImageIndexIterator::current() const
 {
     return mCurrentIndex;
--- a/gfx/angle/checkout/src/libANGLE/ImageIndex.h
+++ b/gfx/angle/checkout/src/libANGLE/ImageIndex.h
@@ -5,70 +5,77 @@
 //
 
 // ImageIndex.h: A helper struct for indexing into an Image array
 
 #ifndef LIBANGLE_IMAGE_INDEX_H_
 #define LIBANGLE_IMAGE_INDEX_H_
 
 #include "common/mathutil.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 #include "angle_gl.h"
 
 namespace gl
 {
 
 class ImageIndexIterator;
 
-struct ImageIndex
+class ImageIndex
 {
-    TextureType type;
-    TextureTarget target;
-
-    GLint mipIndex;
-
-    GLint layerIndex;
-    GLint numLayers;
-
+  public:
+    ImageIndex();
     ImageIndex(const ImageIndex &other);
     ImageIndex &operator=(const ImageIndex &other);
 
-    bool hasLayer() const { return layerIndex != ENTIRE_LEVEL; }
-    bool is3D() const;
+    TextureType getType() const { return mType; }
+    GLint getLevelIndex() const { return mLevelIndex; }
+    GLint getLayerIndex() const { return mLayerIndex; }
+    GLint getLayerCount() const { return mLayerCount; }
+
+    bool hasLayer() const;
+    bool has3DLayer() const;
+    bool usesTex3D() const;
     GLint cubeMapFaceIndex() const;
     bool valid() const;
+    TextureTarget getTarget() const;
 
-    static ImageIndex Make2D(GLint mipIndex);
-    static ImageIndex MakeRectangle(GLint mipIndex);
-    static ImageIndex MakeCube(TextureTarget target, GLint mipIndex);
-    static ImageIndex Make2DArray(GLint mipIndex, GLint layerIndex);
-    static ImageIndex Make2DArrayRange(GLint mipIndex, GLint layerIndex, GLint numLayers);
-    static ImageIndex Make3D(GLint mipIndex, GLint layerIndex = ENTIRE_LEVEL);
-    static ImageIndex MakeGeneric(TextureTarget target, GLint mipIndex);
+    static ImageIndex Make2D(GLint levelIndex);
+    static ImageIndex MakeRectangle(GLint levelIndex);
+    static ImageIndex MakeCube(TextureTarget target, GLint levelIndex);
+    static ImageIndex Make2DArray(GLint levelIndex, GLint layerIndex);
+    static ImageIndex Make2DArrayRange(GLint levelIndex, GLint layerIndex, GLint layerCount);
+    static ImageIndex Make3D(GLint levelIndex, GLint layerIndex = kEntireLevel);
+    static ImageIndex MakeFromTarget(TextureTarget target, GLint levelIndex);
+    static ImageIndex MakeFromType(TextureType type,
+                                   GLint levelIndex,
+                                   GLint layerIndex = kEntireLevel,
+                                   GLint layerCount = 1);
     static ImageIndex Make2DMultisample();
 
-    static ImageIndex MakeInvalid();
+    static constexpr GLint kEntireLevel = static_cast<GLint>(-1);
 
-    static const GLint ENTIRE_LEVEL = static_cast<GLint>(-1);
+    bool operator<(const ImageIndex &b) const;
+    bool operator==(const ImageIndex &b) const;
+    bool operator!=(const ImageIndex &b) const;
+
+    // Only valid for 3D/Cube textures with layers.
+    ImageIndexIterator getLayerIterator(GLint layerCount) const;
 
   private:
     friend class ImageIndexIterator;
 
-    ImageIndex(TextureType typeIn,
-               TextureTarget targetIn,
-               GLint mipIndexIn,
-               GLint layerIndexIn,
-               GLint numLayersIn);
+    ImageIndex(TextureType type, GLint leveIndex, GLint layerIndex, GLint layerCount);
+
+    TextureType mType;
+    GLint mLevelIndex;
+    GLint mLayerIndex;
+    GLint mLayerCount;
 };
 
-bool operator<(const ImageIndex &a, const ImageIndex &b);
-bool operator==(const ImageIndex &a, const ImageIndex &b);
-bool operator!=(const ImageIndex &a, const ImageIndex &b);
-
 // To be used like this:
 //
 // ImageIndexIterator it = ...;
 // while (it.hasNext())
 // {
 //     ImageIndex current = it.next();
 // }
 class ImageIndexIterator
@@ -77,36 +84,35 @@ class ImageIndexIterator
     ImageIndexIterator(const ImageIndexIterator &other);
 
     static ImageIndexIterator Make2D(GLint minMip, GLint maxMip);
     static ImageIndexIterator MakeRectangle(GLint minMip, GLint maxMip);
     static ImageIndexIterator MakeCube(GLint minMip, GLint maxMip);
     static ImageIndexIterator Make3D(GLint minMip, GLint maxMip, GLint minLayer, GLint maxLayer);
     static ImageIndexIterator Make2DArray(GLint minMip, GLint maxMip, const GLsizei *layerCounts);
     static ImageIndexIterator Make2DMultisample();
-    static ImageIndexIterator MakeGeneric(TextureType type, GLint minMip, GLint maxMip);
+    static ImageIndexIterator MakeGeneric(TextureType type,
+                                          GLint minMip,
+                                          GLint maxMip,
+                                          GLint minLayer,
+                                          GLint maxLayer);
 
     ImageIndex next();
     ImageIndex current() const;
     bool hasNext() const;
 
   private:
     ImageIndexIterator(TextureType type,
-                       angle::EnumIterator<TextureTarget> targetLow,
-                       angle::EnumIterator<TextureTarget> targetHigh,
                        const Range<GLint> &mipRange,
                        const Range<GLint> &layerRange,
                        const GLsizei *layerCounts);
 
     GLint maxLayer() const;
 
-    const angle::EnumIterator<TextureTarget> mTargetLow;
-    const angle::EnumIterator<TextureTarget> mTargetHigh;
     const Range<GLint> mMipRange;
     const Range<GLint> mLayerRange;
     const GLsizei *const mLayerCounts;
 
     ImageIndex mCurrentIndex;
 };
-
-}
+}  // namespace gl
 
 #endif // LIBANGLE_IMAGE_INDEX_H_
--- a/gfx/angle/checkout/src/libANGLE/Observer.h
+++ b/gfx/angle/checkout/src/libANGLE/Observer.h
@@ -25,16 +25,17 @@ namespace angle
 {
 
 using SubjectIndex = size_t;
 
 enum class SubjectMessage
 {
     CONTENTS_CHANGED,
     STORAGE_CHANGED,
+    BINDING_CHANGED,
     DEPENDENT_DIRTY_BITS,
 };
 
 // The observing class inherits from this interface class.
 class ObserverInterface
 {
   public:
     virtual ~ObserverInterface();
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/PackedEGLEnums_autogen.cpp
@@ -0,0 +1,50 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by gen_packed_gl_enums.py using data from packed_egl_enums.json.
+//
+// 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.
+//
+// PackedEGLEnums_autogen.cpp:
+//   Implements ANGLE-specific enums classes for EGLenums and functions operating
+//   on them.
+
+#include "libANGLE/PackedEGLEnums_autogen.h"
+#include "common/debug.h"
+
+namespace egl
+{
+
+template <>
+TextureFormat FromEGLenum<TextureFormat>(EGLenum from)
+{
+    switch (from)
+    {
+        case EGL_NO_TEXTURE:
+            return TextureFormat::NoTexture;
+        case EGL_TEXTURE_RGB:
+            return TextureFormat::RGB;
+        case EGL_TEXTURE_RGBA:
+            return TextureFormat::RGBA;
+        default:
+            return TextureFormat::InvalidEnum;
+    }
+}
+
+EGLenum ToEGLenum(TextureFormat from)
+{
+    switch (from)
+    {
+        case TextureFormat::NoTexture:
+            return EGL_NO_TEXTURE;
+        case TextureFormat::RGB:
+            return EGL_TEXTURE_RGB;
+        case TextureFormat::RGBA:
+            return EGL_TEXTURE_RGBA;
+        default:
+            UNREACHABLE();
+            return 0;
+    }
+}
+
+}  // namespace egl
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/PackedEGLEnums_autogen.h
@@ -0,0 +1,43 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by gen_packed_gl_enums.py using data from packed_egl_enums.json.
+//
+// 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.
+//
+// PackedEGLEnums_autogen.h:
+//   Declares ANGLE-specific enums classes for EGLenums and functions operating
+//   on them.
+
+#ifndef LIBANGLE_PACKEDEGLENUMS_AUTOGEN_H_
+#define LIBANGLE_PACKEDEGLENUMS_AUTOGEN_H_
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <angle_gl.h>
+
+#include <cstdint>
+
+namespace egl
+{
+
+template <typename Enum>
+Enum FromEGLenum(EGLenum from);
+
+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);
+
+}  // namespace egl
+
+#endif  // LIBANGLE_PACKEDEGLENUMS_AUTOGEN_H_
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/PackedEnums.cpp
@@ -0,0 +1,196 @@
+// 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.
+//
+// PackedGLEnums.cpp:
+//   Declares ANGLE-specific enums classes for GLEnum and functions operating
+//   on them.
+
+#include "libANGLE/PackedEnums.h"
+
+#include "common/utilities.h"
+
+namespace gl
+{
+
+TextureType TextureTargetToType(TextureTarget target)
+{
+    switch (target)
+    {
+        case TextureTarget::CubeMapNegativeX:
+        case TextureTarget::CubeMapNegativeY:
+        case TextureTarget::CubeMapNegativeZ:
+        case TextureTarget::CubeMapPositiveX:
+        case TextureTarget::CubeMapPositiveY:
+        case TextureTarget::CubeMapPositiveZ:
+            return TextureType::CubeMap;
+        case TextureTarget::External:
+            return TextureType::External;
+        case TextureTarget::Rectangle:
+            return TextureType::Rectangle;
+        case TextureTarget::_2D:
+            return TextureType::_2D;
+        case TextureTarget::_2DArray:
+            return TextureType::_2DArray;
+        case TextureTarget::_2DMultisample:
+            return TextureType::_2DMultisample;
+        case TextureTarget::_3D:
+            return TextureType::_3D;
+        default:
+            UNREACHABLE();
+            return TextureType::InvalidEnum;
+    }
+}
+
+TextureTarget NonCubeTextureTypeToTarget(TextureType type)
+{
+    switch (type)
+    {
+        case TextureType::External:
+            return TextureTarget::External;
+        case TextureType::Rectangle:
+            return TextureTarget::Rectangle;
+        case TextureType::_2D:
+            return TextureTarget::_2D;
+        case TextureType::_2DArray:
+            return TextureTarget::_2DArray;
+        case TextureType::_2DMultisample:
+            return TextureTarget::_2DMultisample;
+        case TextureType::_3D:
+            return TextureTarget::_3D;
+        default:
+            UNREACHABLE();
+            return TextureTarget::InvalidEnum;
+    }
+}
+
+// Check that we can do arithmetic on TextureTarget to convert from / to cube map faces
+static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeX) -
+                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
+                  1u,
+              "");
+static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveY) -
+                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
+                  2u,
+              "");
+static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeY) -
+                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
+                  3u,
+              "");
+static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveZ) -
+                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
+                  4u,
+              "");
+static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeZ) -
+                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
+                  5u,
+              "");
+
+TextureTarget CubeFaceIndexToTextureTarget(size_t face)
+{
+    ASSERT(face < 6u);
+    return static_cast<TextureTarget>(static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) + face);
+}
+
+size_t CubeMapTextureTargetToFaceIndex(TextureTarget target)
+{
+    ASSERT(TextureTargetToType(target) == TextureType::CubeMap);
+    return static_cast<uint8_t>(target) - static_cast<uint8_t>(TextureTarget::CubeMapPositiveX);
+}
+
+TextureType SamplerTypeToTextureType(GLenum samplerType)
+{
+    switch (samplerType)
+    {
+        case GL_SAMPLER_2D:
+        case GL_INT_SAMPLER_2D:
+        case GL_UNSIGNED_INT_SAMPLER_2D:
+        case GL_SAMPLER_2D_SHADOW:
+            return TextureType::_2D;
+
+        case GL_SAMPLER_EXTERNAL_OES:
+            return TextureType::External;
+
+        case GL_SAMPLER_CUBE:
+        case GL_INT_SAMPLER_CUBE:
+        case GL_UNSIGNED_INT_SAMPLER_CUBE:
+        case GL_SAMPLER_CUBE_SHADOW:
+            return TextureType::CubeMap;
+
+        case GL_SAMPLER_2D_ARRAY:
+        case GL_INT_SAMPLER_2D_ARRAY:
+        case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
+        case GL_SAMPLER_2D_ARRAY_SHADOW:
+            return TextureType::_2DArray;
+
+        case GL_SAMPLER_3D:
+        case GL_INT_SAMPLER_3D:
+        case GL_UNSIGNED_INT_SAMPLER_3D:
+            return TextureType::_3D;
+
+        case GL_SAMPLER_2D_MULTISAMPLE:
+        case GL_INT_SAMPLER_2D_MULTISAMPLE:
+        case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
+            return TextureType::_2DMultisample;
+
+        case GL_SAMPLER_2D_RECT_ANGLE:
+            return TextureType::Rectangle;
+
+        default:
+            UNREACHABLE();
+            return TextureType::InvalidEnum;
+    }
+}
+
+}  // namespace gl
+
+namespace egl_gl
+{
+
+gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)
+{
+    ASSERT(egl::IsCubeMapTextureTarget(eglTarget));
+    return gl::CubeFaceIndexToTextureTarget(egl::CubeMapTextureTargetToLayerIndex(eglTarget));
+}
+
+gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget)
+{
+    switch (eglTarget)
+    {
+        case EGL_GL_TEXTURE_2D_KHR:
+            return gl::TextureTarget::_2D;
+
+        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
+        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
+        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
+        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
+        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
+        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
+            return EGLCubeMapTargetToCubeMapTarget(eglTarget);
+
+        case EGL_GL_TEXTURE_3D_KHR:
+            return gl::TextureTarget::_3D;
+
+        default:
+            UNREACHABLE();
+            return gl::TextureTarget::InvalidEnum;
+    }
+}
+
+gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget)
+{
+    switch (eglTarget)
+    {
+        case EGL_TEXTURE_2D:
+            return gl::TextureType::_2D;
+
+        case EGL_TEXTURE_RECTANGLE_ANGLE:
+            return gl::TextureType::Rectangle;
+
+        default:
+            UNREACHABLE();
+            return gl::TextureType::InvalidEnum;
+    }
+}
+
+}  // namespace egl_gl
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/PackedEnums.h
@@ -0,0 +1,197 @@
+// Copyright 2017 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.
+//
+// PackedGLEnums_autogen.h:
+//   Declares ANGLE-specific enums classes for GLEnum and functions operating
+//   on them.
+
+#ifndef LIBANGLE_PACKEDGLENUMS_H_
+#define LIBANGLE_PACKEDGLENUMS_H_
+
+#include "libANGLE/PackedEGLEnums_autogen.h"
+#include "libANGLE/PackedGLEnums_autogen.h"
+
+#include <array>
+#include <bitset>
+#include <cstddef>
+
+#include <EGL/egl.h>
+
+#include "common/bitset_utils.h"
+
+namespace angle
+{
+
+// Return the number of elements of a packed enum, including the InvalidEnum element.
+template <typename E>
+constexpr size_t EnumSize()
+{
+    using UnderlyingType = typename std::underlying_type<E>::type;
+    return static_cast<UnderlyingType>(E::EnumCount);
+}
+
+// Implementation of AllEnums which allows iterating over all the possible values for a packed enums
+// like so:
+//     for (auto value : AllEnums<MyPackedEnum>()) {
+//         // Do something with the enum.
+//     }
+
+template <typename E>
+class EnumIterator final
+{
+  private:
+    using UnderlyingType = typename std::underlying_type<E>::type;
+
+  public:
+    EnumIterator(E value) : mValue(static_cast<UnderlyingType>(value)) {}
+    EnumIterator &operator++()
+    {
+        mValue++;
+        return *this;
+    }
+    bool operator==(const EnumIterator &other) const { return mValue == other.mValue; }
+    bool operator!=(const EnumIterator &other) const { return mValue != other.mValue; }
+    E operator*() const { return static_cast<E>(mValue); }
+
+  private:
+    UnderlyingType mValue;
+};
+
+template <typename E>
+struct AllEnums
+{
+    EnumIterator<E> begin() const { return {static_cast<E>(0)}; }
+    EnumIterator<E> end() const { return {E::InvalidEnum}; }
+};
+
+// PackedEnumMap<E, T> is like an std::array<T, E::EnumCount> but is indexed with enum values. It
+// implements all of the std::array interface except with enum values instead of indices.
+template <typename E, typename T>
+class PackedEnumMap
+{
+  private:
+    using UnderlyingType = typename std::underlying_type<E>::type;
+    using Storage        = std::array<T, EnumSize<E>()>;
+
+    Storage mData;
+
+  public:
+    // types:
+    using value_type      = T;
+    using pointer         = T *;
+    using const_pointer   = const T *;
+    using reference       = T &;
+    using const_reference = const T &;
+
+    using size_type       = size_t;
+    using difference_type = ptrdiff_t;
+
+    using iterator               = typename Storage::iterator;
+    using const_iterator         = typename Storage::const_iterator;
+    using reverse_iterator       = std::reverse_iterator<iterator>;
+    using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+
+    // No explicit construct/copy/destroy for aggregate type
+    void fill(const T &u) { mData.fill(u); }
+    void swap(PackedEnumMap<E, T> &a) noexcept { mData.swap(a.mData); }
+
+    // iterators:
+    iterator begin() noexcept { return mData.begin(); }
+    const_iterator begin() const noexcept { return mData.begin(); }
+    iterator end() noexcept { return mData.end(); }
+    const_iterator end() const noexcept { return mData.end(); }
+
+    reverse_iterator rbegin() noexcept { return mData.rbegin(); }
+    const_reverse_iterator rbegin() const noexcept { return mData.rbegin(); }
+    reverse_iterator rend() noexcept { return mData.rend(); }
+    const_reverse_iterator rend() const noexcept { return mData.rend(); }
+
+    // capacity:
+    constexpr size_type size() const noexcept { return mData.size(); }
+    constexpr size_type max_size() const noexcept { return mData.max_size(); }
+    constexpr bool empty() const noexcept { return mData.empty(); }
+
+    // element access:
+    reference operator[](E n) { return mData[static_cast<UnderlyingType>(n)]; }
+    const_reference operator[](E n) const { return mData[static_cast<UnderlyingType>(n)]; }
+    const_reference at(E n) const { return mData.at(static_cast<UnderlyingType>(n)); }
+    reference at(E n) { return mData.at(static_cast<UnderlyingType>(n)); }
+
+    reference front() { return mData.front(); }
+    const_reference front() const { return mData.front(); }
+    reference back() { return mData.back(); }
+    const_reference back() const { return mData.back(); }
+
+    T *data() noexcept { return mData.data(); }
+    const T *data() const noexcept { return mData.data(); }
+};
+
+// PackedEnumBitSetE> is like an std::bitset<E::EnumCount> but is indexed with enum values. It
+// implements the std::bitset interface except with enum values instead of indices.
+template <typename E>
+using PackedEnumBitSet = BitSetT<EnumSize<E>(), uint32_t, E>;
+
+}  // namespace angle
+
+namespace gl
+{
+
+TextureType TextureTargetToType(TextureTarget target);
+TextureTarget NonCubeTextureTypeToTarget(TextureType type);
+
+TextureTarget CubeFaceIndexToTextureTarget(size_t face);
+size_t CubeMapTextureTargetToFaceIndex(TextureTarget target);
+
+constexpr TextureTarget kCubeMapTextureTargetMin = TextureTarget::CubeMapPositiveX;
+constexpr TextureTarget kCubeMapTextureTargetMax = TextureTarget::CubeMapNegativeZ;
+constexpr TextureTarget kAfterCubeMapTextureTargetMax =
+    static_cast<TextureTarget>(static_cast<uint8_t>(kCubeMapTextureTargetMax) + 1);
+struct AllCubeFaceTextureTargets
+{
+    angle::EnumIterator<TextureTarget> begin() const { return kCubeMapTextureTargetMin; }
+    angle::EnumIterator<TextureTarget> end() const { return kAfterCubeMapTextureTargetMax; }
+};
+
+constexpr ShaderType kGLES2ShaderTypeMin = ShaderType::Vertex;
+constexpr ShaderType kGLES2ShaderTypeMax = ShaderType::Fragment;
+constexpr ShaderType kAfterGLES2ShaderTypeMax =
+    static_cast<ShaderType>(static_cast<uint8_t>(kGLES2ShaderTypeMax) + 1);
+struct AllGLES2ShaderTypes
+{
+    angle::EnumIterator<ShaderType> begin() const { return kGLES2ShaderTypeMin; }
+    angle::EnumIterator<ShaderType> end() const { return kAfterGLES2ShaderTypeMax; }
+};
+
+constexpr ShaderType kShaderTypeMin = ShaderType::Vertex;
+constexpr ShaderType kShaderTypeMax = ShaderType::Compute;
+constexpr ShaderType kAfterShaderTypeMax =
+    static_cast<ShaderType>(static_cast<uint8_t>(kShaderTypeMax) + 1);
+struct AllShaderTypes
+{
+    angle::EnumIterator<ShaderType> begin() const { return kShaderTypeMin; }
+    angle::EnumIterator<ShaderType> end() const { return kAfterShaderTypeMax; }
+};
+
+constexpr size_t kGraphicsShaderCount = static_cast<size_t>(ShaderType::EnumCount) - 1u;
+// Arrange the shader types in the order of rendering pipeline
+constexpr std::array<ShaderType, kGraphicsShaderCount> kAllGraphicsShaderTypes = {
+    ShaderType::Vertex, ShaderType::Geometry, ShaderType::Fragment};
+
+using ShaderBitSet = angle::PackedEnumBitSet<ShaderType>;
+
+template <typename T>
+using ShaderMap = angle::PackedEnumMap<ShaderType, T>;
+
+TextureType SamplerTypeToTextureType(GLenum samplerType);
+
+}  // namespace gl
+
+namespace egl_gl
+{
+gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget);
+gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget);
+gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget);
+}  // namespace egl_gl
+
+#endif  // LIBANGLE_PACKEDGLENUMS_H_
deleted file mode 100644
--- a/gfx/angle/checkout/src/libANGLE/PackedGLEnums.cpp
+++ /dev/null
@@ -1,196 +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.
-//
-// PackedGLEnums.cpp:
-//   Declares ANGLE-specific enums classes for GLEnum and functions operating
-//   on them.
-
-#include "libANGLE/PackedGLEnums.h"
-
-#include "common/utilities.h"
-
-namespace gl
-{
-
-TextureType TextureTargetToType(TextureTarget target)
-{
-    switch (target)
-    {
-        case TextureTarget::CubeMapNegativeX:
-        case TextureTarget::CubeMapNegativeY:
-        case TextureTarget::CubeMapNegativeZ:
-        case TextureTarget::CubeMapPositiveX:
-        case TextureTarget::CubeMapPositiveY:
-        case TextureTarget::CubeMapPositiveZ:
-            return TextureType::CubeMap;
-        case TextureTarget::External:
-            return TextureType::External;
-        case TextureTarget::Rectangle:
-            return TextureType::Rectangle;
-        case TextureTarget::_2D:
-            return TextureType::_2D;
-        case TextureTarget::_2DArray:
-            return TextureType::_2DArray;
-        case TextureTarget::_2DMultisample:
-            return TextureType::_2DMultisample;
-        case TextureTarget::_3D:
-            return TextureType::_3D;
-        default:
-            UNREACHABLE();
-            return TextureType::InvalidEnum;
-    }
-}
-
-TextureTarget NonCubeTextureTypeToTarget(TextureType type)
-{
-    switch (type)
-    {
-        case TextureType::External:
-            return TextureTarget::External;
-        case TextureType::Rectangle:
-            return TextureTarget::Rectangle;
-        case TextureType::_2D:
-            return TextureTarget::_2D;
-        case TextureType::_2DArray:
-            return TextureTarget::_2DArray;
-        case TextureType::_2DMultisample:
-            return TextureTarget::_2DMultisample;
-        case TextureType::_3D:
-            return TextureTarget::_3D;
-        default:
-            UNREACHABLE();
-            return TextureTarget::InvalidEnum;
-    }
-}
-
-// Check that we can do arithmetic on TextureTarget to convert from / to cube map faces
-static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeX) -
-                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
-                  1u,
-              "");
-static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveY) -
-                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
-                  2u,
-              "");
-static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeY) -
-                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
-                  3u,
-              "");
-static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveZ) -
-                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
-                  4u,
-              "");
-static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeZ) -
-                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
-                  5u,
-              "");
-
-TextureTarget CubeFaceIndexToTextureTarget(size_t face)
-{
-    ASSERT(face < 6u);
-    return static_cast<TextureTarget>(static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) + face);
-}
-
-size_t CubeMapTextureTargetToFaceIndex(TextureTarget target)
-{
-    ASSERT(TextureTargetToType(target) == TextureType::CubeMap);
-    return static_cast<uint8_t>(target) - static_cast<uint8_t>(TextureTarget::CubeMapPositiveX);
-}
-
-TextureType SamplerTypeToTextureType(GLenum samplerType)
-{
-    switch (samplerType)
-    {
-        case GL_SAMPLER_2D:
-        case GL_INT_SAMPLER_2D:
-        case GL_UNSIGNED_INT_SAMPLER_2D:
-        case GL_SAMPLER_2D_SHADOW:
-            return TextureType::_2D;
-
-        case GL_SAMPLER_EXTERNAL_OES:
-            return TextureType::External;
-
-        case GL_SAMPLER_CUBE:
-        case GL_INT_SAMPLER_CUBE:
-        case GL_UNSIGNED_INT_SAMPLER_CUBE:
-        case GL_SAMPLER_CUBE_SHADOW:
-            return TextureType::CubeMap;
-
-        case GL_SAMPLER_2D_ARRAY:
-        case GL_INT_SAMPLER_2D_ARRAY:
-        case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
-        case GL_SAMPLER_2D_ARRAY_SHADOW:
-            return TextureType::_2DArray;
-
-        case GL_SAMPLER_3D:
-        case GL_INT_SAMPLER_3D:
-        case GL_UNSIGNED_INT_SAMPLER_3D:
-            return TextureType::_3D;
-
-        case GL_SAMPLER_2D_MULTISAMPLE:
-        case GL_INT_SAMPLER_2D_MULTISAMPLE:
-        case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
-            return TextureType::_2DMultisample;
-
-        case GL_SAMPLER_2D_RECT_ANGLE:
-            return TextureType::Rectangle;
-
-        default:
-            UNREACHABLE();
-            return TextureType::InvalidEnum;
-    }
-}
-
-}  // namespace gl
-
-namespace egl_gl
-{
-
-gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)
-{
-    ASSERT(egl::IsCubeMapTextureTarget(eglTarget));
-    return gl::CubeFaceIndexToTextureTarget(egl::CubeMapTextureTargetToLayerIndex(eglTarget));
-}
-
-gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget)
-{
-    switch (eglTarget)
-    {
-        case EGL_GL_TEXTURE_2D_KHR:
-            return gl::TextureTarget::_2D;
-
-        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
-        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
-        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
-        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
-        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
-        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
-            return EGLCubeMapTargetToCubeMapTarget(eglTarget);
-
-        case EGL_GL_TEXTURE_3D_KHR:
-            return gl::TextureTarget::_3D;
-
-        default:
-            UNREACHABLE();
-            return gl::TextureTarget::InvalidEnum;
-    }
-}
-
-gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget)
-{
-    switch (eglTarget)
-    {
-        case EGL_TEXTURE_2D:
-            return gl::TextureType::_2D;
-
-        case EGL_TEXTURE_RECTANGLE_ANGLE:
-            return gl::TextureType::Rectangle;
-
-        default:
-            UNREACHABLE();
-            return gl::TextureType::InvalidEnum;
-    }
-}
-
-}  // namespace egl_gl
deleted file mode 100644
--- a/gfx/angle/checkout/src/libANGLE/PackedGLEnums.h
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2017 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.
-//
-// PackedGLEnums_autogen.h:
-//   Declares ANGLE-specific enums classes for GLEnum and functions operating
-//   on them.
-
-#ifndef LIBANGLE_PACKEDGLENUMS_H_
-#define LIBANGLE_PACKEDGLENUMS_H_
-
-#include "libANGLE/PackedGLEnums_autogen.h"
-
-#include <array>
-#include <bitset>
-#include <cstddef>
-
-#include <EGL/egl.h>
-
-#include "common/bitset_utils.h"
-
-namespace angle
-{
-
-// Return the number of elements of a packed enum, including the InvalidEnum element.
-template <typename E>
-constexpr size_t EnumSize()
-{
-    using UnderlyingType = typename std::underlying_type<E>::type;
-    return static_cast<UnderlyingType>(E::EnumCount);
-}
-
-// Implementation of AllEnums which allows iterating over all the possible values for a packed enums
-// like so:
-//     for (auto value : AllEnums<MyPackedEnum>()) {
-//         // Do something with the enum.
-//     }
-
-template <typename E>
-class EnumIterator final
-{
-  private:
-    using UnderlyingType = typename std::underlying_type<E>::type;
-
-  public:
-    EnumIterator(E value) : mValue(static_cast<UnderlyingType>(value)) {}
-    EnumIterator &operator++()
-    {
-        mValue++;
-        return *this;
-    }
-    bool operator==(const EnumIterator &other) const { return mValue == other.mValue; }
-    bool operator!=(const EnumIterator &other) const { return mValue != other.mValue; }
-    E operator*() const { return static_cast<E>(mValue); }
-
-  private:
-    UnderlyingType mValue;
-};
-
-template <typename E>
-struct AllEnums
-{
-    EnumIterator<E> begin() const { return {static_cast<E>(0)}; }
-    EnumIterator<E> end() const { return {E::InvalidEnum}; }
-};
-
-// PackedEnumMap<E, T> is like an std::array<T, E::EnumCount> but is indexed with enum values. It
-// implements all of the std::array interface except with enum values instead of indices.
-template <typename E, typename T>
-class PackedEnumMap
-{
-  private:
-    using UnderlyingType          = typename std::underlying_type<E>::type;
-    using Storage                 = std::array<T, EnumSize<E>()>;
-
-    Storage mData;
-
-  public:
-    // types:
-    using value_type      = T;
-    using pointer         = T *;
-    using const_pointer   = const T *;
-    using reference       = T &;
-    using const_reference = const T &;
-
-    using size_type       = size_t;
-    using difference_type = ptrdiff_t;
-
-    using iterator               = typename Storage::iterator;
-    using const_iterator         = typename Storage::const_iterator;
-    using reverse_iterator       = std::reverse_iterator<iterator>;
-    using const_reverse_iterator = std::reverse_iterator<const_iterator>;
-
-    // No explicit construct/copy/destroy for aggregate type
-    void fill(const T &u) { mData.fill(u); }
-    void swap(PackedEnumMap<E, T> &a) noexcept { mData.swap(a.mData); }
-
-    // iterators:
-    iterator begin() noexcept { return mData.begin(); }
-    const_iterator begin() const noexcept { return mData.begin(); }
-    iterator end() noexcept { return mData.end(); }
-    const_iterator end() const noexcept { return mData.end(); }
-
-    reverse_iterator rbegin() noexcept { return mData.rbegin(); }
-    const_reverse_iterator rbegin() const noexcept { return mData.rbegin(); }
-    reverse_iterator rend() noexcept { return mData.rend(); }
-    const_reverse_iterator rend() const noexcept { return mData.rend(); }
-
-    // capacity:
-    constexpr size_type size() const noexcept { return mData.size(); }
-    constexpr size_type max_size() const noexcept { return mData.max_size(); }
-    constexpr bool empty() const noexcept { return mData.empty(); }
-
-    // element access:
-    reference operator[](E n) { return mData[static_cast<UnderlyingType>(n)]; }
-    const_reference operator[](E n) const { return mData[static_cast<UnderlyingType>(n)]; }
-    const_reference at(E n) const { return mData.at(static_cast<UnderlyingType>(n)); }
-    reference at(E n) { return mData.at(static_cast<UnderlyingType>(n)); }
-
-    reference front() { return mData.front(); }
-    const_reference front() const { return mData.front(); }
-    reference back() { return mData.back(); }
-    const_reference back() const { return mData.back(); }
-
-    T *data() noexcept { return mData.data(); }
-    const T *data() const noexcept { return mData.data(); }
-};
-
-// PackedEnumBitSetE> is like an std::bitset<E::EnumCount> but is indexed with enum values. It
-// implements the std::bitset interface except with enum values instead of indices.
-template <typename E>
-using PackedEnumBitSet = BitSetT<EnumSize<E>(), uint32_t, E>;
-
-}  // namespace angle
-
-namespace gl
-{
-
-TextureType TextureTargetToType(TextureTarget target);
-TextureTarget NonCubeTextureTypeToTarget(TextureType type);
-
-TextureTarget CubeFaceIndexToTextureTarget(size_t face);
-size_t CubeMapTextureTargetToFaceIndex(TextureTarget target);
-
-constexpr TextureTarget kCubeMapTextureTargetMin = TextureTarget::CubeMapPositiveX;
-constexpr TextureTarget kCubeMapTextureTargetMax = TextureTarget::CubeMapNegativeZ;
-constexpr TextureTarget kAfterCubeMapTextureTargetMax =
-    static_cast<TextureTarget>(static_cast<uint8_t>(kCubeMapTextureTargetMax) + 1);
-struct AllCubeFaceTextureTargets
-{
-    angle::EnumIterator<TextureTarget> begin() const { return kCubeMapTextureTargetMin; }
-    angle::EnumIterator<TextureTarget> end() const { return kAfterCubeMapTextureTargetMax; }
-};
-
-constexpr ShaderType kGLES2ShaderTypeMin = ShaderType::Vertex;
-constexpr ShaderType kGLES2ShaderTypeMax = ShaderType::Fragment;
-constexpr ShaderType kAfterGLES2ShaderTypeMax =
-    static_cast<ShaderType>(static_cast<uint8_t>(kGLES2ShaderTypeMax) + 1);
-struct AllGLES2ShaderTypes
-{
-    angle::EnumIterator<ShaderType> begin() const { return kGLES2ShaderTypeMin; }
-    angle::EnumIterator<ShaderType> end() const { return kAfterGLES2ShaderTypeMax; }
-};
-
-constexpr ShaderType kShaderTypeMin = ShaderType::Vertex;
-constexpr ShaderType kShaderTypeMax = ShaderType::Compute;
-constexpr ShaderType kAfterShaderTypeMax =
-    static_cast<ShaderType>(static_cast<uint8_t>(kShaderTypeMax) + 1);
-struct AllShaderTypes
-{
-    angle::EnumIterator<ShaderType> begin() const { return kShaderTypeMin; }
-    angle::EnumIterator<ShaderType> end() const { return kAfterShaderTypeMax; }
-};
-
-using ShaderBitSet = angle::PackedEnumBitSet<ShaderType>;
-
-TextureType SamplerTypeToTextureType(GLenum samplerType);
-
-}  // namespace gl
-
-namespace egl_gl
-{
-gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget);
-gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget);
-gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget);
-}  // namespace egl_gl
-
-#endif  // LIBANGLE_PACKEDGLENUMS_H_
--- a/gfx/angle/checkout/src/libANGLE/PackedGLEnums_autogen.cpp
+++ b/gfx/angle/checkout/src/libANGLE/PackedGLEnums_autogen.cpp
@@ -1,17 +1,17 @@
 // GENERATED FILE - DO NOT EDIT.
 // Generated by gen_packed_gl_enums.py using data from packed_gl_enums.json.
 //
 // 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.
 //
 // PackedGLEnums_autogen.cpp:
-//   Implements ANGLE-specific enums classes for GLEnum and functions operating
+//   Implements ANGLE-specific enums classes for GLenums and functions operating
 //   on them.
 
 #include "libANGLE/PackedGLEnums_autogen.h"
 #include "common/debug.h"
 
 namespace gl
 {
 
@@ -58,17 +58,17 @@ GLenum ToGLenum(AlphaTestFunc from)
         case AlphaTestFunc::Less:
             return GL_LESS;
         case AlphaTestFunc::Never:
             return GL_NEVER;
         case AlphaTestFunc::NotEqual:
             return GL_NOTEQUAL;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 BufferBinding FromGLenum<BufferBinding>(GLenum from)
 {
     switch (from)
     {
@@ -126,17 +126,17 @@ GLenum ToGLenum(BufferBinding from)
         case BufferBinding::ShaderStorage:
             return GL_SHADER_STORAGE_BUFFER;
         case BufferBinding::TransformFeedback:
             return GL_TRANSFORM_FEEDBACK_BUFFER;
         case BufferBinding::Uniform:
             return GL_UNIFORM_BUFFER;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 BufferUsage FromGLenum<BufferUsage>(GLenum from)
 {
     switch (from)
     {
@@ -182,17 +182,57 @@ GLenum ToGLenum(BufferUsage from)
         case BufferUsage::StreamCopy:
             return GL_STREAM_COPY;
         case BufferUsage::StreamDraw:
             return GL_STREAM_DRAW;
         case BufferUsage::StreamRead:
             return GL_STREAM_READ;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
+    }
+}
+
+template <>
+ClientVertexArrayType FromGLenum<ClientVertexArrayType>(GLenum from)
+{
+    switch (from)
+    {
+        case GL_COLOR_ARRAY:
+            return ClientVertexArrayType::Color;
+        case GL_NORMAL_ARRAY:
+            return ClientVertexArrayType::Normal;
+        case GL_POINT_SIZE_ARRAY_OES:
+            return ClientVertexArrayType::PointSize;
+        case GL_TEXTURE_COORD_ARRAY:
+            return ClientVertexArrayType::TextureCoord;
+        case GL_VERTEX_ARRAY:
+            return ClientVertexArrayType::Vertex;
+        default:
+            return ClientVertexArrayType::InvalidEnum;
+    }
+}
+
+GLenum ToGLenum(ClientVertexArrayType from)
+{
+    switch (from)
+    {
+        case ClientVertexArrayType::Color:
+            return GL_COLOR_ARRAY;
+        case ClientVertexArrayType::Normal:
+            return GL_NORMAL_ARRAY;
+        case ClientVertexArrayType::PointSize:
+            return GL_POINT_SIZE_ARRAY_OES;
+        case ClientVertexArrayType::TextureCoord:
+            return GL_TEXTURE_COORD_ARRAY;
+        case ClientVertexArrayType::Vertex:
+            return GL_VERTEX_ARRAY;
+        default:
+            UNREACHABLE();
+            return 0;
     }
 }
 
 template <>
 CullFaceMode FromGLenum<CullFaceMode>(GLenum from)
 {
     switch (from)
     {
@@ -214,17 +254,17 @@ GLenum ToGLenum(CullFaceMode from)
         case CullFaceMode::Back:
             return GL_BACK;
         case CullFaceMode::Front:
             return GL_FRONT;
         case CullFaceMode::FrontAndBack:
             return GL_FRONT_AND_BACK;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 FogMode FromGLenum<FogMode>(GLenum from)
 {
     switch (from)
     {
@@ -246,17 +286,17 @@ GLenum ToGLenum(FogMode from)
         case FogMode::Exp:
             return GL_EXP;
         case FogMode::Exp2:
             return GL_EXP2;
         case FogMode::Linear:
             return GL_LINEAR;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 HintSetting FromGLenum<HintSetting>(GLenum from)
 {
     switch (from)
     {
@@ -278,17 +318,81 @@ GLenum ToGLenum(HintSetting from)
         case HintSetting::DontCare:
             return GL_DONT_CARE;
         case HintSetting::Fastest:
             return GL_FASTEST;
         case HintSetting::Nicest:
             return GL_NICEST;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
+    }
+}
+
+template <>
+LightParameter FromGLenum<LightParameter>(GLenum from)
+{
+    switch (from)
+    {
+        case GL_AMBIENT:
+            return LightParameter::Ambient;
+        case GL_AMBIENT_AND_DIFFUSE:
+            return LightParameter::AmbientAndDiffuse;
+        case GL_CONSTANT_ATTENUATION:
+            return LightParameter::ConstantAttenuation;
+        case GL_DIFFUSE:
+            return LightParameter::Diffuse;
+        case GL_LINEAR_ATTENUATION:
+            return LightParameter::LinearAttenuation;
+        case GL_POSITION:
+            return LightParameter::Position;
+        case GL_QUADRATIC_ATTENUATION:
+            return LightParameter::QuadraticAttenuation;
+        case GL_SPECULAR:
+            return LightParameter::Specular;
+        case GL_SPOT_CUTOFF:
+            return LightParameter::SpotCutoff;
+        case GL_SPOT_DIRECTION:
+            return LightParameter::SpotDirection;
+        case GL_SPOT_EXPONENT:
+            return LightParameter::SpotExponent;
+        default:
+            return LightParameter::InvalidEnum;
+    }
+}
+
+GLenum ToGLenum(LightParameter from)
+{
+    switch (from)
+    {
+        case LightParameter::Ambient:
+            return GL_AMBIENT;
+        case LightParameter::AmbientAndDiffuse:
+            return GL_AMBIENT_AND_DIFFUSE;
+        case LightParameter::ConstantAttenuation:
+            return GL_CONSTANT_ATTENUATION;
+        case LightParameter::Diffuse:
+            return GL_DIFFUSE;
+        case LightParameter::LinearAttenuation:
+            return GL_LINEAR_ATTENUATION;
+        case LightParameter::Position:
+            return GL_POSITION;
+        case LightParameter::QuadraticAttenuation:
+            return GL_QUADRATIC_ATTENUATION;
+        case LightParameter::Specular:
+            return GL_SPECULAR;
+        case LightParameter::SpotCutoff:
+            return GL_SPOT_CUTOFF;
+        case LightParameter::SpotDirection:
+            return GL_SPOT_DIRECTION;
+        case LightParameter::SpotExponent:
+            return GL_SPOT_EXPONENT;
+        default:
+            UNREACHABLE();
+            return 0;
     }
 }
 
 template <>
 LogicalOperation FromGLenum<LogicalOperation>(GLenum from)
 {
     switch (from)
     {
@@ -362,17 +466,61 @@ GLenum ToGLenum(LogicalOperation from)
         case LogicalOperation::OrReverse:
             return GL_OR_REVERSE;
         case LogicalOperation::Set:
             return GL_SET;
         case LogicalOperation::Xor:
             return GL_XOR;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
+    }
+}
+
+template <>
+MaterialParameter FromGLenum<MaterialParameter>(GLenum from)
+{
+    switch (from)
+    {
+        case GL_AMBIENT:
+            return MaterialParameter::Ambient;
+        case GL_AMBIENT_AND_DIFFUSE:
+            return MaterialParameter::AmbientAndDiffuse;
+        case GL_DIFFUSE:
+            return MaterialParameter::Diffuse;
+        case GL_EMISSION:
+            return MaterialParameter::Emission;
+        case GL_SHININESS:
+            return MaterialParameter::Shininess;
+        case GL_SPECULAR:
+            return MaterialParameter::Specular;
+        default:
+            return MaterialParameter::InvalidEnum;
+    }
+}
+
+GLenum ToGLenum(MaterialParameter from)
+{
+    switch (from)
+    {
+        case MaterialParameter::Ambient:
+            return GL_AMBIENT;
+        case MaterialParameter::AmbientAndDiffuse:
+            return GL_AMBIENT_AND_DIFFUSE;
+        case MaterialParameter::Diffuse:
+            return GL_DIFFUSE;
+        case MaterialParameter::Emission:
+            return GL_EMISSION;
+        case MaterialParameter::Shininess:
+            return GL_SHININESS;
+        case MaterialParameter::Specular:
+            return GL_SPECULAR;
+        default:
+            UNREACHABLE();
+            return 0;
     }
 }
 
 template <>
 MatrixType FromGLenum<MatrixType>(GLenum from)
 {
     switch (from)
     {
@@ -394,17 +542,65 @@ GLenum ToGLenum(MatrixType from)
         case MatrixType::Modelview:
             return GL_MODELVIEW;
         case MatrixType::Projection:
             return GL_PROJECTION;
         case MatrixType::Texture:
             return GL_TEXTURE;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
+    }
+}
+
+template <>
+QueryType FromGLenum<QueryType>(GLenum from)
+{
+    switch (from)
+    {
+        case GL_ANY_SAMPLES_PASSED:
+            return QueryType::AnySamples;
+        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+            return QueryType::AnySamplesConservative;
+        case GL_COMMANDS_COMPLETED_CHROMIUM:
+            return QueryType::CommandsCompleted;
+        case GL_PRIMITIVES_GENERATED_EXT:
+            return QueryType::PrimitivesGenerated;
+        case GL_TIME_ELAPSED_EXT:
+            return QueryType::TimeElapsed;
+        case GL_TIMESTAMP_EXT:
+            return QueryType::Timestamp;
+        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+            return QueryType::TransformFeedbackPrimitivesWritten;
+        default:
+            return QueryType::InvalidEnum;
+    }
+}
+
+GLenum ToGLenum(QueryType from)
+{
+    switch (from)
+    {
+        case QueryType::AnySamples:
+            return GL_ANY_SAMPLES_PASSED;
+        case QueryType::AnySamplesConservative:
+            return GL_ANY_SAMPLES_PASSED_CONSERVATIVE;
+        case QueryType::CommandsCompleted:
+            return GL_COMMANDS_COMPLETED_CHROMIUM;
+        case QueryType::PrimitivesGenerated:
+            return GL_PRIMITIVES_GENERATED_EXT;
+        case QueryType::TimeElapsed:
+            return GL_TIME_ELAPSED_EXT;
+        case QueryType::Timestamp:
+            return GL_TIMESTAMP_EXT;
+        case QueryType::TransformFeedbackPrimitivesWritten:
+            return GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;
+        default:
+            UNREACHABLE();
+            return 0;
     }
 }
 
 template <>
 ShaderType FromGLenum<ShaderType>(GLenum from)
 {
     switch (from)
     {
@@ -430,17 +626,17 @@ GLenum ToGLenum(ShaderType from)
         case ShaderType::Fragment:
             return GL_FRAGMENT_SHADER;
         case ShaderType::Geometry:
             return GL_GEOMETRY_SHADER_EXT;
         case ShaderType::Compute:
             return GL_COMPUTE_SHADER;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 ShadingModel FromGLenum<ShadingModel>(GLenum from)
 {
     switch (from)
     {
@@ -458,17 +654,17 @@ GLenum ToGLenum(ShadingModel from)
     switch (from)
     {
         case ShadingModel::Flat:
             return GL_FLAT;
         case ShadingModel::Smooth:
             return GL_SMOOTH;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 TextureCombine FromGLenum<TextureCombine>(GLenum from)
 {
     switch (from)
     {
@@ -510,17 +706,17 @@ GLenum ToGLenum(TextureCombine from)
         case TextureCombine::Modulate:
             return GL_MODULATE;
         case TextureCombine::Replace:
             return GL_REPLACE;
         case TextureCombine::Subtract:
             return GL_SUBTRACT;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 TextureEnvMode FromGLenum<TextureEnvMode>(GLenum from)
 {
     switch (from)
     {
@@ -554,17 +750,17 @@ GLenum ToGLenum(TextureEnvMode from)
         case TextureEnvMode::Decal:
             return GL_DECAL;
         case TextureEnvMode::Modulate:
             return GL_MODULATE;
         case TextureEnvMode::Replace:
             return GL_REPLACE;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 TextureOp FromGLenum<TextureOp>(GLenum from)
 {
     switch (from)
     {
@@ -590,17 +786,17 @@ GLenum ToGLenum(TextureOp from)
         case TextureOp::OneMinusSrcColor:
             return GL_ONE_MINUS_SRC_COLOR;
         case TextureOp::SrcAlpha:
             return GL_SRC_ALPHA;
         case TextureOp::SrcColor:
             return GL_SRC_COLOR;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 TextureSrc FromGLenum<TextureSrc>(GLenum from)
 {
     switch (from)
     {
@@ -626,17 +822,17 @@ GLenum ToGLenum(TextureSrc from)
         case TextureSrc::Previous:
             return GL_PREVIOUS;
         case TextureSrc::PrimaryColor:
             return GL_PRIMARY_COLOR;
         case TextureSrc::Texture:
             return GL_TEXTURE;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 TextureTarget FromGLenum<TextureTarget>(GLenum from)
 {
     switch (from)
     {
@@ -694,17 +890,17 @@ GLenum ToGLenum(TextureTarget from)
         case TextureTarget::CubeMapNegativeY:
             return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
         case TextureTarget::CubeMapPositiveZ:
             return GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
         case TextureTarget::CubeMapNegativeZ:
             return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 TextureType FromGLenum<TextureType>(GLenum from)
 {
     switch (from)
     {
@@ -742,17 +938,17 @@ GLenum ToGLenum(TextureType from)
         case TextureType::External:
             return GL_TEXTURE_EXTERNAL_OES;
         case TextureType::Rectangle:
             return GL_TEXTURE_RECTANGLE_ANGLE;
         case TextureType::CubeMap:
             return GL_TEXTURE_CUBE_MAP;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 template <>
 VertexArrayType FromGLenum<VertexArrayType>(GLenum from)
 {
     switch (from)
     {
@@ -782,13 +978,13 @@ GLenum ToGLenum(VertexArrayType from)
         case VertexArrayType::PointSize:
             return GL_POINT_SIZE_ARRAY_OES;
         case VertexArrayType::TextureCoord:
             return GL_TEXTURE_COORD_ARRAY;
         case VertexArrayType::Vertex:
             return GL_VERTEX_ARRAY;
         default:
             UNREACHABLE();
-            return GL_NONE;
+            return 0;
     }
 }
 
 }  // namespace gl
--- a/gfx/angle/checkout/src/libANGLE/PackedGLEnums_autogen.h
+++ b/gfx/angle/checkout/src/libANGLE/PackedGLEnums_autogen.h
@@ -1,22 +1,24 @@
 // GENERATED FILE - DO NOT EDIT.
 // Generated by gen_packed_gl_enums.py using data from packed_gl_enums.json.
 //
 // 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.
 //
 // PackedGLEnums_autogen.h:
-//   Declares ANGLE-specific enums classes for GLEnum and functions operating
+//   Declares ANGLE-specific enums classes for GLenums and functions operating
 //   on them.
 
 #ifndef LIBANGLE_PACKEDGLENUMS_AUTOGEN_H_
 #define LIBANGLE_PACKEDGLENUMS_AUTOGEN_H_
 
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
 #include <angle_gl.h>
 
 #include <cstdint>
 
 namespace gl
 {
 
 template <typename Enum>
@@ -79,16 +81,32 @@ enum class BufferUsage : uint8_t
     InvalidEnum = 9,
     EnumCount   = 9,
 };
 
 template <>
 BufferUsage FromGLenum<BufferUsage>(GLenum from);
 GLenum ToGLenum(BufferUsage from);
 
+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);
+
 enum class CullFaceMode : uint8_t
 {
     Back         = 0,
     Front        = 1,
     FrontAndBack = 2,
 
     InvalidEnum = 3,
     EnumCount   = 3,
@@ -121,16 +139,38 @@ enum class HintSetting : uint8_t
     InvalidEnum = 3,
     EnumCount   = 3,
 };
 
 template <>
 HintSetting FromGLenum<HintSetting>(GLenum from);
 GLenum ToGLenum(HintSetting from);
 
+enum class LightParameter : uint8_t
+{
+    Ambient              = 0,
+    AmbientAndDiffuse    = 1,
+    ConstantAttenuation  = 2,
+    Diffuse              = 3,
+    LinearAttenuation    = 4,
+    Position             = 5,
+    QuadraticAttenuation = 6,
+    Specular             = 7,
+    SpotCutoff           = 8,
+    SpotDirection        = 9,
+    SpotExponent         = 10,
+
+    InvalidEnum = 11,
+    EnumCount   = 11,
+};
+
+template <>
+LightParameter FromGLenum<LightParameter>(GLenum from);
+GLenum ToGLenum(LightParameter from);
+
 enum class LogicalOperation : uint8_t
 {
     And          = 0,
     AndInverted  = 1,
     AndReverse   = 2,
     Clear        = 3,
     Copy         = 4,
     CopyInverted = 5,
@@ -148,30 +188,65 @@ enum class LogicalOperation : uint8_t
     InvalidEnum = 16,
     EnumCount   = 16,
 };
 
 template <>
 LogicalOperation FromGLenum<LogicalOperation>(GLenum from);
 GLenum ToGLenum(LogicalOperation from);
 
+enum class MaterialParameter : uint8_t
+{
+    Ambient           = 0,
+    AmbientAndDiffuse = 1,
+    Diffuse           = 2,
+    Emission          = 3,
+    Shininess         = 4,
+    Specular          = 5,
+
+    InvalidEnum = 6,
+    EnumCount   = 6,
+};
+
+template <>
+MaterialParameter FromGLenum<MaterialParameter>(GLenum from);
+GLenum ToGLenum(MaterialParameter from);
+
 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);
 
+enum class QueryType : uint8_t
+{
+    AnySamples                         = 0,
+    AnySamplesConservative             = 1,
+    CommandsCompleted                  = 2,
+    PrimitivesGenerated                = 3,
+    TimeElapsed                        = 4,
+    Timestamp                          = 5,
+    TransformFeedbackPrimitivesWritten = 6,
+
+    InvalidEnum = 7,
+    EnumCount   = 7,
+};
+
+template <>
+QueryType FromGLenum<QueryType>(GLenum from);
+GLenum ToGLenum(QueryType from);
+
 enum class ShaderType : uint8_t
 {
     Vertex   = 0,
     Fragment = 1,
     Geometry = 2,
     Compute  = 3,
 
     InvalidEnum = 4,
--- a/gfx/angle/checkout/src/libANGLE/Program.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Program.cpp
@@ -200,34 +200,98 @@ bool IncludeSameArrayElement(const std::
             (subscripts.empty() || arrayIndices.empty() || subscripts == arrayIndices))
         {
             return true;
         }
     }
     return false;
 }
 
+std::string GetInterfaceBlockLimitName(ShaderType shaderType, sh::BlockType blockType)
+{
+    std::ostringstream stream;
+    stream << "GL_MAX_" << GetShaderTypeString(shaderType) << "_";
+
+    switch (blockType)
+    {
+        case sh::BlockType::BLOCK_UNIFORM:
+            stream << "UNIFORM_BUFFERS";
+            break;
+        case sh::BlockType::BLOCK_BUFFER:
+            stream << "SHADER_STORAGE_BLOCKS";
+            break;
+        default:
+            UNREACHABLE();
+            return "";
+    }
+
+    if (shaderType == ShaderType::Geometry)
+    {
+        stream << "_EXT";
+    }
+
+    return stream.str();
+}
+
+const char *GetInterfaceBlockTypeString(sh::BlockType blockType)
+{
+    switch (blockType)
+    {
+        case sh::BlockType::BLOCK_UNIFORM:
+            return "uniform block";
+        case sh::BlockType::BLOCK_BUFFER:
+            return "shader storage block";
+        default:
+            UNREACHABLE();
+            return "";
+    }
+}
+
+void LogInterfaceBlocksExceedLimit(InfoLog &infoLog,
+                                   ShaderType shaderType,
+                                   sh::BlockType blockType,
+                                   GLuint limit)
+{
+    infoLog << GetShaderTypeString(shaderType) << " shader "
+            << GetInterfaceBlockTypeString(blockType) << " count exceeds "
+            << GetInterfaceBlockLimitName(shaderType, blockType) << " (" << limit << ")";
+}
+
 bool ValidateInterfaceBlocksCount(GLuint maxInterfaceBlocks,
                                   const std::vector<sh::InterfaceBlock> &interfaceBlocks,
-                                  const std::string &errorMessage,
+                                  ShaderType shaderType,
+                                  sh::BlockType blockType,
+                                  GLuint *combinedInterfaceBlocksCount,
                                   InfoLog &infoLog)
 {
     GLuint blockCount = 0;
     for (const sh::InterfaceBlock &block : interfaceBlocks)
     {
-        if (block.active || block.layout != sh::BLOCKLAYOUT_PACKED)
+        if (IsActiveInterfaceBlock(block))
         {
-            blockCount += (block.arraySize ? block.arraySize : 1);
+            blockCount += std::max(block.arraySize, 1u);
             if (blockCount > maxInterfaceBlocks)
             {
-                infoLog << errorMessage << maxInterfaceBlocks << ")";
+                LogInterfaceBlocksExceedLimit(infoLog, shaderType, blockType, maxInterfaceBlocks);
                 return false;
             }
         }
     }
+
+    // [OpenGL ES 3.1] Chapter 7.6.2 Page 105:
+    // If a uniform block is used by multiple shader stages, each such use counts separately
+    // against this combined limit.
+    // [OpenGL ES 3.1] Chapter 7.8 Page 111:
+    // If a shader storage block in a program is referenced by multiple shaders, each such
+    // reference counts separately against this combined limit.
+    if (combinedInterfaceBlocksCount)
+    {
+        *combinedInterfaceBlocksCount += blockCount;
+    }
+
     return true;
 }
 
 GLuint GetInterfaceBlockIndex(const std::vector<InterfaceBlock> &list, const std::string &name)
 {
     std::vector<unsigned int> subscripts;
     std::string baseName = ParseResourceName(name, &subscripts);
 
@@ -435,86 +499,105 @@ LinkMismatchError AreMatchingInterfaceBl
         if (linkError != LinkMismatchError::NO_MISMATCH)
         {
             return linkError;
         }
     }
     return LinkMismatchError::NO_MISMATCH;
 }
 
-bool ValidateGraphicsInterfaceBlocks(const std::vector<sh::InterfaceBlock> &vertexInterfaceBlocks,
-                                     const std::vector<sh::InterfaceBlock> &fragmentInterfaceBlocks,
-                                     InfoLog &infoLog,
-                                     bool webglCompatibility,
-                                     sh::BlockType blockType,
-                                     GLuint maxCombinedInterfaceBlocks)
+using ShaderInterfaceBlock = std::pair<ShaderType, const sh::InterfaceBlock *>;
+using InterfaceBlockMap    = std::map<std::string, ShaderInterfaceBlock>;
+
+void InitializeInterfaceBlockMap(const std::vector<sh::InterfaceBlock> &interfaceBlocks,
+                                 ShaderType shaderType,
+                                 InterfaceBlockMap *linkedInterfaceBlocks)
 {
-    // Check that interface blocks defined in the vertex and fragment shaders are identical
-    typedef std::map<std::string, const sh::InterfaceBlock *> InterfaceBlockMap;
-    InterfaceBlockMap linkedInterfaceBlocks;
-    GLuint blockCount = 0;
-
-    for (const sh::InterfaceBlock &vertexInterfaceBlock : vertexInterfaceBlocks)
+    ASSERT(linkedInterfaceBlocks);
+
+    for (const sh::InterfaceBlock &interfaceBlock : interfaceBlocks)
     {
-        linkedInterfaceBlocks[vertexInterfaceBlock.name] = &vertexInterfaceBlock;
-        if (IsActiveInterfaceBlock(vertexInterfaceBlock))
-        {
-            blockCount += std::max(vertexInterfaceBlock.arraySize, 1u);
-        }
+        (*linkedInterfaceBlocks)[interfaceBlock.name] = std::make_pair(shaderType, &interfaceBlock);
     }
-
-    for (const sh::InterfaceBlock &fragmentInterfaceBlock : fragmentInterfaceBlocks)
+}
+
+bool ValidateGraphicsInterfaceBlocksPerShader(
+    const std::vector<sh::InterfaceBlock> &interfaceBlocksToLink,
+    ShaderType shaderType,
+    bool webglCompatibility,
+    InterfaceBlockMap *linkedBlocks,
+    InfoLog &infoLog)
+{
+    ASSERT(linkedBlocks);
+
+    for (const sh::InterfaceBlock &block : interfaceBlocksToLink)
     {
-        auto entry = linkedInterfaceBlocks.find(fragmentInterfaceBlock.name);
-        if (entry != linkedInterfaceBlocks.end())
+        const auto &entry = linkedBlocks->find(block.name);
+        if (entry != linkedBlocks->end())
         {
-            const sh::InterfaceBlock &vertexInterfaceBlock = *(entry->second);
-            std::string mismatchedBlockFieldName;
-            LinkMismatchError linkError =
-                AreMatchingInterfaceBlocks(vertexInterfaceBlock, fragmentInterfaceBlock,
-                                           webglCompatibility, &mismatchedBlockFieldName);
+            const sh::InterfaceBlock &linkedBlock = *(entry->second.second);
+            std::string mismatchedStructFieldName;
+            LinkMismatchError linkError = AreMatchingInterfaceBlocks(
+                block, linkedBlock, webglCompatibility, &mismatchedStructFieldName);
             if (linkError != LinkMismatchError::NO_MISMATCH)
             {
-                LogLinkMismatch(infoLog, fragmentInterfaceBlock.name, "interface block", linkError,
-                                mismatchedBlockFieldName, ShaderType::Vertex, ShaderType::Fragment);
+                LogLinkMismatch(infoLog, block.name, GetInterfaceBlockTypeString(block.blockType),
+                                linkError, mismatchedStructFieldName, entry->second.first,
+                                shaderType);
                 return false;
             }
         }
-
-        // [OpenGL ES 3.1] Chapter 7.6.2 Page 105:
-        // If a uniform block is used by multiple shader stages, each such use counts separately
-        // against this combined limit.
-        // [OpenGL ES 3.1] Chapter 7.8 Page 111:
-        // If a shader storage block in a program is referenced by multiple shaders, each such
-        // reference counts separately against this combined limit.
-        if (IsActiveInterfaceBlock(fragmentInterfaceBlock))
+        else
         {
-            blockCount += std::max(fragmentInterfaceBlock.arraySize, 1u);
+            (*linkedBlocks)[block.name] = std::make_pair(shaderType, &block);
         }
     }
 
-    if (blockCount > maxCombinedInterfaceBlocks)
+    return true;
+}
+
+bool ValidateInterfaceBlocksMatch(
+    GLuint numShadersHasInterfaceBlocks,
+    const ShaderMap<const std::vector<sh::InterfaceBlock> *> &shaderInterfaceBlocks,
+    InfoLog &infoLog,
+    bool webglCompatibility)
+{
+    if (numShadersHasInterfaceBlocks < 2u)
     {
-        switch (blockType)
+        return true;
+    }
+
+    ASSERT(!shaderInterfaceBlocks[ShaderType::Compute]);
+
+    // Check that interface blocks defined in the graphics shaders are identical
+
+    InterfaceBlockMap linkedInterfaceBlocks;
+
+    bool interfaceBlockMapInitialized = false;
+    for (ShaderType shaderType : kAllGraphicsShaderTypes)
+    {
+        if (!shaderInterfaceBlocks[shaderType])
         {
-            case sh::BlockType::BLOCK_UNIFORM:
-                infoLog << "The sum of the number of active uniform blocks exceeds "
-                           "MAX_COMBINED_UNIFORM_BLOCKS ("
-                        << maxCombinedInterfaceBlocks << ").";
-                break;
-            case sh::BlockType::BLOCK_BUFFER:
-                infoLog << "The sum of the number of active shader storage blocks exceeds "
-                           "MAX_COMBINED_SHADER_STORAGE_BLOCKS ("
-                        << maxCombinedInterfaceBlocks << ").";
-                break;
-            default:
-                UNREACHABLE();
+            continue;
+        }
+
+        if (!interfaceBlockMapInitialized)
+        {
+            InitializeInterfaceBlockMap(*shaderInterfaceBlocks[shaderType], shaderType,
+                                        &linkedInterfaceBlocks);
+            interfaceBlockMapInitialized = true;
         }
-        return false;
+        else if (!ValidateGraphicsInterfaceBlocksPerShader(*shaderInterfaceBlocks[shaderType],
+                                                           shaderType, webglCompatibility,
+                                                           &linkedInterfaceBlocks, infoLog))
+        {
+            return false;
+        }
     }
+
     return true;
 }
 
 }  // anonymous namespace
 
 const char *const g_fakepath = "C:\\fakepath";
 
 // InfoLog implementation.
@@ -695,20 +778,17 @@ ImageBinding::ImageBinding(GLuint imageU
 
 ImageBinding::ImageBinding(const ImageBinding &other) = default;
 
 ImageBinding::~ImageBinding() = default;
 
 // ProgramState implementation.
 ProgramState::ProgramState()
     : mLabel(),
-      mAttachedFragmentShader(nullptr),
-      mAttachedVertexShader(nullptr),
-      mAttachedComputeShader(nullptr),
-      mAttachedGeometryShader(nullptr),
+      mAttachedShaders({}),
       mTransformFeedbackBufferMode(GL_INTERLEAVED_ATTRIBS),
       mMaxActiveAttribLocation(0),
       mSamplerUniformRange(0, 0),
       mImageUniformRange(0, 0),
       mAtomicCounterUniformRange(0, 0),
       mBinaryRetrieveableHint(false),
       mNumViews(-1),
       // [GL_EXT_geometry_shader] Table 20.22
@@ -717,41 +797,28 @@ ProgramState::ProgramState()
       mGeometryShaderInvocations(1),
       mGeometryShaderMaxVertices(0)
 {
     mComputeShaderLocalSize.fill(1);
 }
 
 ProgramState::~ProgramState()
 {
-    ASSERT(!mAttachedVertexShader && !mAttachedFragmentShader && !mAttachedComputeShader &&
-           !mAttachedGeometryShader);
+    ASSERT(!hasAttachedShader());
 }
 
 const std::string &ProgramState::getLabel()
 {
     return mLabel;
 }
 
 Shader *ProgramState::getAttachedShader(ShaderType shaderType) const
 {
-    switch (shaderType)
-    {
-        case ShaderType::Vertex:
-            return mAttachedVertexShader;
-        case ShaderType::Fragment:
-            return mAttachedFragmentShader;
-        case ShaderType::Compute:
-            return mAttachedComputeShader;
-        case ShaderType::Geometry:
-            return mAttachedGeometryShader;
-        default:
-            UNREACHABLE();
-            return nullptr;
-    }
+    ASSERT(shaderType != ShaderType::InvalidEnum);
+    return mAttachedShaders[shaderType];
 }
 
 GLuint ProgramState::getUniformIndexFromName(const std::string &name) const
 {
     return GetResourceIndexFromName(mUniforms, name);
 }
 
 GLuint ProgramState::getBufferVariableIndexFromName(const std::string &name) const
@@ -795,16 +862,28 @@ GLuint ProgramState::getAttributeLocatio
         {
             return attribute.location;
         }
     }
 
     return static_cast<GLuint>(-1);
 }
 
+bool ProgramState::hasAttachedShader() const
+{
+    for (const Shader *shader : mAttachedShaders)
+    {
+        if (shader)
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
 Program::Program(rx::GLImplFactory *factory, ShaderProgramManager *manager, GLuint handle)
     : mProgram(factory->createProgram(mState)),
       mValidated(false),
       mLinked(false),
       mDeleteStatus(false),
       mRefCount(0),
       mResourceManager(manager),
       mHandle(handle)
@@ -816,45 +895,29 @@ Program::Program(rx::GLImplFactory *fact
 
 Program::~Program()
 {
     ASSERT(!mProgram);
 }
 
 void Program::onDestroy(const Context *context)
 {
-    if (mState.mAttachedVertexShader != nullptr)
-    {
-        mState.mAttachedVertexShader->release(context);
-        mState.mAttachedVertexShader = nullptr;
-    }
-
-    if (mState.mAttachedFragmentShader != nullptr)
+    for (ShaderType shaderType : AllShaderTypes())
     {
-        mState.mAttachedFragmentShader->release(context);
-        mState.mAttachedFragmentShader = nullptr;
-    }
-
-    if (mState.mAttachedComputeShader != nullptr)
-    {
-        mState.mAttachedComputeShader->release(context);
-        mState.mAttachedComputeShader = nullptr;
-    }
-
-    if (mState.mAttachedGeometryShader != nullptr)
-    {
-        mState.mAttachedGeometryShader->release(context);
-        mState.mAttachedGeometryShader = nullptr;
+        if (mState.mAttachedShaders[shaderType])
+        {
+            mState.mAttachedShaders[shaderType]->release(context);
+            mState.mAttachedShaders[shaderType] = nullptr;
+        }
     }
 
     // TODO(jmadill): Handle error in the Context.
     ANGLE_SWALLOW_ERR(mProgram->destroy(context));
 
-    ASSERT(!mState.mAttachedVertexShader && !mState.mAttachedFragmentShader &&
-           !mState.mAttachedComputeShader && !mState.mAttachedGeometryShader);
+    ASSERT(!mState.hasAttachedShader());
     SafeDelete(mProgram);
 
     delete this;
 }
 
 void Program::setLabel(const std::string &label)
 {
     mState.mLabel = label;
@@ -862,92 +925,45 @@ void Program::setLabel(const std::string
 
 const std::string &Program::getLabel() const
 {
     return mState.mLabel;
 }
 
 void Program::attachShader(Shader *shader)
 {
-    switch (shader->getType())
-    {
-        case ShaderType::Vertex:
-        {
-            ASSERT(!mState.mAttachedVertexShader);
-            mState.mAttachedVertexShader = shader;
-            mState.mAttachedVertexShader->addRef();
-            break;
-        }
-        case ShaderType::Fragment:
-        {
-            ASSERT(!mState.mAttachedFragmentShader);
-            mState.mAttachedFragmentShader = shader;
-            mState.mAttachedFragmentShader->addRef();
-            break;
-        }
-        case ShaderType::Compute:
-        {
-            ASSERT(!mState.mAttachedComputeShader);
-            mState.mAttachedComputeShader = shader;
-            mState.mAttachedComputeShader->addRef();
-            break;
-        }
-        case ShaderType::Geometry:
-        {
-            ASSERT(!mState.mAttachedGeometryShader);
-            mState.mAttachedGeometryShader = shader;
-            mState.mAttachedGeometryShader->addRef();
-            break;
-        }
-        default:
-            UNREACHABLE();
-    }
+    ShaderType shaderType = shader->getType();
+    ASSERT(shaderType != ShaderType::InvalidEnum);
+
+    mState.mAttachedShaders[shaderType] = shader;
+    mState.mAttachedShaders[shaderType]->addRef();
 }
 
 void Program::detachShader(const Context *context, Shader *shader)
 {
-    switch (shader->getType())
-    {
-        case ShaderType::Vertex:
-        {
-            ASSERT(mState.mAttachedVertexShader == shader);
-            shader->release(context);
-            mState.mAttachedVertexShader = nullptr;
-            break;
-        }
-        case ShaderType::Fragment:
-        {
-            ASSERT(mState.mAttachedFragmentShader == shader);
-            shader->release(context);
-            mState.mAttachedFragmentShader = nullptr;
-            break;
-        }
-        case ShaderType::Compute:
-        {
-            ASSERT(mState.mAttachedComputeShader == shader);
-            shader->release(context);
-            mState.mAttachedComputeShader = nullptr;
-            break;
-        }
-        case ShaderType::Geometry:
-        {
-            ASSERT(mState.mAttachedGeometryShader == shader);
-            shader->release(context);
-            mState.mAttachedGeometryShader = nullptr;
-            break;
-        }
-        default:
-            UNREACHABLE();
-    }
+    ShaderType shaderType = shader->getType();
+    ASSERT(shaderType != ShaderType::InvalidEnum);
+
+    ASSERT(mState.mAttachedShaders[shaderType] == shader);
+    shader->release(context);
+    mState.mAttachedShaders[shaderType] = nullptr;
 }
 
 int Program::getAttachedShadersCount() const
 {
-    return (mState.mAttachedVertexShader ? 1 : 0) + (mState.mAttachedFragmentShader ? 1 : 0) +
-           (mState.mAttachedComputeShader ? 1 : 0) + (mState.mAttachedGeometryShader ? 1 : 0);
+    int numAttachedShaders = 0;
+    for (const Shader *shader : mState.mAttachedShaders)
+    {
+        if (shader)
+        {
+            ++numAttachedShaders;
+        }
+    }
+
+    return numAttachedShaders;
 }
 
 const Shader *Program::getAttachedShader(ShaderType shaderType) const
 {
     return mState.getAttachedShader(shaderType);
 }
 
 void Program::bindAttributeLocation(GLuint index, const char *name)
@@ -1074,25 +1090,43 @@ Error Program::link(const gl::Context *c
     }
 
     // Cache load failed, fall through to normal linking.
     unlink();
 
     // Re-link shaders after the unlink call.
     ASSERT(linkValidateShaders(context, mInfoLog));
 
-    if (mState.mAttachedComputeShader)
+    if (mState.mAttachedShaders[ShaderType::Compute])
     {
-        if (!linkUniforms(context, mInfoLog, mUniformLocationBindings))
+        GLuint combinedImageUniforms = 0u;
+        if (!linkUniforms(context, mInfoLog, mUniformLocationBindings, &combinedImageUniforms))
+        {
+            return NoError();
+        }
+
+        GLuint combinedShaderStorageBlocks = 0u;
+        if (!linkInterfaceBlocks(context, mInfoLog, &combinedShaderStorageBlocks))
         {
             return NoError();
         }
 
-        if (!linkInterfaceBlocks(context, mInfoLog))
+        // [OpenGL ES 3.1] Chapter 8.22 Page 203:
+        // A link error will be generated if the sum of the number of active image uniforms used in
+        // all shaders, the number of active shader storage blocks, and the number of active
+        // fragment shader outputs exceeds the implementation-dependent value of
+        // MAX_COMBINED_SHADER_OUTPUT_RESOURCES.
+        if (combinedImageUniforms + combinedShaderStorageBlocks >
+            context->getCaps().maxCombinedShaderOutputResources)
         {
+            mInfoLog
+                << "The sum of the number of active image uniforms, active shader storage blocks "
+                   "and active fragment shader outputs exceeds "
+                   "MAX_COMBINED_SHADER_OUTPUT_RESOURCES ("
+                << context->getCaps().maxCombinedShaderOutputResources << ")";
             return NoError();
         }
 
         ProgramLinkedResources resources = {
             {0, PackMode::ANGLE_RELAXED},
             {&mState.mUniformBlocks, &mState.mUniforms},
             {&mState.mShaderStorageBlocks, &mState.mBufferVariables},
             {&mState.mAtomicCounterBuffers}};
@@ -1113,37 +1147,42 @@ Error Program::link(const gl::Context *c
             return NoError();
         }
 
         if (!linkVaryings(context, mInfoLog))
         {
             return NoError();
         }
 
-        if (!linkUniforms(context, mInfoLog, mUniformLocationBindings))
+        GLuint combinedImageUniforms = 0u;
+        if (!linkUniforms(context, mInfoLog, mUniformLocationBindings, &combinedImageUniforms))
         {
             return NoError();
         }
 
-        if (!linkInterfaceBlocks(context, mInfoLog))
+        GLuint combinedShaderStorageBlocks = 0u;
+        if (!linkInterfaceBlocks(context, mInfoLog, &combinedShaderStorageBlocks))
         {
             return NoError();
         }
 
         if (!linkValidateGlobalNames(context, mInfoLog))
         {
             return NoError();
         }
 
+        if (!linkOutputVariables(context, combinedImageUniforms, combinedShaderStorageBlocks))
+        {
+            return NoError();
+        }
+
         const auto &mergedVaryings = getMergedVaryings(context);
 
-        ASSERT(mState.mAttachedVertexShader);
-        mState.mNumViews = mState.mAttachedVertexShader->getNumViews(context);
-
-        linkOutputVariables(context);
+        ASSERT(mState.mAttachedShaders[ShaderType::Vertex]);
+        mState.mNumViews = mState.mAttachedShaders[ShaderType::Vertex]->getNumViews(context);
 
         // Map the varyings to the register file
         // In WebGL, we use a slightly different handling for packing variables.
         gl::PackMode packMode = PackMode::ANGLE_RELAXED;
         if (data.getLimitations().noFlexibleVaryingPacking)
         {
             // D3D9 pack mode is strictly more strict than WebGL, so takes priority.
             packMode = PackMode::ANGLE_NON_CONFORMANT_D3D9;
@@ -1207,34 +1246,22 @@ Error Program::link(const gl::Context *c
 
     return NoError();
 }
 
 void Program::updateLinkedShaderStages()
 {
     mState.mLinkedShaderStages.reset();
 
-    if (mState.mAttachedVertexShader)
-    {
-        mState.mLinkedShaderStages.set(ShaderType::Vertex);
-    }
-
-    if (mState.mAttachedFragmentShader)
+    for (const Shader *shader : mState.mAttachedShaders)
     {
-        mState.mLinkedShaderStages.set(ShaderType::Fragment);
-    }
-
-    if (mState.mAttachedComputeShader)
-    {
-        mState.mLinkedShaderStages.set(ShaderType::Compute);
-    }
-
-    if (mState.mAttachedGeometryShader)
-    {
-        mState.mLinkedShaderStages.set(ShaderType::Geometry);
+        if (shader)
+        {
+            mState.mLinkedShaderStages.set(shader->getType());
+        }
     }
 }
 
 void ProgramState::updateTransformFeedbackStrides()
 {
     if (mTransformFeedbackBufferMode == GL_INTERLEAVED_ATTRIBS)
     {
         mTransformFeedbackStrides.resize(1);
@@ -1286,21 +1313,16 @@ void Program::unlink()
     mState.mGeometryShaderMaxVertices         = 0;
 
     mValidated = false;
 
     mLinked = false;
     mInfoLog.reset();
 }
 
-bool Program::isLinked() const
-{
-    return mLinked;
-}
-
 bool Program::hasLinkedShaderStage(ShaderType shaderType) const
 {
     ASSERT(shaderType != ShaderType::InvalidEnum);
     return mState.mLinkedShaderStages[shaderType];
 }
 
 Error Program::loadBinary(const Context *context,
                           GLenum binaryFormat,
@@ -1446,49 +1468,22 @@ void Program::getInfoLog(GLsizei bufSize
 {
     return mInfoLog.getLog(bufSize, length, infoLog);
 }
 
 void Program::getAttachedShaders(GLsizei maxCount, GLsizei *count, GLuint *shaders) const
 {
     int total = 0;
 
-    if (mState.mAttachedComputeShader)
+    for (const Shader *shader : mState.mAttachedShaders)
     {
-        if (total < maxCount)
-        {
-            shaders[total] = mState.mAttachedComputeShader->getHandle();
-            total++;
-        }
-    }
-
-    if (mState.mAttachedVertexShader)
-    {
-        if (total < maxCount)
+        if (shader && (total < maxCount))
         {
-            shaders[total] = mState.mAttachedVertexShader->getHandle();
-            total++;
-        }
-    }
-
-    if (mState.mAttachedFragmentShader)
-    {
-        if (total < maxCount)
-        {
-            shaders[total] = mState.mAttachedFragmentShader->getHandle();
-            total++;
-        }
-    }
-
-    if (mState.mAttachedGeometryShader)
-    {
-        if (total < maxCount)
-        {
-            shaders[total] = mState.mAttachedGeometryShader->getHandle();
-            total++;
+            shaders[total] = shader->getHandle();
+            ++total;
         }
     }
 
     if (count)
     {
         *count = total;
     }
 }
@@ -1754,27 +1749,16 @@ const LinkedUniform &Program::getUniform
 }
 
 const VariableLocation &Program::getUniformLocation(GLint location) const
 {
     ASSERT(location >= 0 && static_cast<size_t>(location) < mState.mUniformLocations.size());
     return mState.mUniformLocations[location];
 }
 
-const std::vector<VariableLocation> &Program::getUniformLocations() const
-{
-    return mState.mUniformLocations;
-}
-
-const LinkedUniform &Program::getUniformByIndex(GLuint index) const
-{
-    ASSERT(index < static_cast<size_t>(mState.mUniforms.size()));
-    return mState.mUniforms[index];
-}
-
 const BufferVariable &Program::getBufferVariableByIndex(GLuint index) const
 {
     ASSERT(index < static_cast<size_t>(mState.mBufferVariables.size()));
     return mState.mBufferVariables[index];
 }
 
 GLint Program::getUniformLocation(const std::string &name) const
 {
@@ -2256,20 +2240,20 @@ GLsizei Program::getTransformFeedbackVar
 
 GLenum Program::getTransformFeedbackBufferMode() const
 {
     return mState.mTransformFeedbackBufferMode;
 }
 
 bool Program::linkValidateShaders(const Context *context, InfoLog &infoLog)
 {
-    Shader *vertexShader   = mState.mAttachedVertexShader;
-    Shader *fragmentShader = mState.mAttachedFragmentShader;
-    Shader *computeShader  = mState.mAttachedComputeShader;
-    Shader *geometryShader = mState.mAttachedGeometryShader;
+    Shader *vertexShader   = mState.mAttachedShaders[ShaderType::Vertex];
+    Shader *fragmentShader = mState.mAttachedShaders[ShaderType::Fragment];
+    Shader *computeShader  = mState.mAttachedShaders[ShaderType::Compute];
+    Shader *geometryShader = mState.mAttachedShaders[ShaderType::Geometry];
 
     bool isComputeShaderAttached  = (computeShader != nullptr);
     bool isGraphicsShaderAttached =
         (vertexShader != nullptr || fragmentShader != nullptr || geometryShader != nullptr);
     // Check whether we both have a compute and non-compute shaders attached.
     // If there are of both types attached, then linking should fail.
     // OpenGL ES 3.10, 7.3 Program Objects, under LinkProgram
     if (isComputeShaderAttached == true && isGraphicsShaderAttached == true)
@@ -2395,32 +2379,34 @@ GLuint Program::getTransformFeedbackVary
 const TransformFeedbackVarying &Program::getTransformFeedbackVaryingResource(GLuint index) const
 {
     ASSERT(index < mState.mLinkedTransformFeedbackVaryings.size());
     return mState.mLinkedTransformFeedbackVaryings[index];
 }
 
 bool Program::linkVaryings(const Context *context, InfoLog &infoLog) const
 {
-    std::vector<Shader *> activeShaders;
-    activeShaders.push_back(mState.mAttachedVertexShader);
-    if (mState.mAttachedGeometryShader)
+    Shader *previousShader = nullptr;
+    for (ShaderType shaderType : kAllGraphicsShaderTypes)
     {
-        activeShaders.push_back(mState.mAttachedGeometryShader);
-    }
-    activeShaders.push_back(mState.mAttachedFragmentShader);
-
-    const size_t activeShaderCount = activeShaders.size();
-    for (size_t shaderIndex = 0; shaderIndex < activeShaderCount - 1; ++shaderIndex)
-    {
-        if (!linkValidateShaderInterfaceMatching(context, activeShaders[shaderIndex],
-                                                 activeShaders[shaderIndex + 1], infoLog))
+        Shader *currentShader = mState.mAttachedShaders[shaderType];
+        if (!currentShader)
+        {
+            continue;
+        }
+
+        if (previousShader)
         {
-            return false;
+            if (!linkValidateShaderInterfaceMatching(context, previousShader, currentShader,
+                                                     infoLog))
+            {
+                return false;
+            }
         }
+        previousShader = currentShader;
     }
 
     if (!linkValidateBuiltInVaryings(context, infoLog))
     {
         return false;
     }
 
     if (!linkValidateFragmentInputBindings(context, infoLog))
@@ -2493,22 +2479,22 @@ bool Program::linkValidateShaderInterfac
 
     // TODO(jmadill): verify no unmatched output varyings?
 
     return true;
 }
 
 bool Program::linkValidateFragmentInputBindings(const Context *context, gl::InfoLog &infoLog) const
 {
-    ASSERT(mState.mAttachedFragmentShader);
+    ASSERT(mState.mAttachedShaders[ShaderType::Fragment]);
 
     std::map<GLuint, std::string> staticFragmentInputLocations;
 
     const std::vector<sh::Varying> &fragmentInputVaryings =
-        mState.mAttachedFragmentShader->getInputVaryings(context);
+        mState.mAttachedShaders[ShaderType::Fragment]->getInputVaryings(context);
     for (const sh::Varying &input : fragmentInputVaryings)
     {
         if (input.isBuiltIn() || !input.staticUse)
         {
             continue;
         }
 
         const auto inputBinding = mFragmentInputBindings.getBinding(input.name);
@@ -2528,38 +2514,41 @@ bool Program::linkValidateFragmentInputB
         }
     }
 
     return true;
 }
 
 bool Program::linkUniforms(const Context *context,
                            InfoLog &infoLog,
-                           const ProgramBindings &uniformLocationBindings)
+                           const ProgramBindings &uniformLocationBindings,
+                           GLuint *combinedImageUniformsCount)
 {
     UniformLinker linker(mState);
     if (!linker.link(context, infoLog, uniformLocationBindings))
     {
         return false;
     }
 
     linker.getResults(&mState.mUniforms, &mState.mUniformLocations);
 
-    linkSamplerAndImageBindings();
+    linkSamplerAndImageBindings(combinedImageUniformsCount);
 
     if (!linkAtomicCounterBuffers())
     {
         return false;
     }
 
     return true;
 }
 
-void Program::linkSamplerAndImageBindings()
+void Program::linkSamplerAndImageBindings(GLuint *combinedImageUniforms)
 {
+    ASSERT(combinedImageUniforms);
+
     unsigned int high = static_cast<unsigned int>(mState.mUniforms.size());
     unsigned int low  = high;
 
     for (auto counterIter = mState.mUniforms.rbegin();
          counterIter != mState.mUniforms.rend() && counterIter->isAtomicCounter(); ++counterIter)
     {
         --low;
     }
@@ -2570,17 +2559,17 @@ void Program::linkSamplerAndImageBinding
 
     for (auto imageIter = mState.mUniforms.rbegin();
          imageIter != mState.mUniforms.rend() && imageIter->isImage(); ++imageIter)
     {
         --low;
     }
 
     mState.mImageUniformRange = RangeUI(low, high);
-
+    *combinedImageUniforms    = 0u;
     // If uniform is a image type, insert it into the mImageBindings array.
     for (unsigned int imageIndex : mState.mImageUniformRange)
     {
         // ES3.1 (section 7.6.1) and GLSL ES3.1 (section 4.4.5), Uniform*i{v} commands
         // cannot load values into a uniform defined as an image. if declare without a
         // binding qualifier, any uniform image variable (include all elements of
         // unbound image array) shoud be bound to unit zero.
         auto &imageUniform = mState.mUniforms[imageIndex];
@@ -2589,16 +2578,19 @@ void Program::linkSamplerAndImageBinding
             mState.mImageBindings.emplace_back(
                 ImageBinding(imageUniform.getBasicTypeElementCount()));
         }
         else
         {
             mState.mImageBindings.emplace_back(
                 ImageBinding(imageUniform.binding, imageUniform.getBasicTypeElementCount()));
         }
+
+        GLuint arraySize = imageUniform.isArray() ? imageUniform.arraySizes[0] : 1u;
+        *combinedImageUniforms += imageUniform.activeShaderCount() * arraySize;
     }
 
     high = low;
 
     for (auto samplerIter = mState.mUniforms.rbegin() + mState.mImageUniformRange.length();
          samplerIter != mState.mUniforms.rend() && samplerIter->isSampler(); ++samplerIter)
     {
         --low;
@@ -2803,133 +2795,108 @@ bool Program::linkAttributes(const Conte
                 mState.mAttributesMask.set(location);
             }
         }
     }
 
     return true;
 }
 
-bool Program::linkInterfaceBlocks(const Context *context, InfoLog &infoLog)
+bool Program::linkInterfaceBlocks(const Context *context,
+                                  InfoLog &infoLog,
+                                  GLuint *combinedShaderStorageBlocksCount)
 {
+    ASSERT(combinedShaderStorageBlocksCount);
+
     const auto &caps = context->getCaps();
 
-    if (mState.mAttachedComputeShader)
+    GLuint combinedUniformBlocksCount                                         = 0u;
+    GLuint numShadersHasUniformBlocks                                         = 0u;
+    ShaderMap<const std::vector<sh::InterfaceBlock> *> allShaderUniformBlocks = {};
+    for (ShaderType shaderType : AllShaderTypes())
     {
-        Shader &computeShader              = *mState.mAttachedComputeShader;
-        const auto &computeUniformBlocks   = computeShader.getUniformBlocks(context);
-
-        if (!ValidateInterfaceBlocksCount(
-                caps.maxComputeUniformBlocks, computeUniformBlocks,
-                "Compute shader uniform block count exceeds GL_MAX_COMPUTE_UNIFORM_BLOCKS (",
-                infoLog))
+        Shader *shader = mState.mAttachedShaders[shaderType];
+        if (!shader)
         {
-            return false;
+            continue;
         }
 
-        const auto &computeShaderStorageBlocks = computeShader.getShaderStorageBlocks(context);
-        if (!ValidateInterfaceBlocksCount(caps.maxComputeShaderStorageBlocks,
-                                          computeShaderStorageBlocks,
-                                          "Compute shader shader storage block count exceeds "
-                                          "GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS (",
-                                          infoLog))
+        const auto &uniformBlocks = shader->getUniformBlocks(context);
+        if (!uniformBlocks.empty())
         {
-            return false;
+            if (!ValidateInterfaceBlocksCount(
+                    caps.maxShaderUniformBlocks[shaderType], uniformBlocks, shaderType,
+                    sh::BlockType::BLOCK_UNIFORM, &combinedUniformBlocksCount, infoLog))
+            {
+                return false;
+            }
+
+            allShaderUniformBlocks[shaderType] = &uniformBlocks;
+            ++numShadersHasUniformBlocks;
         }
-        return true;
     }
 
-    Shader &vertexShader   = *mState.mAttachedVertexShader;
-    Shader &fragmentShader = *mState.mAttachedFragmentShader;
-
-    const auto &vertexUniformBlocks   = vertexShader.getUniformBlocks(context);
-    const auto &fragmentUniformBlocks = fragmentShader.getUniformBlocks(context);
-
-    if (!ValidateInterfaceBlocksCount(
-            caps.maxVertexUniformBlocks, vertexUniformBlocks,
-            "Vertex shader uniform block count exceeds GL_MAX_VERTEX_UNIFORM_BLOCKS (", infoLog))
+    if (combinedUniformBlocksCount > caps.maxCombinedUniformBlocks)
     {
+        infoLog << "The sum of the number of active uniform blocks exceeds "
+                   "MAX_COMBINED_UNIFORM_BLOCKS ("
+                << caps.maxCombinedUniformBlocks << ").";
         return false;
     }
-    if (!ValidateInterfaceBlocksCount(
-            caps.maxFragmentUniformBlocks, fragmentUniformBlocks,
-            "Fragment shader uniform block count exceeds GL_MAX_FRAGMENT_UNIFORM_BLOCKS (",
-            infoLog))
-    {
-
-        return false;
-    }
-
-    Shader *geometryShader = mState.mAttachedGeometryShader;
-    if (geometryShader)
-    {
-        const auto &geometryUniformBlocks = geometryShader->getUniformBlocks(context);
-        if (!ValidateInterfaceBlocksCount(
-                caps.maxGeometryUniformBlocks, geometryUniformBlocks,
-                "Geometry shader uniform block count exceeds GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT (",
-                infoLog))
-        {
-            return false;
-        }
-    }
-
-    // TODO(jiawei.shao@intel.com): validate geometry shader uniform blocks.
+
     bool webglCompatibility = context->getExtensions().webglCompatibility;
-    if (!ValidateGraphicsInterfaceBlocks(vertexUniformBlocks, fragmentUniformBlocks, infoLog,
-                                         webglCompatibility, sh::BlockType::BLOCK_UNIFORM,
-                                         caps.maxCombinedUniformBlocks))
+    if (!ValidateInterfaceBlocksMatch(numShadersHasUniformBlocks, allShaderUniformBlocks, infoLog,
+                                      webglCompatibility))
     {
         return false;
     }
 
     if (context->getClientVersion() >= Version(3, 1))
     {
-        const auto &vertexShaderStorageBlocks   = vertexShader.getShaderStorageBlocks(context);
-        const auto &fragmentShaderStorageBlocks = fragmentShader.getShaderStorageBlocks(context);
-
-        if (!ValidateInterfaceBlocksCount(caps.maxVertexShaderStorageBlocks,
-                                          vertexShaderStorageBlocks,
-                                          "Vertex shader shader storage block count exceeds "
-                                          "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS (",
-                                          infoLog))
+        *combinedShaderStorageBlocksCount                                         = 0u;
+        GLuint numShadersHasShaderStorageBlocks                                   = 0u;
+        ShaderMap<const std::vector<sh::InterfaceBlock> *> allShaderStorageBlocks = {};
+        for (ShaderType shaderType : AllShaderTypes())
         {
-            return false;
+            Shader *shader = mState.mAttachedShaders[shaderType];
+            if (!shader)
+            {
+                continue;
+            }
+
+            const auto &shaderStorageBlocks = shader->getShaderStorageBlocks(context);
+            if (!shaderStorageBlocks.empty())
+            {
+                if (!ValidateInterfaceBlocksCount(
+                        caps.maxShaderStorageBlocks[shaderType], shaderStorageBlocks, shaderType,
+                        sh::BlockType::BLOCK_BUFFER, combinedShaderStorageBlocksCount, infoLog))
+                {
+                    return false;
+                }
+
+                allShaderStorageBlocks[shaderType] = &shaderStorageBlocks;
+                ++numShadersHasShaderStorageBlocks;
+            }
         }
-        if (!ValidateInterfaceBlocksCount(caps.maxFragmentShaderStorageBlocks,
-                                          fragmentShaderStorageBlocks,
-                                          "Fragment shader shader storage block count exceeds "
-                                          "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS (",
-                                          infoLog))
+
+        if (*combinedShaderStorageBlocksCount > caps.maxCombinedShaderStorageBlocks)
         {
-
+            infoLog << "The sum of the number of active shader storage blocks exceeds "
+                       "MAX_COMBINED_SHADER_STORAGE_BLOCKS ("
+                    << caps.maxCombinedShaderStorageBlocks << ").";
             return false;
         }
 
-        if (geometryShader)
-        {
-            const auto &geometryShaderStorageBlocks =
-                geometryShader->getShaderStorageBlocks(context);
-            if (!ValidateInterfaceBlocksCount(caps.maxGeometryShaderStorageBlocks,
-                                              geometryShaderStorageBlocks,
-                                              "Geometry shader shader storage block count exceeds "
-                                              "GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT (",
-                                              infoLog))
-            {
-                return false;
-            }
-        }
-
-        // TODO(jiawei.shao@intel.com): validate geometry shader shader storage blocks.
-        if (!ValidateGraphicsInterfaceBlocks(
-                vertexShaderStorageBlocks, fragmentShaderStorageBlocks, infoLog, webglCompatibility,
-                sh::BlockType::BLOCK_BUFFER, caps.maxCombinedShaderStorageBlocks))
+        if (!ValidateInterfaceBlocksMatch(numShadersHasShaderStorageBlocks, allShaderStorageBlocks,
+                                          infoLog, webglCompatibility))
         {
             return false;
         }
     }
+
     return true;
 }
 
 LinkMismatchError Program::LinkValidateVariablesBase(const sh::ShaderVariable &variable1,
                                                      const sh::ShaderVariable &variable2,
                                                      bool validatePrecision,
                                                      bool validateArraySize,
                                                      std::string *mismatchedStructOrBlockMemberName)
@@ -3024,18 +2991,18 @@ LinkMismatchError Program::LinkValidateV
         return LinkMismatchError::INVARIANCE_MISMATCH;
     }
 
     return LinkMismatchError::NO_MISMATCH;
 }
 
 bool Program::linkValidateBuiltInVaryings(const Context *context, InfoLog &infoLog) const
 {
-    Shader *vertexShader         = mState.mAttachedVertexShader;
-    Shader *fragmentShader       = mState.mAttachedFragmentShader;
+    Shader *vertexShader         = mState.mAttachedShaders[ShaderType::Vertex];
+    Shader *fragmentShader       = mState.mAttachedShaders[ShaderType::Fragment];
     const auto &vertexVaryings   = vertexShader->getOutputVaryings(context);
     const auto &fragmentVaryings = fragmentShader->getInputVaryings(context);
     int shaderVersion            = vertexShader->getShaderVersion(context);
 
     if (shaderVersion != 100)
     {
         // Only ESSL 1.0 has restrictions on matching input and output invariance
         return true;
@@ -3210,55 +3177,41 @@ bool Program::linkValidateTransformFeedb
             return false;
         }
     }
     return true;
 }
 
 bool Program::linkValidateGlobalNames(const Context *context, InfoLog &infoLog) const
 {
-    const std::vector<sh::Uniform> &vertexUniforms =
-        mState.mAttachedVertexShader->getUniforms(context);
-    const std::vector<sh::Uniform> &fragmentUniforms =
-        mState.mAttachedFragmentShader->getUniforms(context);
-    const std::vector<sh::Uniform> *geometryUniforms =
-        (mState.mAttachedGeometryShader) ? &mState.mAttachedGeometryShader->getUniforms(context)
-                                         : nullptr;
     const std::vector<sh::Attribute> &attributes =
-        mState.mAttachedVertexShader->getActiveAttributes(context);
+        mState.mAttachedShaders[ShaderType::Vertex]->getActiveAttributes(context);
+
     for (const auto &attrib : attributes)
     {
-        for (const auto &uniform : vertexUniforms)
-        {
-            if (uniform.name == attrib.name)
-            {
-                infoLog << "Name conflicts between a uniform and an attribute: " << attrib.name;
-                return false;
-            }
-        }
-        for (const auto &uniform : fragmentUniforms)
+        for (ShaderType shaderType : kAllGraphicsShaderTypes)
         {
-            if (uniform.name == attrib.name)
+            Shader *shader = mState.mAttachedShaders[shaderType];
+            if (!shader)
             {
-                infoLog << "Name conflicts between a uniform and an attribute: " << attrib.name;
-                return false;
+                continue;
             }
-        }
-        if (geometryUniforms)
-        {
-            for (const auto &uniform : *geometryUniforms)
+
+            const std::vector<sh::Uniform> &uniforms = shader->getUniforms(context);
+            for (const auto &uniform : uniforms)
             {
                 if (uniform.name == attrib.name)
                 {
                     infoLog << "Name conflicts between a uniform and an attribute: " << attrib.name;
                     return false;
                 }
             }
         }
     }
+
     return true;
 }
 
 void Program::gatherTransformFeedbackVaryings(const ProgramMergedVaryings &varyings)
 {
     // Gather the linked varyings that are used for transform feedback, they should all exist.
     mState.mLinkedTransformFeedbackVaryings.clear();
     for (const std::string &tfVaryingName : mState.mTransformFeedbackVaryingNames)
@@ -3292,40 +3245,45 @@ void Program::gatherTransformFeedbackVar
     }
     mState.updateTransformFeedbackStrides();
 }
 
 ProgramMergedVaryings Program::getMergedVaryings(const Context *context) const
 {
     ProgramMergedVaryings merged;
 
-    for (const sh::Varying &varying : mState.mAttachedVertexShader->getOutputVaryings(context))
+    for (const sh::Varying &varying :
+         mState.mAttachedShaders[ShaderType::Vertex]->getOutputVaryings(context))
     {
         merged[varying.name].vertex = &varying;
     }
 
-    for (const sh::Varying &varying : mState.mAttachedFragmentShader->getInputVaryings(context))
+    for (const sh::Varying &varying :
+         mState.mAttachedShaders[ShaderType::Fragment]->getInputVaryings(context))
     {
         merged[varying.name].fragment = &varying;
     }
 
     return merged;
 }
 
-void Program::linkOutputVariables(const Context *context)
+bool Program::linkOutputVariables(const Context *context,
+                                  GLuint combinedImageUniformsCount,
+                                  GLuint combinedShaderStorageBlocksCount)
 {
-    Shader *fragmentShader = mState.mAttachedFragmentShader;
+    Shader *fragmentShader = mState.mAttachedShaders[ShaderType::Fragment];
     ASSERT(fragmentShader != nullptr);
 
     ASSERT(mState.mOutputVariableTypes.empty());
     ASSERT(mState.mActiveOutputVariables.none());
     ASSERT(mState.mDrawBufferTypeMask.none());
 
+    const auto &outputVariables = fragmentShader->getActiveOutputVariables(context);
     // Gather output variable types
-    for (const auto &outputVariable : fragmentShader->getActiveOutputVariables(context))
+    for (const auto &outputVariable : outputVariables)
     {
         if (outputVariable.isBuiltIn() && outputVariable.name != "gl_FragColor" &&
             outputVariable.name != "gl_FragData")
         {
             continue;
         }
 
         unsigned int baseLocation =
@@ -3344,21 +3302,41 @@ void Program::linkOutputVariables(const 
             }
             ASSERT(location < mState.mActiveOutputVariables.size());
             mState.mActiveOutputVariables.set(location);
             mState.mOutputVariableTypes[location] = VariableComponentType(outputVariable.type);
             mState.mDrawBufferTypeMask.setIndex(mState.mOutputVariableTypes[location], location);
         }
     }
 
+    if (context->getClientVersion() >= ES_3_1)
+    {
+        // [OpenGL ES 3.1] Chapter 8.22 Page 203:
+        // A link error will be generated if the sum of the number of active image uniforms used in
+        // all shaders, the number of active shader storage blocks, and the number of active
+        // fragment shader outputs exceeds the implementation-dependent value of
+        // MAX_COMBINED_SHADER_OUTPUT_RESOURCES.
+        if (combinedImageUniformsCount + combinedShaderStorageBlocksCount +
+                mState.mActiveOutputVariables.count() >
+            context->getCaps().maxCombinedShaderOutputResources)
+        {
+            mInfoLog
+                << "The sum of the number of active image uniforms, active shader storage blocks "
+                   "and active fragment shader outputs exceeds "
+                   "MAX_COMBINED_SHADER_OUTPUT_RESOURCES ("
+                << context->getCaps().maxCombinedShaderOutputResources << ")";
+            return false;
+        }
+    }
+
     // Skip this step for GLES2 shaders.
     if (fragmentShader->getShaderVersion(context) == 100)
-        return;
-
-    mState.mOutputVariables = fragmentShader->getActiveOutputVariables(context);
+        return true;
+
+    mState.mOutputVariables = outputVariables;
     // TODO(jmadill): any caps validation here?
 
     for (unsigned int outputVariableIndex = 0; outputVariableIndex < mState.mOutputVariables.size();
          outputVariableIndex++)
     {
         const sh::OutputVariable &outputVariable = mState.mOutputVariables[outputVariableIndex];
 
         if (outputVariable.isArray())
@@ -3397,16 +3375,18 @@ void Program::linkOutputVariables(const 
             else
             {
                 VariableLocation locationInfo;
                 locationInfo.index                = outputVariableIndex;
                 mState.mOutputLocations[location] = locationInfo;
             }
         }
     }
+
+    return true;
 }
 
 void Program::setUniformValuesFromBindingQualifiers()
 {
     for (unsigned int samplerIndex : mState.mSamplerUniformRange)
     {
         const auto &samplerUniform = mState.mUniforms[samplerIndex];
         if (samplerUniform.binding != -1)
--- a/gfx/angle/checkout/src/libANGLE/Program.h
+++ b/gfx/angle/checkout/src/libANGLE/Program.h
@@ -281,16 +281,17 @@ class ProgramState final : angle::NonCop
 {
   public:
     ProgramState();
     ~ProgramState();
 
     const std::string &getLabel();
 
     Shader *getAttachedShader(ShaderType shaderType) const;
+    const gl::ShaderMap<Shader *> &getAttachedShaders() const { return mAttachedShaders; }
     const std::vector<std::string> &getTransformFeedbackVaryingNames() const
     {
         return mTransformFeedbackVaryingNames;
     }
     GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; }
     GLuint getUniformBlockBinding(GLuint uniformBlockIndex) const
     {
         ASSERT(uniformBlockIndex < mUniformBlocks.size());
@@ -347,30 +348,29 @@ class ProgramState final : angle::NonCop
 
     GLuint getBufferVariableIndexFromName(const std::string &name) const;
 
     int getNumViews() const { return mNumViews; }
     bool usesMultiview() const { return mNumViews != -1; }
 
     const ShaderBitSet &getLinkedShaderStages() const { return mLinkedShaderStages; }
 
+    bool hasAttachedShader() const;
+
   private:
     friend class MemoryProgramCache;
     friend class Program;
 
     void updateTransformFeedbackStrides();
 
     std::string mLabel;
 
     sh::WorkGroupSize mComputeShaderLocalSize;
 
-    Shader *mAttachedFragmentShader;
-    Shader *mAttachedVertexShader;
-    Shader *mAttachedComputeShader;
-    Shader *mAttachedGeometryShader;
+    ShaderMap<Shader *> mAttachedShaders;
 
     std::vector<std::string> mTransformFeedbackVaryingNames;
     std::vector<TransformFeedbackVarying> mLinkedTransformFeedbackVaryings;
     GLenum mTransformFeedbackBufferMode;
 
     // For faster iteration on the blocks currently being bound.
     UniformBlockBindingMask mActiveUniformBlockBindings;
 
@@ -399,20 +399,20 @@ class ProgramState final : angle::NonCop
     std::vector<BufferVariable> mBufferVariables;
     std::vector<InterfaceBlock> mShaderStorageBlocks;
     std::vector<AtomicCounterBuffer> mAtomicCounterBuffers;
     RangeUI mSamplerUniformRange;
     RangeUI mImageUniformRange;
     RangeUI mAtomicCounterUniformRange;
 
     // An array of the samplers that are used by the program
-    std::vector<gl::SamplerBinding> mSamplerBindings;
+    std::vector<SamplerBinding> mSamplerBindings;
 
     // An array of the images that are used by the program
-    std::vector<gl::ImageBinding> mImageBindings;
+    std::vector<ImageBinding> mImageBindings;
 
     // Names and mapped names of output variables that are arrays include [0] in the end, similarly
     // to uniforms.
     std::vector<sh::OutputVariable> mOutputVariables;
     std::vector<VariableLocation> mOutputLocations;
     DrawBufferMask mActiveOutputVariables;
 
     // Fragment output variable base types: FLOAT, INT, or UINT.  Ordered by location.
@@ -489,18 +489,18 @@ class Program final : angle::NonCopyable
     BindingInfo getFragmentInputBindingInfo(const Context *context, GLint index) const;
     void bindFragmentInputLocation(GLint index, const char *name);
     void pathFragmentInputGen(const Context *context,
                               GLint index,
                               GLenum genMode,
                               GLint components,
                               const GLfloat *coeffs);
 
-    Error link(const gl::Context *context);
-    bool isLinked() const;
+    Error link(const Context *context);
+    bool isLinked() const { return mLinked; }
 
     bool hasLinkedShaderStage(ShaderType shaderType) const;
 
     Error loadBinary(const Context *context,
                      GLenum binaryFormat,
                      const void *binary,
                      GLsizei length);
     Error saveBinary(const Context *context,
@@ -547,18 +547,26 @@ class Program final : angle::NonCopyable
                           GLenum *type,
                           GLchar *name) const;
     GLint getActiveUniformCount() const;
     size_t getActiveBufferVariableCount() const;
     GLint getActiveUniformMaxLength() const;
     bool isValidUniformLocation(GLint location) const;
     const LinkedUniform &getUniformByLocation(GLint location) const;
     const VariableLocation &getUniformLocation(GLint location) const;
-    const std::vector<VariableLocation> &getUniformLocations() const;
-    const LinkedUniform &getUniformByIndex(GLuint index) const;
+    const std::vector<VariableLocation> &getUniformLocations() const
+    {
+        return mState.mUniformLocations;
+    }
+
+    const LinkedUniform &getUniformByIndex(GLuint index) const
+    {
+        ASSERT(index < static_cast<size_t>(mState.mUniforms.size()));
+        return mState.mUniforms[index];
+    }
 
     const BufferVariable &getBufferVariableByIndex(GLuint index) const;
 
     enum SetUniformResult
     {
         SamplerChanged,
         NoSamplerChange,
     };
@@ -627,17 +635,17 @@ class Program final : angle::NonCopyable
     void release(const Context *context);
     unsigned int getRefCount() const;
     void flagForDeletion();
     bool isFlaggedForDeletion() const;
 
     void validate(const Caps &caps);
     bool validateSamplers(InfoLog *infoLog, const Caps &caps);
     bool isValidated() const;
-    bool samplesFromTexture(const gl::State &state, GLuint textureID) const;
+    bool samplesFromTexture(const State &state, GLuint textureID) const;
 
     const AttributesMask &getActiveAttribLocationsMask() const
     {
         return mState.mActiveAttribLocationsMask;
     }
 
     const std::vector<SamplerBinding> &getSamplerBindings() const
     {
@@ -700,23 +708,26 @@ class Program final : angle::NonCopyable
 
   private:
     ~Program() override;
 
     void unlink();
 
     bool linkValidateShaders(const Context *context, InfoLog &infoLog);
     bool linkAttributes(const Context *context, InfoLog &infoLog);
-    bool linkInterfaceBlocks(const Context *context, InfoLog &infoLog);
+    bool linkInterfaceBlocks(const Context *context,
+                             InfoLog &infoLog,
+                             GLuint *combinedShaderStorageBlocksCount);
     bool linkVaryings(const Context *context, InfoLog &infoLog) const;
 
     bool linkUniforms(const Context *context,
                       InfoLog &infoLog,
-                      const ProgramBindings &uniformLocationBindings);
-    void linkSamplerAndImageBindings();
+                      const ProgramBindings &uniformLocationBindings,
+                      GLuint *combinedImageUniformsCount);
+    void linkSamplerAndImageBindings(GLuint *combinedImageUniformsCount);
     bool linkAtomicCounterBuffers();
 
     void updateLinkedShaderStages();
 
     static LinkMismatchError LinkValidateVaryings(const sh::Varying &outputVarying,
                                                   const sh::Varying &inputVarying,
                                                   int shaderVersion,
                                                   bool validateGeometryShaderInputVarying,
@@ -727,26 +738,28 @@ class Program final : angle::NonCopyable
                                              Shader *consumingShader,
                                              InfoLog &infoLog) const;
 
     // Check for aliased path rendering input bindings (if any).
     // If more than one binding refer statically to the same location the link must fail.
     bool linkValidateFragmentInputBindings(const Context *context, InfoLog &infoLog) const;
 
     bool linkValidateBuiltInVaryings(const Context *context, InfoLog &infoLog) const;
-    bool linkValidateTransformFeedback(const gl::Context *context,
+    bool linkValidateTransformFeedback(const Context *context,
                                        InfoLog &infoLog,
                                        const ProgramMergedVaryings &linkedVaryings,
                                        const Caps &caps) const;
     bool linkValidateGlobalNames(const Context *context, InfoLog &infoLog) const;
 
     void gatherTransformFeedbackVaryings(const ProgramMergedVaryings &varyings);
 
     ProgramMergedVaryings getMergedVaryings(const Context *context) const;
-    void linkOutputVariables(const Context *context);
+    bool linkOutputVariables(const Context *context,
+                             GLuint combinedImageUniformsCount,
+                             GLuint combinedShaderStorageBlocksCount);
 
     void setUniformValuesFromBindingQualifiers();
 
     void initInterfaceBlockBindings();
 
     // Both these function update the cached uniform values and return a modified "count"
     // so that the uniform update doesn't overflow the uniform.
     template <typename T>
--- a/gfx/angle/checkout/src/libANGLE/ProgramLinkedResources.cpp
+++ b/gfx/angle/checkout/src/libANGLE/ProgramLinkedResources.cpp
@@ -183,37 +183,39 @@ bool UniformLinker::link(const Context *
 
     return true;
 }
 
 bool UniformLinker::validateGraphicsUniforms(const Context *context, InfoLog &infoLog) const
 {
     // Check that uniforms defined in the graphics shaders are identical
     std::map<std::string, ShaderUniform> linkedUniforms;
-    for (const sh::Uniform &vertexUniform :
-         mState.getAttachedShader(ShaderType::Vertex)->getUniforms(context))
-    {
-        linkedUniforms[vertexUniform.name] = std::make_pair(ShaderType::Vertex, &vertexUniform);
-    }
 
-    std::vector<Shader *> activeShadersToLink;
-    if (mState.getAttachedShader(ShaderType::Geometry))
+    for (ShaderType shaderType : kAllGraphicsShaderTypes)
     {
-        activeShadersToLink.push_back(mState.getAttachedShader(ShaderType::Geometry));
-    }
-    activeShadersToLink.push_back(mState.getAttachedShader(ShaderType::Fragment));
-
-    const size_t numActiveShadersToLink = activeShadersToLink.size();
-    for (size_t shaderIndex = 0; shaderIndex < numActiveShadersToLink; ++shaderIndex)
-    {
-        bool isLastShader = (shaderIndex == numActiveShadersToLink - 1);
-        if (!ValidateGraphicsUniformsPerShader(context, activeShadersToLink[shaderIndex],
-                                               !isLastShader, &linkedUniforms, infoLog))
+        Shader *currentShader = mState.getAttachedShader(shaderType);
+        if (currentShader)
         {
-            return false;
+            if (shaderType == ShaderType::Vertex)
+            {
+                for (const sh::Uniform &vertexUniform : currentShader->getUniforms(context))
+                {
+                    linkedUniforms[vertexUniform.name] =
+                        std::make_pair(ShaderType::Vertex, &vertexUniform);
+                }
+            }
+            else
+            {
+                bool isLastShader = (shaderType == ShaderType::Fragment);
+                if (!ValidateGraphicsUniformsPerShader(context, currentShader, !isLastShader,
+                                                       &linkedUniforms, infoLog))
+                {
+                    return false;
+                }
+            }
         }
     }
 
     return true;
 }
 
 bool UniformLinker::indexUniforms(InfoLog &infoLog, const ProgramBindings &uniformLocationBindings)
 {
@@ -455,65 +457,66 @@ bool UniformLinker::flattenUniformsAndCh
 
     if (mState.getAttachedShader(ShaderType::Compute))
     {
         Shader *computeShader = mState.getAttachedShader(ShaderType::Compute);
 
         // TODO (mradev): check whether we need finer-grained component counting
         if (!flattenUniformsAndCheckCapsForShader(
                 context, computeShader, caps.maxComputeUniformComponents / 4,
-                caps.maxComputeTextureImageUnits, caps.maxComputeImageUniforms,
+                caps.maxShaderTextureImageUnits[ShaderType::Compute], caps.maxComputeImageUniforms,
                 caps.maxComputeAtomicCounters,
                 "Compute shader active uniforms exceed MAX_COMPUTE_UNIFORM_COMPONENTS (",
                 "Compute shader sampler count exceeds MAX_COMPUTE_TEXTURE_IMAGE_UNITS (",
                 "Compute shader image count exceeds MAX_COMPUTE_IMAGE_UNIFORMS (",
                 "Compute shader atomic counter count exceeds MAX_COMPUTE_ATOMIC_COUNTERS (",
                 samplerUniforms, imageUniforms, atomicCounterUniforms, infoLog))
         {
             return false;
         }
     }
     else
     {
         Shader *vertexShader = mState.getAttachedShader(ShaderType::Vertex);
 
         if (!flattenUniformsAndCheckCapsForShader(
                 context, vertexShader, caps.maxVertexUniformVectors,
-                caps.maxVertexTextureImageUnits, caps.maxVertexImageUniforms,
+                caps.maxShaderTextureImageUnits[ShaderType::Vertex], caps.maxVertexImageUniforms,
                 caps.maxVertexAtomicCounters,
                 "Vertex shader active uniforms exceed MAX_VERTEX_UNIFORM_VECTORS (",
                 "Vertex shader sampler count exceeds MAX_VERTEX_TEXTURE_IMAGE_UNITS (",
                 "Vertex shader image count exceeds MAX_VERTEX_IMAGE_UNIFORMS (",
                 "Vertex shader atomic counter count exceeds MAX_VERTEX_ATOMIC_COUNTERS (",
                 samplerUniforms, imageUniforms, atomicCounterUniforms, infoLog))
         {
             return false;
         }
 
         Shader *fragmentShader = mState.getAttachedShader(ShaderType::Fragment);
 
         if (!flattenUniformsAndCheckCapsForShader(
-                context, fragmentShader, caps.maxFragmentUniformVectors, caps.maxTextureImageUnits,
+                context, fragmentShader, caps.maxFragmentUniformVectors,
+                caps.maxShaderTextureImageUnits[ShaderType::Fragment],
                 caps.maxFragmentImageUniforms, caps.maxFragmentAtomicCounters,
                 "Fragment shader active uniforms exceed MAX_FRAGMENT_UNIFORM_VECTORS (",
                 "Fragment shader sampler count exceeds MAX_TEXTURE_IMAGE_UNITS (",
                 "Fragment shader image count exceeds MAX_FRAGMENT_IMAGE_UNIFORMS (",
                 "Fragment shader atomic counter count exceeds MAX_FRAGMENT_ATOMIC_COUNTERS (",
                 samplerUniforms, imageUniforms, atomicCounterUniforms, infoLog))
         {
             return false;
         }
 
         Shader *geometryShader = mState.getAttachedShader(ShaderType::Geometry);
         // TODO (jiawei.shao@intel.com): check whether we need finer-grained component counting
         if (geometryShader &&
             !flattenUniformsAndCheckCapsForShader(
                 context, geometryShader, caps.maxGeometryUniformComponents / 4,
-                caps.maxGeometryTextureImageUnits, caps.maxGeometryImageUniforms,
-                caps.maxGeometryAtomicCounters,
+                caps.maxShaderTextureImageUnits[ShaderType::Geometry],
+                caps.maxGeometryImageUniforms, caps.maxGeometryAtomicCounters,
                 "Geometry shader active uniforms exceed MAX_GEOMETRY_UNIFORM_VECTORS_EXT (",
                 "Geometry shader sampler count exceeds MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT (",
                 "Geometry shader image count exceeds MAX_GEOMETRY_IMAGE_UNIFORMS_EXT (",
                 "Geometry shader atomic counter count exceeds MAX_GEOMETRY_ATOMIC_COUNTERS_EXT (",
                 samplerUniforms, imageUniforms, atomicCounterUniforms, infoLog))
         {
             return false;
         }
@@ -797,42 +800,45 @@ bool UniformLinker::checkMaxCombinedAtom
             }
         }
     }
     return true;
 }
 
 // InterfaceBlockLinker implementation.
 InterfaceBlockLinker::InterfaceBlockLinker(std::vector<InterfaceBlock> *blocksOut)
-    : mBlocksOut(blocksOut)
+    : mShaderBlocks({}), mBlocksOut(blocksOut)
 {
 }
 
 InterfaceBlockLinker::~InterfaceBlockLinker()
 {
 }
 
-void InterfaceBlockLinker::addShaderBlocks(ShaderType shader,
+void InterfaceBlockLinker::addShaderBlocks(ShaderType shaderType,
                                            const std::vector<sh::InterfaceBlock> *blocks)
 {
-    mShaderBlocks.push_back(std::make_pair(shader, blocks));
+    mShaderBlocks[shaderType] = blocks;
 }
 
 void InterfaceBlockLinker::linkBlocks(const GetBlockSize &getBlockSize,
                                       const GetBlockMemberInfo &getMemberInfo) const
 {
     ASSERT(mBlocksOut->empty());
 
     std::set<std::string> visitedList;
 
-    for (const auto &shaderBlocks : mShaderBlocks)
+    for (ShaderType shaderType : AllShaderTypes())
     {
-        const ShaderType shaderType = shaderBlocks.first;
+        if (!mShaderBlocks[shaderType])
+        {
+            continue;
+        }
 
-        for (const auto &block : *shaderBlocks.second)
+        for (const auto &block : *mShaderBlocks[shaderType])
         {
             if (!IsActiveInterfaceBlock(block))
                 continue;
 
             if (visitedList.count(block.name) > 0)
             {
                 if (block.active)
                 {
--- a/gfx/angle/checkout/src/libANGLE/ProgramLinkedResources.h
+++ b/gfx/angle/checkout/src/libANGLE/ProgramLinkedResources.h
@@ -8,17 +8,17 @@
 // uniform locations. Populates data structures related to uniforms so that they can be stored in
 // program state.
 
 #ifndef LIBANGLE_UNIFORMLINKER_H_
 #define LIBANGLE_UNIFORMLINKER_H_
 
 #include "angle_gl.h"
 #include "common/angleutils.h"
-#include "libANGLE/PackedGLEnums_autogen.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/VaryingPacking.h"
 
 #include <functional>
 
 namespace sh
 {
 struct BlockMemberInfo;
 struct InterfaceBlock;
@@ -229,18 +229,17 @@ class InterfaceBlockLinker : angle::NonC
                                        const sh::BlockMemberInfo &memberInfo,
                                        int topLevelArraySize,
                                        ShaderType shaderType) const             = 0;
     virtual size_t getCurrentBlockMemberIndex() const                           = 0;
     virtual void updateBlockMemberActiveImpl(const std::string &fullName,
                                              ShaderType shaderType,
                                              bool active) const                 = 0;
 
-    using ShaderBlocks = std::pair<ShaderType, const std::vector<sh::InterfaceBlock> *>;
-    std::vector<ShaderBlocks> mShaderBlocks;
+    ShaderMap<const std::vector<sh::InterfaceBlock> *> mShaderBlocks;
 
     std::vector<InterfaceBlock> *mBlocksOut;
 
   private:
     template <typename VarT>
     void defineArrayOfStructsBlockMembers(const GetBlockMemberInfo &getMemberInfo,
                                           const VarT &field,
                                           unsigned int arrayNestingIndex,
--- a/gfx/angle/checkout/src/libANGLE/Query.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Query.cpp
@@ -65,17 +65,17 @@ Error Query::getResult(GLuint64 *params)
     return mQuery->getResult(params);
 }
 
 Error Query::isResultAvailable(bool *available)
 {
     return mQuery->isResultAvailable(available);
 }
 
-GLenum Query::getType() const
+QueryType Query::getType() const
 {
     return mQuery->getType();
 }
 
 rx::QueryImpl *Query::getImplementation()
 {
     return mQuery;
 }
--- a/gfx/angle/checkout/src/libANGLE/Query.h
+++ b/gfx/angle/checkout/src/libANGLE/Query.h
@@ -6,16 +6,17 @@
 
 // Query.h: Defines the gl::Query class
 
 #ifndef LIBANGLE_QUERY_H_
 #define LIBANGLE_QUERY_H_
 
 #include "libANGLE/Debug.h"
 #include "libANGLE/Error.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/RefCountObject.h"
 
 #include "common/angleutils.h"
 
 #include "angle_gl.h"
 
 namespace rx
 {
@@ -39,17 +40,17 @@ class Query final : public RefCountObjec
     Error end();
     Error queryCounter();
     Error getResult(GLint *params);
     Error getResult(GLuint *params);
     Error getResult(GLint64 *params);
     Error getResult(GLuint64 *params);
     Error isResultAvailable(bool *available);
 
-    GLenum getType() const;
+    QueryType getType() const;
 
     rx::QueryImpl *getImplementation();
     const rx::QueryImpl *getImplementation() const;
 
   private:
     rx::QueryImpl *mQuery;
 
     std::string mLabel;
--- a/gfx/angle/checkout/src/libANGLE/Shader.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Shader.cpp
@@ -125,16 +125,17 @@ Shader::Shader(ShaderProgramManager *man
       mDeleteStatus(false),
       mResourceManager(manager)
 {
     ASSERT(mImplementation);
 }
 
 void Shader::onDestroy(const gl::Context *context)
 {
+    mImplementation->destroy(context);
     mBoundCompiler.set(context, nullptr);
     mImplementation.reset(nullptr);
     delete this;
 }
 
 Shader::~Shader()
 {
     ASSERT(!mImplementation);
@@ -221,17 +222,17 @@ int Shader::getTranslatedSourceLength(co
 
     return (static_cast<int>(mState.mTranslatedSource.length()) + 1);
 }
 
 int Shader::getTranslatedSourceWithDebugInfoLength(const Context *context)
 {
     resolveCompile(context);
 
-    const std::string &debugInfo = mImplementation->getDebugInfo();
+    const std::string &debugInfo = mImplementation->getDebugInfo(context);
     if (debugInfo.empty())
     {
         return 0;
     }
 
     return (static_cast<int>(debugInfo.length()) + 1);
 }
 
@@ -277,17 +278,17 @@ const std::string &Shader::getTranslated
 }
 
 void Shader::getTranslatedSourceWithDebugInfo(const Context *context,
                                               GLsizei bufSize,
                                               GLsizei *length,
                                               char *buffer)
 {
     resolveCompile(context);
-    const std::string &debugInfo = mImplementation->getDebugInfo();
+    const std::string &debugInfo = mImplementation->getDebugInfo(context);
     GetSourceImpl(debugInfo, bufSize, length, buffer);
 }
 
 void Shader::compile(const Context *context)
 {
     mState.mTranslatedSource.clear();
     mInfoLog.clear();
     mState.mShaderVersion = 100;
@@ -307,18 +308,18 @@ void Shader::compile(const Context *cont
     mState.mCompileStatus = CompileStatus::COMPILE_REQUESTED;
     mBoundCompiler.set(context, context->getCompiler());
 
     // Cache the compile source and options for compilation. Must be done now, since the source
     // can change before the link call or another call that resolves the compile.
 
     std::stringstream sourceStream;
 
-    mLastCompileOptions =
-        mImplementation->prepareSourceAndReturnOptions(&sourceStream, &mLastCompiledSourcePath);
+    mLastCompileOptions = mImplementation->prepareSourceAndReturnOptions(context, &sourceStream,
+                                                                         &mLastCompiledSourcePath);
     mLastCompileOptions |= (SH_OBJECT_CODE | SH_VARIABLES);
     mLastCompiledSource = sourceStream.str();
 
     // Add default options to WebGL shaders to prevent unexpected behavior during compilation.
     if (context->getExtensions().webglCompatibility)
     {
         mLastCompileOptions |= SH_INIT_GL_POSITION;
         mLastCompileOptions |= SH_LIMIT_CALL_STACK_DEPTH;
@@ -442,17 +443,17 @@ void Shader::resolveCompile(const Contex
             break;
         }
         default:
             UNREACHABLE();
     }
 
     ASSERT(!mState.mTranslatedSource.empty());
 
-    bool success = mImplementation->postTranslateCompile(mBoundCompiler.get(), &mInfoLog);
+    bool success = mImplementation->postTranslateCompile(context, mBoundCompiler.get(), &mInfoLog);
     mState.mCompileStatus = success ? CompileStatus::COMPILED : CompileStatus::NOT_COMPILED;
 }
 
 void Shader::addRef()
 {
     mRefCount++;
 }
 
--- a/gfx/angle/checkout/src/libANGLE/State.cpp
+++ b/gfx/angle/checkout/src/libANGLE/State.cpp
@@ -18,55 +18,66 @@
 #include "libANGLE/Context.h"
 #include "libANGLE/Debug.h"
 #include "libANGLE/Framebuffer.h"
 #include "libANGLE/FramebufferAttachment.h"
 #include "libANGLE/Query.h"
 #include "libANGLE/VertexArray.h"
 #include "libANGLE/formatutils.h"
 #include "libANGLE/queryconversions.h"
+#include "libANGLE/queryutils.h"
 #include "libANGLE/renderer/ContextImpl.h"
 
+namespace gl
+{
+
 namespace
 {
 
-GLenum ActiveQueryType(const GLenum type)
+bool GetAlternativeQueryType(QueryType type, QueryType *alternativeType)
 {
-    return (type == GL_ANY_SAMPLES_PASSED_CONSERVATIVE) ? GL_ANY_SAMPLES_PASSED : type;
+    switch (type)
+    {
+        case QueryType::AnySamples:
+            *alternativeType = QueryType::AnySamplesConservative;
+            return true;
+        case QueryType::AnySamplesConservative:
+            *alternativeType = QueryType::AnySamples;
+            return true;
+        default:
+            return false;
+    }
 }
 
 }  // anonymous namepace
 
-namespace gl
-{
-
 void UpdateBufferBinding(const Context *context,
                          BindingPointer<Buffer> *binding,
                          Buffer *buffer,
                          BufferBinding target)
 {
     if (binding->get())
-        (*binding)->onBindingChanged(false, target);
+        (*binding)->onBindingChanged(context, false, target);
     binding->set(context, buffer);
     if (binding->get())
-        (*binding)->onBindingChanged(true, target);
+        (*binding)->onBindingChanged(context, true, target);
 }
 
 void UpdateBufferBinding(const Context *context,
                          OffsetBindingPointer<Buffer> *binding,
                          Buffer *buffer,
                          BufferBinding target,
                          GLintptr offset,
                          GLsizeiptr size)
 {
     if (binding->get())
-        (*binding)->onBindingChanged(false, target);
+        (*binding)->onBindingChanged(context, false, target);
     binding->set(context, buffer, offset, size);
     if (binding->get())
-        (*binding)->onBindingChanged(true, target);
+        (*binding)->onBindingChanged(context, true, target);
 }
 
 State::State()
     : mMaxDrawBuffers(0),
       mMaxCombinedTextureImageUnits(0),
       mDepthClearValue(0),
       mStencilClearValue(0),
       mScissorTest(false),
@@ -206,22 +217,20 @@ void State::initialize(const Context *co
     for (uint32_t textureIndex = 0; textureIndex < caps.maxCombinedTextureImageUnits;
          ++textureIndex)
     {
         mCompleteTextureBindings.emplace_back(this, textureIndex);
     }
 
     mSamplers.resize(caps.maxCombinedTextureImageUnits);
 
-    mActiveQueries[GL_ANY_SAMPLES_PASSED].set(context, nullptr);
-    mActiveQueries[GL_ANY_SAMPLES_PASSED_CONSERVATIVE].set(context, nullptr);
-    mActiveQueries[GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN].set(context, nullptr);
-    mActiveQueries[GL_TIME_ELAPSED_EXT].set(context, nullptr);
-    mActiveQueries[GL_COMMANDS_COMPLETED_CHROMIUM].set(context, nullptr);
-    mActiveQueries[GL_PRIMITIVES_GENERATED_EXT].set(context, nullptr);
+    for (QueryType type : angle::AllEnums<QueryType>())
+    {
+        mActiveQueries[type].set(context, nullptr);
+    }
 
     mProgram = nullptr;
 
     mReadFramebuffer = nullptr;
     mDrawFramebuffer = nullptr;
 
     mPrimitiveRestart = false;
 
@@ -285,22 +294,22 @@ void State::reset(const Context *context
     {
         mProgram->release(context);
     }
     mProgram = nullptr;
 
     mProgramPipeline.set(context, nullptr);
 
     if (mTransformFeedback.get())
-        mTransformFeedback->onBindingChanged(false);
+        mTransformFeedback->onBindingChanged(context, false);
     mTransformFeedback.set(context, nullptr);
 
-    for (State::ActiveQueryMap::iterator i = mActiveQueries.begin(); i != mActiveQueries.end(); i++)
+    for (QueryType type : angle::AllEnums<QueryType>())
     {
-        i->second.set(context, nullptr);
+        mActiveQueries[type].set(context, nullptr);
     }
 
     for (auto &buf : mUniformBuffers)
     {
         UpdateBufferBinding(context, &buf, nullptr, BufferBinding::Uniform);
     }
 
     for (auto &buf : mAtomicCounterBuffers)
@@ -766,16 +775,22 @@ void State::setEnableFeature(GLenum feat
         case GL_FRAMEBUFFER_SRGB_EXT:
             setFramebufferSRGB(enabled);
             break;
 
         // GLES1 emulation
         case GL_ALPHA_TEST:
             mGLES1State.mAlphaTestEnabled = enabled;
             break;
+        case GL_TEXTURE_2D:
+            mGLES1State.mTexUnitEnables[mActiveSampler].set(TextureType::_2D, enabled);
+            break;
+        case GL_TEXTURE_CUBE_MAP:
+            mGLES1State.mTexUnitEnables[mActiveSampler].set(TextureType::CubeMap, enabled);
+            break;
 
         default:
             UNREACHABLE();
     }
 }
 
 bool State::getEnableFeature(GLenum feature) const
 {
@@ -822,17 +837,30 @@ bool State::getEnableFeature(GLenum feat
         case GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
             return mRobustResourceInit;
         case GL_PROGRAM_CACHE_ENABLED_ANGLE:
             return mProgramBinaryCacheEnabled;
 
         // GLES1 emulation
         case GL_ALPHA_TEST:
             return mGLES1State.mAlphaTestEnabled;
-
+        case GL_VERTEX_ARRAY:
+            return mGLES1State.mVertexArrayEnabled;
+        case GL_NORMAL_ARRAY:
+            return mGLES1State.mNormalArrayEnabled;
+        case GL_COLOR_ARRAY:
+            return mGLES1State.mColorArrayEnabled;
+        case GL_POINT_SIZE_ARRAY_OES:
+            return mGLES1State.mPointSizeArrayEnabled;
+        case GL_TEXTURE_COORD_ARRAY:
+            return mGLES1State.mTexCoordArrayEnabled[mGLES1State.mClientActiveTexture];
+        case GL_TEXTURE_2D:
+            return mGLES1State.mTexUnitEnables[mActiveSampler].test(TextureType::_2D);
+        case GL_TEXTURE_CUBE_MAP:
+            return mGLES1State.mTexUnitEnables[mActiveSampler].test(TextureType::CubeMap);
         default:
             UNREACHABLE();
             return false;
     }
 }
 
 void State::setLineWidth(GLfloat width)
 {
@@ -1140,25 +1168,25 @@ bool State::removeDrawFramebufferBinding
     {
         setDrawFramebufferBinding(nullptr);
         return true;
     }
 
     return false;
 }
 
-void State::setVertexArrayBinding(VertexArray *vertexArray)
+void State::setVertexArrayBinding(const Context *context, VertexArray *vertexArray)
 {
     if (mVertexArray == vertexArray)
         return;
     if (mVertexArray)
-        mVertexArray->onBindingChanged(false);
+        mVertexArray->onBindingChanged(context, false);
     mVertexArray = vertexArray;
     if (vertexArray)
-        vertexArray->onBindingChanged(true);
+        vertexArray->onBindingChanged(context, true);
     mDirtyBits.set(DIRTY_BIT_VERTEX_ARRAY_BINDING);
 
     if (mVertexArray && mVertexArray->hasAnyDirtyBit())
     {
         mDirtyObjects.set(DIRTY_OBJECT_VERTEX_ARRAY);
     }
 }
 
@@ -1169,21 +1197,21 @@ GLuint State::getVertexArrayId() const
 }
 
 VertexArray *State::getVertexArray() const
 {
     ASSERT(mVertexArray != nullptr);
     return mVertexArray;
 }
 
-bool State::removeVertexArrayBinding(GLuint vertexArray)
+bool State::removeVertexArrayBinding(const Context *context, GLuint vertexArray)
 {
     if (mVertexArray && mVertexArray->id() == vertexArray)
     {
-        mVertexArray->onBindingChanged(false);
+        mVertexArray->onBindingChanged(context, false);
         mVertexArray = nullptr;
         mDirtyBits.set(DIRTY_BIT_VERTEX_ARRAY_BINDING);
         mDirtyObjects.set(DIRTY_OBJECT_VERTEX_ARRAY);
         return true;
     }
 
     return false;
 }
@@ -1249,20 +1277,20 @@ Program *State::getProgram() const
 }
 
 void State::setTransformFeedbackBinding(const Context *context,
                                         TransformFeedback *transformFeedback)
 {
     if (transformFeedback == mTransformFeedback.get())
         return;
     if (mTransformFeedback.get())
-        mTransformFeedback->onBindingChanged(false);
+        mTransformFeedback->onBindingChanged(context, false);
     mTransformFeedback.set(context, transformFeedback);
     if (mTransformFeedback.get())
-        mTransformFeedback->onBindingChanged(true);
+        mTransformFeedback->onBindingChanged(context, true);
     mDirtyBits.set(DIRTY_BIT_TRANSFORM_FEEDBACK_BINDING);
 }
 
 TransformFeedback *State::getCurrentTransformFeedback() const
 {
     return mTransformFeedback.get();
 }
 
@@ -1273,17 +1301,17 @@ bool State::isTransformFeedbackActiveUnp
            !curTransformFeedback->isPaused();
 }
 
 bool State::removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback)
 {
     if (mTransformFeedback.id() == transformFeedback)
     {
         if (mTransformFeedback.get())
-            mTransformFeedback->onBindingChanged(false);
+            mTransformFeedback->onBindingChanged(context, false);
         mTransformFeedback.set(context, nullptr);
         return true;
     }
 
     return false;
 }
 
 void State::setProgramPipelineBinding(const Context *context, ProgramPipeline *pipeline)
@@ -1291,62 +1319,61 @@ void State::setProgramPipelineBinding(co
     mProgramPipeline.set(context, pipeline);
 }
 
 void State::detachProgramPipeline(const Context *context, GLuint pipeline)
 {
     mProgramPipeline.set(context, nullptr);
 }
 
-bool State::isQueryActive(const GLenum type) const
+bool State::isQueryActive(QueryType type) const
 {
-    for (auto &iter : mActiveQueries)
+    const Query *query = mActiveQueries[type].get();
+    if (query != nullptr)
+    {
+        return true;
+    }
+
+    QueryType alternativeType;
+    if (GetAlternativeQueryType(type, &alternativeType))
     {
-        const Query *query = iter.second.get();
-        if (query != nullptr && ActiveQueryType(query->getType()) == ActiveQueryType(type))
+        query = mActiveQueries[alternativeType].get();
+        return query != nullptr;
+    }
+
+    return false;
+}
+
+bool State::isQueryActive(Query *query) const
+{
+    for (auto &queryPointer : mActiveQueries)
+    {
+        if (queryPointer.get() == query)
         {
             return true;
         }
     }
 
     return false;
 }
 
-bool State::isQueryActive(Query *query) const
+void State::setActiveQuery(const Context *context, QueryType type, Query *query)
 {
-    for (auto &iter : mActiveQueries)
-    {
-        if (iter.second.get() == query)
-        {
-            return true;
-        }
-    }
-
-    return false;
+    mActiveQueries[type].set(context, query);
 }
 
-void State::setActiveQuery(const Context *context, GLenum target, Query *query)
+GLuint State::getActiveQueryId(QueryType type) const
 {
-    mActiveQueries[target].set(context, query);
-}
-
-GLuint State::getActiveQueryId(GLenum target) const
-{
-    const Query *query = getActiveQuery(target);
+    const Query *query = getActiveQuery(type);
     return (query ? query->id() : 0u);
 }
 
-Query *State::getActiveQuery(GLenum target) const
+Query *State::getActiveQuery(QueryType type) const
 {
-    const auto it = mActiveQueries.find(target);
-
-    // All query types should already exist in the activeQueries map
-    ASSERT(it != mActiveQueries.end());
-
-    return it->second.get();
+    return mActiveQueries[type].get();
 }
 
 void State::setBufferBinding(const Context *context, BufferBinding target, Buffer *buffer)
 {
     switch (target)
     {
         case BufferBinding::PixelPack:
             UpdateBufferBinding(context, &mBoundBuffers[target], buffer, target);
@@ -2133,22 +2160,19 @@ Error State::getIntegerv(const Context *
         case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
             ANGLE_TRY(mReadFramebuffer->getImplementationColorReadFormat(
                 context, reinterpret_cast<GLenum *>(params)));
             break;
         case GL_SAMPLE_BUFFERS:
         case GL_SAMPLES:
         {
             Framebuffer *framebuffer = mDrawFramebuffer;
-            bool complete            = false;
-            ANGLE_TRY(framebuffer->isComplete(context, &complete));
-            if (complete)
+            if (framebuffer->isComplete(context))
             {
-                GLint samples = 0;
-                ANGLE_TRY(framebuffer->getSamples(context, &samples));
+                GLint samples = framebuffer->getSamples(context);
                 switch (pname)
                 {
                     case GL_SAMPLE_BUFFERS:
                         if (samples != 0)
                         {
                             *params = 1;
                         }
                         else
@@ -2349,26 +2373,35 @@ Error State::getIntegerv(const Context *
         default:
             UNREACHABLE();
             break;
     }
 
     return NoError();
 }
 
-void State::getPointerv(GLenum pname, void **params) const
+void State::getPointerv(const Context *context, GLenum pname, void **params) const
 {
     switch (pname)
     {
         case GL_DEBUG_CALLBACK_FUNCTION:
             *params = reinterpret_cast<void *>(mDebug.getCallback());
             break;
         case GL_DEBUG_CALLBACK_USER_PARAM:
             *params = const_cast<void *>(mDebug.getUserParam());
             break;
+        case GL_VERTEX_ARRAY_POINTER:
+        case GL_NORMAL_ARRAY_POINTER:
+        case GL_COLOR_ARRAY_POINTER:
+        case GL_TEXTURE_COORD_ARRAY_POINTER:
+        case GL_POINT_SIZE_ARRAY_POINTER_OES:
+            QueryVertexAttribPointerv(getVertexArray()->getVertexAttribute(
+                                          context->vertexArrayIndex(ParamToVertexArrayType(pname))),
+                                      GL_VERTEX_ATTRIB_ARRAY_POINTER, params);
+            return;
         default:
             UNREACHABLE();
             break;
     }
 }
 
 void State::getIntegeri_v(GLenum target, GLuint index, GLint *data)
 {
@@ -2541,35 +2574,35 @@ Error State::syncDirtyObjects(const Cont
                 ASSERT(mDrawFramebuffer);
                 ANGLE_TRY(mDrawFramebuffer->syncState(context));
                 break;
             case DIRTY_OBJECT_VERTEX_ARRAY:
                 ASSERT(mVertexArray);
                 ANGLE_TRY(mVertexArray->syncState(context));
                 break;
             case DIRTY_OBJECT_PROGRAM_TEXTURES:
-                syncProgramTextures(context);
+                ANGLE_TRY(syncProgramTextures(context));
                 break;
 
             default:
                 UNREACHABLE();
                 break;
         }
     }
 
     mDirtyObjects &= ~dirtyObjects;
     return NoError();
 }
 
-void State::syncProgramTextures(const Context *context)
+Error State::syncProgramTextures(const Context *context)
 {
     // TODO(jmadill): Fine-grained updates.
     if (!mProgram)
     {
-        return;
+        return NoError();
     }
 
     ASSERT(mDirtyObjects[DIRTY_OBJECT_PROGRAM_TEXTURES]);
     mDirtyBits.set(DIRTY_BIT_TEXTURE_BINDINGS);
 
     ActiveTextureMask newActiveTextures;
 
     // Initialize to the 'Initialized' state and set to 'MayNeedInit' if any texture is not
@@ -2591,17 +2624,17 @@ void State::syncProgramTextures(const Co
 
             ASSERT(texture);
 
             // Mark the texture binding bit as dirty if the texture completeness changes.
             // TODO(jmadill): Use specific dirty bit for completeness change.
             if (texture->isSamplerComplete(context, sampler) &&
                 !mDrawFramebuffer->hasTextureAttachment(texture))
             {
-                texture->syncState();
+                ANGLE_TRY(texture->syncState(context));
                 mCompleteTextureCache[textureUnitIndex] = texture;
             }
             else
             {
                 mCompleteTextureCache[textureUnitIndex] = nullptr;
             }
 
             // Bind the texture unconditionally, to recieve completeness change notifications.
@@ -2627,16 +2660,18 @@ void State::syncProgramTextures(const Co
     {
         for (auto textureIndex : negativeMask)
         {
             mCompleteTextureBindings[textureIndex].reset();
             mCompleteTextureCache[textureIndex] = nullptr;
             mActiveTexturesMask.reset(textureIndex);
         }
     }
+
+    return NoError();
 }
 
 Error State::syncDirtyObject(const Context *context, GLenum target)
 {
     DirtyObjects localSet;
 
     switch (target)
     {
--- a/gfx/angle/checkout/src/libANGLE/State.h
+++ b/gfx/angle/checkout/src/libANGLE/State.h
@@ -199,37 +199,37 @@ class State : public angle::ObserverInte
     void setDrawFramebufferBinding(Framebuffer *framebuffer);
     Framebuffer *getTargetFramebuffer(GLenum target) const;
     Framebuffer *getReadFramebuffer() const;
     Framebuffer *getDrawFramebuffer() const;
     bool removeReadFramebufferBinding(GLuint framebuffer);
     bool removeDrawFramebufferBinding(GLuint framebuffer);
 
     // Vertex array object binding manipulation
-    void setVertexArrayBinding(VertexArray *vertexArray);
+    void setVertexArrayBinding(const Context *context, VertexArray *vertexArray);
     GLuint getVertexArrayId() const;
     VertexArray *getVertexArray() const;
-    bool removeVertexArrayBinding(GLuint vertexArray);
+    bool removeVertexArrayBinding(const Context *context, GLuint vertexArray);
 
     // Program binding manipulation
     void setProgram(const Context *context, Program *newProgram);
     Program *getProgram() const;
 
     // Transform feedback object (not buffer) binding manipulation
     void setTransformFeedbackBinding(const Context *context, TransformFeedback *transformFeedback);
     TransformFeedback *getCurrentTransformFeedback() const;
     bool isTransformFeedbackActiveUnpaused() const;
     bool removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback);
 
     // Query binding manipulation
-    bool isQueryActive(const GLenum type) const;
+    bool isQueryActive(QueryType type) const;
     bool isQueryActive(Query *query) const;
-    void setActiveQuery(const Context *context, GLenum target, Query *query);
-    GLuint getActiveQueryId(GLenum target) const;
-    Query *getActiveQuery(GLenum target) const;
+    void setActiveQuery(const Context *context, QueryType type, Query *query);
+    GLuint getActiveQueryId(QueryType type) const;
+    Query *getActiveQuery(QueryType type) const;
 
     // Program Pipeline binding manipulation
     void setProgramPipelineBinding(const Context *context, ProgramPipeline *pipeline);
     void detachProgramPipeline(const Context *context, GLuint pipeline);
 
     //// Typed buffer binding point manipulation ////
     void setBufferBinding(const Context *context, BufferBinding target, Buffer *buffer);
     Buffer *getTargetBuffer(BufferBinding target) const;
@@ -330,17 +330,17 @@ class State : public angle::ObserverInte
     // GL_EXT_sRGB_write_control
     void setFramebufferSRGB(bool sRGB);
     bool getFramebufferSRGB() const;
 
     // State query functions
     void getBooleanv(GLenum pname, GLboolean *params);
     void getFloatv(GLenum pname, GLfloat *params);
     Error getIntegerv(const Context *context, GLenum pname, GLint *params);
-    void getPointerv(GLenum pname, void **params) const;
+    void getPointerv(const Context *context, GLenum pname, void **params) const;
     void getIntegeri_v(GLenum target, GLuint index, GLint *data);
     void getInteger64i_v(GLenum target, GLuint index, GLint64 *data);
     void getBooleani_v(GLenum target, GLuint index, GLboolean *data);
 
     bool hasMappedBuffer(BufferBinding target) const;
     bool isRobustResourceInitEnabled() const { return mRobustResourceInit; }
 
     // Sets the dirty bit for the program executable.
@@ -474,17 +474,17 @@ class State : public angle::ObserverInte
 
     bool isCurrentTransformFeedback(const TransformFeedback *tf) const;
     bool isCurrentVertexArray(const VertexArray *va) const;
 
     GLES1State &gles1() { return mGLES1State; }
     const GLES1State &gles1() const { return mGLES1State; }
 
   private:
-    void syncProgramTextures(const Context *context);
+    Error syncProgramTextures(const Context *context);
 
     // Cached values from Context's caps
     GLuint mMaxDrawBuffers;
     GLuint mMaxCombinedTextureImageUnits;
 
     ColorF mColorClearValue;
     GLfloat mDepthClearValue;
     int mStencilClearValue;
@@ -519,26 +519,26 @@ class State : public angle::ObserverInte
     float mFarZ;
 
     Framebuffer *mReadFramebuffer;
     Framebuffer *mDrawFramebuffer;
     BindingPointer<Renderbuffer> mRenderbuffer;
     Program *mProgram;
     BindingPointer<ProgramPipeline> mProgramPipeline;
 
-    typedef std::vector<VertexAttribCurrentValueData> VertexAttribVector;
+    using VertexAttribVector = std::vector<VertexAttribCurrentValueData>;
     VertexAttribVector mVertexAttribCurrentValues;  // From glVertexAttrib
     VertexArray *mVertexArray;
     ComponentTypeMask mCurrentValuesTypeMask;
 
     // Texture and sampler bindings
     size_t mActiveSampler;  // Active texture unit selector - GL_TEXTURE0
 
-    typedef std::vector<BindingPointer<Texture>> TextureBindingVector;
-    typedef angle::PackedEnumMap<TextureType, TextureBindingVector> TextureBindingMap;
+    using TextureBindingVector = std::vector<BindingPointer<Texture>>;
+    using TextureBindingMap    = angle::PackedEnumMap<TextureType, TextureBindingVector>;
     TextureBindingMap mSamplerTextures;
 
     // Texture Completeness Caching
     // ----------------------------
     // The texture completeness cache uses dirty bits to avoid having to scan the list of textures
     // each draw call. This gl::State class implements angle::Observer interface. When subject
     // Textures have state changes, messages reach 'State' (also any observing Framebuffers) via the
     // onSubjectStateChange method (above). This then invalidates the completeness cache.
@@ -551,23 +551,23 @@ class State : public angle::ObserverInte
     // Don't use BindingPointer because this cache is only valid within a draw call.
     // Also stores a notification channel to the texture itself to handle texture change events.
     std::vector<Texture *> mCompleteTextureCache;
     std::vector<angle::ObserverBinding> mCompleteTextureBindings;
     InitState mCachedTexturesInitState;
     using ActiveTextureMask = angle::BitSet<IMPLEMENTATION_MAX_ACTIVE_TEXTURES>;
     ActiveTextureMask mActiveTexturesMask;
 
-    typedef std::vector<BindingPointer<Sampler>> SamplerBindingVector;
+    using SamplerBindingVector = std::vector<BindingPointer<Sampler>>;
     SamplerBindingVector mSamplers;
 
-    typedef std::vector<ImageUnit> ImageUnitVector;
+    using ImageUnitVector = std::vector<ImageUnit>;
     ImageUnitVector mImageUnits;
 
-    typedef std::map<GLenum, BindingPointer<Query>> ActiveQueryMap;
+    using ActiveQueryMap = angle::PackedEnumMap<QueryType, BindingPointer<Query>>;
     ActiveQueryMap mActiveQueries;
 
     // Stores the currently bound buffer for each binding point. It has an entry for the element
     // array buffer but it should not be used. Instead this bind point is owned by the current
     // vertex array object.
     using BoundBufferMap = angle::PackedEnumMap<BufferBinding, BindingPointer<Buffer>>;
     BoundBufferMap mBoundBuffers;
 
--- a/gfx/angle/checkout/src/libANGLE/Surface.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Surface.cpp
@@ -48,17 +48,17 @@ Surface::Surface(EGLint surfaceType,
       mMipmapTexture(false),
       mMipmapLevel(0),
       mHorizontalResolution(EGL_UNKNOWN),
       mVerticalResolution(EGL_UNKNOWN),
       mMultisampleResolve(EGL_MULTISAMPLE_RESOLVE_DEFAULT),
       mFixedSize(false),
       mFixedWidth(0),
       mFixedHeight(0),
-      mTextureFormat(EGL_NO_TEXTURE),
+      mTextureFormat(TextureFormat::NoTexture),
       mTextureTarget(EGL_NO_TEXTURE),
       // FIXME: Determine actual pixel aspect ratio
       mPixelAspectRatio(static_cast<EGLint>(1.0 * EGL_DISPLAY_SCALING)),
       mRenderBuffer(EGL_BACK_BUFFER),
       mSwapBehavior(EGL_NONE),
       mOrientation(0),
       mTexture(),
       mColorFormat(config->renderTargetFormat),
@@ -94,17 +94,17 @@ Surface::Surface(EGLint surfaceType,
     if (mFixedSize)
     {
         mFixedWidth  = static_cast<size_t>(attributes.get(EGL_WIDTH, 0));
         mFixedHeight = static_cast<size_t>(attributes.get(EGL_HEIGHT, 0));
     }
 
     if (mType != EGL_WINDOW_BIT)
     {
-        mTextureFormat = static_cast<EGLenum>(attributes.get(EGL_TEXTURE_FORMAT, EGL_NO_TEXTURE));
+        mTextureFormat = attributes.getAsPackedEnum(EGL_TEXTURE_FORMAT, TextureFormat::NoTexture);
         mTextureTarget = static_cast<EGLenum>(attributes.get(EGL_TEXTURE_TARGET, EGL_NO_TEXTURE));
     }
 
     mOrientation = static_cast<EGLint>(attributes.get(EGL_SURFACE_ORIENTATION_ANGLE, 0));
 }
 
 Surface::~Surface()
 {
@@ -114,35 +114,36 @@ rx::FramebufferAttachmentObjectImpl *Sur
 {
     return mImplementation;
 }
 
 Error Surface::destroyImpl(const Display *display)
 {
     if (mState.defaultFramebuffer)
     {
-        mState.defaultFramebuffer->destroyDefault(display);
+        mState.defaultFramebuffer->onDestroy(display->getProxyContext());
     }
     if (mImplementation)
     {
         mImplementation->destroy(display);
     }
 
     if (mTexture.get())
     {
         if (mImplementation)
         {
-            ANGLE_TRY(mImplementation->releaseTexImage(EGL_BACK_BUFFER));
+            ANGLE_TRY(
+                mImplementation->releaseTexImage(display->getProxyContext(), EGL_BACK_BUFFER));
         }
         auto glErr = mTexture->releaseTexImageFromSurface(display->getProxyContext());
         if (glErr.isError())
         {
             return Error(EGL_BAD_SURFACE);
         }
-        mTexture.set(nullptr, nullptr);
+        mTexture.set(display->getProxyContext(), nullptr);
     }
 
     if (mState.defaultFramebuffer)
     {
         mState.defaultFramebuffer->onDestroy(display->getProxyContext());
     }
     SafeDelete(mState.defaultFramebuffer);
     SafeDelete(mImplementation);
@@ -307,17 +308,17 @@ EGLenum Surface::getRenderBuffer() const
     return mRenderBuffer;
 }
 
 EGLenum Surface::getSwapBehavior() const
 {
     return mSwapBehavior;
 }
 
-EGLenum Surface::getTextureFormat() const
+TextureFormat Surface::getTextureFormat() const
 {
     return mTextureFormat;
 }
 
 EGLenum Surface::getTextureTarget() const
 {
     return mTextureTarget;
 }
@@ -380,33 +381,33 @@ EGLint Surface::getWidth() const
 EGLint Surface::getHeight() const
 {
     return mFixedSize ? static_cast<EGLint>(mFixedHeight) : mImplementation->getHeight();
 }
 
 Error Surface::bindTexImage(const gl::Context *context, gl::Texture *texture, EGLint buffer)
 {
     ASSERT(!mTexture.get());
-    ANGLE_TRY(mImplementation->bindTexImage(texture, buffer));
+    ANGLE_TRY(mImplementation->bindTexImage(context, texture, buffer));
 
     auto glErr = texture->bindTexImageFromSurface(context, this);
     if (glErr.isError())
     {
         return Error(EGL_BAD_SURFACE);
     }
     mTexture.set(context, texture);
 
     return NoError();
 }
 
 Error Surface::releaseTexImage(const gl::Context *context, EGLint buffer)
 {
     ASSERT(context);
 
-    ANGLE_TRY(mImplementation->releaseTexImage(buffer));
+    ANGLE_TRY(mImplementation->releaseTexImage(context, buffer));
 
     ASSERT(mTexture.get());
     auto glErr = mTexture->releaseTexImageFromSurface(context);
     if (glErr.isError())
     {
         return Error(EGL_BAD_SURFACE);
     }
     mTexture.set(context, nullptr);
--- a/gfx/angle/checkout/src/libANGLE/Surface.h
+++ b/gfx/angle/checkout/src/libANGLE/Surface.h
@@ -12,16 +12,17 @@
 #define LIBANGLE_SURFACE_H_
 
 #include <EGL/egl.h>
 
 #include "common/angleutils.h"
 #include "libANGLE/AttributeMap.h"
 #include "libANGLE/Error.h"
 #include "libANGLE/FramebufferAttachment.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/RefCountObject.h"
 #include "libANGLE/formatutils.h"
 #include "libANGLE/renderer/SurfaceImpl.h"
 
 namespace gl
 {
 class Framebuffer;
 class Texture;
@@ -80,17 +81,17 @@ class Surface : public gl::FramebufferAt
     const Config *getConfig() const;
 
     // width and height can change with client window resizing
     EGLint getWidth() const;
     EGLint getHeight() const;
     EGLint getPixelAspectRatio() const;
     EGLenum getRenderBuffer() const;
     EGLenum getSwapBehavior() const;
-    EGLenum getTextureFormat() const;
+    TextureFormat getTextureFormat() const;
     EGLenum getTextureTarget() const;
     bool getLargestPbuffer() const;
     EGLenum getGLColorspace() const;
     EGLenum getVGAlphaFormat() const;
     EGLenum getVGColorspace() const;
     bool getMipmapTexture() const;
     EGLint getMipmapLevel() const;
     EGLint getHorizontalResolution() const;
@@ -165,17 +166,17 @@ class Surface : public gl::FramebufferAt
     bool mFixedSize;
     size_t mFixedWidth;
     size_t mFixedHeight;
 
     bool mDirectComposition;
 
     bool mRobustResourceInitialization;
 
-    EGLenum mTextureFormat;
+    TextureFormat mTextureFormat;
     EGLenum mTextureTarget;
 
     EGLint mPixelAspectRatio;      // Display aspect ratio
     EGLenum mRenderBuffer;         // Render buffer
     EGLenum mSwapBehavior;         // Buffer swap behavior
 
     EGLint mOrientation;
 
--- a/gfx/angle/checkout/src/libANGLE/Texture.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Texture.cpp
@@ -508,17 +508,17 @@ void TextureState::setImageDesc(TextureT
     if (desc.initState == InitState::MayNeedInit)
     {
         mInitState = InitState::MayNeedInit;
     }
 }
 
 const ImageDesc &TextureState::getImageDesc(const ImageIndex &imageIndex) const
 {
-    return getImageDesc(imageIndex.target, imageIndex.mipIndex);
+    return getImageDesc(imageIndex.getTarget(), imageIndex.getLevelIndex());
 }
 
 void TextureState::setImageDescChain(GLuint baseLevel,
                                      GLuint maxLevel,
                                      Extents baseSize,
                                      const Format &format,
                                      InitState initState)
 {
@@ -939,17 +939,17 @@ Error Texture::setImage(const Context *c
                         const uint8_t *pixels)
 {
     ASSERT(TextureTargetToType(target) == mState.mType);
 
     // Release from previous calls to eglBindTexImage, to avoid calling the Impl after
     ANGLE_TRY(releaseTexImageInternal(context));
     ANGLE_TRY(orphanImages(context));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     ANGLE_TRY(mTexture->setImage(context, index, internalFormat, size, format, type, unpackState,
                                  pixels));
 
     InitState initState = DetermineInitState(context, pixels);
     mState.setImageDesc(target, level, ImageDesc(size, Format(internalFormat, type), initState));
     signalDirty(context, initState);
 
@@ -964,17 +964,17 @@ Error Texture::setSubImage(const Context
                            GLenum format,
                            GLenum type,
                            const uint8_t *pixels)
 {
     ASSERT(TextureTargetToType(target) == mState.mType);
 
     ANGLE_TRY(ensureSubImageInitialized(context, target, level, area));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     return mTexture->setSubImage(context, index, area, format, type, unpackState, pixels);
 }
 
 Error Texture::setCompressedImage(const Context *context,
                                   const PixelUnpackState &unpackState,
                                   TextureTarget target,
                                   GLint level,
@@ -984,17 +984,17 @@ Error Texture::setCompressedImage(const 
                                   const uint8_t *pixels)
 {
     ASSERT(TextureTargetToType(target) == mState.mType);
 
     // Release from previous calls to eglBindTexImage, to avoid calling the Impl after
     ANGLE_TRY(releaseTexImageInternal(context));
     ANGLE_TRY(orphanImages(context));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     ANGLE_TRY(mTexture->setCompressedImage(context, index, internalFormat, size, unpackState,
                                            imageSize, pixels));
 
     InitState initState = DetermineInitState(context, pixels);
     mState.setImageDesc(target, level, ImageDesc(size, Format(internalFormat), initState));
     signalDirty(context, initState);
 
@@ -1009,17 +1009,17 @@ Error Texture::setCompressedSubImage(con
                                      GLenum format,
                                      size_t imageSize,
                                      const uint8_t *pixels)
 {
     ASSERT(TextureTargetToType(target) == mState.mType);
 
     ANGLE_TRY(ensureSubImageInitialized(context, target, level, area));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     return mTexture->setCompressedSubImage(context, index, area, format, unpackState, imageSize,
                                            pixels);
 }
 
 Error Texture::copyImage(const Context *context,
                          TextureTarget target,
                          GLint level,
@@ -1035,17 +1035,17 @@ Error Texture::copyImage(const Context *
 
     // Ensure source FBO is initialized.
     ANGLE_TRY(source->ensureReadAttachmentInitialized(context, GL_COLOR_BUFFER_BIT));
 
     // Use the source FBO size as the init image area.
     Box destBox(0, 0, 0, sourceArea.width, sourceArea.height, 1);
     ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     ANGLE_TRY(mTexture->copyImage(context, index, sourceArea, internalFormat, source));
 
     const InternalFormat &internalFormatInfo =
         GetInternalFormatInfo(internalFormat, GL_UNSIGNED_BYTE);
 
     mState.setImageDesc(target, level,
                         ImageDesc(Extents(sourceArea.width, sourceArea.height, 1),
@@ -1067,17 +1067,17 @@ Error Texture::copySubImage(const Contex
     ASSERT(TextureTargetToType(target) == mState.mType);
 
     // Ensure source FBO is initialized.
     ANGLE_TRY(source->ensureReadAttachmentInitialized(context, GL_COLOR_BUFFER_BIT));
 
     Box destBox(destOffset.x, destOffset.y, destOffset.y, sourceArea.width, sourceArea.height, 1);
     ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     return mTexture->copySubImage(context, index, destOffset, sourceArea, source);
 }
 
 Error Texture::copyTexture(const Context *context,
                            TextureTarget target,
                            GLint level,
                            GLenum internalFormat,
@@ -1094,17 +1094,17 @@ Error Texture::copyTexture(const Context
     // Release from previous calls to eglBindTexImage, to avoid calling the Impl after
     ANGLE_TRY(releaseTexImageInternal(context));
     ANGLE_TRY(orphanImages(context));
 
     // Initialize source texture.
     // Note: we don't have a way to notify which portions of the image changed currently.
     ANGLE_TRY(source->ensureInitialized(context));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     ANGLE_TRY(mTexture->copyTexture(context, index, internalFormat, type, sourceLevel, unpackFlipY,
                                     unpackPremultiplyAlpha, unpackUnmultiplyAlpha, source));
 
     const auto &sourceDesc =
         source->mState.getImageDesc(NonCubeTextureTypeToTarget(source->getType()), 0);
     const InternalFormat &internalFormatInfo = GetInternalFormatInfo(internalFormat, type);
     mState.setImageDesc(
@@ -1130,17 +1130,17 @@ Error Texture::copySubTexture(const Cont
     ASSERT(TextureTargetToType(target) == mState.mType);
 
     // Ensure source is initialized.
     ANGLE_TRY(source->ensureInitialized(context));
 
     Box destBox(destOffset.x, destOffset.y, destOffset.y, sourceArea.width, sourceArea.height, 1);
     ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox));
 
-    ImageIndex index = ImageIndex::MakeGeneric(target, level);
+    ImageIndex index = ImageIndex::MakeFromTarget(target, level);
 
     return mTexture->copySubTexture(context, index, destOffset, sourceLevel, sourceArea,
                                     unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha,
                                     source);
 }
 
 Error Texture::copyCompressedTexture(const Context *context, const Texture *source)
 {
@@ -1231,27 +1231,28 @@ Error Texture::generateMipmap(const Cont
 
     const GLuint baseLevel = mState.getEffectiveBaseLevel();
     const GLuint maxLevel  = mState.getMipmapMaxLevel();
 
     if (maxLevel <= baseLevel)
     {
         return NoError();
     }
-    syncState();
+    ANGLE_TRY(syncState(context));
 
     // Clear the base image(s) immediately if needed
     if (context->isRobustResourceInitEnabled())
     {
         ImageIndexIterator it =
-            ImageIndexIterator::MakeGeneric(mState.mType, baseLevel, baseLevel + 1);
+            ImageIndexIterator::MakeGeneric(mState.mType, baseLevel, baseLevel + 1,
+                                            ImageIndex::kEntireLevel, ImageIndex::kEntireLevel);
         while (it.hasNext())
         {
             const ImageIndex index = it.next();
-            const ImageDesc &desc  = mState.getImageDesc(index.target, index.mipIndex);
+            const ImageDesc &desc  = mState.getImageDesc(index.getTarget(), index.getLevelIndex());
 
             if (desc.initState == InitState::MayNeedInit)
             {
                 ANGLE_TRY(initializeContents(context, index));
             }
         }
     }
 
@@ -1391,17 +1392,17 @@ Extents Texture::getAttachmentSize(const
 
 const Format &Texture::getAttachmentFormat(GLenum /*binding*/, const ImageIndex &imageIndex) const
 {
     return mState.getImageDesc(imageIndex).format;
 }
 
 GLsizei Texture::getAttachmentSamples(const ImageIndex &imageIndex) const
 {
-    return getSamples(imageIndex.target, 0);
+    return getSamples(imageIndex.getTarget(), 0);
 }
 
 void Texture::setCrop(const gl::Rectangle& rect)
 {
     mState.setCrop(rect);
 }
 
 const gl::Rectangle& Texture::getCrop() const
@@ -1429,20 +1430,21 @@ void Texture::onDetach(const Context *co
     release(context);
 }
 
 GLuint Texture::getId() const
 {
     return id();
 }
 
-void Texture::syncState()
+Error Texture::syncState(const Context *context)
 {
-    mTexture->syncState(mDirtyBits);
+    ANGLE_TRY(mTexture->syncState(context, mDirtyBits));
     mDirtyBits.reset();
+    return NoError();
 }
 
 rx::FramebufferAttachmentObjectImpl *Texture::getAttachmentImpl() const
 {
     return mTexture;
 }
 
 bool Texture::isSamplerComplete(const Context *context, const Sampler *optionalSampler)
@@ -1478,21 +1480,23 @@ Error Texture::ensureInitialized(const C
     if (!context->isRobustResourceInitEnabled() || mState.mInitState == InitState::Initialized)
     {
         return NoError();
     }
 
     bool anyDirty = false;
 
     ImageIndexIterator it =
-        ImageIndexIterator::MakeGeneric(mState.mType, 0, IMPLEMENTATION_MAX_TEXTURE_LEVELS + 1);
+        ImageIndexIterator::MakeGeneric(mState.mType, 0, IMPLEMENTATION_MAX_TEXTURE_LEVELS + 1,
+                                        ImageIndex::kEntireLevel, ImageIndex::kEntireLevel);
     while (it.hasNext())
     {
         const ImageIndex index = it.next();
-        ImageDesc &desc = mState.mImageDescs[GetImageDescIndex(index.target, index.mipIndex)];
+        ImageDesc &desc =
+            mState.mImageDescs[GetImageDescIndex(index.getTarget(), index.getLevelIndex())];
         if (desc.initState == InitState::MayNeedInit)
         {
             ASSERT(mState.mInitState == InitState::MayNeedInit);
             ANGLE_TRY(initializeContents(context, index));
             desc.initState = InitState::Initialized;
             anyDirty       = true;
         }
     }
@@ -1514,32 +1518,32 @@ InitState Texture::initState() const
 {
     return mState.mInitState;
 }
 
 void Texture::setInitState(const ImageIndex &imageIndex, InitState initState)
 {
     ImageDesc newDesc = mState.getImageDesc(imageIndex);
     newDesc.initState = initState;
-    mState.setImageDesc(imageIndex.target, imageIndex.mipIndex, newDesc);
+    mState.setImageDesc(imageIndex.getTarget(), imageIndex.getLevelIndex(), newDesc);
 }
 
 Error Texture::ensureSubImageInitialized(const Context *context,
                                          TextureTarget target,
                                          size_t level,
                                          const gl::Box &area)
 {
     if (!context->isRobustResourceInitEnabled() || mState.mInitState == InitState::Initialized)
     {
         return NoError();
     }
 
     // Pre-initialize the texture contents if necessary.
     // TODO(jmadill): Check if area overlaps the entire texture.
-    ImageIndex imageIndex  = ImageIndex::MakeGeneric(target, static_cast<GLint>(level));
+    ImageIndex imageIndex  = ImageIndex::MakeFromTarget(target, static_cast<GLint>(level));
     const auto &desc       = mState.getImageDesc(imageIndex);
     if (desc.initState == InitState::MayNeedInit)
     {
         ASSERT(mState.mInitState == InitState::MayNeedInit);
         bool coversWholeImage = area.x == 0 && area.y == 0 && area.z == 0 &&
                                 area.width == desc.size.width && area.height == desc.size.height &&
                                 area.depth == desc.size.depth;
         if (!coversWholeImage)
--- a/gfx/angle/checkout/src/libANGLE/Texture.h
+++ b/gfx/angle/checkout/src/libANGLE/Texture.h
@@ -421,17 +421,17 @@ class Texture final : public egl::ImageS
         // Misc
         DIRTY_BIT_LABEL,
         DIRTY_BIT_USAGE,
 
         DIRTY_BIT_COUNT,
     };
     using DirtyBits = angle::BitSet<DIRTY_BIT_COUNT>;
 
-    void syncState();
+    Error syncState(const Context *context);
     bool hasAnyDirtyBit() const { return mDirtyBits.any(); }
 
   private:
     rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override;
 
     // ANGLE-only method, used internally
     friend class egl::Surface;
     Error bindTexImageFromSurface(const Context *context, egl::Surface *surface);
--- a/gfx/angle/checkout/src/libANGLE/TransformFeedback.cpp
+++ b/gfx/angle/checkout/src/libANGLE/TransformFeedback.cpp
@@ -36,17 +36,17 @@ angle::CheckedNumeric<GLsizeiptr> GetVer
     {
         case GL_TRIANGLES:
             return checkedPrimcount * (checkedCount - checkedCount % 3);
         case GL_LINES:
             return checkedPrimcount * (checkedCount - checkedCount % 2);
         case GL_POINTS:
             return checkedPrimcount * checkedCount;
         default:
-            NOTREACHED();
+            UNREACHABLE();
             return checkedPrimcount * checkedCount;
     }
 }
 
 TransformFeedbackState::TransformFeedbackState(size_t maxIndexedBuffers)
     : mLabel(),
       mActive(false),
       mPrimitiveMode(GL_NONE),
@@ -233,17 +233,17 @@ void TransformFeedback::detachBuffer(con
 {
     bool isBound = context->isCurrentTransformFeedback(this);
     for (size_t index = 0; index < mState.mIndexedBuffers.size(); index++)
     {
         if (mState.mIndexedBuffers[index].id() == bufferName)
         {
             if (isBound)
             {
-                mState.mIndexedBuffers[index]->onBindingChanged(false,
+                mState.mIndexedBuffers[index]->onBindingChanged(context, false,
                                                                 BufferBinding::TransformFeedback);
             }
             mState.mIndexedBuffers[index].set(context, nullptr);
             mImplementation->bindIndexedBuffer(index, mState.mIndexedBuffers[index]);
         }
     }
 }
 
@@ -252,22 +252,23 @@ void TransformFeedback::bindIndexedBuffe
                                           Buffer *buffer,
                                           size_t offset,
                                           size_t size)
 {
     ASSERT(index < mState.mIndexedBuffers.size());
     bool isBound = context && context->isCurrentTransformFeedback(this);
     if (isBound && mState.mIndexedBuffers[index].get())
     {
-        mState.mIndexedBuffers[index]->onBindingChanged(false, BufferBinding::TransformFeedback);
+        mState.mIndexedBuffers[index]->onBindingChanged(context, false,
+                                                        BufferBinding::TransformFeedback);
     }
     mState.mIndexedBuffers[index].set(context, buffer, offset, size);
     if (isBound && buffer)
     {
-        buffer->onBindingChanged(true, BufferBinding::TransformFeedback);
+        buffer->onBindingChanged(context, true, BufferBinding::TransformFeedback);
     }
 
     mImplementation->bindIndexedBuffer(index, mState.mIndexedBuffers[index]);
 }
 
 const OffsetBindingPointer<Buffer> &TransformFeedback::getIndexedBuffer(size_t index) const
 {
     ASSERT(index < mState.mIndexedBuffers.size());
@@ -296,19 +297,19 @@ rx::TransformFeedbackImpl *TransformFeed
     return mImplementation;
 }
 
 const rx::TransformFeedbackImpl *TransformFeedback::getImplementation() const
 {
     return mImplementation;
 }
 
-void TransformFeedback::onBindingChanged(bool bound)
+void TransformFeedback::onBindingChanged(const Context *context, bool bound)
 {
     for (auto &buffer : mState.mIndexedBuffers)
     {
         if (buffer.get())
         {
-            buffer->onBindingChanged(bound, BufferBinding::TransformFeedback);
+            buffer->onBindingChanged(context, bound, BufferBinding::TransformFeedback);
         }
     }
 }
-}
+}  // namespace gl
--- a/gfx/angle/checkout/src/libANGLE/TransformFeedback.h
+++ b/gfx/angle/checkout/src/libANGLE/TransformFeedback.h
@@ -92,20 +92,20 @@ class TransformFeedback final : public R
     // Returns true if any buffer bound to this object is also bound to another target.
     bool buffersBoundForOtherUse() const;
 
     void detachBuffer(const Context *context, GLuint bufferName);
 
     rx::TransformFeedbackImpl *getImplementation();
     const rx::TransformFeedbackImpl *getImplementation() const;
 
-    void onBindingChanged(bool bound);
+    void onBindingChanged(const Context *context, bool bound);
 
   private:
     void bindProgram(const Context *context, Program *program);
 
     TransformFeedbackState mState;
-    rx::TransformFeedbackImpl* mImplementation;
+    rx::TransformFeedbackImpl *mImplementation;
 };
 
-}
+}  // namespace gl
 
 #endif // LIBANGLE_TRANSFORM_FEEDBACK_H_
--- a/gfx/angle/checkout/src/libANGLE/Uniform.cpp
+++ b/gfx/angle/checkout/src/libANGLE/Uniform.cpp
@@ -41,16 +41,21 @@ void ActiveVariable::unionReferencesWith
     mActiveUseBits |= other.mActiveUseBits;
 }
 
 ShaderType ActiveVariable::getFirstShaderTypeWhereActive() const
 {
     return static_cast<ShaderType>(gl::ScanForward(mActiveUseBits.bits()));
 }
 
+GLuint ActiveVariable::activeShaderCount() const
+{
+    return static_cast<GLuint>(mActiveUseBits.count());
+}
+
 LinkedUniform::LinkedUniform()
     : typeInfo(nullptr), bufferIndex(-1), blockInfo(sh::BlockMemberInfo::getDefaultBlockInfo())
 {
 }
 
 LinkedUniform::LinkedUniform(GLenum typeIn,
                              GLenum precisionIn,
                              const std::string &nameIn,
--- a/gfx/angle/checkout/src/libANGLE/Uniform.h
+++ b/gfx/angle/checkout/src/libANGLE/Uniform.h
@@ -27,16 +27,17 @@ struct ActiveVariable
     virtual ~ActiveVariable();
 
     ActiveVariable &operator=(const ActiveVariable &rhs);
 
     ShaderType getFirstShaderTypeWhereActive() const;
     void setActive(ShaderType shaderType, bool used);
     void unionReferencesWith(const ActiveVariable &other);
     bool isActive(ShaderType shaderType) const;
+    GLuint activeShaderCount() const;
 
   private:
     ShaderBitSet mActiveUseBits;
 };
 
 // Helper struct representing a single shader uniform
 struct LinkedUniform : public sh::Uniform, public ActiveVariable
 {
--- a/gfx/angle/checkout/src/libANGLE/VaryingPacking.cpp
+++ b/gfx/angle/checkout/src/libANGLE/VaryingPacking.cpp
@@ -327,22 +327,24 @@ bool VaryingPacking::collectAndPackUserV
                 {
                     mPackedVaryings.push_back(PackedVarying(*varying, interpolation));
                     uniqueFullNames.insert(mPackedVaryings.back().fullName());
                 }
                 continue;
             }
         }
 
-        // Keep Transform FB varyings in the merged list always.
+        // If the varying is not used in the VS, we know it is inactive.
         if (!input)
         {
+            mInactiveVaryingNames.push_back(ref.first);
             continue;
         }
 
+        // Keep Transform FB varyings in the merged list always.
         for (const std::string &tfVarying : tfVaryings)
         {
             std::vector<unsigned int> subscripts;
             std::string baseName = ParseResourceName(tfVarying, &subscripts);
             size_t subscript     = GL_INVALID_INDEX;
             if (!subscripts.empty())
             {
                 subscript = subscripts.back();
@@ -379,16 +381,21 @@ bool VaryingPacking::collectAndPackUserV
                 // Continue to match next array element for 'input' if the current match is array
                 // element.
                 if (subscript == GL_INVALID_INDEX)
                 {
                     break;
                 }
             }
         }
+
+        if (uniqueFullNames.count(ref.first) == 0)
+        {
+            mInactiveVaryingNames.push_back(ref.first);
+        }
     }
 
     std::sort(mPackedVaryings.begin(), mPackedVaryings.end(), ComparePackedVarying);
 
     return packUserVaryings(infoLog, mPackedVaryings, tfVaryings);
 }
 
 // See comment on packVarying.
@@ -424,9 +431,13 @@ bool VaryingPacking::packUserVaryings(gl
          semanticIndex < static_cast<unsigned int>(mRegisterList.size()); ++semanticIndex)
     {
         mRegisterList[semanticIndex].semanticIndex = semanticIndex;
     }
 
     return true;
 }
 
+const std::vector<std::string> &VaryingPacking::getInactiveVaryingNames() const
+{
+    return mInactiveVaryingNames;
+}
 }  // namespace rx
--- a/gfx/angle/checkout/src/libANGLE/VaryingPacking.h
+++ b/gfx/angle/checkout/src/libANGLE/VaryingPacking.h
@@ -174,28 +174,31 @@ class VaryingPacking final : angle::NonC
     const Register &operator[](unsigned int index) const { return mRegisterMap[index]; }
 
     const std::vector<PackedVaryingRegister> &getRegisterList() const { return mRegisterList; }
     unsigned int getMaxSemanticIndex() const
     {
         return static_cast<unsigned int>(mRegisterList.size());
     }
 
+    const std::vector<std::string> &getInactiveVaryingNames() const;
+
   private:
     bool packVarying(const PackedVarying &packedVarying);
     bool isFree(unsigned int registerRow,
                 unsigned int registerColumn,
                 unsigned int varyingRows,
                 unsigned int varyingColumns) const;
     void insert(unsigned int registerRow,
                 unsigned int registerColumn,
                 const PackedVarying &packedVarying);
 
     std::vector<Register> mRegisterMap;
     std::vector<PackedVaryingRegister> mRegisterList;
     std::vector<PackedVarying> mPackedVaryings;
+    std::vector<std::string> mInactiveVaryingNames;
 
     PackMode mPackMode;
 };
 
 }  // namespace gl
 
 #endif  // LIBANGLE_VARYINGPACKING_H_
--- a/gfx/angle/checkout/src/libANGLE/VertexArray.cpp
+++ b/gfx/angle/checkout/src/libANGLE/VertexArray.cpp
@@ -10,32 +10,43 @@
 #include "libANGLE/Buffer.h"
 #include "libANGLE/Context.h"
 #include "libANGLE/renderer/BufferImpl.h"
 #include "libANGLE/renderer/GLImplFactory.h"
 #include "libANGLE/renderer/VertexArrayImpl.h"
 
 namespace gl
 {
-
+// VertexArrayState implementation.
 VertexArrayState::VertexArrayState(size_t maxAttribs, size_t maxAttribBindings)
     : mLabel(), mVertexBindings(maxAttribBindings)
 {
     ASSERT(maxAttribs <= maxAttribBindings);
 
     for (size_t i = 0; i < maxAttribs; i++)
     {
         mVertexAttributes.emplace_back(static_cast<GLuint>(i));
     }
 }
 
 VertexArrayState::~VertexArrayState()
 {
 }
 
+gl::AttributesMask VertexArrayState::getEnabledClientMemoryAttribsMask() const
+{
+    return (mClientMemoryAttribsMask & mEnabledAttributesMask);
+}
+
+bool VertexArrayState::hasEnabledNullPointerClientArray() const
+{
+    return (mNullPointerClientMemoryAttribsMask & mEnabledAttributesMask).any();
+}
+
+// VertexArray implementation.
 VertexArray::VertexArray(rx::GLImplFactory *factory,
                          GLuint id,
                          size_t maxAttribs,
                          size_t maxAttribBindings)
     : mId(id),
       mState(maxAttribs, maxAttribBindings),
       mVertexArray(factory->createVertexArray(mState)),
       mElementArrayBufferObserverBinding(this, maxAttribBindings)
@@ -44,22 +55,22 @@ VertexArray::VertexArray(rx::GLImplFacto
     {
         mArrayBufferObserverBindings.emplace_back(this, attribIndex);
     }
 }
 
 void VertexArray::onDestroy(const Context *context)
 {
     bool isBound = context->isCurrentVertexArray(this);
-    for (auto &binding : mState.mVertexBindings)
+    for (VertexBinding &binding : mState.mVertexBindings)
     {
         binding.setBuffer(context, nullptr, isBound);
     }
     if (isBound && mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(false, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::ElementArray);
     mState.mElementArrayBuffer.set(context, nullptr);
     mVertexArray->destroy(context);
     SafeDelete(mVertexArray);
     delete this;
 }
 
 VertexArray::~VertexArray()
 {
@@ -90,17 +101,17 @@ void VertexArray::detachBuffer(const Con
         {
             binding.setBuffer(context, nullptr, isBound);
         }
     }
 
     if (mState.mElementArrayBuffer.id() == bufferName)
     {
         if (isBound && mState.mElementArrayBuffer.get())
-            mState.mElementArrayBuffer->onBindingChanged(false, BufferBinding::Array);
+            mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::Array);
         mState.mElementArrayBuffer.set(context, nullptr);
     }
 }
 
 const VertexAttribute &VertexArray::getVertexAttribute(size_t attribIndex) const
 {
     ASSERT(attribIndex < getMaxAttribs());
     return mState.mVertexAttributes[attribIndex];
@@ -143,16 +154,18 @@ void VertexArray::bindVertexBufferImpl(c
 
     VertexBinding *binding = &mState.mVertexBindings[bindingIndex];
 
     binding->setBuffer(context, boundBuffer, isBound);
     binding->setOffset(offset);
     binding->setStride(stride);
 
     updateObserverBinding(bindingIndex);
+    updateCachedBufferBindingSize(bindingIndex);
+    updateCachedTransformFeedbackBindingValidation(bindingIndex, boundBuffer);
 }
 
 void VertexArray::bindVertexBuffer(const Context *context,
                                    size_t bindingIndex,
                                    Buffer *boundBuffer,
                                    GLintptr offset,
                                    GLsizei stride)
 {
@@ -197,17 +210,17 @@ void VertexArray::setVertexAttribFormatI
     VertexAttribute *attrib = &mState.mVertexAttributes[attribIndex];
 
     attrib->size           = size;
     attrib->type           = type;
     attrib->normalized     = normalized;
     attrib->pureInteger    = pureInteger;
     attrib->relativeOffset = relativeOffset;
     mState.mVertexAttributesTypeMask.setIndex(GetVertexAttributeBaseType(*attrib), attribIndex);
-    mState.mEnabledAttributesMask.set(attribIndex);
+    attrib->updateCachedSizePlusRelativeOffset();
 }
 
 void VertexArray::setVertexAttribFormat(size_t attribIndex,
                                         GLint size,
                                         GLenum type,
                                         bool normalized,
                                         bool pureInteger,
                                         GLuint relativeOffset)
@@ -260,26 +273,30 @@ void VertexArray::setVertexAttribPointer
     GLsizei effectiveStride =
         stride != 0 ? stride : static_cast<GLsizei>(ComputeVertexAttributeTypeSize(attrib));
     attrib.pointer                 = pointer;
     attrib.vertexAttribArrayStride = stride;
 
     bindVertexBufferImpl(context, attribIndex, boundBuffer, offset, effectiveStride);
 
     setDirtyAttribBit(attribIndex, DIRTY_ATTRIB_POINTER);
+
+    mState.mClientMemoryAttribsMask.set(attribIndex, boundBuffer == nullptr);
+    mState.mNullPointerClientMemoryAttribsMask.set(attribIndex,
+                                                   boundBuffer == nullptr && pointer == nullptr);
 }
 
 void VertexArray::setElementArrayBuffer(const Context *context, Buffer *buffer)
 {
     bool isBound = context->isCurrentVertexArray(this);
     if (isBound && mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(false, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::ElementArray);
     mState.mElementArrayBuffer.set(context, buffer);
     if (isBound && mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(true, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, true, BufferBinding::ElementArray);
     mElementArrayBufferObserverBinding.bind(buffer ? buffer->getImplementation() : nullptr);
     mDirtyBits.set(DIRTY_BIT_ELEMENT_ARRAY_BUFFER);
 }
 
 gl::Error VertexArray::syncState(const Context *context)
 {
     if (mDirtyBits.any())
     {
@@ -294,23 +311,23 @@ gl::Error VertexArray::syncState(const C
         // individual attribs. We could also look into schemes where iterating the dirty
         // bit set also resets it as you pass through it.
         memset(&mDirtyAttribBits, 0, sizeof(mDirtyAttribBits));
         memset(&mDirtyBindingBits, 0, sizeof(mDirtyBindingBits));
     }
     return gl::NoError();
 }
 
-void VertexArray::onBindingChanged(bool bound)
+void VertexArray::onBindingChanged(const Context *context, bool bound)
 {
     if (mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(bound, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, bound, BufferBinding::ElementArray);
     for (auto &binding : mState.mVertexBindings)
     {
-        binding.onContainerBindingChanged(bound);
+        binding.onContainerBindingChanged(context, bound);
     }
 }
 
 VertexArray::DirtyBitType VertexArray::getDirtyBitFromIndex(bool contentsChanged,
                                                             angle::SubjectIndex index) const
 {
     if (index == mArrayBufferObserverBindings.size())
     {
@@ -325,23 +342,92 @@ VertexArray::DirtyBitType VertexArray::g
             (contentsChanged ? DIRTY_BIT_BUFFER_DATA_0 : DIRTY_BIT_BINDING_0) + index);
     }
 }
 
 void VertexArray::onSubjectStateChange(const gl::Context *context,
                                        angle::SubjectIndex index,
                                        angle::SubjectMessage message)
 {
-    bool contentsChanged  = (message == angle::SubjectMessage::CONTENTS_CHANGED);
+    switch (message)
+    {
+        case angle::SubjectMessage::CONTENTS_CHANGED:
+            setDependentDirtyBit(context, true, index);
+            break;
+
+        case angle::SubjectMessage::STORAGE_CHANGED:
+            setDependentDirtyBit(context, false, index);
+            if (index < mArrayBufferObserverBindings.size())
+            {
+                updateCachedBufferBindingSize(index);
+            }
+            break;
+
+        case angle::SubjectMessage::BINDING_CHANGED:
+            if (index < mArrayBufferObserverBindings.size())
+            {
+                const Buffer *buffer = mState.mVertexBindings[index].getBuffer().get();
+                updateCachedTransformFeedbackBindingValidation(index, buffer);
+            }
+            break;
+
+        default:
+            UNREACHABLE();
+            break;
+    }
+}
+
+void VertexArray::setDependentDirtyBit(const gl::Context *context,
+                                       bool contentsChanged,
+                                       angle::SubjectIndex index)
+{
     DirtyBitType dirtyBit = getDirtyBitFromIndex(contentsChanged, index);
     ASSERT(!mDirtyBitsGuard.valid() || mDirtyBitsGuard.value().test(dirtyBit));
     mDirtyBits.set(dirtyBit);
     context->getGLState().setVertexArrayDirty(this);
 }
 
 void VertexArray::updateObserverBinding(size_t bindingIndex)
 {
     Buffer *boundBuffer = mState.mVertexBindings[bindingIndex].getBuffer().get();
     mArrayBufferObserverBindings[bindingIndex].bind(boundBuffer ? boundBuffer->getImplementation()
                                                                 : nullptr);
 }
 
+void VertexArray::updateCachedVertexAttributeSize(size_t attribIndex)
+{
+    mState.mVertexAttributes[attribIndex].updateCachedSizePlusRelativeOffset();
+}
+
+void VertexArray::updateCachedBufferBindingSize(size_t bindingIndex)
+{
+    mState.mVertexBindings[bindingIndex].updateCachedBufferSizeMinusOffset();
+}
+
+void VertexArray::updateCachedTransformFeedbackBindingValidation(size_t bindingIndex,
+                                                                 const Buffer *buffer)
+{
+    const bool hasConflict = buffer && buffer->isBoundForTransformFeedbackAndOtherUse();
+    mCachedTransformFeedbackConflictedBindingsMask.set(bindingIndex, hasConflict);
+}
+
+bool VertexArray::hasTransformFeedbackBindingConflict(const AttributesMask &activeAttribues) const
+{
+    // Fast check first.
+    if (!mCachedTransformFeedbackConflictedBindingsMask.any())
+    {
+        return false;
+    }
+
+    // Slow check. We must ensure that the conflicting attributes are enabled/active.
+    for (size_t attribIndex : activeAttribues)
+    {
+        const VertexAttribute &attrib = mState.mVertexAttributes[attribIndex];
+        if (mCachedTransformFeedbackConflictedBindingsMask[attrib.bindingIndex])
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
 }  // namespace gl
--- a/gfx/angle/checkout/src/libANGLE/VertexArray.h
+++ b/gfx/angle/checkout/src/libANGLE/VertexArray.h
@@ -58,24 +58,37 @@ class VertexArrayState final : angle::No
     {
         return mVertexBindings[mVertexAttributes[attribIndex].bindingIndex];
     }
     size_t getBindingIndexFromAttribIndex(size_t attribIndex) const
     {
         return mVertexAttributes[attribIndex].bindingIndex;
     }
 
+    // Combines mClientMemoryAttribsMask with mEnabledAttributesMask.
+    gl::AttributesMask getEnabledClientMemoryAttribsMask() const;
+
+    // Extra validation performed on the Vertex Array.
+    bool hasEnabledNullPointerClientArray() const;
+
   private:
     friend class VertexArray;
     std::string mLabel;
     std::vector<VertexAttribute> mVertexAttributes;
     BindingPointer<Buffer> mElementArrayBuffer;
     std::vector<VertexBinding> mVertexBindings;
     AttributesMask mEnabledAttributesMask;
     ComponentTypeMask mVertexAttributesTypeMask;
+
+    // From the GLES 3.1 spec:
+    // When a generic attribute array is sourced from client memory, the vertex attribute binding
+    // state is ignored. Thus we don't have to worry about binding state when using client memory
+    // attribs.
+    gl::AttributesMask mClientMemoryAttribsMask;
+    gl::AttributesMask mNullPointerClientMemoryAttribsMask;
 };
 
 class VertexArray final : public angle::ObserverInterface, public LabeledObject
 {
   public:
     VertexArray(rx::GLImplFactory *factory, GLuint id, size_t maxAttribs, size_t maxAttribBindings);
 
     void onDestroy(const Context *context);
@@ -149,16 +162,26 @@ class VertexArray final : public angle::
 
     rx::VertexArrayImpl *getImplementation() const { return mVertexArray; }
 
     const AttributesMask &getEnabledAttributesMask() const
     {
         return mState.getEnabledAttributesMask();
     }
 
+    gl::AttributesMask getEnabledClientMemoryAttribsMask() const
+    {
+        return mState.getEnabledClientMemoryAttribsMask();
+    }
+
+    bool hasEnabledNullPointerClientArray() const
+    {
+        return mState.hasEnabledNullPointerClientArray();
+    }
+
     // Observer implementation
     void onSubjectStateChange(const gl::Context *context,
                               angle::SubjectIndex index,
                               angle::SubjectMessage message) override;
 
     // Dirty bits for VertexArrays use a heirarchical design. At the top level, each attribute
     // has a single dirty bit. Then an array of MAX_ATTRIBS dirty bits each has a dirty bit for
     // enabled/pointer/format/binding. Bindings are handled similarly. Note that because the
@@ -216,36 +239,47 @@ class VertexArray final : public angle::
     static size_t GetVertexIndexFromDirtyBit(size_t dirtyBit);
 
     gl::Error syncState(const Context *context);
     bool hasAnyDirtyBit() const { return mDirtyBits.any(); }
 
     ComponentTypeMask getAttributesTypeMask() const { return mState.mVertexAttributesTypeMask; }
     AttributesMask getAttributesMask() const { return mState.mEnabledAttributesMask; }
 
-    void onBindingChanged(bool bound);
+    void onBindingChanged(const Context *context, bool bound);
+    bool hasTransformFeedbackBindingConflict(const AttributesMask &activeAttribues) const;
 
   private:
     ~VertexArray() override;
 
     void setDirtyAttribBit(size_t attribIndex, DirtyAttribBitType dirtyAttribBit);
     void setDirtyBindingBit(size_t bindingIndex, DirtyBindingBitType dirtyBindingBit);
 
     void updateObserverBinding(size_t bindingIndex);
     DirtyBitType getDirtyBitFromIndex(bool contentsChanged, angle::SubjectIndex index) const;
+    void setDependentDirtyBit(const gl::Context *context,
+                              bool contentsChanged,
+                              angle::SubjectIndex index);
+
+    // These are used to optimize draw call validation.
+    void updateCachedVertexAttributeSize(size_t attribIndex);
+    void updateCachedBufferBindingSize(size_t bindingIndex);
+    void updateCachedTransformFeedbackBindingValidation(size_t bindingIndex, const Buffer *buffer);
 
     GLuint mId;
 
     VertexArrayState mState;
     DirtyBits mDirtyBits;
     DirtyAttribBitsArray mDirtyAttribBits;
     DirtyBindingBitsArray mDirtyBindingBits;
     Optional<DirtyBits> mDirtyBitsGuard;
 
     rx::VertexArrayImpl *mVertexArray;
 
     std::vector<angle::ObserverBinding> mArrayBufferObserverBindings;
     angle::ObserverBinding mElementArrayBufferObserverBinding;
+
+    AttributesMask mCachedTransformFeedbackConflictedBindingsMask;
 };
 
 }  // namespace gl
 
 #endif // LIBANGLE_VERTEXARRAY_H_
--- a/gfx/angle/checkout/src/libANGLE/VertexAttribute.cpp
+++ b/gfx/angle/checkout/src/libANGLE/VertexAttribute.cpp
@@ -8,17 +8,18 @@
 
 #include "libANGLE/VertexAttribute.h"
 
 namespace gl
 {
 
 // [OpenGL ES 3.1] (November 3, 2016) Section 20 Page 361
 // Table 20.2: Vertex Array Object State
-VertexBinding::VertexBinding() : mStride(16u), mDivisor(0), mOffset(0)
+VertexBinding::VertexBinding()
+    : mStride(16u), mDivisor(0), mOffset(0), mCachedBufferSizeMinusOffset(0)
 {
 }
 
 VertexBinding::VertexBinding(VertexBinding &&binding)
 {
     *this = std::move(binding);
 }
 
@@ -29,78 +30,106 @@ VertexBinding::~VertexBinding()
 VertexBinding &VertexBinding::operator=(VertexBinding &&binding)
 {
     if (this != &binding)
     {
         mStride  = binding.mStride;
         mDivisor = binding.mDivisor;
         mOffset  = binding.mOffset;
         std::swap(binding.mBuffer, mBuffer);
+        mCachedBufferSizeMinusOffset = binding.mCachedBufferSizeMinusOffset;
     }
     return *this;
 }
 
 void VertexBinding::setBuffer(const gl::Context *context, Buffer *bufferIn, bool containerIsBound)
 {
     if (mBuffer.get() && containerIsBound)
-        mBuffer->onBindingChanged(false, BufferBinding::Array);
+        mBuffer->onBindingChanged(context, false, BufferBinding::Array);
     mBuffer.set(context, bufferIn);
     if (mBuffer.get() && containerIsBound)
-        mBuffer->onBindingChanged(true, BufferBinding::Array);
+        mBuffer->onBindingChanged(context, true, BufferBinding::Array);
+}
+
+void VertexBinding::onContainerBindingChanged(const Context *context, bool bound) const
+{
+    if (mBuffer.get())
+        mBuffer->onBindingChanged(context, bound, BufferBinding::Array);
 }
 
-void VertexBinding::onContainerBindingChanged(bool bound)
+void VertexBinding::updateCachedBufferSizeMinusOffset()
 {
     if (mBuffer.get())
-        mBuffer->onBindingChanged(bound, BufferBinding::Array);
+    {
+        angle::CheckedNumeric<GLuint64> checkedSize(mBuffer->getSize());
+        angle::CheckedNumeric<GLuint64> checkedOffset(mOffset);
+
+        // Use a default value of zero so checks will fail on overflow.
+        mCachedBufferSizeMinusOffset = (checkedSize - checkedOffset).ValueOrDefault(0);
+    }
+    else
+    {
+        mCachedBufferSizeMinusOffset = 0;
+    }
 }
 
 VertexAttribute::VertexAttribute(GLuint bindingIndex)
     : enabled(false),
       type(GL_FLOAT),
       size(4u),
       normalized(false),
       pureInteger(false),
       pointer(nullptr),
       relativeOffset(0),
       vertexAttribArrayStride(0),
-      bindingIndex(bindingIndex)
+      bindingIndex(bindingIndex),
+      cachedSizePlusRelativeOffset(16)
 {
 }
 
 VertexAttribute::VertexAttribute(VertexAttribute &&attrib)
     : enabled(attrib.enabled),
       type(attrib.type),
       size(attrib.size),
       normalized(attrib.normalized),
       pureInteger(attrib.pureInteger),
       pointer(attrib.pointer),
       relativeOffset(attrib.relativeOffset),
       vertexAttribArrayStride(attrib.vertexAttribArrayStride),
-      bindingIndex(attrib.bindingIndex)
+      bindingIndex(attrib.bindingIndex),
+      cachedSizePlusRelativeOffset(attrib.cachedSizePlusRelativeOffset)
 {
 }
 
 VertexAttribute &VertexAttribute::operator=(VertexAttribute &&attrib)
 {
     if (this != &attrib)
     {
         enabled                 = attrib.enabled;
         type                    = attrib.type;
         size                    = attrib.size;
         normalized              = attrib.normalized;
         pureInteger             = attrib.pureInteger;
         pointer                 = attrib.pointer;
         relativeOffset          = attrib.relativeOffset;
         vertexAttribArrayStride = attrib.vertexAttribArrayStride;
         bindingIndex            = attrib.bindingIndex;
+        cachedSizePlusRelativeOffset = attrib.cachedSizePlusRelativeOffset;
     }
     return *this;
 }
 
+void VertexAttribute::updateCachedSizePlusRelativeOffset()
+{
+    ASSERT(relativeOffset <=
+           std::numeric_limits<GLuint64>::max() - ComputeVertexAttributeTypeSize(*this));
+    cachedSizePlusRelativeOffset =
+        relativeOffset + static_cast<GLuint64>(ComputeVertexAttributeTypeSize(*this));
+}
+
 size_t ComputeVertexAttributeTypeSize(const VertexAttribute& attrib)
 {
     GLuint size = attrib.size;
     switch (attrib.type)
     {
       case GL_BYTE:                        return size * sizeof(GLbyte);
       case GL_UNSIGNED_BYTE:               return size * sizeof(GLubyte);
       case GL_SHORT:                       return size * sizeof(GLshort);
--- a/gfx/angle/checkout/src/libANGLE/VertexAttribute.h
+++ b/gfx/angle/checkout/src/libANGLE/VertexAttribute.h
@@ -33,46 +33,64 @@ class VertexBinding final : angle::NonCo
     GLuint getDivisor() const { return mDivisor; }
     void setDivisor(GLuint divisorIn) { mDivisor = divisorIn; }
 
     GLintptr getOffset() const { return mOffset; }
     void setOffset(GLintptr offsetIn) { mOffset = offsetIn; }
 
     const BindingPointer<Buffer> &getBuffer() const { return mBuffer; }
     void setBuffer(const gl::Context *context, Buffer *bufferIn, bool containerIsBound);
-    void onContainerBindingChanged(bool bound);
+
+    void onContainerBindingChanged(const Context *context, bool bound) const;
+
+    GLuint64 getCachedBufferSizeMinusOffset() const
+    {
+        return mCachedBufferSizeMinusOffset;
+    }
+
+    // Called from VertexArray.
+    void updateCachedBufferSizeMinusOffset();
 
   private:
     GLuint mStride;
     GLuint mDivisor;
     GLintptr mOffset;
 
     BindingPointer<Buffer> mBuffer;
+
+    // This is kept in sync by the VertexArray. It is used to optimize draw call validation.
+    GLuint64 mCachedBufferSizeMinusOffset;
 };
 
 //
 // Implementation of Generic Vertex Attributes for ES3.1
 //
 struct VertexAttribute final : private angle::NonCopyable
 {
     explicit VertexAttribute(GLuint bindingIndex);
     VertexAttribute(VertexAttribute &&attrib);
     VertexAttribute &operator=(VertexAttribute &&attrib);
 
+    // Called from VertexArray.
+    void updateCachedSizePlusRelativeOffset();
+
     bool enabled;  // For glEnable/DisableVertexAttribArray
     GLenum type;
     GLuint size;
     bool normalized;
     bool pureInteger;
 
     const void *pointer;
     GLuint relativeOffset;
 
     GLuint vertexAttribArrayStride;  // ONLY for queries of VERTEX_ATTRIB_ARRAY_STRIDE
     GLuint bindingIndex;
+
+    // This is kept in sync by the VertexArray. It is used to optimize draw call validation.
+    GLuint64 cachedSizePlusRelativeOffset;
 };
 
 size_t ComputeVertexAttributeTypeSize(const VertexAttribute &attrib);
 
 // Warning: you should ensure binding really matches attrib.bindingIndex before using this function.
 size_t ComputeVertexAttributeStride(const VertexAttribute &attrib, const VertexBinding &binding);
 
 // Warning: you should ensure binding really matches attrib.bindingIndex before using this function.
--- a/gfx/angle/checkout/src/libANGLE/angletypes.cpp
+++ b/gfx/angle/checkout/src/libANGLE/angletypes.cpp
@@ -185,50 +185,54 @@ static void MinMax(int a, int b, int *mi
     }
     else
     {
         *minimum = b;
         *maximum = a;
     }
 }
 
+Rectangle Rectangle::removeReversal() const
+{
+    Rectangle unreversed = *this;
+    if (isReversedX())
+    {
+        unreversed.x     = unreversed.x + unreversed.width;
+        unreversed.width = -unreversed.width;
+    }
+    if (isReversedY())
+    {
+        unreversed.y      = unreversed.y + unreversed.height;
+        unreversed.height = -unreversed.height;
+    }
+    return unreversed;
+}
+
 bool ClipRectangle(const Rectangle &source, const Rectangle &clip, Rectangle *intersection)
 {
     int minSourceX, maxSourceX, minSourceY, maxSourceY;
     MinMax(source.x, source.x + source.width, &minSourceX, &maxSourceX);
     MinMax(source.y, source.y + source.height, &minSourceY, &maxSourceY);
 
     int minClipX, maxClipX, minClipY, maxClipY;
     MinMax(clip.x, clip.x + clip.width, &minClipX, &maxClipX);
     MinMax(clip.y, clip.y + clip.height, &minClipY, &maxClipY);
 
     if (minSourceX >= maxClipX || maxSourceX <= minClipX || minSourceY >= maxClipY || maxSourceY <= minClipY)
     {
-        if (intersection)
-        {
-            intersection->x = minSourceX;
-            intersection->y = maxSourceY;
-            intersection->width = maxSourceX - minSourceX;
-            intersection->height = maxSourceY - minSourceY;
-        }
-
         return false;
     }
-    else
+    if (intersection)
     {
-        if (intersection)
-        {
-            intersection->x = std::max(minSourceX, minClipX);
-            intersection->y = std::max(minSourceY, minClipY);
-            intersection->width  = std::min(maxSourceX, maxClipX) - std::max(minSourceX, minClipX);
-            intersection->height = std::min(maxSourceY, maxClipY) - std::max(minSourceY, minClipY);
-        }
-
-        return true;
+        intersection->x = std::max(minSourceX, minClipX);
+        intersection->y = std::max(minSourceY, minClipY);
+        intersection->width  = std::min(maxSourceX, maxClipX) - std::max(minSourceX, minClipX);
+        intersection->height = std::min(maxSourceY, maxClipY) - std::max(minSourceY, minClipY);
     }
+    return true;
 }
 
 bool Box::operator==(const Box &other) const
 {
     return (x == other.x && y == other.y && z == other.z &&
             width == other.width && height == other.height && depth == other.depth);
 }
 
--- a/gfx/angle/checkout/src/libANGLE/angletypes.h
+++ b/gfx/angle/checkout/src/libANGLE/angletypes.h
@@ -9,17 +9,17 @@
 #ifndef LIBANGLE_ANGLETYPES_H_
 #define LIBANGLE_ANGLETYPES_H_
 
 #include "common/Color.h"
 #include "common/bitset_utils.h"
 #include "common/vector_utils.h"
 #include "libANGLE/Constants.h"
 #include "libANGLE/Error.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 #include "libANGLE/RefCountObject.h"
 
 #include <stdint.h>
 
 #include <bitset>
 #include <map>
 #include <unordered_map>
 
@@ -50,16 +50,22 @@ struct Rectangle
     {
     }
 
     int x0() const { return x; }
     int y0() const { return y; }
     int x1() const { return x + width; }
     int y1() const { return y + height; }
 
+    bool isReversedX() const { return width < 0; }
+    bool isReversedY() const { return height < 0; }
+
+    // Returns a rectangle with the same area but with height and width guaranteed to be positive.
+    Rectangle removeReversal() const;
+
     int x;
     int y;
     int width;
     int height;
 };
 
 bool operator==(const Rectangle &a, const Rectangle &b);
 bool operator!=(const Rectangle &a, const Rectangle &b);
--- a/gfx/angle/checkout/src/libANGLE/entry_points_enum_autogen.h
+++ b/gfx/angle/checkout/src/libANGLE/entry_points_enum_autogen.h
@@ -1,10 +1,10 @@
 // GENERATED FILE - DO NOT EDIT.
-// Generated by generate_entry_points.py using data from gl.xml.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
 //
 // 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.
 //
 // entry_points_enum_autogen.h:
 //   Defines the GLES entry points enumeration.
 
@@ -23,25 +23,27 @@ enum class EntryPoint
     AttachShader,
     BeginQuery,
     BeginQueryEXT,
     BeginTransformFeedback,
     BindAttribLocation,
     BindBuffer,
     BindBufferBase,
     BindBufferRange,
+    BindFragmentInputLocationCHROMIUM,
     BindFramebuffer,
     BindFramebufferOES,
     BindImageTexture,
     BindProgramPipeline,
     BindRenderbuffer,
     BindRenderbufferOES,
     BindSampler,
     BindTexture,
     BindTransformFeedback,
+    BindUniformLocationCHROMIUM,
     BindVertexArray,
     BindVertexArrayOES,
     BindVertexBuffer,
     BlendColor,
     BlendEquation,
     BlendEquationSeparate,
     BlendFunc,
     BlendFuncSeparate,
@@ -66,36 +68,49 @@ enum class EntryPoint
     ClipPlanef,
     ClipPlanex,
     Color4f,
     Color4ub,
     Color4x,
     ColorMask,
     ColorPointer,
     CompileShader,
+    CompressedCopyTextureCHROMIUM,
     CompressedTexImage2D,
+    CompressedTexImage2DRobustANGLE,
     CompressedTexImage3D,
+    CompressedTexImage3DRobustANGLE,
     CompressedTexSubImage2D,
+    CompressedTexSubImage2DRobustANGLE,
     CompressedTexSubImage3D,
+    CompressedTexSubImage3DRobustANGLE,
     CopyBufferSubData,
+    CopySubTextureCHROMIUM,
     CopyTexImage2D,
     CopyTexSubImage2D,
     CopyTexSubImage3D,
+    CopyTextureCHROMIUM,
+    CoverFillPathCHROMIUM,
+    CoverFillPathInstancedCHROMIUM,
+    CoverStrokePathCHROMIUM,
+    CoverStrokePathInstancedCHROMIUM,
+    CoverageModulationCHROMIUM,
     CreateProgram,
     CreateShader,
     CreateShaderProgramv,
     CullFace,
     CurrentPaletteMatrixOES,
     DebugMessageCallbackKHR,
     DebugMessageControlKHR,
     DebugMessageInsertKHR,
     DeleteBuffers,
     DeleteFencesNV,
     DeleteFramebuffers,
     DeleteFramebuffersOES,
+    DeletePathsCHROMIUM,
     DeleteProgram,
     DeleteProgramPipelines,
     DeleteQueries,
     DeleteQueriesEXT,
     DeleteRenderbuffers,
     DeleteRenderbuffersOES,
     DeleteSamplers,
     DeleteShader,
@@ -153,138 +168,190 @@ enum class EntryPoint
     Fogx,
     Fogxv,
     FramebufferParameteri,
     FramebufferRenderbuffer,
     FramebufferRenderbufferOES,
     FramebufferTexture2D,
     FramebufferTexture2DOES,
     FramebufferTextureLayer,
+    FramebufferTextureMultiviewLayeredANGLE,
+    FramebufferTextureMultiviewSideBySideANGLE,
     FrontFace,
     Frustumf,
     Frustumx,
     GenBuffers,
     GenFencesNV,
     GenFramebuffers,
     GenFramebuffersOES,
+    GenPathsCHROMIUM,
     GenProgramPipelines,
     GenQueries,
     GenQueriesEXT,
     GenRenderbuffers,
     GenRenderbuffersOES,
     GenSamplers,
     GenTextures,
     GenTransformFeedbacks,
     GenVertexArrays,
     GenVertexArraysOES,
     GenerateMipmap,
     GenerateMipmapOES,
     GetActiveAttrib,
     GetActiveUniform,
     GetActiveUniformBlockName,
     GetActiveUniformBlockiv,
+    GetActiveUniformBlockivRobustANGLE,
     GetActiveUniformsiv,
     GetAttachedShaders,
     GetAttribLocation,
     GetBooleani_v,
+    GetBooleani_vRobustANGLE,
     GetBooleanv,
+    GetBooleanvRobustANGLE,
     GetBufferParameteri64v,
+    GetBufferParameteri64vRobustANGLE,
     GetBufferParameteriv,
+    GetBufferParameterivRobustANGLE,
     GetBufferPointerv,
     GetBufferPointervOES,
+    GetBufferPointervRobustANGLE,
     GetClipPlanef,
     GetClipPlanex,
     GetDebugMessageLogKHR,
     GetError,
     GetFenceivNV,
     GetFixedv,
     GetFloatv,
+    GetFloatvRobustANGLE,
     GetFragDataLocation,
     GetFramebufferAttachmentParameteriv,
     GetFramebufferAttachmentParameterivOES,
+    GetFramebufferAttachmentParameterivRobustANGLE,
     GetFramebufferParameteriv,
+    GetFramebufferParameterivRobustANGLE,
     GetGraphicsResetStatusEXT,
     GetInteger64i_v,
+    GetInteger64i_vRobustANGLE,
     GetInteger64v,
+    GetInteger64vRobustANGLE,
     GetIntegeri_v,
+    GetIntegeri_vRobustANGLE,
     GetIntegerv,
+    GetIntegervRobustANGLE,
     GetInternalformativ,
+    GetInternalformativRobustANGLE,
     GetLightfv,
     GetLightxv,
     GetMaterialfv,
     GetMaterialxv,
     GetMultisamplefv,
+    GetMultisamplefvRobustANGLE,
     GetObjectLabelKHR,
     GetObjectPtrLabelKHR,
+    GetPathParameterfvCHROMIUM,
+    GetPathParameterivCHROMIUM,
     GetPointerv,
     GetPointervKHR,
+    GetPointervRobustANGLERobustANGLE,
     GetProgramBinary,
     GetProgramBinaryOES,
     GetProgramInfoLog,
     GetProgramInterfaceiv,
+    GetProgramInterfaceivRobustANGLE,
     GetProgramPipelineInfoLog,
     GetProgramPipelineiv,
     GetProgramResourceIndex,
     GetProgramResourceLocation,
     GetProgramResourceName,
     GetProgramResourceiv,
     GetProgramiv,
+    GetProgramivRobustANGLE,
     GetQueryObjecti64vEXT,
+    GetQueryObjecti64vRobustANGLE,
     GetQueryObjectivEXT,
+    GetQueryObjectivRobustANGLE,
     GetQueryObjectui64vEXT,
+    GetQueryObjectui64vRobustANGLE,
     GetQueryObjectuiv,
     GetQueryObjectuivEXT,
+    GetQueryObjectuivRobustANGLE,
     GetQueryiv,
     GetQueryivEXT,
+    GetQueryivRobustANGLE,
     GetRenderbufferParameteriv,
     GetRenderbufferParameterivOES,
+    GetRenderbufferParameterivRobustANGLE,
+    GetSamplerParameterIivRobustANGLE,
+    GetSamplerParameterIuivRobustANGLE,
     GetSamplerParameterfv,
+    GetSamplerParameterfvRobustANGLE,
     GetSamplerParameteriv,
+    GetSamplerParameterivRobustANGLE,
     GetShaderInfoLog,
     GetShaderPrecisionFormat,
     GetShaderSource,
     GetShaderiv,
+    GetShaderivRobustANGLE,
     GetString,
     GetStringi,
     GetSynciv,
     GetTexEnvfv,
     GetTexEnviv,
     GetTexEnvxv,
     GetTexGenfvOES,
     GetTexGenivOES,
     GetTexGenxvOES,
     GetTexLevelParameterfv,
+    GetTexLevelParameterfvRobustANGLE,
     GetTexLevelParameteriv,
+    GetTexLevelParameterivRobustANGLE,
+    GetTexParameterIivRobustANGLE,
+    GetTexParameterIuivRobustANGLE,
     GetTexParameterfv,
+    GetTexParameterfvRobustANGLE,
     GetTexParameteriv,
+    GetTexParameterivRobustANGLE,
     GetTexParameterxv,
     GetTransformFeedbackVarying,
     GetTranslatedShaderSourceANGLE,
     GetUniformBlockIndex,
     GetUniformIndices,
     GetUniformLocation,
     GetUniformfv,
+    GetUniformfvRobustANGLE,
     GetUniformiv,
+    GetUniformivRobustANGLE,
     GetUniformuiv,
+    GetUniformuivRobustANGLE,
     GetVertexAttribIiv,
+    GetVertexAttribIivRobustANGLE,
     GetVertexAttribIuiv,
+    GetVertexAttribIuivRobustANGLE,
     GetVertexAttribPointerv,
+    GetVertexAttribPointervRobustANGLE,
     GetVertexAttribfv,
+    GetVertexAttribfvRobustANGLE,
     GetVertexAttribiv,
+    GetVertexAttribivRobustANGLE,
     GetnUniformfvEXT,
+    GetnUniformfvRobustANGLE,
     GetnUniformivEXT,
+    GetnUniformivRobustANGLE,
+    GetnUniformuivRobustANGLE,
     Hint,
     InsertEventMarkerEXT,
     InvalidateFramebuffer,
     InvalidateSubFramebuffer,
     IsBuffer,
     IsEnabled,
     IsFenceNV,
     IsFramebuffer,
     IsFramebufferOES,
+    IsPathCHROMIUM,
     IsProgram,
     IsProgramPipeline,
     IsQuery,
     IsQueryEXT,
     IsRenderbuffer,
     IsRenderbufferOES,
     IsSampler,
     IsShader,
@@ -312,30 +379,36 @@ enum class EntryPoint
     MapBufferOES,
     MapBufferRange,
     MapBufferRangeEXT,
     Materialf,
     Materialfv,
     Materialx,
     Materialxv,
     MatrixIndexPointerOES,
+    MatrixLoadIdentityCHROMIUM,
+    MatrixLoadfCHROMIUM,
     MatrixMode,
     MemoryBarrier,
     MemoryBarrierByRegion,
     MultMatrixf,
     MultMatrixx,
     MultiTexCoord4f,
     MultiTexCoord4x,
     Normal3f,
     Normal3x,
     NormalPointer,
     ObjectLabelKHR,
     ObjectPtrLabelKHR,
     Orthof,
     Orthox,
+    PathCommandsCHROMIUM,
+    PathParameterfCHROMIUM,
+    PathParameteriCHROMIUM,
+    PathStencilFuncCHROMIUM,
     PauseTransformFeedback,
     PixelStorei,
     PointParameterf,
     PointParameterfv,
     PointParameterx,
     PointParameterxv,
     PointSize,
     PointSizePointerOES,
@@ -343,16 +416,17 @@ enum class EntryPoint
     PolygonOffset,
     PolygonOffsetx,
     PopDebugGroupKHR,
     PopGroupMarkerEXT,
     PopMatrix,
     ProgramBinary,
     ProgramBinaryOES,
     ProgramParameteri,
+    ProgramPathFragmentInputGenCHROMIUM,
     ProgramUniform1f,
     ProgramUniform1fv,
     ProgramUniform1i,
     ProgramUniform1iv,
     ProgramUniform1ui,
     ProgramUniform1uiv,
     ProgramUniform2f,
     ProgramUniform2fv,
@@ -383,75 +457,98 @@ enum class EntryPoint
     ProgramUniformMatrix4x3fv,
     PushDebugGroupKHR,
     PushGroupMarkerEXT,
     PushMatrix,
     QueryCounterEXT,
     QueryMatrixxOES,
     ReadBuffer,
     ReadPixels,
+    ReadPixelsRobustANGLE,
     ReadnPixelsEXT,
+    ReadnPixelsRobustANGLE,
     ReleaseShaderCompiler,
     RenderbufferStorage,
     RenderbufferStorageMultisample,
     RenderbufferStorageMultisampleANGLE,
     RenderbufferStorageOES,
+    RequestExtensionANGLE,
     ResumeTransformFeedback,
     Rotatef,
     Rotatex,
     SampleCoverage,
     SampleCoveragex,
     SampleMaski,
+    SamplerParameterIivRobustANGLE,
+    SamplerParameterIuivRobustANGLE,
     SamplerParameterf,
     SamplerParameterfv,
+    SamplerParameterfvRobustANGLE,
     SamplerParameteri,
     SamplerParameteriv,
+    SamplerParameterivRobustANGLE,
     Scalef,
     Scalex,
     Scissor,
     SetFenceNV,
     ShadeModel,
     ShaderBinary,
     ShaderSource,
+    StencilFillPathCHROMIUM,
+    StencilFillPathInstancedCHROMIUM,
     StencilFunc,
     StencilFuncSeparate,
     StencilMask,
     StencilMaskSeparate,
     StencilOp,
     StencilOpSeparate,
+    StencilStrokePathCHROMIUM,
+    StencilStrokePathInstancedCHROMIUM,
+    StencilThenCoverFillPathCHROMIUM,
+    StencilThenCoverFillPathInstancedCHROMIUM,
+    StencilThenCoverStrokePathCHROMIUM,
+    StencilThenCoverStrokePathInstancedCHROMIUM,
     TestFenceNV,
     TexCoordPointer,
     TexEnvf,
     TexEnvfv,
     TexEnvi,
     TexEnviv,
     TexEnvx,
     TexEnvxv,
     TexGenfOES,
     TexGenfvOES,
     TexGeniOES,
     TexGenivOES,
     TexGenxOES,
     TexGenxvOES,
     TexImage2D,
+    TexImage2DRobustANGLE,
     TexImage3D,
+    TexImage3DRobustANGLE,
+    TexParameterIivRobustANGLE,
+    TexParameterIuivRobustANGLE,
     TexParameterf,
     TexParameterfv,
+    TexParameterfvRobustANGLE,
     TexParameteri,
     TexParameteriv,
+    TexParameterivRobustANGLE,
     TexParameterx,
     TexParameterxv,
     TexStorage1DEXT,
     TexStorage2D,
     TexStorage2DEXT,
     TexStorage2DMultisample,
     TexStorage3D,
     TexStorage3DEXT,
     TexSubImage2D,
+    TexSubImage2DRobustANGLE,
     TexSubImage3D,
+    TexSubImage3DRobustANGLE,
     TransformFeedbackVaryings,
     Translatef,
     Translatex,
     Uniform1f,
     Uniform1fv,
     Uniform1i,
     Uniform1iv,
     Uniform1ui,
--- a/gfx/angle/checkout/src/libANGLE/formatutils.cpp
+++ b/gfx/angle/checkout/src/libANGLE/formatutils.cpp
@@ -494,17 +494,17 @@ Format Format::Invalid()
 {
     static Format invalid(GL_NONE, GL_NONE);
     return invalid;
 }
 
 std::ostream &operator<<(std::ostream &os, const Format &fmt)
 {
     // TODO(ynovikov): return string representation when available
-    return FmtHexShort(os, fmt.info->sizedInternalFormat);
+    return FmtHex(os, fmt.info->sizedInternalFormat);
 }
 
 bool InternalFormat::operator==(const InternalFormat &other) const
 {
     // We assume all internal formats are unique if they have the same internal format and type
     return internalFormat == other.internalFormat && type == other.type;
 }
 
@@ -753,27 +753,27 @@ static InternalFormatInfoMap BuildIntern
     AddLUMAFormat(&map, GL_ALPHA16F_EXT,           true,  0, 16, GL_ALPHA,           GL_HALF_FLOAT_OES, GL_FLOAT,               RequireExtAndExt<&Extensions::textureStorage, &Extensions::textureHalfFloat>, NeverSupported, RequireESOrExt<3, 0, &Extensions::textureHalfFloatLinear>);
     AddLUMAFormat(&map, GL_LUMINANCE16F_EXT,       true, 16,  0, GL_LUMINANCE,       GL_HALF_FLOAT_OES, GL_FLOAT,               RequireExtAndExt<&Extensions::textureStorage, &Extensions::textureHalfFloat>, NeverSupported, RequireESOrExt<3, 0, &Extensions::textureHalfFloatLinear>);
     AddLUMAFormat(&map, GL_LUMINANCE_ALPHA16F_EXT, true, 16, 16, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES, GL_FLOAT,               RequireExtAndExt<&Extensions::textureStorage, &Extensions::textureHalfFloat>, NeverSupported, RequireESOrExt<3, 0, &Extensions::textureHalfFloatLinear>);
     AddLUMAFormat(&map, GL_ALPHA32F_EXT,           true,  0, 32, GL_ALPHA,           GL_FLOAT,          GL_FLOAT,               RequireExtAndExt<&Extensions::textureStorage, &Extensions::textureFloat>,     NeverSupported, RequireExt<&Extensions::textureFloatLinear>);
     AddLUMAFormat(&map, GL_LUMINANCE32F_EXT,       true, 32,  0, GL_LUMINANCE,       GL_FLOAT,          GL_FLOAT,               RequireExtAndExt<&Extensions::textureStorage, &Extensions::textureFloat>,     NeverSupported, RequireExt<&Extensions::textureFloatLinear>);
     AddLUMAFormat(&map, GL_LUMINANCE_ALPHA32F_EXT, true, 32, 32, GL_LUMINANCE_ALPHA, GL_FLOAT,          GL_FLOAT,               RequireExtAndExt<&Extensions::textureStorage, &Extensions::textureFloat>,     NeverSupported, RequireExt<&Extensions::textureFloatLinear>);
 
     // Compressed formats, From ES 3.0.1 spec, table 3.16
-    //                       | Internal format                             |W |H | BS |CC| Format | Type            | SRGB | Supported      | Renderable    | Filterable    |
-    AddCompressedFormat(&map, GL_COMPRESSED_R11_EAC,                        4, 4,  64, 1, GL_RED,  GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_SIGNED_R11_EAC,                 4, 4,  64, 1, GL_RED,  GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_RG11_EAC,                       4, 4, 128, 2, GL_RG,   GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_SIGNED_RG11_EAC,                4, 4, 128, 2, GL_RG,   GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_RGB8_ETC2,                      4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_SRGB8_ETC2,                     4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, true,  RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,  4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, true,  RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_RGBA8_ETC2_EAC,                 4, 4, 128, 4, GL_RGBA, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
-    AddCompressedFormat(&map, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,          4, 4, 128, 4, GL_RGBA, GL_UNSIGNED_BYTE, true,  RequireES<3, 0>, NeverSupported, AlwaysSupported);
+    //                       | Internal format                             |W |H | BS |CC| Format | Type            | SRGB | Supported                                                                       | Renderable    | Filterable    |
+    AddCompressedFormat(&map, GL_COMPRESSED_R11_EAC,                        4, 4,  64, 1, GL_RED,  GL_UNSIGNED_BYTE, false, RequireESOrExt<3, 0, &Extensions::compressedEACR11UnsignedTexture>,               NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_SIGNED_R11_EAC,                 4, 4,  64, 1, GL_RED,  GL_UNSIGNED_BYTE, false, RequireESOrExt<3, 0, &Extensions::compressedEACR11SignedTexture>,                 NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_RG11_EAC,                       4, 4, 128, 2, GL_RG,   GL_UNSIGNED_BYTE, false, RequireESOrExt<3, 0, &Extensions::compressedEACRG11UnsignedTexture>,              NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_SIGNED_RG11_EAC,                4, 4, 128, 2, GL_RG,   GL_UNSIGNED_BYTE, false, RequireESOrExt<3, 0, &Extensions::compressedEACRG11SignedTexture>,                NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_RGB8_ETC2,                      4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, false, RequireESOrExt<3, 0, &Extensions::compressedETC2RGB8Texture>,                     NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_SRGB8_ETC2,                     4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, true,  RequireESOrExt<3, 0, &Extensions::compressedETC2sRGB8Texture>,                    NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,  4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, false, RequireESOrExt<3, 0, &Extensions::compressedETC2PunchthroughARGB8Texture>,        NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, true,  RequireESOrExt<3, 0, &Extensions::compressedETC2PunchthroughAsRGB8AlphaTexture>, NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_RGBA8_ETC2_EAC,                 4, 4, 128, 4, GL_RGBA, GL_UNSIGNED_BYTE, false, RequireESOrExt<3, 0, &Extensions::compressedETC2RGBA8Texture>,                    NeverSupported, AlwaysSupported);
+    AddCompressedFormat(&map, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,          4, 4, 128, 4, GL_RGBA, GL_UNSIGNED_BYTE, true,  RequireESOrExt<3, 0, &Extensions::compressedETC2sRGB8Alpha8Texture>,              NeverSupported, AlwaysSupported);
 
     // From GL_EXT_texture_compression_dxt1
     //                       | Internal format                   |W |H | BS |CC| Format | Type            | SRGB | Supported                                         | Renderable    | Filterable    |
     AddCompressedFormat(&map, GL_COMPRESSED_RGB_S3TC_DXT1_EXT,    4, 4,  64, 3, GL_RGB,  GL_UNSIGNED_BYTE, false, RequireExt<&Extensions::textureCompressionDXT1>,    NeverSupported, AlwaysSupported);
     AddCompressedFormat(&map, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,   4, 4,  64, 4, GL_RGBA, GL_UNSIGNED_BYTE, false, RequireExt<&Extensions::textureCompressionDXT1>,    NeverSupported, AlwaysSupported);
 
     // From GL_ANGLE_texture_compression_dxt3
     AddCompressedFormat(&map, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE, 4, 4, 128, 4, GL_RGBA, GL_UNSIGNED_BYTE, false, RequireExt<&Extensions::textureCompressionDXT3>,    NeverSupported, AlwaysSupported);
@@ -845,33 +845,33 @@ static InternalFormatInfoMap BuildIntern
     AddRGBAFormat(&map, GL_RG16_EXT,         true, 16, 16,  0,  0, 0, GL_RG,           GL_UNSIGNED_SHORT,               GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureNorm16>,    RequireExt<&Extensions::textureNorm16>,    AlwaysSupported);
     AddRGBAFormat(&map, GL_RG16_SNORM_EXT,   true, 16, 16,  0,  0, 0, GL_RG,           GL_SHORT,                        GL_SIGNED_NORMALIZED,   false, RequireExt<&Extensions::textureNorm16>,    NeverSupported,                            AlwaysSupported);
     AddRGBAFormat(&map, GL_RGB16_EXT,        true, 16, 16, 16,  0, 0, GL_RGB,          GL_UNSIGNED_SHORT,               GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureNorm16>,    NeverSupported,                            AlwaysSupported);
     AddRGBAFormat(&map, GL_RGB16_SNORM_EXT,  true, 16, 16, 16,  0, 0, GL_RGB,          GL_SHORT,                        GL_SIGNED_NORMALIZED,   false, RequireExt<&Extensions::textureNorm16>,    NeverSupported,                            AlwaysSupported);
     AddRGBAFormat(&map, GL_RGBA16_EXT,       true, 16, 16, 16, 16, 0, GL_RGBA,         GL_UNSIGNED_SHORT,               GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureNorm16>,    RequireExt<&Extensions::textureNorm16>,    AlwaysSupported);
     AddRGBAFormat(&map, GL_RGBA16_SNORM_EXT, true, 16, 16, 16, 16, 0, GL_RGBA,         GL_SHORT,                        GL_SIGNED_NORMALIZED,   false, RequireExt<&Extensions::textureNorm16>,    NeverSupported,                            AlwaysSupported);
 
     // Unsized formats
-    //                 | Internal format    |sized | R | G | B | A |S | Format         | Type                           | Component type        | SRGB | Texture supported                           | Renderable                                  | Filterable    |
-    AddRGBAFormat(&map, GL_RED,              false,  8,  0,  0,  0, 0, GL_RED,          GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureRG>,           AlwaysSupported,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RED,              false,  8,  0,  0,  0, 0, GL_RED,          GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
-    AddRGBAFormat(&map, GL_RG,               false,  8,  8,  0,  0, 0, GL_RG,           GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureRG>,           AlwaysSupported,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RG,               false,  8,  8,  0,  0, 0, GL_RG,           GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
-    AddRGBAFormat(&map, GL_RGB,              false,  8,  8,  8,  0, 0, GL_RGB,          GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              AlwaysSupported,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RGB,              false,  5,  6,  5,  0, 0, GL_RGB,          GL_UNSIGNED_SHORT_5_6_5,         GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RGB,              false,  8,  8,  8,  0, 0, GL_RGB,          GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
-    AddRGBAFormat(&map, GL_RGBA,             false,  4,  4,  4,  4, 0, GL_RGBA,         GL_UNSIGNED_SHORT_4_4_4_4,       GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RGBA,             false,  5,  5,  5,  1, 0, GL_RGBA,         GL_UNSIGNED_SHORT_5_5_5_1,       GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RGBA,             false,  8,  8,  8,  8, 0, GL_RGBA,         GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RGBA,             false, 10, 10, 10,  2, 0, GL_RGBA,         GL_UNSIGNED_INT_2_10_10_10_REV,  GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
-    AddRGBAFormat(&map, GL_RGBA,             false,  8,  8,  8,  8, 0, GL_RGBA,         GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
-    AddRGBAFormat(&map, GL_SRGB,             false,  8,  8,  8,  0, 0, GL_RGB,          GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, true,  RequireExt<&Extensions::sRGB>,                NeverSupported,                               AlwaysSupported);
-    AddRGBAFormat(&map, GL_SRGB_ALPHA_EXT,   false,  8,  8,  8,  8, 0, GL_RGBA,         GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, true,  RequireExt<&Extensions::sRGB>,                RequireExt<&Extensions::sRGB>,                AlwaysSupported);
+    //                 | Internal format    |sized | R | G | B | A |S | Format           | Type                           | Component type        | SRGB | Texture supported                           | Renderable                                  | Filterable    |
+    AddRGBAFormat(&map, GL_RED,              false,  8,  0,  0,  0, 0, GL_RED,            GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureRG>,           AlwaysSupported,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RED,              false,  8,  0,  0,  0, 0, GL_RED,            GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
+    AddRGBAFormat(&map, GL_RG,               false,  8,  8,  0,  0, 0, GL_RG,             GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureRG>,           AlwaysSupported,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RG,               false,  8,  8,  0,  0, 0, GL_RG,             GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
+    AddRGBAFormat(&map, GL_RGB,              false,  8,  8,  8,  0, 0, GL_RGB,            GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              AlwaysSupported,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RGB,              false,  5,  6,  5,  0, 0, GL_RGB,            GL_UNSIGNED_SHORT_5_6_5,         GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RGB,              false,  8,  8,  8,  0, 0, GL_RGB,            GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
+    AddRGBAFormat(&map, GL_RGBA,             false,  4,  4,  4,  4, 0, GL_RGBA,           GL_UNSIGNED_SHORT_4_4_4_4,       GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RGBA,             false,  5,  5,  5,  1, 0, GL_RGBA,           GL_UNSIGNED_SHORT_5_5_5_1,       GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RGBA,             false,  8,  8,  8,  8, 0, GL_RGBA,           GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RGBA,             false, 10, 10, 10,  2, 0, GL_RGBA,           GL_UNSIGNED_INT_2_10_10_10_REV,  GL_UNSIGNED_NORMALIZED, false, RequireES<1, 0>,                              RequireES<1, 0>,                              AlwaysSupported);
+    AddRGBAFormat(&map, GL_RGBA,             false,  8,  8,  8,  8, 0, GL_RGBA,           GL_BYTE,                         GL_SIGNED_NORMALIZED,   false, NeverSupported,                               NeverSupported,                               NeverSupported );
+    AddRGBAFormat(&map, GL_SRGB,             false,  8,  8,  8,  0, 0, GL_SRGB,           GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, true,  RequireExt<&Extensions::sRGB>,                NeverSupported,                               AlwaysSupported);
+    AddRGBAFormat(&map, GL_SRGB_ALPHA_EXT,   false,  8,  8,  8,  8, 0, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, true,  RequireExt<&Extensions::sRGB>,                RequireExt<&Extensions::sRGB>,                AlwaysSupported);
 
-    AddRGBAFormat(&map, GL_BGRA_EXT,         false,  8,  8,  8,  8, 0, GL_BGRA_EXT,     GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureFormatBGRA8888>, RequireExt<&Extensions::textureFormatBGRA8888>, AlwaysSupported);
+    AddRGBAFormat(&map, GL_BGRA_EXT,         false,  8,  8,  8,  8, 0, GL_BGRA_EXT,       GL_UNSIGNED_BYTE,                GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureFormatBGRA8888>, RequireExt<&Extensions::textureFormatBGRA8888>, AlwaysSupported);
 
     // Unsized integer formats
     //                 |Internal format |sized | R | G | B | A |S | Format         | Type                          | Component type | SRGB | Texture        | Renderable    | Filterable   |
     AddRGBAFormat(&map, GL_RED_INTEGER,  false,  8,  0,  0,  0, 0, GL_RED_INTEGER,  GL_BYTE,                        GL_INT,          false, RequireES<3, 0>, NeverSupported, NeverSupported);
     AddRGBAFormat(&map, GL_RED_INTEGER,  false,  8,  0,  0,  0, 0, GL_RED_INTEGER,  GL_UNSIGNED_BYTE,               GL_UNSIGNED_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
     AddRGBAFormat(&map, GL_RED_INTEGER,  false, 16,  0,  0,  0, 0, GL_RED_INTEGER,  GL_SHORT,                       GL_INT,          false, RequireES<3, 0>, NeverSupported, NeverSupported);
     AddRGBAFormat(&map, GL_RED_INTEGER,  false, 16,  0,  0,  0, 0, GL_RED_INTEGER,  GL_UNSIGNED_SHORT,              GL_UNSIGNED_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
     AddRGBAFormat(&map, GL_RED_INTEGER,  false, 32,  0,  0,  0, 0, GL_RED_INTEGER,  GL_INT,                         GL_INT,          false, RequireES<3, 0>, NeverSupported, NeverSupported);
--- a/gfx/angle/checkout/src/libANGLE/queryutils.cpp
+++ b/gfx/angle/checkout/src/libANGLE/queryutils.cpp
@@ -475,16 +475,17 @@ GLint GetInputResourceProperty(const Pro
         case GL_LOCATION:
             return program->getAttributeLocation(attribute.name);
 
         case GL_REFERENCED_BY_VERTEX_SHADER:
             return 1;
 
         case GL_REFERENCED_BY_FRAGMENT_SHADER:
         case GL_REFERENCED_BY_COMPUTE_SHADER:
+        case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
             return 0;
 
         default:
             UNREACHABLE();
             return GL_INVALID_VALUE;
     }
 }
 
@@ -496,23 +497,22 @@ GLint GetOutputResourceProperty(const Pr
         case GL_TYPE:
         case GL_ARRAY_SIZE:
         case GL_NAME_LENGTH:
             return GetCommonVariableProperty(outputVariable, prop);
 
         case GL_LOCATION:
             return program->getFragDataLocation(outputVariable.name);
 
-        case GL_REFERENCED_BY_VERTEX_SHADER:
-            return 0;
-
         case GL_REFERENCED_BY_FRAGMENT_SHADER:
             return 1;
 
+        case GL_REFERENCED_BY_VERTEX_SHADER:
         case GL_REFERENCED_BY_COMPUTE_SHADER:
+        case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
             return 0;
 
         default:
             UNREACHABLE();
             return GL_INVALID_VALUE;
     }
 }
 
@@ -730,16 +730,19 @@ void GetShaderVariableBufferResourceProp
             params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Vertex));
             break;
         case GL_REFERENCED_BY_FRAGMENT_SHADER:
             params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Fragment));
             break;
         case GL_REFERENCED_BY_COMPUTE_SHADER:
             params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Compute));
             break;
+        case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
+            params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Geometry));
+            break;
         default:
             UNREACHABLE();
             break;
     }
 }
 
 void GetInterfaceBlockResourceProperty(const InterfaceBlock &block,
                                        GLenum pname,
@@ -1260,16 +1263,19 @@ void QueryFramebufferParameteriv(const F
             *params = framebuffer->getDefaultHeight();
             break;
         case GL_FRAMEBUFFER_DEFAULT_SAMPLES:
             *params = framebuffer->getDefaultSamples();
             break;
         case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
             *params = ConvertToGLBoolean(framebuffer->getDefaultFixedSampleLocations());
             break;
+        case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
+            *params = framebuffer->getDefaultLayers();
+            break;
         default:
             UNREACHABLE();
             break;
     }
 }
 
 Error QuerySynciv(const Sync *sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
 {
@@ -1366,16 +1372,19 @@ void SetFramebufferParameteri(Framebuffe
             framebuffer->setDefaultHeight(param);
             break;
         case GL_FRAMEBUFFER_DEFAULT_SAMPLES:
             framebuffer->setDefaultSamples(param);
             break;
         case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
             framebuffer->setDefaultFixedSampleLocations(ConvertToBool(param));
             break;
+        case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
+            framebuffer->setDefaultLayers(param);
+            break;
         default:
             UNREACHABLE();
             break;
     }
 }
 
 void SetProgramParameteri(Program *program, GLenum pname, GLint value)
 {
@@ -1428,16 +1437,19 @@ GLint GetUniformResourceProperty(const P
             return uniform.isActive(ShaderType::Vertex);
 
         case GL_REFERENCED_BY_FRAGMENT_SHADER:
             return uniform.isActive(ShaderType::Fragment);
 
         case GL_REFERENCED_BY_COMPUTE_SHADER:
             return uniform.isActive(ShaderType::Compute);
 
+        case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
+            return uniform.isActive(ShaderType::Geometry);
+
         case GL_ATOMIC_COUNTER_BUFFER_INDEX:
             return (uniform.isAtomicCounter() ? uniform.bufferIndex : -1);
 
         default:
             UNREACHABLE();
             return 0;
     }
 }
@@ -1471,16 +1483,19 @@ GLint GetBufferVariableResourceProperty(
             return bufferVariable.isActive(ShaderType::Vertex);
 
         case GL_REFERENCED_BY_FRAGMENT_SHADER:
             return bufferVariable.isActive(ShaderType::Fragment);
 
         case GL_REFERENCED_BY_COMPUTE_SHADER:
             return bufferVariable.isActive(ShaderType::Compute);
 
+        case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
+            return bufferVariable.isActive(ShaderType::Geometry);
+
         case GL_TOP_LEVEL_ARRAY_SIZE:
             return bufferVariable.topLevelArraySize;
 
         case GL_TOP_LEVEL_ARRAY_STRIDE:
             return bufferVariable.blockInfo.topLevelArrayStride;
 
         default:
             UNREACHABLE();
@@ -1683,16 +1698,59 @@ void QueryProgramInterfaceiv(const Progr
             *params = QueryProgramInterfaceMaxNumActiveVariables(program, programInterface);
             break;
 
         default:
             UNREACHABLE();
     }
 }
 
+ClientVertexArrayType ParamToVertexArrayType(GLenum param)
+{
+    switch (param)
+    {
+        case GL_VERTEX_ARRAY:
+        case GL_VERTEX_ARRAY_BUFFER_BINDING:
+        case GL_VERTEX_ARRAY_STRIDE:
+        case GL_VERTEX_ARRAY_SIZE:
+        case GL_VERTEX_ARRAY_TYPE:
+        case GL_VERTEX_ARRAY_POINTER:
+            return ClientVertexArrayType::Vertex;
+        case GL_NORMAL_ARRAY:
+        case GL_NORMAL_ARRAY_BUFFER_BINDING:
+        case GL_NORMAL_ARRAY_STRIDE:
+        case GL_NORMAL_ARRAY_TYPE:
+        case GL_NORMAL_ARRAY_POINTER:
+            return ClientVertexArrayType::Normal;
+        case GL_COLOR_ARRAY:
+        case GL_COLOR_ARRAY_BUFFER_BINDING:
+        case GL_COLOR_ARRAY_STRIDE:
+        case GL_COLOR_ARRAY_SIZE:
+        case GL_COLOR_ARRAY_TYPE:
+        case GL_COLOR_ARRAY_POINTER:
+            return ClientVertexArrayType::Color;
+        case GL_POINT_SIZE_ARRAY_OES:
+        case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
+        case GL_POINT_SIZE_ARRAY_STRIDE_OES:
+        case GL_POINT_SIZE_ARRAY_TYPE_OES:
+        case GL_POINT_SIZE_ARRAY_POINTER_OES:
+            return ClientVertexArrayType::PointSize;
+        case GL_TEXTURE_COORD_ARRAY:
+        case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
+        case GL_TEXTURE_COORD_ARRAY_STRIDE:
+        case GL_TEXTURE_COORD_ARRAY_SIZE:
+        case GL_TEXTURE_COORD_ARRAY_TYPE:
+        case GL_TEXTURE_COORD_ARRAY_POINTER:
+            return ClientVertexArrayType::TextureCoord;
+        default:
+            UNREACHABLE();
+            return ClientVertexArrayType::InvalidEnum;
+    }
+}
+
 }  // namespace gl
 
 namespace egl
 {
 
 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value)
 {
     ASSERT(config != nullptr);
@@ -1889,17 +1947,17 @@ void QuerySurfaceAttrib(const Surface *s
             break;
         case EGL_SWAP_BEHAVIOR:
             *value = surface->getSwapBehavior();
             break;
         case EGL_TEXTURE_FORMAT:
             // The EGL spec states that value is not written if the surface is not a pbuffer
             if (surface->getType() == EGL_PBUFFER_BIT)
             {
-                *value = surface->getTextureFormat();
+                *value = ToEGLenum(surface->getTextureFormat());
             }
             break;
         case EGL_TEXTURE_TARGET:
             // The EGL spec states that value is not written if the surface is not a pbuffer
             if (surface->getType() == EGL_PBUFFER_BIT)
             {
                 *value = surface->getTextureTarget();
             }
--- a/gfx/angle/checkout/src/libANGLE/queryutils.h
+++ b/gfx/angle/checkout/src/libANGLE/queryutils.h
@@ -6,17 +6,17 @@
 
 // queryutils.h: Utilities for querying values from GL objects
 
 #ifndef LIBANGLE_QUERYUTILS_H_
 #define LIBANGLE_QUERYUTILS_H_
 
 #include "angle_gl.h"
 #include "common/angleutils.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 #include <EGL/egl.h>
 
 namespace gl
 {
 class Buffer;
 class Context;
 class Error;
@@ -140,16 +140,18 @@ void QueryProgramResourceiv(const Progra
                             GLsizei *length,
                             GLint *params);
 
 void QueryProgramInterfaceiv(const Program *program,
                              GLenum programInterface,
                              GLenum pname,
                              GLint *params);
 
+ClientVertexArrayType ParamToVertexArrayType(GLenum param);
+
 }  // namespace gl
 
 namespace egl
 {
 struct Config;
 class Surface;
 
 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value);
--- a/gfx/angle/checkout/src/libANGLE/renderer/BufferImpl.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/BufferImpl.h
@@ -8,17 +8,17 @@
 
 #ifndef LIBANGLE_RENDERER_BUFFERIMPL_H_
 #define LIBANGLE_RENDERER_BUFFERIMPL_H_
 
 #include "common/angleutils.h"
 #include "common/mathutil.h"
 #include "libANGLE/Error.h"
 #include "libANGLE/Observer.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 #include <stdint.h>
 
 namespace gl
 {
 class BufferState;
 class Context;
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/FramebufferImpl.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/FramebufferImpl.h
@@ -27,17 +27,16 @@ namespace rx
 class DisplayImpl;
 
 class FramebufferImpl : angle::NonCopyable
 {
   public:
     explicit FramebufferImpl(const gl::FramebufferState &state) : mState(state) {}
     virtual ~FramebufferImpl() {}
     virtual void destroy(const gl::Context *context) {}
-    virtual void destroyDefault(const egl::Display *display) {}
 
     virtual gl::Error discard(const gl::Context *context,
                               size_t count,
                               const GLenum *attachments) = 0;
     virtual gl::Error invalidate(const gl::Context *context,
                                  size_t count,
                                  const GLenum *attachments) = 0;
     virtual gl::Error invalidateSub(const gl::Context *context,
@@ -78,17 +77,19 @@ class FramebufferImpl : angle::NonCopyab
                            GLbitfield mask,
                            GLenum filter) = 0;
 
     virtual bool checkStatus(const gl::Context *context) const = 0;
 
     virtual gl::Error syncState(const gl::Context *context,
                                 const gl::Framebuffer::DirtyBits &dirtyBits) = 0;
 
-    virtual gl::Error getSamplePosition(size_t index, GLfloat *xy) const = 0;
+    virtual gl::Error getSamplePosition(const gl::Context *context,
+                                        size_t index,
+                                        GLfloat *xy) const = 0;
 
     const gl::FramebufferState &getState() const { return mState; }
 
   protected:
     const gl::FramebufferState &mState;
 };
 }
 
--- a/gfx/angle/checkout/src/libANGLE/renderer/GLImplFactory.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/GLImplFactory.h
@@ -66,17 +66,17 @@ class GLImplFactory : angle::NonCopyable
 
     // Buffer creation
     virtual BufferImpl *createBuffer(const gl::BufferState &state) = 0;
 
     // Vertex Array creation
     virtual VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) = 0;
 
     // Query and Fence creation
-    virtual QueryImpl *createQuery(GLenum type) = 0;
+    virtual QueryImpl *createQuery(gl::QueryType type) = 0;
     virtual FenceNVImpl *createFenceNV() = 0;
     virtual SyncImpl *createSync()              = 0;
 
     // Transform Feedback creation
     virtual TransformFeedbackImpl *createTransformFeedback(
         const gl::TransformFeedbackState &state) = 0;
 
     // Sampler object creation
--- a/gfx/angle/checkout/src/libANGLE/renderer/QueryImpl.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/QueryImpl.h
@@ -4,41 +4,40 @@
 // found in the LICENSE file.
 //
 
 // QueryImpl.h: Defines the abstract rx::QueryImpl class.
 
 #ifndef LIBANGLE_RENDERER_QUERYIMPL_H_
 #define LIBANGLE_RENDERER_QUERYIMPL_H_
 
-#include "libANGLE/Error.h"
 
 #include "common/angleutils.h"
-
-#include <GLES2/gl2.h>
+#include "libANGLE/Error.h"
+#include "libANGLE/PackedEnums.h"
 
 namespace rx
 {
 
 class QueryImpl : angle::NonCopyable
 {
   public:
-    explicit QueryImpl(GLenum type) { mType = type; }
+    explicit QueryImpl(gl::QueryType type) { mType = type; }
     virtual ~QueryImpl() { }
 
     virtual gl::Error begin() = 0;
     virtual gl::Error end() = 0;
     virtual gl::Error queryCounter() = 0;
     virtual gl::Error getResult(GLint *params) = 0;
     virtual gl::Error getResult(GLuint *params) = 0;
     virtual gl::Error getResult(GLint64 *params) = 0;
     virtual gl::Error getResult(GLuint64 *params) = 0;
     virtual gl::Error isResultAvailable(bool *available) = 0;
 
-    GLenum getType() const { return mType;  }
+    gl::QueryType getType() const { return mType; }
 
   private:
-    GLenum mType;
+    gl::QueryType mType;
 };
 
 }
 
 #endif // LIBANGLE_RENDERER_QUERYIMPL_H_
--- a/gfx/angle/checkout/src/libANGLE/renderer/RenderTargetCache.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/RenderTargetCache.h
@@ -21,38 +21,40 @@ namespace rx
 
 template <typename RenderTargetT>
 class RenderTargetCache final : angle::NonCopyable
 {
   public:
     RenderTargetCache();
     ~RenderTargetCache();
 
+    // Update all RenderTargets from the dirty bits.
     gl::Error update(const gl::Context *context,
                      const gl::FramebufferState &state,
                      const gl::Framebuffer::DirtyBits &dirtyBits);
 
+    // Update individual RenderTargets.
+    gl::Error updateColorRenderTarget(const gl::Context *context,
+                                      const gl::FramebufferState &state,
+                                      size_t colorIndex);
+    gl::Error updateDepthStencilRenderTarget(const gl::Context *context,
+                                             const gl::FramebufferState &state);
+
     using RenderTargetArray = gl::AttachmentArray<RenderTargetT *>;
 
     const RenderTargetArray &getColors() const;
     RenderTargetT *getDepthStencil() const;
 
     RenderTargetT *getColorRead(const gl::FramebufferState &state) const;
 
   private:
     gl::Error updateCachedRenderTarget(const gl::Context *context,
                                        const gl::FramebufferAttachment *attachment,
                                        RenderTargetT **cachedRenderTarget);
 
-    gl::Error updateColorRenderTarget(const gl::Context *context,
-                                      const gl::FramebufferState &state,
-                                      size_t colorIndex);
-    gl::Error updateDepthStencilRenderTarget(const gl::Context *context,
-                                             const gl::FramebufferState &state);
-
     gl::AttachmentArray<RenderTargetT *> mColorRenderTargets;
     // We only support a single Depth/Stencil RenderTarget currently.
     RenderTargetT *mDepthStencilRenderTarget;
 };
 
 template <typename RenderTargetT>
 RenderTargetCache<RenderTargetT>::RenderTargetCache()
     : mColorRenderTargets{{nullptr}}, mDepthStencilRenderTarget(nullptr)
--- a/gfx/angle/checkout/src/libANGLE/renderer/ShaderImpl.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/ShaderImpl.h
@@ -16,23 +16,28 @@ namespace rx
 {
 
 class ShaderImpl : angle::NonCopyable
 {
   public:
     ShaderImpl(const gl::ShaderState &data) : mData(data) {}
     virtual ~ShaderImpl() { }
 
+    virtual void destroy(const gl::Context *context) {}
+
     // Returns additional sh::Compile options.
-    virtual ShCompileOptions prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+    virtual ShCompileOptions prepareSourceAndReturnOptions(const gl::Context *context,
+                                                           std::stringstream *sourceStream,
                                                            std::string *sourcePath) = 0;
     // Returns success for compiling on the driver. Returns success.
-    virtual bool postTranslateCompile(gl::Compiler *compiler, std::string *infoLog) = 0;
+    virtual bool postTranslateCompile(const gl::Context *context,
+                                      gl::Compiler *compiler,
+                                      std::string *infoLog) = 0;
 
-    virtual std::string getDebugInfo() const = 0;
+    virtual std::string getDebugInfo(const gl::Context *context) const = 0;
 
     const gl::ShaderState &getData() const { return mData; }
 
   protected:
     const gl::ShaderState &mData;
 };
 
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/SurfaceImpl.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/SurfaceImpl.h
@@ -51,18 +51,20 @@ class SurfaceImpl : public FramebufferAt
     virtual egl::Error swap(const gl::Context *context)                                  = 0;
     virtual egl::Error swapWithDamage(const gl::Context *context, EGLint *rects, EGLint n_rects);
     virtual egl::Error postSubBuffer(const gl::Context *context,
                                      EGLint x,
                                      EGLint y,
                                      EGLint width,
                                      EGLint height) = 0;
     virtual egl::Error querySurfacePointerANGLE(EGLint attribute, void **value) = 0;
-    virtual egl::Error bindTexImage(gl::Texture *texture, EGLint buffer) = 0;
-    virtual egl::Error releaseTexImage(EGLint buffer) = 0;
+    virtual egl::Error bindTexImage(const gl::Context *context,
+                                    gl::Texture *texture,
+                                    EGLint buffer)                                            = 0;
+    virtual egl::Error releaseTexImage(const gl::Context *context, EGLint buffer)             = 0;
     virtual egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) = 0;
     virtual void setSwapInterval(EGLint interval) = 0;
 
     // width and height can change with client window resizing
     virtual EGLint getWidth() const = 0;
     virtual EGLint getHeight() const = 0;
 
     virtual EGLint isPostSubBufferSupported() const = 0;
--- a/gfx/angle/checkout/src/libANGLE/renderer/TextureImpl.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/TextureImpl.h
@@ -135,17 +135,18 @@ class TextureImpl : public FramebufferAt
 
     virtual gl::Error generateMipmap(const gl::Context *context) = 0;
 
     virtual gl::Error setBaseLevel(const gl::Context *context, GLuint baseLevel) = 0;
 
     virtual gl::Error bindTexImage(const gl::Context *context, egl::Surface *surface) = 0;
     virtual gl::Error releaseTexImage(const gl::Context *context) = 0;
 
-    virtual void syncState(const gl::Texture::DirtyBits &dirtyBits) = 0;
+    virtual gl::Error syncState(const gl::Context *context,
+                                const gl::Texture::DirtyBits &dirtyBits) = 0;
 
   protected:
     const gl::TextureState &mState;
 };
 
 }
 
 #endif // LIBANGLE_RENDERER_TEXTUREIMPL_H_
--- a/gfx/angle/checkout/src/libANGLE/renderer/VertexArrayImpl.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/VertexArrayImpl.h
@@ -8,16 +8,27 @@
 
 #ifndef LIBANGLE_RENDERER_VERTEXARRAYIMPL_H_
 #define LIBANGLE_RENDERER_VERTEXARRAYIMPL_H_
 
 #include "common/angleutils.h"
 #include "libANGLE/Buffer.h"
 #include "libANGLE/VertexArray.h"
 
+// This is a helper X macro for iterating over all dirty attribs/bindings. Useful for dirty bits.
+static_assert(gl::MAX_VERTEX_ATTRIBS == 16, "Invalid max vertex attribs");
+static_assert(gl::MAX_VERTEX_ATTRIB_BINDINGS == 16, "Invalid max vertex bindings");
+#define ANGLE_VERTEX_INDEX_CASES(FUNC) \
+    FUNC(0)                            \
+    FUNC(1)                            \
+    FUNC(2)                            \
+    FUNC(3)                            \
+    FUNC(4)                            \
+    FUNC(5) FUNC(6) FUNC(7) FUNC(8) FUNC(9) FUNC(10) FUNC(11) FUNC(12) FUNC(13) FUNC(14) FUNC(15)
+
 namespace rx
 {
 class ContextImpl;
 
 class VertexArrayImpl : angle::NonCopyable
 {
   public:
     VertexArrayImpl(const gl::VertexArrayState &state) : mState(state) {}
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/DynamicHLSL.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/DynamicHLSL.cpp
@@ -449,20 +449,21 @@ void DynamicHLSL::generateVaryingLinkHLS
     hlslStream << "};\n";
 }
 
 void DynamicHLSL::generateShaderLinkHLSL(const gl::Context *context,
                                          const gl::ProgramState &programData,
                                          const ProgramD3DMetadata &programMetadata,
                                          const VaryingPacking &varyingPacking,
                                          const BuiltinVaryingsD3D &builtinsD3D,
-                                         std::string *pixelHLSL,
-                                         std::string *vertexHLSL) const
+                                         gl::ShaderMap<std::string> *shaderHLSL) const
 {
-    ASSERT(pixelHLSL->empty() && vertexHLSL->empty());
+    ASSERT(shaderHLSL);
+    ASSERT((*shaderHLSL)[gl::ShaderType::Vertex].empty() &&
+           (*shaderHLSL)[gl::ShaderType::Fragment].empty());
 
     const auto &data                   = context->getContextState();
     gl::Shader *vertexShaderGL         = programData.getAttachedShader(ShaderType::Vertex);
     gl::Shader *fragmentShaderGL       = programData.getAttachedShader(ShaderType::Fragment);
     const ShaderD3D *fragmentShader    = GetImplAs<ShaderD3D>(fragmentShaderGL);
     const int shaderModel              = mRenderer->getMajorShaderModel();
 
     // usesViewScale() isn't supported in the D3D9 renderer
@@ -839,18 +840,18 @@ void DynamicHLSL::generateShaderLinkHLSL
     }
 
     pixelStream << "\n"
                 << "    gl_main();\n"
                 << "\n"
                 << "    return generateOutput();\n"
                 << "}\n";
 
-    *vertexHLSL = vertexStream.str();
-    *pixelHLSL  = pixelStream.str();
+    (*shaderHLSL)[gl::ShaderType::Vertex]   = vertexStream.str();
+    (*shaderHLSL)[gl::ShaderType::Fragment] = pixelStream.str();
 }
 
 std::string DynamicHLSL::generateComputeShaderLinkHLSL(const gl::Context *context,
                                                        const gl::ProgramState &programData) const
 {
     gl::Shader *computeShaderGL = programData.getAttachedShader(ShaderType::Compute);
     std::stringstream computeStream;
     std::string translatedSource = computeShaderGL->getTranslatedSource(context);
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/DynamicHLSL.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/DynamicHLSL.h
@@ -134,18 +134,17 @@ class DynamicHLSL : angle::NonCopyable
         const std::vector<PixelShaderOutputVariable> &outputVariables,
         bool usesFragDepth,
         const std::vector<GLenum> &outputLayout) const;
     void generateShaderLinkHLSL(const gl::Context *context,
                                 const gl::ProgramState &programData,
                                 const ProgramD3DMetadata &programMetadata,
                                 const gl::VaryingPacking &varyingPacking,
                                 const BuiltinVaryingsD3D &builtinsD3D,
-                                std::string *pixelHLSL,
-                                std::string *vertexHLSL) const;
+                                gl::ShaderMap<std::string> *shaderHLSL) const;
     std::string generateComputeShaderLinkHLSL(const gl::Context *context,
                                               const gl::ProgramState &programData) const;
 
     std::string generateGeometryShaderPreamble(const gl::VaryingPacking &varyingPacking,
                                                const BuiltinVaryingsD3D &builtinsD3D,
                                                const bool hasANGLEMultiviewEnabled,
                                                const bool selectViewInVS) const;
 
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/ImageD3D.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/ImageD3D.h
@@ -9,23 +9,23 @@
 // surfaces or resources.
 
 #ifndef LIBANGLE_RENDERER_D3D_IMAGED3D_H_
 #define LIBANGLE_RENDERER_D3D_IMAGED3D_H_
 
 #include "common/debug.h"
 
 #include "libANGLE/Error.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 namespace gl
 {
 class Context;
 class Framebuffer;
-struct ImageIndex;
+class ImageIndex;
 struct Box;
 struct Extents;
 struct Offset;
 struct Rectangle;
 struct PixelUnpackState;
 }
 
 namespace rx
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.cpp
@@ -159,30 +159,70 @@ gl::PrimitiveType GetGeometryShaderTypeF
             return gl::PRIMITIVE_TRIANGLE_STRIP;
 
         default:
             UNREACHABLE();
             return gl::PRIMITIVE_TYPE_MAX;
     }
 }
 
-bool FindFlatInterpolationVarying(const std::vector<sh::Varying> &varyings)
+bool HasFlatInterpolationVarying(const std::vector<sh::Varying> &varyings)
 {
     // Note: this assumes nested structs can only be packed with one interpolation.
     for (const auto &varying : varyings)
     {
         if (varying.interpolation == sh::INTERPOLATION_FLAT)
         {
             return true;
         }
     }
 
     return false;
 }
 
+bool FindFlatInterpolationVaryingPerShader(const gl::Context *context, gl::Shader *shader)
+{
+    ASSERT(context && shader);
+    switch (shader->getType())
+    {
+        case gl::ShaderType::Vertex:
+            return HasFlatInterpolationVarying(shader->getOutputVaryings(context));
+        case gl::ShaderType::Fragment:
+            return HasFlatInterpolationVarying(shader->getInputVaryings(context));
+        case gl::ShaderType::Geometry:
+            return HasFlatInterpolationVarying(shader->getInputVaryings(context)) ||
+                   HasFlatInterpolationVarying(shader->getOutputVaryings(context));
+        default:
+            UNREACHABLE();
+            return false;
+    }
+}
+
+bool FindFlatInterpolationVarying(const gl::Context *context,
+                                  const gl::ShaderMap<gl::Shader *> &shaders)
+{
+    ASSERT(context);
+
+    for (gl::ShaderType shaderType : gl::kAllGraphicsShaderTypes)
+    {
+        gl::Shader *shader = shaders[shaderType];
+        if (!shader)
+        {
+            continue;
+        }
+
+        if (FindFlatInterpolationVaryingPerShader(context, shader))
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
 // Helper method to de-tranpose a matrix uniform for an API query.
 void GetMatrixUniform(GLint columns, GLint rows, GLfloat *dataOut, const GLfloat *source)
 {
     for (GLint col = 0; col < columns; ++col)
     {
         for (GLint row = 0; row < rows; ++row)
         {
             GLfloat *outptr      = dataOut + ((col * rows) + row);
@@ -283,39 +323,35 @@ bool UniformBlockInfo::getBlockMemberInf
     {
         *infoOut = sh::BlockMemberInfo::getDefaultBlockInfo();
         return false;
     }
 
     *infoOut = infoIter->second;
     return true;
 };
-
 }  // anonymous namespace
 
 // D3DUniform Implementation
 
 D3DUniform::D3DUniform(GLenum type,
                        HLSLRegisterType reg,
                        const std::string &nameIn,
                        const std::vector<unsigned int> &arraySizesIn,
                        bool defaultBlock)
     : typeInfo(gl::GetUniformTypeInfo(type)),
       name(nameIn),
       arraySizes(arraySizesIn),
-      vsData(nullptr),
-      psData(nullptr),
-      csData(nullptr),
+      mShaderData({}),
       regType(reg),
-      vsRegisterIndex(GL_INVALID_INDEX),
-      psRegisterIndex(GL_INVALID_INDEX),
-      csRegisterIndex(GL_INVALID_INDEX),
       registerCount(0),
       registerElement(0)
 {
+    mShaderRegisterIndexes.fill(GL_INVALID_INDEX);
+
     // We use data storage for default block uniforms to cache values that are sent to D3D during
     // rendering
     // Uniform blocks/buffers are treated separately by the Renderer (ES3 path only)
     if (defaultBlock)
     {
         // Use the row count as register count, will work for non-square matrices.
         registerCount = typeInfo.rowCount * getArraySizeProduct();
     }
@@ -348,41 +384,38 @@ bool D3DUniform::isSampler() const
     return typeInfo.isSampler;
 }
 
 bool D3DUniform::isImage() const
 {
     return typeInfo.isImageType;
 }
 
-bool D3DUniform::isReferencedByVertexShader() const
-{
-    return vsRegisterIndex != GL_INVALID_INDEX;
-}
-
-bool D3DUniform::isReferencedByFragmentShader() const
+bool D3DUniform::isReferencedByShader(gl::ShaderType shaderType) const
 {
-    return psRegisterIndex != GL_INVALID_INDEX;
-}
-
-bool D3DUniform::isReferencedByComputeShader() const
-{
-    return csRegisterIndex != GL_INVALID_INDEX;
+    return mShaderRegisterIndexes[shaderType] != GL_INVALID_INDEX;
 }
 
 const uint8_t *D3DUniform::firstNonNullData() const
 {
-    ASSERT(vsData || psData || csData || !mSamplerData.empty());
-
     if (!mSamplerData.empty())
     {
         return reinterpret_cast<const uint8_t *>(mSamplerData.data());
     }
 
-    return vsData ? vsData : (psData ? psData : csData);
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        if (mShaderData[shaderType])
+        {
+            return mShaderData[shaderType];
+        }
+    }
+
+    UNREACHABLE();
+    return nullptr;
 }
 
 // D3DVarying Implementation
 
 D3DVarying::D3DVarying() : semanticIndex(0), componentCount(0), outputSlot(0)
 {
 }
 
@@ -395,81 +428,78 @@ D3DVarying::D3DVarying(const std::string
       componentCount(componentCountIn),
       outputSlot(outputSlotIn)
 {
 }
 
 // ProgramD3DMetadata Implementation
 
 ProgramD3DMetadata::ProgramD3DMetadata(RendererD3D *renderer,
-                                       const ShaderD3D *vertexShader,
-                                       const ShaderD3D *fragmentShader)
+                                       const gl::ShaderMap<const ShaderD3D *> &attachedShaders)
     : mRendererMajorShaderModel(renderer->getMajorShaderModel()),
       mShaderModelSuffix(renderer->getShaderModelSuffix()),
       mUsesInstancedPointSpriteEmulation(
           renderer->getWorkarounds().useInstancedPointSpriteEmulation),
       mUsesViewScale(renderer->presentPathFastEnabled()),
-      mHasANGLEMultiviewEnabled(vertexShader->hasANGLEMultiviewEnabled()),
-      mUsesViewID(fragmentShader->usesViewID()),
       mCanSelectViewInVertexShader(renderer->canSelectViewInVertexShader()),
-      mVertexShader(vertexShader),
-      mFragmentShader(fragmentShader)
+      mAttachedShaders(attachedShaders)
 {
 }
 
 int ProgramD3DMetadata::getRendererMajorShaderModel() const
 {
     return mRendererMajorShaderModel;
 }
 
 bool ProgramD3DMetadata::usesBroadcast(const gl::ContextState &data) const
 {
-    return (mFragmentShader->usesFragColor() && mFragmentShader->usesMultipleRenderTargets() &&
+    return (mAttachedShaders[gl::ShaderType::Fragment]->usesFragColor() &&
+            mAttachedShaders[gl::ShaderType::Fragment]->usesMultipleRenderTargets() &&
             data.getClientMajorVersion() < 3);
 }
 
 bool ProgramD3DMetadata::usesFragDepth() const
 {
-    return mFragmentShader->usesFragDepth();
+    return mAttachedShaders[gl::ShaderType::Fragment]->usesFragDepth();
 }
 
 bool ProgramD3DMetadata::usesPointCoord() const
 {
-    return mFragmentShader->usesPointCoord();
+    return mAttachedShaders[gl::ShaderType::Fragment]->usesPointCoord();
 }
 
 bool ProgramD3DMetadata::usesFragCoord() const
 {
-    return mFragmentShader->usesFragCoord();
+    return mAttachedShaders[gl::ShaderType::Fragment]->usesFragCoord();
 }
 
 bool ProgramD3DMetadata::usesPointSize() const
 {
-    return mVertexShader->usesPointSize();
+    return mAttachedShaders[gl::ShaderType::Vertex]->usesPointSize();
 }
 
 bool ProgramD3DMetadata::usesInsertedPointCoordValue() const
 {
     return (!usesPointSize() || !mUsesInstancedPointSpriteEmulation) && usesPointCoord() &&
            mRendererMajorShaderModel >= 4;
 }
 
 bool ProgramD3DMetadata::usesViewScale() const
 {
     return mUsesViewScale;
 }
 
 bool ProgramD3DMetadata::hasANGLEMultiviewEnabled() const
 {
-    return mHasANGLEMultiviewEnabled;
+    return mAttachedShaders[gl::ShaderType::Vertex]->hasANGLEMultiviewEnabled();
 }
 
 bool ProgramD3DMetadata::usesViewID() const
 {
-    return mUsesViewID;
+    return mAttachedShaders[gl::ShaderType::Fragment]->usesViewID();
 }
 
 bool ProgramD3DMetadata::canSelectViewInVertexShader() const
 {
     return mCanSelectViewInVertexShader;
 }
 
 bool ProgramD3DMetadata::addsPointCoordToVertexShader() const
@@ -494,27 +524,27 @@ bool ProgramD3DMetadata::usesTransformFe
 
 bool ProgramD3DMetadata::usesSystemValuePointSize() const
 {
     return !mUsesInstancedPointSpriteEmulation && usesPointSize();
 }
 
 bool ProgramD3DMetadata::usesMultipleFragmentOuts() const
 {
-    return mFragmentShader->usesMultipleRenderTargets();
+    return mAttachedShaders[gl::ShaderType::Fragment]->usesMultipleRenderTargets();
 }
 
 GLint ProgramD3DMetadata::getMajorShaderVersion() const
 {
-    return mVertexShader->getData().getShaderVersion();
+    return mAttachedShaders[gl::ShaderType::Vertex]->getData().getShaderVersion();
 }
 
 const ShaderD3D *ProgramD3DMetadata::getFragmentShader() const
 {
-    return mFragmentShader;
+    return mAttachedShaders[gl::ShaderType::Fragment];
 }
 
 // ProgramD3D Implementation
 
 ProgramD3D::VertexExecutable::VertexExecutable(const gl::InputLayout &inputLayout,
                                                const Signature &signature,
                                                ShaderExecutableD3D *shaderExecutable)
     : mInputs(inputLayout), mSignature(signature), mShaderExecutable(shaderExecutable)
@@ -608,22 +638,17 @@ unsigned int ProgramD3D::mCurrentSerial 
 ProgramD3D::ProgramD3D(const gl::ProgramState &state, RendererD3D *renderer)
     : ProgramImpl(state),
       mRenderer(renderer),
       mDynamicHLSL(nullptr),
       mGeometryExecutables(gl::PRIMITIVE_TYPE_MAX),
       mComputeExecutable(nullptr),
       mUsesPointSize(false),
       mUsesFlatInterpolation(false),
-      mVertexUniformStorage(nullptr),
-      mFragmentUniformStorage(nullptr),
-      mComputeUniformStorage(nullptr),
-      mUsedVertexSamplerRange(0),
-      mUsedPixelSamplerRange(0),
-      mUsedComputeSamplerRange(0),
+      mUsedShaderSamplerRanges({}),
       mDirtySamplerMapping(true),
       mUsedComputeImageRange(0),
       mUsedComputeReadonlyImageRange(0),
       mSerial(issueSerial())
 {
     mDynamicHLSL = new DynamicHLSL(renderer);
 }
 
@@ -662,92 +687,53 @@ bool ProgramD3D::usesInstancedPointSprit
 }
 
 GLint ProgramD3D::getSamplerMapping(gl::ShaderType type,
                                     unsigned int samplerIndex,
                                     const gl::Caps &caps) const
 {
     GLint logicalTextureUnit = -1;
 
-    switch (type)
+    ASSERT(type != gl::ShaderType::InvalidEnum);
+
+    ASSERT(samplerIndex < caps.maxShaderTextureImageUnits[type]);
+
+    const auto &samplers = mShaderSamplers[type];
+    if (samplerIndex < samplers.size() && samplers[samplerIndex].active)
     {
-        case gl::ShaderType::Fragment:
-            ASSERT(samplerIndex < caps.maxTextureImageUnits);
-            if (samplerIndex < mSamplersPS.size() && mSamplersPS[samplerIndex].active)
-            {
-                logicalTextureUnit = mSamplersPS[samplerIndex].logicalTextureUnit;
-            }
-            break;
-        case gl::ShaderType::Vertex:
-            ASSERT(samplerIndex < caps.maxVertexTextureImageUnits);
-            if (samplerIndex < mSamplersVS.size() && mSamplersVS[samplerIndex].active)
-            {
-                logicalTextureUnit = mSamplersVS[samplerIndex].logicalTextureUnit;
-            }
-            break;
-        case gl::ShaderType::Compute:
-            ASSERT(samplerIndex < caps.maxComputeTextureImageUnits);
-            if (samplerIndex < mSamplersCS.size() && mSamplersCS[samplerIndex].active)
-            {
-                logicalTextureUnit = mSamplersCS[samplerIndex].logicalTextureUnit;
-            }
-            break;
-        default:
-            UNREACHABLE();
+        logicalTextureUnit = samplers[samplerIndex].logicalTextureUnit;
     }
 
     if (logicalTextureUnit >= 0 &&
         logicalTextureUnit < static_cast<GLint>(caps.maxCombinedTextureImageUnits))
     {
         return logicalTextureUnit;
     }
 
     return -1;
 }
 
 // Returns the texture type for a given Direct3D 9 sampler type and
 // index (0-15 for the pixel shader and 0-3 for the vertex shader).
 gl::TextureType ProgramD3D::getSamplerTextureType(gl::ShaderType type,
                                                   unsigned int samplerIndex) const
 {
-    switch (type)
-    {
-        case gl::ShaderType::Fragment:
-            ASSERT(samplerIndex < mSamplersPS.size());
-            ASSERT(mSamplersPS[samplerIndex].active);
-            return mSamplersPS[samplerIndex].textureType;
-        case gl::ShaderType::Vertex:
-            ASSERT(samplerIndex < mSamplersVS.size());
-            ASSERT(mSamplersVS[samplerIndex].active);
-            return mSamplersVS[samplerIndex].textureType;
-        case gl::ShaderType::Compute:
-            ASSERT(samplerIndex < mSamplersCS.size());
-            ASSERT(mSamplersCS[samplerIndex].active);
-            return mSamplersCS[samplerIndex].textureType;
-        default:
-            UNREACHABLE();
-            return gl::TextureType::InvalidEnum;
-    }
-
+    ASSERT(type != gl::ShaderType::InvalidEnum);
+
+    const auto &samplers = mShaderSamplers[type];
+    ASSERT(samplerIndex < samplers.size());
+    ASSERT(samplers[samplerIndex].active);
+
+    return samplers[samplerIndex].textureType;
 }
 
 GLuint ProgramD3D::getUsedSamplerRange(gl::ShaderType type) const
 {
-    switch (type)
-    {
-        case gl::ShaderType::Fragment:
-            return mUsedPixelSamplerRange;
-        case gl::ShaderType::Vertex:
-            return mUsedVertexSamplerRange;
-        case gl::ShaderType::Compute:
-            return mUsedComputeSamplerRange;
-        default:
-            UNREACHABLE();
-            return 0u;
-    }
+    ASSERT(type != gl::ShaderType::InvalidEnum);
+    return mUsedShaderSamplerRanges[type];
 }
 
 ProgramD3D::SamplerMapping ProgramD3D::updateSamplerMapping()
 {
     if (!mDirtySamplerMapping)
     {
         return SamplerMapping::WasClean;
     }
@@ -757,60 +743,34 @@ ProgramD3D::SamplerMapping ProgramD3D::u
     // Retrieve sampler uniform values
     for (const D3DUniform *d3dUniform : mD3DUniforms)
     {
         if (!d3dUniform->isSampler())
             continue;
 
         int count = d3dUniform->getArraySizeProduct();
 
-        if (d3dUniform->isReferencedByFragmentShader())
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
         {
-            unsigned int firstIndex = d3dUniform->psRegisterIndex;
-
+            if (!d3dUniform->isReferencedByShader(shaderType))
+            {
+                continue;
+            }
+
+            unsigned int firstIndex = d3dUniform->mShaderRegisterIndexes[shaderType];
+
+            std::vector<Sampler> &samplers = mShaderSamplers[shaderType];
             for (int i = 0; i < count; i++)
             {
                 unsigned int samplerIndex = firstIndex + i;
 
-                if (samplerIndex < mSamplersPS.size())
-                {
-                    ASSERT(mSamplersPS[samplerIndex].active);
-                    mSamplersPS[samplerIndex].logicalTextureUnit = d3dUniform->mSamplerData[i];
-                }
-            }
-        }
-
-        if (d3dUniform->isReferencedByVertexShader())
-        {
-            unsigned int firstIndex = d3dUniform->vsRegisterIndex;
-
-            for (int i = 0; i < count; i++)
-            {
-                unsigned int samplerIndex = firstIndex + i;
-
-                if (samplerIndex < mSamplersVS.size())
+                if (samplerIndex < samplers.size())
                 {
-                    ASSERT(mSamplersVS[samplerIndex].active);
-                    mSamplersVS[samplerIndex].logicalTextureUnit = d3dUniform->mSamplerData[i];
-                }
-            }
-        }
-
-        if (d3dUniform->isReferencedByComputeShader())
-        {
-            unsigned int firstIndex = d3dUniform->csRegisterIndex;
-
-            for (int i = 0; i < count; i++)
-            {
-                unsigned int samplerIndex = firstIndex + i;
-
-                if (samplerIndex < mSamplersCS.size())
-                {
-                    ASSERT(mSamplersCS[samplerIndex].active);
-                    mSamplersCS[samplerIndex].logicalTextureUnit = d3dUniform->mSamplerData[i];
+                    ASSERT(samplers[samplerIndex].active);
+                    samplers[samplerIndex].logicalTextureUnit = d3dUniform->mSamplerData[i];
                 }
             }
         }
     }
 
     return SamplerMapping::WasDirty;
 }
 
@@ -886,43 +846,29 @@ gl::LinkResult ProgramD3D::load(const gl
         return false;
     }
 
     for (int &index : mAttribLocationToD3DSemantic)
     {
         stream->readInt(&index);
     }
 
-    const unsigned int psSamplerCount = stream->readInt<unsigned int>();
-    for (unsigned int i = 0; i < psSamplerCount; ++i)
-    {
-        Sampler sampler;
-        stream->readBool(&sampler.active);
-        stream->readInt(&sampler.logicalTextureUnit);
-        stream->readEnum(&sampler.textureType);
-        mSamplersPS.push_back(sampler);
-    }
-    const unsigned int vsSamplerCount = stream->readInt<unsigned int>();
-    for (unsigned int i = 0; i < vsSamplerCount; ++i)
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
     {
-        Sampler sampler;
-        stream->readBool(&sampler.active);
-        stream->readInt(&sampler.logicalTextureUnit);
-        stream->readEnum(&sampler.textureType);
-        mSamplersVS.push_back(sampler);
-    }
-
-    const unsigned int csSamplerCount = stream->readInt<unsigned int>();
-    for (unsigned int i = 0; i < csSamplerCount; ++i)
-    {
-        Sampler sampler;
-        stream->readBool(&sampler.active);
-        stream->readInt(&sampler.logicalTextureUnit);
-        stream->readEnum(&sampler.textureType);
-        mSamplersCS.push_back(sampler);
+        const unsigned int samplerCount = stream->readInt<unsigned int>();
+        for (unsigned int i = 0; i < samplerCount; ++i)
+        {
+            Sampler sampler;
+            stream->readBool(&sampler.active);
+            stream->readInt(&sampler.logicalTextureUnit);
+            stream->readEnum(&sampler.textureType);
+            mShaderSamplers[shaderType].push_back(sampler);
+        }
+
+        stream->readInt(&mUsedShaderSamplerRanges[shaderType]);
     }
 
     const unsigned int csImageCount = stream->readInt<unsigned int>();
     for (unsigned int i = 0; i < csImageCount; ++i)
     {
         Image image;
         stream->readBool(&image.active);
         stream->readInt(&image.logicalImageUnit);
@@ -933,19 +879,16 @@ gl::LinkResult ProgramD3D::load(const gl
     for (unsigned int i = 0; i < csReadonlyImageCount; ++i)
     {
         Image image;
         stream->readBool(&image.active);
         stream->readInt(&image.logicalImageUnit);
         mReadonlyImagesCS.push_back(image);
     }
 
-    stream->readInt(&mUsedVertexSamplerRange);
-    stream->readInt(&mUsedPixelSamplerRange);
-    stream->readInt(&mUsedComputeSamplerRange);
     stream->readInt(&mUsedComputeImageRange);
     stream->readInt(&mUsedComputeReadonlyImageRange);
 
     const unsigned int uniformCount = stream->readInt<unsigned int>();
     if (stream->error())
     {
         infoLog << "Invalid program binary.";
         return false;
@@ -956,19 +899,20 @@ gl::LinkResult ProgramD3D::load(const gl
     for (unsigned int uniformIndex = 0; uniformIndex < uniformCount; uniformIndex++)
     {
         const gl::LinkedUniform &linkedUniform = linkedUniforms[uniformIndex];
 
         D3DUniform *d3dUniform =
             new D3DUniform(linkedUniform.type, HLSLRegisterType::None, linkedUniform.name,
                            linkedUniform.arraySizes, linkedUniform.isInDefaultBlock());
         stream->readInt<HLSLRegisterType>(&d3dUniform->regType);
-        stream->readInt(&d3dUniform->psRegisterIndex);
-        stream->readInt(&d3dUniform->vsRegisterIndex);
-        stream->readInt(&d3dUniform->csRegisterIndex);
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
+        {
+            stream->readInt(&d3dUniform->mShaderRegisterIndexes[shaderType]);
+        }
         stream->readInt(&d3dUniform->registerCount);
         stream->readInt(&d3dUniform->registerElement);
 
         mD3DUniforms.push_back(d3dUniform);
     }
 
     const unsigned int blockCount = stream->readInt<unsigned int>();
     if (stream->error())
@@ -976,40 +920,42 @@ gl::LinkResult ProgramD3D::load(const gl
         infoLog << "Invalid program binary.";
         return false;
     }
 
     ASSERT(mD3DUniformBlocks.empty());
     for (unsigned int blockIndex = 0; blockIndex < blockCount; ++blockIndex)
     {
         D3DUniformBlock uniformBlock;
-        stream->readInt(&uniformBlock.psRegisterIndex);
-        stream->readInt(&uniformBlock.vsRegisterIndex);
-        stream->readInt(&uniformBlock.csRegisterIndex);
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
+        {
+            stream->readInt(&uniformBlock.mShaderRegisterIndexes[shaderType]);
+        }
         mD3DUniformBlocks.push_back(uniformBlock);
     }
 
     const unsigned int streamOutVaryingCount = stream->readInt<unsigned int>();
     mStreamOutVaryings.resize(streamOutVaryingCount);
     for (unsigned int varyingIndex = 0; varyingIndex < streamOutVaryingCount; ++varyingIndex)
     {
         D3DVarying *varying = &mStreamOutVaryings[varyingIndex];
 
         stream->readString(&varying->semanticName);
         stream->readInt(&varying->semanticIndex);
         stream->readInt(&varying->componentCount);
         stream->readInt(&varying->outputSlot);
     }
 
-    stream->readString(&mVertexHLSL);
-    stream->readBytes(reinterpret_cast<unsigned char *>(&mVertexWorkarounds),
-                      sizeof(angle::CompilerWorkaroundsD3D));
-    stream->readString(&mPixelHLSL);
-    stream->readBytes(reinterpret_cast<unsigned char *>(&mPixelWorkarounds),
-                      sizeof(angle::CompilerWorkaroundsD3D));
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        stream->readString(&mShaderHLSL[shaderType]);
+        stream->readBytes(reinterpret_cast<unsigned char *>(&mShaderWorkarounds[shaderType]),
+                          sizeof(angle::CompilerWorkaroundsD3D));
+    }
+
     stream->readBool(&mUsesFragDepth);
     stream->readBool(&mHasANGLEMultiviewEnabled);
     stream->readBool(&mUsesViewID);
     stream->readBool(&mUsesPointSize);
     stream->readBool(&mUsesFlatInterpolation);
 
     const size_t pixelShaderKeySize = stream->readInt<unsigned int>();
     mPixelShaderKey.resize(pixelShaderKeySize);
@@ -1138,17 +1084,17 @@ gl::LinkResult ProgramD3D::load(const gl
         {
             infoLog << "Could not create compute shader.";
             return false;
         }
 
         mComputeExecutable.reset(computeExecutable);
     }
 
-    initializeUniformStorage();
+    initializeUniformStorage(mState.getLinkedShaderStages());
 
     dirtyAllUniforms();
 
     return true;
 }
 
 void ProgramD3D::save(const gl::Context *context, gl::BinaryOutputStream *stream)
 {
@@ -1161,95 +1107,84 @@ void ProgramD3D::save(const gl::Context 
 
     stream->writeInt(ANGLE_COMPILE_OPTIMIZATION_LEVEL);
 
     for (int d3dSemantic : mAttribLocationToD3DSemantic)
     {
         stream->writeInt(d3dSemantic);
     }
 
-    stream->writeInt(mSamplersPS.size());
-    for (unsigned int i = 0; i < mSamplersPS.size(); ++i)
-    {
-        stream->writeInt(mSamplersPS[i].active);
-        stream->writeInt(mSamplersPS[i].logicalTextureUnit);
-        stream->writeEnum(mSamplersPS[i].textureType);
-    }
-
-    stream->writeInt(mSamplersVS.size());
-    for (unsigned int i = 0; i < mSamplersVS.size(); ++i)
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
     {
-        stream->writeInt(mSamplersVS[i].active);
-        stream->writeInt(mSamplersVS[i].logicalTextureUnit);
-        stream->writeEnum(mSamplersVS[i].textureType);
-    }
-
-    stream->writeInt(mSamplersCS.size());
-    for (unsigned int i = 0; i < mSamplersCS.size(); ++i)
-    {
-        stream->writeInt(mSamplersCS[i].active);
-        stream->writeInt(mSamplersCS[i].logicalTextureUnit);
-        stream->writeEnum(mSamplersCS[i].textureType);
+        stream->writeInt(mShaderSamplers[shaderType].size());
+        for (unsigned int i = 0; i < mShaderSamplers[shaderType].size(); ++i)
+        {
+            stream->writeInt(mShaderSamplers[shaderType][i].active);
+            stream->writeInt(mShaderSamplers[shaderType][i].logicalTextureUnit);
+            stream->writeEnum(mShaderSamplers[shaderType][i].textureType);
+        }
+
+        stream->writeInt(mUsedShaderSamplerRanges[shaderType]);
     }
 
     stream->writeInt(mImagesCS.size());
     for (unsigned int i = 0; i < mImagesCS.size(); ++i)
     {
         stream->writeInt(mImagesCS[i].active);
         stream->writeInt(mImagesCS[i].logicalImageUnit);
     }
 
     stream->writeInt(mReadonlyImagesCS.size());
     for (unsigned int i = 0; i < mReadonlyImagesCS.size(); ++i)
     {
         stream->writeInt(mReadonlyImagesCS[i].active);
         stream->writeInt(mReadonlyImagesCS[i].logicalImageUnit);
     }
 
-    stream->writeInt(mUsedVertexSamplerRange);
-    stream->writeInt(mUsedPixelSamplerRange);
-    stream->writeInt(mUsedComputeSamplerRange);
     stream->writeInt(mUsedComputeImageRange);
     stream->writeInt(mUsedComputeReadonlyImageRange);
 
     stream->writeInt(mD3DUniforms.size());
     for (const D3DUniform *uniform : mD3DUniforms)
     {
         // Type, name and arraySize are redundant, so aren't stored in the binary.
         stream->writeInt(static_cast<unsigned int>(uniform->regType));
-        stream->writeIntOrNegOne(uniform->psRegisterIndex);
-        stream->writeIntOrNegOne(uniform->vsRegisterIndex);
-        stream->writeIntOrNegOne(uniform->csRegisterIndex);
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
+        {
+            stream->writeIntOrNegOne(uniform->mShaderRegisterIndexes[shaderType]);
+        }
         stream->writeInt(uniform->registerCount);
         stream->writeInt(uniform->registerElement);
     }
 
     stream->writeInt(mD3DUniformBlocks.size());
     for (const D3DUniformBlock &uniformBlock : mD3DUniformBlocks)
     {
-        stream->writeIntOrNegOne(uniformBlock.psRegisterIndex);
-        stream->writeIntOrNegOne(uniformBlock.vsRegisterIndex);
-        stream->writeIntOrNegOne(uniformBlock.csRegisterIndex);
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
+        {
+            stream->writeIntOrNegOne(uniformBlock.mShaderRegisterIndexes[shaderType]);
+        }
     }
 
     stream->writeInt(mStreamOutVaryings.size());
     for (const auto &varying : mStreamOutVaryings)
     {
         stream->writeString(varying.semanticName);
         stream->writeInt(varying.semanticIndex);
         stream->writeInt(varying.componentCount);
         stream->writeInt(varying.outputSlot);
     }
 
-    stream->writeString(mVertexHLSL);
-    stream->writeBytes(reinterpret_cast<unsigned char *>(&mVertexWorkarounds),
-                       sizeof(angle::CompilerWorkaroundsD3D));
-    stream->writeString(mPixelHLSL);
-    stream->writeBytes(reinterpret_cast<unsigned char *>(&mPixelWorkarounds),
-                       sizeof(angle::CompilerWorkaroundsD3D));
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        stream->writeString(mShaderHLSL[shaderType]);
+        stream->writeBytes(reinterpret_cast<unsigned char *>(&mShaderWorkarounds[shaderType]),
+                           sizeof(angle::CompilerWorkaroundsD3D));
+    }
+
     stream->writeInt(mUsesFragDepth);
     stream->writeInt(mHasANGLEMultiviewEnabled);
     stream->writeInt(mUsesViewID);
     stream->writeInt(mUsesPointSize);
     stream->writeInt(mUsesFlatInterpolation);
 
     const std::vector<PixelShaderOutputVariable> &pixelShaderKey = mPixelShaderKey;
     stream->writeInt(pixelShaderKey.size());
@@ -1344,28 +1279,29 @@ gl::Error ProgramD3D::getPixelExecutable
 {
     if (mCachedPixelExecutableIndex.valid())
     {
         *outExecutable = mPixelExecutables[mCachedPixelExecutableIndex.value()]->shaderExecutable();
         return gl::NoError();
     }
 
     std::string finalPixelHLSL = mDynamicHLSL->generatePixelShaderForOutputSignature(
-        mPixelHLSL, mPixelShaderKey, mUsesFragDepth, mPixelShaderOutputLayoutCache);
+        mShaderHLSL[gl::ShaderType::Fragment], mPixelShaderKey, mUsesFragDepth,
+        mPixelShaderOutputLayoutCache);
 
     // Generate new pixel executable
     ShaderExecutableD3D *pixelExecutable = nullptr;
 
     gl::InfoLog tempInfoLog;
     gl::InfoLog *currentInfoLog = infoLog ? infoLog : &tempInfoLog;
 
     ANGLE_TRY(mRenderer->compileToExecutable(
         *currentInfoLog, finalPixelHLSL, gl::ShaderType::Fragment, mStreamOutVaryings,
-        (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS), mPixelWorkarounds,
-        &pixelExecutable));
+        (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS),
+        mShaderWorkarounds[gl::ShaderType::Fragment], &pixelExecutable));
 
     if (pixelExecutable)
     {
         mPixelExecutables.push_back(std::unique_ptr<PixelExecutable>(
             new PixelExecutable(mPixelShaderOutputLayoutCache, pixelExecutable)));
         mCachedPixelExecutableIndex = mPixelExecutables.size() - 1;
     }
     else if (!infoLog)
@@ -1385,28 +1321,28 @@ gl::Error ProgramD3D::getVertexExecutabl
     {
         *outExectuable =
             mVertexExecutables[mCachedVertexExecutableIndex.value()]->shaderExecutable();
         return gl::NoError();
     }
 
     // Generate new dynamic layout with attribute conversions
     std::string finalVertexHLSL = mDynamicHLSL->generateVertexShaderForInputLayout(
-        mVertexHLSL, mCachedInputLayout, mState.getAttributes());
+        mShaderHLSL[gl::ShaderType::Vertex], mCachedInputLayout, mState.getAttributes());
 
     // Generate new vertex executable
     ShaderExecutableD3D *vertexExecutable = nullptr;
 
     gl::InfoLog tempInfoLog;
     gl::InfoLog *currentInfoLog = infoLog ? infoLog : &tempInfoLog;
 
     ANGLE_TRY(mRenderer->compileToExecutable(
         *currentInfoLog, finalVertexHLSL, gl::ShaderType::Vertex, mStreamOutVaryings,
-        (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS), mVertexWorkarounds,
-        &vertexExecutable));
+        (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS),
+        mShaderWorkarounds[gl::ShaderType::Vertex], &vertexExecutable));
 
     if (vertexExecutable)
     {
         mVertexExecutables.push_back(std::unique_ptr<VertexExecutable>(
             new VertexExecutable(mCachedInputLayout, mCachedVertexSignature, vertexExecutable)));
         mCachedVertexExecutableIndex = mVertexExecutables.size() - 1;
     }
     else if (!infoLog)
@@ -1687,17 +1623,18 @@ gl::LinkResult ProgramD3D::link(const gl
 {
     const auto &data = context->getContextState();
 
     reset();
 
     gl::Shader *computeShader = mState.getAttachedShader(gl::ShaderType::Compute);
     if (computeShader)
     {
-        mSamplersCS.resize(data.getCaps().maxComputeTextureImageUnits);
+        mShaderSamplers[gl::ShaderType::Compute].resize(
+            data.getCaps().maxShaderTextureImageUnits[gl::ShaderType::Compute]);
         mImagesCS.resize(data.getCaps().maxImageUnits);
         mReadonlyImagesCS.resize(data.getCaps().maxImageUnits);
 
         mShaderUniformsDirty.set(gl::ShaderType::Compute);
         defineUniformsAndAssignRegisters(context);
 
         gl::LinkResult result = compileComputeExecutable(context, infoLog);
         if (result.isError())
@@ -1708,67 +1645,65 @@ gl::LinkResult ProgramD3D::link(const gl
         else if (!result.getResult())
         {
             infoLog << "Failed to create D3D compute shader.";
             return result;
         }
     }
     else
     {
-        gl::Shader *vertexShader   = mState.getAttachedShader(gl::ShaderType::Vertex);
-        gl::Shader *fragmentShader = mState.getAttachedShader(gl::ShaderType::Fragment);
-
-        const ShaderD3D *vertexShaderD3D   = GetImplAs<ShaderD3D>(vertexShader);
-        const ShaderD3D *fragmentShaderD3D = GetImplAs<ShaderD3D>(fragmentShader);
-
-        mSamplersVS.resize(data.getCaps().maxVertexTextureImageUnits);
-        mSamplersPS.resize(data.getCaps().maxTextureImageUnits);
-
-        vertexShaderD3D->generateWorkarounds(&mVertexWorkarounds);
-        fragmentShaderD3D->generateWorkarounds(&mPixelWorkarounds);
+        gl::ShaderMap<const ShaderD3D *> shadersD3D = {};
+        for (gl::ShaderType shaderType : gl::kAllGraphicsShaderTypes)
+        {
+            if (mState.getAttachedShader(shaderType))
+            {
+                shadersD3D[shaderType] = GetImplAs<ShaderD3D>(mState.getAttachedShader(shaderType));
+
+                mShaderSamplers[shaderType].resize(
+                    data.getCaps().maxShaderTextureImageUnits[shaderType]);
+
+                shadersD3D[shaderType]->generateWorkarounds(&mShaderWorkarounds[shaderType]);
+
+                mShaderUniformsDirty.set(shaderType);
+            }
+        }
 
         if (mRenderer->getNativeLimitations().noFrontFacingSupport)
         {
-            if (fragmentShaderD3D->usesFrontFacing())
+            if (shadersD3D[gl::ShaderType::Fragment]->usesFrontFacing())
             {
                 infoLog << "The current renderer doesn't support gl_FrontFacing";
                 return false;
             }
         }
 
-        ProgramD3DMetadata metadata(mRenderer, vertexShaderD3D, fragmentShaderD3D);
+        ProgramD3DMetadata metadata(mRenderer, shadersD3D);
         BuiltinVaryingsD3D builtins(metadata, resources.varyingPacking);
 
         mDynamicHLSL->generateShaderLinkHLSL(context, mState, metadata, resources.varyingPacking,
-                                             builtins, &mPixelHLSL, &mVertexHLSL);
-
-        mUsesPointSize = vertexShaderD3D->usesPointSize();
+                                             builtins, &mShaderHLSL);
+
+        mUsesPointSize = shadersD3D[gl::ShaderType::Vertex]->usesPointSize();
         mDynamicHLSL->getPixelShaderOutputKey(data, mState, metadata, &mPixelShaderKey);
         mUsesFragDepth            = metadata.usesFragDepth();
         mUsesViewID               = metadata.usesViewID();
         mHasANGLEMultiviewEnabled = metadata.hasANGLEMultiviewEnabled();
 
         // Cache if we use flat shading
-        mUsesFlatInterpolation =
-            (FindFlatInterpolationVarying(fragmentShader->getInputVaryings(context)) ||
-             FindFlatInterpolationVarying(vertexShader->getOutputVaryings(context)));
+        mUsesFlatInterpolation = FindFlatInterpolationVarying(context, mState.getAttachedShaders());
 
         if (mRenderer->getMajorShaderModel() >= 4)
         {
             mGeometryShaderPreamble = mDynamicHLSL->generateGeometryShaderPreamble(
                 resources.varyingPacking, builtins, mHasANGLEMultiviewEnabled,
                 metadata.canSelectViewInVertexShader());
         }
 
         initAttribLocationsToD3DSemantic(context);
 
-        // TODO(jiawei.shao@intel.com): set geometry uniforms dirty if user-defined geometry shader
-        // exists. Tracking bug: http://anglebug.com/1941
-        mShaderUniformsDirty.set(gl::ShaderType::Vertex);
-        mShaderUniformsDirty.set(gl::ShaderType::Fragment);
         defineUniformsAndAssignRegisters(context);
 
         gatherTransformFeedbackVaryings(resources.varyingPacking, builtins[gl::ShaderType::Vertex]);
 
         gl::LinkResult result = compileProgramExecutables(context, infoLog);
         if (result.isError())
         {
             infoLog << result.getError().getMessage();
@@ -1797,182 +1732,147 @@ void ProgramD3D::initializeUniformBlocks
     if (mState.getUniformBlocks().empty())
     {
         return;
     }
 
     ASSERT(mD3DUniformBlocks.empty());
 
     // Assign registers and update sizes.
-    const ShaderD3D *vertexShaderD3D =
-        SafeGetImplAs<ShaderD3D>(mState.getAttachedShader(gl::ShaderType::Vertex));
-    const ShaderD3D *fragmentShaderD3D =
-        SafeGetImplAs<ShaderD3D>(mState.getAttachedShader(gl::ShaderType::Fragment));
-    const ShaderD3D *computeShaderD3D =
-        SafeGetImplAs<ShaderD3D>(mState.getAttachedShader(gl::ShaderType::Compute));
+    gl::ShaderMap<const ShaderD3D *> shadersD3D = {};
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        shadersD3D[shaderType] = SafeGetImplAs<ShaderD3D>(mState.getAttachedShader(shaderType));
+    }
 
     for (const gl::InterfaceBlock &uniformBlock : mState.getUniformBlocks())
     {
         unsigned int uniformBlockElement = uniformBlock.isArray ? uniformBlock.arrayElement : 0;
 
         D3DUniformBlock d3dUniformBlock;
 
-        if (uniformBlock.isActive(gl::ShaderType::Vertex))
-        {
-            ASSERT(vertexShaderD3D != nullptr);
-            unsigned int baseRegister = vertexShaderD3D->getUniformBlockRegister(uniformBlock.name);
-            d3dUniformBlock.vsRegisterIndex = baseRegister + uniformBlockElement;
-        }
-
-        if (uniformBlock.isActive(gl::ShaderType::Fragment))
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
         {
-            ASSERT(fragmentShaderD3D != nullptr);
-            unsigned int baseRegister =
-                fragmentShaderD3D->getUniformBlockRegister(uniformBlock.name);
-            d3dUniformBlock.psRegisterIndex = baseRegister + uniformBlockElement;
-        }
-
-        if (uniformBlock.isActive(gl::ShaderType::Compute))
-        {
-            ASSERT(computeShaderD3D != nullptr);
-            unsigned int baseRegister =
-                computeShaderD3D->getUniformBlockRegister(uniformBlock.name);
-            d3dUniformBlock.csRegisterIndex = baseRegister + uniformBlockElement;
+            if (uniformBlock.isActive(shaderType))
+            {
+                ASSERT(shadersD3D[shaderType]);
+                unsigned int baseRegister =
+                    shadersD3D[shaderType]->getUniformBlockRegister(uniformBlock.name);
+                d3dUniformBlock.mShaderRegisterIndexes[shaderType] =
+                    baseRegister + uniformBlockElement;
+            }
         }
 
         mD3DUniformBlocks.push_back(d3dUniformBlock);
     }
 }
 
-void ProgramD3D::initializeUniformStorage()
+void ProgramD3D::initializeUniformStorage(const gl::ShaderBitSet &availableShaderStages)
 {
     // Compute total default block size
-    unsigned int vertexRegisters   = 0;
-    unsigned int fragmentRegisters = 0;
-    unsigned int computeRegisters  = 0;
+    gl::ShaderMap<unsigned int> shaderRegisters = {};
     for (const D3DUniform *d3dUniform : mD3DUniforms)
     {
-        if (!d3dUniform->isSampler())
+        if (d3dUniform->isSampler())
         {
-            if (d3dUniform->isReferencedByVertexShader())
+            continue;
+        }
+
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
+        {
+            if (d3dUniform->isReferencedByShader(shaderType))
             {
-                vertexRegisters = std::max(vertexRegisters,
-                                           d3dUniform->vsRegisterIndex + d3dUniform->registerCount);
-            }
-            if (d3dUniform->isReferencedByFragmentShader())
-            {
-                fragmentRegisters = std::max(
-                    fragmentRegisters, d3dUniform->psRegisterIndex + d3dUniform->registerCount);
-            }
-            if (d3dUniform->isReferencedByComputeShader())
-            {
-                computeRegisters = std::max(
-                    computeRegisters, d3dUniform->csRegisterIndex + d3dUniform->registerCount);
+                ASSERT(availableShaderStages[shaderType]);
+                shaderRegisters[shaderType] = std::max(
+                    shaderRegisters[shaderType],
+                    d3dUniform->mShaderRegisterIndexes[shaderType] + d3dUniform->registerCount);
             }
         }
     }
 
-    mVertexUniformStorage =
-        std::unique_ptr<UniformStorageD3D>(mRenderer->createUniformStorage(vertexRegisters * 16u));
-    mFragmentUniformStorage = std::unique_ptr<UniformStorageD3D>(
-        mRenderer->createUniformStorage(fragmentRegisters * 16u));
-    mComputeUniformStorage =
-        std::unique_ptr<UniformStorageD3D>(mRenderer->createUniformStorage(computeRegisters * 16u));
+    // We only reset uniform storages for the shader stages available in the program (attached
+    // shaders in ProgramD3D::link() and linkedShaderStages in ProgramD3D::load()).
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        if (availableShaderStages[shaderType])
+        {
+            mShaderUniformStorages[shaderType].reset(
+                mRenderer->createUniformStorage(shaderRegisters[shaderType] * 16u));
+        }
+    }
 
     // Iterate the uniforms again to assign data pointers to default block uniforms.
     for (D3DUniform *d3dUniform : mD3DUniforms)
     {
         if (d3dUniform->isSampler())
         {
             d3dUniform->mSamplerData.resize(d3dUniform->getArraySizeProduct(), 0);
             continue;
         }
 
-        if (d3dUniform->isReferencedByVertexShader())
-        {
-            d3dUniform->vsData = mVertexUniformStorage->getDataPointer(d3dUniform->vsRegisterIndex,
-                                                                       d3dUniform->registerElement);
-        }
-
-        if (d3dUniform->isReferencedByFragmentShader())
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
         {
-            d3dUniform->psData = mFragmentUniformStorage->getDataPointer(
-                d3dUniform->psRegisterIndex, d3dUniform->registerElement);
-        }
-
-        if (d3dUniform->isReferencedByComputeShader())
-        {
-            d3dUniform->csData = mComputeUniformStorage->getDataPointer(
-                d3dUniform->csRegisterIndex, d3dUniform->registerElement);
+            if (d3dUniform->isReferencedByShader(shaderType))
+            {
+                d3dUniform->mShaderData[shaderType] =
+                    mShaderUniformStorages[shaderType]->getDataPointer(
+                        d3dUniform->mShaderRegisterIndexes[shaderType],
+                        d3dUniform->registerElement);
+            }
         }
     }
 }
 
-void ProgramD3D::updateUniformBufferCache(const gl::Caps &caps,
-                                          unsigned int reservedVertex,
-                                          unsigned int reservedFragment)
+void ProgramD3D::updateUniformBufferCache(
+    const gl::Caps &caps,
+    const gl::ShaderMap<unsigned int> &reservedShaderRegisterIndexes)
 {
     if (mState.getUniformBlocks().empty())
     {
         return;
     }
 
-    mVertexUBOCache.clear();
-    mFragmentUBOCache.clear();
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        mShaderUBOCaches[shaderType].clear();
+    }
 
     for (unsigned int uniformBlockIndex = 0; uniformBlockIndex < mD3DUniformBlocks.size();
          uniformBlockIndex++)
     {
         const D3DUniformBlock &uniformBlock = mD3DUniformBlocks[uniformBlockIndex];
         GLuint blockBinding                 = mState.getUniformBlockBinding(uniformBlockIndex);
 
         // Unnecessary to apply an unreferenced standard or shared UBO
-        if (!uniformBlock.vertexActive() && !uniformBlock.fragmentActive())
-        {
-            continue;
-        }
-
-        if (uniformBlock.vertexActive())
+        for (gl::ShaderType shaderType : gl::AllShaderTypes())
         {
-            unsigned int registerIndex = uniformBlock.vsRegisterIndex - reservedVertex;
-            ASSERT(registerIndex < caps.maxVertexUniformBlocks);
-
-            if (mVertexUBOCache.size() <= registerIndex)
+            if (!uniformBlock.activeInShader(shaderType))
             {
-                mVertexUBOCache.resize(registerIndex + 1, -1);
+                continue;
             }
 
-            ASSERT(mVertexUBOCache[registerIndex] == -1);
-            mVertexUBOCache[registerIndex] = blockBinding;
-        }
-
-        if (uniformBlock.fragmentActive())
-        {
-            unsigned int registerIndex = uniformBlock.psRegisterIndex - reservedFragment;
-            ASSERT(registerIndex < caps.maxFragmentUniformBlocks);
-
-            if (mFragmentUBOCache.size() <= registerIndex)
+            unsigned int registerIndex = uniformBlock.mShaderRegisterIndexes[shaderType] -
+                                         reservedShaderRegisterIndexes[shaderType];
+            ASSERT(registerIndex < caps.maxShaderUniformBlocks[shaderType]);
+
+            std::vector<int> &shaderUBOcache = mShaderUBOCaches[shaderType];
+            if (shaderUBOcache.size() <= registerIndex)
             {
-                mFragmentUBOCache.resize(registerIndex + 1, -1);
+                shaderUBOcache.resize(registerIndex + 1, -1);
             }
 
-            ASSERT(mFragmentUBOCache[registerIndex] == -1);
-            mFragmentUBOCache[registerIndex] = blockBinding;
+            ASSERT(shaderUBOcache[registerIndex] == -1);
+            shaderUBOcache[registerIndex] = blockBinding;
         }
     }
 }
 
-const std::vector<GLint> &ProgramD3D::getVertexUniformBufferCache() const
+const std::vector<GLint> &ProgramD3D::getShaderUniformBufferCache(gl::ShaderType shaderType) const
 {
-    return mVertexUBOCache;
-}
-
-const std::vector<GLint> &ProgramD3D::getFragmentUniformBufferCache() const
-{
-    return mFragmentUBOCache;
+    return mShaderUBOCaches[shaderType];
 }
 
 void ProgramD3D::dirtyAllUniforms()
 {
     mShaderUniformsDirty = mState.getLinkedShaderStages();
 }
 
 void ProgramD3D::markUniformsClean()
@@ -2115,28 +2015,32 @@ void ProgramD3D::setUniform4uiv(GLint lo
 void ProgramD3D::setUniformBlockBinding(GLuint uniformBlockIndex, GLuint /*uniformBlockBinding*/)
 {
     mRenderer->onDirtyUniformBlockBinding(uniformBlockIndex);
 }
 
 void ProgramD3D::defineUniformsAndAssignRegisters(const gl::Context *context)
 {
     D3DUniformMap uniformMap;
+
+    gl::ShaderBitSet attachedShaders;
     for (gl::ShaderType shaderType : gl::AllShaderTypes())
     {
         gl::Shader *shader = mState.getAttachedShader(shaderType);
         if (shader)
         {
             for (const sh::Uniform &uniform : shader->getUniforms(context))
             {
                 if (uniform.active)
                 {
                     defineUniformBase(shader, uniform, &uniformMap);
                 }
             }
+
+            attachedShaders.set(shader->getType());
         }
     }
 
     // Initialize the D3DUniform list to mirror the indexing of the GL layer.
     for (const gl::LinkedUniform &glUniform : mState.getUniforms())
     {
         if (!glUniform.isInDefaultBlock())
             continue;
@@ -2153,17 +2057,17 @@ void ProgramD3D::defineUniformsAndAssign
         }
         auto mapEntry = uniformMap.find(name);
         ASSERT(mapEntry != uniformMap.end());
         mD3DUniforms.push_back(mapEntry->second);
     }
 
     assignAllSamplerRegisters();
     assignAllImageRegisters();
-    initializeUniformStorage();
+    initializeUniformStorage(attachedShaders);
 }
 
 void ProgramD3D::defineUniformBase(const gl::Shader *shader,
                                    const sh::Uniform &uniform,
                                    D3DUniformMap *uniformMap)
 {
     // Samplers get their registers assigned in assignAllSamplerRegisters, and images get their
     // registers assigned in assignAllImageRegisters.
@@ -2352,30 +2256,18 @@ void ProgramD3D::defineUniform(gl::Shade
 
     if (encoder)
     {
         d3dUniform->registerElement =
             static_cast<unsigned int>(sh::HLSLBlockEncoder::getBlockRegisterElement(blockInfo));
         unsigned int reg =
             static_cast<unsigned int>(sh::HLSLBlockEncoder::getBlockRegister(blockInfo));
 
-        switch (shaderType)
-        {
-            case gl::ShaderType::Fragment:
-                d3dUniform->psRegisterIndex = reg;
-                break;
-            case gl::ShaderType::Vertex:
-                d3dUniform->vsRegisterIndex = reg;
-                break;
-            case gl::ShaderType::Compute:
-                d3dUniform->csRegisterIndex = reg;
-                break;
-            default:
-                UNREACHABLE();
-        }
+        ASSERT(shaderType != gl::ShaderType::InvalidEnum);
+        d3dUniform->mShaderRegisterIndexes[shaderType] = reg;
 
         // Arrays are treated as aggregate types
         if (uniform.isArray())
         {
             encoder->exitAggregateType();
         }
     }
 }
@@ -2434,32 +2326,24 @@ void ProgramD3D::setUniformInternal(GLin
         if (memcmp(dest, v, size) != 0)
         {
             memcpy(dest, v, size);
             mDirtySamplerMapping = true;
         }
         return;
     }
 
-    if (targetUniform->vsData)
-    {
-        setUniformImpl(locationInfo, count, v, targetUniform->vsData, uniformType);
-        mShaderUniformsDirty.set(gl::ShaderType::Vertex);
-    }
-
-    if (targetUniform->psData)
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
     {
-        setUniformImpl(locationInfo, count, v, targetUniform->psData, uniformType);
-        mShaderUniformsDirty.set(gl::ShaderType::Fragment);
-    }
-
-    if (targetUniform->csData)
-    {
-        setUniformImpl(locationInfo, count, v, targetUniform->csData, uniformType);
-        mShaderUniformsDirty.set(gl::ShaderType::Compute);
+        if (targetUniform->mShaderData[shaderType])
+        {
+            setUniformImpl(locationInfo, count, v, targetUniform->mShaderData[shaderType],
+                           uniformType);
+            mShaderUniformsDirty.set(shaderType);
+        }
     }
 }
 
 template <int cols, int rows>
 bool ProgramD3D::setUniformMatrixfvImpl(GLint location,
                                         GLsizei countIn,
                                         GLboolean transpose,
                                         const GLfloat *value,
@@ -2501,40 +2385,26 @@ template <int cols, int rows>
 void ProgramD3D::setUniformMatrixfvInternal(GLint location,
                                             GLsizei countIn,
                                             GLboolean transpose,
                                             const GLfloat *value,
                                             GLenum targetUniformType)
 {
     D3DUniform *targetUniform = getD3DUniformFromLocation(location);
 
-    if (targetUniform->vsData)
-    {
-        if (setUniformMatrixfvImpl<cols, rows>(location, countIn, transpose, value,
-                                               targetUniform->vsData, targetUniformType))
-        {
-            mShaderUniformsDirty.set(gl::ShaderType::Vertex);
-        }
-    }
-
-    if (targetUniform->psData)
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
     {
-        if (setUniformMatrixfvImpl<cols, rows>(location, countIn, transpose, value,
-                                               targetUniform->psData, targetUniformType))
+        if (targetUniform->mShaderData[shaderType])
         {
-            mShaderUniformsDirty.set(gl::ShaderType::Fragment);
-        }
-    }
-
-    if (targetUniform->csData)
-    {
-        if (setUniformMatrixfvImpl<cols, rows>(location, countIn, transpose, value,
-                                               targetUniform->csData, targetUniformType))
-        {
-            mShaderUniformsDirty.set(gl::ShaderType::Compute);
+            if (setUniformMatrixfvImpl<cols, rows>(location, countIn, transpose, value,
+                                                   targetUniform->mShaderData[shaderType],
+                                                   targetUniformType))
+            {
+                mShaderUniformsDirty.set(shaderType);
+            }
         }
     }
 }
 
 void ProgramD3D::assignAllSamplerRegisters()
 {
     for (size_t uniformIndex = 0; uniformIndex < mD3DUniforms.size(); ++uniformIndex)
     {
@@ -2552,53 +2422,39 @@ void ProgramD3D::assignSamplerRegisters(
     // If the uniform is an array of arrays, then we have separate entries for each inner array in
     // mD3DUniforms. However, the sampler register info is stored in the shader only for the
     // outermost array.
     std::vector<unsigned int> subscripts;
     const std::string baseName  = gl::ParseResourceName(d3dUniform->name, &subscripts);
     unsigned int registerOffset = mState.getUniforms()[uniformIndex].flattenedOffsetInParentArrays *
                                   d3dUniform->getArraySizeProduct();
 
-    const gl::Shader *computeShader = mState.getAttachedShader(gl::ShaderType::Compute);
-    if (computeShader)
-    {
-        const ShaderD3D *computeShaderD3D =
-            GetImplAs<ShaderD3D>(mState.getAttachedShader(gl::ShaderType::Compute));
-        ASSERT(computeShaderD3D->hasUniform(baseName));
-        d3dUniform->csRegisterIndex =
-            computeShaderD3D->getUniformRegister(baseName) + registerOffset;
-        ASSERT(d3dUniform->csRegisterIndex != GL_INVALID_INDEX);
-        AssignSamplers(d3dUniform->csRegisterIndex, d3dUniform->typeInfo,
-                       d3dUniform->getArraySizeProduct(), mSamplersCS, &mUsedComputeSamplerRange);
-    }
-    else
+    bool hasUniform = false;
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
     {
-        const ShaderD3D *vertexShaderD3D =
-            GetImplAs<ShaderD3D>(mState.getAttachedShader(gl::ShaderType::Vertex));
-        const ShaderD3D *fragmentShaderD3D =
-            GetImplAs<ShaderD3D>(mState.getAttachedShader(gl::ShaderType::Fragment));
-        ASSERT(vertexShaderD3D->hasUniform(baseName) || fragmentShaderD3D->hasUniform(baseName));
-        if (vertexShaderD3D->hasUniform(baseName))
+        if (!mState.getAttachedShader(shaderType))
+        {
+            continue;
+        }
+
+        const ShaderD3D *shaderD3D = GetImplAs<ShaderD3D>(mState.getAttachedShader(shaderType));
+        if (shaderD3D->hasUniform(baseName))
         {
-            d3dUniform->vsRegisterIndex =
-                vertexShaderD3D->getUniformRegister(baseName) + registerOffset;
-            ASSERT(d3dUniform->vsRegisterIndex != GL_INVALID_INDEX);
-            AssignSamplers(d3dUniform->vsRegisterIndex, d3dUniform->typeInfo,
-                           d3dUniform->getArraySizeProduct(), mSamplersVS,
-                           &mUsedVertexSamplerRange);
-        }
-        if (fragmentShaderD3D->hasUniform(baseName))
-        {
-            d3dUniform->psRegisterIndex =
-                fragmentShaderD3D->getUniformRegister(baseName) + registerOffset;
-            ASSERT(d3dUniform->psRegisterIndex != GL_INVALID_INDEX);
-            AssignSamplers(d3dUniform->psRegisterIndex, d3dUniform->typeInfo,
-                           d3dUniform->getArraySizeProduct(), mSamplersPS, &mUsedPixelSamplerRange);
+            d3dUniform->mShaderRegisterIndexes[shaderType] =
+                shaderD3D->getUniformRegister(baseName) + registerOffset;
+            ASSERT(d3dUniform->mShaderRegisterIndexes[shaderType] != GL_INVALID_VALUE);
+
+            AssignSamplers(d3dUniform->mShaderRegisterIndexes[shaderType], d3dUniform->typeInfo,
+                           d3dUniform->getArraySizeProduct(), mShaderSamplers[shaderType],
+                           &mUsedShaderSamplerRanges[shaderType]);
+            hasUniform = true;
         }
     }
+
+    ASSERT(hasUniform);
 }
 
 // static
 void ProgramD3D::AssignSamplers(unsigned int startSamplerIndex,
                                 const gl::UniformTypeInfo &typeInfo,
                                 unsigned int samplerCount,
                                 std::vector<Sampler> &outSamplers,
                                 GLuint *outUsedRange)
@@ -2641,31 +2497,32 @@ void ProgramD3D::assignImageRegisters(si
                                   d3dUniform->getArraySizeProduct();
 
     const gl::Shader *computeShader = mState.getAttachedShader(gl::ShaderType::Compute);
     if (computeShader)
     {
         const ShaderD3D *computeShaderD3D =
             GetImplAs<ShaderD3D>(mState.getAttachedShader(gl::ShaderType::Compute));
         ASSERT(computeShaderD3D->hasUniform(baseName));
-        d3dUniform->csRegisterIndex =
+        d3dUniform->mShaderRegisterIndexes[gl::ShaderType::Compute] =
             computeShaderD3D->getUniformRegister(baseName) + registerOffset;
-        ASSERT(d3dUniform->csRegisterIndex != GL_INVALID_INDEX);
+        ASSERT(d3dUniform->mShaderRegisterIndexes[gl::ShaderType::Compute] != GL_INVALID_INDEX);
         auto bindingIter = mImageBindingMap.find(baseName);
         ASSERT(bindingIter != mImageBindingMap.end());
         if (d3dUniform->regType == HLSLRegisterType::Texture)
         {
-            AssignImages(d3dUniform->csRegisterIndex, bindingIter->second,
-                         d3dUniform->getArraySizeProduct(), mReadonlyImagesCS,
+            AssignImages(d3dUniform->mShaderRegisterIndexes[gl::ShaderType::Compute],
+                         bindingIter->second, d3dUniform->getArraySizeProduct(), mReadonlyImagesCS,
                          &mUsedComputeReadonlyImageRange);
         }
         else if (d3dUniform->regType == HLSLRegisterType::UnorderedAccessView)
         {
-            AssignImages(d3dUniform->csRegisterIndex, bindingIter->second,
-                         d3dUniform->getArraySizeProduct(), mImagesCS, &mUsedComputeImageRange);
+            AssignImages(d3dUniform->mShaderRegisterIndexes[gl::ShaderType::Compute],
+                         bindingIter->second, d3dUniform->getArraySizeProduct(), mImagesCS,
+                         &mUsedComputeImageRange);
         }
         else
         {
             UNREACHABLE();
         }
     }
     else
     {
@@ -2714,44 +2571,42 @@ void ProgramD3D::reset()
 
     for (auto &geometryExecutable : mGeometryExecutables)
     {
         geometryExecutable.reset(nullptr);
     }
 
     mComputeExecutable.reset(nullptr);
 
-    mVertexHLSL.clear();
-    mVertexWorkarounds = angle::CompilerWorkaroundsD3D();
-
-    mPixelHLSL.clear();
-    mPixelWorkarounds         = angle::CompilerWorkaroundsD3D();
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        mShaderHLSL[shaderType].clear();
+        mShaderWorkarounds[shaderType] = CompilerWorkaroundsD3D();
+    }
+
     mUsesFragDepth            = false;
     mHasANGLEMultiviewEnabled = false;
     mUsesViewID               = false;
     mPixelShaderKey.clear();
     mUsesPointSize         = false;
     mUsesFlatInterpolation = false;
 
     SafeDeleteContainer(mD3DUniforms);
     mD3DUniformBlocks.clear();
 
-    mVertexUniformStorage.reset(nullptr);
-    mFragmentUniformStorage.reset(nullptr);
-    mComputeUniformStorage.reset(nullptr);
-
-    mSamplersPS.clear();
-    mSamplersVS.clear();
-    mSamplersCS.clear();
+    for (gl::ShaderType shaderType : gl::AllShaderTypes())
+    {
+        mShaderUniformStorages[shaderType].reset();
+        mShaderSamplers[shaderType].clear();
+    }
+
     mImagesCS.clear();
     mReadonlyImagesCS.clear();
 
-    mUsedVertexSamplerRange        = 0;
-    mUsedPixelSamplerRange         = 0;
-    mUsedComputeSamplerRange       = 0;
+    mUsedShaderSamplerRanges.fill(0);
     mDirtySamplerMapping           = true;
     mUsedComputeImageRange         = 0;
     mUsedComputeReadonlyImageRange = 0;
 
     mAttribLocationToD3DSemantic.fill(-1);
 
     mStreamOutVaryings.clear();
 
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.h
@@ -50,67 +50,53 @@ struct D3DUniform : private angle::NonCo
                const std::vector<unsigned int> &arraySizesIn,
                bool defaultBlock);
     ~D3DUniform();
 
     bool isSampler() const;
     bool isImage() const;
     bool isArray() const { return !arraySizes.empty(); }
     unsigned int getArraySizeProduct() const;
-    bool isReferencedByVertexShader() const;
-    bool isReferencedByFragmentShader() const;
-    bool isReferencedByComputeShader() const;
+    bool isReferencedByShader(gl::ShaderType shaderType) const;
 
     const uint8_t *firstNonNullData() const;
     const uint8_t *getDataPtrToElement(size_t elementIndex) const;
 
     // Duplicated from the GL layer
     const gl::UniformTypeInfo &typeInfo;
     std::string name;  // Names of arrays don't include [0], unlike at the GL layer.
     std::vector<unsigned int> arraySizes;
 
     // Pointer to a system copies of the data. Separate pointers for each uniform storage type.
-    uint8_t *vsData;
-    uint8_t *psData;
-    uint8_t *csData;
+    gl::ShaderMap<uint8_t *> mShaderData;
 
     // Register information.
     HLSLRegisterType regType;
-    unsigned int vsRegisterIndex;
-    unsigned int psRegisterIndex;
-    unsigned int csRegisterIndex;
+    gl::ShaderMap<unsigned int> mShaderRegisterIndexes;
     unsigned int registerCount;
 
     // Register "elements" are used for uniform structs in ES3, to appropriately identify single
     // uniforms
     // inside aggregate types, which are packed according C-like structure rules.
     unsigned int registerElement;
 
     // Special buffer for sampler values.
     std::vector<GLint> mSamplerData;
 };
 
 struct D3DUniformBlock
 {
-    D3DUniformBlock()
-        : vsRegisterIndex(GL_INVALID_INDEX),
-          psRegisterIndex(GL_INVALID_INDEX),
-          csRegisterIndex(GL_INVALID_INDEX)
+    D3DUniformBlock() { mShaderRegisterIndexes.fill(GL_INVALID_INDEX); }
+
+    bool activeInShader(gl::ShaderType shaderType) const
     {
+        return mShaderRegisterIndexes[shaderType] != GL_INVALID_INDEX;
     }
 
-    bool vertexActive() const { return vsRegisterIndex != GL_INVALID_INDEX; }
-
-    bool fragmentActive() const { return psRegisterIndex != GL_INVALID_INDEX; }
-
-    bool computeActive() const { return csRegisterIndex != GL_INVALID_INDEX; }
-
-    unsigned int vsRegisterIndex;
-    unsigned int psRegisterIndex;
-    unsigned int csRegisterIndex;
+    gl::ShaderMap<unsigned int> mShaderRegisterIndexes;
 };
 
 struct D3DVarying final
 {
     D3DVarying();
     D3DVarying(const std::string &semanticNameIn,
                unsigned int semanticIndexIn,
                unsigned int componentCountIn,
@@ -124,18 +110,17 @@ struct D3DVarying final
     unsigned int componentCount;
     unsigned int outputSlot;
 };
 
 class ProgramD3DMetadata final : angle::NonCopyable
 {
   public:
     ProgramD3DMetadata(RendererD3D *renderer,
-                       const ShaderD3D *vertexShader,
-                       const ShaderD3D *fragmentShader);
+                       const gl::ShaderMap<const ShaderD3D *> &attachedShaders);
 
     int getRendererMajorShaderModel() const;
     bool usesBroadcast(const gl::ContextState &data) const;
     bool usesFragDepth() const;
     bool usesPointCoord() const;
     bool usesFragCoord() const;
     bool usesPointSize() const;
     bool usesInsertedPointCoordValue() const;
@@ -150,21 +135,18 @@ class ProgramD3DMetadata final : angle::
     GLint getMajorShaderVersion() const;
     const ShaderD3D *getFragmentShader() const;
 
   private:
     const int mRendererMajorShaderModel;
     const std::string mShaderModelSuffix;
     const bool mUsesInstancedPointSpriteEmulation;
     const bool mUsesViewScale;
-    const bool mHasANGLEMultiviewEnabled;
-    const bool mUsesViewID;
     const bool mCanSelectViewInVertexShader;
-    const ShaderD3D *mVertexShader;
-    const ShaderD3D *mFragmentShader;
+    const gl::ShaderMap<const ShaderD3D *> mAttachedShaders;
 };
 
 class ProgramD3D : public ProgramImpl
 {
   public:
     ProgramD3D(const gl::ProgramState &data, RendererD3D *renderer);
     ~ProgramD3D() override;
 
@@ -218,22 +200,19 @@ class ProgramD3D : public ProgramImpl
                         gl::InfoLog &infoLog) override;
     GLboolean validate(const gl::Caps &caps, gl::InfoLog *infoLog) override;
 
     void setPathFragmentInputGen(const std::string &inputName,
                                  GLenum genMode,
                                  GLint components,
                                  const GLfloat *coeffs) override;
 
-    void initializeUniformStorage();
     void updateUniformBufferCache(const gl::Caps &caps,
-                                  unsigned int reservedVertex,
-                                  unsigned int reservedFragment);
-    const std::vector<GLint> &getVertexUniformBufferCache() const;
-    const std::vector<GLint> &getFragmentUniformBufferCache() const;
+                                  const gl::ShaderMap<unsigned int> &reservedShaderRegisterIndexes);
+    const std::vector<GLint> &getShaderUniformBufferCache(gl::ShaderType shaderType) const;
 
     void dirtyAllUniforms();
 
     void setUniform1fv(GLint location, GLsizei count, const GLfloat *v) override;
     void setUniform2fv(GLint location, GLsizei count, const GLfloat *v) override;
     void setUniform3fv(GLint location, GLsizei count, const GLfloat *v) override;
     void setUniform4fv(GLint location, GLsizei count, const GLfloat *v) override;
     void setUniform1iv(GLint location, GLsizei count, const GLint *v) override;
@@ -282,19 +261,20 @@ class ProgramD3D : public ProgramImpl
                                const GLfloat *value) override;
 
     void getUniformfv(const gl::Context *context, GLint location, GLfloat *params) const override;
     void getUniformiv(const gl::Context *context, GLint location, GLint *params) const override;
     void getUniformuiv(const gl::Context *context, GLint location, GLuint *params) const override;
 
     void setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding) override;
 
-    UniformStorageD3D &getVertexUniformStorage() const { return *mVertexUniformStorage.get(); }
-    UniformStorageD3D &getFragmentUniformStorage() const { return *mFragmentUniformStorage.get(); }
-    UniformStorageD3D &getComputeUniformStorage() const { return *mComputeUniformStorage.get(); }
+    UniformStorageD3D *getShaderUniformStorage(gl::ShaderType shaderType) const
+    {
+        return mShaderUniformStorages[shaderType].get();
+    }
 
     unsigned int getSerial() const;
 
     const AttribIndexArray &getAttribLocationToD3DSemantics() const
     {
         return mAttribLocationToD3DSemantic;
     }
 
@@ -390,16 +370,18 @@ class ProgramD3D : public ProgramImpl
     {
         Image();
         bool active;
         GLint logicalImageUnit;
     };
 
     typedef std::map<std::string, D3DUniform *> D3DUniformMap;
 
+    void initializeUniformStorage(const gl::ShaderBitSet &availableShaderStages);
+
     void defineUniformsAndAssignRegisters(const gl::Context *context);
     void defineUniformBase(const gl::Shader *shader,
                            const sh::Uniform &uniform,
                            D3DUniformMap *uniformMap);
     void defineStructUniformFields(gl::ShaderType shaderType,
                                    const std::vector<sh::ShaderVariable> &fields,
                                    const std::string &namePrefix,
                                    const HLSLRegisterType regType,
@@ -493,61 +475,52 @@ class ProgramD3D : public ProgramImpl
     RendererD3D *mRenderer;
     DynamicHLSL *mDynamicHLSL;
 
     std::vector<std::unique_ptr<VertexExecutable>> mVertexExecutables;
     std::vector<std::unique_ptr<PixelExecutable>> mPixelExecutables;
     std::vector<std::unique_ptr<ShaderExecutableD3D>> mGeometryExecutables;
     std::unique_ptr<ShaderExecutableD3D> mComputeExecutable;
 
-    std::string mVertexHLSL;
-    angle::CompilerWorkaroundsD3D mVertexWorkarounds;
+    gl::ShaderMap<std::string> mShaderHLSL;
+    gl::ShaderMap<angle::CompilerWorkaroundsD3D> mShaderWorkarounds;
 
-    std::string mPixelHLSL;
-    angle::CompilerWorkaroundsD3D mPixelWorkarounds;
     bool mUsesFragDepth;
     bool mHasANGLEMultiviewEnabled;
     bool mUsesViewID;
     std::vector<PixelShaderOutputVariable> mPixelShaderKey;
 
     // Common code for all dynamic geometry shaders. Consists mainly of the GS input and output
     // structures, built from the linked varying info. We store the string itself instead of the
     // packed varyings for simplicity.
     std::string mGeometryShaderPreamble;
 
     bool mUsesPointSize;
     bool mUsesFlatInterpolation;
 
-    std::unique_ptr<UniformStorageD3D> mVertexUniformStorage;
-    std::unique_ptr<UniformStorageD3D> mFragmentUniformStorage;
-    std::unique_ptr<UniformStorageD3D> mComputeUniformStorage;
+    gl::ShaderMap<std::unique_ptr<UniformStorageD3D>> mShaderUniformStorages;
 
-    std::vector<Sampler> mSamplersPS;
-    std::vector<Sampler> mSamplersVS;
-    std::vector<Sampler> mSamplersCS;
-    GLuint mUsedVertexSamplerRange;
-    GLuint mUsedPixelSamplerRange;
-    GLuint mUsedComputeSamplerRange;
+    gl::ShaderMap<std::vector<Sampler>> mShaderSamplers;
+    gl::ShaderMap<GLuint> mUsedShaderSamplerRanges;
     bool mDirtySamplerMapping;
 
     std::vector<Image> mImagesCS;
     std::vector<Image> mReadonlyImagesCS;
     GLuint mUsedComputeImageRange;
     GLuint mUsedComputeReadonlyImageRange;
 
     // Cache for pixel shader output layout to save reallocations.
     std::vector<GLenum> mPixelShaderOutputLayoutCache;
     Optional<size_t> mCachedPixelExecutableIndex;
 
     AttribIndexArray mAttribLocationToD3DSemantic;
 
     unsigned int mSerial;
 
-    std::vector<GLint> mVertexUBOCache;
-    std::vector<GLint> mFragmentUBOCache;
+    gl::ShaderMap<std::vector<int>> mShaderUBOCaches;
     VertexExecutable::Signature mCachedVertexSignature;
     gl::InputLayout mCachedInputLayout;
     Optional<size_t> mCachedVertexExecutableIndex;
 
     std::vector<D3DVarying> mStreamOutVaryings;
     std::vector<D3DUniform *> mD3DUniforms;
     std::map<std::string, int> mImageBindingMap;
     std::vector<D3DUniformBlock> mD3DUniformBlocks;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/RendererD3D.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/RendererD3D.h
@@ -68,16 +68,19 @@ struct DeviceIdentifier
 };
 
 enum RendererClass
 {
     RENDERER_D3D11,
     RENDERER_D3D9
 };
 
+// Check if the device is lost every 10 failures to get the query data
+constexpr unsigned int kPollingD3DDeviceLostCheckFrequency = 10;
+
 // Useful for unit testing
 class BufferFactoryD3D : angle::NonCopyable
 {
   public:
     BufferFactoryD3D() {}
     virtual ~BufferFactoryD3D() {}
 
     virtual VertexBuffer *createVertexBuffer() = 0;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/ShaderD3D.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/ShaderD3D.cpp
@@ -57,17 +57,17 @@ ShaderD3D::ShaderD3D(const gl::ShaderSta
         mAdditionalOptions |= SH_INITIALIZE_BUILTINS_FOR_INSTANCED_MULTIVIEW;
     }
 }
 
 ShaderD3D::~ShaderD3D()
 {
 }
 
-std::string ShaderD3D::getDebugInfo() const
+std::string ShaderD3D::getDebugInfo(const gl::Context *context) const
 {
     if (mDebugInfo.empty())
     {
         return "";
     }
 
     return mDebugInfo + std::string("\n// ") + gl::GetShaderTypeString(mData.getShaderType()) +
            " SHADER END\n";
@@ -132,17 +132,18 @@ unsigned int ShaderD3D::getUniformBlockR
     return mUniformBlockRegisterMap.find(blockName)->second;
 }
 
 ShShaderOutput ShaderD3D::getCompilerOutputType() const
 {
     return mCompilerOutputType;
 }
 
-ShCompileOptions ShaderD3D::prepareSourceAndReturnOptions(std::stringstream *shaderSourceStream,
+ShCompileOptions ShaderD3D::prepareSourceAndReturnOptions(const gl::Context *context,
+                                                          std::stringstream *shaderSourceStream,
                                                           std::string *sourcePath)
 {
     uncompile();
 
     ShCompileOptions additionalOptions = 0;
 
     const std::string &source = mData.getSource();
 
@@ -168,17 +169,19 @@ bool ShaderD3D::hasUniform(const std::st
 
 const std::map<std::string, unsigned int> &GetUniformRegisterMap(
     const std::map<std::string, unsigned int> *uniformRegisterMap)
 {
     ASSERT(uniformRegisterMap);
     return *uniformRegisterMap;
 }
 
-bool ShaderD3D::postTranslateCompile(gl::Compiler *compiler, std::string *infoLog)
+bool ShaderD3D::postTranslateCompile(const gl::Context *context,
+                                     gl::Compiler *compiler,
+                                     std::string *infoLog)
 {
     // TODO(jmadill): We shouldn't need to cache this.
     mCompilerOutputType = compiler->getShaderOutputType();
 
     const std::string &translatedSource = mData.getTranslatedSource();
 
     mUsesMultipleRenderTargets = translatedSource.find("GL_USES_MRT") != std::string::npos;
     mUsesFragColor             = translatedSource.find("GL_USES_FRAG_COLOR") != std::string::npos;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/ShaderD3D.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/ShaderD3D.h
@@ -34,20 +34,23 @@ class ShaderD3D : public ShaderImpl
 {
   public:
     ShaderD3D(const gl::ShaderState &data,
               const angle::WorkaroundsD3D &workarounds,
               const gl::Extensions &extensions);
     ~ShaderD3D() override;
 
     // ShaderImpl implementation
-    ShCompileOptions prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+    ShCompileOptions prepareSourceAndReturnOptions(const gl::Context *context,
+                                                   std::stringstream *sourceStream,
                                                    std::string *sourcePath) override;
-    bool postTranslateCompile(gl::Compiler *compiler, std::string *infoLog) override;
-    std::string getDebugInfo() const override;
+    bool postTranslateCompile(const gl::Context *context,
+                              gl::Compiler *compiler,
+                              std::string *infoLog) override;
+    std::string getDebugInfo(const gl::Context *context) const override;
 
     // D3D-specific methods
     void uncompile();
 
     bool hasUniform(const std::string &name) const;
 
     // Query regular uniforms with their name. Query sampler fields of structs with field selection
     // using dot (.) operator.
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
@@ -132,22 +132,22 @@ egl::Error SurfaceD3D::initialize(const 
     return egl::NoError();
 }
 
 FramebufferImpl *SurfaceD3D::createDefaultFramebuffer(const gl::FramebufferState &data)
 {
     return mRenderer->createDefaultFramebuffer(data);
 }
 
-egl::Error SurfaceD3D::bindTexImage(gl::Texture *, EGLint)
+egl::Error SurfaceD3D::bindTexImage(const gl::Context *, gl::Texture *, EGLint)
 {
     return egl::NoError();
 }
 
-egl::Error SurfaceD3D::releaseTexImage(EGLint)
+egl::Error SurfaceD3D::releaseTexImage(const gl::Context *, EGLint)
 {
     return egl::NoError();
 }
 
 egl::Error SurfaceD3D::getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc)
 {
     return mSwapChain->getSyncValues(ust, msc, sbc);
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/SurfaceD3D.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/SurfaceD3D.h
@@ -33,18 +33,20 @@ class SurfaceD3D : public SurfaceImpl
 
     egl::Error swap(const gl::Context *context) override;
     egl::Error postSubBuffer(const gl::Context *context,
                              EGLint x,
                              EGLint y,
                              EGLint width,
                              EGLint height) override;
     egl::Error querySurfacePointerANGLE(EGLint attribute, void **value) override;
-    egl::Error bindTexImage(gl::Texture *texture, EGLint buffer) override;
-    egl::Error releaseTexImage(EGLint buffer) override;
+    egl::Error bindTexImage(const gl::Context *context,
+                            gl::Texture *texture,
+                            EGLint buffer) override;
+    egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) override;
     egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
     void setSwapInterval(EGLint interval) override;
 
     EGLint getWidth() const override;
     EGLint getHeight() const override;
 
     EGLint isPostSubBufferSupported() const override;
     EGLint getSwapBehavior() const override;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureD3D.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureD3D.cpp
@@ -237,18 +237,18 @@ gl::Error TextureD3D::setImageImpl(const
         if (shouldUseSetData(image))
         {
             ANGLE_TRY(
                 mTexStorage->setData(context, index, image, nullptr, type, unpack, pixelData));
         }
         else
         {
             gl::Box fullImageArea(0, 0, 0, image->getWidth(), image->getHeight(), image->getDepth());
-            ANGLE_TRY(
-                image->loadData(context, fullImageArea, unpack, type, pixelData, index.is3D()));
+            ANGLE_TRY(image->loadData(context, fullImageArea, unpack, type, pixelData,
+                                      index.usesTex3D()));
         }
 
         mDirtyImages = true;
     }
 
     return gl::NoError();
 }
 
@@ -272,17 +272,17 @@ gl::Error TextureD3D::subImage(const gl:
         ImageD3D *image = getImage(index);
         ASSERT(image);
 
         if (shouldUseSetData(image))
         {
             return mTexStorage->setData(context, index, image, &area, type, unpack, pixelData);
         }
 
-        ANGLE_TRY(image->loadData(context, area, unpack, type, pixelData, index.is3D()));
+        ANGLE_TRY(image->loadData(context, area, unpack, type, pixelData, index.usesTex3D()));
         ANGLE_TRY(commitRegion(context, index, area));
         mDirtyImages = true;
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D::setCompressedImageImpl(const gl::Context *context,
@@ -572,17 +572,17 @@ gl::Error TextureD3D::ensureRenderTarget
         }
     }
 
     return gl::NoError();
 }
 
 bool TextureD3D::canCreateRenderTargetForImage(const gl::ImageIndex &index) const
 {
-    if (index.type == gl::TextureType::_2DMultisample)
+    if (index.getType() == gl::TextureType::_2DMultisample)
         return true;
 
     ImageD3D *image = getImage(index);
     ASSERT(image);
     bool levelsComplete = (isImageComplete(index) && isImageComplete(getImageIndex(0, 0)));
     return (image->isRenderableFormat() && levelsComplete);
 }
 
@@ -632,19 +632,20 @@ gl::Error TextureD3D::setBaseLevel(const
     {
         markAllImagesDirty();
         ANGLE_TRY(releaseTexStorage(context));
     }
 
     return gl::NoError();
 }
 
-void TextureD3D::syncState(const gl::Texture::DirtyBits &dirtyBits)
+gl::Error TextureD3D::syncState(const gl::Context *context, const gl::Texture::DirtyBits &dirtyBits)
 {
     // TODO(geofflang): Use dirty bits
+    return gl::NoError();
 }
 
 gl::Error TextureD3D::releaseTexStorage(const gl::Context *context)
 {
     if (!mTexStorage)
     {
         return gl::NoError();
     }
@@ -664,27 +665,32 @@ gl::Error TextureD3D::onDestroy(const gl
 gl::Error TextureD3D::initializeContents(const gl::Context *context,
                                          const gl::ImageIndex &imageIndexIn)
 {
     gl::ImageIndex imageIndex = imageIndexIn;
 
     // Special case for D3D11 3D textures. We can't create render targets for individual layers of a
     // 3D texture, so force the clear to the entire mip. There shouldn't ever be a case where we
     // would lose existing data.
-    if (imageIndex.type == gl::TextureType::_3D)
+    if (imageIndexIn.getType() == gl::TextureType::_3D)
     {
-        imageIndex.layerIndex = gl::ImageIndex::ENTIRE_LEVEL;
+        imageIndex =
+            gl::ImageIndex::Make3D(imageIndexIn.getLevelIndex(), gl::ImageIndex::kEntireLevel);
     }
-    else if (imageIndex.type == gl::TextureType::_2DArray &&
-             imageIndex.layerIndex == gl::ImageIndex::ENTIRE_LEVEL)
+    else if (imageIndexIn.getType() == gl::TextureType::_2DArray && !imageIndexIn.hasLayer())
     {
-        GLsizei layerCount = getLayerCount(imageIndex.mipIndex);
-        for (imageIndex.layerIndex = 0; imageIndex.layerIndex < layerCount; ++imageIndex.layerIndex)
+        std::array<GLint, gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS> tempLayerCounts;
+
+        GLint levelIndex            = imageIndexIn.getLevelIndex();
+        tempLayerCounts[levelIndex] = getLayerCount(levelIndex);
+        gl::ImageIndexIterator iterator =
+            gl::ImageIndexIterator::Make2DArray(levelIndex, levelIndex + 1, tempLayerCounts.data());
+        while (iterator.hasNext())
         {
-            ANGLE_TRY(initializeContents(context, imageIndex));
+            ANGLE_TRY(initializeContents(context, iterator.next()));
         }
         return gl::NoError();
     }
 
     // Force image clean.
     ImageD3D *image = getImage(imageIndex);
     if (image)
     {
@@ -773,20 +779,20 @@ ImageD3D *TextureD3D_2D::getImage(int le
 {
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(layer == 0);
     return mImageArray[level].get();
 }
 
 ImageD3D *TextureD3D_2D::getImage(const gl::ImageIndex &index) const
 {
-    ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
+    ASSERT(index.getLevelIndex() < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(!index.hasLayer());
-    ASSERT(index.type == gl::TextureType::_2D);
-    return mImageArray[index.mipIndex].get();
+    ASSERT(index.getType() == gl::TextureType::_2D);
+    return mImageArray[index.getLevelIndex()].get();
 }
 
 GLsizei TextureD3D_2D::getLayerCount(int level) const
 {
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     return 1;
 }
 
@@ -828,42 +834,43 @@ gl::Error TextureD3D_2D::setImage(const 
                                   const gl::ImageIndex &index,
                                   GLenum internalFormat,
                                   const gl::Extents &size,
                                   GLenum format,
                                   GLenum type,
                                   const gl::PixelUnpackState &unpack,
                                   const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D && size.depth == 1);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D && size.depth == 1);
 
     const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat, type);
 
     bool fastUnpacked = false;
 
-    ANGLE_TRY(redefineImage(context, index.mipIndex, internalFormatInfo.sizedInternalFormat, size,
-                            false));
+    ANGLE_TRY(redefineImage(context, index.getLevelIndex(), internalFormatInfo.sizedInternalFormat,
+                            size, false));
 
     // Attempt a fast gpu copy of the pixel data to the surface
     gl::Buffer *unpackBuffer =
         context->getGLState().getTargetBuffer(gl::BufferBinding::PixelUnpack);
     if (isFastUnpackable(unpackBuffer, internalFormatInfo.sizedInternalFormat) &&
-        isLevelComplete(index.mipIndex))
+        isLevelComplete(index.getLevelIndex()))
     {
         // Will try to create RT storage if it does not exist
         RenderTargetD3D *destRenderTarget = nullptr;
         ANGLE_TRY(getRenderTarget(context, index, &destRenderTarget));
 
-        gl::Box destArea(0, 0, 0, getWidth(index.mipIndex), getHeight(index.mipIndex), 1);
+        gl::Box destArea(0, 0, 0, getWidth(index.getLevelIndex()), getHeight(index.getLevelIndex()),
+                         1);
 
         ANGLE_TRY(fastUnpackPixels(context, unpack, pixels, destArea,
                                    internalFormatInfo.sizedInternalFormat, type, destRenderTarget));
 
         // Ensure we don't overwrite our newly initialized data
-        mImageArray[index.mipIndex]->markClean();
+        mImageArray[index.getLevelIndex()]->markClean();
 
         fastUnpacked = true;
     }
 
     if (!fastUnpacked)
     {
         ANGLE_TRY(setImageImpl(context, index, type, unpack, pixels, 0));
     }
@@ -874,26 +881,26 @@ gl::Error TextureD3D_2D::setImage(const 
 gl::Error TextureD3D_2D::setSubImage(const gl::Context *context,
                                      const gl::ImageIndex &index,
                                      const gl::Box &area,
                                      GLenum format,
                                      GLenum type,
                                      const gl::PixelUnpackState &unpack,
                                      const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D && area.depth == 1 && area.z == 0);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D && area.depth == 1 && area.z == 0);
 
     gl::Buffer *unpackBuffer =
         context->getGLState().getTargetBuffer(gl::BufferBinding::PixelUnpack);
-    GLenum mipFormat = getInternalFormat(index.mipIndex);
-    if (isFastUnpackable(unpackBuffer, mipFormat) && isLevelComplete(index.mipIndex))
+    GLenum mipFormat = getInternalFormat(index.getLevelIndex());
+    if (isFastUnpackable(unpackBuffer, mipFormat) && isLevelComplete(index.getLevelIndex()))
     {
         RenderTargetD3D *renderTarget = nullptr;
         ANGLE_TRY(getRenderTarget(context, index, &renderTarget));
-        ASSERT(!mImageArray[index.mipIndex]->isDirty());
+        ASSERT(!mImageArray[index.getLevelIndex()]->isDirty());
 
         return fastUnpackPixels(context, unpack, pixels, area, mipFormat, type, renderTarget);
     }
     else
     {
         return TextureD3D::subImage(context, index, area, format, type, unpack, pixels, 0);
     }
 }
@@ -901,50 +908,50 @@ gl::Error TextureD3D_2D::setSubImage(con
 gl::Error TextureD3D_2D::setCompressedImage(const gl::Context *context,
                                             const gl::ImageIndex &index,
                                             GLenum internalFormat,
                                             const gl::Extents &size,
                                             const gl::PixelUnpackState &unpack,
                                             size_t imageSize,
                                             const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D && size.depth == 1);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D && size.depth == 1);
 
     // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
-    ANGLE_TRY(redefineImage(context, index.mipIndex, internalFormat, size, false));
+    ANGLE_TRY(redefineImage(context, index.getLevelIndex(), internalFormat, size, false));
 
     return setCompressedImageImpl(context, index, unpack, pixels, 0);
 }
 
 gl::Error TextureD3D_2D::setCompressedSubImage(const gl::Context *context,
                                                const gl::ImageIndex &index,
                                                const gl::Box &area,
                                                GLenum format,
                                                const gl::PixelUnpackState &unpack,
                                                size_t imageSize,
                                                const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D && area.depth == 1 && area.z == 0);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D && area.depth == 1 && area.z == 0);
     ANGLE_TRY(TextureD3D::subImageCompressed(context, index, area, format, unpack, pixels, 0));
 
     return commitRegion(context, index, area);
 }
 
 gl::Error TextureD3D_2D::copyImage(const gl::Context *context,
                                    const gl::ImageIndex &index,
                                    const gl::Rectangle &origSourceArea,
                                    GLenum internalFormat,
                                    gl::Framebuffer *source)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D);
 
     const gl::InternalFormat &internalFormatInfo =
         gl::GetInternalFormatInfo(internalFormat, GL_UNSIGNED_BYTE);
     gl::Extents sourceExtents(origSourceArea.width, origSourceArea.height, 1);
-    ANGLE_TRY(redefineImage(context, index.mipIndex, internalFormatInfo.sizedInternalFormat,
+    ANGLE_TRY(redefineImage(context, index.getLevelIndex(), internalFormatInfo.sizedInternalFormat,
                             sourceExtents, false));
 
     gl::Extents fbSize = source->getReadColorbuffer()->getSize();
 
     // Does the read area extend beyond the framebuffer?
     bool outside = origSourceArea.x < 0 || origSourceArea.y < 0 ||
                    origSourceArea.x + origSourceArea.width > fbSize.width ||
                    origSourceArea.y + origSourceArea.height > fbSize.height;
@@ -967,42 +974,42 @@ gl::Error TextureD3D_2D::copyImage(const
     }
 
     gl::Offset destOffset(sourceArea.x - origSourceArea.x, sourceArea.y - origSourceArea.y, 0);
 
     // If the zero max LOD workaround is active, then we can't sample from individual layers of the framebuffer in shaders,
     // so we should use the non-rendering copy path.
     if (!canCreateRenderTargetForImage(index) || mRenderer->getWorkarounds().zeroMaxLodWorkaround)
     {
-        ANGLE_TRY(mImageArray[index.mipIndex]->copyFromFramebuffer(context, destOffset, sourceArea,
-                                                                   source));
+        ANGLE_TRY(mImageArray[index.getLevelIndex()]->copyFromFramebuffer(context, destOffset,
+                                                                          sourceArea, source));
         mDirtyImages = true;
     }
     else
     {
         ANGLE_TRY(ensureRenderTarget(context));
 
-        if (sourceArea.width != 0 && sourceArea.height != 0 && isValidLevel(index.mipIndex))
+        if (sourceArea.width != 0 && sourceArea.height != 0 && isValidLevel(index.getLevelIndex()))
         {
-            ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+            ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
             ANGLE_TRY(mRenderer->copyImage2D(context, source, sourceArea, internalFormat,
-                                             destOffset, mTexStorage, index.mipIndex));
+                                             destOffset, mTexStorage, index.getLevelIndex()));
         }
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_2D::copySubImage(const gl::Context *context,
                                       const gl::ImageIndex &index,
                                       const gl::Offset &origDestOffset,
                                       const gl::Rectangle &origSourceArea,
                                       gl::Framebuffer *source)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D && origDestOffset.z == 0);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D && origDestOffset.z == 0);
 
     gl::Extents fbSize = source->getReadColorbuffer()->getSize();
     gl::Rectangle sourceArea;
     if (!ClipRectangle(origSourceArea, gl::Rectangle(0, 0, fbSize.width, fbSize.height),
                        &sourceArea))
     {
         return gl::NoError();
     }
@@ -1011,71 +1018,71 @@ gl::Error TextureD3D_2D::copySubImage(co
 
     // can only make our texture storage to a render target if level 0 is defined (with a width & height) and
     // the current level we're copying to is defined (with appropriate format, width & height)
 
     // If the zero max LOD workaround is active, then we can't sample from individual layers of the framebuffer in shaders,
     // so we should use the non-rendering copy path.
     if (!canCreateRenderTargetForImage(index) || mRenderer->getWorkarounds().zeroMaxLodWorkaround)
     {
-        ANGLE_TRY(mImageArray[index.mipIndex]->copyFromFramebuffer(context, destOffset, sourceArea,
-                                                                   source));
+        ANGLE_TRY(mImageArray[index.getLevelIndex()]->copyFromFramebuffer(context, destOffset,
+                                                                          sourceArea, source));
         mDirtyImages = true;
     }
     else
     {
         ANGLE_TRY(ensureRenderTarget(context));
 
-        if (isValidLevel(index.mipIndex))
+        if (isValidLevel(index.getLevelIndex()))
         {
-            ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+            ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
             ANGLE_TRY(mRenderer->copyImage2D(context, source, sourceArea,
                                              gl::GetUnsizedFormat(getBaseLevelInternalFormat()),
-                                             destOffset, mTexStorage, index.mipIndex));
+                                             destOffset, mTexStorage, index.getLevelIndex()));
         }
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_2D::copyTexture(const gl::Context *context,
                                      const gl::ImageIndex &index,
                                      GLenum internalFormat,
                                      GLenum type,
                                      size_t sourceLevel,
                                      bool unpackFlipY,
                                      bool unpackPremultiplyAlpha,
                                      bool unpackUnmultiplyAlpha,
                                      const gl::Texture *source)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D);
 
     gl::TextureType sourceType = source->getType();
 
     const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat, type);
     gl::Extents size(
         static_cast<int>(source->getWidth(NonCubeTextureTypeToTarget(sourceType), sourceLevel)),
         static_cast<int>(source->getHeight(NonCubeTextureTypeToTarget(sourceType), sourceLevel)),
         1);
-    ANGLE_TRY(redefineImage(context, index.mipIndex, internalFormatInfo.sizedInternalFormat, size,
-                            false));
+    ANGLE_TRY(redefineImage(context, index.getLevelIndex(), internalFormatInfo.sizedInternalFormat,
+                            size, false));
 
     gl::Rectangle sourceRect(0, 0, size.width, size.height);
     gl::Offset destOffset(0, 0, 0);
 
-    if (!isSRGB(index.mipIndex) && canCreateRenderTargetForImage(index))
+    if (!isSRGB(index.getLevelIndex()) && canCreateRenderTargetForImage(index))
     {
         ANGLE_TRY(ensureRenderTarget(context));
-        ASSERT(isValidLevel(index.mipIndex));
-        ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+        ASSERT(isValidLevel(index.getLevelIndex()));
+        ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
 
         ANGLE_TRY(mRenderer->copyTexture(
             context, source, static_cast<GLint>(sourceLevel), sourceRect, internalFormatInfo.format,
-            internalFormatInfo.type, destOffset, mTexStorage, index.target, index.mipIndex,
-            unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
+            internalFormatInfo.type, destOffset, mTexStorage, index.getTarget(),
+            index.getLevelIndex(), unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
     }
     else
     {
         gl::ImageIndex sourceImageIndex = gl::ImageIndex::Make2D(static_cast<GLint>(sourceLevel));
         TextureD3D *sourceD3D           = GetImplAs<TextureD3D>(source);
         ImageD3D *sourceImage           = nullptr;
         ANGLE_TRY(sourceD3D->getImageAndSyncFromStorage(context, sourceImageIndex, &sourceImage));
 
@@ -1099,30 +1106,30 @@ gl::Error TextureD3D_2D::copySubTexture(
                                         const gl::Offset &destOffset,
                                         size_t sourceLevel,
                                         const gl::Rectangle &sourceArea,
                                         bool unpackFlipY,
                                         bool unpackPremultiplyAlpha,
                                         bool unpackUnmultiplyAlpha,
                                         const gl::Texture *source)
 {
-    ASSERT(index.target == gl::TextureTarget::_2D);
-
-    if (!isSRGB(index.mipIndex) && canCreateRenderTargetForImage(index))
+    ASSERT(index.getTarget() == gl::TextureTarget::_2D);
+
+    if (!isSRGB(index.getLevelIndex()) && canCreateRenderTargetForImage(index))
     {
         ANGLE_TRY(ensureRenderTarget(context));
-        ASSERT(isValidLevel(index.mipIndex));
-        ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+        ASSERT(isValidLevel(index.getLevelIndex()));
+        ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
 
         const gl::InternalFormat &internalFormatInfo =
-            gl::GetSizedInternalFormatInfo(getInternalFormat(index.mipIndex));
+            gl::GetSizedInternalFormatInfo(getInternalFormat(index.getLevelIndex()));
         ANGLE_TRY(mRenderer->copyTexture(
             context, source, static_cast<GLint>(sourceLevel), sourceArea, internalFormatInfo.format,
-            internalFormatInfo.type, destOffset, mTexStorage, index.target, index.mipIndex,
-            unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
+            internalFormatInfo.type, destOffset, mTexStorage, index.getTarget(),
+            index.getLevelIndex(), unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
     }
     else
     {
         gl::ImageIndex sourceImageIndex = gl::ImageIndex::Make2D(static_cast<GLint>(sourceLevel));
         TextureD3D *sourceD3D           = GetImplAs<TextureD3D>(source);
         ImageD3D *sourceImage           = nullptr;
         ANGLE_TRY(sourceD3D->getImageAndSyncFromStorage(context, sourceImageIndex, &sourceImage));
 
@@ -1288,17 +1295,17 @@ gl::Error TextureD3D_2D::initMipmapImage
 gl::Error TextureD3D_2D::getRenderTarget(const gl::Context *context,
                                          const gl::ImageIndex &index,
                                          RenderTargetD3D **outRT)
 {
     ASSERT(!index.hasLayer());
 
     // ensure the underlying texture is created
     ANGLE_TRY(ensureRenderTarget(context));
-    ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+    ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
 
     return mTexStorage->getRenderTarget(context, index, outRT);
 }
 
 bool TextureD3D_2D::isValidLevel(int level) const
 {
     return (mTexStorage ? (level >= 0 && level < mTexStorage->getLevelCount()) : false);
 }
@@ -1343,17 +1350,17 @@ bool TextureD3D_2D::isLevelComplete(int 
         return false;
     }
 
     return true;
 }
 
 bool TextureD3D_2D::isImageComplete(const gl::ImageIndex &index) const
 {
-    return isLevelComplete(index.mipIndex);
+    return isLevelComplete(index.getLevelIndex());
 }
 
 // Constructs a native texture resource from the texture images
 gl::Error TextureD3D_2D::initializeStorage(const gl::Context *context, bool renderTarget)
 {
     // Only initialize the first time this texture is used as a render target or shader resource
     if (mTexStorage)
     {
@@ -1523,18 +1530,18 @@ gl::ImageIndexIterator TextureD3D_2D::im
 gl::ImageIndex TextureD3D_2D::getImageIndex(GLint mip, GLint /*layer*/) const
 {
     // "layer" does not apply to 2D Textures.
     return gl::ImageIndex::Make2D(mip);
 }
 
 bool TextureD3D_2D::isValidIndex(const gl::ImageIndex &index) const
 {
-    return (mTexStorage && index.type == gl::TextureType::_2D && index.mipIndex >= 0 &&
-            index.mipIndex < mTexStorage->getLevelCount());
+    return (mTexStorage && index.getType() == gl::TextureType::_2D && index.getLevelIndex() >= 0 &&
+            index.getLevelIndex() < mTexStorage->getLevelCount());
 }
 
 void TextureD3D_2D::markAllImagesDirty()
 {
     for (size_t i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
     {
         mImageArray[i]->markDirty();
     }
@@ -1576,19 +1583,19 @@ ImageD3D *TextureD3D_Cube::getImage(int 
 {
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(layer >= 0 && layer < 6);
     return mImageArray[layer][level].get();
 }
 
 ImageD3D *TextureD3D_Cube::getImage(const gl::ImageIndex &index) const
 {
-    ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
-    ASSERT(gl::TextureTargetToType(index.target) == gl::TextureType::CubeMap);
-    return mImageArray[index.cubeMapFaceIndex()][index.mipIndex].get();
+    ASSERT(index.getLevelIndex() < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
+    ASSERT(gl::TextureTargetToType(index.getTarget()) == gl::TextureType::CubeMap);
+    return mImageArray[index.cubeMapFaceIndex()][index.getLevelIndex()].get();
 }
 
 GLsizei TextureD3D_Cube::getLayerCount(int level) const
 {
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     return 6;
 }
 
@@ -1625,17 +1632,17 @@ gl::Error TextureD3D_Cube::setImage(cons
                                     GLenum format,
                                     GLenum type,
                                     const gl::PixelUnpackState &unpack,
                                     const uint8_t *pixels)
 {
     ASSERT(size.depth == 1);
 
     const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat, type);
-    ANGLE_TRY(redefineImage(context, index.cubeMapFaceIndex(), index.mipIndex,
+    ANGLE_TRY(redefineImage(context, index.cubeMapFaceIndex(), index.getLevelIndex(),
                             internalFormatInfo.sizedInternalFormat, size, false));
 
     return setImageImpl(context, index, type, unpack, pixels, 0);
 }
 
 gl::Error TextureD3D_Cube::setSubImage(const gl::Context *context,
                                        const gl::ImageIndex &index,
                                        const gl::Box &area,
@@ -1654,18 +1661,18 @@ gl::Error TextureD3D_Cube::setCompressed
                                               const gl::Extents &size,
                                               const gl::PixelUnpackState &unpack,
                                               size_t imageSize,
                                               const uint8_t *pixels)
 {
     ASSERT(size.depth == 1);
 
     // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
-    ANGLE_TRY(redefineImage(context, index.cubeMapFaceIndex(), index.mipIndex, internalFormat, size,
-                            false));
+    ANGLE_TRY(redefineImage(context, index.cubeMapFaceIndex(), index.getLevelIndex(),
+                            internalFormat, size, false));
 
     return setCompressedImageImpl(context, index, unpack, pixels, 0);
 }
 
 gl::Error TextureD3D_Cube::setCompressedSubImage(const gl::Context *context,
                                                  const gl::ImageIndex &index,
                                                  const gl::Box &area,
                                                  GLenum format,
@@ -1685,17 +1692,17 @@ gl::Error TextureD3D_Cube::copyImage(con
                                      GLenum internalFormat,
                                      gl::Framebuffer *source)
 {
     GLint faceIndex = index.cubeMapFaceIndex();
     const gl::InternalFormat &internalFormatInfo =
         gl::GetInternalFormatInfo(internalFormat, GL_UNSIGNED_BYTE);
 
     gl::Extents size(origSourceArea.width, origSourceArea.height, 1);
-    ANGLE_TRY(redefineImage(context, faceIndex, index.mipIndex,
+    ANGLE_TRY(redefineImage(context, faceIndex, index.getLevelIndex(),
                             internalFormatInfo.sizedInternalFormat, size, false));
 
     gl::Extents fbSize = source->getReadColorbuffer()->getSize();
 
     // Does the read area extend beyond the framebuffer?
     bool outside = origSourceArea.x < 0 || origSourceArea.y < 0 ||
                    origSourceArea.x + origSourceArea.width > fbSize.width ||
                    origSourceArea.y + origSourceArea.height > fbSize.height;
@@ -1718,32 +1725,32 @@ gl::Error TextureD3D_Cube::copyImage(con
     }
 
     gl::Offset destOffset(sourceArea.x - origSourceArea.x, sourceArea.y - origSourceArea.y, 0);
 
     // If the zero max LOD workaround is active, then we can't sample from individual layers of the framebuffer in shaders,
     // so we should use the non-rendering copy path.
     if (!canCreateRenderTargetForImage(index) || mRenderer->getWorkarounds().zeroMaxLodWorkaround)
     {
-        ANGLE_TRY(mImageArray[faceIndex][index.mipIndex]->copyFromFramebuffer(context, destOffset,
-                                                                              sourceArea, source));
+        ANGLE_TRY(mImageArray[faceIndex][index.getLevelIndex()]->copyFromFramebuffer(
+            context, destOffset, sourceArea, source));
         mDirtyImages = true;
     }
     else
     {
         ANGLE_TRY(ensureRenderTarget(context));
 
         ASSERT(size.width == size.height);
 
-        if (size.width > 0 && isValidFaceLevel(faceIndex, index.mipIndex))
+        if (size.width > 0 && isValidFaceLevel(faceIndex, index.getLevelIndex()))
         {
-            ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.mipIndex));
+            ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.getLevelIndex()));
             ANGLE_TRY(mRenderer->copyImageCube(context, source, sourceArea, internalFormat,
-                                               destOffset, mTexStorage, index.target,
-                                               index.mipIndex));
+                                               destOffset, mTexStorage, index.getTarget(),
+                                               index.getLevelIndex()));
         }
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_Cube::copySubImage(const gl::Context *context,
                                         const gl::ImageIndex &index,
@@ -1762,70 +1769,70 @@ gl::Error TextureD3D_Cube::copySubImage(
                                 origDestOffset.y + sourceArea.y - origSourceArea.y, 0);
 
     GLint faceIndex = index.cubeMapFaceIndex();
 
     // If the zero max LOD workaround is active, then we can't sample from individual layers of the framebuffer in shaders,
     // so we should use the non-rendering copy path.
     if (!canCreateRenderTargetForImage(index) || mRenderer->getWorkarounds().zeroMaxLodWorkaround)
     {
-        ANGLE_TRY(mImageArray[faceIndex][index.mipIndex]->copyFromFramebuffer(context, destOffset,
-                                                                              sourceArea, source));
+        ANGLE_TRY(mImageArray[faceIndex][index.getLevelIndex()]->copyFromFramebuffer(
+            context, destOffset, sourceArea, source));
         mDirtyImages = true;
     }
     else
     {
         ANGLE_TRY(ensureRenderTarget(context));
-        if (isValidFaceLevel(faceIndex, index.mipIndex))
+        if (isValidFaceLevel(faceIndex, index.getLevelIndex()))
         {
-            ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.mipIndex));
+            ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.getLevelIndex()));
             ANGLE_TRY(mRenderer->copyImageCube(
                 context, source, sourceArea, gl::GetUnsizedFormat(getBaseLevelInternalFormat()),
-                destOffset, mTexStorage, index.target, index.mipIndex));
+                destOffset, mTexStorage, index.getTarget(), index.getLevelIndex()));
         }
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_Cube::copyTexture(const gl::Context *context,
                                        const gl::ImageIndex &index,
                                        GLenum internalFormat,
                                        GLenum type,
                                        size_t sourceLevel,
                                        bool unpackFlipY,
                                        bool unpackPremultiplyAlpha,
                                        bool unpackUnmultiplyAlpha,
                                        const gl::Texture *source)
 {
-    ASSERT(gl::TextureTargetToType(index.target) == gl::TextureType::CubeMap);
+    ASSERT(gl::TextureTargetToType(index.getTarget()) == gl::TextureType::CubeMap);
 
     gl::TextureTarget sourceTarget = NonCubeTextureTypeToTarget(source->getType());
 
     GLint faceIndex = index.cubeMapFaceIndex();
 
     const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat, type);
     gl::Extents size(static_cast<int>(source->getWidth(sourceTarget, sourceLevel)),
                      static_cast<int>(source->getHeight(sourceTarget, sourceLevel)), 1);
-    ANGLE_TRY(redefineImage(context, faceIndex, index.mipIndex,
+    ANGLE_TRY(redefineImage(context, faceIndex, index.getLevelIndex(),
                             internalFormatInfo.sizedInternalFormat, size, false));
 
     gl::Rectangle sourceRect(0, 0, size.width, size.height);
     gl::Offset destOffset(0, 0, 0);
 
-    if (!isSRGB(index.mipIndex, faceIndex) && canCreateRenderTargetForImage(index))
+    if (!isSRGB(index.getLevelIndex(), faceIndex) && canCreateRenderTargetForImage(index))
     {
         ANGLE_TRY(ensureRenderTarget(context));
-        ASSERT(isValidFaceLevel(faceIndex, index.mipIndex));
-        ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.mipIndex));
+        ASSERT(isValidFaceLevel(faceIndex, index.getLevelIndex()));
+        ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.getLevelIndex()));
 
         ANGLE_TRY(mRenderer->copyTexture(
             context, source, static_cast<GLint>(sourceLevel), sourceRect, internalFormatInfo.format,
-            internalFormatInfo.type, destOffset, mTexStorage, index.target, index.mipIndex,
-            unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
+            internalFormatInfo.type, destOffset, mTexStorage, index.getTarget(),
+            index.getLevelIndex(), unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
     }
     else
     {
         gl::ImageIndex sourceImageIndex = gl::ImageIndex::Make2D(static_cast<GLint>(sourceLevel));
         TextureD3D *sourceD3D           = GetImplAs<TextureD3D>(source);
         ImageD3D *sourceImage           = nullptr;
         ANGLE_TRY(sourceD3D->getImageAndSyncFromStorage(context, sourceImageIndex, &sourceImage));
 
@@ -1849,32 +1856,32 @@ gl::Error TextureD3D_Cube::copySubTextur
                                           const gl::Offset &destOffset,
                                           size_t sourceLevel,
                                           const gl::Rectangle &sourceArea,
                                           bool unpackFlipY,
                                           bool unpackPremultiplyAlpha,
                                           bool unpackUnmultiplyAlpha,
                                           const gl::Texture *source)
 {
-    ASSERT(gl::TextureTargetToType(index.target) == gl::TextureType::CubeMap);
+    ASSERT(gl::TextureTargetToType(index.getTarget()) == gl::TextureType::CubeMap);
 
     GLint faceIndex = index.cubeMapFaceIndex();
 
-    if (!isSRGB(index.mipIndex, faceIndex) && canCreateRenderTargetForImage(index))
+    if (!isSRGB(index.getLevelIndex(), faceIndex) && canCreateRenderTargetForImage(index))
     {
         ANGLE_TRY(ensureRenderTarget(context));
-        ASSERT(isValidFaceLevel(faceIndex, index.mipIndex));
-        ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.mipIndex));
+        ASSERT(isValidFaceLevel(faceIndex, index.getLevelIndex()));
+        ANGLE_TRY(updateStorageFaceLevel(context, faceIndex, index.getLevelIndex()));
 
         const gl::InternalFormat &internalFormatInfo =
-            gl::GetSizedInternalFormatInfo(getInternalFormat(index.mipIndex, faceIndex));
+            gl::GetSizedInternalFormatInfo(getInternalFormat(index.getLevelIndex(), faceIndex));
         ANGLE_TRY(mRenderer->copyTexture(
             context, source, static_cast<GLint>(sourceLevel), sourceArea, internalFormatInfo.format,
-            internalFormatInfo.type, destOffset, mTexStorage, index.target, index.mipIndex,
-            unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
+            internalFormatInfo.type, destOffset, mTexStorage, index.getTarget(),
+            index.getLevelIndex(), unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
     }
     else
     {
         gl::ImageIndex sourceImageIndex = gl::ImageIndex::Make2D(static_cast<GLint>(sourceLevel));
         TextureD3D *sourceD3D           = GetImplAs<TextureD3D>(source);
         ImageD3D *sourceImage           = nullptr;
         ANGLE_TRY(sourceD3D->getImageAndSyncFromStorage(context, sourceImageIndex, &sourceImage));
 
@@ -1996,21 +2003,21 @@ gl::Error TextureD3D_Cube::initMipmapIma
     }
     return gl::NoError();
 }
 
 gl::Error TextureD3D_Cube::getRenderTarget(const gl::Context *context,
                                            const gl::ImageIndex &index,
                                            RenderTargetD3D **outRT)
 {
-    ASSERT(gl::TextureTargetToType(index.target) == gl::TextureType::CubeMap);
+    ASSERT(gl::TextureTargetToType(index.getTarget()) == gl::TextureType::CubeMap);
 
     // ensure the underlying texture is created
     ANGLE_TRY(ensureRenderTarget(context));
-    ANGLE_TRY(updateStorageFaceLevel(context, index.cubeMapFaceIndex(), index.mipIndex));
+    ANGLE_TRY(updateStorageFaceLevel(context, index.cubeMapFaceIndex(), index.getLevelIndex()));
 
     return mTexStorage->getRenderTarget(context, index, outRT);
 }
 
 gl::Error TextureD3D_Cube::initializeStorage(const gl::Context *context, bool renderTarget)
 {
     // Only initialize the first time this texture is used as a render target or shader resource
     if (mTexStorage)
@@ -2165,17 +2172,17 @@ bool TextureD3D_Cube::isFaceLevelComplet
         return false;
     }
 
     return true;
 }
 
 bool TextureD3D_Cube::isImageComplete(const gl::ImageIndex &index) const
 {
-    return isFaceLevelComplete(index.cubeMapFaceIndex(), index.mipIndex);
+    return isFaceLevelComplete(index.cubeMapFaceIndex(), index.getLevelIndex());
 }
 
 gl::Error TextureD3D_Cube::updateStorageFaceLevel(const gl::Context *context,
                                                   int faceIndex,
                                                   int level)
 {
     ASSERT(level >= 0 && faceIndex < 6 && level < static_cast<int>(mImageArray[faceIndex].size()) &&
            mImageArray[faceIndex][level] != nullptr);
@@ -2232,19 +2239,19 @@ gl::ImageIndexIterator TextureD3D_Cube::
 gl::ImageIndex TextureD3D_Cube::getImageIndex(GLint mip, GLint layer) const
 {
     // The "layer" of the image index corresponds to the cube face
     return gl::ImageIndex::MakeCube(gl::CubeFaceIndexToTextureTarget(layer), mip);
 }
 
 bool TextureD3D_Cube::isValidIndex(const gl::ImageIndex &index) const
 {
-    return (mTexStorage && index.type == gl::TextureType::CubeMap &&
-            gl::TextureTargetToType(index.target) == gl::TextureType::CubeMap &&
-            index.mipIndex >= 0 && index.mipIndex < mTexStorage->getLevelCount());
+    return (mTexStorage && index.getType() == gl::TextureType::CubeMap &&
+            gl::TextureTargetToType(index.getTarget()) == gl::TextureType::CubeMap &&
+            index.getLevelIndex() >= 0 && index.getLevelIndex() < mTexStorage->getLevelCount());
 }
 
 void TextureD3D_Cube::markAllImagesDirty()
 {
     for (int dirtyLevel = 0; dirtyLevel < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; dirtyLevel++)
     {
         for (int dirtyFace = 0; dirtyFace < 6; dirtyFace++)
         {
@@ -2283,20 +2290,20 @@ ImageD3D *TextureD3D_3D::getImage(int le
 {
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(layer == 0);
     return mImageArray[level].get();
 }
 
 ImageD3D *TextureD3D_3D::getImage(const gl::ImageIndex &index) const
 {
-    ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
+    ASSERT(index.getLevelIndex() < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(!index.hasLayer());
-    ASSERT(index.type == gl::TextureType::_3D);
-    return mImageArray[index.mipIndex].get();
+    ASSERT(index.getType() == gl::TextureType::_3D);
+    return mImageArray[index.getLevelIndex()].get();
 }
 
 GLsizei TextureD3D_3D::getLayerCount(int level) const
 {
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     return 1;
 }
 
@@ -2349,42 +2356,42 @@ gl::Error TextureD3D_3D::setImage(const 
                                   const gl::ImageIndex &index,
                                   GLenum internalFormat,
                                   const gl::Extents &size,
                                   GLenum format,
                                   GLenum type,
                                   const gl::PixelUnpackState &unpack,
                                   const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_3D);
+    ASSERT(index.getTarget() == gl::TextureTarget::_3D);
     const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat, type);
 
-    ANGLE_TRY(redefineImage(context, index.mipIndex, internalFormatInfo.sizedInternalFormat, size,
-                            false));
+    ANGLE_TRY(redefineImage(context, index.getLevelIndex(), internalFormatInfo.sizedInternalFormat,
+                            size, false));
 
     bool fastUnpacked = false;
 
     // Attempt a fast gpu copy of the pixel data to the surface if the app bound an unpack buffer
     gl::Buffer *unpackBuffer =
         context->getGLState().getTargetBuffer(gl::BufferBinding::PixelUnpack);
     if (isFastUnpackable(unpackBuffer, internalFormatInfo.sizedInternalFormat) && !size.empty() &&
-        isLevelComplete(index.mipIndex))
+        isLevelComplete(index.getLevelIndex()))
     {
         // Will try to create RT storage if it does not exist
         RenderTargetD3D *destRenderTarget = nullptr;
         ANGLE_TRY(getRenderTarget(context, index, &destRenderTarget));
 
-        gl::Box destArea(0, 0, 0, getWidth(index.mipIndex), getHeight(index.mipIndex),
-                         getDepth(index.mipIndex));
+        gl::Box destArea(0, 0, 0, getWidth(index.getLevelIndex()), getHeight(index.getLevelIndex()),
+                         getDepth(index.getLevelIndex()));
 
         ANGLE_TRY(fastUnpackPixels(context, unpack, pixels, destArea,
                                    internalFormatInfo.sizedInternalFormat, type, destRenderTarget));
 
         // Ensure we don't overwrite our newly initialized data
-        mImageArray[index.mipIndex]->markClean();
+        mImageArray[index.getLevelIndex()]->markClean();
 
         fastUnpacked = true;
     }
 
     if (!fastUnpacked)
     {
         ANGLE_TRY(setImageImpl(context, index, type, unpack, pixels, 0));
     }
@@ -2395,27 +2402,27 @@ gl::Error TextureD3D_3D::setImage(const 
 gl::Error TextureD3D_3D::setSubImage(const gl::Context *context,
                                      const gl::ImageIndex &index,
                                      const gl::Box &area,
                                      GLenum format,
                                      GLenum type,
                                      const gl::PixelUnpackState &unpack,
                                      const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_3D);
+    ASSERT(index.getTarget() == gl::TextureTarget::_3D);
 
     // Attempt a fast gpu copy of the pixel data to the surface if the app bound an unpack buffer
     gl::Buffer *unpackBuffer =
         context->getGLState().getTargetBuffer(gl::BufferBinding::PixelUnpack);
-    GLenum mipFormat = getInternalFormat(index.mipIndex);
-    if (isFastUnpackable(unpackBuffer, mipFormat) && isLevelComplete(index.mipIndex))
+    GLenum mipFormat = getInternalFormat(index.getLevelIndex());
+    if (isFastUnpackable(unpackBuffer, mipFormat) && isLevelComplete(index.getLevelIndex()))
     {
         RenderTargetD3D *destRenderTarget = nullptr;
         ANGLE_TRY(getRenderTarget(context, index, &destRenderTarget));
-        ASSERT(!mImageArray[index.mipIndex]->isDirty());
+        ASSERT(!mImageArray[index.getLevelIndex()]->isDirty());
 
         return fastUnpackPixels(context, unpack, pixels, area, mipFormat, type, destRenderTarget);
     }
     else
     {
         return TextureD3D::subImage(context, index, area, format, type, unpack, pixels, 0);
     }
 }
@@ -2423,33 +2430,33 @@ gl::Error TextureD3D_3D::setSubImage(con
 gl::Error TextureD3D_3D::setCompressedImage(const gl::Context *context,
                                             const gl::ImageIndex &index,
                                             GLenum internalFormat,
                                             const gl::Extents &size,
                                             const gl::PixelUnpackState &unpack,
                                             size_t imageSize,
                                             const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_3D);
+    ASSERT(index.getTarget() == gl::TextureTarget::_3D);
 
     // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
-    ANGLE_TRY(redefineImage(context, index.mipIndex, internalFormat, size, false));
+    ANGLE_TRY(redefineImage(context, index.getLevelIndex(), internalFormat, size, false));
 
     return setCompressedImageImpl(context, index, unpack, pixels, 0);
 }
 
 gl::Error TextureD3D_3D::setCompressedSubImage(const gl::Context *context,
                                                const gl::ImageIndex &index,
                                                const gl::Box &area,
                                                GLenum format,
                                                const gl::PixelUnpackState &unpack,
                                                size_t imageSize,
                                                const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_3D);
+    ASSERT(index.getTarget() == gl::TextureTarget::_3D);
 
     ANGLE_TRY(TextureD3D::subImageCompressed(context, index, area, format, unpack, pixels, 0));
     return commitRegion(context, index, area);
 }
 
 gl::Error TextureD3D_3D::copyImage(const gl::Context *context,
                                    const gl::ImageIndex &index,
                                    const gl::Rectangle &sourceArea,
@@ -2461,17 +2468,17 @@ gl::Error TextureD3D_3D::copyImage(const
 }
 
 gl::Error TextureD3D_3D::copySubImage(const gl::Context *context,
                                       const gl::ImageIndex &index,
                                       const gl::Offset &destOffset,
                                       const gl::Rectangle &sourceArea,
                                       gl::Framebuffer *source)
 {
-    ASSERT(index.target == gl::TextureTarget::_3D);
+    ASSERT(index.getTarget() == gl::TextureTarget::_3D);
 
     gl::Extents fbSize = source->getReadColorbuffer()->getSize();
     gl::Rectangle clippedSourceArea;
     if (!ClipRectangle(sourceArea, gl::Rectangle(0, 0, fbSize.width, fbSize.height),
                        &clippedSourceArea))
     {
         return gl::NoError();
     }
@@ -2479,28 +2486,29 @@ gl::Error TextureD3D_3D::copySubImage(co
                                        destOffset.y + clippedSourceArea.y - sourceArea.y,
                                        destOffset.z);
 
     // Currently, copying directly to the storage is not possible because it's not possible to
     // create an SRV from a single layer of a 3D texture.  Instead, make sure the image is up to
     // date before the copy and then copy back to the storage afterwards if needed.
     // TODO: Investigate 3D blits in D3D11.
 
-    bool syncTexStorage = mTexStorage && isLevelComplete(index.mipIndex);
+    bool syncTexStorage = mTexStorage && isLevelComplete(index.getLevelIndex());
     if (syncTexStorage)
     {
-        ANGLE_TRY(mImageArray[index.mipIndex]->copyFromTexStorage(context, index, mTexStorage));
+        ANGLE_TRY(
+            mImageArray[index.getLevelIndex()]->copyFromTexStorage(context, index, mTexStorage));
     }
-    ANGLE_TRY(mImageArray[index.mipIndex]->copyFromFramebuffer(context, clippedDestOffset,
-                                                               clippedSourceArea, source));
+    ANGLE_TRY(mImageArray[index.getLevelIndex()]->copyFromFramebuffer(context, clippedDestOffset,
+                                                                      clippedSourceArea, source));
     mDirtyImages = true;
 
     if (syncTexStorage)
     {
-        ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+        ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_3D::setStorage(const gl::Context *context,
                                     gl::TextureType type,
                                     size_t levels,
@@ -2576,17 +2584,17 @@ gl::Error TextureD3D_3D::getRenderTarget
     ANGLE_TRY(ensureRenderTarget(context));
 
     if (index.hasLayer())
     {
         ANGLE_TRY(updateStorage(context));
     }
     else
     {
-        ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+        ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
     }
 
     return mTexStorage->getRenderTarget(context, index, outRT);
 }
 
 gl::Error TextureD3D_3D::initializeStorage(const gl::Context *context, bool renderTarget)
 {
     // Only initialize the first time this texture is used as a render target or shader resource
@@ -2722,17 +2730,17 @@ bool TextureD3D_3D::isLevelComplete(int 
         return false;
     }
 
     return true;
 }
 
 bool TextureD3D_3D::isImageComplete(const gl::ImageIndex &index) const
 {
-    return isLevelComplete(index.mipIndex);
+    return isLevelComplete(index.getLevelIndex());
 }
 
 gl::Error TextureD3D_3D::updateStorageLevel(const gl::Context *context, int level)
 {
     ASSERT(level >= 0 && level < static_cast<int>(mImageArray.size()) &&
            mImageArray[level] != nullptr);
     ASSERT(isLevelComplete(level));
 
@@ -2775,29 +2783,30 @@ gl::Error TextureD3D_3D::redefineImage(c
     }
 
     return gl::NoError();
 }
 
 gl::ImageIndexIterator TextureD3D_3D::imageIterator() const
 {
     return gl::ImageIndexIterator::Make3D(0, mTexStorage->getLevelCount(),
-                                          gl::ImageIndex::ENTIRE_LEVEL, gl::ImageIndex::ENTIRE_LEVEL);
+                                          gl::ImageIndex::kEntireLevel,
+                                          gl::ImageIndex::kEntireLevel);
 }
 
 gl::ImageIndex TextureD3D_3D::getImageIndex(GLint mip, GLint /*layer*/) const
 {
     // The "layer" here does not apply to 3D images. We use one Image per mip.
     return gl::ImageIndex::Make3D(mip);
 }
 
 bool TextureD3D_3D::isValidIndex(const gl::ImageIndex &index) const
 {
-    return (mTexStorage && index.type == gl::TextureType::_3D && index.mipIndex >= 0 &&
-            index.mipIndex < mTexStorage->getLevelCount());
+    return (mTexStorage && index.getType() == gl::TextureType::_3D && index.getLevelIndex() >= 0 &&
+            index.getLevelIndex() < mTexStorage->getLevelCount());
 }
 
 void TextureD3D_3D::markAllImagesDirty()
 {
     for (int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
     {
         mImageArray[i]->markDirty();
     }
@@ -2838,22 +2847,24 @@ ImageD3D *TextureD3D_2DArray::getImage(i
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT((layer == 0 && mLayerCounts[level] == 0) ||
            layer < mLayerCounts[level]);
     return (mImageArray[level] ? mImageArray[level][layer] : nullptr);
 }
 
 ImageD3D *TextureD3D_2DArray::getImage(const gl::ImageIndex &index) const
 {
-    ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
-    ASSERT(index.layerIndex != gl::ImageIndex::ENTIRE_LEVEL);
-    ASSERT((index.layerIndex == 0 && mLayerCounts[index.mipIndex] == 0) ||
-           index.layerIndex < mLayerCounts[index.mipIndex]);
-    ASSERT(index.type == gl::TextureType::_2DArray);
-    return (mImageArray[index.mipIndex] ? mImageArray[index.mipIndex][index.layerIndex] : nullptr);
+    ASSERT(index.getLevelIndex() < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
+    ASSERT(index.hasLayer());
+    ASSERT((index.getLayerIndex() == 0 && mLayerCounts[index.getLevelIndex()] == 0) ||
+           index.getLayerIndex() < mLayerCounts[index.getLevelIndex()]);
+    ASSERT(index.getType() == gl::TextureType::_2DArray);
+    return (mImageArray[index.getLevelIndex()]
+                ? mImageArray[index.getLevelIndex()][index.getLayerIndex()]
+                : nullptr);
 }
 
 GLsizei TextureD3D_2DArray::getLayerCount(int level) const
 {
     ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     return mLayerCounts[level];
 }
 
@@ -2889,122 +2900,123 @@ gl::Error TextureD3D_2DArray::setImage(c
                                        const gl::ImageIndex &index,
                                        GLenum internalFormat,
                                        const gl::Extents &size,
                                        GLenum format,
                                        GLenum type,
                                        const gl::PixelUnpackState &unpack,
                                        const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2DArray);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2DArray);
 
     const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat, type);
 
-    ANGLE_TRY(redefineImage(context, index.mipIndex, formatInfo.sizedInternalFormat, size, false));
+    ANGLE_TRY(
+        redefineImage(context, index.getLevelIndex(), formatInfo.sizedInternalFormat, size, false));
 
     GLsizei inputDepthPitch              = 0;
     ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(type, size.width, size.height, unpack.alignment,
                                                   unpack.rowLength, unpack.imageHeight),
                      inputDepthPitch);
 
     for (int i = 0; i < size.depth; i++)
     {
         const ptrdiff_t layerOffset = (inputDepthPitch * i);
-        gl::ImageIndex layerIndex   = gl::ImageIndex::Make2DArray(index.mipIndex, i);
+        gl::ImageIndex layerIndex   = gl::ImageIndex::Make2DArray(index.getLevelIndex(), i);
         ANGLE_TRY(setImageImpl(context, layerIndex, type, unpack, pixels, layerOffset));
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_2DArray::setSubImage(const gl::Context *context,
                                           const gl::ImageIndex &index,
                                           const gl::Box &area,
                                           GLenum format,
                                           GLenum type,
                                           const gl::PixelUnpackState &unpack,
                                           const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2DArray);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2DArray);
     const gl::InternalFormat &formatInfo =
-        gl::GetInternalFormatInfo(getInternalFormat(index.mipIndex), type);
+        gl::GetInternalFormatInfo(getInternalFormat(index.getLevelIndex()), type);
     GLsizei inputDepthPitch              = 0;
     ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(type, area.width, area.height, unpack.alignment,
                                                   unpack.rowLength, unpack.imageHeight),
                      inputDepthPitch);
 
     for (int i = 0; i < area.depth; i++)
     {
         int layer = area.z + i;
         const ptrdiff_t layerOffset = (inputDepthPitch * i);
 
         gl::Box layerArea(area.x, area.y, 0, area.width, area.height, 1);
 
-        gl::ImageIndex layerIndex = gl::ImageIndex::Make2DArray(index.mipIndex, layer);
+        gl::ImageIndex layerIndex = gl::ImageIndex::Make2DArray(index.getLevelIndex(), layer);
         ANGLE_TRY(TextureD3D::subImage(context, layerIndex, layerArea, format, type, unpack, pixels,
                                        layerOffset));
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_2DArray::setCompressedImage(const gl::Context *context,
                                                  const gl::ImageIndex &index,
                                                  GLenum internalFormat,
                                                  const gl::Extents &size,
                                                  const gl::PixelUnpackState &unpack,
                                                  size_t imageSize,
                                                  const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2DArray);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2DArray);
 
     // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
-    ANGLE_TRY(redefineImage(context, index.mipIndex, internalFormat, size, false));
+    ANGLE_TRY(redefineImage(context, index.getLevelIndex(), internalFormat, size, false));
 
     const gl::InternalFormat &formatInfo = gl::GetSizedInternalFormatInfo(internalFormat);
     GLsizei inputDepthPitch              = 0;
     ANGLE_TRY_RESULT(
         formatInfo.computeDepthPitch(GL_UNSIGNED_BYTE, size.width, size.height, 1, 0, 0),
         inputDepthPitch);
 
     for (int i = 0; i < size.depth; i++)
     {
         const ptrdiff_t layerOffset = (inputDepthPitch * i);
 
-        gl::ImageIndex layerIndex = gl::ImageIndex::Make2DArray(index.mipIndex, i);
+        gl::ImageIndex layerIndex = gl::ImageIndex::Make2DArray(index.getLevelIndex(), i);
         ANGLE_TRY(setCompressedImageImpl(context, layerIndex, unpack, pixels, layerOffset));
     }
 
     return gl::NoError();
 }
 
 gl::Error TextureD3D_2DArray::setCompressedSubImage(const gl::Context *context,
                                                     const gl::ImageIndex &index,
                                                     const gl::Box &area,
                                                     GLenum format,
                                                     const gl::PixelUnpackState &unpack,
                                                     size_t imageSize,
                                                     const uint8_t *pixels)
 {
-    ASSERT(index.target == gl::TextureTarget::_2DArray);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2DArray);
 
     const gl::InternalFormat &formatInfo = gl::GetSizedInternalFormatInfo(format);
     GLsizei inputDepthPitch              = 0;
     ANGLE_TRY_RESULT(
         formatInfo.computeDepthPitch(GL_UNSIGNED_BYTE, area.width, area.height, 1, 0, 0),
         inputDepthPitch);
 
     for (int i = 0; i < area.depth; i++)
     {
         int layer = area.z + i;
         const ptrdiff_t layerOffset = (inputDepthPitch * i);
 
         gl::Box layerArea(area.x, area.y, 0, area.width, area.height, 1);
 
-        gl::ImageIndex layerIndex = gl::ImageIndex::Make2DArray(index.mipIndex, layer);
+        gl::ImageIndex layerIndex = gl::ImageIndex::Make2DArray(index.getLevelIndex(), layer);
         ANGLE_TRY(TextureD3D::subImageCompressed(context, layerIndex, layerArea, format, unpack,
                                                  pixels, layerOffset));
         ANGLE_TRY(commitRegion(context, layerIndex, layerArea));
     }
 
     return gl::NoError();
 }
 
@@ -3019,47 +3031,47 @@ gl::Error TextureD3D_2DArray::copyImage(
 }
 
 gl::Error TextureD3D_2DArray::copySubImage(const gl::Context *context,
                                            const gl::ImageIndex &index,
                                            const gl::Offset &destOffset,
                                            const gl::Rectangle &sourceArea,
                                            gl::Framebuffer *source)
 {
-    ASSERT(index.target == gl::TextureTarget::_2DArray);
+    ASSERT(index.getTarget() == gl::TextureTarget::_2DArray);
 
     gl::Extents fbSize = source->getReadColorbuffer()->getSize();
     gl::Rectangle clippedSourceArea;
     if (!ClipRectangle(sourceArea, gl::Rectangle(0, 0, fbSize.width, fbSize.height),
                        &clippedSourceArea))
     {
         return gl::NoError();
     }
     const gl::Offset clippedDestOffset(destOffset.x + clippedSourceArea.x - sourceArea.x,
                                        destOffset.y + clippedSourceArea.y - sourceArea.y,
                                        destOffset.z);
 
     if (!canCreateRenderTargetForImage(index))
     {
         gl::Offset destLayerOffset(clippedDestOffset.x, clippedDestOffset.y, 0);
-        ANGLE_TRY(mImageArray[index.mipIndex][clippedDestOffset.z]->copyFromFramebuffer(
+        ANGLE_TRY(mImageArray[index.getLevelIndex()][clippedDestOffset.z]->copyFromFramebuffer(
             context, destLayerOffset, clippedSourceArea, source));
         mDirtyImages = true;
     }
     else
     {
         ANGLE_TRY(ensureRenderTarget(context));
 
-        if (isValidLevel(index.mipIndex))
+        if (isValidLevel(index.getLevelIndex()))
         {
-            ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+            ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
             ANGLE_TRY(
                 mRenderer->copyImage2DArray(context, source, clippedSourceArea,
                                             gl::GetUnsizedFormat(getInternalFormat(getBaseLevel())),
-                                            clippedDestOffset, mTexStorage, index.mipIndex));
+                                            clippedDestOffset, mTexStorage, index.getLevelIndex()));
         }
     }
     return gl::NoError();
 }
 
 gl::Error TextureD3D_2DArray::setStorage(const gl::Context *context,
                                          gl::TextureType type,
                                          size_t levels,
@@ -3145,17 +3157,17 @@ gl::Error TextureD3D_2DArray::initMipmap
 }
 
 gl::Error TextureD3D_2DArray::getRenderTarget(const gl::Context *context,
                                               const gl::ImageIndex &index,
                                               RenderTargetD3D **outRT)
 {
     // ensure the underlying texture is created
     ANGLE_TRY(ensureRenderTarget(context));
-    ANGLE_TRY(updateStorageLevel(context, index.mipIndex));
+    ANGLE_TRY(updateStorageLevel(context, index.getLevelIndex()));
     return mTexStorage->getRenderTarget(context, index, outRT);
 }
 
 gl::Error TextureD3D_2DArray::initializeStorage(const gl::Context *context, bool renderTarget)
 {
     // Only initialize the first time this texture is used as a render target or shader resource
     if (mTexStorage)
     {
@@ -3294,17 +3306,17 @@ bool TextureD3D_2DArray::isLevelComplete
         return false;
     }
 
     return true;
 }
 
 bool TextureD3D_2DArray::isImageComplete(const gl::ImageIndex &index) const
 {
-    return isLevelComplete(index.mipIndex);
+    return isLevelComplete(index.getLevelIndex());
 }
 
 gl::Error TextureD3D_2DArray::updateStorageLevel(const gl::Context *context, int level)
 {
     ASSERT(level >= 0 && level < static_cast<int>(ArraySize(mLayerCounts)));
     ASSERT(isLevelComplete(level));
 
     for (int layer = 0; layer < mLayerCounts[level]; layer++)
@@ -3408,29 +3420,30 @@ gl::ImageIndexIterator TextureD3D_2DArra
 gl::ImageIndex TextureD3D_2DArray::getImageIndex(GLint mip, GLint layer) const
 {
     return gl::ImageIndex::Make2DArray(mip, layer);
 }
 
 bool TextureD3D_2DArray::isValidIndex(const gl::ImageIndex &index) const
 {
     // Check for having a storage and the right type of index
-    if (!mTexStorage || index.type != gl::TextureType::_2DArray)
+    if (!mTexStorage || index.getType() != gl::TextureType::_2DArray)
     {
         return false;
     }
 
     // Check the mip index
-    if (index.mipIndex < 0 || index.mipIndex >= mTexStorage->getLevelCount())
+    if (index.getLevelIndex() < 0 || index.getLevelIndex() >= mTexStorage->getLevelCount())
     {
         return false;
     }
 
     // Check the layer index
-    return (!index.hasLayer() || (index.layerIndex >= 0 && index.layerIndex < mLayerCounts[index.mipIndex]));
+    return (!index.hasLayer() || (index.getLayerIndex() >= 0 &&
+                                  index.getLayerIndex() < mLayerCounts[index.getLevelIndex()]));
 }
 
 void TextureD3D_2DArray::markAllImagesDirty()
 {
     for (int dirtyLevel = 0; dirtyLevel < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; dirtyLevel++)
     {
         for (int dirtyLayer = 0; dirtyLayer < mLayerCounts[dirtyLevel]; dirtyLayer++)
         {
@@ -3597,17 +3610,17 @@ gl::Error TextureD3D_External::getRender
                                                RenderTargetD3D **outRT)
 {
     UNREACHABLE();
     return gl::InternalError();
 }
 
 bool TextureD3D_External::isImageComplete(const gl::ImageIndex &index) const
 {
-    return (index.mipIndex == 0) ? (mTexStorage != nullptr) : false;
+    return (index.getLevelIndex() == 0) ? (mTexStorage != nullptr) : false;
 }
 
 gl::Error TextureD3D_External::initializeStorage(const gl::Context *context, bool renderTarget)
 {
     // Texture storage is created when an external image is bound
     ASSERT(mTexStorage);
     return gl::NoError();
 }
@@ -3642,17 +3655,18 @@ gl::ImageIndexIterator TextureD3D_Extern
 gl::ImageIndex TextureD3D_External::getImageIndex(GLint mip, GLint /*layer*/) const
 {
     // "layer" does not apply to 2D Textures.
     return gl::ImageIndex::Make2D(mip);
 }
 
 bool TextureD3D_External::isValidIndex(const gl::ImageIndex &index) const
 {
-    return (mTexStorage && index.type == gl::TextureType::External && index.mipIndex == 0);
+    return (mTexStorage && index.getType() == gl::TextureType::External &&
+            index.getLevelIndex() == 0);
 }
 
 void TextureD3D_External::markAllImagesDirty()
 {
     UNREACHABLE();
 }
 
 TextureD3D_2DMultisample::TextureD3D_2DMultisample(const gl::TextureState &state,
@@ -3802,17 +3816,18 @@ gl::ImageIndexIterator TextureD3D_2DMult
 
 gl::ImageIndex TextureD3D_2DMultisample::getImageIndex(GLint mip, GLint layer) const
 {
     return gl::ImageIndex::Make2DMultisample();
 }
 
 bool TextureD3D_2DMultisample::isValidIndex(const gl::ImageIndex &index) const
 {
-    return (mTexStorage && index.type == gl::TextureType::_2DMultisample && index.mipIndex == 0);
+    return (mTexStorage && index.getType() == gl::TextureType::_2DMultisample &&
+            index.getLevelIndex() == 0);
 }
 
 GLsizei TextureD3D_2DMultisample::getLayerCount(int level) const
 {
     return 1;
 }
 
 void TextureD3D_2DMultisample::markAllImagesDirty()
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureD3D.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureD3D.h
@@ -93,17 +93,18 @@ class TextureD3D : public TextureImpl
 
     gl::Error getAttachmentRenderTarget(const gl::Context *context,
                                         GLenum binding,
                                         const gl::ImageIndex &imageIndex,
                                         FramebufferAttachmentRenderTarget **rtOut) override;
 
     gl::Error setBaseLevel(const gl::Context *context, GLuint baseLevel) override;
 
-    void syncState(const gl::Texture::DirtyBits &dirtyBits) override;
+    gl::Error syncState(const gl::Context *context,
+                        const gl::Texture::DirtyBits &dirtyBits) override;
 
     gl::Error initializeContents(const gl::Context *context,
                                  const gl::ImageIndex &imageIndex) override;
 
   protected:
     gl::Error setImageImpl(const gl::Context *context,
                            const gl::ImageIndex &index,
                            GLenum type,
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureStorage.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/TextureStorage.h
@@ -13,17 +13,17 @@
 #include "libANGLE/angletypes.h"
 
 #include <GLES2/gl2.h>
 #include <stdint.h>
 
 namespace gl
 {
 class Context;
-struct ImageIndex;
+class ImageIndex;
 struct Box;
 struct PixelUnpackState;
 }  // namespace gl
 
 namespace angle
 {
 class Subject;
 }  // namespace angle
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp
@@ -1493,17 +1493,20 @@ gl::Error Blit11::copyAndConvertImpl(con
     }
 
     // Clip dest area to the destination size
     gl::Rectangle clipRect = gl::Rectangle(0, 0, destSize.width, destSize.height);
 
     // Clip dest area to the scissor
     if (scissor)
     {
-        gl::ClipRectangle(clipRect, *scissor, &clipRect);
+        if (!gl::ClipRectangle(clipRect, *scissor, &clipRect))
+        {
+            return gl::NoError();
+        }
     }
 
     convertFunction(sourceArea, destArea, clipRect, sourceSize, sourceMapping.RowPitch,
                     destMapping.RowPitch, readOffset, writeOffset, copySize, srcPixelStride,
                     destPixelStride, static_cast<const uint8_t *>(sourceMapping.pData),
                     static_cast<uint8_t *>(destMapping.pData));
 
     deviceContext->Unmap(sourceStaging.get(), 0);
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
@@ -184,17 +184,17 @@ BufferImpl *Context11::createBuffer(cons
     return buffer;
 }
 
 VertexArrayImpl *Context11::createVertexArray(const gl::VertexArrayState &data)
 {
     return new VertexArray11(data);
 }
 
-QueryImpl *Context11::createQuery(GLenum type)
+QueryImpl *Context11::createQuery(gl::QueryType type)
 {
     return new Query11(mRenderer, type);
 }
 
 FenceNVImpl *Context11::createFenceNV()
 {
     return new FenceNV11(mRenderer);
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Context11.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Context11.h
@@ -40,17 +40,17 @@ class Context11 : public ContextImpl
 
     // Buffer creation
     BufferImpl *createBuffer(const gl::BufferState &state) override;
 
     // Vertex Array creation
     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override;
+    QueryImpl *createQuery(gl::QueryType type) override;
     FenceNVImpl *createFenceNV() override;
     SyncImpl *createSync() override;
 
     // Transform Feedback creation
     TransformFeedbackImpl *createTransformFeedback(
         const gl::TransformFeedbackState &state) override;
 
     // Sampler object creation
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
@@ -10,18 +10,16 @@
 #include "libANGLE/renderer/d3d/d3d11/Fence11.h"
 #include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
 
 #include "common/utilities.h"
 
 namespace rx
 {
 
-static const int kDeviceLostCheckPeriod = 64;
-
 //
 // Template helpers for set and test operations.
 //
 
 template <class FenceClass>
 gl::Error FenceSetHelper(FenceClass *fence)
 {
     if (!fence->mQuery)
@@ -88,17 +86,18 @@ gl::Error FenceNV11::finish()
     GLboolean finished = GL_FALSE;
 
     int loopCount = 0;
     while (finished != GL_TRUE)
     {
         loopCount++;
         ANGLE_TRY(FenceTestHelper(this, true, &finished));
 
-        if (loopCount % kDeviceLostCheckPeriod == 0 && mRenderer->testDeviceLost())
+        bool checkDeviceLost = (loopCount % kPollingD3DDeviceLostCheckFrequency) == 0;
+        if (checkDeviceLost && mRenderer->testDeviceLost())
         {
             return gl::OutOfMemory() << "Device was lost while querying result of an event query.";
         }
 
         ScheduleYield();
     }
 
     return gl::NoError();
@@ -188,17 +187,18 @@ gl::Error Sync11::clientWait(GLbitfield 
 
         error = FenceTestHelper(this, flushCommandBuffer, &result);
         if (error.isError())
         {
             *outResult = GL_WAIT_FAILED;
             return error;
         }
 
-        if ((loopCount % kDeviceLostCheckPeriod) == 0 && mRenderer->testDeviceLost())
+        bool checkDeviceLost = (loopCount % kPollingD3DDeviceLostCheckFrequency) == 0;
+        if (checkDeviceLost && mRenderer->testDeviceLost())
         {
             *outResult = GL_WAIT_FAILED;
             return gl::OutOfMemory() << "Device was lost while querying result of an event query.";
         }
     }
 
     if (currentCounter.QuadPart >= endCounter)
     {
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp
@@ -370,17 +370,19 @@ gl::Error Framebuffer11::syncState(const
     if (mState.getDefaultWidth() != 0 || mState.getDefaultHeight() != 0)
     {
         mRenderer->getStateManager()->invalidateViewport(context);
     }
 
     return gl::NoError();
 }
 
-gl::Error Framebuffer11::getSamplePosition(size_t index, GLfloat *xy) const
+gl::Error Framebuffer11::getSamplePosition(const gl::Context *context,
+                                           size_t index,
+                                           GLfloat *xy) const
 {
     const gl::FramebufferAttachment *attachment = mState.getFirstNonNullAttachment();
     ASSERT(attachment);
     GLsizei sampleCount = attachment->getSamples();
 
     d3d11_gl::GetSamplePosition(sampleCount, index, xy);
     return gl::NoError();
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h
@@ -45,17 +45,19 @@ class Framebuffer11 : public Framebuffer
     }
     const RenderTarget11 *getCachedDepthStencilRenderTarget() const
     {
         return mRenderTargetCache.getDepthStencil();
     }
 
     RenderTarget11 *getFirstRenderTarget() const;
 
-    gl::Error getSamplePosition(size_t index, GLfloat *xy) const override;
+    gl::Error getSamplePosition(const gl::Context *context,
+                                size_t index,
+                                GLfloat *xy) const override;
 
   private:
     gl::Error clearImpl(const gl::Context *context, const ClearParameters &clearParams) override;
 
     gl::Error readPixelsImpl(const gl::Context *context,
                              const gl::Rectangle &area,
                              GLenum format,
                              GLenum type,
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Image11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Image11.cpp
@@ -25,17 +25,17 @@ namespace rx
 
 Image11::Image11(Renderer11 *renderer)
     : mRenderer(renderer),
       mDXGIFormat(DXGI_FORMAT_UNKNOWN),
       mStagingTexture(),
       mStagingSubresource(0),
       mRecoverFromStorage(false),
       mAssociatedStorage(nullptr),
-      mAssociatedImageIndex(gl::ImageIndex::MakeInvalid()),
+      mAssociatedImageIndex(),
       mRecoveredFromStorageCount(0)
 {
 }
 
 Image11::~Image11()
 {
     disassociateStorage();
     releaseStagingTexture();
@@ -219,17 +219,17 @@ void Image11::disassociateStorage()
 {
     if (mRecoverFromStorage)
     {
         // Make the texturestorage release the Image11 too
         mAssociatedStorage->disassociateImage(mAssociatedImageIndex, this);
 
         mRecoverFromStorage   = false;
         mAssociatedStorage    = nullptr;
-        mAssociatedImageIndex = gl::ImageIndex::MakeInvalid();
+        mAssociatedImageIndex = gl::ImageIndex();
     }
 }
 
 bool Image11::redefine(gl::TextureType type,
                        GLenum internalformat,
                        const gl::Extents &size,
                        bool forceRelease)
 {
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
@@ -12,56 +12,57 @@
 
 #include "common/utilities.h"
 #include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
 
 namespace
 {
 
-GLuint64 MergeQueryResults(GLenum type, GLuint64 currentResult, GLuint64 newResult)
+GLuint64 MergeQueryResults(gl::QueryType type, GLuint64 currentResult, GLuint64 newResult)
 {
     switch (type)
     {
-        case GL_ANY_SAMPLES_PASSED:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+        case gl::QueryType::AnySamples:
+        case gl::QueryType::AnySamplesConservative:
             return (currentResult == GL_TRUE || newResult == GL_TRUE) ? GL_TRUE : GL_FALSE;
 
-        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+        case gl::QueryType::TransformFeedbackPrimitivesWritten:
             return currentResult + newResult;
 
-        case GL_TIME_ELAPSED_EXT:
+        case gl::QueryType::TimeElapsed:
             return currentResult + newResult;
 
-        case GL_TIMESTAMP_EXT:
+        case gl::QueryType::Timestamp:
             return newResult;
 
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case gl::QueryType::CommandsCompleted:
             return newResult;
 
         default:
             UNREACHABLE();
             return 0;
     }
 }
 
 }  // anonymous namespace
 
 namespace rx
 {
 
-Query11::QueryState::QueryState() : query(), beginTimestamp(), endTimestamp(), finished(false)
+Query11::QueryState::QueryState()
+    : getDataAttemptCount(0), query(), beginTimestamp(), endTimestamp(), finished(false)
 {
 }
 
 Query11::QueryState::~QueryState()
 {
 }
 
-Query11::Query11(Renderer11 *renderer, GLenum type)
+Query11::Query11(Renderer11 *renderer, gl::QueryType type)
     : QueryImpl(type), mResult(0), mResultSum(0), mRenderer(renderer)
 {
     mActiveQuery = std::unique_ptr<QueryState>(new QueryState());
 }
 
 Query11::~Query11()
 {
     mRenderer->getStateManager()->onDeleteQueryObject(this);
@@ -77,17 +78,17 @@ gl::Error Query11::begin()
 gl::Error Query11::end()
 {
     return pause();
 }
 
 gl::Error Query11::queryCounter()
 {
     // This doesn't do anything for D3D11 as we don't support timestamps
-    ASSERT(getType() == GL_TIMESTAMP_EXT);
+    ASSERT(getType() == gl::QueryType::Timestamp);
     mResultSum = 0;
     mPendingQueries.push_back(std::unique_ptr<QueryState>(new QueryState()));
     return gl::NoError();
 }
 
 template <typename T>
 gl::Error Query11::getResultBase(T *params)
 {
@@ -127,20 +128,20 @@ gl::Error Query11::isResultAvailable(boo
     return gl::NoError();
 }
 
 gl::Error Query11::pause()
 {
     if (mActiveQuery->query.valid())
     {
         ID3D11DeviceContext *context = mRenderer->getDeviceContext();
-        GLenum queryType             = getType();
+        gl::QueryType type             = getType();
 
         // If we are doing time elapsed query the end timestamp
-        if (queryType == GL_TIME_ELAPSED_EXT)
+        if (type == gl::QueryType::TimeElapsed)
         {
             context->End(mActiveQuery->endTimestamp.get());
         }
 
         context->End(mActiveQuery->query.get());
 
         mPendingQueries.push_back(std::move(mActiveQuery));
         mActiveQuery = std::unique_ptr<QueryState>(new QueryState());
@@ -150,27 +151,27 @@ gl::Error Query11::pause()
 }
 
 gl::Error Query11::resume()
 {
     if (!mActiveQuery->query.valid())
     {
         ANGLE_TRY(flush(false));
 
-        GLenum queryType         = getType();
-        D3D11_QUERY d3dQueryType = gl_d3d11::ConvertQueryType(queryType);
+        gl::QueryType type         = getType();
+        D3D11_QUERY d3dQueryType = gl_d3d11::ConvertQueryType(type);
 
         D3D11_QUERY_DESC queryDesc;
         queryDesc.Query     = d3dQueryType;
         queryDesc.MiscFlags = 0;
 
         ANGLE_TRY(mRenderer->allocateResource(queryDesc, &mActiveQuery->query));
 
         // If we are doing time elapsed we also need a query to actually query the timestamp
-        if (queryType == GL_TIME_ELAPSED_EXT)
+        if (type == gl::QueryType::TimeElapsed)
         {
             D3D11_QUERY_DESC desc;
             desc.Query     = D3D11_QUERY_TIMESTAMP;
             desc.MiscFlags = 0;
 
             ANGLE_TRY(mRenderer->allocateResource(desc, &mActiveQuery->beginTimestamp));
             ANGLE_TRY(mRenderer->allocateResource(desc, &mActiveQuery->endTimestamp));
         }
@@ -178,17 +179,17 @@ gl::Error Query11::resume()
         ID3D11DeviceContext *context = mRenderer->getDeviceContext();
 
         if (d3dQueryType != D3D11_QUERY_EVENT)
         {
             context->Begin(mActiveQuery->query.get());
         }
 
         // If we are doing time elapsed, query the begin timestamp
-        if (queryType == GL_TIME_ELAPSED_EXT)
+        if (type == gl::QueryType::TimeElapsed)
         {
             context->End(mActiveQuery->beginTimestamp.get());
         }
     }
 
     return gl::NoError();
 }
 
@@ -216,18 +217,18 @@ gl::Error Query11::flush(bool force)
 
 gl::Error Query11::testQuery(QueryState *queryState)
 {
     if (!queryState->finished)
     {
         ID3D11DeviceContext *context = mRenderer->getDeviceContext();
         switch (getType())
         {
-            case GL_ANY_SAMPLES_PASSED_EXT:
-            case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+            case gl::QueryType::AnySamples:
+            case gl::QueryType::AnySamplesConservative:
             {
                 ASSERT(queryState->query.valid());
                 UINT64 numPixels = 0;
                 HRESULT result =
                     context->GetData(queryState->query.get(), &numPixels, sizeof(numPixels), 0);
                 if (FAILED(result))
                 {
                     return gl::OutOfMemory()
@@ -237,17 +238,17 @@ gl::Error Query11::testQuery(QueryState 
                 if (result == S_OK)
                 {
                     queryState->finished = true;
                     mResult              = (numPixels > 0) ? GL_TRUE : GL_FALSE;
                 }
             }
             break;
 
-            case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+            case gl::QueryType::TransformFeedbackPrimitivesWritten:
             {
                 ASSERT(queryState->query.valid());
                 D3D11_QUERY_DATA_SO_STATISTICS soStats = {0};
                 HRESULT result =
                     context->GetData(queryState->query.get(), &soStats, sizeof(soStats), 0);
                 if (FAILED(result))
                 {
                     return gl::OutOfMemory()
@@ -257,17 +258,17 @@ gl::Error Query11::testQuery(QueryState 
                 if (result == S_OK)
                 {
                     queryState->finished = true;
                     mResult              = static_cast<GLuint64>(soStats.NumPrimitivesWritten);
                 }
             }
             break;
 
-            case GL_TIME_ELAPSED_EXT:
+            case gl::QueryType::TimeElapsed:
             {
                 ASSERT(queryState->query.valid());
                 ASSERT(queryState->beginTimestamp.valid());
                 ASSERT(queryState->endTimestamp.valid());
                 D3D11_QUERY_DATA_TIMESTAMP_DISJOINT timeStats = {0};
                 HRESULT result =
                     context->GetData(queryState->query.get(), &timeStats, sizeof(timeStats), 0);
                 if (FAILED(result))
@@ -320,28 +321,28 @@ gl::Error Query11::testQuery(QueryState 
                             // is accurate, so we generate a disjoint event
                             mRenderer->setGPUDisjoint();
                         }
                     }
                 }
             }
             break;
 
-            case GL_TIMESTAMP_EXT:
+            case gl::QueryType::Timestamp:
             {
                 // D3D11 doesn't support GL timestamp queries as D3D timestamps are not guaranteed
                 // to have any sort of continuity outside of a disjoint timestamp query block, which
                 // GL depends on
                 ASSERT(!queryState->query.valid());
                 mResult              = 0;
                 queryState->finished = true;
             }
             break;
 
-            case GL_COMMANDS_COMPLETED_CHROMIUM:
+            case gl::QueryType::CommandsCompleted:
             {
                 ASSERT(queryState->query.valid());
                 BOOL completed = 0;
                 HRESULT result =
                     context->GetData(queryState->query.get(), &completed, sizeof(completed), 0);
                 if (FAILED(result))
                 {
                     return gl::OutOfMemory()
@@ -357,17 +358,20 @@ gl::Error Query11::testQuery(QueryState 
             }
             break;
 
             default:
                 UNREACHABLE();
                 break;
         }
 
-        if (!queryState->finished && mRenderer->testDeviceLost())
+        queryState->getDataAttemptCount++;
+        bool checkDeviceLost =
+            (queryState->getDataAttemptCount % kPollingD3DDeviceLostCheckFrequency) == 0;
+        if (!queryState->finished && checkDeviceLost && mRenderer->testDeviceLost())
         {
             mRenderer->notifyDeviceLost();
             return gl::OutOfMemory() << "Failed to test get query result, device is lost.";
         }
     }
 
     return gl::NoError();
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Query11.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Query11.h
@@ -16,17 +16,17 @@
 
 namespace rx
 {
 class Renderer11;
 
 class Query11 : public QueryImpl
 {
   public:
-    Query11(Renderer11 *renderer, GLenum type);
+    Query11(Renderer11 *renderer, gl::QueryType type);
     ~Query11() override;
 
     gl::Error begin() override;
     gl::Error end() override;
     gl::Error queryCounter() override;
     gl::Error getResult(GLint *params) override;
     gl::Error getResult(GLuint *params) override;
     gl::Error getResult(GLint64 *params) override;
@@ -37,16 +37,18 @@ class Query11 : public QueryImpl
     gl::Error resume();
 
   private:
     struct QueryState final : private angle::NonCopyable
     {
         QueryState();
         ~QueryState();
 
+        unsigned int getDataAttemptCount;
+
         d3d11::Query query;
         d3d11::Query beginTimestamp;
         d3d11::Query endTimestamp;
         bool finished;
     };
 
     gl::Error flush(bool force);
     gl::Error testQuery(QueryState *queryState);
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
@@ -1227,17 +1227,20 @@ gl::Error Renderer11::finish()
         }
 
         if (result == S_FALSE)
         {
             // Keep polling, but allow other threads to do something useful first
             ScheduleYield();
         }
 
-        if (testDeviceLost())
+        // Attempt is incremented before checking if we should test for device loss so that device
+        // loss is not checked on the first iteration
+        bool checkDeviceLost = (attempt % kPollingD3DDeviceLostCheckFrequency) == 0;
+        if (checkDeviceLost && testDeviceLost())
         {
             mDisplay->notifyDeviceLost();
             return gl::OutOfMemory() << "Device was lost while waiting for sync.";
         }
     } while (result == S_FALSE);
 
     return gl::NoError();
 }
@@ -1251,17 +1254,17 @@ bool Renderer11::isValidNativeWindow(EGL
 #endif
 }
 
 NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window,
                                                 const egl::Config *config,
                                                 const egl::AttributeMap &attribs) const
 {
 #ifdef ANGLE_ENABLE_WINDOWS_STORE
-    UNUSED_VARIABLE(attribs);
+    ANGLE_UNUSED_VARIABLE(attribs);
     return new NativeWindow11WinRT(window, config->alphaSize > 0);
 #else
     return new NativeWindow11Win32(
         window, config->alphaSize > 0,
         attribs.get(EGL_DIRECT_COMPOSITION_ANGLE, EGL_FALSE) == EGL_TRUE);
 #endif
 }
 
@@ -1992,26 +1995,25 @@ unsigned int Renderer11::getReservedVert
 }
 
 unsigned int Renderer11::getReservedFragmentUniformVectors() const
 {
     // Driver uniforms are stored in a separate constant buffer
     return d3d11_gl::GetReservedFragmentUniformVectors(mRenderer11DeviceCaps.featureLevel);
 }
 
-unsigned int Renderer11::getReservedVertexUniformBuffers() const
+gl::ShaderMap<unsigned int> Renderer11::getReservedShaderUniformBuffers() const
 {
+    gl::ShaderMap<unsigned int> shaderReservedUniformBuffers = {};
+
     // we reserve one buffer for the application uniforms, and one for driver uniforms
-    return 2;
-}
-
-unsigned int Renderer11::getReservedFragmentUniformBuffers() const
-{
-    // we reserve one buffer for the application uniforms, and one for driver uniforms
-    return 2;
+    shaderReservedUniformBuffers[gl::ShaderType::Vertex]   = 2;
+    shaderReservedUniformBuffers[gl::ShaderType::Fragment] = 2;
+
+    return shaderReservedUniformBuffers;
 }
 
 d3d11::ANGLED3D11DeviceType Renderer11::getDeviceType() const
 {
     if (mCreatedWithDeviceEXT)
     {
         return d3d11::GetDeviceType(mDevice);
     }
@@ -2371,17 +2373,17 @@ gl::Error Renderer11::copyTexture(const 
         ANGLE_TRY(sourceStorage11->getResource(context, &sourceResource));
 
         gl::ImageIndex sourceIndex = gl::ImageIndex::Make2D(sourceLevel);
         UINT sourceSubresource     = sourceStorage11->getSubresourceIndex(sourceIndex);
 
         const TextureHelper11 *destResource = nullptr;
         ANGLE_TRY(destStorage11->getResource(context, &destResource));
 
-        gl::ImageIndex destIndex = gl::ImageIndex::MakeGeneric(destTarget, destLevel);
+        gl::ImageIndex destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel);
         UINT destSubresource     = destStorage11->getSubresourceIndex(destIndex);
 
         D3D11_BOX sourceBox{
             static_cast<UINT>(sourceRect.x),
             static_cast<UINT>(sourceRect.y),
             0u,
             static_cast<UINT>(sourceRect.x + sourceRect.width),
             static_cast<UINT>(sourceRect.y + sourceRect.height),
@@ -2392,17 +2394,17 @@ gl::Error Renderer11::copyTexture(const 
                                               destOffset.y, destOffset.z, sourceResource->get(),
                                               sourceSubresource, &sourceBox);
     }
     else
     {
         const d3d11::SharedSRV *sourceSRV = nullptr;
         ANGLE_TRY(sourceStorage11->getSRVLevels(context, sourceLevel, sourceLevel, &sourceSRV));
 
-        gl::ImageIndex destIndex             = gl::ImageIndex::MakeGeneric(destTarget, destLevel);
+        gl::ImageIndex destIndex = gl::ImageIndex::MakeFromTarget(destTarget, destLevel);
         RenderTargetD3D *destRenderTargetD3D = nullptr;
         ANGLE_TRY(destStorage11->getRenderTarget(context, destIndex, &destRenderTargetD3D));
 
         RenderTarget11 *destRenderTarget11 = GetAs<RenderTarget11>(destRenderTargetD3D);
 
         const d3d11::RenderTargetView &destRTV = destRenderTarget11->getRenderTargetView();
         ASSERT(destRTV.valid());
 
@@ -3229,109 +3231,79 @@ gl::Error Renderer11::blitRenderbufferRe
     const gl::Extents drawSize(drawRenderTarget->getWidth(), drawRenderTarget->getHeight(), 1);
 
     // From the spec:
     // "The actual region taken from the read framebuffer is limited to the intersection of the
     // source buffers being transferred, which may include the color buffer selected by the read
     // buffer, the depth buffer, and / or the stencil buffer depending on mask."
     // This means negative x and y are out of bounds, and not to be read from. We handle this here
     // by internally scaling the read and draw rectangles.
+
+    // Remove reversal from readRect to simplify further operations.
     gl::Rectangle readRect = readRectIn;
     gl::Rectangle drawRect = drawRectIn;
-
-    auto flip = [](int val) { return val >= 0 ? 1 : -1; };
-
-    if (readRect.x > readSize.width && readRect.width < 0)
+    if (readRect.isReversedX())
     {
-        int delta = readRect.x - readSize.width;
-        readRect.x -= delta;
-        readRect.width += delta;
-
-        int drawDelta = delta * flip(drawRect.width);
-        drawRect.x += drawDelta;
-        drawRect.width -= drawDelta;
+        readRect.x     = readRect.x + readRect.width;
+        readRect.width = -readRect.width;
+        drawRect.x     = drawRect.x + drawRect.width;
+        drawRect.width = -drawRect.width;
     }
-
-    if (readRect.y > readSize.height && readRect.height < 0)
+    if (readRect.isReversedY())
     {
-        int delta = readRect.y - readSize.height;
-        readRect.y -= delta;
-        readRect.height += delta;
-
-        int drawDelta = delta * flip(drawRect.height);
-        drawRect.y += drawDelta;
-        drawRect.height -= drawDelta;
+        readRect.y      = readRect.y + readRect.height;
+        readRect.height = -readRect.height;
+        drawRect.y      = drawRect.y + drawRect.height;
+        drawRect.height = -drawRect.height;
     }
 
-    auto readToDrawX       = [&drawRectIn, &readRectIn](int readOffset) {
-        double readToDrawScale =
-            static_cast<double>(drawRectIn.width) / static_cast<double>(readRectIn.width);
-        return static_cast<int>(round(static_cast<double>(readOffset) * readToDrawScale));
-    };
-    if (readRect.x < 0)
+    gl::Rectangle readBounds(0, 0, readSize.width, readSize.height);
+    gl::Rectangle inBoundsReadRect;
+    if (!gl::ClipRectangle(readRect, readBounds, &inBoundsReadRect))
     {
-        int readOffset = -readRect.x;
-        readRect.x += readOffset;
-        readRect.width -= readOffset;
-
-        int drawOffset = readToDrawX(readOffset);
-        drawRect.x += drawOffset;
-        drawRect.width -= drawOffset;
+        return gl::NoError();
     }
 
-    auto readToDrawY = [&drawRectIn, &readRectIn](int readOffset) {
-        double readToDrawScale =
-            static_cast<double>(drawRectIn.height) / static_cast<double>(readRectIn.height);
-        return static_cast<int>(round(static_cast<double>(readOffset) * readToDrawScale));
-    };
-    if (readRect.y < 0)
     {
-        int readOffset = -readRect.y;
-        readRect.y += readOffset;
-        readRect.height -= readOffset;
-
-        int drawOffset = readToDrawY(readOffset);
-        drawRect.y += drawOffset;
-        drawRect.height -= drawOffset;
-    }
-
-    if (readRect.x1() < 0)
-    {
-        int readOffset = -readRect.x1();
-        readRect.width += readOffset;
-
-        int drawOffset = readToDrawX(readOffset);
-        drawRect.width += drawOffset;
+        // Calculate the drawRect that corresponds to inBoundsReadRect.
+        auto readToDrawX = [&drawRect, &readRect](int readOffset) {
+            double readToDrawScale =
+                static_cast<double>(drawRect.width) / static_cast<double>(readRect.width);
+            return static_cast<int>(
+                round(static_cast<double>(readOffset - readRect.x) * readToDrawScale) + drawRect.x);
+        };
+        auto readToDrawY = [&drawRect, &readRect](int readOffset) {
+            double readToDrawScale =
+                static_cast<double>(drawRect.height) / static_cast<double>(readRect.height);
+            return static_cast<int>(
+                round(static_cast<double>(readOffset - readRect.y) * readToDrawScale) + drawRect.y);
+        };
+
+        gl::Rectangle drawRectMatchingInBoundsReadRect;
+        drawRectMatchingInBoundsReadRect.x = readToDrawX(inBoundsReadRect.x);
+        drawRectMatchingInBoundsReadRect.y = readToDrawY(inBoundsReadRect.y);
+        drawRectMatchingInBoundsReadRect.width =
+            readToDrawX(inBoundsReadRect.x1()) - drawRectMatchingInBoundsReadRect.x;
+        drawRectMatchingInBoundsReadRect.height =
+            readToDrawY(inBoundsReadRect.y1()) - drawRectMatchingInBoundsReadRect.y;
+        drawRect = drawRectMatchingInBoundsReadRect;
+        readRect = inBoundsReadRect;
     }
 
-    if (readRect.y1() < 0)
-    {
-        int readOffset = -readRect.y1();
-        readRect.height += readOffset;
-
-        int drawOffset = readToDrawY(readOffset);
-        drawRect.height += drawOffset;
-    }
-
-    if (readRect.x1() > readSize.width)
+    bool scissorNeeded = false;
+    if (scissor)
     {
-        int delta = readRect.x1() - readSize.width;
-        readRect.width -= delta;
-        drawRect.width -= delta * flip(drawRect.width);
+        gl::Rectangle scissoredDrawRect;
+        if (!gl::ClipRectangle(drawRect, *scissor, &scissoredDrawRect))
+        {
+            return gl::NoError();
+        }
+        scissorNeeded = scissoredDrawRect != drawRect;
     }
 
-    if (readRect.y1() > readSize.height)
-    {
-        int delta = readRect.y1() - readSize.height;
-        readRect.height -= delta;
-        drawRect.height -= delta * flip(drawRect.height);
-    }
-
-    bool scissorNeeded = scissor && gl::ClipRectangle(drawRect, *scissor, nullptr);
-
     const auto &destFormatInfo =
         gl::GetSizedInternalFormatInfo(drawRenderTarget->getInternalFormat());
     const auto &srcFormatInfo =
         gl::GetSizedInternalFormatInfo(readRenderTarget->getInternalFormat());
     const auto &formatSet    = drawRenderTarget11->getFormatSet();
     const auto &nativeFormat = formatSet.format();
 
     // Some blits require masking off emulated texture channels. eg: from RGBA8 to RGB8, we
@@ -3354,30 +3326,30 @@ gl::Error Renderer11::blitRenderbufferRe
     bool wholeBufferCopy = !scissorNeeded && !colorMaskingNeeded && readRect.x == 0 &&
                            readRect.width == readSize.width && readRect.y == 0 &&
                            readRect.height == readSize.height && drawRect.x == 0 &&
                            drawRect.width == drawSize.width && drawRect.y == 0 &&
                            drawRect.height == drawSize.height;
 
     bool stretchRequired = readRect.width != drawRect.width || readRect.height != drawRect.height;
 
-    bool flipRequired =
-        readRect.width < 0 || readRect.height < 0 || drawRect.width < 0 || drawRect.height < 0;
+    ASSERT(!readRect.isReversedX() && !readRect.isReversedY());
+    bool reversalRequired = drawRect.isReversedX() || drawRect.isReversedY();
 
     bool outOfBounds = readRect.x < 0 || readRect.x + readRect.width > readSize.width ||
                        readRect.y < 0 || readRect.y + readRect.height > readSize.height ||
                        drawRect.x < 0 || drawRect.x + drawRect.width > drawSize.width ||
                        drawRect.y < 0 || drawRect.y + drawRect.height > drawSize.height;
 
     bool partialDSBlit =
         (nativeFormat.depthBits > 0 && depthBlit) != (nativeFormat.stencilBits > 0 && stencilBlit);
 
     if (readRenderTarget11->getFormatSet().formatID ==
             drawRenderTarget11->getFormatSet().formatID &&
-        !stretchRequired && !outOfBounds && !flipRequired && !partialDSBlit &&
+        !stretchRequired && !outOfBounds && !reversalRequired && !partialDSBlit &&
         !colorMaskingNeeded && (!(depthBlit || stencilBlit) || wholeBufferCopy))
     {
         UINT dstX = drawRect.x;
         UINT dstY = drawRect.y;
 
         D3D11_BOX readBox;
         readBox.left   = readRect.x;
         readBox.right  = readRect.x + readRect.width;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
@@ -21,17 +21,17 @@
 #include "libANGLE/renderer/d3d/d3d11/RenderStateCache.h"
 #include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
 #include "libANGLE/renderer/d3d/d3d11/StateManager11.h"
 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
 
 namespace gl
 {
 class FramebufferAttachment;
-struct ImageIndex;
+class ImageIndex;
 }
 
 namespace rx
 {
 class Blit11;
 class Buffer11;
 class Clear11;
 class Context11;
@@ -152,18 +152,17 @@ class Renderer11 : public RendererD3D
     bool testDeviceLost() override;
     bool testDeviceResettable() override;
 
     std::string getRendererDescription() const;
     DeviceIdentifier getAdapterIdentifier() const override;
 
     unsigned int getReservedVertexUniformVectors() const;
     unsigned int getReservedFragmentUniformVectors() const;
-    unsigned int getReservedVertexUniformBuffers() const;
-    unsigned int getReservedFragmentUniformBuffers() const;
+    gl::ShaderMap<unsigned int> getReservedShaderUniformBuffers() const;
 
     bool getShareHandleSupport() const;
 
     int getMajorShaderModel() const override;
     int getMinorShaderModel() const override;
     std::string getShaderModelSuffix() const override;
 
     // Pixel operations
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
@@ -29,38 +29,38 @@
 
 namespace rx
 {
 
 namespace
 {
 bool ImageIndexConflictsWithSRV(const gl::ImageIndex &index, D3D11_SHADER_RESOURCE_VIEW_DESC desc)
 {
-    unsigned mipLevel  = index.mipIndex;
-    gl::TextureType textureType = index.type;
+    unsigned mipLevel           = index.getLevelIndex();
+    gl::TextureType textureType = index.getType();
 
     switch (desc.ViewDimension)
     {
         case D3D11_SRV_DIMENSION_TEXTURE2D:
         {
             bool allLevels         = (desc.Texture2D.MipLevels == std::numeric_limits<UINT>::max());
             unsigned int maxSrvMip = desc.Texture2D.MipLevels + desc.Texture2D.MostDetailedMip;
             maxSrvMip              = allLevels ? INT_MAX : maxSrvMip;
 
-            unsigned mipMin = index.mipIndex;
+            unsigned mipMin = index.getLevelIndex();
             unsigned mipMax = INT_MAX;
 
             return textureType == gl::TextureType::_2D &&
                    gl::RangeUI(mipMin, mipMax)
                        .intersects(gl::RangeUI(desc.Texture2D.MostDetailedMip, maxSrvMip));
         }
 
         case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:
         {
-            GLint layerIndex = index.layerIndex;
+            GLint layerIndex = index.getLayerIndex();
 
             bool allLevels = (desc.Texture2DArray.MipLevels == std::numeric_limits<UINT>::max());
             unsigned int maxSrvMip =
                 desc.Texture2DArray.MipLevels + desc.Texture2DArray.MostDetailedMip;
             maxSrvMip = allLevels ? INT_MAX : maxSrvMip;
 
             unsigned maxSlice = desc.Texture2DArray.FirstArraySlice + desc.Texture2DArray.ArraySize;
 
@@ -267,19 +267,19 @@ ShaderConstants11::ShaderConstants11()
 }
 
 ShaderConstants11::~ShaderConstants11()
 {
 }
 
 void ShaderConstants11::init(const gl::Caps &caps)
 {
-    mSamplerMetadataVS.resize(caps.maxVertexTextureImageUnits);
-    mSamplerMetadataPS.resize(caps.maxTextureImageUnits);
-    mSamplerMetadataCS.resize(caps.maxComputeTextureImageUnits);
+    mSamplerMetadataVS.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Vertex]);
+    mSamplerMetadataPS.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Fragment]);
+    mSamplerMetadataCS.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Compute]);
 }
 
 size_t ShaderConstants11::getRequiredBufferSize(gl::ShaderType shaderType) const
 {
     switch (shaderType)
     {
         case gl::ShaderType::Vertex:
             return sizeof(Vertex) + mSamplerMetadataVS.size() * sizeof(SamplerMetadata);
@@ -555,20 +555,16 @@ gl::Error ShaderConstants11::updateBuffe
            samplerData,
            sizeof(SamplerMetadata) * numSamplers);
 
     renderer->getDeviceContext()->Unmap(driverConstantBuffer.get(), 0);
 
     return gl::NoError();
 }
 
-static const GLenum QueryTypes[] = {GL_ANY_SAMPLES_PASSED, GL_ANY_SAMPLES_PASSED_CONSERVATIVE,
-                                    GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, GL_TIME_ELAPSED_EXT,
-                                    GL_COMMANDS_COMPLETED_CHROMIUM};
-
 StateManager11::StateManager11(Renderer11 *renderer)
     : mRenderer(renderer),
       mInternalDirtyBits(),
       mCurBlendColor(0, 0, 0, 0),
       mCurSampleMask(0),
       mCurStencilRef(0),
       mCurStencilBackRef(0),
       mCurStencilSize(0),
@@ -1591,19 +1587,19 @@ gl::Error StateManager11::onMakeCurrent(
     const gl::State &state = context->getGLState();
 
     for (Query11 *query : mCurrentQueries)
     {
         ANGLE_TRY(query->pause());
     }
     mCurrentQueries.clear();
 
-    for (GLenum queryType : QueryTypes)
+    for (gl::QueryType type : angle::AllEnums<gl::QueryType>())
     {
-        gl::Query *query = state.getActiveQuery(queryType);
+        gl::Query *query = state.getActiveQuery(type);
         if (query != nullptr)
         {
             Query11 *query11 = GetImplAs<Query11>(query);
             ANGLE_TRY(query11->resume());
             mCurrentQueries.insert(query11);
         }
     }
 
@@ -1732,38 +1728,41 @@ void StateManager11::unsetConflictingAtt
         uintptr_t resourcePtr = reinterpret_cast<uintptr_t>(resource);
         unsetConflictingSRVs(gl::ShaderType::Vertex, resourcePtr, nullptr);
         unsetConflictingSRVs(gl::ShaderType::Fragment, resourcePtr, nullptr);
     }
 }
 
 gl::Error StateManager11::initialize(const gl::Caps &caps, const gl::Extensions &extensions)
 {
-    mCurVertexSRVs.initialize(caps.maxVertexTextureImageUnits);
-    mCurPixelSRVs.initialize(caps.maxTextureImageUnits);
+    mCurVertexSRVs.initialize(caps.maxShaderTextureImageUnits[gl::ShaderType::Vertex]);
+    mCurPixelSRVs.initialize(caps.maxShaderTextureImageUnits[gl::ShaderType::Fragment]);
 
     // TODO(xinghua.cao@intel.com): need to add compute shader texture image units.
     mCurComputeSRVs.initialize(caps.maxImageUnits);
 
     mCurComputeUAVs.initialize(caps.maxImageUnits);
 
     // Initialize cached NULL SRV block
-    mNullSRVs.resize(caps.maxTextureImageUnits, nullptr);
+    mNullSRVs.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Fragment], nullptr);
 
     mNullUAVs.resize(caps.maxImageUnits, nullptr);
 
     mCurrentValueAttribs.resize(caps.maxVertexAttributes);
 
-    mForceSetVertexSamplerStates.resize(caps.maxVertexTextureImageUnits, true);
-    mForceSetPixelSamplerStates.resize(caps.maxTextureImageUnits, true);
-    mForceSetComputeSamplerStates.resize(caps.maxComputeTextureImageUnits, true);
-
-    mCurVertexSamplerStates.resize(caps.maxVertexTextureImageUnits);
-    mCurPixelSamplerStates.resize(caps.maxTextureImageUnits);
-    mCurComputeSamplerStates.resize(caps.maxComputeTextureImageUnits);
+    mForceSetVertexSamplerStates.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Vertex],
+                                        true);
+    mForceSetPixelSamplerStates.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Fragment],
+                                       true);
+    mForceSetComputeSamplerStates.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Compute],
+                                         true);
+
+    mCurVertexSamplerStates.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Vertex]);
+    mCurPixelSamplerStates.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Fragment]);
+    mCurComputeSamplerStates.resize(caps.maxShaderTextureImageUnits[gl::ShaderType::Compute]);
 
     mShaderConstants.init(caps);
 
     mIsMultiviewEnabled = extensions.multiview;
     mViewportOffsets.resize(1u);
 
     ANGLE_TRY(mVertexDataManager.initialize());
 
@@ -2028,26 +2027,26 @@ gl::Error StateManager11::updateState(co
     RenderTarget11 *firstRT = framebuffer11->getFirstRenderTarget();
     int samples             = (firstRT ? firstRT->getSamples() : 0);
     unsigned int sampleMask = GetBlendSampleMask(glState, samples);
     if (sampleMask != mCurSampleMask)
     {
         mInternalDirtyBits.set(DIRTY_BIT_BLEND_STATE);
     }
 
+    VertexArray11 *vao11 = GetImplAs<VertexArray11>(glState.getVertexArray());
+    ANGLE_TRY(vao11->syncStateForDraw(context, drawCallParams));
+
     // Changes in the draw call can affect the vertex buffer translations.
     if (!mLastFirstVertex.valid() || mLastFirstVertex.value() != drawCallParams.firstVertex())
     {
         mLastFirstVertex = drawCallParams.firstVertex();
         invalidateInputLayout();
     }
 
-    VertexArray11 *vao11 = GetImplAs<VertexArray11>(glState.getVertexArray());
-    ANGLE_TRY(vao11->syncStateForDraw(context, drawCallParams));
-
     if (drawCallParams.isDrawElements())
     {
         ANGLE_TRY(applyIndexBuffer(context, drawCallParams));
     }
 
     if (mLastAppliedDrawMode != drawCallParams.mode())
     {
         mLastAppliedDrawMode = drawCallParams.mode();
@@ -2433,18 +2432,18 @@ gl::Error StateManager11::applyTextures(
             ANGLE_TRY(setSamplerState(context, shaderType, samplerIndex, incompleteTexture,
                                       incompleteTexture->getSamplerState()));
             ANGLE_TRY(setTexture(context, shaderType, samplerIndex, incompleteTexture));
         }
     }
 
     // Set all the remaining textures to NULL
     size_t samplerCount = (shaderType == gl::ShaderType::Fragment)
-                              ? caps.maxTextureImageUnits
-                              : caps.maxVertexTextureImageUnits;
+                              ? caps.maxShaderTextureImageUnits[gl::ShaderType::Fragment]
+                              : caps.maxShaderTextureImageUnits[gl::ShaderType::Vertex];
     ANGLE_TRY(clearSRVs(shaderType, samplerRange, samplerCount));
 
     return gl::NoError();
 }
 
 gl::Error StateManager11::syncTextures(const gl::Context *context)
 {
     ANGLE_TRY(applyTextures(context, gl::ShaderType::Vertex));
@@ -2465,17 +2464,18 @@ gl::Error StateManager11::setSamplerStat
     ANGLE_TRY(textureD3D->getNativeTexture(context, &storage));
     ASSERT(storage);
 #endif  // !defined(NDEBUG)
 
     auto *deviceContext = mRenderer->getDeviceContext();
 
     if (type == gl::ShaderType::Fragment)
     {
-        ASSERT(static_cast<unsigned int>(index) < mRenderer->getNativeCaps().maxTextureImageUnits);
+        ASSERT(static_cast<unsigned int>(index) <
+               mRenderer->getNativeCaps().maxShaderTextureImageUnits[gl::ShaderType::Fragment]);
 
         if (mForceSetPixelSamplerStates[index] ||
             memcmp(&samplerState, &mCurPixelSamplerStates[index], sizeof(gl::SamplerState)) != 0)
         {
             ID3D11SamplerState *dxSamplerState = nullptr;
             ANGLE_TRY(mRenderer->getSamplerState(samplerState, &dxSamplerState));
 
             ASSERT(dxSamplerState != nullptr);
@@ -2484,17 +2484,17 @@ gl::Error StateManager11::setSamplerStat
             mCurPixelSamplerStates[index] = samplerState;
         }
 
         mForceSetPixelSamplerStates[index] = false;
     }
     else if (type == gl::ShaderType::Vertex)
     {
         ASSERT(static_cast<unsigned int>(index) <
-               mRenderer->getNativeCaps().maxVertexTextureImageUnits);
+               mRenderer->getNativeCaps().maxShaderTextureImageUnits[gl::ShaderType::Vertex]);
 
         if (mForceSetVertexSamplerStates[index] ||
             memcmp(&samplerState, &mCurVertexSamplerStates[index], sizeof(gl::SamplerState)) != 0)
         {
             ID3D11SamplerState *dxSamplerState = nullptr;
             ANGLE_TRY(mRenderer->getSamplerState(samplerState, &dxSamplerState));
 
             ASSERT(dxSamplerState != nullptr);
@@ -2503,17 +2503,17 @@ gl::Error StateManager11::setSamplerStat
             mCurVertexSamplerStates[index] = samplerState;
         }
 
         mForceSetVertexSamplerStates[index] = false;
     }
     else if (type == gl::ShaderType::Compute)
     {
         ASSERT(static_cast<unsigned int>(index) <
-               mRenderer->getNativeCaps().maxComputeTextureImageUnits);
+               mRenderer->getNativeCaps().maxShaderTextureImageUnits[gl::ShaderType::Compute]);
 
         if (mForceSetComputeSamplerStates[index] ||
             memcmp(&samplerState, &mCurComputeSamplerStates[index], sizeof(gl::SamplerState)) != 0)
         {
             ID3D11SamplerState *dxSamplerState = nullptr;
             ANGLE_TRY(mRenderer->getSamplerState(samplerState, &dxSamplerState));
 
             ASSERT(dxSamplerState != nullptr);
@@ -2559,21 +2559,22 @@ gl::Error StateManager11::setTexture(con
 
         // If we get an invalid SRV here, something went wrong in the texture class and we're
         // unexpectedly missing the shader resource view.
         ASSERT(textureSRV->valid());
 
         textureImpl->resetDirty();
     }
 
-    ASSERT(
-        (type == gl::ShaderType::Fragment &&
-         static_cast<unsigned int>(index) < mRenderer->getNativeCaps().maxTextureImageUnits) ||
-        (type == gl::ShaderType::Vertex &&
-         static_cast<unsigned int>(index) < mRenderer->getNativeCaps().maxVertexTextureImageUnits));
+    ASSERT((type == gl::ShaderType::Fragment &&
+            static_cast<unsigned int>(index) <
+                mRenderer->getNativeCaps().maxShaderTextureImageUnits[gl::ShaderType::Fragment]) ||
+           (type == gl::ShaderType::Vertex &&
+            static_cast<unsigned int>(index) <
+                mRenderer->getNativeCaps().maxShaderTextureImageUnits[gl::ShaderType::Vertex]));
 
     setShaderResourceInternal(type, index, textureSRV);
     return gl::NoError();
 }
 
 gl::Error StateManager11::syncTexturesForCompute(const gl::Context *context)
 {
     const auto &glState    = context->getGLState();
@@ -3072,19 +3073,19 @@ gl::Error StateManager11::generateSwizzl
     ANGLE_TRY(generateSwizzlesForShader(context, gl::ShaderType::Vertex));
     ANGLE_TRY(generateSwizzlesForShader(context, gl::ShaderType::Fragment));
     return gl::NoError();
 }
 
 gl::Error StateManager11::applyUniforms(ProgramD3D *programD3D)
 {
     UniformStorage11 *vertexUniformStorage =
-        GetAs<UniformStorage11>(&programD3D->getVertexUniformStorage());
+        GetAs<UniformStorage11>(programD3D->getShaderUniformStorage(gl::ShaderType::Vertex));
     UniformStorage11 *fragmentUniformStorage =
-        GetAs<UniformStorage11>(&programD3D->getFragmentUniformStorage());
+        GetAs<UniformStorage11>(programD3D->getShaderUniformStorage(gl::ShaderType::Fragment));
     ASSERT(vertexUniformStorage);
     ASSERT(fragmentUniformStorage);
 
     ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
 
     const d3d11::Buffer *vertexConstantBuffer = nullptr;
     ANGLE_TRY(vertexUniformStorage->getConstantBuffer(mRenderer, &vertexConstantBuffer));
     const d3d11::Buffer *pixelConstantBuffer = nullptr;
@@ -3175,17 +3176,17 @@ gl::Error StateManager11::applyDriverUni
     }
 
     return gl::NoError();
 }
 
 gl::Error StateManager11::applyComputeUniforms(ProgramD3D *programD3D)
 {
     UniformStorage11 *computeUniformStorage =
-        GetAs<UniformStorage11>(&programD3D->getComputeUniformStorage());
+        GetAs<UniformStorage11>(programD3D->getShaderUniformStorage(gl::ShaderType::Compute));
     ASSERT(computeUniformStorage);
 
     const d3d11::Buffer *constantBuffer = nullptr;
     ANGLE_TRY(computeUniformStorage->getConstantBuffer(mRenderer, &constantBuffer));
 
     ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
 
     if (computeUniformStorage->size() > 0 &&
@@ -3218,29 +3219,32 @@ gl::Error StateManager11::applyComputeUn
     ANGLE_TRY(mShaderConstants.updateBuffer(mRenderer, gl::ShaderType::Compute, *programD3D,
                                             mDriverConstantBufferCS));
 
     return gl::NoError();
 }
 
 gl::Error StateManager11::syncUniformBuffers(const gl::Context *context, ProgramD3D *programD3D)
 {
-    unsigned int reservedVertex   = mRenderer->getReservedVertexUniformBuffers();
-    unsigned int reservedFragment = mRenderer->getReservedFragmentUniformBuffers();
-
-    programD3D->updateUniformBufferCache(context->getCaps(), reservedVertex, reservedFragment);
-
-    const auto &vertexUniformBuffers     = programD3D->getVertexUniformBufferCache();
-    const auto &fragmentUniformBuffers   = programD3D->getFragmentUniformBufferCache();
+    gl::ShaderMap<unsigned int> shaderReservedUBOs = mRenderer->getReservedShaderUniformBuffers();
+    programD3D->updateUniformBufferCache(context->getCaps(), shaderReservedUBOs);
+
+    const auto &vertexUniformBuffers =
+        programD3D->getShaderUniformBufferCache(gl::ShaderType::Vertex);
+    const auto &fragmentUniformBuffers =
+        programD3D->getShaderUniformBufferCache(gl::ShaderType::Fragment);
     const auto &glState                  = context->getGLState();
     ID3D11DeviceContext *deviceContext   = mRenderer->getDeviceContext();
     ID3D11DeviceContext1 *deviceContext1 = mRenderer->getDeviceContext1IfSupported();
 
     mConstantBufferObserver.reset();
 
+    unsigned int reservedVertex   = shaderReservedUBOs[gl::ShaderType::Vertex];
+    unsigned int reservedFragment = shaderReservedUBOs[gl::ShaderType::Fragment];
+
     for (size_t bufferIndex = 0; bufferIndex < vertexUniformBuffers.size(); bufferIndex++)
     {
         GLint binding = vertexUniformBuffers[bufferIndex];
 
         if (binding == -1)
         {
             continue;
         }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp
@@ -194,18 +194,18 @@ int TextureStorage11::getLevelDepth(int 
 gl::Error TextureStorage11::getMippedResource(const gl::Context *context,
                                               const TextureHelper11 **outResource)
 {
     return getResource(context, outResource);
 }
 
 UINT TextureStorage11::getSubresourceIndex(const gl::ImageIndex &index) const
 {
-    UINT mipSlice    = static_cast<UINT>(index.mipIndex + mTopLevel);
-    UINT arraySlice  = static_cast<UINT>(index.hasLayer() ? index.layerIndex : 0);
+    UINT mipSlice    = static_cast<UINT>(index.getLevelIndex() + mTopLevel);
+    UINT arraySlice  = static_cast<UINT>(index.hasLayer() ? index.getLayerIndex() : 0);
     UINT subresource = D3D11CalcSubresource(mipSlice, arraySlice, mMipLevels);
     ASSERT(subresource != std::numeric_limits<UINT>::max());
     return subresource;
 }
 
 gl::Error TextureStorage11::getSRVForSampler(const gl::Context *context,
                                              const gl::TextureState &textureState,
                                              const d3d11::SharedSRV **outSRV)
@@ -506,17 +506,17 @@ void TextureStorage11::markDirty()
 gl::Error TextureStorage11::updateSubresourceLevel(const gl::Context *context,
                                                    const TextureHelper11 &srcTexture,
                                                    unsigned int sourceSubresource,
                                                    const gl::ImageIndex &index,
                                                    const gl::Box &copyArea)
 {
     ASSERT(srcTexture.valid());
 
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     markLevelDirty(level);
 
     gl::Extents texSize(getLevelWidth(level), getLevelHeight(level), getLevelDepth(level));
 
     bool fullCopy = copyArea.x == 0 && copyArea.y == 0 && copyArea.z == 0 &&
                     copyArea.width == texSize.width && copyArea.height == texSize.height &&
                     copyArea.depth == texSize.depth;
@@ -573,17 +573,17 @@ gl::Error TextureStorage11::copySubresou
                                                  const gl::Box &region)
 {
     ASSERT(dstTexture.valid());
 
     const TextureHelper11 *srcTexture = nullptr;
 
     // If the zero-LOD workaround is active and we want to update a level greater than zero, then we
     // should update the mipmapped texture, even if mapmaps are currently disabled.
-    if (index.mipIndex > 0 && mRenderer->getWorkarounds().zeroMaxLodWorkaround)
+    if (index.getLevelIndex() > 0 && mRenderer->getWorkarounds().zeroMaxLodWorkaround)
     {
         ANGLE_TRY(getMippedResource(context, &srcTexture));
     }
     else
     {
         ANGLE_TRY(getResource(context, &srcTexture));
     }
 
@@ -625,19 +625,19 @@ gl::Error TextureStorage11::copySubresou
 
     return gl::NoError();
 }
 
 gl::Error TextureStorage11::generateMipmap(const gl::Context *context,
                                            const gl::ImageIndex &sourceIndex,
                                            const gl::ImageIndex &destIndex)
 {
-    ASSERT(sourceIndex.layerIndex == destIndex.layerIndex);
-
-    markLevelDirty(destIndex.mipIndex);
+    ASSERT(sourceIndex.getLayerIndex() == destIndex.getLayerIndex());
+
+    markLevelDirty(destIndex.getLevelIndex());
 
     RenderTargetD3D *source = nullptr;
     ANGLE_TRY(getRenderTarget(context, sourceIndex, &source));
 
     RenderTargetD3D *dest = nullptr;
     ANGLE_TRY(getRenderTarget(context, destIndex, &dest));
 
     RenderTarget11 *rt11                   = GetAs<RenderTarget11>(source);
@@ -704,29 +704,29 @@ gl::Error TextureStorage11::setData(cons
                                     ImageD3D *image,
                                     const gl::Box *destBox,
                                     GLenum type,
                                     const gl::PixelUnpackState &unpack,
                                     const uint8_t *pixelData)
 {
     ASSERT(!image->isDirty());
 
-    markLevelDirty(index.mipIndex);
+    markLevelDirty(index.getLevelIndex());
 
     const TextureHelper11 *resource = nullptr;
     ANGLE_TRY(getResource(context, &resource));
     ASSERT(resource && resource->valid());
 
     UINT destSubresource = getSubresourceIndex(index);
 
     const gl::InternalFormat &internalFormatInfo =
         gl::GetInternalFormatInfo(image->getInternalFormat(), type);
 
-    gl::Box levelBox(0, 0, 0, getLevelWidth(index.mipIndex), getLevelHeight(index.mipIndex),
-                     getLevelDepth(index.mipIndex));
+    gl::Box levelBox(0, 0, 0, getLevelWidth(index.getLevelIndex()),
+                     getLevelHeight(index.getLevelIndex()), getLevelDepth(index.getLevelIndex()));
     bool fullUpdate = (destBox == nullptr || *destBox == levelBox);
     ASSERT(internalFormatInfo.depthBits == 0 || fullUpdate);
 
     // TODO(jmadill): Handle compressed formats
     // Compressed formats have different load syntax, so we'll have to handle them with slightly
     // different logic. Will implemnent this in a follow-up patch, and ensure we do not use SetData
     // with compressed formats in the calling logic.
     ASSERT(!internalFormatInfo.compressed);
@@ -737,19 +737,19 @@ gl::Error TextureStorage11::setData(cons
     GLuint srcRowPitch = 0;
     ANGLE_TRY_RESULT(
         internalFormatInfo.computeRowPitch(type, width, unpack.alignment, unpack.rowLength),
         srcRowPitch);
     GLuint srcDepthPitch = 0;
     ANGLE_TRY_RESULT(internalFormatInfo.computeDepthPitch(height, unpack.imageHeight, srcRowPitch),
                      srcDepthPitch);
     GLuint srcSkipBytes = 0;
-    ANGLE_TRY_RESULT(
-        internalFormatInfo.computeSkipBytes(type, srcRowPitch, srcDepthPitch, unpack, index.is3D()),
-        srcSkipBytes);
+    ANGLE_TRY_RESULT(internalFormatInfo.computeSkipBytes(type, srcRowPitch, srcDepthPitch, unpack,
+                                                         index.usesTex3D()),
+                     srcSkipBytes);
 
     const d3d11::Format &d3d11Format =
         d3d11::Format::Get(image->getInternalFormat(), mRenderer->getRenderer11DeviceCaps());
     const d3d11::DXGIFormatSize &dxgiFormatInfo =
         d3d11::GetDXGIFormatSizeInfo(d3d11Format.texFormat);
 
     const size_t outputPixelSize = dxgiFormatInfo.pixelBytes;
 
@@ -990,53 +990,53 @@ gl::Error TextureStorage11_2D::useLevelZ
         mSubject->onStateChange(context, angle::SubjectMessage::DEPENDENT_DIRTY_BITS);
     }
 
     return gl::NoError();
 }
 
 void TextureStorage11_2D::associateImage(Image11 *image, const gl::ImageIndex &index)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     if (0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
     {
         mAssociatedImages[level] = image;
     }
 }
 
 void TextureStorage11_2D::verifyAssociatedImageValid(const gl::ImageIndex &index,
                                                      Image11 *expectedImage)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     // This validation check should never return false. It means the Image/TextureStorage
     // association is broken.
     ASSERT(mAssociatedImages[level] == expectedImage);
 }
 
 // disassociateImage allows an Image to end its association with a Storage.
 void TextureStorage11_2D::disassociateImage(const gl::ImageIndex &index, Image11 *expectedImage)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(mAssociatedImages[level] == expectedImage);
     mAssociatedImages[level] = nullptr;
 }
 
 // releaseAssociatedImage prepares the Storage for a new Image association. It lets the old Image
 // recover its data before ending the association.
 gl::Error TextureStorage11_2D::releaseAssociatedImage(const gl::Context *context,
                                                       const gl::ImageIndex &index,
                                                       Image11 *incomingImage)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
 
     if (0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
     {
         // No need to let the old Image recover its data, if it is also the incoming Image.
         if (mAssociatedImages[level] != nullptr && mAssociatedImages[level] != incomingImage)
         {
@@ -1124,17 +1124,17 @@ gl::Error TextureStorage11_2D::ensureTex
 }
 
 gl::Error TextureStorage11_2D::getRenderTarget(const gl::Context *context,
                                                const gl::ImageIndex &index,
                                                RenderTargetD3D **outRT)
 {
     ASSERT(!index.hasLayer());
 
-    const int level = index.mipIndex;
+    const int level = index.getLevelIndex();
     ASSERT(level >= 0 && level < getLevelCount());
 
     // In GL ES 2.0, the application can only render to level zero of the texture (Section 4.4.3 of
     // the GLES 2.0 spec, page 113 of version 2.0.25). Other parts of TextureStorage11_2D could
     // create RTVs on non-zero levels of the texture (e.g. generateMipmap).
     // On Feature Level 9_3, this is unlikely to be useful. The renderer can't create SRVs on the
     // individual levels of the texture, so methods like generateMipmap can't do anything useful
     // with non-zero-level RTVs. Therefore if level > 0 on 9_3 then there's almost certainly
@@ -1428,39 +1428,39 @@ gl::Error TextureStorage11_External::cop
                                                    TextureStorage *destStorage)
 {
     UNIMPLEMENTED();
     return gl::NoError();
 }
 
 void TextureStorage11_External::associateImage(Image11 *image, const gl::ImageIndex &index)
 {
-    ASSERT(index.mipIndex == 0);
+    ASSERT(index.getLevelIndex() == 0);
     mAssociatedImage = image;
 }
 
 void TextureStorage11_External::verifyAssociatedImageValid(const gl::ImageIndex &index,
                                                            Image11 *expectedImage)
 {
-    ASSERT(index.mipIndex == 0 && mAssociatedImage == expectedImage);
+    ASSERT(index.getLevelIndex() == 0 && mAssociatedImage == expectedImage);
 }
 
 void TextureStorage11_External::disassociateImage(const gl::ImageIndex &index,
                                                   Image11 *expectedImage)
 {
-    ASSERT(index.mipIndex == 0);
+    ASSERT(index.getLevelIndex() == 0);
     ASSERT(mAssociatedImage == expectedImage);
     mAssociatedImage = nullptr;
 }
 
 gl::Error TextureStorage11_External::releaseAssociatedImage(const gl::Context *context,
                                                             const gl::ImageIndex &index,
                                                             Image11 *incomingImage)
 {
-    ASSERT(index.mipIndex == 0);
+    ASSERT(index.getLevelIndex() == 0);
 
     if (mAssociatedImage != nullptr && mAssociatedImage != incomingImage)
     {
         mAssociatedImage->verifyAssociatedStorageValid(this);
 
         ANGLE_TRY(mAssociatedImage->recoverFromAssociatedStorage(context));
     }
 
@@ -1602,17 +1602,17 @@ gl::Error TextureStorage11_EGLImage::get
     return gl::InternalError();
 }
 
 gl::Error TextureStorage11_EGLImage::getRenderTarget(const gl::Context *context,
                                                      const gl::ImageIndex &index,
                                                      RenderTargetD3D **outRT)
 {
     ASSERT(!index.hasLayer());
-    ASSERT(index.mipIndex == 0);
+    ASSERT(index.getLevelIndex() == 0);
 
     ANGLE_TRY(checkForUpdatedRenderTarget(context));
 
     return mImage->getRenderTarget(context, outRT);
 }
 
 gl::Error TextureStorage11_EGLImage::copyToStorage(const gl::Context *context,
                                                    TextureStorage *destStorage)
@@ -1861,25 +1861,25 @@ gl::Error TextureStorage11_Cube::onDestr
 TextureStorage11_Cube::~TextureStorage11_Cube()
 {
 }
 
 UINT TextureStorage11_Cube::getSubresourceIndex(const gl::ImageIndex &index) const
 {
     UINT arraySlice = index.cubeMapFaceIndex();
     if (mRenderer->getWorkarounds().zeroMaxLodWorkaround && mUseLevelZeroTexture &&
-        index.mipIndex == 0)
+        index.getLevelIndex() == 0)
     {
         UINT subresource = D3D11CalcSubresource(0, arraySlice, 1);
         ASSERT(subresource != std::numeric_limits<UINT>::max());
         return subresource;
     }
     else
     {
-        UINT mipSlice    = static_cast<UINT>(index.mipIndex + mTopLevel);
+        UINT mipSlice    = static_cast<UINT>(index.getLevelIndex() + mTopLevel);
         UINT subresource = D3D11CalcSubresource(mipSlice, arraySlice, mMipLevels);
         ASSERT(subresource != std::numeric_limits<UINT>::max());
         return subresource;
     }
 }
 
 gl::Error TextureStorage11_Cube::copyToStorage(const gl::Context *context,
                                                TextureStorage *destStorage)
@@ -1975,17 +1975,17 @@ gl::Error TextureStorage11_Cube::useLeve
         mUseLevelZeroTexture = false;
     }
 
     return gl::NoError();
 }
 
 void TextureStorage11_Cube::associateImage(Image11 *image, const gl::ImageIndex &index)
 {
-    const GLint level       = index.mipIndex;
+    const GLint level       = index.getLevelIndex();
     const GLint layerTarget = index.cubeMapFaceIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
 
     if (0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
     {
         if (0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT))
@@ -1993,45 +1993,45 @@ void TextureStorage11_Cube::associateIma
             mAssociatedImages[layerTarget][level] = image;
         }
     }
 }
 
 void TextureStorage11_Cube::verifyAssociatedImageValid(const gl::ImageIndex &index,
                                                        Image11 *expectedImage)
 {
-    const GLint level       = index.mipIndex;
+    const GLint level       = index.getLevelIndex();
     const GLint layerTarget = index.cubeMapFaceIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
     // This validation check should never return false. It means the Image/TextureStorage
     // association is broken.
     ASSERT(mAssociatedImages[layerTarget][level] == expectedImage);
 }
 
 // disassociateImage allows an Image to end its association with a Storage.
 void TextureStorage11_Cube::disassociateImage(const gl::ImageIndex &index, Image11 *expectedImage)
 {
-    const GLint level       = index.mipIndex;
+    const GLint level       = index.getLevelIndex();
     const GLint layerTarget = index.cubeMapFaceIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
     ASSERT(mAssociatedImages[layerTarget][level] == expectedImage);
     mAssociatedImages[layerTarget][level] = nullptr;
 }
 
 // releaseAssociatedImage prepares the Storage for a new Image association. It lets the old Image
 // recover its data before ending the association.
 gl::Error TextureStorage11_Cube::releaseAssociatedImage(const gl::Context *context,
                                                         const gl::ImageIndex &index,
                                                         Image11 *incomingImage)
 {
-    const GLint level       = index.mipIndex;
+    const GLint level       = index.getLevelIndex();
     const GLint layerTarget = index.cubeMapFaceIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
 
     if ((0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS))
     {
         if (0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT))
@@ -2118,17 +2118,17 @@ gl::Error TextureStorage11_Cube::ensureT
 
 gl::Error TextureStorage11_Cube::createRenderTargetSRV(const TextureHelper11 &texture,
                                                        const gl::ImageIndex &index,
                                                        DXGI_FORMAT resourceFormat,
                                                        d3d11::SharedSRV *srv) const
 {
     D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
     srvDesc.Format                         = resourceFormat;
-    srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + index.mipIndex;
+    srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + index.getLevelIndex();
     srvDesc.Texture2DArray.MipLevels       = 1;
     srvDesc.Texture2DArray.FirstArraySlice = index.cubeMapFaceIndex();
     srvDesc.Texture2DArray.ArraySize       = 1;
 
     if (mRenderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_10_0)
     {
         srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
     }
@@ -2142,26 +2142,26 @@ gl::Error TextureStorage11_Cube::createR
     return gl::NoError();
 }
 
 gl::Error TextureStorage11_Cube::getRenderTarget(const gl::Context *context,
                                                  const gl::ImageIndex &index,
                                                  RenderTargetD3D **outRT)
 {
     const int faceIndex = index.cubeMapFaceIndex();
-    const int level     = index.mipIndex;
+    const int level     = index.getLevelIndex();
 
     ASSERT(level >= 0 && level < getLevelCount());
     ASSERT(faceIndex >= 0 && faceIndex < static_cast<GLint>(gl::CUBE_FACE_COUNT));
 
     if (!mRenderTarget[faceIndex][level])
     {
         if (mRenderer->getWorkarounds().zeroMaxLodWorkaround)
         {
-            ASSERT(index.mipIndex == 0);
+            ASSERT(index.getLevelIndex() == 0);
             ANGLE_TRY(useLevelZeroWorkaroundTexture(context, true));
         }
 
         const TextureHelper11 *texture = nullptr;
         ANGLE_TRY(getResource(context, &texture));
 
         if (mUseLevelZeroTexture)
         {
@@ -2406,18 +2406,18 @@ gl::Error TextureStorage11::initDropSten
     const TextureHelper11 *sourceTexture = nullptr;
     ANGLE_TRY(getResource(context, &sourceTexture));
 
     gl::ImageIndexIterator itCopy = it;
 
     while (itCopy.hasNext())
     {
         gl::ImageIndex index = itCopy.next();
-        gl::Box wholeArea(0, 0, 0, getLevelWidth(index.mipIndex), getLevelHeight(index.mipIndex),
-                          1);
+        gl::Box wholeArea(0, 0, 0, getLevelWidth(index.getLevelIndex()),
+                          getLevelHeight(index.getLevelIndex()), 1);
         gl::Extents wholeSize(wholeArea.width, wholeArea.height, 1);
         UINT subresource = getSubresourceIndex(index);
         ANGLE_TRY(mRenderer->getBlitter()->copyDepthStencil(
             *sourceTexture, subresource, wholeArea, wholeSize, mDropStencilTexture, subresource,
             wholeArea, wholeSize, nullptr));
     }
 
     return gl::NoError();
@@ -2503,54 +2503,54 @@ gl::Error TextureStorage11_3D::onDestroy
 }
 
 TextureStorage11_3D::~TextureStorage11_3D()
 {
 }
 
 void TextureStorage11_3D::associateImage(Image11 *image, const gl::ImageIndex &index)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
 
     if (0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
     {
         mAssociatedImages[level] = image;
     }
 }
 
 void TextureStorage11_3D::verifyAssociatedImageValid(const gl::ImageIndex &index,
                                                      Image11 *expectedImage)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     // This validation check should never return false. It means the Image/TextureStorage
     // association is broken.
     ASSERT(mAssociatedImages[level] == expectedImage);
 }
 
 // disassociateImage allows an Image to end its association with a Storage.
 void TextureStorage11_3D::disassociateImage(const gl::ImageIndex &index, Image11 *expectedImage)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
     ASSERT(mAssociatedImages[level] == expectedImage);
     mAssociatedImages[level] = nullptr;
 }
 
 // releaseAssociatedImage prepares the Storage for a new Image association. It lets the old Image
 // recover its data before ending the association.
 gl::Error TextureStorage11_3D::releaseAssociatedImage(const gl::Context *context,
                                                       const gl::ImageIndex &index,
                                                       Image11 *incomingImage)
 {
-    const GLint level = index.mipIndex;
+    const GLint level = index.getLevelIndex();
 
     ASSERT((0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS));
 
     if (0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
     {
         // No need to let the old Image recover its data, if it is also the incoming Image.
         if (mAssociatedImages[level] != nullptr && mAssociatedImages[level] != incomingImage)
         {
@@ -2649,17 +2649,17 @@ gl::Error TextureStorage11_3D::createUAV
     outUAV->setDebugName("TexStorage3D.UAVForImage");
     return gl::NoError();
 }
 
 gl::Error TextureStorage11_3D::getRenderTarget(const gl::Context *context,
                                                const gl::ImageIndex &index,
                                                RenderTargetD3D **outRT)
 {
-    const int mipLevel = index.mipIndex;
+    const int mipLevel = index.getLevelIndex();
     ASSERT(mipLevel >= 0 && mipLevel < getLevelCount());
 
     ASSERT(mFormatInfo.rtvFormat != DXGI_FORMAT_UNKNOWN);
 
     if (!index.hasLayer())
     {
         if (!mLevelRenderTargets[mipLevel])
         {
@@ -2689,17 +2689,17 @@ gl::Error TextureStorage11_3D::getRender
                 getLevelDepth(mipLevel), 0));
         }
 
         ASSERT(outRT);
         *outRT = mLevelRenderTargets[mipLevel].get();
         return gl::NoError();
     }
 
-    const int layer = index.layerIndex;
+    const int layer = index.getLayerIndex();
 
     LevelLayerKey key(mipLevel, layer);
     if (mLevelLayerRenderTargets.find(key) == mLevelLayerRenderTargets.end())
     {
         const TextureHelper11 *texture = nullptr;
         ANGLE_TRY(getResource(context, &texture));
 
         // TODO, what kind of SRV is expected here?
@@ -2826,70 +2826,70 @@ gl::Error TextureStorage11_2DArray::onDe
 }
 
 TextureStorage11_2DArray::~TextureStorage11_2DArray()
 {
 }
 
 void TextureStorage11_2DArray::associateImage(Image11 *image, const gl::ImageIndex &index)
 {
-    const GLint level       = index.mipIndex;
-    const GLint layerTarget = index.layerIndex;
-    const GLint numLayers   = index.numLayers;
+    const GLint level       = index.getLevelIndex();
+    const GLint layerTarget = index.getLayerIndex();
+    const GLint numLayers   = index.getLayerCount();
 
     ASSERT(0 <= level && level < getLevelCount());
 
     if (0 <= level && level < getLevelCount())
     {
         LevelLayerRangeKey key(level, layerTarget, numLayers);
         mAssociatedImages[key] = image;
     }
 }
 
 void TextureStorage11_2DArray::verifyAssociatedImageValid(const gl::ImageIndex &index,
                                                           Image11 *expectedImage)
 {
-    const GLint level       = index.mipIndex;
-    const GLint layerTarget = index.layerIndex;
-    const GLint numLayers   = index.numLayers;
+    const GLint level       = index.getLevelIndex();
+    const GLint layerTarget = index.getLayerIndex();
+    const GLint numLayers   = index.getLayerCount();
 
     LevelLayerRangeKey key(level, layerTarget, numLayers);
 
     // This validation check should never return false. It means the Image/TextureStorage
     // association is broken.
     bool retValue = (mAssociatedImages.find(key) != mAssociatedImages.end() &&
                      (mAssociatedImages[key] == expectedImage));
     ASSERT(retValue);
 }
 
 // disassociateImage allows an Image to end its association with a Storage.
 void TextureStorage11_2DArray::disassociateImage(const gl::ImageIndex &index,
                                                  Image11 *expectedImage)
 {
-    const GLint level       = index.mipIndex;
-    const GLint layerTarget = index.layerIndex;
-    const GLint numLayers   = index.numLayers;
+    const GLint level       = index.getLevelIndex();
+    const GLint layerTarget = index.getLayerIndex();
+    const GLint numLayers   = index.getLayerCount();
 
     LevelLayerRangeKey key(level, layerTarget, numLayers);
 
     bool imageAssociationCorrect = (mAssociatedImages.find(key) != mAssociatedImages.end() &&
                                     (mAssociatedImages[key] == expectedImage));
     ASSERT(imageAssociationCorrect);
     mAssociatedImages[key] = nullptr;
 }
 
 // releaseAssociatedImage prepares the Storage for a new Image association. It lets the old Image
 // recover its data before ending the association.
 gl::Error TextureStorage11_2DArray::releaseAssociatedImage(const gl::Context *context,
                                                            const gl::ImageIndex &index,
                                                            Image11 *incomingImage)
 {
-    const GLint level       = index.mipIndex;
-    const GLint layerTarget = index.layerIndex;
-    const GLint numLayers   = index.numLayers;
+    const GLint level       = index.getLevelIndex();
+    const GLint layerTarget = index.getLayerIndex();
+    const GLint numLayers   = index.getLayerCount();
 
     LevelLayerRangeKey key(level, layerTarget, numLayers);
 
     if (mAssociatedImages.find(key) != mAssociatedImages.end())
     {
         if (mAssociatedImages[key] != nullptr && mAssociatedImages[key] != incomingImage)
         {
             // Ensure that the Image is still associated with this TextureStorage.
@@ -2995,35 +2995,35 @@ gl::Error TextureStorage11_2DArray::crea
 gl::Error TextureStorage11_2DArray::createRenderTargetSRV(const TextureHelper11 &texture,
                                                           const gl::ImageIndex &index,
                                                           DXGI_FORMAT resourceFormat,
                                                           d3d11::SharedSRV *srv) const
 {
     D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
     srvDesc.Format                         = resourceFormat;
     srvDesc.ViewDimension                  = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
-    srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + index.mipIndex;
+    srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + index.getLevelIndex();
     srvDesc.Texture2DArray.MipLevels       = 1;
-    srvDesc.Texture2DArray.FirstArraySlice = index.layerIndex;
-    srvDesc.Texture2DArray.ArraySize       = index.numLayers;
+    srvDesc.Texture2DArray.FirstArraySlice = index.getLayerIndex();
+    srvDesc.Texture2DArray.ArraySize       = index.getLayerCount();
 
     ANGLE_TRY(mRenderer->allocateResource(srvDesc, texture.get(), srv));
 
     return gl::NoError();
 }
 
 gl::Error TextureStorage11_2DArray::getRenderTarget(const gl::Context *context,
                                                     const gl::ImageIndex &index,
                                                     RenderTargetD3D **outRT)
 {
     ASSERT(index.hasLayer());
 
-    const int mipLevel  = index.mipIndex;
-    const int layer     = index.layerIndex;
-    const int numLayers = index.numLayers;
+    const int mipLevel  = index.getLevelIndex();
+    const int layer     = index.getLayerIndex();
+    const int numLayers = index.getLayerCount();
 
     ASSERT(mipLevel >= 0 && mipLevel < getLevelCount());
 
     LevelLayerRangeKey key(mipLevel, layer, numLayers);
     if (mRenderTargets.find(key) == mRenderTargets.end())
     {
         const TextureHelper11 *texture = nullptr;
         ANGLE_TRY(getResource(context, &texture));
@@ -3281,17 +3281,17 @@ gl::Error TextureStorage11_2DMultisample
 }
 
 gl::Error TextureStorage11_2DMultisample::getRenderTarget(const gl::Context *context,
                                                           const gl::ImageIndex &index,
                                                           RenderTargetD3D **outRT)
 {
     ASSERT(!index.hasLayer());
 
-    const int level = index.mipIndex;
+    const int level = index.getLevelIndex();
     ASSERT(level == 0);
 
     ASSERT(outRT);
     if (mRenderTarget)
     {
         *outRT = mRenderTarget.get();
         return gl::NoError();
     }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h
@@ -17,18 +17,18 @@
 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
 #include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
 
 #include <array>
 #include <map>
 
 namespace gl
 {
-struct ImageIndex;
-}
+class ImageIndex;
+}  // namespace gl
 
 namespace rx
 {
 class EGLImageD3D;
 class RenderTargetD3D;
 class RenderTarget11;
 class Renderer11;
 class SwapChain11;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
@@ -32,16 +32,39 @@ VertexArray11::VertexArray11(const gl::V
 VertexArray11::~VertexArray11()
 {
 }
 
 void VertexArray11::destroy(const gl::Context *context)
 {
 }
 
+#define ANGLE_VERTEX_DIRTY_ATTRIB_FUNC(INDEX)                          \
+    case gl::VertexArray::DIRTY_BIT_ATTRIB_0 + INDEX:                  \
+        ASSERT(INDEX == mState.getBindingIndexFromAttribIndex(INDEX)); \
+        updateVertexAttribStorage(stateManager, dirtyBit, INDEX);      \
+        invalidateVertexBuffer = true;                                 \
+        break;
+
+#define ANGLE_VERTEX_DIRTY_BINDING_FUNC(INDEX)                         \
+    case gl::VertexArray::DIRTY_BIT_BINDING_0 + INDEX:                 \
+        ASSERT(INDEX == mState.getBindingIndexFromAttribIndex(INDEX)); \
+        updateVertexAttribStorage(stateManager, dirtyBit, INDEX);      \
+        invalidateVertexBuffer = true;                                 \
+        break;
+
+#define ANGLE_VERTEX_DIRTY_BUFFER_DATA_FUNC(INDEX)                      \
+    case gl::VertexArray::DIRTY_BIT_BUFFER_DATA_0 + INDEX:              \
+        if (mAttributeStorageTypes[INDEX] == VertexStorageType::STATIC) \
+        {                                                               \
+            invalidateVertexBuffer = true;                              \
+            mAttribsToTranslate.set(INDEX);                             \
+        }                                                               \
+        break;
+
 gl::Error VertexArray11::syncState(const gl::Context *context,
                                    const gl::VertexArray::DirtyBits &dirtyBits,
                                    const gl::VertexArray::DirtyAttribBitsArray &attribBits,
                                    const gl::VertexArray::DirtyBindingBitsArray &bindingBits)
 {
     ASSERT(dirtyBits.any());
 
     Renderer11 *renderer         = GetImplAs<Context11>(context)->getRenderer();
@@ -63,39 +86,23 @@ gl::Error VertexArray11::syncState(const
             {
                 mLastDrawElementsType.reset();
                 mLastDrawElementsIndices.reset();
                 mLastPrimitiveRestartEnabled.reset();
                 mCachedIndexInfo.reset();
                 break;
             }
 
-            default:
-            {
-                size_t index = gl::VertexArray::GetVertexIndexFromDirtyBit(dirtyBit);
-
-                // TODO(jiawei.shao@intel.com): Vertex Attrib Bindings
-                ASSERT(index == mState.getBindingIndexFromAttribIndex(index));
+                ANGLE_VERTEX_INDEX_CASES(ANGLE_VERTEX_DIRTY_ATTRIB_FUNC);
+                ANGLE_VERTEX_INDEX_CASES(ANGLE_VERTEX_DIRTY_BINDING_FUNC);
+                ANGLE_VERTEX_INDEX_CASES(ANGLE_VERTEX_DIRTY_BUFFER_DATA_FUNC);
 
-                if (dirtyBit < gl::VertexArray::DIRTY_BIT_BINDING_MAX)
-                {
-                    updateVertexAttribStorage(stateManager, dirtyBit, index);
-                }
-                else
-                {
-                    ASSERT(dirtyBit >= gl::VertexArray::DIRTY_BIT_BUFFER_DATA_0 &&
-                           dirtyBit < gl::VertexArray::DIRTY_BIT_BUFFER_DATA_MAX);
-                    if (mAttributeStorageTypes[index] == VertexStorageType::STATIC)
-                    {
-                        mAttribsToTranslate.set(index);
-                    }
-                }
-                invalidateVertexBuffer = true;
+            default:
+                UNREACHABLE();
                 break;
-            }
         }
     }
 
     if (invalidateVertexBuffer)
     {
         // TODO(jmadill): Individual attribute invalidation.
         stateManager->invalidateVertexBuffer();
     }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
@@ -952,16 +952,30 @@ size_t GetMaximumComputeImageUniforms(D3
             // TODO(xinghua.cao@intel.com): Get a more accurate limit. For now using
             // the minimum requirement for GLES 3.1.
             return 4;
         default:
             return 0;
     }
 }
 
+size_t GetMaximumCombinedShaderOutputResources(D3D_FEATURE_LEVEL featureLevel)
+{
+    switch (featureLevel)
+    {
+        // TODO(jiawei.shao@intel.com): Get a more accurate limit. For now using the minimum
+        // requirement for GLES 3.1.
+        case D3D_FEATURE_LEVEL_11_1:
+        case D3D_FEATURE_LEVEL_11_0:
+            return 4;
+        default:
+            return 0;
+    }
+}
+
 int GetMinimumTexelOffset(D3D_FEATURE_LEVEL featureLevel)
 {
     switch (featureLevel)
     {
         case D3D_FEATURE_LEVEL_11_1:
         case D3D_FEATURE_LEVEL_11_0:
             return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE;
 
@@ -1351,82 +1365,93 @@ void GenerateCaps(ID3D11Device *device,
     caps->maxVertexAttributes = static_cast<GLuint>(GetMaximumVertexInputSlots(featureLevel));
     caps->maxVertexUniformVectors =
         static_cast<GLuint>(GetMaximumVertexUniformVectors(featureLevel));
     if (workarounds.skipVSConstantRegisterZero)
     {
         caps->maxVertexUniformVectors -= 1;
     }
     caps->maxVertexUniformComponents = caps->maxVertexUniformVectors * 4;
-    caps->maxVertexUniformBlocks = static_cast<GLuint>(GetMaximumVertexUniformBlocks(featureLevel));
+    caps->maxShaderUniformBlocks[gl::ShaderType::Vertex] =
+        static_cast<GLuint>(GetMaximumVertexUniformBlocks(featureLevel));
     caps->maxVertexOutputComponents =
         static_cast<GLuint>(GetMaximumVertexOutputVectors(featureLevel)) * 4;
-    caps->maxVertexTextureImageUnits =
+    caps->maxShaderTextureImageUnits[gl::ShaderType::Vertex] =
         static_cast<GLuint>(GetMaximumVertexTextureUnits(featureLevel));
 
     // Vertex Attribute Bindings are emulated on D3D11.
     caps->maxVertexAttribBindings = caps->maxVertexAttributes;
     // Experimental testing confirmed there is no explicit limit on maximum buffer offset in D3D11.
     caps->maxVertexAttribRelativeOffset = std::numeric_limits<GLint>::max();
     // Experimental testing confirmed 2048 is the maximum stride that D3D11 can support on all
     // platforms.
     caps->maxVertexAttribStride = 2048;
 
     // Fragment shader limits
     caps->maxFragmentUniformVectors =
         static_cast<GLuint>(GetMaximumPixelUniformVectors(featureLevel));
     caps->maxFragmentUniformComponents = caps->maxFragmentUniformVectors * 4;
-    caps->maxFragmentUniformBlocks =
+    caps->maxShaderUniformBlocks[gl::ShaderType::Fragment] =
         static_cast<GLuint>(GetMaximumPixelUniformBlocks(featureLevel));
     caps->maxFragmentInputComponents =
         static_cast<GLuint>(GetMaximumPixelInputVectors(featureLevel)) * 4;
-    caps->maxTextureImageUnits  = static_cast<GLuint>(GetMaximumPixelTextureUnits(featureLevel));
+    caps->maxShaderTextureImageUnits[gl::ShaderType::Fragment] =
+        static_cast<GLuint>(GetMaximumPixelTextureUnits(featureLevel));
     caps->minProgramTexelOffset = GetMinimumTexelOffset(featureLevel);
     caps->maxProgramTexelOffset = GetMaximumTexelOffset(featureLevel);
 
     // Compute shader limits
     caps->maxComputeWorkGroupCount = GetMaxComputeWorkGroupCount(featureLevel);
     caps->maxComputeWorkGroupSize  = GetMaxComputeWorkGroupSize(featureLevel);
     caps->maxComputeWorkGroupInvocations =
         static_cast<GLuint>(GetMaxComputeWorkGroupInvocations(featureLevel));
     caps->maxComputeUniformComponents =
         static_cast<GLuint>(GetMaximumComputeUniformVectors(featureLevel)) * 4;
-    caps->maxComputeUniformBlocks =
+    caps->maxShaderUniformBlocks[gl::ShaderType::Compute] =
         static_cast<GLuint>(GetMaximumComputeUniformBlocks(featureLevel));
-    caps->maxComputeTextureImageUnits =
+    caps->maxShaderTextureImageUnits[gl::ShaderType::Compute] =
         static_cast<GLuint>(GetMaximumComputeTextureUnits(featureLevel));
     caps->maxImageUnits = static_cast<GLuint>(GetMaximumImageUnits(featureLevel));
     caps->maxComputeImageUniforms =
         static_cast<GLuint>(GetMaximumComputeImageUniforms(featureLevel));
+    caps->maxCombinedShaderOutputResources =
+        static_cast<GLuint>(GetMaximumCombinedShaderOutputResources(featureLevel));
 
     // Aggregate shader limits
-    caps->maxUniformBufferBindings = caps->maxVertexUniformBlocks + caps->maxFragmentUniformBlocks;
+    caps->maxUniformBufferBindings = caps->maxShaderUniformBlocks[gl::ShaderType::Vertex] +
+                                     caps->maxShaderUniformBlocks[gl::ShaderType::Fragment];
     caps->maxUniformBlockSize = GetMaximumConstantBufferSize(featureLevel);
 
     // TODO(oetuaho): Get a more accurate limit. For now using the minimum requirement for GLES 3.1.
     caps->maxUniformLocations = 1024;
 
     // With DirectX 11.1, constant buffer offset and size must be a multiple of 16 constants of 16 bytes each.
     // https://msdn.microsoft.com/en-us/library/windows/desktop/hh404649%28v=vs.85%29.aspx
     // With DirectX 11.0, we emulate UBO offsets using copies of ranges of the UBO however
     // we still keep the same alignment as 11.1 for consistency.
     caps->uniformBufferOffsetAlignment = 256;
 
-    caps->maxCombinedUniformBlocks = caps->maxVertexUniformBlocks + caps->maxFragmentUniformBlocks;
-    caps->maxCombinedVertexUniformComponents = (static_cast<GLint64>(caps->maxVertexUniformBlocks) * static_cast<GLint64>(caps->maxUniformBlockSize / 4)) +
-                                               static_cast<GLint64>(caps->maxVertexUniformComponents);
-    caps->maxCombinedFragmentUniformComponents = (static_cast<GLint64>(caps->maxFragmentUniformBlocks) * static_cast<GLint64>(caps->maxUniformBlockSize / 4)) +
-                                                 static_cast<GLint64>(caps->maxFragmentUniformComponents);
-    caps->maxCombinedComputeUniformComponents =
-        static_cast<GLuint>(caps->maxComputeUniformBlocks * (caps->maxUniformBlockSize / 4) +
-                            caps->maxComputeUniformComponents);
+    caps->maxCombinedUniformBlocks = caps->maxShaderUniformBlocks[gl::ShaderType::Vertex] +
+                                     caps->maxShaderUniformBlocks[gl::ShaderType::Fragment];
+    caps->maxCombinedVertexUniformComponents =
+        (static_cast<GLint64>(caps->maxShaderUniformBlocks[gl::ShaderType::Vertex]) *
+         static_cast<GLint64>(caps->maxUniformBlockSize / 4)) +
+        static_cast<GLint64>(caps->maxVertexUniformComponents);
+    caps->maxCombinedFragmentUniformComponents =
+        (static_cast<GLint64>(caps->maxShaderUniformBlocks[gl::ShaderType::Fragment]) *
+         static_cast<GLint64>(caps->maxUniformBlockSize / 4)) +
+        static_cast<GLint64>(caps->maxFragmentUniformComponents);
+    caps->maxCombinedComputeUniformComponents = static_cast<GLuint>(
+        caps->maxShaderUniformBlocks[gl::ShaderType::Compute] * (caps->maxUniformBlockSize / 4) +
+        caps->maxComputeUniformComponents);
     caps->maxVaryingComponents =
         static_cast<GLuint>(GetMaximumVertexOutputVectors(featureLevel)) * 4;
     caps->maxVaryingVectors            = static_cast<GLuint>(GetMaximumVertexOutputVectors(featureLevel));
-    caps->maxCombinedTextureImageUnits = caps->maxVertexTextureImageUnits + caps->maxTextureImageUnits;
+    caps->maxCombinedTextureImageUnits = caps->maxShaderTextureImageUnits[gl::ShaderType::Vertex] +
+                                         caps->maxShaderTextureImageUnits[gl::ShaderType::Fragment];
 
     // Transform feedback limits
     caps->maxTransformFeedbackInterleavedComponents =
         static_cast<GLuint>(GetMaximumStreamOutputInterleavedComponents(featureLevel));
     caps->maxTransformFeedbackSeparateAttributes =
         static_cast<GLuint>(GetMaximumStreamOutputBuffers(featureLevel));
     caps->maxTransformFeedbackSeparateComponents =
         static_cast<GLuint>(GetMaximumStreamOutputSeparateComponents(featureLevel));
@@ -1847,29 +1872,29 @@ D3D11_TEXTURE_ADDRESS_MODE ConvertTextur
     return D3D11_TEXTURE_ADDRESS_WRAP;
 }
 
 UINT ConvertMaxAnisotropy(float maxAnisotropy, D3D_FEATURE_LEVEL featureLevel)
 {
     return static_cast<UINT>(std::min(maxAnisotropy, d3d11_gl::GetMaximumAnisotropy(featureLevel)));
 }
 
-D3D11_QUERY ConvertQueryType(GLenum queryType)
+D3D11_QUERY ConvertQueryType(gl::QueryType type)
 {
-    switch (queryType)
+    switch (type)
     {
-        case GL_ANY_SAMPLES_PASSED_EXT:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+        case gl::QueryType::AnySamples:
+        case gl::QueryType::AnySamplesConservative:
             return D3D11_QUERY_OCCLUSION;
-        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+        case gl::QueryType::TransformFeedbackPrimitivesWritten:
             return D3D11_QUERY_SO_STATISTICS;
-        case GL_TIME_ELAPSED_EXT:
+        case gl::QueryType::TimeElapsed:
             // Two internal queries are also created for begin/end timestamps
             return D3D11_QUERY_TIMESTAMP_DISJOINT;
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case gl::QueryType::CommandsCompleted:
             return D3D11_QUERY_EVENT;
         default:
             UNREACHABLE();
             return D3D11_QUERY_EVENT;
     }
 }
 
 // Get the D3D11 write mask covering all color channels of a given format
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
@@ -48,17 +48,17 @@ D3D11_COMPARISON_FUNC ConvertComparison(
 D3D11_DEPTH_WRITE_MASK ConvertDepthMask(bool depthWriteEnabled);
 UINT8 ConvertStencilMask(GLuint stencilmask);
 D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp);
 
 D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy, GLenum comparisonMode);
 D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap);
 UINT ConvertMaxAnisotropy(float maxAnisotropy, D3D_FEATURE_LEVEL featureLevel);
 
-D3D11_QUERY ConvertQueryType(GLenum queryType);
+D3D11_QUERY ConvertQueryType(gl::QueryType type);
 
 UINT8 GetColorMask(const gl::InternalFormat &formatInfo);
 
 }  // namespace gl_d3d11
 
 namespace d3d11_gl
 {
 
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Blit9.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Blit9.h
@@ -6,17 +6,17 @@
 
 // Blit9.cpp: Surface copy utility class.
 
 #ifndef LIBANGLE_RENDERER_D3D_D3D9_BLIT9_H_
 #define LIBANGLE_RENDERER_D3D_D3D9_BLIT9_H_
 
 #include "common/angleutils.h"
 #include "libANGLE/Error.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 namespace gl
 {
 class Context;
 class Framebuffer;
 class Texture;
 struct Extents;
 struct Offset;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
@@ -87,17 +87,17 @@ BufferImpl *Context9::createBuffer(const
     return new Buffer9(state, mRenderer);
 }
 
 VertexArrayImpl *Context9::createVertexArray(const gl::VertexArrayState &data)
 {
     return new VertexArray9(data);
 }
 
-QueryImpl *Context9::createQuery(GLenum type)
+QueryImpl *Context9::createQuery(gl::QueryType type)
 {
     return new Query9(mRenderer, type);
 }
 
 FenceNVImpl *Context9::createFenceNV()
 {
     return new FenceNV9(mRenderer);
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Context9.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Context9.h
@@ -40,17 +40,17 @@ class Context9 : public ContextImpl
 
     // Buffer creation
     BufferImpl *createBuffer(const gl::BufferState &state) override;
 
     // Vertex Array creation
     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
 
     // Query and Fence creation
-    QueryImpl *createQuery(GLenum type) override;
+    QueryImpl *createQuery(gl::QueryType type) override;
     FenceNVImpl *createFenceNV() override;
     SyncImpl *createSync() override;
 
     // Transform Feedback creation
     TransformFeedbackImpl *createTransformFeedback(
         const gl::TransformFeedbackState &state) override;
 
     // Sampler object creation
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp
@@ -397,17 +397,19 @@ gl::Error Framebuffer9::blitImpl(const g
 
 GLenum Framebuffer9::getRenderTargetImplementationFormat(RenderTargetD3D *renderTarget) const
 {
     RenderTarget9 *renderTarget9 = GetAs<RenderTarget9>(renderTarget);
     const d3d9::D3DFormat &d3dFormatInfo = d3d9::GetD3DFormatInfo(renderTarget9->getD3DFormat());
     return d3dFormatInfo.info().glInternalFormat;
 }
 
-gl::Error Framebuffer9::getSamplePosition(size_t index, GLfloat *xy) const
+gl::Error Framebuffer9::getSamplePosition(const gl::Context *context,
+                                          size_t index,
+                                          GLfloat *xy) const
 {
     UNREACHABLE();
     return gl::InternalError() << "getSamplePosition is unsupported to d3d9.";
 }
 
 gl::Error Framebuffer9::syncState(const gl::Context *context,
                                   const gl::Framebuffer::DirtyBits &dirtyBits)
 {
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.h
@@ -27,17 +27,19 @@ class Framebuffer9 : public FramebufferD
     gl::Error invalidate(const gl::Context *context,
                          size_t count,
                          const GLenum *attachments) override;
     gl::Error invalidateSub(const gl::Context *context,
                             size_t count,
                             const GLenum *attachments,
                             const gl::Rectangle &area) override;
 
-    gl::Error getSamplePosition(size_t index, GLfloat *xy) const override;
+    gl::Error getSamplePosition(const gl::Context *context,
+                                size_t index,
+                                GLfloat *xy) const override;
 
     gl::Error syncState(const gl::Context *context,
                         const gl::Framebuffer::DirtyBits &dirtyBits) override;
 
     const gl::AttachmentArray<RenderTarget9 *> &getCachedColorRenderTargets() const
     {
         return mRenderTargetCache.getColors();
     }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp
@@ -465,17 +465,18 @@ gl::Error Image9::copyToStorage(const gl
                                 TextureStorage *storage,
                                 const gl::ImageIndex &index,
                                 const gl::Box &region)
 {
     ANGLE_TRY(createSurface());
 
     TextureStorage9 *storage9 = GetAs<TextureStorage9>(storage);
     IDirect3DSurface9 *destSurface = nullptr;
-    ANGLE_TRY(storage9->getSurfaceLevel(context, index.target, index.mipIndex, true, &destSurface));
+    ANGLE_TRY(storage9->getSurfaceLevel(context, index.getTarget(), index.getLevelIndex(), true,
+                                        &destSurface));
 
     gl::Error error = copyToSurface(destSurface, region);
     SafeRelease(destSurface);
     return error;
 }
 
 gl::Error Image9::copyToSurface(IDirect3DSurface9 *destSurface, const gl::Box &area)
 {
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Query9.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Query9.cpp
@@ -9,18 +9,19 @@
 #include "libANGLE/renderer/d3d/d3d9/Query9.h"
 #include "libANGLE/renderer/d3d/d3d9/renderer9_utils.h"
 #include "libANGLE/renderer/d3d/d3d9/Renderer9.h"
 
 #include <GLES2/gl2ext.h>
 
 namespace rx
 {
-Query9::Query9(Renderer9 *renderer, GLenum type)
+Query9::Query9(Renderer9 *renderer, gl::QueryType type)
     : QueryImpl(type),
+      mGetDataAttemptCount(0),
       mResult(GL_FALSE),
       mQueryFinished(false),
       mRenderer(renderer),
       mQuery(nullptr)
 {
 }
 
 Query9::~Query9()
@@ -135,54 +136,61 @@ gl::Error Query9::testQuery()
 {
     if (!mQueryFinished)
     {
         ASSERT(mQuery);
 
         HRESULT result = S_OK;
         switch (getType())
         {
-            case GL_ANY_SAMPLES_PASSED_EXT:
-            case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+            case gl::QueryType::AnySamples:
+            case gl::QueryType::AnySamplesConservative:
             {
                 DWORD numPixels = 0;
                 result = mQuery->GetData(&numPixels, sizeof(numPixels), D3DGETDATA_FLUSH);
                 if (result == S_OK)
                 {
                     mQueryFinished = true;
                     mResult        = (numPixels > 0) ? GL_TRUE : GL_FALSE;
                 }
                 break;
             }
 
-            case GL_COMMANDS_COMPLETED_CHROMIUM:
+            case gl::QueryType::CommandsCompleted:
             {
                 BOOL completed = FALSE;
                 result = mQuery->GetData(&completed, sizeof(completed), D3DGETDATA_FLUSH);
                 if (result == S_OK)
                 {
                     mQueryFinished = true;
                     mResult        = (completed == TRUE) ? GL_TRUE : GL_FALSE;
                 }
                 break;
             }
 
             default:
                 UNREACHABLE();
                 break;
         }
 
-        if (d3d9::isDeviceLostError(result))
+        if (!mQueryFinished)
         {
-            mRenderer->notifyDeviceLost();
-            return gl::OutOfMemory() << "Failed to test get query result, device is lost.";
-        }
-        else if (mRenderer->testDeviceLost())
-        {
-            mRenderer->notifyDeviceLost();
-            return gl::OutOfMemory() << "Failed to test get query result, device is lost.";
+            if (d3d9::isDeviceLostError(result))
+            {
+                mRenderer->notifyDeviceLost();
+                return gl::OutOfMemory() << "Failed to test get query result, device is lost.";
+            }
+
+            mGetDataAttemptCount++;
+            bool checkDeviceLost =
+                (mGetDataAttemptCount % kPollingD3DDeviceLostCheckFrequency) == 0;
+            if (checkDeviceLost && mRenderer->testDeviceLost())
+            {
+                mRenderer->notifyDeviceLost();
+                return gl::OutOfMemory() << "Failed to test get query result, device is lost.";
+            }
         }
     }
 
     return gl::NoError();
 }
 
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Query9.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Query9.h
@@ -13,17 +13,17 @@
 
 namespace rx
 {
 class Renderer9;
 
 class Query9 : public QueryImpl
 {
   public:
-    Query9(Renderer9 *renderer, GLenum type);
+    Query9(Renderer9 *renderer, gl::QueryType type);
     ~Query9() override;
 
     gl::Error begin() override;
     gl::Error end() override;
     gl::Error queryCounter() override;
     gl::Error getResult(GLint *params) override;
     gl::Error getResult(GLuint *params) override;
     gl::Error getResult(GLint64 *params) override;
@@ -31,16 +31,17 @@ class Query9 : public QueryImpl
     gl::Error isResultAvailable(bool *available) override;
 
   private:
     gl::Error testQuery();
 
     template <typename T>
     gl::Error getResultBase(T *params);
 
+    unsigned int mGetDataAttemptCount;
     GLuint64 mResult;
     bool mQueryFinished;
 
     Renderer9 *mRenderer;
     IDirect3DQuery9 *mQuery;
 };
 
 }
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
@@ -356,21 +356,22 @@ egl::Error Renderer9::initializeDevice()
     }
     else
     {
         mDevice->SetRenderState(D3DRS_POINTSIZE_MAX, 0x3F800000);  // 1.0f
     }
 
     const gl::Caps &rendererCaps = getNativeCaps();
 
-    mCurVertexSamplerStates.resize(rendererCaps.maxVertexTextureImageUnits);
-    mCurPixelSamplerStates.resize(rendererCaps.maxTextureImageUnits);
-
-    mCurVertexTextures.resize(rendererCaps.maxVertexTextureImageUnits);
-    mCurPixelTextures.resize(rendererCaps.maxTextureImageUnits);
+    mCurVertexSamplerStates.resize(rendererCaps.maxShaderTextureImageUnits[gl::ShaderType::Vertex]);
+    mCurPixelSamplerStates.resize(
+        rendererCaps.maxShaderTextureImageUnits[gl::ShaderType::Fragment]);
+
+    mCurVertexTextures.resize(rendererCaps.maxShaderTextureImageUnits[gl::ShaderType::Vertex]);
+    mCurPixelTextures.resize(rendererCaps.maxShaderTextureImageUnits[gl::ShaderType::Fragment]);
 
     markAllStateDirty();
 
     mSceneStarted = false;
 
     ASSERT(!mBlit);
     mBlit = new Blit9(this);
     ANGLE_TRY(mBlit->initialize());
@@ -660,29 +661,35 @@ gl::Error Renderer9::finish()
             notifyDeviceLost();
         }
 
         freeEventQuery(query);
         return gl::OutOfMemory() << "Failed to get event query data, " << gl::FmtHR(result);
     }
 
     // Loop until the query completes
+    unsigned int attempt = 0;
     while (result == S_FALSE)
     {
         // Keep polling, but allow other threads to do something useful first
         ScheduleYield();
 
         result = query->GetData(nullptr, 0, D3DGETDATA_FLUSH);
-
-        // explicitly check for device loss
-        // some drivers seem to return S_FALSE even if the device is lost
-        // instead of D3DERR_DEVICELOST like they should
-        if (result == S_FALSE && testDeviceLost())
+        attempt++;
+
+        if (result == S_FALSE)
         {
-            result = D3DERR_DEVICELOST;
+            // explicitly check for device loss
+            // some drivers seem to return S_FALSE even if the device is lost
+            // instead of D3DERR_DEVICELOST like they should
+            bool checkDeviceLost = (attempt % kPollingD3DDeviceLostCheckFrequency) == 0;
+            if (checkDeviceLost && testDeviceLost())
+            {
+                result = D3DERR_DEVICELOST;
+            }
         }
 
         if (FAILED(result))
         {
             if (d3d9::isDeviceLostError(result))
             {
                 notifyDeviceLost();
             }
@@ -1812,18 +1819,18 @@ gl::Error Renderer9::applyUniforms(Progr
         return gl::NoError();
     }
 
     const auto &uniformArray = programD3D->getD3DUniforms();
 
     for (const D3DUniform *targetUniform : uniformArray)
     {
         // Built-in uniforms must be skipped.
-        if (!targetUniform->isReferencedByFragmentShader() &&
-            !targetUniform->isReferencedByVertexShader())
+        if (!targetUniform->isReferencedByShader(gl::ShaderType::Vertex) &&
+            !targetUniform->isReferencedByShader(gl::ShaderType::Fragment))
             continue;
 
         const GLfloat *f = reinterpret_cast<const GLfloat *>(targetUniform->firstNonNullData());
         const GLint *i   = reinterpret_cast<const GLint *>(targetUniform->firstNonNullData());
 
         switch (targetUniform->typeInfo.type)
         {
             case GL_SAMPLER_2D:
@@ -1857,26 +1864,28 @@ gl::Error Renderer9::applyUniforms(Progr
     }
 
     programD3D->markUniformsClean();
     return gl::NoError();
 }
 
 void Renderer9::applyUniformnfv(const D3DUniform *targetUniform, const GLfloat *v)
 {
-    if (targetUniform->isReferencedByFragmentShader())
+    if (targetUniform->isReferencedByShader(gl::ShaderType::Fragment))
     {
-        mDevice->SetPixelShaderConstantF(targetUniform->psRegisterIndex, v,
-                                         targetUniform->registerCount);
+        mDevice->SetPixelShaderConstantF(
+            targetUniform->mShaderRegisterIndexes[gl::ShaderType::Fragment], v,
+            targetUniform->registerCount);
     }
 
-    if (targetUniform->isReferencedByVertexShader())
+    if (targetUniform->isReferencedByShader(gl::ShaderType::Vertex))
     {
-        mDevice->SetVertexShaderConstantF(targetUniform->vsRegisterIndex, v,
-                                          targetUniform->registerCount);
+        mDevice->SetVertexShaderConstantF(
+            targetUniform->mShaderRegisterIndexes[gl::ShaderType::Vertex], v,
+            targetUniform->registerCount);
     }
 }
 
 void Renderer9::applyUniformniv(const D3DUniform *targetUniform, const GLint *v)
 {
     ASSERT(targetUniform->registerCount <= MAX_VERTEX_CONSTANT_VECTORS_D3D9);
     GLfloat vector[MAX_VERTEX_CONSTANT_VECTORS_D3D9][4];
 
@@ -3231,18 +3240,18 @@ gl::Error Renderer9::applyTextures(const
             ANGLE_TRY(setSamplerState(context, shaderType, samplerIndex, incompleteTexture,
                                       incompleteTexture->getSamplerState()));
             ANGLE_TRY(setTexture(context, shaderType, samplerIndex, incompleteTexture));
         }
     }
 
     // Set all the remaining textures to NULL
     size_t samplerCount = (shaderType == gl::ShaderType::Fragment)
-                              ? caps.maxTextureImageUnits
-                              : caps.maxVertexTextureImageUnits;
+                              ? caps.maxShaderTextureImageUnits[gl::ShaderType::Fragment]
+                              : caps.maxShaderTextureImageUnits[gl::ShaderType::Vertex];
 
     // TODO(jmadill): faster way?
     for (size_t samplerIndex = samplerRange; samplerIndex < samplerCount; samplerIndex++)
     {
         ANGLE_TRY(setTexture(context, shaderType, static_cast<int>(samplerIndex), nullptr));
     }
 
     return gl::NoError();
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp
@@ -187,63 +187,65 @@ gl::Error TextureStorage9_2D::getSurface
 
     return gl::NoError();
 }
 
 gl::Error TextureStorage9_2D::getRenderTarget(const gl::Context *context,
                                               const gl::ImageIndex &index,
                                               RenderTargetD3D **outRT)
 {
-    ASSERT(index.mipIndex < getLevelCount());
+    ASSERT(index.getLevelIndex() < getLevelCount());
 
-    if (!mRenderTargets[index.mipIndex] && isRenderTarget())
+    if (!mRenderTargets[index.getLevelIndex()] && isRenderTarget())
     {
         IDirect3DBaseTexture9 *baseTexture = nullptr;
         gl::Error error                    = getBaseTexture(context, &baseTexture);
         if (error.isError())
         {
             return error;
         }
 
         IDirect3DSurface9 *surface = nullptr;
-        error = getSurfaceLevel(context, gl::TextureTarget::_2D, index.mipIndex, false, &surface);
+        error = getSurfaceLevel(context, gl::TextureTarget::_2D, index.getLevelIndex(), false,
+                                &surface);
         if (error.isError())
         {
             return error;
         }
 
-        size_t textureMipLevel = mTopLevel + index.mipIndex;
+        size_t textureMipLevel = mTopLevel + index.getLevelIndex();
         size_t mipWidth        = std::max<size_t>(mTextureWidth >> textureMipLevel, 1u);
         size_t mipHeight       = std::max<size_t>(mTextureHeight >> textureMipLevel, 1u);
 
         baseTexture->AddRef();
-        mRenderTargets[index.mipIndex] = new TextureRenderTarget9(
+        mRenderTargets[index.getLevelIndex()] = new TextureRenderTarget9(
             baseTexture, textureMipLevel, surface, mInternalFormat, static_cast<GLsizei>(mipWidth),
             static_cast<GLsizei>(mipHeight), 1, 0);
     }
 
     ASSERT(outRT);
-    *outRT = mRenderTargets[index.mipIndex];
+    *outRT = mRenderTargets[index.getLevelIndex()];
     return gl::NoError();
 }
 
 gl::Error TextureStorage9_2D::generateMipmap(const gl::Context *context,
                                              const gl::ImageIndex &sourceIndex,
                                              const gl::ImageIndex &destIndex)
 {
     IDirect3DSurface9 *upper = nullptr;
-    gl::Error error =
-        getSurfaceLevel(context, gl::TextureTarget::_2D, sourceIndex.mipIndex, false, &upper);
+    gl::Error error = getSurfaceLevel(context, gl::TextureTarget::_2D, sourceIndex.getLevelIndex(),
+                                      false, &upper);
     if (error.isError())
     {
         return error;
     }
 
     IDirect3DSurface9 *lower = nullptr;
-    error = getSurfaceLevel(context, gl::TextureTarget::_2D, destIndex.mipIndex, true, &lower);
+    error =
+        getSurfaceLevel(context, gl::TextureTarget::_2D, destIndex.getLevelIndex(), true, &lower);
     if (error.isError())
     {
         SafeRelease(upper);
         return error;
     }
 
     ASSERT(upper && lower);
     error = mRenderer->boxFilter(upper, lower);
@@ -358,17 +360,17 @@ gl::Error TextureStorage9_EGLImage::getS
     return gl::NoError();
 }
 
 gl::Error TextureStorage9_EGLImage::getRenderTarget(const gl::Context *context,
                                                     const gl::ImageIndex &index,
                                                     RenderTargetD3D **outRT)
 {
     ASSERT(!index.hasLayer());
-    ASSERT(index.mipIndex == 0);
+    ASSERT(index.getLevelIndex() == 0);
 
     return mImage->getRenderTarget(context, outRT);
 }
 
 gl::Error TextureStorage9_EGLImage::getBaseTexture(const gl::Context *context,
                                                    IDirect3DBaseTexture9 **outTexture)
 {
     RenderTargetD3D *renderTargetD3D = nullptr;
@@ -511,62 +513,64 @@ gl::Error TextureStorage9_Cube::getSurfa
     return gl::NoError();
 }
 
 gl::Error TextureStorage9_Cube::getRenderTarget(const gl::Context *context,
                                                 const gl::ImageIndex &index,
                                                 RenderTargetD3D **outRT)
 {
     ASSERT(outRT);
-    ASSERT(index.mipIndex == 0);
+    ASSERT(index.getLevelIndex() == 0);
 
-    ASSERT(index.type == gl::TextureType::CubeMap &&
-           gl::TextureTargetToType(index.target) == gl::TextureType::CubeMap);
+    ASSERT(index.getType() == gl::TextureType::CubeMap &&
+           gl::TextureTargetToType(index.getTarget()) == gl::TextureType::CubeMap);
     const size_t renderTargetIndex = index.cubeMapFaceIndex();
 
     if (mRenderTarget[renderTargetIndex] == nullptr && isRenderTarget())
     {
         IDirect3DBaseTexture9 *baseTexture = nullptr;
         gl::Error error                    = getBaseTexture(context, &baseTexture);
         if (error.isError())
         {
             return error;
         }
 
         IDirect3DSurface9 *surface = nullptr;
-        error = getSurfaceLevel(context, index.target, mTopLevel + index.mipIndex, false, &surface);
+        error = getSurfaceLevel(context, index.getTarget(), mTopLevel + index.getLevelIndex(),
+                                false, &surface);
         if (error.isError())
         {
             return error;
         }
 
         baseTexture->AddRef();
         mRenderTarget[renderTargetIndex] = new TextureRenderTarget9(
-            baseTexture, mTopLevel + index.mipIndex, surface, mInternalFormat,
+            baseTexture, mTopLevel + index.getLevelIndex(), surface, mInternalFormat,
             static_cast<GLsizei>(mTextureWidth), static_cast<GLsizei>(mTextureHeight), 1, 0);
     }
 
     *outRT = mRenderTarget[renderTargetIndex];
     return gl::NoError();
 }
 
 gl::Error TextureStorage9_Cube::generateMipmap(const gl::Context *context,
                                                const gl::ImageIndex &sourceIndex,
                                                const gl::ImageIndex &destIndex)
 {
     IDirect3DSurface9 *upper = nullptr;
-    gl::Error error =
-        getSurfaceLevel(context, sourceIndex.target, sourceIndex.mipIndex, false, &upper);
+    gl::Error error = getSurfaceLevel(context, sourceIndex.getTarget(), sourceIndex.getLevelIndex(),
+                                      false, &upper);
     if (error.isError())
     {
         return error;
     }
 
     IDirect3DSurface9 *lower = nullptr;
-    error = getSurfaceLevel(context, destIndex.target, destIndex.mipIndex, true, &lower);
+    error =
+        getSurfaceLevel(context, destIndex.getTarget(), destIndex.getLevelIndex(), true, &lower);
     if (error.isError())
     {
         SafeRelease(upper);
         return error;
     }
 
     ASSERT(upper && lower);
     error = mRenderer->boxFilter(upper, lower);
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
@@ -263,24 +263,24 @@ void ConvertMinFilter(GLenum minFilter, 
     }
 
     if (maxAnisotropy > 1.0f)
     {
         *d3dMinFilter = D3DTEXF_ANISOTROPIC;
     }
 }
 
-D3DQUERYTYPE ConvertQueryType(GLenum queryType)
+D3DQUERYTYPE ConvertQueryType(gl::QueryType type)
 {
-    switch (queryType)
+    switch (type)
     {
-        case GL_ANY_SAMPLES_PASSED_EXT:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+        case gl::QueryType::AnySamples:
+        case gl::QueryType::AnySamplesConservative:
             return D3DQUERYTYPE_OCCLUSION;
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case gl::QueryType::CommandsCompleted:
             return D3DQUERYTYPE_EVENT;
         default:
             UNREACHABLE();
             return static_cast<D3DQUERYTYPE>(0);
     }
 }
 
 D3DMULTISAMPLE_TYPE GetMultisampleType(GLuint samples)
@@ -475,64 +475,65 @@ void GenerateCaps(IDirect3D9 *d3d9,
     // Vertex Attrib Binding not supported.
     caps->maxVertexAttribBindings = caps->maxVertexAttributes;
 
     const size_t MAX_VERTEX_CONSTANT_VECTORS_D3D9 = 256;
     caps->maxVertexUniformVectors =
         MAX_VERTEX_CONSTANT_VECTORS_D3D9 - GetReservedVertexUniformVectors();
     caps->maxVertexUniformComponents = caps->maxVertexUniformVectors * 4;
 
-    caps->maxVertexUniformBlocks = 0;
+    caps->maxShaderUniformBlocks[gl::ShaderType::Vertex] = 0;
 
     // SM3 only supports 12 output variables, but the special 12th register is only for PSIZE.
     const unsigned int MAX_VERTEX_OUTPUT_VECTORS_SM3 = 12 - GetReservedVaryingVectors();
     const unsigned int MAX_VERTEX_OUTPUT_VECTORS_SM2 = 10 - GetReservedVaryingVectors();
     caps->maxVertexOutputComponents = ((deviceCaps.VertexShaderVersion >= D3DVS_VERSION(3, 0)) ? MAX_VERTEX_OUTPUT_VECTORS_SM3
                                                                                                : MAX_VERTEX_OUTPUT_VECTORS_SM2) * 4;
 
     // Only Direct3D 10 ready devices support all the necessary vertex texture formats.
     // We test this using D3D9 by checking support for the R16F format.
     if (deviceCaps.VertexShaderVersion >= D3DVS_VERSION(3, 0) &&
         SUCCEEDED(d3d9->CheckDeviceFormat(adapter, deviceType, currentDisplayMode.Format,
                                           D3DUSAGE_QUERY_VERTEXTEXTURE, D3DRTYPE_TEXTURE, D3DFMT_R16F)))
     {
         const size_t MAX_TEXTURE_IMAGE_UNITS_VTF_SM3 = 4;
-        caps->maxVertexTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS_VTF_SM3;
+        caps->maxShaderTextureImageUnits[gl::ShaderType::Vertex] = MAX_TEXTURE_IMAGE_UNITS_VTF_SM3;
     }
     else
     {
-        caps->maxVertexTextureImageUnits = 0;
+        caps->maxShaderTextureImageUnits[gl::ShaderType::Vertex] = 0;
     }
 
     // Fragment shader limits
     const size_t MAX_PIXEL_CONSTANT_VECTORS_SM3 = 224;
     const size_t MAX_PIXEL_CONSTANT_VECTORS_SM2 = 32;
     caps->maxFragmentUniformVectors =
         ((deviceCaps.PixelShaderVersion >= D3DPS_VERSION(3, 0)) ? MAX_PIXEL_CONSTANT_VECTORS_SM3
                                                                 : MAX_PIXEL_CONSTANT_VECTORS_SM2) -
         GetReservedFragmentUniformVectors();
     caps->maxFragmentUniformComponents = caps->maxFragmentUniformVectors * 4;
-    caps->maxFragmentUniformBlocks = 0;
+    caps->maxShaderUniformBlocks[gl::ShaderType::Fragment]     = 0;
     caps->maxFragmentInputComponents = caps->maxVertexOutputComponents;
-    caps->maxTextureImageUnits = 16;
+    caps->maxShaderTextureImageUnits[gl::ShaderType::Fragment] = 16;
     caps->minProgramTexelOffset = 0;
     caps->maxProgramTexelOffset = 0;
 
     // Aggregate shader limits (unused in ES2)
     caps->maxUniformBufferBindings = 0;
     caps->maxUniformBlockSize = 0;
     caps->uniformBufferOffsetAlignment = 0;
     caps->maxCombinedUniformBlocks = 0;
     caps->maxCombinedVertexUniformComponents = 0;
     caps->maxCombinedFragmentUniformComponents = 0;
     caps->maxVaryingComponents = 0;
 
     // Aggregate shader limits
     caps->maxVaryingVectors = caps->maxVertexOutputComponents / 4;
-    caps->maxCombinedTextureImageUnits = caps->maxVertexTextureImageUnits + caps->maxTextureImageUnits;
+    caps->maxCombinedTextureImageUnits = caps->maxShaderTextureImageUnits[gl::ShaderType::Vertex] +
+                                         caps->maxShaderTextureImageUnits[gl::ShaderType::Fragment];
 
     // Transform feedback limits
     caps->maxTransformFeedbackInterleavedComponents = 0;
     caps->maxTransformFeedbackSeparateAttributes = 0;
     caps->maxTransformFeedbackSeparateComponents = 0;
 
     // Multisample limits
     caps->maxSamples = maxSamples;
--- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h
@@ -34,17 +34,17 @@ D3DBLENDOP ConvertBlendOp(GLenum blendOp
 D3DSTENCILOP ConvertStencilOp(GLenum stencilOp);
 D3DTEXTUREADDRESS ConvertTextureWrap(GLenum wrap);
 D3DCULL ConvertCullMode(gl::CullFaceMode cullFace, GLenum frontFace);
 D3DCUBEMAP_FACES ConvertCubeFace(gl::TextureTarget cubeFace);
 DWORD ConvertColorMask(bool red, bool green, bool blue, bool alpha);
 D3DTEXTUREFILTERTYPE ConvertMagFilter(GLenum magFilter, float maxAnisotropy);
 void ConvertMinFilter(GLenum minFilter, D3DTEXTUREFILTERTYPE *d3dMinFilter, D3DTEXTUREFILTERTYPE *d3dMipFilter,
                       float *d3dLodBias, float maxAnisotropy, size_t baseLevel);
-D3DQUERYTYPE ConvertQueryType(GLenum queryType);
+D3DQUERYTYPE ConvertQueryType(gl::QueryType type);
 
 D3DMULTISAMPLE_TYPE GetMultisampleType(GLuint samples);
 
 }
 
 namespace d3d9_gl
 {
 
--- a/gfx/angle/checkout/src/libANGLE/renderer/driver_utils.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/driver_utils.cpp
@@ -112,9 +112,28 @@ bool IsBroxton(uint32_t DeviceId)
     return std::find(std::begin(Broxton), std::end(Broxton), DeviceId) != std::end(Broxton);
 }
 
 bool IsKabylake(uint32_t DeviceId)
 {
     return std::find(std::begin(Kabylake), std::end(Kabylake), DeviceId) != std::end(Kabylake);
 }
 
+const char *GetVendorString(uint32_t vendorId)
+{
+    switch (vendorId)
+    {
+        case VENDOR_ID_AMD:
+            return "Advanced Micro Devices";
+        case VENDOR_ID_NVIDIA:
+            return "NVIDIA";
+        case VENDOR_ID_INTEL:
+            return "Intel";
+        case VENDOR_ID_QUALCOMM:
+            return "Qualcomm";
+        default:
+            // TODO(jmadill): More vendor IDs.
+            ASSERT(vendorId == 0xba5eba11);  // Mock vendor ID used for tests.
+            return "Unknown";
+    }
+}
+
 }  // namespace rx
\ No newline at end of file
--- a/gfx/angle/checkout/src/libANGLE/renderer/driver_utils.h
+++ b/gfx/angle/checkout/src/libANGLE/renderer/driver_utils.h
@@ -40,16 +40,18 @@ inline bool IsNvidia(uint32_t vendor_id)
     return vendor_id == VENDOR_ID_NVIDIA;
 }
 
 inline bool IsQualcomm(uint32_t vendor_id)
 {
     return vendor_id == VENDOR_ID_QUALCOMM;
 }
 
+const char *GetVendorString(uint32_t vendorId);
+
 // Intel
 class IntelDriverVersion
 {
   public:
     // Currently, We only provide the constructor with one parameter. It mainly used in Intel
     // version number on windows. If you want to use this class on other platforms, it's easy to
     // be extended.
     IntelDriverVersion(uint16_t lastPart);
--- a/gfx/angle/checkout/src/libANGLE/renderer/renderer_utils.cpp
+++ b/gfx/angle/checkout/src/libANGLE/renderer/renderer_utils.cpp
@@ -534,16 +534,16 @@ gl::Error IncompleteTextureSet::getIncom
         ANGLE_TRY(multisampleInitializer->initializeMultisampleTextureToBlack(context, t.get()));
     }
     else
     {
         ANGLE_TRY(t->setSubImage(context, unpack, gl::NonCubeTextureTypeToTarget(createType), 0,
                                  area, GL_RGBA, GL_UNSIGNED_BYTE, color));
     }
 
-    t->syncState();
+    ANGLE_TRY(t->syncState(context));
 
     mIncompleteTextures[type].set(context, t.release());
     *textureOut = mIncompleteTextures[type].get();
     return gl::NoError();
 }
 
 }  // namespace rx
--- a/gfx/angle/checkout/src/libANGLE/validationEGL.cpp
+++ b/gfx/angle/checkout/src/libANGLE/validationEGL.cpp
@@ -299,16 +299,17 @@ Error ValidateGetPlatformDisplayCommon(E
     {
         EGLAttrib platformType       = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
         bool enableAutoTrimSpecified = false;
         bool presentPathSpecified    = false;
 
         Optional<EGLAttrib> majorVersion;
         Optional<EGLAttrib> minorVersion;
         Optional<EGLAttrib> deviceType;
+        Optional<EGLAttrib> eglHandle;
 
         for (const auto &curAttrib : attribMap)
         {
             const EGLAttrib value = curAttrib.second;
 
             switch (curAttrib.first)
             {
                 case EGL_PLATFORM_ANGLE_TYPE_ANGLE:
@@ -395,16 +396,23 @@ Error ValidateGetPlatformDisplayCommon(E
                     if (value != EGL_TRUE && value != EGL_FALSE && value != EGL_DONT_CARE)
                     {
                         return EglBadAttribute() << "EGL_PLATFORM_ANGLE_DEBUG_LAYERS_ENABLED_ANGLE "
                                                     "must be EGL_TRUE, EGL_FALSE, or "
                                                     "EGL_DONT_CARE.";
                     }
                     break;
 
+                case EGL_PLATFORM_ANGLE_EGL_HANDLE_ANGLE:
+                    if (value != EGL_DONT_CARE)
+                    {
+                        eglHandle = value;
+                    }
+                    break;
+
                 default:
                     break;
             }
         }
 
         if (!majorVersion.valid() && minorVersion.valid())
         {
             return EglBadAttribute()
@@ -455,16 +463,23 @@ Error ValidateGetPlatformDisplayCommon(E
         {
             if ((majorVersion.valid() && majorVersion.value() != 1) ||
                 (minorVersion.valid() && minorVersion.value() != 0))
             {
                 return EglBadAttribute() << "EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE currently "
                                             "only supports Vulkan 1.0.";
             }
         }
+
+        if (eglHandle.valid() && platformType != EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE &&
+            platformType != EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE)
+        {
+            return EglBadAttribute() << "EGL_PLATFORM_ANGLE_EGL_HANDLE_ANGLE requires a "
+                                        "device type of EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE.";
+        }
     }
     else if (platform == EGL_PLATFORM_DEVICE_EXT)
     {
         Device *eglDevice = reinterpret_cast<Device *>(native_display);
         if (eglDevice == nullptr || !Device::IsValidDevice(eglDevice))
         {
             return EglBadAttribute() << "native_display should be a valid EGL device if "
                                         "platform equals EGL_PLATFORM_DEVICE_EXT";
@@ -1265,17 +1280,17 @@ Error ValidateCreatePbufferFromClientBuf
         }
     }
 
     ANGLE_TRY(display->validateClientBuffer(config, buftype, buffer, attributes));
 
     return NoError();
 }
 
-Error ValidateMakeCurrent(Display *display, EGLSurface draw, EGLSurface read, gl::Context *context)
+Error ValidateMakeCurrent(Display *display, Surface *draw, Surface *read, gl::Context *context)
 {
     if (context == EGL_NO_CONTEXT && (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE))
     {
         return EglBadMatch() << "If ctx is EGL_NO_CONTEXT, surfaces must be EGL_NO_SURFACE";
     }
 
     // If ctx is EGL_NO_CONTEXT and either draw or read are not EGL_NO_SURFACE, an EGL_BAD_MATCH
     // error is generated. EGL_KHR_surfaceless_context allows both surfaces to be EGL_NO_SURFACE.
@@ -1316,47 +1331,41 @@ Error ValidateMakeCurrent(Display *displ
         return EglNotInitialized() << "'dpy' not initialized";
     }
 
     if (context != EGL_NO_CONTEXT)
     {
         ANGLE_TRY(ValidateContext(display, context));
     }
 
-    if (display->isInitialized() && display->testDeviceLost())
+    if (display->isInitialized() && display->isDeviceLost())
     {
         return EglContextLost();
     }
 
-    Surface *drawSurface = static_cast<Surface *>(draw);
     if (draw != EGL_NO_SURFACE)
     {
-        ANGLE_TRY(ValidateSurface(display, drawSurface));
+        ANGLE_TRY(ValidateSurface(display, draw));
     }
 
-    Surface *readSurface = static_cast<Surface *>(read);
     if (read != EGL_NO_SURFACE)
     {
-        ANGLE_TRY(ValidateSurface(display, readSurface));
-    }
-
-    if (readSurface)
-    {
-        ANGLE_TRY(ValidateCompatibleConfigs(display, readSurface->getConfig(), readSurface,
-                                            context->getConfig(), readSurface->getType()));
+        ANGLE_TRY(ValidateSurface(display, read));
+        ANGLE_TRY(ValidateCompatibleConfigs(display, read->getConfig(), read, context->getConfig(),
+                                            read->getType()));
     }
 
     if (draw != read)
     {
         UNIMPLEMENTED();  // FIXME
 
-        if (drawSurface)
+        if (draw)
         {
-            ANGLE_TRY(ValidateCompatibleConfigs(display, drawSurface->getConfig(), drawSurface,
-                                                context->getConfig(), drawSurface->getType()));
+            ANGLE_TRY(ValidateCompatibleConfigs(display, draw->getConfig(), draw,
+                                                context->getConfig(), draw->getType()));
         }
     }
     return NoError();
 }
 
 Error ValidateCompatibleConfigs(const Display *display,
                                 const Config *config1,
                                 const Surface *surface,
--- a/gfx/angle/checkout/src/libANGLE/validationEGL.h
+++ b/gfx/angle/checkout/src/libANGLE/validationEGL.h
@@ -44,17 +44,17 @@ Error ValidateCreateContext(Display *dis
 
 Error ValidateCreateWindowSurface(Display *display, Config *config, EGLNativeWindowType window,
                                   const AttributeMap& attributes);
 
 Error ValidateCreatePbufferSurface(Display *display, Config *config, const AttributeMap& attributes);
 Error ValidateCreatePbufferFromClientBuffer(Display *display, EGLenum buftype, EGLClientBuffer buffer,
                                             Config *config, const AttributeMap& attributes);
 
-Error ValidateMakeCurrent(Display *display, EGLSurface draw, EGLSurface read, gl::Context *context);
+Error ValidateMakeCurrent(Display *display, Surface *draw, Surface *read, gl::Context *context);
 
 Error ValidateCreateImageKHR(const Display *display,
                              gl::Context *context,
                              EGLenum target,
                              EGLClientBuffer buffer,
                              const AttributeMap &attributes);
 Error ValidateDestroyImageKHR(const Display *display, const Image *image);
 
--- a/gfx/angle/checkout/src/libANGLE/validationES.cpp
+++ b/gfx/angle/checkout/src/libANGLE/validationES.cpp
@@ -63,131 +63,127 @@ bool CompressedTextureFormatRequiresExac
 }
 bool CompressedSubTextureFormatRequiresExactSize(GLenum internalFormat)
 {
     // Compressed sub textures have additional formats that requires exact size.
     // ES 3.1, Section 8.7, Page 171
     return CompressedTextureFormatRequiresExactSize(internalFormat) ||
            IsETC2EACFormat(internalFormat);
 }
+
+bool DifferenceCanOverflow(GLint a, GLint b)
+{
+    CheckedNumeric<GLint> checkedA(a);
+    checkedA -= b;
+    // Use negation to make sure that the difference can't overflow regardless of the order.
+    checkedA = -checkedA;
+    return !checkedA.IsValid();
+}
+
 bool ValidateDrawAttribs(Context *context, GLint primcount, GLint maxVertex, GLint vertexCount)
 {
     const gl::State &state     = context->getGLState();
     const gl::Program *program = state.getProgram();
 
     bool webglCompatibility = context->getExtensions().webglCompatibility;
 
-    const VertexArray *vao     = state.getVertexArray();
+    const VertexArray *vao              = state.getVertexArray();
+    const AttributesMask &clientAttribs = vao->getEnabledClientMemoryAttribsMask();
+
+    if (clientAttribs.any())
+    {
+        if (webglCompatibility || !state.areClientArraysEnabled())
+        {
+            // [WebGL 1.0] Section 6.5 Enabled Vertex Attributes and Range Checking
+            // If a vertex attribute is enabled as an array via enableVertexAttribArray but no
+            // buffer is bound to that attribute via bindBuffer and vertexAttribPointer, then calls
+            // to drawArrays or drawElements will generate an INVALID_OPERATION error.
+            ANGLE_VALIDATION_ERR(context, InvalidOperation(), VertexArrayNoBuffer);
+            return false;
+        }
+        else if (vao->hasEnabledNullPointerClientArray())
+        {
+            // This is an application error that would normally result in a crash, but we catch it
+            // and return an error
+            ANGLE_VALIDATION_ERR(context, InvalidOperation(), VertexArrayNoBufferPointer);
+            return false;
+        }
+    }
+
+    // If we're drawing zero vertices, we have enough data.
+    if (vertexCount <= 0 || primcount <= 0)
+    {
+        return true;
+    }
+
     const auto &vertexAttribs  = vao->getVertexAttributes();
     const auto &vertexBindings = vao->getVertexBindings();
-    for (size_t attributeIndex : vao->getEnabledAttributesMask())
+
+    bool isGLES1 = context->getClientVersion() < Version(2, 0);
+
+    const AttributesMask &activeAttribs = ((isGLES1 ? context->getVertexArraysAttributeMask()
+                                                    : program->getActiveAttribLocationsMask()) &
+                                           vao->getEnabledAttributesMask() & ~clientAttribs);
+
+    for (size_t attributeIndex : activeAttribs)
     {
         const VertexAttribute &attrib = vertexAttribs[attributeIndex];
-
-        // No need to range check for disabled attribs.
-        if (!attrib.enabled)
-        {
-            continue;
-        }
-
-        // If we have no buffer, then we either get an error, or there are no more checks to be
-        // done.
+        ASSERT(attrib.enabled);
+
         const VertexBinding &binding = vertexBindings[attrib.bindingIndex];
-        gl::Buffer *buffer           = binding.getBuffer().get();
-        if (!buffer)
-        {
-            if (webglCompatibility || !state.areClientArraysEnabled())
-            {
-                // [WebGL 1.0] Section 6.5 Enabled Vertex Attributes and Range Checking
-                // If a vertex attribute is enabled as an array via enableVertexAttribArray but
-                // no buffer is bound to that attribute via bindBuffer and vertexAttribPointer,
-                // then calls to drawArrays or drawElements will generate an INVALID_OPERATION
-                // error.
-                ANGLE_VALIDATION_ERR(context, InvalidOperation(), VertexArrayNoBuffer);
-                return false;
-            }
-            else if (attrib.pointer == nullptr)
-            {
-                // This is an application error that would normally result in a crash,
-                // but we catch it and return an error
-                ANGLE_VALIDATION_ERR(context, InvalidOperation(), VertexArrayNoBufferPointer);
-                return false;
-            }
-            continue;
-        }
-
-        // This needs to come after the check for client arrays as even unused attributes cannot use
-        // client-side arrays
-        if (!program->isAttribLocationActive(attributeIndex))
-        {
-            continue;
-        }
-
-        // If we're drawing zero vertices, we have enough data.
-        if (vertexCount <= 0 || primcount <= 0)
-        {
-            continue;
-        }
-
-        GLint maxVertexElement = 0;
+        ASSERT(isGLES1 || program->isAttribLocationActive(attributeIndex));
+
+        GLint maxVertexElement = maxVertex;
         GLuint divisor         = binding.getDivisor();
-        if (divisor == 0)
-        {
-            maxVertexElement = maxVertex;
-        }
-        else
+        if (divisor != 0)
         {
             maxVertexElement = (primcount - 1) / divisor;
         }
 
         // We do manual overflow checks here instead of using safe_math.h because it was
         // a bottleneck. Thanks to some properties of GL we know inequalities that can
         // help us make the overflow checks faster.
 
         // The max possible attribSize is 16 for a vector of 4 32 bit values.
         constexpr uint64_t kMaxAttribSize = 16;
         constexpr uint64_t kIntMax        = std::numeric_limits<int>::max();
         constexpr uint64_t kUint64Max     = std::numeric_limits<uint64_t>::max();
 
         // We know attribStride is given as a GLsizei which is typedefed to int.
         // We also know an upper bound for attribSize.
-        static_assert(std::is_same<int, GLsizei>::value, "");
-        uint64_t attribStride = ComputeVertexAttributeStride(attrib, binding);
-        uint64_t attribSize   = ComputeVertexAttributeTypeSize(attrib);
-        ASSERT(attribStride <= kIntMax && attribSize <= kMaxAttribSize);
-
-        // Computing the max offset using uint64_t without attrib.offset is overflow
-        // safe. Note: Last vertex element does not take the full stride!
-        static_assert(kIntMax * kIntMax < kUint64Max - kMaxAttribSize, "");
-        uint64_t attribDataSizeNoOffset = maxVertexElement * attribStride + attribSize;
+        static_assert(std::is_same<int, GLsizei>::value, "Unexpected type");
+        ASSERT(ComputeVertexAttributeStride(attrib, binding) == binding.getStride());
+        uint64_t attribStride = binding.getStride();
+        ASSERT(attribStride <= kIntMax && ComputeVertexAttributeTypeSize(attrib) <= kMaxAttribSize);
+
+        // Computing the product of two 32-bit ints will fit in 64 bits without overflow.
+        static_assert(kIntMax * kIntMax < kUint64Max, "Unexpected overflow");
+        uint64_t attribDataSizeMinusAttribSize = maxVertexElement * attribStride;
 
         // An overflow can happen when adding the offset, check for it.
-        uint64_t attribOffset = ComputeVertexAttributeOffset(attrib, binding);
-        if (attribDataSizeNoOffset > kUint64Max - attribOffset)
+        if (attribDataSizeMinusAttribSize > kUint64Max - attrib.cachedSizePlusRelativeOffset)
         {
             ANGLE_VALIDATION_ERR(context, InvalidOperation(), IntegerOverflow);
             return false;
         }
-        uint64_t attribDataSizeWithOffset = attribDataSizeNoOffset + attribOffset;
 
         // [OpenGL ES 3.0.2] section 2.9.4 page 40:
-        // We can return INVALID_OPERATION if our vertex attribute does not have
-        // enough backing data.
-        if (attribDataSizeWithOffset > static_cast<uint64_t>(buffer->getSize()))
+        // We can return INVALID_OPERATION if our array buffer does not have enough backing data.
+        if (attribDataSizeMinusAttribSize + attrib.cachedSizePlusRelativeOffset >
+            binding.getCachedBufferSizeMinusOffset())
         {
             ANGLE_VALIDATION_ERR(context, InvalidOperation(), InsufficientVertexBufferSize);
             return false;
         }
-
-        if (webglCompatibility && buffer->isBoundForTransformFeedbackAndOtherUse())
-        {
-            ANGLE_VALIDATION_ERR(context, InvalidOperation(),
-                                 VertexBufferBoundForTransformFeedback);
-            return false;
-        }
+    }
+
+    if (webglCompatibility && vao->hasTransformFeedbackBindingConflict(activeAttribs))
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidOperation(), VertexBufferBoundForTransformFeedback);
+        return false;
     }
 
     return true;
 }
 
 bool ValidReadPixelsTypeEnum(Context *context, GLenum type)
 {
     switch (type)
@@ -633,16 +629,48 @@ bool ValidTexture2DDestinationTarget(con
             return true;
         case TextureTarget::Rectangle:
             return context->getExtensions().textureRectangle;
         default:
             return false;
     }
 }
 
+bool ValidateTransformFeedbackPrimitiveMode(const Context *context,
+                                            GLenum transformFeedbackPrimitiveMode,
+                                            GLenum renderPrimitiveMode)
+{
+    ASSERT(context);
+
+    if (!context->getExtensions().geometryShader)
+    {
+        // It is an invalid operation to call DrawArrays or DrawArraysInstanced with a draw mode
+        // that does not match the current transform feedback object's draw mode (if transform
+        // feedback is active), (3.0.2, section 2.14, pg 86)
+        return transformFeedbackPrimitiveMode == renderPrimitiveMode;
+    }
+
+    // [GL_EXT_geometry_shader] Table 12.1gs
+    switch (transformFeedbackPrimitiveMode)
+    {
+        case GL_POINTS:
+            return renderPrimitiveMode == GL_POINTS;
+        case GL_TRIANGLES:
+            return renderPrimitiveMode == GL_TRIANGLES ||
+                   renderPrimitiveMode == GL_TRIANGLE_STRIP ||
+                   renderPrimitiveMode == GL_TRIANGLE_FAN;
+        case GL_LINES:
+            return renderPrimitiveMode == GL_LINES || renderPrimitiveMode == GL_LINE_LOOP ||
+                   renderPrimitiveMode == GL_LINE_STRIP;
+        default:
+            UNREACHABLE();
+            return false;
+    }
+}
+
 bool ValidateDrawElementsInstancedBase(Context *context,
                                        GLenum mode,
                                        GLsizei count,
                                        GLenum type,
                                        const GLvoid *indices,
                                        GLsizei primcount)
 {
     if (primcount < 0)
@@ -968,36 +996,31 @@ bool ValidImageDataSize(Context *context
             context->handleError(InvalidOperation() << "imageSize must be at least " << endByte);
             return false;
         }
     }
 
     return true;
 }
 
-bool ValidQueryType(const Context *context, GLenum queryType)
-{
-    static_assert(GL_ANY_SAMPLES_PASSED == GL_ANY_SAMPLES_PASSED_EXT,
-                  "GL extension enums not equal.");
-    static_assert(GL_ANY_SAMPLES_PASSED_CONSERVATIVE == GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT,
-                  "GL extension enums not equal.");
-
+bool ValidQueryType(const Context *context, QueryType queryType)
+{
     switch (queryType)
     {
-        case GL_ANY_SAMPLES_PASSED:
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+        case QueryType::AnySamples:
+        case QueryType::AnySamplesConservative:
             return context->getClientMajorVersion() >= 3 ||
                    context->getExtensions().occlusionQueryBoolean;
-        case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+        case QueryType::TransformFeedbackPrimitivesWritten:
             return (context->getClientMajorVersion() >= 3);
-        case GL_TIME_ELAPSED_EXT:
+        case QueryType::TimeElapsed:
             return context->getExtensions().disjointTimerQuery;
-        case GL_COMMANDS_COMPLETED_CHROMIUM:
+        case QueryType::CommandsCompleted:
             return context->getExtensions().syncQuery;
-        case GL_PRIMITIVES_GENERATED_EXT:
+        case QueryType::PrimitivesGenerated:
             return context->getExtensions().geometryShader;
         default:
             return false;
     }
 }
 
 bool ValidateWebGLVertexAttribPointer(Context *context,
                                       GLenum type,
@@ -1275,37 +1298,46 @@ bool ValidateBlitFramebufferParameters(C
     gl::Framebuffer *drawFramebuffer = glState.getDrawFramebuffer();
 
     if (!readFramebuffer || !drawFramebuffer)
     {
         context->handleError(InvalidFramebufferOperation());
         return false;
     }
 
-    if (!ValidateFramebufferComplete(context, readFramebuffer, true))
-    {
-        return false;
-    }
-
-    if (!ValidateFramebufferComplete(context, drawFramebuffer, true))
+    if (!ValidateFramebufferComplete(context, readFramebuffer))
+    {
+        return false;
+    }
+
+    if (!ValidateFramebufferComplete(context, drawFramebuffer))
     {
         return false;
     }
 
     if (readFramebuffer->id() == drawFramebuffer->id())
     {
         context->handleError(InvalidOperation());
         return false;
     }
 
     if (!ValidateFramebufferNotMultisampled(context, drawFramebuffer))
     {
         return false;
     }
 
+    // This validation is specified in the WebGL 2.0 spec and not in the GLES 3.0.5 spec, but we
+    // always run it in order to avoid triggering driver bugs.
+    if (DifferenceCanOverflow(srcX0, srcX1) || DifferenceCanOverflow(srcY0, srcY1) ||
+        DifferenceCanOverflow(dstX0, dstX1) || DifferenceCanOverflow(dstY0, dstY1))
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidValue(), BlitDimensionsOutOfRange);
+        return false;
+    }
+
     bool sameBounds = srcX0 == dstX0 && srcY0 == dstY0 && srcX1 == dstX1 && srcY1 == dstY1;
 
     if (mask & GL_COLOR_BUFFER_BIT)
     {
         const gl::FramebufferAttachment *readColorBuffer = readFramebuffer->getReadColorbuffer();
         const Extensions &extensions                     = context->getExtensions();
 
         if (readColorBuffer)
@@ -1604,17 +1636,17 @@ bool ValidateIsQueryEXT(gl::Context *con
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), QueryExtensionNotEnabled);
         return false;
     }
 
     return true;
 }
 
-bool ValidateBeginQueryBase(gl::Context *context, GLenum target, GLuint id)
+bool ValidateBeginQueryBase(gl::Context *context, QueryType target, GLuint id)
 {
     if (!ValidQueryType(context, target))
     {
         ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidQueryType);
         return false;
     }
 
     if (id == 0)
@@ -1659,29 +1691,29 @@ bool ValidateBeginQueryBase(gl::Context 
     {
         context->handleError(InvalidOperation() << "Query type does not match target");
         return false;
     }
 
     return true;
 }
 
-bool ValidateBeginQueryEXT(gl::Context *context, GLenum target, GLuint id)
+bool ValidateBeginQueryEXT(gl::Context *context, QueryType target, GLuint id)
 {
     if (!context->getExtensions().occlusionQueryBoolean &&
         !context->getExtensions().disjointTimerQuery && !context->getExtensions().syncQuery)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), QueryExtensionNotEnabled);
         return false;
     }
 
     return ValidateBeginQueryBase(context, target, id);
 }
 
-bool ValidateEndQueryBase(gl::Context *context, GLenum target)
+bool ValidateEndQueryBase(gl::Context *context, QueryType target)
 {
     if (!ValidQueryType(context, target))
     {
         ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidQueryType);
         return false;
     }
 
     const Query *queryObject = context->getGLState().getActiveQuery(target);
@@ -1690,37 +1722,37 @@ bool ValidateEndQueryBase(gl::Context *c
     {
         context->handleError(InvalidOperation() << "Query target not active");
         return false;
     }
 
     return true;
 }
 
-bool ValidateEndQueryEXT(gl::Context *context, GLenum target)
+bool ValidateEndQueryEXT(gl::Context *context, QueryType target)
 {
     if (!context->getExtensions().occlusionQueryBoolean &&
         !context->getExtensions().disjointTimerQuery && !context->getExtensions().syncQuery)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), QueryExtensionNotEnabled);
         return false;
     }
 
     return ValidateEndQueryBase(context, target);
 }
 
-bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target)
+bool ValidateQueryCounterEXT(Context *context, GLuint id, QueryType target)
 {
     if (!context->getExtensions().disjointTimerQuery)
     {
         context->handleError(InvalidOperation() << "Disjoint timer query not enabled");
         return false;
     }
 
-    if (target != GL_TIMESTAMP_EXT)
+    if (target != QueryType::Timestamp)
     {
         ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidQueryTarget);
         return false;
     }
 
     Query *queryObject = context->getQuery(id, true, target);
     if (queryObject == nullptr)
     {
@@ -1732,41 +1764,41 @@ bool ValidateQueryCounterEXT(Context *co
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), QueryActive);
         return false;
     }
 
     return true;
 }
 
-bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams)
+bool ValidateGetQueryivBase(Context *context, QueryType target, GLenum pname, GLsizei *numParams)
 {
     if (numParams)
     {
         *numParams = 0;
     }
 
-    if (!ValidQueryType(context, target) && target != GL_TIMESTAMP_EXT)
+    if (!ValidQueryType(context, target) && target != QueryType::Timestamp)
     {
         ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidQueryType);
         return false;
     }
 
     switch (pname)
     {
         case GL_CURRENT_QUERY_EXT:
-            if (target == GL_TIMESTAMP_EXT)
+            if (target == QueryType::Timestamp)
             {
                 context->handleError(InvalidEnum() << "Cannot use current query for timestamp");
                 return false;
             }
             break;
         case GL_QUERY_COUNTER_BITS_EXT:
             if (!context->getExtensions().disjointTimerQuery ||
-                (target != GL_TIMESTAMP_EXT && target != GL_TIME_ELAPSED_EXT))
+                (target != QueryType::Timestamp && target != QueryType::TimeElapsed))
             {
                 ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidPname);
                 return false;
             }
             break;
         default:
             ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidPname);
             return false;
@@ -1776,30 +1808,30 @@ bool ValidateGetQueryivBase(Context *con
     {
         // All queries return only one value
         *numParams = 1;
     }
 
     return true;
 }
 
-bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint *params)
+bool ValidateGetQueryivEXT(Context *context, QueryType target, GLenum pname, GLint *params)
 {
     if (!context->getExtensions().occlusionQueryBoolean &&
         !context->getExtensions().disjointTimerQuery && !context->getExtensions().syncQuery)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), ExtensionNotEnabled);
         return false;
     }
 
     return ValidateGetQueryivBase(context, target, pname, nullptr);
 }
 
 bool ValidateGetQueryivRobustANGLE(Context *context,
-                                   GLenum target,
+                                   QueryType target,
                                    GLenum pname,
                                    GLsizei bufSize,
                                    GLsizei *length,
                                    GLint *params)
 {
     if (!ValidateRobustEntryPoint(context, bufSize))
     {
         return false;
@@ -1824,17 +1856,17 @@ bool ValidateGetQueryivRobustANGLE(Conte
 
 bool ValidateGetQueryObjectValueBase(Context *context, GLuint id, GLenum pname, GLsizei *numParams)
 {
     if (numParams)
     {
         *numParams = 0;
     }
 
-    Query *queryObject = context->getQuery(id, false, GL_NONE);
+    Query *queryObject = context->getQuery(id, false, QueryType::InvalidEnum);
 
     if (!queryObject)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), InvalidQueryId);
         return false;
     }
 
     if (context->getGLState().isQueryActive(queryObject))
@@ -2094,17 +2126,17 @@ bool ValidateUniformCommonBase(Context *
     {
         context->handleError(InvalidOperation());
         return false;
     }
 
     const auto &uniform = program->getUniformByIndex(uniformLocation.index);
 
     // attempting to write an array to a non-array uniform is an INVALID_OPERATION
-    if (!uniform.isArray() && count > 1)
+    if (count > 1 && !uniform.isArray())
     {
         context->handleError(InvalidOperation());
         return false;
     }
 
     *uniformOut = &uniform;
     return true;
 }
@@ -2249,17 +2281,17 @@ bool ValidateStateQuery(Context *context
             break;
 
         case GL_IMPLEMENTATION_COLOR_READ_TYPE:
         case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
         {
             Framebuffer *readFramebuffer = context->getGLState().getReadFramebuffer();
             ASSERT(readFramebuffer);
 
-            if (!ValidateFramebufferComplete(context, readFramebuffer, false))
+            if (!ValidateFramebufferComplete<InvalidOperation>(context, readFramebuffer))
             {
                 return false;
             }
 
             if (readFramebuffer->getReadBufferState() == GL_NONE)
             {
                 ANGLE_VALIDATION_ERR(context, InvalidOperation(), ReadBufferNone);
                 return false;
@@ -2437,17 +2469,17 @@ bool ValidateCopyTexImageParametersBase(
     if (!ValidMipLevel(context, texType, level))
     {
         ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidMipLevel);
         return false;
     }
 
     const gl::State &state       = context->getGLState();
     Framebuffer *readFramebuffer = state.getReadFramebuffer();
-    if (!ValidateFramebufferComplete(context, readFramebuffer, true))
+    if (!ValidateFramebufferComplete(context, readFramebuffer))
     {
         return false;
     }
 
     if (readFramebuffer->id() != 0 && !ValidateFramebufferNotMultisampled(context, readFramebuffer))
     {
         return false;
     }
@@ -2668,155 +2700,165 @@ bool ValidateDrawBase(Context *context, 
                              "stencil writemasks, reference values, or stencil mask values.";
                 }
                 ANGLE_VALIDATION_ERR(context, InvalidOperation(), StencilReferenceMaskOrMismatch);
                 return false;
             }
         }
     }
 
-    if (!ValidateFramebufferComplete(context, framebuffer, true))
-    {
-        return false;
-    }
-
-    gl::Program *program = state.getProgram();
-    if (!program)
-    {
-        ANGLE_VALIDATION_ERR(context, InvalidOperation(), ProgramNotBound);
-        return false;
-    }
-
-    // In OpenGL ES spec for UseProgram at section 7.3, trying to render without
-    // vertex shader stage or fragment shader stage is a undefined behaviour.
-    // But ANGLE should clearly generate an INVALID_OPERATION error instead of
-    // produce undefined result.
-    if (!program->hasLinkedShaderStage(ShaderType::Vertex) ||
-        !program->hasLinkedShaderStage(ShaderType::Fragment))
-    {
-        context->handleError(InvalidOperation() << "It is a undefined behaviour to render without "
-                                                   "vertex shader stage or fragment shader stage.");
-        return false;
-    }
-
-    if (!program->validateSamplers(nullptr, context->getCaps()))
-    {
-        context->handleError(InvalidOperation());
-        return false;
-    }
-
-    if (extensions.multiview)
-    {
-        const int programNumViews     = program->usesMultiview() ? program->getNumViews() : 1;
-        const int framebufferNumViews = framebuffer->getNumViews();
-        if (framebufferNumViews != programNumViews)
+    if (!ValidateFramebufferComplete(context, framebuffer))
+    {
+        return false;
+    }
+
+    // If we are running GLES1, there is no current program.
+    if (context->getClientVersion() >= Version(2, 0))
+    {
+
+        gl::Program *program = state.getProgram();
+        if (!program)
         {
-            context->handleError(InvalidOperation() << "The number of views in the active program "
-                                                       "and draw framebuffer does not match.");
+            ANGLE_VALIDATION_ERR(context, InvalidOperation(), ProgramNotBound);
             return false;
         }
 
-        const TransformFeedback *transformFeedbackObject = state.getCurrentTransformFeedback();
-        if (transformFeedbackObject != nullptr && transformFeedbackObject->isActive() &&
-            framebufferNumViews > 1)
+        // In OpenGL ES spec for UseProgram at section 7.3, trying to render without
+        // vertex shader stage or fragment shader stage is a undefined behaviour.
+        // But ANGLE should clearly generate an INVALID_OPERATION error instead of
+        // produce undefined result.
+        if (!program->hasLinkedShaderStage(ShaderType::Vertex) ||
+            !program->hasLinkedShaderStage(ShaderType::Fragment))
         {
             context->handleError(InvalidOperation()
-                                 << "There is an active transform feedback object "
-                                    "when the number of views in the active draw "
-                                    "framebuffer is greater than 1.");
+                                 << "It is a undefined behaviour to render without "
+                                    "vertex shader stage or fragment shader stage.");
             return false;
         }
 
-        if (extensions.disjointTimerQuery && framebufferNumViews > 1 &&
-            state.isQueryActive(GL_TIME_ELAPSED_EXT))
+        if (!program->validateSamplers(nullptr, context->getCaps()))
         {
-            context->handleError(InvalidOperation() << "There is an active query for target "
-                                                       "GL_TIME_ELAPSED_EXT when the number of "
-                                                       "views in the active draw framebuffer is "
-                                                       "greater than 1.");
+            context->handleError(InvalidOperation());
             return false;
         }
-    }
-
-    // Do geometry shader specific validations
-    if (program->hasLinkedShaderStage(ShaderType::Geometry))
-    {
-        if (!IsCompatibleDrawModeWithGeometryShader(mode,
-                                                    program->getGeometryShaderInputPrimitiveType()))
+
+        if (extensions.multiview)
         {
-            ANGLE_VALIDATION_ERR(context, InvalidOperation(),
-                                 IncompatibleDrawModeAgainstGeometryShader);
-            return false;
+            const int programNumViews     = program->usesMultiview() ? program->getNumViews() : 1;
+            const int framebufferNumViews = framebuffer->getNumViews();
+            if (framebufferNumViews != programNumViews)
+            {
+                context->handleError(InvalidOperation()
+                                     << "The number of views in the active program "
+                                        "and draw framebuffer does not match.");
+                return false;
+            }
+
+            const TransformFeedback *transformFeedbackObject = state.getCurrentTransformFeedback();
+            if (transformFeedbackObject != nullptr && transformFeedbackObject->isActive() &&
+                framebufferNumViews > 1)
+            {
+                context->handleError(InvalidOperation()
+                                     << "There is an active transform feedback object "
+                                        "when the number of views in the active draw "
+                                        "framebuffer is greater than 1.");
+                return false;
+            }
+
+            if (extensions.disjointTimerQuery && framebufferNumViews > 1 &&
+                state.isQueryActive(QueryType::TimeElapsed))
+            {
+                context->handleError(InvalidOperation()
+                                     << "There is an active query for target "
+                                        "GL_TIME_ELAPSED_EXT when the number of "
+                                        "views in the active draw framebuffer is "
+                                        "greater than 1.");
+                return false;
+            }
         }
-    }
-
-    // Uniform buffer validation
-    for (unsigned int uniformBlockIndex = 0;
-         uniformBlockIndex < program->getActiveUniformBlockCount(); uniformBlockIndex++)
-    {
-        const gl::InterfaceBlock &uniformBlock = program->getUniformBlockByIndex(uniformBlockIndex);
-        GLuint blockBinding                    = program->getUniformBlockBinding(uniformBlockIndex);
-        const OffsetBindingPointer<Buffer> &uniformBuffer =
-            state.getIndexedUniformBuffer(blockBinding);
-
-        if (uniformBuffer.get() == nullptr)
+
+        // Do geometry shader specific validations
+        if (program->hasLinkedShaderStage(ShaderType::Geometry))
         {
-            // undefined behaviour
-            context->handleError(
-                InvalidOperation()
-                << "It is undefined behaviour to have a used but unbound uniform buffer.");
-            return false;
+            if (!IsCompatibleDrawModeWithGeometryShader(
+                    mode, program->getGeometryShaderInputPrimitiveType()))
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidOperation(),
+                                     IncompatibleDrawModeAgainstGeometryShader);
+                return false;
+            }
         }
 
-        size_t uniformBufferSize = GetBoundBufferAvailableSize(uniformBuffer);
-        if (uniformBufferSize < uniformBlock.dataSize)
+        // Uniform buffer validation
+        for (unsigned int uniformBlockIndex = 0;
+             uniformBlockIndex < program->getActiveUniformBlockCount(); uniformBlockIndex++)
         {
-            // undefined behaviour
-            context->handleError(
-                InvalidOperation()
-                << "It is undefined behaviour to use a uniform buffer that is too small.");
-            return false;
-        }
-
-        if (extensions.webglCompatibility &&
-            uniformBuffer->isBoundForTransformFeedbackAndOtherUse())
-        {
-            ANGLE_VALIDATION_ERR(context, InvalidOperation(),
-                                 UniformBufferBoundForTransformFeedback);
-            return false;
+            const gl::InterfaceBlock &uniformBlock =
+                program->getUniformBlockByIndex(uniformBlockIndex);
+            GLuint blockBinding = program->getUniformBlockBinding(uniformBlockIndex);
+            const OffsetBindingPointer<Buffer> &uniformBuffer =
+                state.getIndexedUniformBuffer(blockBinding);
+
+            if (uniformBuffer.get() == nullptr)
+            {
+                // undefined behaviour
+                context->handleError(
+                    InvalidOperation()
+                    << "It is undefined behaviour to have a used but unbound uniform buffer.");
+                return false;
+            }
+
+            size_t uniformBufferSize = GetBoundBufferAvailableSize(uniformBuffer);
+            if (uniformBufferSize < uniformBlock.dataSize)
+            {
+                // undefined behaviour
+                context->handleError(
+                    InvalidOperation()
+                    << "It is undefined behaviour to use a uniform buffer that is too small.");
+                return false;
+            }
+
+            if (extensions.webglCompatibility &&
+                uniformBuffer->isBoundForTransformFeedbackAndOtherUse())
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidOperation(),
+                                     UniformBufferBoundForTransformFeedback);
+                return false;
+            }
         }
-    }
-
-    // Do some additonal WebGL-specific validation
-    if (extensions.webglCompatibility)
-    {
-        const TransformFeedback *transformFeedbackObject = state.getCurrentTransformFeedback();
-        if (transformFeedbackObject != nullptr && transformFeedbackObject->isActive() &&
-            transformFeedbackObject->buffersBoundForOtherUse())
-        {
-            ANGLE_VALIDATION_ERR(context, InvalidOperation(), TransformFeedbackBufferDoubleBound);
-            return false;
-        }
-        // Detect rendering feedback loops for WebGL.
-        if (framebuffer->formsRenderingFeedbackLoopWith(state))
+
+        // Do some additonal WebGL-specific validation
+        if (extensions.webglCompatibility)
         {
-            ANGLE_VALIDATION_ERR(context, InvalidOperation(), FeedbackLoop);
-            return false;
-        }
-
-        // Detect that the vertex shader input types match the attribute types
-        if (!ValidateVertexShaderAttributeTypeMatch(context))
-        {
-            return false;
-        }
-
-        // Detect that the color buffer types match the fragment shader output types
-        if (!ValidateFragmentShaderColorBufferTypeMatch(context))
-        {
-            return false;
+            const TransformFeedback *transformFeedbackObject = state.getCurrentTransformFeedback();
+            if (transformFeedbackObject != nullptr && transformFeedbackObject->isActive() &&
+                transformFeedbackObject->buffersBoundForOtherUse())
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidOperation(),
+                                     TransformFeedbackBufferDoubleBound);
+                return false;
+            }
+            // Detect rendering feedback loops for WebGL.
+            if (framebuffer->formsRenderingFeedbackLoopWith(state))
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidOperation(), FeedbackLoop);
+                return false;
+            }
+
+            // Detect that the vertex shader input types match the attribute types
+            if (!ValidateVertexShaderAttributeTypeMatch(context))
+            {
+                return false;
+            }
+
+            // Detect that the color buffer types match the fragment shader output types
+            if (!ValidateFragmentShaderColorBufferTypeMatch(context))
+            {
+                return false;
+            }
         }
     }
 
     return true;
 }
 
 bool ValidateDrawArraysCommon(Context *context,
                               GLenum mode,
@@ -2830,22 +2872,19 @@ bool ValidateDrawArraysCommon(Context *c
         return false;
     }
 
     const State &state                          = context->getGLState();
     gl::TransformFeedback *curTransformFeedback = state.getCurrentTransformFeedback();
     if (curTransformFeedback && curTransformFeedback->isActive() &&
         !curTransformFeedback->isPaused())
     {
-        if (curTransformFeedback->getPrimitiveMode() != mode)
+        if (!ValidateTransformFeedbackPrimitiveMode(context,
+                                                    curTransformFeedback->getPrimitiveMode(), mode))
         {
-            // It is an invalid operation to call DrawArrays or DrawArraysInstanced with a draw mode
-            // that does not match the current transform feedback object's draw mode (if transform
-            // feedback
-            // is active), (3.0.2, section 2.14, pg 86)
             ANGLE_VALIDATION_ERR(context, InvalidOperation(), InvalidDrawModeTransformFeedback);
             return false;
         }
 
         if (!curTransformFeedback->checkBufferSpaceForDraw(count, primcount))
         {
             ANGLE_VALIDATION_ERR(context, InvalidOperation(), TransformFeedbackBufferTooSmall);
             return false;
@@ -2895,17 +2934,17 @@ bool ValidateDrawArraysInstancedANGLE(Co
     if (!ValidateDrawArraysInstancedBase(context, mode, first, count, primcount))
     {
         return false;
     }
 
     return ValidateDrawInstancedANGLE(context);
 }
 
-bool ValidateDrawElementsBase(Context *context, GLenum type)
+bool ValidateDrawElementsBase(Context *context, GLenum mode, GLenum type)
 {
     switch (type)
     {
         case GL_UNSIGNED_BYTE:
         case GL_UNSIGNED_SHORT:
             break;
         case GL_UNSIGNED_INT:
             if (context->getClientMajorVersion() < 3 && !context->getExtensions().elementIndexUint)
@@ -2920,34 +2959,49 @@ bool ValidateDrawElementsBase(Context *c
     }
 
     const State &state = context->getGLState();
 
     gl::TransformFeedback *curTransformFeedback = state.getCurrentTransformFeedback();
     if (curTransformFeedback && curTransformFeedback->isActive() &&
         !curTransformFeedback->isPaused())
     {
-        // It is an invalid operation to call DrawElements, DrawRangeElements or
-        // DrawElementsInstanced
-        // while transform feedback is active, (3.0.2, section 2.14, pg 86)
-        context->handleError(InvalidOperation());
-        return false;
+        // EXT_geometry_shader allows transform feedback to work with all draw commands.
+        // [EXT_geometry_shader] Section 12.1, "Transform Feedback"
+        if (context->getExtensions().geometryShader)
+        {
+            if (!ValidateTransformFeedbackPrimitiveMode(
+                    context, curTransformFeedback->getPrimitiveMode(), mode))
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidOperation(), InvalidDrawModeTransformFeedback);
+                return false;
+            }
+        }
+        else
+        {
+            // It is an invalid operation to call DrawElements, DrawRangeElements or
+            // DrawElementsInstanced while transform feedback is active, (3.0.2, section 2.14, pg
+            // 86)
+            ANGLE_VALIDATION_ERR(context, InvalidOperation(),
+                                 UnsupportedDrawModeForTransformFeedback);
+            return false;
+        }
     }
 
     return true;
 }
 
 bool ValidateDrawElementsCommon(Context *context,
                                 GLenum mode,
                                 GLsizei count,
                                 GLenum type,
                                 const void *indices,
                                 GLsizei primcount)
 {
-    if (!ValidateDrawElementsBase(context, type))
+    if (!ValidateDrawElementsBase(context, mode, type))
         return false;
 
     const State &state = context->getGLState();
 
     if (!ValidateDrawBase(context, mode, count))
     {
         return false;
     }
@@ -4987,17 +5041,17 @@ bool ValidateGetActiveUniformBlockivRobu
         return false;
     }
 
     SetRobustLengthParam(length, writeLength);
 
     return true;
 }
 
-bool ValidateGetInternalFormativRobustANGLE(Context *context,
+bool ValidateGetInternalformativRobustANGLE(Context *context,
                                             GLenum target,
                                             GLenum internalformat,
                                             GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei *length,
                                             GLint *params)
 {
     if (!ValidateRobustEntryPoint(context, bufSize))
@@ -5574,17 +5628,17 @@ bool ValidateReadPixelsBase(Context *con
     if (width < 0 || height < 0)
     {
         ANGLE_VALIDATION_ERR(context, InvalidValue(), NegativeSize);
         return false;
     }
 
     Framebuffer *readFramebuffer = context->getGLState().getReadFramebuffer();
 
-    if (!ValidateFramebufferComplete(context, readFramebuffer, true))
+    if (!ValidateFramebufferComplete(context, readFramebuffer))
     {
         return false;
     }
 
     if (readFramebuffer->id() != 0 && !ValidateFramebufferNotMultisampled(context, readFramebuffer))
     {
         return false;
     }
@@ -6331,43 +6385,19 @@ bool ValidateGetInternalFormativBase(Con
     {
         // glGetInternalFormativ will not overflow bufSize
         *numParams = std::min(bufSize, maxWriteParams);
     }
 
     return true;
 }
 
-// We should check with Khronos if returning INVALID_FRAMEBUFFER_OPERATION is OK when querying
-// implementation format info for incomplete framebuffers. It seems like these queries are
-// incongruent with the other errors.
-bool ValidateFramebufferComplete(Context *context, Framebuffer *framebuffer, bool isFramebufferOp)
-{
-    bool complete = false;
-    ANGLE_VALIDATION_TRY(framebuffer->isComplete(context, &complete));
-    if (!complete)
-    {
-        if (isFramebufferOp)
-        {
-            context->handleError(InvalidFramebufferOperation());
-        }
-        else
-        {
-            context->handleError(InvalidOperation());
-        }
-        return false;
-    }
-    return true;
-}
-
 bool ValidateFramebufferNotMultisampled(Context *context, Framebuffer *framebuffer)
 {
-    GLint samples = 0;
-    ANGLE_VALIDATION_TRY(framebuffer->getSamples(context, &samples));
-    if (samples != 0)
+    if (framebuffer->getSamples(context) != 0)
     {
         context->handleError(InvalidOperation());
         return false;
     }
     return true;
 }
 
 bool ValidateMultitextureUnit(Context *context, GLenum texture)
--- a/gfx/angle/checkout/src/libANGLE/validationES.h
+++ b/gfx/angle/checkout/src/libANGLE/validationES.h
@@ -5,17 +5,19 @@
 //
 
 // validationES.h: Validation functions for generic OpenGL ES entry point parameters
 
 #ifndef LIBANGLE_VALIDATION_ES_H_
 #define LIBANGLE_VALIDATION_ES_H_
 
 #include "common/mathutil.h"
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/Context.h"
+#include "libANGLE/Framebuffer.h"
+#include "libANGLE/PackedEnums.h"
 
 #include <GLES2/gl2.h>
 #include <GLES3/gl3.h>
 #include <GLES3/gl31.h>
 
 namespace egl
 {
 class Display;
@@ -67,17 +69,17 @@ bool ValidImageDataSize(Context *context
                         GLsizei width,
                         GLsizei height,
                         GLsizei depth,
                         GLenum format,
                         GLenum type,
                         const void *pixels,
                         GLsizei imageSize);
 
-bool ValidQueryType(const Context *context, GLenum queryType);
+bool ValidQueryType(const Context *context, QueryType queryType);
 
 bool ValidateWebGLVertexAttribPointer(Context *context,
                                       GLenum type,
                                       GLboolean normalized,
                                       GLsizei stride,
                                       const void *ptr,
                                       bool pureInteger);
 
@@ -160,33 +162,30 @@ bool ValidateReadnPixelsRobustANGLE(Cont
                                     GLsizei *length,
                                     GLsizei *columns,
                                     GLsizei *rows,
                                     void *data);
 
 bool ValidateGenQueriesEXT(gl::Context *context, GLsizei n, GLuint *ids);
 bool ValidateDeleteQueriesEXT(gl::Context *context, GLsizei n, const GLuint *ids);
 bool ValidateIsQueryEXT(gl::Context *context, GLuint id);
-bool ValidateBeginQueryBase(Context *context, GLenum target, GLuint id);
-bool ValidateBeginQueryEXT(Context *context, GLenum target, GLuint id);
-bool ValidateEndQueryBase(Context *context, GLenum target);
-bool ValidateEndQueryEXT(Context *context, GLenum target);
-bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target);
-bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams);
-bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint *params);
+bool ValidateBeginQueryBase(Context *context, QueryType target, GLuint id);
+bool ValidateBeginQueryEXT(Context *context, QueryType target, GLuint id);
+bool ValidateEndQueryBase(Context *context, QueryType target);
+bool ValidateEndQueryEXT(Context *context, QueryType target);
+bool ValidateQueryCounterEXT(Context *context, GLuint id, QueryType target);
+bool ValidateGetQueryivBase(Context *context, QueryType target, GLenum pname, GLsizei *numParams);
+bool ValidateGetQueryivEXT(Context *context, QueryType target, GLenum pname, GLint *params);
 bool ValidateGetQueryivRobustANGLE(Context *context,
-                                   GLenum target,
+                                   QueryType target,
                                    GLenum pname,
                                    GLsizei bufSize,
                                    GLsizei *length,
                                    GLint *params);
-bool ValidateGetQueryObjectValueBase(Context *context,
-                                     GLenum target,
-                                     GLenum pname,
-                                     GLsizei *numParams);
+bool ValidateGetQueryObjectValueBase(Context *context, GLuint id, GLenum pname, GLsizei *numParams);
 bool ValidateGetQueryObjectivEXT(Context *context, GLuint id, GLenum pname, GLint *params);
 bool ValidateGetQueryObjectivRobustANGLE(Context *context,
                                          GLuint id,
                                          GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei *length,
                                          GLint *params);
 bool ValidateGetQueryObjectuivEXT(Context *context, GLuint id, GLenum pname, GLuint *params);
@@ -285,17 +284,17 @@ bool ValidateDrawArraysInstancedBase(Con
                                      GLsizei count,
                                      GLsizei primcount);
 bool ValidateDrawArraysInstancedANGLE(Context *context,
                                       GLenum mode,
                                       GLint first,
                                       GLsizei count,
                                       GLsizei primcount);
 
-bool ValidateDrawElementsBase(Context *context, GLenum type);
+bool ValidateDrawElementsBase(Context *context, GLenum mode, GLenum type);
 bool ValidateDrawElementsCommon(Context *context,
                                 GLenum mode,
                                 GLsizei count,
                                 GLenum type,
                                 const void *indices,
                                 GLsizei primcount);
 
 bool ValidateDrawElementsInstancedCommon(Context *context,
@@ -623,17 +622,17 @@ bool ValidateGetVertexAttribIuivRobustAN
 bool ValidateGetActiveUniformBlockivRobustANGLE(Context *context,
                                                 GLuint program,
                                                 GLuint uniformBlockIndex,
                                                 GLenum pname,
                                                 GLsizei bufSize,
                                                 GLsizei *length,
                                                 GLint *params);
 
-bool ValidateGetInternalFormativRobustANGLE(Context *context,
+bool ValidateGetInternalformativRobustANGLE(Context *context,
                                             GLenum target,
                                             GLenum internalformat,
                                             GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei *length,
                                             GLint *params);
 
 bool ValidateVertexFormatBase(Context *context,
@@ -671,22 +670,40 @@ bool ValidateSamplerParameterBase(Contex
 
 bool ValidateGetInternalFormativBase(Context *context,
                                      GLenum target,
                                      GLenum internalformat,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei *numParams);
 
-bool ValidateFramebufferComplete(Context *context, Framebuffer *framebuffer, bool isFramebufferOp);
 bool ValidateFramebufferNotMultisampled(Context *context, Framebuffer *framebuffer);
 
 bool ValidateMultitextureUnit(Context *context, GLenum texture);
 
+bool ValidateTransformFeedbackPrimitiveMode(const Context *context,
+                                            GLenum transformFeedbackPrimitiveMode,
+                                            GLenum renderPrimitiveMode);
+
 // Utility macro for handling implementation methods inside Validation.
 #define ANGLE_HANDLE_VALIDATION_ERR(X) \
     context->handleError(X);           \
     return false;
 #define ANGLE_VALIDATION_TRY(EXPR) ANGLE_TRY_TEMPLATE(EXPR, ANGLE_HANDLE_VALIDATION_ERR);
 
+// We should check with Khronos if returning INVALID_FRAMEBUFFER_OPERATION is OK when querying
+// implementation format info for incomplete framebuffers. It seems like these queries are
+// incongruent with the other errors.
+// Inlined for speed.
+template <typename ErrorStream = InvalidFramebufferOperation>
+ANGLE_INLINE bool ValidateFramebufferComplete(Context *context, Framebuffer *framebuffer)
+{
+    if (!framebuffer->isComplete(context))
+    {
+        context->handleError(ErrorStream());
+        return false;
+    }
+
+    return true;
+}
 }  // namespace gl
 
 #endif  // LIBANGLE_VALIDATION_ES_H_
--- a/gfx/angle/checkout/src/libANGLE/validationES1.cpp
+++ b/gfx/angle/checkout/src/libANGLE/validationES1.cpp
@@ -15,39 +15,144 @@
 
 #define ANGLE_VALIDATE_IS_GLES1(context)                              \
     if (context->getClientMajorVersion() > 1)                         \
     {                                                                 \
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), GLES1Only); \
         return false;                                                 \
     }
 
-namespace
+namespace gl
 {
 
-bool ValidateAlphaFuncCommon(gl::Context *context, gl::AlphaTestFunc func)
+bool ValidateAlphaFuncCommon(Context *context, AlphaTestFunc func)
 {
     switch (func)
     {
-        case gl::AlphaTestFunc::AlwaysPass:
-        case gl::AlphaTestFunc::Equal:
-        case gl::AlphaTestFunc::Gequal:
-        case gl::AlphaTestFunc::Greater:
-        case gl::AlphaTestFunc::Lequal:
-        case gl::AlphaTestFunc::Less:
-        case gl::AlphaTestFunc::Never:
-        case gl::AlphaTestFunc::NotEqual:
+        case AlphaTestFunc::AlwaysPass:
+        case AlphaTestFunc::Equal:
+        case AlphaTestFunc::Gequal:
+        case AlphaTestFunc::Greater:
+        case AlphaTestFunc::Lequal:
+        case AlphaTestFunc::Less:
+        case AlphaTestFunc::Never:
+        case AlphaTestFunc::NotEqual:
             return true;
         default:
-            context->handleError(gl::InvalidEnum() << gl::kErrorEnumNotSupported);
+            ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
+            return false;
+    }
+}
+
+bool ValidateClientStateCommon(Context *context, ClientVertexArrayType arrayType)
+{
+    ANGLE_VALIDATE_IS_GLES1(context);
+    switch (arrayType)
+    {
+        case ClientVertexArrayType::Vertex:
+        case ClientVertexArrayType::Normal:
+        case ClientVertexArrayType::Color:
+        case ClientVertexArrayType::TextureCoord:
+            return true;
+        case ClientVertexArrayType::PointSize:
+            if (!context->getExtensions().pointSizeArray)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidEnum(), PointSizeArrayExtensionNotEnabled);
+                return false;
+            }
+            return true;
+        default:
+            ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidClientState);
             return false;
     }
 }
 
-}  // anonymous namespace
+bool ValidateBuiltinVertexAttributeCommon(Context *context,
+                                          ClientVertexArrayType arrayType,
+                                          GLint size,
+                                          GLenum type,
+                                          GLsizei stride,
+                                          const void *pointer)
+{
+    ANGLE_VALIDATE_IS_GLES1(context);
+
+    if (stride < 0)
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidVertexPointerStride);
+        return false;
+    }
+
+    int minSize = 1;
+    int maxSize = 4;
+
+    switch (arrayType)
+    {
+        case ClientVertexArrayType::Vertex:
+        case ClientVertexArrayType::TextureCoord:
+            minSize = 2;
+            maxSize = 4;
+            break;
+        case ClientVertexArrayType::Normal:
+            minSize = 3;
+            maxSize = 3;
+            break;
+        case ClientVertexArrayType::Color:
+            minSize = 4;
+            maxSize = 4;
+            break;
+        case ClientVertexArrayType::PointSize:
+            if (!context->getExtensions().pointSizeArray)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidEnum(), PointSizeArrayExtensionNotEnabled);
+                return false;
+            }
+
+            minSize = 1;
+            maxSize = 1;
+            break;
+        default:
+            UNREACHABLE();
+            return false;
+    }
+
+    if (size < minSize || size > maxSize)
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidVertexPointerSize);
+        return false;
+    }
+
+    switch (type)
+    {
+        case GL_BYTE:
+            if (arrayType == ClientVertexArrayType::PointSize)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidVertexPointerType);
+                return false;
+            }
+            break;
+        case GL_SHORT:
+            if (arrayType == ClientVertexArrayType::PointSize ||
+                arrayType == ClientVertexArrayType::Color)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidVertexPointerType);
+                return false;
+            }
+            break;
+        case GL_FIXED:
+        case GL_FLOAT:
+            break;
+        default:
+            ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidVertexPointerType);
+            return false;
+    }
+
+    return true;
+}
+
+}  // namespace gl
 
 namespace gl
 {
 
 bool ValidateAlphaFunc(Context *context, AlphaTestFunc func, GLfloat ref)
 {
     ANGLE_VALIDATE_IS_GLES1(context);
     return ValidateAlphaFuncCommon(context, func);
@@ -108,42 +213,40 @@ bool ValidateColor4x(Context *context, G
 }
 
 bool ValidateColorPointer(Context *context,
                           GLint size,
                           GLenum type,
                           GLsizei stride,
                           const void *pointer)
 {
-    UNIMPLEMENTED();
-    return true;
+    return ValidateBuiltinVertexAttributeCommon(context, ClientVertexArrayType::Color, size, type,
+                                                stride, pointer);
 }
 
 bool ValidateCullFace(Context *context, GLenum mode)
 {
     UNIMPLEMENTED();
     return true;
 }
 
 bool ValidateDepthRangex(Context *context, GLfixed n, GLfixed f)
 {
     UNIMPLEMENTED();
     return true;
 }
 
-bool ValidateDisableClientState(Context *context, GLenum array)
+bool ValidateDisableClientState(Context *context, ClientVertexArrayType arrayType)
 {
-    UNIMPLEMENTED();
-    return true;
+    return ValidateClientStateCommon(context, arrayType);
 }
 
-bool ValidateEnableClientState(Context *context, GLenum array)
+bool ValidateEnableClientState(Context *context, ClientVertexArrayType arrayType)
 {
-    UNIMPLEMENTED();
-    return true;
+    return ValidateClientStateCommon(context, arrayType);
 }
 
 bool ValidateFogf(Context *context, GLenum pname, GLfloat param)
 {
     UNIMPLEMENTED();
     return true;
 }
 
@@ -168,29 +271,37 @@ bool ValidateFogxv(Context *context, GLe
 bool ValidateFrustumf(Context *context,
                       GLfloat l,
                       GLfloat r,
                       GLfloat b,
                       GLfloat t,
                       GLfloat n,
                       GLfloat f)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
+    if (l == r || b == t || n == f || n <= 0.0f || f <= 0.0f)
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidProjectionMatrix);
+    }
     return true;
 }
 
 bool ValidateFrustumx(Context *context,
                       GLfixed l,
                       GLfixed r,
                       GLfixed b,
                       GLfixed t,
                       GLfixed n,
                       GLfixed f)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
+    if (l == r || b == t || n == f || n <= 0 || f <= 0)
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidProjectionMatrix);
+    }
     return true;
 }
 
 bool ValidateGetBufferParameteriv(Context *context, GLenum target, GLenum pname, GLint *params)
 {
     UNIMPLEMENTED();
     return true;
 }
@@ -234,18 +345,29 @@ bool ValidateGetMaterialfv(Context *cont
 bool ValidateGetMaterialxv(Context *context, GLenum face, GLenum pname, GLfixed *params)
 {
     UNIMPLEMENTED();
     return true;
 }
 
 bool ValidateGetPointerv(Context *context, GLenum pname, void **params)
 {
-    UNIMPLEMENTED();
-    return true;
+    ANGLE_VALIDATE_IS_GLES1(context);
+    switch (pname)
+    {
+        case GL_VERTEX_ARRAY_POINTER:
+        case GL_NORMAL_ARRAY_POINTER:
+        case GL_COLOR_ARRAY_POINTER:
+        case GL_TEXTURE_COORD_ARRAY_POINTER:
+        case GL_POINT_SIZE_ARRAY_POINTER_OES:
+            return true;
+        default:
+            ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidPointerQuery);
+            return false;
+    }
 }
 
 bool ValidateGetTexEnvfv(Context *context, GLenum target, GLenum pname, GLfloat *params)
 {
     UNIMPLEMENTED();
     return true;
 }
 
@@ -427,41 +549,49 @@ bool ValidateNormal3f(Context *context, 
 bool ValidateNormal3x(Context *context, GLfixed nx, GLfixed ny, GLfixed nz)
 {
     ANGLE_VALIDATE_IS_GLES1(context);
     return true;
 }
 
 bool ValidateNormalPointer(Context *context, GLenum type, GLsizei stride, const void *pointer)
 {
-    UNIMPLEMENTED();
-    return true;
+    return ValidateBuiltinVertexAttributeCommon(context, ClientVertexArrayType::Normal, 3, type,
+                                                stride, pointer);
 }
 
 bool ValidateOrthof(Context *context,
                     GLfloat l,
                     GLfloat r,
                     GLfloat b,
                     GLfloat t,
                     GLfloat n,
                     GLfloat f)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
+    if (l == r || b == t || n == f || n <= 0.0f || f <= 0.0f)
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidProjectionMatrix);
+    }
     return true;
 }
 
 bool ValidateOrthox(Context *context,
                     GLfixed l,
                     GLfixed r,
                     GLfixed b,
                     GLfixed t,
                     GLfixed n,
                     GLfixed f)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
+    if (l == r || b == t || n == f || n <= 0 || f <= 0)
+    {
+        ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidProjectionMatrix);
+    }
     return true;
 }
 
 bool ValidatePointParameterf(Context *context, GLenum pname, GLfloat param)
 {
     UNIMPLEMENTED();
     return true;
 }
@@ -523,58 +653,58 @@ bool ValidatePushMatrix(Context *context
         ANGLE_VALIDATION_ERR(context, StackOverflow(), MatrixStackOverflow);
         return false;
     }
     return true;
 }
 
 bool ValidateRotatef(Context *context, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
     return true;
 }
 
 bool ValidateRotatex(Context *context, GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
     return true;
 }
 
 bool ValidateSampleCoveragex(Context *context, GLclampx value, GLboolean invert)
 {
     UNIMPLEMENTED();
     return true;
 }
 
 bool ValidateScalef(Context *context, GLfloat x, GLfloat y, GLfloat z)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
     return true;
 }
 
 bool ValidateScalex(Context *context, GLfixed x, GLfixed y, GLfixed z)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
     return true;
 }
 
 bool ValidateShadeModel(Context *context, GLenum mode)
 {
     UNIMPLEMENTED();
     return true;
 }
 
 bool ValidateTexCoordPointer(Context *context,
                              GLint size,
                              GLenum type,
                              GLsizei stride,
                              const void *pointer)
 {
-    UNIMPLEMENTED();
-    return true;
+    return ValidateBuiltinVertexAttributeCommon(context, ClientVertexArrayType::TextureCoord, size,
+                                                type, stride, pointer);
 }
 
 bool ValidateTexEnvf(Context *context, GLenum target, GLenum pname, GLfloat param)
 {
     UNIMPLEMENTED();
     return true;
 }
 
@@ -620,34 +750,34 @@ bool ValidateTexParameterxv(Context *con
                             const GLfixed *params)
 {
     UNIMPLEMENTED();
     return true;
 }
 
 bool ValidateTranslatef(Context *context, GLfloat x, GLfloat y, GLfloat z)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
     return true;
 }
 
 bool ValidateTranslatex(Context *context, GLfixed x, GLfixed y, GLfixed z)
 {
-    UNIMPLEMENTED();
+    ANGLE_VALIDATE_IS_GLES1(context);
     return true;
 }
 
 bool ValidateVertexPointer(Context *context,
                            GLint size,
                            GLenum type,
                            GLsizei stride,
                            const void *pointer)
 {
-    UNIMPLEMENTED();
-    return true;
+    return ValidateBuiltinVertexAttributeCommon(context, ClientVertexArrayType::Vertex, size, type,
+                                                stride, pointer);
 }
 
 bool ValidateDrawTexfOES(Context *context,
                          GLfloat x,
                          GLfloat y,
                          GLfloat z,
                          GLfloat width,
                          GLfloat height)
@@ -737,18 +867,18 @@ bool ValidateWeightPointerOES(Context *c
                               const void *pointer)
 {
     UNIMPLEMENTED();
     return true;
 }
 
 bool ValidatePointSizePointerOES(Context *context, GLenum type, GLsizei stride, const void *pointer)
 {
-    UNIMPLEMENTED();
-    return true;
+    return ValidateBuiltinVertexAttributeCommon(context, ClientVertexArrayType::PointSize, 1, type,
+                                                stride, pointer);
 }
 
 bool ValidateQueryMatrixxOES(Context *context, GLfixed *mantissa, GLint *exponent)
 {
     UNIMPLEMENTED();
     return true;
 }
 
@@ -912,9 +1042,10 @@ bool ValidateTexGeniOES(Context *context
     return true;
 }
 
 bool ValidateTexGenxOES(Context *context, GLenum coord, GLenum pname, GLfixed param)
 {
     UNIMPLEMENTED();
     return true;
 }
-}
+
+}  // namespace gl
--- a/gfx/angle/checkout/src/libANGLE/validationES1.h
+++ b/gfx/angle/checkout/src/libANGLE/validationES1.h
@@ -30,18 +30,18 @@ bool ValidateColor4ub(Context *context, 
 bool ValidateColor4x(Context *context, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
 bool ValidateColorPointer(Context *context,
                           GLint size,
                           GLenum type,
                           GLsizei stride,
                           const void *pointer);
 bool ValidateCullFace(Context *context, GLenum mode);
 bool ValidateDepthRangex(Context *context, GLfixed n, GLfixed f);
-bool ValidateDisableClientState(Context *context, GLenum array);
-bool ValidateEnableClientState(Context *context, GLenum array);
+bool ValidateDisableClientState(Context *context, ClientVertexArrayType array);
+bool ValidateEnableClientState(Context *context, ClientVertexArrayType array);
 bool ValidateFogf(Context *context, GLenum pname, GLfloat param);
 bool ValidateFogfv(Context *context, GLenum pname, const GLfloat *params);
 bool ValidateFogx(Context *context, GLenum pname, GLfixed param);
 bool ValidateFogxv(Context *context, GLenum pname, const GLfixed *param);
 bool ValidateFrustumf(Context *context,
                       GLfloat l,
                       GLfloat r,
                       GLfloat b,
--- a/gfx/angle/checkout/src/libANGLE/validationES2.cpp
+++ b/gfx/angle/checkout/src/libANGLE/validationES2.cpp
@@ -789,17 +789,28 @@ bool ValidCap(const Context *context, GL
         case GL_SAMPLE_MASK:
             return context->getClientVersion() >= Version(3, 1);
 
         case GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
             return queryOnly && context->getExtensions().robustResourceInitialization;
 
         // GLES1 emulation: GLES1-specific caps
         case GL_ALPHA_TEST:
+        case GL_VERTEX_ARRAY:
+        case GL_NORMAL_ARRAY:
+        case GL_COLOR_ARRAY:
+        case GL_TEXTURE_COORD_ARRAY:
+        case GL_TEXTURE_2D:
             return context->getClientVersion() < Version(2, 0);
+        case GL_POINT_SIZE_ARRAY_OES:
+            return context->getClientVersion() < Version(2, 0) &&
+                   context->getExtensions().pointSizeArray;
+        case GL_TEXTURE_CUBE_MAP:
+            return context->getClientVersion() < Version(2, 0) &&
+                   context->getExtensions().textureCubeMap;
 
         default:
             return false;
     }
 }
 
 // Return true if a character belongs to the ASCII subset as defined in GLSL ES 1.0 spec section
 // 3.1.
@@ -1176,80 +1187,44 @@ bool ValidateES2TexImageParameters(Conte
         return false;
     }
 
     if (isCompressed)
     {
         GLenum actualInternalFormat =
             isSubImage ? texture->getFormat(target, level).info->sizedInternalFormat
                        : internalformat;
-        switch (actualInternalFormat)
+
+        const InternalFormat &internalFormatInfo = GetSizedInternalFormatInfo(actualInternalFormat);
+
+        if (!internalFormatInfo.compressed)
         {
-            case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
-            case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
-                if (!context->getExtensions().textureCompressionDXT1)
-                {
-                    ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
-                    return false;
-                }
-                break;
-            case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
-                if (!context->getExtensions().textureCompressionDXT3)
-                {
-                    ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
-                    return false;
-                }
-                break;
-            case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
-                if (!context->getExtensions().textureCompressionDXT5)
-                {
-                    ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
-                    return false;
-                }
-                break;
-            case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
-            case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
-            case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
-            case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
-                if (!context->getExtensions().textureCompressionS3TCsRGB)
-                {
-                    ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
-                    return false;
-                }
-                break;
-            case GL_ETC1_RGB8_OES:
-                if (!context->getExtensions().compressedETC1RGB8Texture)
-                {
-                    ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
-                    return false;
-                }
-                if (isSubImage)
-                {
-                    ANGLE_VALIDATION_ERR(context, InvalidOperation(), InvalidInternalFormat);
-                    return false;
-                }
-                break;
-            case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
-            case GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE:
-            case GL_COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE:
-            case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
-            case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
-                if (!context->getExtensions().lossyETCDecode)
-                {
-                    ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
-                    return false;
-                }
-                break;
-            default:
-                ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
-                return false;
+            ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
+            return false;
+        }
+
+        if (!internalFormatInfo.textureSupport(context->getClientVersion(),
+                                               context->getExtensions()))
+        {
+            ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidInternalFormat);
+            return false;
         }
 
         if (isSubImage)
         {
+            // From the OES_compressed_ETC1_RGB8_texture spec:
+            // INVALID_OPERATION is generated by CompressedTexSubImage2D, TexSubImage2D, or
+            // CopyTexSubImage2D if the texture image <level> bound to <target> has internal format
+            // ETC1_RGB8_OES.
+            if (actualInternalFormat == GL_ETC1_RGB8_OES)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidOperation(), InvalidInternalFormat);
+                return false;
+            }
+
             if (!ValidCompressedSubImageSize(context, actualInternalFormat, xoffset, yoffset, width,
                                              height, texture->getWidth(target, level),
                                              texture->getHeight(target, level)))
             {
                 context->handleError(InvalidOperation() << "Invalid compressed format dimension.");
                 return false;
             }
 
@@ -2468,33 +2443,33 @@ bool ValidateBlitFramebufferANGLE(Contex
     if (mask & GL_COLOR_BUFFER_BIT)
     {
         const FramebufferAttachment *readColorAttachment = readFramebuffer->getReadColorbuffer();
         const FramebufferAttachment *drawColorAttachment = drawFramebuffer->getFirstColorbuffer();
 
         if (readColorAttachment && drawColorAttachment)
         {
             if (!(readColorAttachment->type() == GL_TEXTURE &&
-                  readColorAttachment->getTextureImageIndex().type == TextureType::_2D) &&
+                  readColorAttachment->getTextureImageIndex().getType() == TextureType::_2D) &&
                 readColorAttachment->type() != GL_RENDERBUFFER &&
                 readColorAttachment->type() != GL_FRAMEBUFFER_DEFAULT)
             {
                 context->handleError(InvalidOperation());
                 return false;
             }
 
             for (size_t drawbufferIdx = 0;
                  drawbufferIdx < drawFramebuffer->getDrawbufferStateCount(); ++drawbufferIdx)
             {
                 const FramebufferAttachment *attachment =
                     drawFramebuffer->getDrawBuffer(drawbufferIdx);
                 if (attachment)
                 {
                     if (!(attachment->type() == GL_TEXTURE &&
-                          attachment->getTextureImageIndex().type == TextureType::_2D) &&
+                          attachment->getTextureImageIndex().getType() == TextureType::_2D) &&
                         attachment->type() != GL_RENDERBUFFER &&
                         attachment->type() != GL_FRAMEBUFFER_DEFAULT)
                     {
                         context->handleError(InvalidOperation());
                         return false;
                     }
 
                     // Return an error if the destination formats do not match
@@ -2502,18 +2477,17 @@ bool ValidateBlitFramebufferANGLE(Contex
                                                    readColorAttachment->getFormat()))
                     {
                         context->handleError(InvalidOperation());
                         return false;
                     }
                 }
             }
 
-            GLint samples = 0;
-            ANGLE_VALIDATION_TRY(readFramebuffer->getSamples(context, &samples));
+            GLint samples = readFramebuffer->getSamples(context);
             if (samples != 0 &&
                 IsPartialBlit(context, readColorAttachment, drawColorAttachment, srcX0, srcY0,
                               srcX1, srcY1, dstX0, dstY0, dstX1, dstY1))
             {
                 context->handleError(InvalidOperation());
                 return false;
             }
         }
@@ -2554,17 +2528,17 @@ bool ValidateBlitFramebufferANGLE(Contex
     return ValidateBlitFramebufferParameters(context, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0,
                                              dstX1, dstY1, mask, filter);
 }
 
 bool ValidateClear(Context *context, GLbitfield mask)
 {
     Framebuffer *fbo = context->getGLState().getDrawFramebuffer();
 
-    if (!ValidateFramebufferComplete(context, fbo, true))
+    if (!ValidateFramebufferComplete(context, fbo))
     {
         return false;
     }
 
     if ((mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) != 0)
     {
         ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidClearMask);
         return false;
@@ -2618,27 +2592,27 @@ bool ValidateTexImage2D(Context *context
     }
 
     ASSERT(context->getClientMajorVersion() >= 3);
     return ValidateES3TexImage2DParameters(context, target, level, internalformat, false, false, 0,
                                            0, 0, width, height, 1, border, format, type, -1,
                                            pixels);
 }
 
-bool ValidateTexImage2DRobust(Context *context,
-                              TextureTarget target,
-                              GLint level,
-                              GLint internalformat,
-                              GLsizei width,
-                              GLsizei height,
-                              GLint border,
-                              GLenum format,
-                              GLenum type,
-                              GLsizei bufSize,
-                              const void *pixels)
+bool ValidateTexImage2DRobustANGLE(Context *context,
+                                   TextureTarget target,
+                                   GLint level,
+                                   GLint internalformat,
+                                   GLsizei width,
+                                   GLsizei height,
+                                   GLint border,
+                                   GLenum format,
+                                   GLenum type,
+                                   GLsizei bufSize,
+                                   const void *pixels)
 {
     if (!ValidateRobustEntryPoint(context, bufSize))
     {
         return false;
     }
 
     if (context->getClientMajorVersion() < 3)
     {
@@ -6128,20 +6102,20 @@ bool ValidateGenerateMipmap(Context *con
     // generation
     if (format.colorEncoding == GL_SRGB && format.format == GL_RGB)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), GenerateMipmapNotAllowed);
         return false;
     }
 
     // ES3 and WebGL grant mipmap generation for sRGBA (with alpha) textures but GL_EXT_sRGB does
-    // not.
-    bool supportsSRGBMipmapGeneration =
-        context->getClientVersion() >= ES_3_0 || context->getExtensions().webglCompatibility;
-    if (!supportsSRGBMipmapGeneration && format.colorEncoding == GL_SRGB)
+    // not.  Differentiate the ES3 format from the extension format by checking if the format is
+    // sized, GL_EXT_sRGB does not add any sized formats.
+    bool supportsSRGBMipmapGeneration = context->getExtensions().webglCompatibility;
+    if (!supportsSRGBMipmapGeneration && !format.sized && format.colorEncoding == GL_SRGB)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), GenerateMipmapNotAllowed);
         return false;
     }
 
     // Non-power of 2 ES2 check
     if (context->getClientVersion() < Version(3, 0) && !context->getExtensions().textureNPOT &&
         (!isPow2(static_cast<int>(texture->getWidth(baseTarget, 0))) ||
--- a/gfx/angle/checkout/src/libANGLE/validationES2.h
+++ b/gfx/angle/checkout/src/libANGLE/validationES2.h
@@ -4,17 +4,17 @@
 // found in the LICENSE file.
 //
 
 // validationES2.h: Validation functions for OpenGL ES 2.0 entry point parameters
 
 #ifndef LIBANGLE_VALIDATION_ES2_H_
 #define LIBANGLE_VALIDATION_ES2_H_
 
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
 
 namespace gl
 {
 class Context;
 
@@ -126,27 +126,27 @@ bool ValidateTexImage2D(Context *context
                         GLint level,
                         GLint internalformat,
                         GLsizei width,
                         GLsizei height,
                         GLint border,
                         GLenum format,
                         GLenum type,
                         const void *pixels);
-bool ValidateTexImage2DRobust(Context *context,
-                              TextureTarget target,
-                              GLint level,
-                              GLint internalformat,
-                              GLsizei width,
-                              GLsizei height,
-                              GLint border,
-                              GLenum format,
-                              GLenum type,
-                              GLsizei bufSize,
-                              const void *pixels);
+bool ValidateTexImage2DRobustANGLE(Context *context,
+                                   TextureTarget target,
+                                   GLint level,
+                                   GLint internalformat,
+                                   GLsizei width,
+                                   GLsizei height,
+                                   GLint border,
+                                   GLenum format,
+                                   GLenum type,
+                                   GLsizei bufSize,
+                                   const void *pixels);
 bool ValidateTexSubImage2D(Context *context,
                            TextureTarget target,
                            GLint level,
                            GLint xoffset,
                            GLint yoffset,
                            GLsizei width,
                            GLsizei height,
                            GLenum format,
--- a/gfx/angle/checkout/src/libANGLE/validationES3.cpp
+++ b/gfx/angle/checkout/src/libANGLE/validationES3.cpp
@@ -803,17 +803,17 @@ bool ValidateES3CopyTexImageParametersBa
         return false;
     }
     ASSERT(textureFormat.valid() || !isSubImage);
 
     const auto &state            = context->getGLState();
     gl::Framebuffer *framebuffer = state.getReadFramebuffer();
     GLuint readFramebufferID     = framebuffer->id();
 
-    if (!ValidateFramebufferComplete(context, framebuffer, true))
+    if (!ValidateFramebufferComplete(context, framebuffer))
     {
         return false;
     }
 
     if (readFramebufferID != 0 && !ValidateFramebufferNotMultisampled(context, framebuffer))
     {
         return false;
     }
@@ -1058,39 +1058,39 @@ bool ValidateES3TexStorage3DParameters(C
         context->handleError(InvalidEnum());
         return false;
     }
 
     return ValidateES3TexStorageParametersBase(context, target, levels, internalformat, width,
                                                height, depth);
 }
 
-bool ValidateBeginQuery(gl::Context *context, GLenum target, GLuint id)
+bool ValidateBeginQuery(gl::Context *context, QueryType target, GLuint id)
 {
     if (context->getClientMajorVersion() < 3)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), ES3Required);
         return false;
     }
 
     return ValidateBeginQueryBase(context, target, id);
 }
 
-bool ValidateEndQuery(gl::Context *context, GLenum target)
+bool ValidateEndQuery(gl::Context *context, QueryType target)
 {
     if (context->getClientMajorVersion() < 3)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), ES3Required);
         return false;
     }
 
     return ValidateEndQueryBase(context, target);
 }
 
-bool ValidateGetQueryiv(Context *context, GLenum target, GLenum pname, GLint *params)
+bool ValidateGetQueryiv(Context *context, QueryType target, GLenum pname, GLint *params)
 {
     if (context->getClientMajorVersion() < 3)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), ES3Required);
         return false;
     }
 
     return ValidateGetQueryivBase(context, target, pname, nullptr);
@@ -1239,17 +1239,17 @@ bool ValidateInvalidateSubFramebuffer(Co
 bool ValidateClearBuffer(Context *context)
 {
     if (context->getClientMajorVersion() < 3)
     {
         ANGLE_VALIDATION_ERR(context, InvalidOperation(), ES3Required);
         return false;
     }
 
-    if (!ValidateFramebufferComplete(context, context->getGLState().getDrawFramebuffer(), true))
+    if (!ValidateFramebufferComplete(context, context->getGLState().getDrawFramebuffer()))
     {
         return false;
     }
 
     return true;
 }
 
 bool ValidateDrawRangeElements(Context *context,
--- a/gfx/angle/checkout/src/libANGLE/validationES3.h
+++ b/gfx/angle/checkout/src/libANGLE/validationES3.h
@@ -4,17 +4,17 @@
 // found in the LICENSE file.
 //
 
 // validationES3.h: Validation functions for OpenGL ES 3.0 entry point parameters
 
 #ifndef LIBANGLE_VALIDATION_ES3_H_
 #define LIBANGLE_VALIDATION_ES3_H_
 
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 #include <GLES3/gl3.h>
 
 namespace gl
 {
 class Context;
 struct IndexRange;
 
@@ -141,21 +141,21 @@ bool ValidateES3TexStorage2DParameters(C
 bool ValidateES3TexStorage3DParameters(Context *context,
                                        TextureType target,
                                        GLsizei levels,
                                        GLenum internalformat,
                                        GLsizei width,
                                        GLsizei height,
                                        GLsizei depth);
 
-bool ValidateBeginQuery(Context *context, GLenum target, GLuint id);
+bool ValidateBeginQuery(Context *context, QueryType target, GLuint id);
 
-bool ValidateEndQuery(Context *context, GLenum target);
+bool ValidateEndQuery(Context *context, QueryType target);
 
-bool ValidateGetQueryiv(Context *context, GLenum target, GLenum pname, GLint *params);
+bool ValidateGetQueryiv(Context *context, QueryType target, GLenum pname, GLint *params);
 
 bool ValidateGetQueryObjectuiv(Context *context, GLuint id, GLenum pname, GLuint *params);
 
 bool ValidateFramebufferTextureLayer(Context *context,
                                      GLenum target,
                                      GLenum attachment,
                                      GLuint texture,
                                      GLint level,
--- a/gfx/angle/checkout/src/libANGLE/validationES31.cpp
+++ b/gfx/angle/checkout/src/libANGLE/validationES31.cpp
@@ -57,18 +57,19 @@ bool ValidateLocationProgramInterface(GL
 }
 
 bool ValidateProgramInterface(GLenum programInterface)
 {
     return (programInterface == GL_ATOMIC_COUNTER_BUFFER ||
             ValidateNamedProgramInterface(programInterface));
 }
 
-bool ValidateProgramResourceProperty(GLenum prop)
+bool ValidateProgramResourceProperty(const Context *context, GLenum prop)
 {
+    ASSERT(context);
     switch (prop)
     {
         case GL_ACTIVE_VARIABLES:
         case GL_BUFFER_BINDING:
         case GL_NUM_ACTIVE_VARIABLES:
 
         case GL_ARRAY_SIZE:
 
@@ -92,16 +93,19 @@ bool ValidateProgramResourceProperty(GLe
         case GL_REFERENCED_BY_COMPUTE_SHADER:
 
         case GL_TOP_LEVEL_ARRAY_SIZE:
         case GL_TOP_LEVEL_ARRAY_STRIDE:
 
         case GL_TYPE:
             return true;
 
+        case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
+            return context->getExtensions().geometryShader;
+
         default:
             return false;
     }
 }
 
 // GLES 3.10 spec: Page 82 -- Table 7.2
 bool ValidateProgramResourcePropertyByInterface(GLenum prop, GLenum programInterface)
 {
@@ -194,16 +198,17 @@ bool ValidateProgramResourcePropertyByIn
                 default:
                     return false;
             }
         }
 
         case GL_REFERENCED_BY_VERTEX_SHADER:
         case GL_REFERENCED_BY_FRAGMENT_SHADER:
         case GL_REFERENCED_BY_COMPUTE_SHADER:
+        case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
         {
             switch (programInterface)
             {
                 case GL_ATOMIC_COUNTER_BUFFER:
                 case GL_BUFFER_VARIABLE:
                 case GL_PROGRAM_INPUT:
                 case GL_PROGRAM_OUTPUT:
                 case GL_SHADER_STORAGE_BLOCK:
@@ -465,19 +470,35 @@ bool ValidateDrawIndirectBase(Context *c
 
 bool ValidateDrawArraysIndirect(Context *context, GLenum mode, const void *indirect)
 {
     const State &state                          = context->getGLState();
     TransformFeedback *curTransformFeedback     = state.getCurrentTransformFeedback();
     if (curTransformFeedback && curTransformFeedback->isActive() &&
         !curTransformFeedback->isPaused())
     {
-        // An INVALID_OPERATION error is generated if transform feedback is active and not paused.
-        context->handleError(InvalidOperation() << "transform feedback is active and not paused.");
-        return false;
+        // EXT_geometry_shader allows transform feedback to work with all draw commands.
+        // [EXT_geometry_shader] Section 12.1, "Transform Feedback"
+        if (context->getExtensions().geometryShader)
+        {
+            if (!ValidateTransformFeedbackPrimitiveMode(
+                    context, curTransformFeedback->getPrimitiveMode(), mode))
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidOperation(), InvalidDrawModeTransformFeedback);
+                return false;
+            }
+        }
+        else
+        {
+            // An INVALID_OPERATION error is generated if transform feedback is active and not
+            // paused.
+            ANGLE_VALIDATION_ERR(context, InvalidOperation(),
+                                 UnsupportedDrawModeForTransformFeedback);
+            return false;
+        }
     }
 
     if (!ValidateDrawIndirectBase(context, mode, indirect))
         return false;
 
     Buffer *drawIndirectBuffer = state.getTargetBuffer(BufferBinding::DrawIndirect);
     CheckedNumeric<size_t> checkedOffset(reinterpret_cast<size_t>(indirect));
     // In OpenGL ES3.1 spec, session 10.5, it defines the struct of DrawArraysIndirectCommand
@@ -492,18 +513,20 @@ bool ValidateDrawArraysIndirect(Context 
         return false;
     }
 
     return true;
 }
 
 bool ValidateDrawElementsIndirect(Context *context, GLenum mode, GLenum type, const void *indirect)
 {
-    if (!ValidateDrawElementsBase(context, type))
+    if (!ValidateDrawElementsBase(context, mode, type))
+    {
         return false;
+    }
 
     const State &state             = context->getGLState();
     const VertexArray *vao         = state.getVertexArray();
     Buffer *elementArrayBuffer     = vao->getElementArrayBuffer().get();
     if (!elementArrayBuffer)
     {
         context->handleError(InvalidOperation() << "zero is bound to ELEMENT_ARRAY_BUFFER");
         return false;
@@ -1070,18 +1093,17 @@ bool ValidateGetMultisamplefv(Context *c
 
     if (pname != GL_SAMPLE_POSITION)
     {
         context->handleError(InvalidEnum() << "Pname must be SAMPLE_POSITION.");
         return false;
     }
 
     Framebuffer *framebuffer = context->getGLState().getDrawFramebuffer();
-    GLint samples            = 0;
-    ANGLE_VALIDATION_TRY(framebuffer->getSamples(context, &samples));
+    GLint samples            = framebuffer->getSamples(context);
 
     if (index >= static_cast<GLuint>(samples))
     {
         context->handleError(InvalidValue() << "Index must be less than the value of SAMPLES.");
         return false;
     }
 
     return true;
@@ -1149,16 +1171,31 @@ bool ValidateFramebufferParameteri(Conte
                 return false;
             }
             break;
         }
         case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
         {
             break;
         }
+        case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
+        {
+            if (!context->getExtensions().geometryShader)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidEnum(), GeometryShaderExtensionNotEnabled);
+                return false;
+            }
+            GLint maxLayers = context->getCaps().maxFramebufferLayers;
+            if (param < 0 || param > maxLayers)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidValue(), InvalidFramebufferLayer);
+                return false;
+            }
+            break;
+        }
         default:
         {
             ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidPname);
             return false;
         }
     }
 
     const Framebuffer *framebuffer = context->getGLState().getTargetFramebuffer(target);
@@ -1187,16 +1224,23 @@ bool ValidateGetFramebufferParameteriv(C
 
     switch (pname)
     {
         case GL_FRAMEBUFFER_DEFAULT_WIDTH:
         case GL_FRAMEBUFFER_DEFAULT_HEIGHT:
         case GL_FRAMEBUFFER_DEFAULT_SAMPLES:
         case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
             break;
+        case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
+            if (!context->getExtensions().geometryShader)
+            {
+                ANGLE_VALIDATION_ERR(context, InvalidEnum(), GeometryShaderExtensionNotEnabled);
+                return false;
+            }
+            break;
         default:
             ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidPname);
             return false;
     }
 
     const Framebuffer *framebuffer = context->getGLState().getTargetFramebuffer(target);
     ASSERT(framebuffer);
 
@@ -1661,17 +1705,17 @@ bool ValidateGetProgramResourceiv(Contex
     }
     if (!ValidateProgramResourceIndex(programObject, programInterface, index))
     {
         context->handleError(InvalidValue() << "Invalid index: " << index);
         return false;
     }
     for (GLsizei i = 0; i < propCount; i++)
     {
-        if (!ValidateProgramResourceProperty(props[i]))
+        if (!ValidateProgramResourceProperty(context, props[i]))
         {
             context->handleError(InvalidEnum() << "Invalid prop.");
             return false;
         }
         if (!ValidateProgramResourcePropertyByInterface(props[i], programInterface))
         {
             context->handleError(InvalidOperation() << "Not an allowed prop for interface");
             return false;
--- a/gfx/angle/checkout/src/libANGLE/validationES31.h
+++ b/gfx/angle/checkout/src/libANGLE/validationES31.h
@@ -4,17 +4,17 @@
 // found in the LICENSE file.
 //
 
 // validationES31.h: Validation functions for OpenGL ES 3.1 entry point parameters
 
 #ifndef LIBANGLE_VALIDATION_ES31_H_
 #define LIBANGLE_VALIDATION_ES31_H_
 
-#include "libANGLE/PackedGLEnums.h"
+#include "libANGLE/PackedEnums.h"
 
 #include <GLES3/gl31.h>
 
 namespace gl
 {
 class Context;
 
 bool ValidateGetBooleani_v(Context *context, GLenum target, GLuint index, GLboolean *data);
--- a/gfx/angle/checkout/src/libGLESv2/entry_points_egl.cpp
+++ b/gfx/angle/checkout/src/libGLESv2/entry_points_egl.cpp
@@ -485,46 +485,40 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDi
 {
     EVENT(
         "(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, "
         "EGLContext ctx = 0x%0.8p)",
         dpy, draw, read, ctx);
     Thread *thread = GetCurrentThread();
 
     Display *display     = static_cast<Display *>(dpy);
+    Surface *drawSurface = static_cast<Surface *>(draw);
+    Surface *readSurface = static_cast<Surface *>(read);
     gl::Context *context = static_cast<gl::Context *>(ctx);
 
-    Error error = ValidateMakeCurrent(display, draw, read, context);
-    if (error.isError())
-    {
-        thread->setError(error);
-        return EGL_FALSE;
-    }
+    ANGLE_EGL_TRY_RETURN(thread, ValidateMakeCurrent(display, drawSurface, readSurface, context),
+                         EGL_FALSE);
 
-    Surface *readSurface   = static_cast<Surface *>(read);
-    Surface *drawSurface   = static_cast<Surface *>(draw);
-    Error makeCurrentError = display->makeCurrent(drawSurface, readSurface, context);
-    if (makeCurrentError.isError())
+    Surface *previousDraw        = thread->getCurrentDrawSurface();
+    Surface *previousRead        = thread->getCurrentReadSurface();
+    gl::Context *previousContext = thread->getContext();
+
+    // Only call makeCurrent if the context or surfaces have changed.
+    if (previousDraw != drawSurface || previousRead != readSurface || previousContext != context)
     {
-        thread->setError(makeCurrentError);
-        return EGL_FALSE;
-    }
+        ANGLE_EGL_TRY_RETURN(thread, display->makeCurrent(drawSurface, readSurface, context),
+                             EGL_FALSE);
 
-    gl::Context *previousContext = thread->getContext();
-    thread->setCurrent(context);
+        thread->setCurrent(context);
 
-    // Release the surface from the previously-current context, to allow
-    // destroyed surfaces to delete themselves.
-    if (previousContext != nullptr && context != previousContext)
-    {
-        auto err = previousContext->releaseSurface(display);
-        if (err.isError())
+        // Release the surface from the previously-current context, to allow
+        // destroyed surfaces to delete themselves.
+        if (previousContext != nullptr && context != previousContext)
         {
-            thread->setError(err);
-            return EGL_FALSE;
+            ANGLE_EGL_TRY_RETURN(thread, previousContext->releaseSurface(display), EGL_FALSE);
         }
     }
 
     thread->setError(NoError());
     return EGL_TRUE;
 }
 
 EGLSurface EGLAPIENTRY GetCurrentSurface(EGLint readdraw)
@@ -653,17 +647,17 @@ EGLBoolean EGLAPIENTRY SwapBuffers(EGLDi
 
     Error error = ValidateSurface(display, eglSurface);
     if (error.isError())
     {
         thread->setError(error);
         return EGL_FALSE;
     }
 
-    if (display->testDeviceLost())
+    if (display->isDeviceLost())
     {
         thread->setError(EglContextLost());
         return EGL_FALSE;
     }
 
     if (surface == EGL_NO_SURFACE)
     {
         thread->setError(EglBadSurface());
@@ -747,17 +741,17 @@ EGLBoolean EGLAPIENTRY BindTexImage(EGLD
     }
 
     if (eglSurface->getBoundTexture())
     {
         thread->setError(EglBadAccess());
         return EGL_FALSE;
     }
 
-    if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE)
+    if (eglSurface->getTextureFormat() == TextureFormat::NoTexture)
     {
         thread->setError(EglBadMatch());
         return EGL_FALSE;
     }
 
     gl::Context *context = thread->getContext();
     if (context)
     {
@@ -834,17 +828,17 @@ EGLBoolean EGLAPIENTRY ReleaseTexImage(E
     }
 
     if (surface == EGL_NO_SURFACE || eglSurface->getType() == EGL_WINDOW_BIT)
     {
         thread->setError(EglBadSurface());
         return EGL_FALSE;
     }
 
-    if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE)
+    if (eglSurface->getTextureFormat() == TextureFormat::NoTexture)
     {
         thread->setError(EglBadMatch());
         return EGL_FALSE;
     }
 
     gl::Texture *texture = eglSurface->getBoundTexture();
 
     if (texture)
--- a/gfx/angle/checkout/src/libGLESv2/entry_points_gles_1_0_autogen.cpp
+++ b/gfx/angle/checkout/src/libGLESv2/entry_points_gles_1_0_autogen.cpp
@@ -218,37 +218,39 @@ void GL_APIENTRY DepthRangex(GLfixed n, 
 
 void GL_APIENTRY DisableClientState(GLenum array)
 {
     EVENT("(GLenum array = 0x%X)", array);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::DisableClientState>(array);
+        ClientVertexArrayType arrayPacked = FromGLenum<ClientVertexArrayType>(array);
+        context->gatherParams<EntryPoint::DisableClientState>(arrayPacked);
 
-        if (context->skipValidation() || ValidateDisableClientState(context, array))
+        if (context->skipValidation() || ValidateDisableClientState(context, arrayPacked))
         {
-            context->disableClientState(array);
+            context->disableClientState(arrayPacked);
         }
     }
 }
 
 void GL_APIENTRY EnableClientState(GLenum array)
 {
     EVENT("(GLenum array = 0x%X)", array);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::EnableClientState>(array);
+        ClientVertexArrayType arrayPacked = FromGLenum<ClientVertexArrayType>(array);
+        context->gatherParams<EntryPoint::EnableClientState>(arrayPacked);
 
-        if (context->skipValidation() || ValidateEnableClientState(context, array))
+        if (context->skipValidation() || ValidateEnableClientState(context, arrayPacked))
         {
-            context->enableClientState(array);
+            context->enableClientState(arrayPacked);
         }
     }
 }
 
 void GL_APIENTRY Fogf(GLenum pname, GLfloat param)
 {
     EVENT("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
 
deleted file mode 100644
--- a/gfx/angle/checkout/src/libGLESv2/entry_points_gles_2_0_ext.cpp
+++ /dev/null
@@ -1,2158 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_2_0_ext.cpp : Implements the GLES 2.0 extension entry points.
-
-#include "libGLESv2/entry_points_gles_2_0_ext.h"
-#include "libGLESv2/global_state.h"
-
-#include "libANGLE/Buffer.h"
-#include "libANGLE/Context.h"
-#include "libANGLE/Error.h"
-#include "libANGLE/ErrorStrings.h"
-#include "libANGLE/Fence.h"
-#include "libANGLE/Framebuffer.h"
-#include "libANGLE/Query.h"
-#include "libANGLE/Shader.h"
-#include "libANGLE/Thread.h"
-#include "libANGLE/VertexArray.h"
-#include "libANGLE/queryconversions.h"
-#include "libANGLE/queryutils.h"
-
-#include "libANGLE/validationES.h"
-#include "libANGLE/validationES2.h"
-#include "libANGLE/validationES3.h"
-#include "libANGLE/validationES31.h"
-
-#include "common/debug.h"
-#include "common/utilities.h"
-
-namespace gl
-{
-
-ANGLE_EXPORT void GL_APIENTRY BindUniformLocationCHROMIUM(GLuint program,
-                                                          GLint location,
-                                                          const GLchar *name)
-{
-    EVENT("(GLuint program = %u, GLint location = %d, const GLchar *name = 0x%0.8p)", program,
-          location, name);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateBindUniformLocationCHROMIUM(context, program, location, name))
-        {
-            return;
-        }
-
-        context->bindUniformLocation(program, location, name);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CoverageModulationCHROMIUM(GLenum components)
-{
-    EVENT("(GLenum components = %u)", components);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateCoverageModulationCHROMIUM(context, components))
-        {
-            return;
-        }
-        context->coverageModulation(components);
-    }
-}
-
-// CHROMIUM_path_rendering
-ANGLE_EXPORT void GL_APIENTRY MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix)
-{
-    EVENT("(GLenum matrixMode = %u)", matrixMode);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateMatrixLoadfCHROMIUM(context, matrixMode, matrix))
-        {
-            return;
-        }
-        context->matrixLoadf(matrixMode, matrix);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY MatrixLoadIdentityCHROMIUM(GLenum matrixMode)
-{
-    EVENT("(GLenum matrixMode = %u)", matrixMode);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateMatrixLoadIdentityCHROMIUM(context, matrixMode))
-        {
-            return;
-        }
-        context->matrixLoadIdentity(matrixMode);
-    }
-}
-
-ANGLE_EXPORT GLuint GL_APIENTRY GenPathsCHROMIUM(GLsizei range)
-{
-    EVENT("(GLsizei range = %d)", range);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateGenPathsCHROMIUM(context, range))
-        {
-            return 0;
-        }
-        return context->genPaths(range);
-    }
-    return 0;
-}
-
-ANGLE_EXPORT void GL_APIENTRY DeletePathsCHROMIUM(GLuint first, GLsizei range)
-{
-    EVENT("(GLuint first = %u, GLsizei range = %d)", first, range);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateDeletePathsCHROMIUM(context, first, range))
-        {
-            return;
-        }
-        context->deletePaths(first, range);
-    }
-}
-
-ANGLE_EXPORT GLboolean GL_APIENTRY IsPathCHROMIUM(GLuint path)
-{
-    EVENT("(GLuint path = %u)", path);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateIsPathCHROMIUM(context, path))
-        {
-            return GL_FALSE;
-        }
-        return context->isPath(path);
-    }
-    return GL_FALSE;
-}
-
-ANGLE_EXPORT void GL_APIENTRY PathCommandsCHROMIUM(GLuint path,
-                                                   GLsizei numCommands,
-                                                   const GLubyte *commands,
-                                                   GLsizei numCoords,
-                                                   GLenum coordType,
-                                                   const void *coords)
-{
-    EVENT(
-        "(GLuint path = %u, GLsizei numCommands = %d, commands = %p, "
-        "GLsizei numCoords = %d, GLenum coordType = %u, void* coords = %p)",
-        path, numCommands, commands, numCoords, coordType, coords);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidatePathCommandsCHROMIUM(context, path, numCommands, commands, numCoords,
-                                          coordType, coords))
-        {
-            return;
-        }
-        context->pathCommands(path, numCommands, commands, numCoords, coordType, coords);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value)
-{
-    EVENT("(GLuint path = %u, GLenum pname = %u, GLfloat value = %f)", path, pname, value);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidatePathParameterfCHROMIUM(context, path, pname, value))
-        {
-            return;
-        }
-
-        context->pathParameterf(path, pname, value);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value)
-{
-    EVENT("(GLuint path = %u, GLenum pname = %u, GLint value = %d)", path, pname, value);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidatePathParameteriCHROMIUM(context, path, pname, value))
-        {
-            return;
-        }
-
-        context->pathParameteri(path, pname, value);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetPathParameterfvCHROMIUM(GLuint path, GLenum pname, GLfloat *value)
-{
-    EVENT("(GLuint path = %u, GLenum pname = %u, GLfloat *value = %p)", path, pname, value);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateGetPathParameterfvCHROMIUM(context, path, pname, value))
-        {
-            return;
-        }
-        context->getPathParameterfv(path, pname, value);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetPathParameterivCHROMIUM(GLuint path, GLenum pname, GLint *value)
-{
-    EVENT("(GLuint path = %u, GLenum pname = %u, GLint *value = %p)", path, pname, value);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateGetPathParameterivCHROMIUM(context, path, pname, value))
-        {
-            return;
-        }
-        context->getPathParameteriv(path, pname, value);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask)
-{
-    EVENT("(GLenum func = %u, GLint ref = %d, GLuint mask = %u)", func, ref, mask);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidatePathStencilFuncCHROMIUM(context, func, ref, mask))
-        {
-            return;
-        }
-        context->pathStencilFunc(func, ref, mask);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY StencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask)
-{
-    EVENT("(GLuint path = %u, GLenum fillMode = %u, GLuint mask = %u)", path, fillMode, mask);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateStencilFillPathCHROMIUM(context, path, fillMode, mask))
-        {
-            return;
-        }
-        context->stencilFillPath(path, fillMode, mask);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY StencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask)
-{
-    EVENT("(GLuint path = %u, GLint ference = %d, GLuint mask = %u)", path, reference, mask);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateStencilStrokePathCHROMIUM(context, path, reference, mask))
-        {
-            return;
-        }
-        context->stencilStrokePath(path, reference, mask);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CoverFillPathCHROMIUM(GLuint path, GLenum coverMode)
-{
-    EVENT("(GLuint path = %u, GLenum coverMode = %u)", path, coverMode);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateCoverFillPathCHROMIUM(context, path, coverMode))
-        {
-            return;
-        }
-        context->coverFillPath(path, coverMode);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode)
-{
-    EVENT("(GLuint path = %u, GLenum coverMode = %u)", path, coverMode);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateCoverStrokePathCHROMIUM(context, path, coverMode))
-        {
-            return;
-        }
-        context->coverStrokePath(path, coverMode);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                                               GLenum fillMode,
-                                                               GLuint mask,
-                                                               GLenum coverMode)
-{
-    EVENT("(GLuint path = %u, GLenum fillMode = %u, GLuint mask = %u, GLenum coverMode = %u)", path,
-          fillMode, mask, coverMode);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateStencilThenCoverFillPathCHROMIUM(context, path, fillMode, mask, coverMode))
-        {
-            return;
-        }
-        context->stencilThenCoverFillPath(path, fillMode, mask, coverMode);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                                                 GLint reference,
-                                                                 GLuint mask,
-                                                                 GLenum coverMode)
-{
-    EVENT("(GLuint path = %u, GLint reference = %d, GLuint mask = %u, GLenum coverMode = %u)", path,
-          reference, mask, coverMode);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateStencilThenCoverStrokePathCHROMIUM(context, path, reference, mask, coverMode))
-        {
-            return;
-        }
-        context->stencilThenCoverStrokePath(path, reference, mask, coverMode);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                                             GLenum pathNameType,
-                                                             const void *paths,
-                                                             GLuint pathBase,
-                                                             GLenum coverMode,
-                                                             GLenum transformType,
-                                                             const GLfloat *transformValues)
-{
-    EVENT(
-        "(GLsizei numPaths = %d, GLenum pathNameType = %u, const void *paths = %p "
-        "GLuint pathBase = %u, GLenum coverMode = %u, GLenum transformType = %u "
-        "const GLfloat *transformValues = %p)",
-        numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateCoverFillPathInstancedCHROMIUM(
-                                              context, numPaths, pathNameType, paths, pathBase,
-                                              coverMode, transformType, transformValues))
-        {
-            return;
-        }
-        context->coverFillPathInstanced(numPaths, pathNameType, paths, pathBase, coverMode,
-                                        transformType, transformValues);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                                               GLenum pathNameType,
-                                                               const void *paths,
-                                                               GLuint pathBase,
-                                                               GLenum coverMode,
-                                                               GLenum transformType,
-                                                               const GLfloat *transformValues)
-{
-    EVENT(
-        "(GLsizei numPaths = %d, GLenum pathNameType = %u, const void *paths = %p "
-        "GLuint pathBase = %u, GLenum coverMode = %u, GLenum transformType = %u "
-        "const GLfloat *transformValues = %p)",
-        numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateCoverStrokePathInstancedCHROMIUM(
-                                              context, numPaths, pathNameType, paths, pathBase,
-                                              coverMode, transformType, transformValues))
-        {
-            return;
-        }
-        context->coverStrokePathInstanced(numPaths, pathNameType, paths, pathBase, coverMode,
-                                          transformType, transformValues);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY StencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                                                 GLenum pathNameType,
-                                                                 const void *paths,
-                                                                 GLuint pathBase,
-                                                                 GLint reference,
-                                                                 GLuint mask,
-                                                                 GLenum transformType,
-                                                                 const GLfloat *transformValues)
-{
-    EVENT(
-        "(GLsizei numPaths = %u, GLenum pathNameType = %u, const void *paths = %p "
-        "GLuint pathBase = %u, GLint reference = %d GLuint mask = %u GLenum transformType = %u "
-        "const GLfloat *transformValues = %p)",
-        numPaths, pathNameType, paths, pathBase, reference, mask, transformType, transformValues);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateStencilStrokePathInstancedCHROMIUM(
-                                              context, numPaths, pathNameType, paths, pathBase,
-                                              reference, mask, transformType, transformValues))
-        {
-            return;
-        }
-        context->stencilStrokePathInstanced(numPaths, pathNameType, paths, pathBase, reference,
-                                            mask, transformType, transformValues);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                                               GLenum pathNameType,
-                                                               const void *paths,
-                                                               GLuint pathBase,
-                                                               GLenum fillMode,
-                                                               GLuint mask,
-                                                               GLenum transformType,
-                                                               const GLfloat *transformValues)
-{
-    EVENT(
-        "(GLsizei numPaths = %u, GLenum pathNameType = %u const void *paths = %p "
-        "GLuint pathBase = %u, GLenum fillMode = %u, GLuint mask = %u, GLenum transformType = %u "
-        "const GLfloat *transformValues = %p)",
-        numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateStencilFillPathInstancedCHROMIUM(
-                                              context, numPaths, pathNameType, paths, pathBase,
-                                              fillMode, mask, transformType, transformValues))
-        {
-            return;
-        }
-        context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBase, fillMode, mask,
-                                          transformType, transformValues);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-StencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                          GLenum pathNameType,
-                                          const void *paths,
-                                          GLuint pathBase,
-                                          GLenum fillMode,
-                                          GLuint mask,
-                                          GLenum coverMode,
-                                          GLenum transformType,
-                                          const GLfloat *transformValues)
-{
-    EVENT(
-        "(GLsizei numPaths = %u, GLenum pathNameType = %u const void *paths = %p "
-        "GLuint pathBase = %u, GLenum coverMode = %u, GLuint mask = %u, GLenum transformType = %u "
-        "const GLfloat *transformValues = %p)",
-        numPaths, pathNameType, paths, pathBase, coverMode, mask, transformType, transformValues);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateStencilThenCoverFillPathInstancedCHROMIUM(
-                context, numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode,
-                transformType, transformValues))
-        {
-            return;
-        }
-        context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths, pathBase,
-                                                   fillMode, mask, coverMode, transformType,
-                                                   transformValues);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-StencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                            GLenum pathNameType,
-                                            const void *paths,
-                                            GLuint pathBase,
-                                            GLint reference,
-                                            GLuint mask,
-                                            GLenum coverMode,
-                                            GLenum transformType,
-                                            const GLfloat *transformValues)
-{
-    EVENT(
-        "(GLsizei numPaths = %u, GLenum pathNameType = %u, const void *paths = %p "
-        "GLuint pathBase = %u GLenum coverMode = %u GLint reference = %d GLuint mask = %u GLenum "
-        "transformType = %u "
-        "const GLfloat *transformValues = %p)",
-        numPaths, pathNameType, paths, pathBase, coverMode, reference, mask, transformType,
-        transformValues);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateStencilThenCoverStrokePathInstancedCHROMIUM(
-                context, numPaths, pathNameType, paths, pathBase, reference, mask, coverMode,
-                transformType, transformValues))
-        {
-            return;
-        }
-        context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
-                                                     reference, mask, coverMode, transformType,
-                                                     transformValues);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY BindFragmentInputLocationCHROMIUM(GLuint program,
-                                                                GLint location,
-                                                                const GLchar *name)
-{
-    EVENT("(GLuint program = %u, GLint location = %d, const GLchar *name = %p)", program, location,
-          name);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateBindFragmentInputLocationCHROMIUM(context, program, location, name))
-        {
-            return;
-        }
-        context->bindFragmentInputLocation(program, location, name);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                                                  GLint location,
-                                                                  GLenum genMode,
-                                                                  GLint components,
-                                                                  const GLfloat *coeffs)
-{
-    EVENT(
-        "(GLuint program = %u, GLint location %d, GLenum genMode = %u, GLint components = %d, "
-        "const GLfloat * coeffs = %p)",
-        program, location, genMode, components, coeffs);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateProgramPathFragmentInputGenCHROMIUM(context, program, location, genMode,
-                                                         components, coeffs))
-        {
-            return;
-        }
-        context->programPathFragmentInputGen(program, location, genMode, components, coeffs);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CopyTextureCHROMIUM(GLuint sourceId,
-                                                  GLint sourceLevel,
-                                                  GLenum destTarget,
-                                                  GLuint destId,
-                                                  GLint destLevel,
-                                                  GLint internalFormat,
-                                                  GLenum destType,
-                                                  GLboolean unpackFlipY,
-                                                  GLboolean unpackPremultiplyAlpha,
-                                                  GLboolean unpackUnmultiplyAlpha)
-{
-    EVENT(
-        "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
-        "%u, GLint destLevel = %d, GLint internalFormat = 0x%X, GLenum destType = "
-        "0x%X, GLboolean unpackFlipY = %u, GLboolean unpackPremultiplyAlpha = %u, GLboolean "
-        "unpackUnmultiplyAlpha = %u)",
-        sourceId, sourceLevel, destTarget, destId, destLevel, internalFormat, destType, unpackFlipY,
-        unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureTarget destTargetPacked = FromGLenum<TextureTarget>(destTarget);
-        if (!context->skipValidation() &&
-            !ValidateCopyTextureCHROMIUM(context, sourceId, sourceLevel, destTargetPacked, destId,
-                                         destLevel, internalFormat, destType, unpackFlipY,
-                                         unpackPremultiplyAlpha, unpackUnmultiplyAlpha))
-        {
-            return;
-        }
-
-        context->copyTexture(sourceId, sourceLevel, destTargetPacked, destId, destLevel,
-                             internalFormat, destType, unpackFlipY, unpackPremultiplyAlpha,
-                             unpackUnmultiplyAlpha);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
-                                                     GLint sourceLevel,
-                                                     GLenum destTarget,
-                                                     GLuint destId,
-                                                     GLint destLevel,
-                                                     GLint xoffset,
-                                                     GLint yoffset,
-                                                     GLint x,
-                                                     GLint y,
-                                                     GLsizei width,
-                                                     GLsizei height,
-                                                     GLboolean unpackFlipY,
-                                                     GLboolean unpackPremultiplyAlpha,
-                                                     GLboolean unpackUnmultiplyAlpha)
-{
-    EVENT(
-        "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
-        "%u, GLint destLevel = %d, GLint xoffset = "
-        "%d, GLint yoffset = %d, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = "
-        "%d, GLboolean unpackPremultiplyAlpha = %u, GLboolean unpackUnmultiplyAlpha = %u)",
-        sourceId, sourceLevel, destTarget, destId, destLevel, xoffset, yoffset, x, y, width, height,
-        unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureTarget destTargetPacked = FromGLenum<TextureTarget>(destTarget);
-        if (!context->skipValidation() &&
-            !ValidateCopySubTextureCHROMIUM(context, sourceId, sourceLevel, destTargetPacked,
-                                            destId, destLevel, xoffset, yoffset, x, y, width,
-                                            height, unpackFlipY, unpackPremultiplyAlpha,
-                                            unpackUnmultiplyAlpha))
-        {
-            return;
-        }
-
-        context->copySubTexture(sourceId, sourceLevel, destTargetPacked, destId, destLevel, xoffset,
-                                yoffset, x, y, width, height, unpackFlipY, unpackPremultiplyAlpha,
-                                unpackUnmultiplyAlpha);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
-{
-    EVENT("(GLuint sourceId = %u, GLuint destId = %u)", sourceId, destId);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateCompressedCopyTextureCHROMIUM(context, sourceId, destId))
-        {
-            return;
-        }
-
-        context->compressedCopyTexture(sourceId, destId);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY RequestExtensionANGLE(const GLchar *name)
-{
-    EVENT("(const GLchar *name = %p)", name);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() && !ValidateRequestExtensionANGLE(context, name))
-        {
-            return;
-        }
-
-        context->requestExtension(name);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
-                                                     GLsizei bufSize,
-                                                     GLsizei *length,
-                                                     GLboolean *params)
-{
-    EVENT(
-        "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLboolean* params "
-        "= 0x%0.8p)",
-        pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetBooleanvRobustANGLE(context, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getBooleanvRobust(pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
-                                                              GLenum pname,
-                                                              GLsizei bufSize,
-                                                              GLsizei *length,
-                                                              GLint *params)
-{
-    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname,
-          params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
-
-        if (!ValidateGetBufferParameterivRobustANGLE(context, targetPacked, pname, bufSize, length,
-                                                     params))
-        {
-            return;
-        }
-
-        context->getBufferParameterivRobust(targetPacked, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
-                                                   GLsizei bufSize,
-                                                   GLsizei *length,
-                                                   GLfloat *params)
-{
-    EVENT(
-        "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLfloat* params = "
-        "0x%0.8p)",
-        pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetFloatvRobustANGLE(context, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getFloatvRobust(pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
-                                                                             GLenum attachment,
-                                                                             GLenum pname,
-                                                                             GLsizei bufSize,
-                                                                             GLsizei *length,
-                                                                             GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X,  GLsizei bufsize = "
-        "%d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
-        target, attachment, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetFramebufferAttachmentParameterivRobustANGLE(context, target, attachment,
-                                                                    pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getFramebufferAttachmentParameterivRobust(target, attachment, pname, bufSize,
-                                                           length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname,
-                                                     GLsizei bufSize,
-                                                     GLsizei *length,
-                                                     GLint *data)
-{
-    EVENT(
-        "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLint* params = "
-        "0x%0.8p)",
-        pname, bufSize, length, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetIntegervRobustANGLE(context, pname, bufSize, length, data))
-        {
-            return;
-        }
-
-        context->getIntegervRobust(pname, bufSize, length, data);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
-                                                      GLenum pname,
-                                                      GLsizei bufSize,
-                                                      GLsizei *length,
-                                                      GLint *params)
-{
-    EVENT(
-        "(GLuint program = %d, GLenum pname = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLint* params = 0x%0.8p)",
-        program, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetProgramivRobustANGLE(context, program, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getProgramivRobust(program, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
-                                                                    GLenum pname,
-                                                                    GLsizei bufSize,
-                                                                    GLsizei *length,
-                                                                    GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint* params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetRenderbufferParameterivRobustANGLE(context, target, pname, bufSize, length,
-                                                           params))
-        {
-            return;
-        }
-
-        context->getRenderbufferParameterivRobust(target, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-GetShaderivRobustANGLE(GLuint shader, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
-{
-    EVENT(
-        "(GLuint shader = %d, GLenum pname = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLint* params = 0x%0.8p)",
-        shader, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetShaderivRobustANGLE(context, shader, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getShaderivRobust(shader, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLfloat *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLfloat* params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!ValidateGetTexParameterfvRobustANGLE(context, targetPacked, pname, bufSize, length,
-                                                  params))
-        {
-            return;
-        }
-
-        context->getTexParameterfvRobust(targetPacked, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLfloat* params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!ValidateGetTexParameterivRobustANGLE(context, targetPacked, pname, bufSize, length,
-                                                  params))
-        {
-            return;
-        }
-
-        context->getTexParameterivRobust(targetPacked, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
-                                                      GLint location,
-                                                      GLsizei bufSize,
-                                                      GLsizei *length,
-                                                      GLfloat *params)
-{
-    EVENT(
-        "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLfloat* params = 0x%0.8p)",
-        program, location, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetUniformfvRobustANGLE(context, program, location, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getUniformfvRobust(program, location, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
-                                                      GLint location,
-                                                      GLsizei bufSize,
-                                                      GLsizei *length,
-                                                      GLint *params)
-{
-    EVENT(
-        "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint* params = 0x%0.8p)",
-        program, location, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetUniformivRobustANGLE(context, program, location, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getUniformivRobust(program, location, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLfloat *params)
-{
-    EVENT(
-        "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLfloat* params = 0x%0.8p)",
-        index, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetVertexAttribfvRobustANGLE(context, index, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getVertexAttribfvRobust(index, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLint *params)
-{
-    EVENT(
-        "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLint* params = 0x%0.8p)",
-        index, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetVertexAttribivRobustANGLE(context, index, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getVertexAttribivRobust(index, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
-                                                                 GLenum pname,
-                                                                 GLsizei bufSize,
-                                                                 GLsizei *length,
-                                                                 void **pointer)
-{
-    EVENT(
-        "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "void** pointer = 0x%0.8p)",
-        index, pname, bufSize, length, pointer);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetVertexAttribPointervRobustANGLE(context, index, pname, bufSize, length,
-                                                        pointer))
-        {
-            return;
-        }
-
-        context->getVertexAttribPointervRobust(index, pname, bufSize, length, pointer);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
-                                                    GLint y,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLenum format,
-                                                    GLenum type,
-                                                    GLsizei bufSize,
-                                                    GLsizei *length,
-                                                    GLsizei *columns,
-                                                    GLsizei *rows,
-                                                    void *pixels)
-{
-    EVENT(
-        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
-        "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLsizei* columns = 0x%0.8p, GLsizei* rows = 0x%0.8p, void* pixels = 0x%0.8p)",
-        x, y, width, height, format, type, bufSize, length, columns, rows, pixels);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateReadPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
-                                           length, columns, rows, pixels))
-        {
-            return;
-        }
-
-        context->readPixelsRobust(x, y, width, height, format, type, bufSize, length, columns, rows,
-                                  pixels);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
-                                                    GLint level,
-                                                    GLint internalformat,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLint border,
-                                                    GLenum format,
-                                                    GLenum type,
-                                                    GLsizei bufSize,
-                                                    const void *pixels)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
-        "GLsizei height = %d, GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLsizei "
-        "bufSize = %d, const void* pixels = 0x%0.8p)",
-        target, level, internalformat, width, height, border, format, type, bufSize, pixels);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
-        if (!ValidateTexImage2DRobust(context, targetPacked, level, internalformat, width, height,
-                                      border, format, type, bufSize, pixels))
-        {
-            return;
-        }
-
-        context->texImage2DRobust(targetPacked, level, internalformat, width, height, border,
-                                  format, type, bufSize, pixels);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
-                                                        GLenum pname,
-                                                        GLsizei bufSize,
-                                                        const GLfloat *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLfloat* params = "
-        "0x%0.8p)",
-        target, pname, bufSize, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!ValidateTexParameterfvRobustANGLE(context, targetPacked, pname, bufSize, params))
-        {
-            return;
-        }
-
-        context->texParameterfvRobust(targetPacked, pname, bufSize, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
-                                                        GLenum pname,
-                                                        GLsizei bufSize,
-                                                        const GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLfloat* params = "
-        "0x%0.8p)",
-        target, pname, bufSize, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!ValidateTexParameterivRobustANGLE(context, targetPacked, pname, bufSize, params))
-        {
-            return;
-        }
-
-        context->texParameterivRobust(targetPacked, pname, bufSize, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
-                                                       GLint level,
-                                                       GLint xoffset,
-                                                       GLint yoffset,
-                                                       GLsizei width,
-                                                       GLsizei height,
-                                                       GLenum format,
-                                                       GLenum type,
-                                                       GLsizei bufSize,
-                                                       const void *pixels)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
-        "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
-        "GLsizei bufsize = %d, const void* pixels = 0x%0.8p)",
-        target, level, xoffset, yoffset, width, height, format, type, bufSize, pixels);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
-        if (!ValidateTexSubImage2DRobustANGLE(context, targetPacked, level, xoffset, yoffset, width,
-                                              height, format, type, bufSize, pixels))
-        {
-            return;
-        }
-
-        context->texSubImage2DRobust(targetPacked, level, xoffset, yoffset, width, height, format,
-                                     type, bufSize, pixels);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
-                                                    GLint level,
-                                                    GLint internalformat,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLsizei depth,
-                                                    GLint border,
-                                                    GLenum format,
-                                                    GLenum type,
-                                                    GLsizei bufSize,
-                                                    const void *pixels)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
-        "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, "
-        "GLenum type = 0x%X, GLsizei bufsize = %d, const void* pixels = 0x%0.8p)",
-        target, level, internalformat, width, height, depth, border, format, type, bufSize, pixels);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!ValidateTexImage3DRobustANGLE(context, targetPacked, level, internalformat, width,
-                                           height, depth, border, format, type, bufSize, pixels))
-        {
-            return;
-        }
-
-        context->texImage3DRobust(targetPacked, level, internalformat, width, height, depth, border,
-                                  format, type, bufSize, pixels);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
-                                                       GLint level,
-                                                       GLint xoffset,
-                                                       GLint yoffset,
-                                                       GLint zoffset,
-                                                       GLsizei width,
-                                                       GLsizei height,
-                                                       GLsizei depth,
-                                                       GLenum format,
-                                                       GLenum type,
-                                                       GLsizei bufSize,
-                                                       const void *pixels)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
-        "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
-        "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, const void* pixels = "
-        "0x%0.8p)",
-        target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize,
-        pixels);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!ValidateTexSubImage3DRobustANGLE(context, targetPacked, level, xoffset, yoffset,
-                                              zoffset, width, height, depth, format, type, bufSize,
-                                              pixels))
-        {
-            return;
-        }
-
-        context->texSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset, width, height,
-                                     depth, format, type, bufSize, pixels);
-    }
-}
-
-void GL_APIENTRY CompressedTexImage2DRobustANGLE(GLenum target,
-                                                 GLint level,
-                                                 GLenum internalformat,
-                                                 GLsizei width,
-                                                 GLsizei height,
-                                                 GLint border,
-                                                 GLsizei imageSize,
-                                                 GLsizei dataSize,
-                                                 const GLvoid *data)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
-        "%d, "
-        "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, GLsizei dataSize = %d, "
-        "const GLvoid* data = 0x%0.8p)",
-        target, level, internalformat, width, height, border, imageSize, dataSize, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
-        if (!context->skipValidation() && !ValidateCompressedTexImage2DRobustANGLE(
-                                              context, targetPacked, level, internalformat, width,
-                                              height, border, imageSize, dataSize, data))
-        {
-            return;
-        }
-
-        context->compressedTexImage2DRobust(targetPacked, level, internalformat, width, height,
-                                            border, imageSize, dataSize, data);
-    }
-}
-
-void GL_APIENTRY CompressedTexSubImage2DRobustANGLE(GLenum target,
-                                                    GLint level,
-                                                    GLint xoffset,
-                                                    GLint yoffset,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLenum format,
-                                                    GLsizei imageSize,
-                                                    GLsizei dataSize,
-                                                    const GLvoid *data)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
-        "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "
-        "GLsizei imageSize = %d, GLsizei dataSize = %d, const GLvoid* data = 0x%0.8p)",
-        target, level, xoffset, yoffset, width, height, format, imageSize, dataSize, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
-        if (!context->skipValidation() && !ValidateCompressedTexSubImage2DRobustANGLE(
-                                              context, targetPacked, level, xoffset, yoffset, width,
-                                              height, format, imageSize, dataSize, data))
-        {
-            return;
-        }
-
-        context->compressedTexSubImage2DRobust(targetPacked, level, xoffset, yoffset, width, height,
-                                               format, imageSize, dataSize, data);
-    }
-}
-
-void GL_APIENTRY CompressedTexImage3DRobustANGLE(GLenum target,
-                                                 GLint level,
-                                                 GLenum internalformat,
-                                                 GLsizei width,
-                                                 GLsizei height,
-                                                 GLsizei depth,
-                                                 GLint border,
-                                                 GLsizei imageSize,
-                                                 GLsizei dataSize,
-                                                 const GLvoid *data)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
-        "%d, "
-        "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
-        "GLsizei dataSize = %d, const GLvoid* data = 0x%0.8p)",
-        target, level, internalformat, width, height, depth, border, imageSize, dataSize, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!context->skipValidation() && !ValidateCompressedTexImage3DRobustANGLE(
-                                              context, targetPacked, level, internalformat, width,
-                                              height, depth, border, imageSize, dataSize, data))
-        {
-            return;
-        }
-
-        context->compressedTexImage3DRobust(targetPacked, level, internalformat, width, height,
-                                            depth, border, imageSize, dataSize, data);
-    }
-}
-
-void GL_APIENTRY CompressedTexSubImage3DRobustANGLE(GLenum target,
-                                                    GLint level,
-                                                    GLint xoffset,
-                                                    GLint yoffset,
-                                                    GLint zoffset,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLsizei depth,
-                                                    GLenum format,
-                                                    GLsizei imageSize,
-                                                    GLsizei dataSize,
-                                                    const GLvoid *data)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
-        "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
-        "GLenum format = 0x%X, GLsizei imageSize = %d, GLsizei dataSize = %d, const GLvoid* data = "
-        "0x%0.8p)",
-        target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, dataSize,
-        data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        TextureType targetPacked = FromGLenum<TextureType>(target);
-        if (!context->skipValidation() &&
-            !ValidateCompressedTexSubImage3DRobustANGLE(context, targetPacked, level, xoffset,
-                                                        yoffset, zoffset, width, height, depth,
-                                                        format, imageSize, dataSize, data))
-        {
-            return;
-        }
-
-        context->compressedTexSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset,
-                                               width, height, depth, format, imageSize, dataSize,
-                                               data);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint* params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetQueryivRobustANGLE(context, target, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getQueryivRobust(target, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLuint *params)
-{
-    EVENT(
-        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLint* params = 0x%0.8p)",
-        id, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetQueryObjectuivRobustANGLE(context, id, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getQueryObjectuivRobust(id, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           void **params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X,  GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, void** params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
-
-        if (!ValidateGetBufferPointervRobustANGLE(context, targetPacked, pname, bufSize, length,
-                                                  params))
-        {
-            return;
-        }
-
-        context->getBufferPointervRobust(targetPacked, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-GetIntegeri_vRobustANGLE(GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint *data)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint* data = 0x%0.8p)",
-        target, index, bufSize, length, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetIntegeri_vRobustANGLE(context, target, index, bufSize, length, data))
-        {
-            return;
-        }
-
-        context->getIntegeri_vRobust(target, index, bufSize, length, data);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
-                                                             GLenum internalformat,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize "
-        "= %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
-        target, internalformat, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetInternalFormativRobustANGLE(context, target, internalformat, pname, bufSize,
-                                                    length, params))
-        {
-            return;
-        }
-
-        context->getInternalformativRobust(target, internalformat, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            GLsizei *length,
-                                                            GLint *params)
-{
-    EVENT(
-        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLint* params = 0x%0.8p)",
-        index, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetVertexAttribIivRobustANGLE(context, index, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getVertexAttribIivRobust(index, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLuint *params)
-{
-    EVENT(
-        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLuint* params = 0x%0.8p)",
-        index, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetVertexAttribIuivRobustANGLE(context, index, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getVertexAttribIuivRobust(index, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
-                                                       GLint location,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLuint *params)
-{
-    EVENT(
-        "(GLuint program = %u, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLuint* params = 0x%0.8p)",
-        program, location, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetUniformuivRobustANGLE(context, program, location, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getUniformuivRobust(program, location, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
-                                                                 GLuint uniformBlockIndex,
-                                                                 GLenum pname,
-                                                                 GLsizei bufSize,
-                                                                 GLsizei *length,
-                                                                 GLint *params)
-{
-    EVENT(
-        "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLsizei bufsize "
-        "= %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
-        program, uniformBlockIndex, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetActiveUniformBlockivRobustANGLE(context, program, uniformBlockIndex, pname,
-                                                        bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getActiveUniformBlockivRobust(program, uniformBlockIndex, pname, bufSize, length,
-                                               params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLint64 *data)
-{
-    EVENT(
-        "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLint64* params = "
-        "0x%0.8p)",
-        pname, bufSize, length, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetInteger64vRobustANGLE(context, pname, bufSize, length, data))
-        {
-            return;
-        }
-
-        context->getInteger64vRobust(pname, bufSize, length, data);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
-                                                         GLuint index,
-                                                         GLsizei bufSize,
-                                                         GLsizei *length,
-                                                         GLint64 *data)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint64* data = 0x%0.8p)",
-        target, index, bufSize, length, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetInteger64i_vRobustANGLE(context, target, index, bufSize, length, data))
-        {
-            return;
-        }
-
-        context->getInteger64i_vRobust(target, index, bufSize, length, data);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLint64 *params)
-{
-    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64* params = 0x%0.8p)", target, pname,
-          bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
-
-        if (!ValidateGetBufferParameteri64vRobustANGLE(context, targetPacked, pname, bufSize,
-                                                       length, params))
-        {
-            return;
-        }
-
-        context->getBufferParameteri64vRobust(targetPacked, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            const GLint *param)
-{
-    EVENT(
-        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint* params = "
-        "0x%0.8p)",
-        sampler, pname, bufSize, param);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, param))
-        {
-            return;
-        }
-
-        context->samplerParameterivRobust(sampler, pname, bufSize, param);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            const GLfloat *param)
-{
-    EVENT(
-        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLfloat* params = "
-        "0x%0.8p)",
-        sampler, pname, bufSize, param);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, param))
-        {
-            return;
-        }
-
-        context->samplerParameterfvRobust(sampler, pname, bufSize, param);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
-                                                               GLenum pname,
-                                                               GLsizei bufSize,
-                                                               GLsizei *length,
-                                                               GLint *params)
-{
-    EVENT(
-        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint* params = 0x%0.8p)",
-        sampler, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, length,
-                                                      params))
-        {
-            return;
-        }
-
-        context->getSamplerParameterivRobust(sampler, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
-                                                               GLenum pname,
-                                                               GLsizei bufSize,
-                                                               GLsizei *length,
-                                                               GLfloat *params)
-{
-    EVENT(
-        "(GLuint sample = %ur, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLfloat* params = 0x%0.8p)",
-        sampler, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, length,
-                                                      params))
-        {
-            return;
-        }
-
-        context->getSamplerParameterfvRobust(sampler, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLenum target,
-                                                                   GLenum pname,
-                                                                   GLsizei bufSize,
-                                                                   GLsizei *length,
-                                                                   GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint* params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
-                                                               GLenum programInterface,
-                                                               GLenum pname,
-                                                               GLsizei bufSize,
-                                                               GLsizei *length,
-                                                               GLint *params)
-{
-    EVENT(
-        "(GLuint program = %u, GLenum programInterface = 0x%X, GLenum pname = 0x%X, GLsizei "
-        "bufsize = %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
-        program, programInterface, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
-                                                       GLuint index,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLboolean *data)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLboolean* data = 0x%0.8p)",
-        target, index, bufSize, length, data);
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetBooleani_vRobustANGLE(context, target, index, bufSize, length, data))
-        {
-            return;
-        }
-
-        context->getBooleani_vRobust(target, index, bufSize, length, data);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
-                                                          GLuint index,
-                                                          GLsizei bufSize,
-                                                          GLsizei *length,
-                                                          GLfloat *val)
-{
-    EVENT(
-        "(GLenum pname = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLfloat* val = 0x%0.8p)",
-        pname, index, bufSize, length, val);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
-                                                                GLint level,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, "
-        "GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
-        target, level, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
-                                                                GLint level,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLfloat *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, "
-        "GLsizei* length = 0x%0.8p, GLfloat* params = 0x%0.8p)",
-        target, level, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                void **params)
-{
-    EVENT(
-        "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, void **params = "
-        "0x%0.8p)",
-        pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
-                                                     GLint y,
-                                                     GLsizei width,
-                                                     GLsizei height,
-                                                     GLenum format,
-                                                     GLenum type,
-                                                     GLsizei bufSize,
-                                                     GLsizei *length,
-                                                     GLsizei *columns,
-                                                     GLsizei *rows,
-                                                     void *data)
-{
-    EVENT(
-        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
-        "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLsizei* columns = 0x%0.8p, GLsizei* rows = 0x%0.8p, void *data = 0x%0.8p)",
-        x, y, width, height, format, type, bufSize, length, columns, rows, data);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateReadnPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
-                                            length, columns, rows, data))
-        {
-            return;
-        }
-
-        context->readnPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
-                                   rows, data);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
-                                                       GLint location,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLfloat *params)
-{
-    EVENT(
-        "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLfloat* params = 0x%0.8p)",
-        program, location, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
-                                                       GLint location,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLint *params)
-{
-    EVENT(
-        "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint* params = 0x%0.8p)",
-        program, location, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
-                                                        GLint location,
-                                                        GLsizei bufSize,
-                                                        GLsizei *length,
-                                                        GLuint *params)
-{
-    EVENT(
-        "(GLuint program = %u, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLuint* params = 0x%0.8p)",
-        program, location, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
-                                                         GLenum pname,
-                                                         GLsizei bufSize,
-                                                         const GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint *params = "
-        "0x%0.8p)",
-        target, pname, bufSize, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
-                                                          GLenum pname,
-                                                          GLsizei bufSize,
-                                                          const GLuint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLuint *params = "
-        "0x%0.8p)",
-        target, pname, bufSize, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            GLsizei *length,
-                                                            GLint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint *params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLuint *params)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLuint *params = 0x%0.8p)",
-        target, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             const GLint *param)
-{
-    EVENT(
-        "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint *param = "
-        "0x%0.8p)",
-        sampler, pname, bufSize, param);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
-                                                              GLenum pname,
-                                                              GLsizei bufSize,
-                                                              const GLuint *param)
-{
-    EVENT(
-        "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLuint *param = "
-        "0x%0.8p)",
-        sampler, pname, bufSize, param);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLint *params)
-{
-    EVENT(
-        "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLint *params = 0x%0.8p)",
-        sampler, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
-                                                                 GLenum pname,
-                                                                 GLsizei bufSize,
-                                                                 GLsizei *length,
-                                                                 GLuint *params)
-{
-    EVENT(
-        "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
-        "0x%0.8p, GLuint *params = 0x%0.8p)",
-        sampler, pname, bufSize, length, params);
-    UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
-                                                          GLenum pname,
-                                                          GLsizei bufSize,
-                                                          GLsizei *length,
-                                                          GLint *params)
-{
-    EVENT(
-        "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLuint *params = 0x%0.8p)",
-        id, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetQueryObjectivRobustANGLE(context, id, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getQueryObjectivRobust(id, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            GLsizei *length,
-                                                            GLint64 *params)
-{
-    EVENT(
-        "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLint64 *params = 0x%0.8p)",
-        id, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetQueryObjecti64vRobustANGLE(context, id, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getQueryObjecti64vRobust(id, pname, bufSize, length, params);
-    }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLuint64 *params)
-{
-    EVENT(
-        "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
-        "GLuint64 *params = 0x%0.8p)",
-        id, pname, bufSize, length, params);
-
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!ValidateGetQueryObjectui64vRobustANGLE(context, id, pname, bufSize, length, params))
-        {
-            return;
-        }
-
-        context->getQueryObjectui64vRobust(id, pname, bufSize, length, params);
-    }
-}
-
-GL_APICALL void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target,
-                                                                    GLenum attachment,
-                                                                    GLuint texture,
-                                                                    GLint level,
-                                                                    GLint baseViewIndex,
-                                                                    GLsizei numViews)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
-        "GLint baseViewIndex = %d, GLsizei numViews = %d)",
-        target, attachment, texture, level, baseViewIndex, numViews);
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateFramebufferTextureMultiviewLayeredANGLE(context, target, attachment, texture,
-                                                             level, baseViewIndex, numViews))
-        {
-            return;
-        }
-        context->framebufferTextureMultiviewLayered(target, attachment, texture, level,
-                                                    baseViewIndex, numViews);
-    }
-}
-
-GL_APICALL void GL_APIENTRY FramebufferTextureMultiviewSideBySideANGLE(GLenum target,
-                                                                       GLenum attachment,
-                                                                       GLuint texture,
-                                                                       GLint level,
-                                                                       GLsizei numViews,
-                                                                       const GLint *viewportOffsets)
-{
-    EVENT(
-        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
-        "GLsizei numViews = %d, GLsizei* viewportOffsets = 0x%0.8p)",
-        target, attachment, texture, level, numViews, viewportOffsets);
-    Context *context = GetValidGlobalContext();
-    if (context)
-    {
-        if (!context->skipValidation() &&
-            !ValidateFramebufferTextureMultiviewSideBySideANGLE(
-                context, target, attachment, texture, level, numViews, viewportOffsets))
-        {
-            return;
-        }
-        context->framebufferTextureMultiviewSideBySide(target, attachment, texture, level, numViews,
-                                                       viewportOffsets);
-    }
-}
-
-}  // gl
deleted file mode 100644
--- a/gfx/angle/checkout/src/libGLESv2/entry_points_gles_2_0_ext.h
+++ /dev/null
@@ -1,538 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_2_0_ext.h : Defines the GLES 2.0 extension entry points.
-
-#ifndef LIBGLESV2_ENTRYPOINTGLES20EXT_H_
-#define LIBGLESV2_ENTRYPOINTGLES20EXT_H_
-
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-#include <export.h>
-
-namespace gl
-{
-
-// GL_CHROMIUM_bind_uniform_location
-ANGLE_EXPORT void GL_APIENTRY BindUniformLocationCHROMIUM(GLuint program,
-                                                          GLint location,
-                                                          const GLchar *name);
-
-// GL_CHROMIUM_framebuffer_mixed_samples
-ANGLE_EXPORT void GL_APIENTRY MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix);
-ANGLE_EXPORT void GL_APIENTRY MatrixLoadIdentityCHROMIUM(GLenum matrixMode);
-
-ANGLE_EXPORT void GL_APIENTRY CoverageModulationCHROMIUM(GLenum components);
-
-// GL_CHROMIUM_path_rendering
-ANGLE_EXPORT GLuint GL_APIENTRY GenPathsCHROMIUM(GLsizei chromium);
-ANGLE_EXPORT void GL_APIENTRY DeletePathsCHROMIUM(GLuint first, GLsizei range);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsPathCHROMIUM(GLuint path);
-ANGLE_EXPORT void GL_APIENTRY PathCommandsCHROMIUM(GLuint path,
-                                                   GLsizei numCommands,
-                                                   const GLubyte *commands,
-                                                   GLsizei numCoords,
-                                                   GLenum coordType,
-                                                   const void *coords);
-ANGLE_EXPORT void GL_APIENTRY PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value);
-ANGLE_EXPORT void GL_APIENTRY PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value);
-ANGLE_EXPORT void GL_APIENTRY GetPathParameterfvCHROMIUM(GLuint path, GLenum pname, GLfloat *value);
-ANGLE_EXPORT void GL_APIENTRY GetPathParameterivCHROMIUM(GLuint path, GLenum pname, GLint *value);
-ANGLE_EXPORT void GL_APIENTRY PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask);
-ANGLE_EXPORT void GL_APIENTRY StencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask);
-ANGLE_EXPORT void GL_APIENTRY StencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask);
-ANGLE_EXPORT void GL_APIENTRY CoverFillPathCHROMIUM(GLuint path, GLenum coverMode);
-ANGLE_EXPORT void GL_APIENTRY CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode);
-ANGLE_EXPORT void GL_APIENTRY StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                                               GLenum fillMode,
-                                                               GLuint mask,
-                                                               GLenum coverMode);
-ANGLE_EXPORT void GL_APIENTRY StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                                                 GLint reference,
-                                                                 GLuint mask,
-                                                                 GLenum coverMode);
-ANGLE_EXPORT void GL_APIENTRY CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                                             GLenum pathNameType,
-                                                             const void *paths,
-                                                             GLuint pathBase,
-                                                             GLenum coverMode,
-                                                             GLenum transformType,
-                                                             const GLfloat *transformValues);
-ANGLE_EXPORT void GL_APIENTRY CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                                               GLenum pathNameType,
-                                                               const void *paths,
-                                                               GLuint pathBase,
-                                                               GLenum coverMode,
-                                                               GLenum transformType,
-                                                               const GLfloat *transformValues);
-ANGLE_EXPORT void GL_APIENTRY StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                                               GLenum pathNameType,
-                                                               const void *paths,
-                                                               GLuint pathBAse,
-                                                               GLenum fillMode,
-                                                               GLuint mask,
-                                                               GLenum transformType,
-                                                               const GLfloat *transformValues);
-ANGLE_EXPORT void GL_APIENTRY StencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                                                 GLenum pathNameType,
-                                                                 const void *paths,
-                                                                 GLuint pathBase,
-                                                                 GLint reference,
-                                                                 GLuint mask,
-                                                                 GLenum transformType,
-                                                                 const GLfloat *transformValues);
-ANGLE_EXPORT void GL_APIENTRY
-StencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                          GLenum pathNameType,
-                                          const void *paths,
-                                          GLuint pathBase,
-                                          GLenum fillMode,
-                                          GLuint mask,
-                                          GLenum coverMode,
-                                          GLenum transformType,
-                                          const GLfloat *transformValues);
-ANGLE_EXPORT void GL_APIENTRY
-StencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                            GLenum pathNameType,
-                                            const void *paths,
-                                            GLuint pathBase,
-                                            GLint reference,
-                                            GLuint mask,
-                                            GLenum coverMode,
-                                            GLenum transformType,
-                                            const GLfloat *transformValues);
-ANGLE_EXPORT void GL_APIENTRY BindFragmentInputLocationCHROMIUM(GLuint program,
-                                                                GLint location,
-                                                                const GLchar *name);
-ANGLE_EXPORT void GL_APIENTRY ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                                                  GLint location,
-                                                                  GLenum genMode,
-                                                                  GLint components,
-                                                                  const GLfloat *coeffs);
-
-// GL_CHROMIUM_copy_texture
-ANGLE_EXPORT void GL_APIENTRY CopyTextureCHROMIUM(GLuint sourceId,
-                                                  GLint sourceLevel,
-                                                  GLenum destTarget,
-                                                  GLuint destId,
-                                                  GLint destLevel,
-                                                  GLint internalFormat,
-                                                  GLenum destType,
-                                                  GLboolean unpackFlipY,
-                                                  GLboolean unpackPremultiplyAlpha,
-                                                  GLboolean unpackUnmultiplyAlpha);
-
-ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
-                                                     GLint sourceLevel,
-                                                     GLenum destTarget,
-                                                     GLuint destId,
-                                                     GLint destLevel,
-                                                     GLint xoffset,
-                                                     GLint yoffset,
-                                                     GLint x,
-                                                     GLint y,
-                                                     GLsizei width,
-                                                     GLsizei height,
-                                                     GLboolean unpackFlipY,
-                                                     GLboolean unpackPremultiplyAlpha,
-                                                     GLboolean unpackUnmultiplyAlpha);
-
-// GL_CHROMIUM_copy_compressed_texture
-ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId);
-
-// GL_ANGLE_request_extension
-ANGLE_EXPORT void GL_APIENTRY RequestExtensionANGLE(const GLchar *name);
-
-// GL_ANGLE_robust_client_memory
-ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
-                                                     GLsizei bufSize,
-                                                     GLsizei *length,
-                                                     GLboolean *data);
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
-                                                              GLenum pname,
-                                                              GLsizei bufSize,
-                                                              GLsizei *length,
-                                                              GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
-                                                   GLsizei bufSize,
-                                                   GLsizei *length,
-                                                   GLfloat *data);
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
-                                                                             GLenum attachment,
-                                                                             GLenum pname,
-                                                                             GLsizei bufSize,
-                                                                             GLsizei *length,
-                                                                             GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname,
-                                                     GLsizei bufSize,
-                                                     GLsizei *length,
-                                                     GLint *data);
-ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
-                                                      GLenum pname,
-                                                      GLsizei bufSize,
-                                                      GLsizei *length,
-                                                      GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
-                                                                    GLenum pname,
-                                                                    GLsizei bufSize,
-                                                                    GLsizei *length,
-                                                                    GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetShaderivRobustANGLE(GLuint shader,
-                                                     GLenum pname,
-                                                     GLsizei bufSize,
-                                                     GLsizei *length,
-                                                     GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
-                                                      GLint location,
-                                                      GLsizei bufSize,
-                                                      GLsizei *length,
-                                                      GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
-                                                      GLint location,
-                                                      GLsizei bufSize,
-                                                      GLsizei *length,
-                                                      GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
-                                                                 GLenum pname,
-                                                                 GLsizei bufSize,
-                                                                 GLsizei *length,
-                                                                 void **pointer);
-ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
-                                                    GLint y,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLenum format,
-                                                    GLenum type,
-                                                    GLsizei bufSize,
-                                                    GLsizei *length,
-                                                    GLsizei *columns,
-                                                    GLsizei *rows,
-                                                    void *pixels);
-ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
-                                                    GLint level,
-                                                    GLint internalformat,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLint border,
-                                                    GLenum format,
-                                                    GLenum type,
-                                                    GLsizei bufSize,
-                                                    const void *pixels);
-ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
-                                                        GLenum pname,
-                                                        GLsizei bufSize,
-                                                        const GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
-                                                        GLenum pname,
-                                                        GLsizei bufSize,
-                                                        const GLint *params);
-ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
-                                                       GLint level,
-                                                       GLint xoffset,
-                                                       GLint yoffset,
-                                                       GLsizei width,
-                                                       GLsizei height,
-                                                       GLenum format,
-                                                       GLenum type,
-                                                       GLsizei bufSize,
-                                                       const void *pixels);
-
-ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
-                                                    GLint level,
-                                                    GLint internalformat,
-                                                    GLsizei width,
-                                                    GLsizei height,
-                                                    GLsizei depth,
-                                                    GLint border,
-                                                    GLenum format,
-                                                    GLenum type,
-                                                    GLsizei bufSize,
-                                                    const void *pixels);
-ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
-                                                       GLint level,
-                                                       GLint xoffset,
-                                                       GLint yoffset,
-                                                       GLint zoffset,
-                                                       GLsizei width,
-                                                       GLsizei height,
-                                                       GLsizei depth,
-                                                       GLenum format,
-                                                       GLenum type,
-                                                       GLsizei bufSize,
-                                                       const void *pixels);
-
-ANGLE_EXPORT void GL_APIENTRY CompressedTexImage2DRobustANGLE(GLenum target,
-                                                              GLint level,
-                                                              GLenum internalformat,
-                                                              GLsizei width,
-                                                              GLsizei height,
-                                                              GLint border,
-                                                              GLsizei imageSize,
-                                                              GLsizei dataSize,
-                                                              const GLvoid *data);
-ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage2DRobustANGLE(GLenum target,
-                                                                 GLint level,
-                                                                 GLint xoffset,
-                                                                 GLint yoffset,
-                                                                 GLsizei width,
-                                                                 GLsizei height,
-                                                                 GLenum format,
-                                                                 GLsizei imageSize,
-                                                                 GLsizei dataSize,
-                                                                 const GLvoid *data);
-ANGLE_EXPORT void GL_APIENTRY CompressedTexImage3DRobustANGLE(GLenum target,
-                                                              GLint level,
-                                                              GLenum internalformat,
-                                                              GLsizei width,
-                                                              GLsizei height,
-                                                              GLsizei depth,
-                                                              GLint border,
-                                                              GLsizei imageSize,
-                                                              GLsizei dataSize,
-                                                              const GLvoid *data);
-ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage3DRobustANGLE(GLenum target,
-                                                                 GLint level,
-                                                                 GLint xoffset,
-                                                                 GLint yoffset,
-                                                                 GLint zoffset,
-                                                                 GLsizei width,
-                                                                 GLsizei height,
-                                                                 GLsizei depth,
-                                                                 GLenum format,
-                                                                 GLsizei imageSize,
-                                                                 GLsizei dataSize,
-                                                                 const GLvoid *data);
-
-ANGLE_EXPORT void GL_APIENTRY
-GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
-                                                           GLenum pname,
-                                                           GLsizei bufSize,
-                                                           GLsizei *length,
-                                                           void **params);
-ANGLE_EXPORT void GL_APIENTRY GetIntegeri_vRobustANGLE(GLenum target,
-                                                       GLuint index,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLint *data);
-ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
-                                                             GLenum internalformat,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            GLsizei *length,
-                                                            GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
-                                                       GLint location,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
-                                                                 GLuint uniformBlockIndex,
-                                                                 GLenum pname,
-                                                                 GLsizei bufSize,
-                                                                 GLsizei *length,
-                                                                 GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLint64 *data);
-ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
-                                                         GLuint index,
-                                                         GLsizei bufSize,
-                                                         GLsizei *length,
-                                                         GLint64 *data);
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLint64 *params);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            const GLint *param);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            const GLfloat *param);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
-                                                               GLenum pname,
-                                                               GLsizei bufSize,
-                                                               GLsizei *length,
-                                                               GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
-                                                               GLenum pname,
-                                                               GLsizei bufSize,
-                                                               GLsizei *length,
-                                                               GLfloat *params);
-
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLenum target,
-                                                                   GLenum pname,
-                                                                   GLsizei bufSize,
-                                                                   GLsizei *length,
-                                                                   GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
-                                                               GLenum programInterface,
-                                                               GLenum pname,
-                                                               GLsizei bufSize,
-                                                               GLsizei *length,
-                                                               GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
-                                                       GLuint index,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLboolean *data);
-ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
-                                                          GLuint index,
-                                                          GLsizei bufSize,
-                                                          GLsizei *length,
-                                                          GLfloat *val);
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
-                                                                GLint level,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
-                                                                GLint level,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLfloat *params);
-
-ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                void **params);
-ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
-                                                     GLint y,
-                                                     GLsizei width,
-                                                     GLsizei height,
-                                                     GLenum format,
-                                                     GLenum type,
-                                                     GLsizei bufSize,
-                                                     GLsizei *length,
-                                                     GLsizei *columns,
-                                                     GLsizei *rows,
-                                                     void *data);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
-                                                       GLint location,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
-                                                       GLint location,
-                                                       GLsizei bufSize,
-                                                       GLsizei *length,
-                                                       GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
-                                                        GLint location,
-                                                        GLsizei bufSize,
-                                                        GLsizei *length,
-                                                        GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
-                                                         GLenum pname,
-                                                         GLsizei bufSize,
-                                                         const GLint *params);
-ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
-                                                          GLenum pname,
-                                                          GLsizei bufSize,
-                                                          const GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            GLsizei *length,
-                                                            GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             const GLint *param);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
-                                                              GLenum pname,
-                                                              GLsizei bufSize,
-                                                              const GLuint *param);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
-                                                                GLenum pname,
-                                                                GLsizei bufSize,
-                                                                GLsizei *length,
-                                                                GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
-                                                                 GLenum pname,
-                                                                 GLsizei bufSize,
-                                                                 GLsizei *length,
-                                                                 GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
-                                                          GLenum pname,
-                                                          GLsizei bufSize,
-                                                          GLsizei *length,
-                                                          GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
-                                                            GLenum pname,
-                                                            GLsizei bufSize,
-                                                            GLsizei *length,
-                                                            GLint64 *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
-                                                             GLenum pname,
-                                                             GLsizei bufSize,
-                                                             GLsizei *length,
-                                                             GLuint64 *params);
-
-// GL_ANGLE_multiview
-ANGLE_EXPORT void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target,
-                                                                      GLenum attachment,
-                                                                      GLuint texture,
-                                                                      GLint level,
-                                                                      GLint baseViewIndex,
-                                                                      GLsizei numViews);
-ANGLE_EXPORT void GL_APIENTRY
-FramebufferTextureMultiviewSideBySideANGLE(GLenum target,
-                                           GLenum attachment,
-                                           GLuint texture,
-                                           GLint level,
-                                           GLsizei numViews,
-                                           const GLint *viewportOffsets);
-}  // namespace gl
-
-#endif  // LIBGLESV2_ENTRYPOINTGLES20EXT_H_
--- a/gfx/angle/checkout/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
+++ b/gfx/angle/checkout/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
@@ -18,21 +18,22 @@ namespace gl
 {
 void GL_APIENTRY BeginQuery(GLenum target, GLuint id)
 {
     EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::BeginQuery>(target, id);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::BeginQuery>(targetPacked, id);
 
-        if (context->skipValidation() || ValidateBeginQuery(context, target, id))
+        if (context->skipValidation() || ValidateBeginQuery(context, targetPacked, id))
         {
-            context->beginQuery(target, id);
+            context->beginQuery(targetPacked, id);
         }
     }
 }
 
 void GL_APIENTRY BeginTransformFeedback(GLenum primitiveMode)
 {
     EVENT("(GLenum primitiveMode = 0x%X)", primitiveMode);
 
@@ -555,21 +556,22 @@ void GL_APIENTRY DrawRangeElements(GLenu
 
 void GL_APIENTRY EndQuery(GLenum target)
 {
     EVENT("(GLenum target = 0x%X)", target);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::EndQuery>(target);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::EndQuery>(targetPacked);
 
-        if (context->skipValidation() || ValidateEndQuery(context, target))
+        if (context->skipValidation() || ValidateEndQuery(context, targetPacked))
         {
-            context->endQuery(target);
+            context->endQuery(targetPacked);
         }
     }
 }
 
 void GL_APIENTRY EndTransformFeedback()
 {
     EVENT("()");
 
@@ -958,21 +960,22 @@ void GL_APIENTRY GetQueryObjectuiv(GLuin
 void GL_APIENTRY GetQueryiv(GLenum target, GLenum pname, GLint *params)
 {
     EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
           params);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::GetQueryiv>(target, pname, params);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryiv>(targetPacked, pname, params);
 
-        if (context->skipValidation() || ValidateGetQueryiv(context, target, pname, params))
+        if (context->skipValidation() || ValidateGetQueryiv(context, targetPacked, pname, params))
         {
-            context->getQueryiv(target, pname, params);
+            context->getQueryiv(targetPacked, pname, params);
         }
     }
 }
 
 void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
 {
     EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", sampler, pname,
           params);
--- a/gfx/angle/checkout/src/libGLESv2/entry_points_gles_ext_autogen.cpp
+++ b/gfx/angle/checkout/src/libGLESv2/entry_points_gles_ext_autogen.cpp
@@ -1,10 +1,10 @@
 // GENERATED FILE - DO NOT EDIT.
-// Generated by generate_entry_points.py using data from gl.xml.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
 //
 // 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.
 //
 // entry_points_gles_ext_autogen.cpp:
 //   Defines the GLES extension entry points.
 
@@ -141,16 +141,1799 @@ void GL_APIENTRY VertexAttribDivisorANGL
 
         if (context->skipValidation() || ValidateVertexAttribDivisorANGLE(context, index, divisor))
         {
             context->vertexAttribDivisor(index, divisor);
         }
     }
 }
 
+// GL_ANGLE_multiview
+void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target,
+                                                         GLenum attachment,
+                                                         GLuint texture,
+                                                         GLint level,
+                                                         GLint baseViewIndex,
+                                                         GLsizei numViews)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+        "GLint baseViewIndex = %d, GLsizei numViews = %d)",
+        target, attachment, texture, level, baseViewIndex, numViews);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::FramebufferTextureMultiviewLayeredANGLE>(
+            target, attachment, texture, level, baseViewIndex, numViews);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferTextureMultiviewLayeredANGLE(context, target, attachment, texture,
+                                                            level, baseViewIndex, numViews))
+        {
+            context->framebufferTextureMultiviewLayered(target, attachment, texture, level,
+                                                        baseViewIndex, numViews);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferTextureMultiviewSideBySideANGLE(GLenum target,
+                                                            GLenum attachment,
+                                                            GLuint texture,
+                                                            GLint level,
+                                                            GLsizei numViews,
+                                                            const GLint *viewportOffsets)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+        "GLsizei numViews = %d, const GLint * viewportOffsets = 0x%0.8p)",
+        target, attachment, texture, level, numViews, viewportOffsets);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::FramebufferTextureMultiviewSideBySideANGLE>(
+            target, attachment, texture, level, numViews, viewportOffsets);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferTextureMultiviewSideBySideANGLE(context, target, attachment, texture,
+                                                               level, numViews, viewportOffsets))
+        {
+            context->framebufferTextureMultiviewSideBySide(target, attachment, texture, level,
+                                                           numViews, viewportOffsets);
+        }
+    }
+}
+
+// GL_ANGLE_request_extension
+void GL_APIENTRY RequestExtensionANGLE(const GLchar *name)
+{
+    EVENT("(const GLchar * name = 0x%0.8p)", name);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::RequestExtensionANGLE>(name);
+
+        if (context->skipValidation() || ValidateRequestExtensionANGLE(context, name))
+        {
+            context->requestExtension(name);
+        }
+    }
+}
+
+// GL_ANGLE_robust_client_memory
+void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
+                                        GLsizei bufSize,
+                                        GLsizei *length,
+                                        GLboolean *params)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLboolean * "
+        "params = 0x%0.8p)",
+        pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetBooleanvRobustANGLE>(pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetBooleanvRobustANGLE(context, pname, bufSize, length, params))
+        {
+            context->getBooleanvRobust(pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
+                                                 GLenum pname,
+                                                 GLsizei bufSize,
+                                                 GLsizei *length,
+                                                 GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferParameterivRobustANGLE>(targetPacked, pname,
+                                                                           bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetBufferParameterivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getBufferParameterivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
+                                      GLsizei bufSize,
+                                      GLsizei *length,
+                                      GLfloat *params)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLfloat * params "
+        "= 0x%0.8p)",
+        pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetFloatvRobustANGLE>(pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetFloatvRobustANGLE(context, pname, bufSize, length, params))
+        {
+            context->getFloatvRobust(pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
+                                                                GLenum attachment,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = "
+        "%d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        target, attachment, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetFramebufferAttachmentParameterivRobustANGLE>(
+            target, attachment, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetFramebufferAttachmentParameterivRobustANGLE(context, target, attachment,
+                                                                   pname, bufSize, length, params))
+        {
+            context->getFramebufferAttachmentParameterivRobust(target, attachment, pname, bufSize,
+                                                               length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname, GLsizei bufSize, GLsizei *length, GLint *data)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLint * data = "
+        "0x%0.8p)",
+        pname, bufSize, length, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetIntegervRobustANGLE>(pname, bufSize, length, data);
+
+        if (context->skipValidation() ||
+            ValidateGetIntegervRobustANGLE(context, pname, bufSize, length, data))
+        {
+            context->getIntegervRobust(pname, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
+                                         GLenum pname,
+                                         GLsizei bufSize,
+                                         GLsizei *length,
+                                         GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        program, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetProgramivRobustANGLE>(program, pname, bufSize, length,
+                                                                   params);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramivRobustANGLE(context, program, pname, bufSize, length, params))
+        {
+            context->getProgramivRobust(program, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
+                                                       GLenum pname,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetRenderbufferParameterivRobustANGLE>(
+            target, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetRenderbufferParameterivRobustANGLE(
+                                             context, target, pname, bufSize, length, params))
+        {
+            context->getRenderbufferParameterivRobust(target, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY
+GetShaderivRobustANGLE(GLuint shader, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
+{
+    EVENT(
+        "(GLuint shader = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        shader, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetShaderivRobustANGLE>(shader, pname, bufSize, length,
+                                                                  params);
+
+        if (context->skipValidation() ||
+            ValidateGetShaderivRobustANGLE(context, shader, pname, bufSize, length, params))
+        {
+            context->getShaderivRobust(shader, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
+                                              GLenum pname,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLfloat *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterfvRobustANGLE>(targetPacked, pname,
+                                                                        bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterfvRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterfvRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
+                                              GLenum pname,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterivRobustANGLE>(targetPacked, pname,
+                                                                        bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
+                                         GLint location,
+                                         GLsizei bufSize,
+                                         GLsizei *length,
+                                         GLfloat *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetUniformfvRobustANGLE>(program, location, bufSize,
+                                                                   length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformfvRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getUniformfvRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
+                                         GLint location,
+                                         GLsizei bufSize,
+                                         GLsizei *length,
+                                         GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetUniformivRobustANGLE>(program, location, bufSize,
+                                                                   length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getUniformivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
+                                              GLenum pname,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLfloat *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetVertexAttribfvRobustANGLE>(index, pname, bufSize,
+                                                                        length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribfvRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribfvRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
+                                              GLenum pname,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLint *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetVertexAttribivRobustANGLE>(index, pname, bufSize,
+                                                                        length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribivRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribivRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    void **pointer)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, void ** pointer = 0x%0.8p)",
+        index, pname, bufSize, length, pointer);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetVertexAttribPointervRobustANGLE>(index, pname, bufSize,
+                                                                              length, pointer);
+
+        if (context->skipValidation() || ValidateGetVertexAttribPointervRobustANGLE(
+                                             context, index, pname, bufSize, length, pointer))
+        {
+            context->getVertexAttribPointervRobust(index, pname, bufSize, length, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
+                                       GLint y,
+                                       GLsizei width,
+                                       GLsizei height,
+                                       GLenum format,
+                                       GLenum type,
+                                       GLsizei bufSize,
+                                       GLsizei *length,
+                                       GLsizei *columns,
+                                       GLsizei *rows,
+                                       void *pixels)
+{
+    EVENT(
+        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLenum format = "
+        "0x%X, GLenum type = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLsizei * "
+        "columns = 0x%0.8p, GLsizei * rows = 0x%0.8p, void * pixels = 0x%0.8p)",
+        x, y, width, height, format, type, bufSize, length, columns, rows, pixels);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::ReadPixelsRobustANGLE>(
+            x, y, width, height, format, type, bufSize, length, columns, rows, pixels);
+
+        if (context->skipValidation() ||
+            ValidateReadPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
+                                          length, columns, rows, pixels))
+        {
+            context->readPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
+                                      rows, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
+                                       GLint level,
+                                       GLint internalformat,
+                                       GLsizei width,
+                                       GLsizei height,
+                                       GLint border,
+                                       GLenum format,
+                                       GLenum type,
+                                       GLsizei bufSize,
+                                       const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+        "GLsizei height = %d, GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLsizei "
+        "bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, internalformat, width, height, border, format, type, bufSize, pixels);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::TexImage2DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, border, format, type, bufSize,
+            pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexImage2DRobustANGLE(context, targetPacked, level, internalformat, width,
+                                          height, border, format, type, bufSize, pixels))
+        {
+            context->texImage2DRobust(targetPacked, level, internalformat, width, height, border,
+                                      format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
+                                           GLenum pname,
+                                           GLsizei bufSize,
+                                           const GLfloat *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLfloat * params "
+        "= 0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterfvRobustANGLE>(targetPacked, pname, bufSize,
+                                                                     params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterfvRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterfvRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
+                                           GLenum pname,
+                                           GLsizei bufSize,
+                                           const GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLint * params = "
+        "0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                     params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterivRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterivRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
+                                          GLint level,
+                                          GLint xoffset,
+                                          GLint yoffset,
+                                          GLsizei width,
+                                          GLsizei height,
+                                          GLenum format,
+                                          GLenum type,
+                                          GLsizei bufSize,
+                                          const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLsizei "
+        "width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLsizei "
+        "bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, xoffset, yoffset, width, height, format, type, bufSize, pixels);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::TexSubImage2DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, width, height, format, type, bufSize, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexSubImage2DRobustANGLE(context, targetPacked, level, xoffset, yoffset, width,
+                                             height, format, type, bufSize, pixels))
+        {
+            context->texSubImage2DRobust(targetPacked, level, xoffset, yoffset, width, height,
+                                         format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
+                                       GLint level,
+                                       GLint internalformat,
+                                       GLsizei width,
+                                       GLsizei height,
+                                       GLsizei depth,
+                                       GLint border,
+                                       GLenum format,
+                                       GLenum type,
+                                       GLsizei bufSize,
+                                       const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+        "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, GLenum "
+        "type = 0x%X, GLsizei bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, internalformat, width, height, depth, border, format, type, bufSize, pixels);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexImage3DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, depth, border, format, type,
+            bufSize, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexImage3DRobustANGLE(context, targetPacked, level, internalformat, width,
+                                          height, depth, border, format, type, bufSize, pixels))
+        {
+            context->texImage3DRobust(targetPacked, level, internalformat, width, height, depth,
+                                      border, format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
+                                          GLint level,
+                                          GLint xoffset,
+                                          GLint yoffset,
+                                          GLint zoffset,
+                                          GLsizei width,
+                                          GLsizei height,
+                                          GLsizei depth,
+                                          GLenum format,
+                                          GLenum type,
+                                          GLsizei bufSize,
+                                          const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+        "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+        "= 0x%X, GLenum type = 0x%X, GLsizei bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize,
+        pixels);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexSubImage3DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, zoffset, width, height, depth, format, type,
+            bufSize, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexSubImage3DRobustANGLE(context, targetPacked, level, xoffset, yoffset,
+                                             zoffset, width, height, depth, format, type, bufSize,
+                                             pixels))
+        {
+            context->texSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset, width,
+                                         height, depth, format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexImage2DRobustANGLE(GLenum target,
+                                                 GLint level,
+                                                 GLenum internalformat,
+                                                 GLsizei width,
+                                                 GLsizei height,
+                                                 GLint border,
+                                                 GLsizei imageSize,
+                                                 GLsizei dataSize,
+                                                 const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, GLsizei dataSize = "
+        "%d, const GLvoid * data = 0x%0.8p)",
+        target, level, internalformat, width, height, border, imageSize, dataSize, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CompressedTexImage2DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, border, imageSize, dataSize, data);
+
+        if (context->skipValidation() || ValidateCompressedTexImage2DRobustANGLE(
+                                             context, targetPacked, level, internalformat, width,
+                                             height, border, imageSize, dataSize, data))
+        {
+            context->compressedTexImage2DRobust(targetPacked, level, internalformat, width, height,
+                                                border, imageSize, dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexSubImage2DRobustANGLE(GLenum target,
+                                                    GLint level,
+                                                    GLsizei xoffset,
+                                                    GLsizei yoffset,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLenum format,
+                                                    GLsizei imageSize,
+                                                    GLsizei dataSize,
+                                                    const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLsizei xoffset = %d, GLsizei yoffset = %d, "
+        "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLsizei imageSize = %d, "
+        "GLsizei dataSize = %d, const GLvoid * data = 0x%0.8p)",
+        target, level, xoffset, yoffset, width, height, format, imageSize, dataSize, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CompressedTexSubImage2DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, width, height, format, imageSize, dataSize,
+            data);
+
+        if (context->skipValidation() || ValidateCompressedTexSubImage2DRobustANGLE(
+                                             context, targetPacked, level, xoffset, yoffset, width,
+                                             height, format, imageSize, dataSize, data))
+        {
+            context->compressedTexSubImage2DRobust(targetPacked, level, xoffset, yoffset, width,
+                                                   height, format, imageSize, dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexImage3DRobustANGLE(GLenum target,
+                                                 GLint level,
+                                                 GLenum internalformat,
+                                                 GLsizei width,
+                                                 GLsizei height,
+                                                 GLsizei depth,
+                                                 GLint border,
+                                                 GLsizei imageSize,
+                                                 GLsizei dataSize,
+                                                 const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
+        "GLsizei dataSize = %d, const GLvoid * data = 0x%0.8p)",
+        target, level, internalformat, width, height, depth, border, imageSize, dataSize, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::CompressedTexImage3DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, depth, border, imageSize, dataSize,
+            data);
+
+        if (context->skipValidation() || ValidateCompressedTexImage3DRobustANGLE(
+                                             context, targetPacked, level, internalformat, width,
+                                             height, depth, border, imageSize, dataSize, data))
+        {
+            context->compressedTexImage3DRobust(targetPacked, level, internalformat, width, height,
+                                                depth, border, imageSize, dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexSubImage3DRobustANGLE(GLenum target,
+                                                    GLint level,
+                                                    GLint xoffset,
+                                                    GLint yoffset,
+                                                    GLint zoffset,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLsizei depth,
+                                                    GLenum format,
+                                                    GLsizei imageSize,
+                                                    GLsizei dataSize,
+                                                    const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+        "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+        "= 0x%X, GLsizei imageSize = %d, GLsizei dataSize = %d, const GLvoid * data = 0x%0.8p)",
+        target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, dataSize,
+        data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::CompressedTexSubImage3DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
+            dataSize, data);
+
+        if (context->skipValidation() ||
+            ValidateCompressedTexSubImage3DRobustANGLE(context, targetPacked, level, xoffset,
+                                                       yoffset, zoffset, width, height, depth,
+                                                       format, imageSize, dataSize, data))
+        {
+            context->compressedTexSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset,
+                                                   width, height, depth, format, imageSize,
+                                                   dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY
+GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                 length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryivRobustANGLE(context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getQueryivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
+                                              GLenum pname,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLuint *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLuint * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetQueryObjectuivRobustANGLE>(id, pname, bufSize, length,
+                                                                        params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjectuivRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjectuivRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
+                                              GLenum pname,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              void **params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, void ** params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferPointervRobustANGLE>(targetPacked, pname,
+                                                                        bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetBufferPointervRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getBufferPointervRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY
+GetIntegeri_vRobustANGLE(GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * data = 0x%0.8p)",
+        target, index, bufSize, length, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetIntegeri_vRobustANGLE>(target, index, bufSize, length,
+                                                                    data);
+
+        if (context->skipValidation() ||
+            ValidateGetIntegeri_vRobustANGLE(context, target, index, bufSize, length, data))
+        {
+            context->getIntegeri_vRobust(target, index, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
+                                                GLenum internalformat,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize "
+        "= %d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        target, internalformat, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetInternalformativRobustANGLE>(
+            target, internalformat, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetInternalformativRobustANGLE(context, target, internalformat, pname, bufSize,
+                                                   length, params))
+        {
+            context->getInternalformativRobust(target, internalformat, pname, bufSize, length,
+                                               params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
+                                               GLenum pname,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLint *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetVertexAttribIivRobustANGLE>(index, pname, bufSize,
+                                                                         length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribIivRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribIivRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLuint *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetVertexAttribIuivRobustANGLE>(index, pname, bufSize,
+                                                                          length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribIuivRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribIuivRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
+                                          GLint location,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLuint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetUniformuivRobustANGLE>(program, location, bufSize,
+                                                                    length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformuivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getUniformuivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
+                                                    GLuint uniformBlockIndex,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLsizei bufSize "
+        "= %d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        program, uniformBlockIndex, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetActiveUniformBlockivRobustANGLE>(
+            program, uniformBlockIndex, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetActiveUniformBlockivRobustANGLE(context, program, uniformBlockIndex, pname,
+                                                       bufSize, length, params))
+        {
+            context->getActiveUniformBlockivRobust(program, uniformBlockIndex, pname, bufSize,
+                                                   length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLint64 *data)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLint64 * data = "
+        "0x%0.8p)",
+        pname, bufSize, length, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetInteger64vRobustANGLE>(pname, bufSize, length, data);
+
+        if (context->skipValidation() ||
+            ValidateGetInteger64vRobustANGLE(context, pname, bufSize, length, data))
+        {
+            context->getInteger64vRobust(pname, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
+                                            GLuint index,
+                                            GLsizei bufSize,
+                                            GLsizei *length,
+                                            GLint64 *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint64 * data = 0x%0.8p)",
+        target, index, bufSize, length, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetInteger64i_vRobustANGLE>(target, index, bufSize,
+                                                                      length, data);
+
+        if (context->skipValidation() ||
+            ValidateGetInteger64i_vRobustANGLE(context, target, index, bufSize, length, data))
+        {
+            context->getInteger64i_vRobust(target, index, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLint64 *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint64 * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferParameteri64vRobustANGLE>(
+            targetPacked, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetBufferParameteri64vRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getBufferParameteri64vRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
+                                               GLuint pname,
+                                               GLsizei bufSize,
+                                               const GLint *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLuint pname = %u, GLsizei bufSize = %d, const GLint * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::SamplerParameterivRobustANGLE>(sampler, pname, bufSize,
+                                                                         param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterivRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
+                                               GLenum pname,
+                                               GLsizei bufSize,
+                                               const GLfloat *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLfloat * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::SamplerParameterfvRobustANGLE>(sampler, pname, bufSize,
+                                                                         param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterfvRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetSamplerParameterivRobustANGLE>(sampler, pname, bufSize,
+                                                                            length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLfloat *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetSamplerParameterfvRobustANGLE>(sampler, pname, bufSize,
+                                                                            length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterfvRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterfvRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLuint sampler,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetFramebufferParameterivRobustANGLE>(
+            sampler, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetFramebufferParameterivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getFramebufferParameterivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
+                                                  GLenum programInterface,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum programInterface = 0x%X, GLenum pname = 0x%X, GLsizei "
+        "bufSize = %d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        program, programInterface, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetProgramInterfaceivRobustANGLE>(
+            program, programInterface, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramInterfaceivRobustANGLE(context, program, programInterface, pname,
+                                                     bufSize, length, params))
+        {
+            context->getProgramInterfaceivRobust(program, programInterface, pname, bufSize, length,
+                                                 params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
+                                          GLuint index,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLboolean *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLboolean * data = 0x%0.8p)",
+        target, index, bufSize, length, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetBooleani_vRobustANGLE>(target, index, bufSize, length,
+                                                                    data);
+
+        if (context->skipValidation() ||
+            ValidateGetBooleani_vRobustANGLE(context, target, index, bufSize, length, data))
+        {
+            context->getBooleani_vRobust(target, index, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
+                                             GLuint index,
+                                             GLsizei bufSize,
+                                             GLsizei *length,
+                                             GLfloat *val)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * val = 0x%0.8p)",
+        pname, index, bufSize, length, val);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetMultisamplefvRobustANGLE>(pname, index, bufSize,
+                                                                       length, val);
+
+        if (context->skipValidation() ||
+            ValidateGetMultisamplefvRobustANGLE(context, pname, index, bufSize, length, val))
+        {
+            context->getMultisamplefvRobust(pname, index, bufSize, length, val);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
+                                                   GLint level,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufSize = %d, "
+        "GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        target, level, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::GetTexLevelParameterivRobustANGLE>(
+            targetPacked, level, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexLevelParameterivRobustANGLE(context, targetPacked, level, pname, bufSize,
+                                                      length, params))
+        {
+            context->getTexLevelParameterivRobust(targetPacked, level, pname, bufSize, length,
+                                                  params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
+                                                   GLint level,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLfloat *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufSize = %d, "
+        "GLsizei * length = 0x%0.8p, GLfloat * params = 0x%0.8p)",
+        target, level, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::GetTexLevelParameterfvRobustANGLE>(
+            targetPacked, level, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexLevelParameterfvRobustANGLE(context, targetPacked, level, pname, bufSize,
+                                                      length, params))
+        {
+            context->getTexLevelParameterfvRobust(targetPacked, level, pname, bufSize, length,
+                                                  params);
+        }
+    }
+}
+
+void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   void **params)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, void ** params = "
+        "0x%0.8p)",
+        pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetPointervRobustANGLERobustANGLE>(pname, bufSize, length,
+                                                                             params);
+
+        if (context->skipValidation() ||
+            ValidateGetPointervRobustANGLERobustANGLE(context, pname, bufSize, length, params))
+        {
+            context->getPointervRobustANGLERobust(pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
+                                        GLint y,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLenum format,
+                                        GLenum type,
+                                        GLsizei bufSize,
+                                        GLsizei *length,
+                                        GLsizei *columns,
+                                        GLsizei *rows,
+                                        void *data)
+{
+    EVENT(
+        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLenum format = "
+        "0x%X, GLenum type = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLsizei * "
+        "columns = 0x%0.8p, GLsizei * rows = 0x%0.8p, void * data = 0x%0.8p)",
+        x, y, width, height, format, type, bufSize, length, columns, rows, data);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::ReadnPixelsRobustANGLE>(
+            x, y, width, height, format, type, bufSize, length, columns, rows, data);
+
+        if (context->skipValidation() ||
+            ValidateReadnPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
+                                           length, columns, rows, data))
+        {
+            context->readnPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
+                                       rows, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
+                                          GLint location,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLfloat *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetnUniformfvRobustANGLE>(program, location, bufSize,
+                                                                    length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformfvRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getnUniformfvRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
+                                          GLint location,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetnUniformivRobustANGLE>(program, location, bufSize,
+                                                                    length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getnUniformivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
+                                           GLint location,
+                                           GLsizei bufSize,
+                                           GLsizei *length,
+                                           GLuint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetnUniformuivRobustANGLE>(program, location, bufSize,
+                                                                     length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformuivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getnUniformuivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
+                                            GLenum pname,
+                                            GLsizei bufSize,
+                                            const GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLint * params = "
+        "0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterIivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                      params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterIivRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterIivRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
+                                             GLenum pname,
+                                             GLsizei bufSize,
+                                             const GLuint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLuint * params = "
+        "0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterIuivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                       params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterIuivRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterIuivRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
+                                               GLenum pname,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterIivRobustANGLE>(targetPacked, pname,
+                                                                         bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterIivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterIivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLuint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterIuivRobustANGLE>(targetPacked, pname,
+                                                                          bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterIuivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterIuivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                const GLint *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLint * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::SamplerParameterIivRobustANGLE>(sampler, pname, bufSize,
+                                                                          param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterIivRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterIivRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
+                                                 GLenum pname,
+                                                 GLsizei bufSize,
+                                                 const GLuint *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLuint * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::SamplerParameterIuivRobustANGLE>(sampler, pname, bufSize,
+                                                                           param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterIuivRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterIuivRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetSamplerParameterIivRobustANGLE>(
+            sampler, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterIivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterIivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLuint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetSamplerParameterIuivRobustANGLE>(
+            sampler, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterIuivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterIuivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
+                                             GLenum pname,
+                                             GLsizei bufSize,
+                                             GLsizei *length,
+                                             GLint *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLint * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetQueryObjectivRobustANGLE>(id, pname, bufSize, length,
+                                                                       params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjectivRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjectivRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
+                                               GLenum pname,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLint64 *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLint64 * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetQueryObjecti64vRobustANGLE>(id, pname, bufSize, length,
+                                                                         params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjecti64vRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjecti64vRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLuint64 *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLuint64 * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetQueryObjectui64vRobustANGLE>(id, pname, bufSize,
+                                                                          length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjectui64vRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjectui64vRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
 // GL_ANGLE_translated_shader_source
 void GL_APIENTRY GetTranslatedShaderSourceANGLE(GLuint shader,
                                                 GLsizei bufsize,
                                                 GLsizei *length,
                                                 GLchar *source)
 {
     EVENT(
         "(GLuint shader = %u, GLsizei bufsize = %d, GLsizei *length = 0x%0.8p, GLchar *source = "
@@ -166,16 +1949,703 @@ void GL_APIENTRY GetTranslatedShaderSour
         if (context->skipValidation() ||
             ValidateGetTranslatedShaderSourceANGLE(context, shader, bufsize, length, source))
         {
             context->getTranslatedShaderSource(shader, bufsize, length, source);
         }
     }
 }
 
+// GL_CHROMIUM_bind_uniform_location
+void GL_APIENTRY BindUniformLocationCHROMIUM(GLuint program, GLint location, const GLchar *name)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, const GLchar* name = 0x%0.8p)", program,
+          location, name);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::BindUniformLocationCHROMIUM>(program, location, name);
+
+        if (context->skipValidation() ||
+            ValidateBindUniformLocationCHROMIUM(context, program, location, name))
+        {
+            context->bindUniformLocation(program, location, name);
+        }
+    }
+}
+
+// GL_CHROMIUM_copy_compressed_texture
+void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
+{
+    EVENT("(GLuint sourceId = %u, GLuint destId = %u)", sourceId, destId);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::CompressedCopyTextureCHROMIUM>(sourceId, destId);
+
+        if (context->skipValidation() ||
+            ValidateCompressedCopyTextureCHROMIUM(context, sourceId, destId))
+        {
+            context->compressedCopyTexture(sourceId, destId);
+        }
+    }
+}
+
+// GL_CHROMIUM_copy_texture
+void GL_APIENTRY CopyTextureCHROMIUM(GLuint sourceId,
+                                     GLint sourceLevel,
+                                     GLenum destTarget,
+                                     GLuint destId,
+                                     GLint destLevel,
+                                     GLint internalFormat,
+                                     GLenum destType,
+                                     GLboolean unpackFlipY,
+                                     GLboolean unpackPremultiplyAlpha,
+                                     GLboolean unpackUnmultiplyAlpha)
+{
+    EVENT(
+        "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
+        "%u, GLint destLevel = %d, GLint internalFormat = %d, GLenum destType = 0x%X, GLboolean "
+        "unpackFlipY = %u, GLboolean unpackPremultiplyAlpha = %u, GLboolean unpackUnmultiplyAlpha "
+        "= %u)",
+        sourceId, sourceLevel, destTarget, destId, destLevel, internalFormat, destType, unpackFlipY,
+        unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget destTargetPacked = FromGLenum<TextureTarget>(destTarget);
+        context->gatherParams<EntryPoint::CopyTextureCHROMIUM>(
+            sourceId, sourceLevel, destTargetPacked, destId, destLevel, internalFormat, destType,
+            unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+        if (context->skipValidation() ||
+            ValidateCopyTextureCHROMIUM(context, sourceId, sourceLevel, destTargetPacked, destId,
+                                        destLevel, internalFormat, destType, unpackFlipY,
+                                        unpackPremultiplyAlpha, unpackUnmultiplyAlpha))
+        {
+            context->copyTexture(sourceId, sourceLevel, destTargetPacked, destId, destLevel,
+                                 internalFormat, destType, unpackFlipY, unpackPremultiplyAlpha,
+                                 unpackUnmultiplyAlpha);
+        }
+    }
+}
+
+void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
+                                        GLint sourceLevel,
+                                        GLenum destTarget,
+                                        GLuint destId,
+                                        GLint destLevel,
+                                        GLint xoffset,
+                                        GLint yoffset,
+                                        GLint x,
+                                        GLint y,
+                                        GLint width,
+                                        GLint height,
+                                        GLboolean unpackFlipY,
+                                        GLboolean unpackPremultiplyAlpha,
+                                        GLboolean unpackUnmultiplyAlpha)
+{
+    EVENT(
+        "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
+        "%u, GLint destLevel = %d, GLint xoffset = %d, GLint yoffset = %d, GLint x = %d, GLint y = "
+        "%d, GLint width = %d, GLint height = %d, GLboolean unpackFlipY = %u, GLboolean "
+        "unpackPremultiplyAlpha = %u, GLboolean unpackUnmultiplyAlpha = %u)",
+        sourceId, sourceLevel, destTarget, destId, destLevel, xoffset, yoffset, x, y, width, height,
+        unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        TextureTarget destTargetPacked = FromGLenum<TextureTarget>(destTarget);
+        context->gatherParams<EntryPoint::CopySubTextureCHROMIUM>(
+            sourceId, sourceLevel, destTargetPacked, destId, destLevel, xoffset, yoffset, x, y,
+            width, height, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+        if (context->skipValidation() ||
+            ValidateCopySubTextureCHROMIUM(context, sourceId, sourceLevel, destTargetPacked, destId,
+                                           destLevel, xoffset, yoffset, x, y, width, height,
+                                           unpackFlipY, unpackPremultiplyAlpha,
+                                           unpackUnmultiplyAlpha))
+        {
+            context->copySubTexture(sourceId, sourceLevel, destTargetPacked, destId, destLevel,
+                                    xoffset, yoffset, x, y, width, height, unpackFlipY,
+                                    unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+        }
+    }
+}
+
+// GL_CHROMIUM_framebuffer_mixed_samples
+void GL_APIENTRY CoverageModulationCHROMIUM(GLenum components)
+{
+    EVENT("(GLenum components = 0x%X)", components);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::CoverageModulationCHROMIUM>(components);
+
+        if (context->skipValidation() || ValidateCoverageModulationCHROMIUM(context, components))
+        {
+            context->coverageModulation(components);
+        }
+    }
+}
+
+void GL_APIENTRY MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix)
+{
+    EVENT("(GLenum matrixMode = 0x%X, const GLfloat * matrix = 0x%0.8p)", matrixMode, matrix);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::MatrixLoadfCHROMIUM>(matrixMode, matrix);
+
+        if (context->skipValidation() || ValidateMatrixLoadfCHROMIUM(context, matrixMode, matrix))
+        {
+            context->matrixLoadf(matrixMode, matrix);
+        }
+    }
+}
+
+void GL_APIENTRY MatrixLoadIdentityCHROMIUM(GLenum matrixMode)
+{
+    EVENT("(GLenum matrixMode = 0x%X)", matrixMode);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::MatrixLoadIdentityCHROMIUM>(matrixMode);
+
+        if (context->skipValidation() || ValidateMatrixLoadIdentityCHROMIUM(context, matrixMode))
+        {
+            context->matrixLoadIdentity(matrixMode);
+        }
+    }
+}
+
+// GL_CHROMIUM_path_rendering
+GLuint GL_APIENTRY GenPathsCHROMIUM(GLsizei range)
+{
+    EVENT("(GLsizei range = %d)", range);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GenPathsCHROMIUM>(range);
+
+        if (context->skipValidation() || ValidateGenPathsCHROMIUM(context, range))
+        {
+            return context->genPaths(range);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GenPathsCHROMIUM, GLuint>();
+}
+
+void GL_APIENTRY DeletePathsCHROMIUM(GLuint first, GLsizei range)
+{
+    EVENT("(GLuint first = %u, GLsizei range = %d)", first, range);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::DeletePathsCHROMIUM>(first, range);
+
+        if (context->skipValidation() || ValidateDeletePathsCHROMIUM(context, first, range))
+        {
+            context->deletePaths(first, range);
+        }
+    }
+}
+
+GLboolean GL_APIENTRY IsPathCHROMIUM(GLuint path)
+{
+    EVENT("(GLuint path = %u)", path);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::IsPathCHROMIUM>(path);
+
+        if (context->skipValidation() || ValidateIsPathCHROMIUM(context, path))
+        {
+            return context->isPath(path);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsPathCHROMIUM, GLboolean>();
+}
+
+void GL_APIENTRY PathCommandsCHROMIUM(GLuint path,
+                                      GLsizei numCommands,
+                                      const GLubyte *commands,
+                                      GLsizei numCoords,
+                                      GLenum coordType,
+                                      const void *coords)
+{
+    EVENT(
+        "(GLuint path = %u, GLsizei numCommands = %d, const GLubyte * commands = 0x%0.8p, GLsizei "
+        "numCoords = %d, GLenum coordType = 0x%X, const void* coords = 0x%0.8p)",
+        path, numCommands, commands, numCoords, coordType, coords);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::PathCommandsCHROMIUM>(path, numCommands, commands,
+                                                                numCoords, coordType, coords);
+
+        if (context->skipValidation() ||
+            ValidatePathCommandsCHROMIUM(context, path, numCommands, commands, numCoords, coordType,
+                                         coords))
+        {
+            context->pathCommands(path, numCommands, commands, numCoords, coordType, coords);
+        }
+    }
+}
+
+void GL_APIENTRY PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLfloat value = %f)", path, pname, value);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::PathParameterfCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidatePathParameterfCHROMIUM(context, path, pname, value))
+        {
+            context->pathParameterf(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLint value = %d)", path, pname, value);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::PathParameteriCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidatePathParameteriCHROMIUM(context, path, pname, value))
+        {
+            context->pathParameteri(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY GetPathParameterfvCHROMIUM(GLuint path, GLenum pname, GLfloat *value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLfloat * value = 0x%0.8p)", path, pname, value);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetPathParameterfvCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidateGetPathParameterfvCHROMIUM(context, path, pname, value))
+        {
+            context->getPathParameterfv(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY GetPathParameterivCHROMIUM(GLuint path, GLenum pname, GLint *value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLint * value = 0x%0.8p)", path, pname, value);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::GetPathParameterivCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidateGetPathParameterivCHROMIUM(context, path, pname, value))
+        {
+            context->getPathParameteriv(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask)
+{
+    EVENT("(GLenum func = 0x%X, GLint ref = %d, GLuint mask = %u)", func, ref, mask);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::PathStencilFuncCHROMIUM>(func, ref, mask);
+
+        if (context->skipValidation() || ValidatePathStencilFuncCHROMIUM(context, func, ref, mask))
+        {
+            context->pathStencilFunc(func, ref, mask);
+        }
+    }
+}
+
+void GL_APIENTRY StencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask)
+{
+    EVENT("(GLuint path = %u, GLenum fillMode = 0x%X, GLuint mask = %u)", path, fillMode, mask);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilFillPathCHROMIUM>(path, fillMode, mask);
+
+        if (context->skipValidation() ||
+            ValidateStencilFillPathCHROMIUM(context, path, fillMode, mask))
+        {
+            context->stencilFillPath(path, fillMode, mask);
+        }
+    }
+}
+
+void GL_APIENTRY StencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask)
+{
+    EVENT("(GLuint path = %u, GLint reference = %d, GLuint mask = %u)", path, reference, mask);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilStrokePathCHROMIUM>(path, reference, mask);
+
+        if (context->skipValidation() ||
+            ValidateStencilStrokePathCHROMIUM(context, path, reference, mask))
+        {
+            context->stencilStrokePath(path, reference, mask);
+        }
+    }
+}
+
+void GL_APIENTRY CoverFillPathCHROMIUM(GLuint path, GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLenum coverMode = 0x%X)", path, coverMode);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::CoverFillPathCHROMIUM>(path, coverMode);
+
+        if (context->skipValidation() || ValidateCoverFillPathCHROMIUM(context, path, coverMode))
+        {
+            context->coverFillPath(path, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLenum coverMode = 0x%X)", path, coverMode);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::CoverStrokePathCHROMIUM>(path, coverMode);
+
+        if (context->skipValidation() || ValidateCoverStrokePathCHROMIUM(context, path, coverMode))
+        {
+            context->coverStrokePath(path, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY StencilThenCoverFillPathCHROMIUM(GLuint path,
+                                                  GLenum fillMode,
+                                                  GLuint mask,
+                                                  GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLenum fillMode = 0x%X, GLuint mask = %u, GLenum coverMode = 0x%X)",
+          path, fillMode, mask, coverMode);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilThenCoverFillPathCHROMIUM>(path, fillMode, mask,
+                                                                            coverMode);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverFillPathCHROMIUM(context, path, fillMode, mask, coverMode))
+        {
+            context->stencilThenCoverFillPath(path, fillMode, mask, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY StencilThenCoverStrokePathCHROMIUM(GLuint path,
+                                                    GLint reference,
+                                                    GLuint mask,
+                                                    GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLint reference = %d, GLuint mask = %u, GLenum coverMode = 0x%X)",
+          path, reference, mask, coverMode);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilThenCoverStrokePathCHROMIUM>(path, reference, mask,
+                                                                              coverMode);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverStrokePathCHROMIUM(context, path, reference, mask, coverMode))
+        {
+            context->stencilThenCoverStrokePath(path, reference, mask, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY CoverFillPathInstancedCHROMIUM(GLsizei numPath,
+                                                GLenum pathNameType,
+                                                const void *paths,
+                                                GLuint pathBase,
+                                                GLenum coverMode,
+                                                GLenum transformType,
+                                                const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPath = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum coverMode = 0x%X, GLenum transformType = 0x%X, const GLfloat * "
+        "transformValues = 0x%0.8p)",
+        numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::CoverFillPathInstancedCHROMIUM>(
+            numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+        if (context->skipValidation() ||
+            ValidateCoverFillPathInstancedCHROMIUM(context, numPath, pathNameType, paths, pathBase,
+                                                   coverMode, transformType, transformValues))
+        {
+            context->coverFillPathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
+                                            transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY CoverStrokePathInstancedCHROMIUM(GLsizei numPath,
+                                                  GLenum pathNameType,
+                                                  const void *paths,
+                                                  GLuint pathBase,
+                                                  GLenum coverMode,
+                                                  GLenum transformType,
+                                                  const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPath = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum coverMode = 0x%X, GLenum transformType = 0x%X, const GLfloat * "
+        "transformValues = 0x%0.8p)",
+        numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::CoverStrokePathInstancedCHROMIUM>(
+            numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+        if (context->skipValidation() || ValidateCoverStrokePathInstancedCHROMIUM(
+                                             context, numPath, pathNameType, paths, pathBase,
+                                             coverMode, transformType, transformValues))
+        {
+            context->coverStrokePathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
+                                              transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY StencilStrokePathInstancedCHROMIUM(GLsizei numPath,
+                                                    GLenum pathNameType,
+                                                    const void *paths,
+                                                    GLuint pathBase,
+                                                    GLint reference,
+                                                    GLuint mask,
+                                                    GLenum transformType,
+                                                    const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPath = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLint reference = %d, GLuint mask = %u, GLenum transformType = 0x%X, const "
+        "GLfloat * transformValues = 0x%0.8p)",
+        numPath, pathNameType, paths, pathBase, reference, mask, transformType, transformValues);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilStrokePathInstancedCHROMIUM>(
+            numPath, pathNameType, paths, pathBase, reference, mask, transformType,
+            transformValues);
+
+        if (context->skipValidation() || ValidateStencilStrokePathInstancedCHROMIUM(
+                                             context, numPath, pathNameType, paths, pathBase,
+                                             reference, mask, transformType, transformValues))
+        {
+            context->stencilStrokePathInstanced(numPath, pathNameType, paths, pathBase, reference,
+                                                mask, transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
+                                                  GLenum pathNameType,
+                                                  const void *paths,
+                                                  GLuint pathBase,
+                                                  GLenum fillMode,
+                                                  GLuint mask,
+                                                  GLenum transformType,
+                                                  const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPaths = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum fillMode = 0x%X, GLuint mask = %u, GLenum transformType = 0x%X, "
+        "const GLfloat * transformValues = 0x%0.8p)",
+        numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilFillPathInstancedCHROMIUM>(
+            numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType,
+            transformValues);
+
+        if (context->skipValidation() || ValidateStencilFillPathInstancedCHROMIUM(
+                                             context, numPaths, pathNameType, paths, pathBase,
+                                             fillMode, mask, transformType, transformValues))
+        {
+            context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBase, fillMode,
+                                              mask, transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY StencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+                                                           GLenum pathNameType,
+                                                           const void *paths,
+                                                           GLuint pathBase,
+                                                           GLenum fillMode,
+                                                           GLuint mask,
+                                                           GLenum coverMode,
+                                                           GLenum transformType,
+                                                           const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPaths = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum fillMode = 0x%X, GLuint mask = %u, GLenum coverMode = 0x%X, GLenum "
+        "transformType = 0x%X, const GLfloat * transformValues = 0x%0.8p)",
+        numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType,
+        transformValues);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilThenCoverFillPathInstancedCHROMIUM>(
+            numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType,
+            transformValues);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverFillPathInstancedCHROMIUM(
+                context, numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode,
+                transformType, transformValues))
+        {
+            context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths, pathBase,
+                                                       fillMode, mask, coverMode, transformType,
+                                                       transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY StencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+                                                             GLenum pathNameType,
+                                                             const void *paths,
+                                                             GLuint pathBase,
+                                                             GLint reference,
+                                                             GLuint mask,
+                                                             GLenum coverMode,
+                                                             GLenum transformType,
+                                                             const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPaths = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLint reference = %d, GLuint mask = %u, GLenum coverMode = 0x%X, GLenum "
+        "transformType = 0x%X, const GLfloat * transformValues = 0x%0.8p)",
+        numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType,
+        transformValues);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::StencilThenCoverStrokePathInstancedCHROMIUM>(
+            numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType,
+            transformValues);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverStrokePathInstancedCHROMIUM(
+                context, numPaths, pathNameType, paths, pathBase, reference, mask, coverMode,
+                transformType, transformValues))
+        {
+            context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
+                                                         reference, mask, coverMode, transformType,
+                                                         transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY BindFragmentInputLocationCHROMIUM(GLuint programs,
+                                                   GLint location,
+                                                   const GLchar *name)
+{
+    EVENT("(GLuint programs = %u, GLint location = %d, const GLchar * name = 0x%0.8p)", programs,
+          location, name);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::BindFragmentInputLocationCHROMIUM>(programs, location,
+                                                                             name);
+
+        if (context->skipValidation() ||
+            ValidateBindFragmentInputLocationCHROMIUM(context, programs, location, name))
+        {
+            context->bindFragmentInputLocation(programs, location, name);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramPathFragmentInputGenCHROMIUM(GLuint program,
+                                                     GLint location,
+                                                     GLenum genMode,
+                                                     GLint components,
+                                                     const GLfloat *coeffs)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLenum genMode = 0x%X, GLint components = %d, "
+        "const GLfloat * coeffs = 0x%0.8p)",
+        program, location, genMode, components, coeffs);
+
+    Context *context = GetValidGlobalContext();
+    if (context)
+    {
+        context->gatherParams<EntryPoint::ProgramPathFragmentInputGenCHROMIUM>(
+            program, location, genMode, components, coeffs);
+
+        if (context->skipValidation() ||
+            ValidateProgramPathFragmentInputGenCHROMIUM(context, program, location, genMode,
+                                                        components, coeffs))
+        {
+            context->programPathFragmentInputGen(program, location, genMode, components, coeffs);
+        }
+    }
+}
+
 // GL_EXT_debug_marker
 void GL_APIENTRY InsertEventMarkerEXT(GLsizei length, const GLchar *marker)
 {
     // Don't run an EVENT() macro on the EXT_debug_marker entry points.
     // It can interfere with the debug events being set by the caller.
     // EVENT("(GLsizei length = %d, const GLchar *marker = 0x%0.8p)", length, marker);
 
     Context *context = GetValidGlobalContext();
@@ -252,21 +2722,22 @@ void GL_APIENTRY DiscardFramebufferEXT(G
 // GL_EXT_disjoint_timer_query
 void GL_APIENTRY BeginQueryEXT(GLenum target, GLuint id)
 {
     EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::BeginQueryEXT>(target, id);
-
-        if (context->skipValidation() || ValidateBeginQueryEXT(context, target, id))
-        {
-            context->beginQuery(target, id);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::BeginQueryEXT>(targetPacked, id);
+
+        if (context->skipValidation() || ValidateBeginQueryEXT(context, targetPacked, id))
+        {
+            context->beginQuery(targetPacked, id);
         }
     }
 }
 
 void GL_APIENTRY DeleteQueriesEXT(GLsizei n, const GLuint *ids)
 {
     EVENT("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);
 
@@ -284,21 +2755,22 @@ void GL_APIENTRY DeleteQueriesEXT(GLsize
 
 void GL_APIENTRY EndQueryEXT(GLenum target)
 {
     EVENT("(GLenum target = 0x%X)", target);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::EndQueryEXT>(target);
-
-        if (context->skipValidation() || ValidateEndQueryEXT(context, target))
-        {
-            context->endQuery(target);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::EndQueryEXT>(targetPacked);
+
+        if (context->skipValidation() || ValidateEndQueryEXT(context, targetPacked))
+        {
+            context->endQuery(targetPacked);
         }
     }
 }
 
 void GL_APIENTRY GenQueriesEXT(GLsizei n, GLuint *ids)
 {
     EVENT("(GLsizei n = %d, GLuint *ids = 0x%0.8p)", n, ids);
 
@@ -381,21 +2853,23 @@ void GL_APIENTRY GetQueryObjectuivEXT(GL
 void GL_APIENTRY GetQueryivEXT(GLenum target, GLenum pname, GLint *params)
 {
     EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
           params);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::GetQueryivEXT>(target, pname, params);
-
-        if (context->skipValidation() || ValidateGetQueryivEXT(context, target, pname, params))
-        {
-            context->getQueryiv(target, pname, params);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryivEXT>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryivEXT(context, targetPacked, pname, params))
+        {
+            context->getQueryiv(targetPacked, pname, params);
         }
     }
 }
 
 GLboolean GL_APIENTRY IsQueryEXT(GLuint id)
 {
     EVENT("(GLuint id = %u)", id);
 
@@ -415,21 +2889,22 @@ GLboolean GL_APIENTRY IsQueryEXT(GLuint 
 
 void GL_APIENTRY QueryCounterEXT(GLuint id, GLenum target)
 {
     EVENT("(GLuint id = %u, GLenum target = 0x%X)", id, target);
 
     Context *context = GetValidGlobalContext();
     if (context)
     {
-        context->gatherParams<EntryPoint::QueryCounterEXT>(id, target);
-
-        if (context->skipValidation() || ValidateQueryCounterEXT(context, id, target))
-        {
-            context->queryCounter(id, target);
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::QueryCounterEXT>(id, targetPacked);
+
+        if (context->skipValidation() || ValidateQueryCounterEXT(context, id, targetPacked))
+        {
+            context->queryCounter(id, targetPacked);
         }
     }
 }
 
 // GL_EXT_draw_buffers
 void GL_APIENTRY DrawBuffersEXT(GLsizei n, const GLenum *bufs)
 {
     EVENT("(GLsizei n = %d, const GLenum *bufs = 0x%0.8p)", n, bufs);
@@ -1912,9 +4387,13274 @@ GLboolean GL_APIENTRY IsVertexArrayOES(G
         if (context->skipValidation() || ValidateIsVertexArrayOES(context, array))
         {
             return context->isVertexArray(array);
         }
     }
 
     return GetDefaultReturnValue<EntryPoint::IsVertexArrayOES, GLboolean>();
 }
+
+// EGL_ANGLE_explicit_context
+void GL_APIENTRY ActiveShaderProgramContextANGLE(GLeglContext ctx, GLuint pipeline, GLuint program)
+{
+    EVENT("(GLuint pipeline = %u, GLuint program = %u)", pipeline, program);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ActiveShaderProgram>(pipeline, program);
+
+        if (context->skipValidation() || ValidateActiveShaderProgram(context, pipeline, program))
+        {
+            context->activeShaderProgram(pipeline, program);
+        }
+    }
+}
+
+void GL_APIENTRY ActiveTextureContextANGLE(GLeglContext ctx, GLenum texture)
+{
+    EVENT("(GLenum texture = 0x%X)", texture);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ActiveTexture>(texture);
+
+        if (context->skipValidation() || ValidateActiveTexture(context, texture))
+        {
+            context->activeTexture(texture);
+        }
+    }
+}
+
+void GL_APIENTRY AlphaFuncContextANGLE(GLeglContext ctx, GLenum func, GLfloat ref)
+{
+    EVENT("(GLenum func = 0x%X, GLfloat ref = %f)", func, ref);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        AlphaTestFunc funcPacked = FromGLenum<AlphaTestFunc>(func);
+        context->gatherParams<EntryPoint::AlphaFunc>(funcPacked, ref);
+
+        if (context->skipValidation() || ValidateAlphaFunc(context, funcPacked, ref))
+        {
+            context->alphaFunc(funcPacked, ref);
+        }
+    }
+}
+
+void GL_APIENTRY AlphaFuncxContextANGLE(GLeglContext ctx, GLenum func, GLfixed ref)
+{
+    EVENT("(GLenum func = 0x%X, GLfixed ref = 0x%X)", func, ref);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        AlphaTestFunc funcPacked = FromGLenum<AlphaTestFunc>(func);
+        context->gatherParams<EntryPoint::AlphaFuncx>(funcPacked, ref);
+
+        if (context->skipValidation() || ValidateAlphaFuncx(context, funcPacked, ref))
+        {
+            context->alphaFuncx(funcPacked, ref);
+        }
+    }
+}
+
+void GL_APIENTRY AttachShaderContextANGLE(GLeglContext ctx, GLuint program, GLuint shader)
+{
+    EVENT("(GLuint program = %u, GLuint shader = %u)", program, shader);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::AttachShader>(program, shader);
+
+        if (context->skipValidation() || ValidateAttachShader(context, program, shader))
+        {
+            context->attachShader(program, shader);
+        }
+    }
+}
+
+void GL_APIENTRY BeginQueryContextANGLE(GLeglContext ctx, GLenum target, GLuint id)
+{
+    EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::BeginQuery>(targetPacked, id);
+
+        if (context->skipValidation() || ValidateBeginQuery(context, targetPacked, id))
+        {
+            context->beginQuery(targetPacked, id);
+        }
+    }
+}
+
+void GL_APIENTRY BeginQueryEXTContextANGLE(GLeglContext ctx, GLenum target, GLuint id)
+{
+    EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::BeginQueryEXT>(targetPacked, id);
+
+        if (context->skipValidation() || ValidateBeginQueryEXT(context, targetPacked, id))
+        {
+            context->beginQuery(targetPacked, id);
+        }
+    }
+}
+
+void GL_APIENTRY BeginTransformFeedbackContextANGLE(GLeglContext ctx, GLenum primitiveMode)
+{
+    EVENT("(GLenum primitiveMode = 0x%X)", primitiveMode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BeginTransformFeedback>(primitiveMode);
+
+        if (context->skipValidation() || ValidateBeginTransformFeedback(context, primitiveMode))
+        {
+            context->beginTransformFeedback(primitiveMode);
+        }
+    }
+}
+
+void GL_APIENTRY BindAttribLocationContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLuint index,
+                                                const GLchar *name)
+{
+    EVENT("(GLuint program = %u, GLuint index = %u, const GLchar *name = 0x%0.8p)", program, index,
+          name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindAttribLocation>(program, index, name);
+
+        if (context->skipValidation() || ValidateBindAttribLocation(context, program, index, name))
+        {
+            context->bindAttribLocation(program, index, name);
+        }
+    }
+}
+
+void GL_APIENTRY BindBufferContextANGLE(GLeglContext ctx, GLenum target, GLuint buffer)
+{
+    EVENT("(GLenum target = 0x%X, GLuint buffer = %u)", target, buffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::BindBuffer>(targetPacked, buffer);
+
+        if (context->skipValidation() || ValidateBindBuffer(context, targetPacked, buffer))
+        {
+            context->bindBuffer(targetPacked, buffer);
+        }
+    }
+}
+
+void GL_APIENTRY BindBufferBaseContextANGLE(GLeglContext ctx,
+                                            GLenum target,
+                                            GLuint index,
+                                            GLuint buffer)
+{
+    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u)", target, index, buffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::BindBufferBase>(targetPacked, index, buffer);
+
+        if (context->skipValidation() ||
+            ValidateBindBufferBase(context, targetPacked, index, buffer))
+        {
+            context->bindBufferBase(targetPacked, index, buffer);
+        }
+    }
+}
+
+void GL_APIENTRY BindBufferRangeContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLuint index,
+                                             GLuint buffer,
+                                             GLintptr offset,
+                                             GLsizeiptr size)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u, GLintptr offset = %d, "
+        "GLsizeiptr size = %d)",
+        target, index, buffer, offset, size);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::BindBufferRange>(targetPacked, index, buffer, offset,
+                                                           size);
+
+        if (context->skipValidation() ||
+            ValidateBindBufferRange(context, targetPacked, index, buffer, offset, size))
+        {
+            context->bindBufferRange(targetPacked, index, buffer, offset, size);
+        }
+    }
+}
+
+void GL_APIENTRY BindFramebufferContextANGLE(GLeglContext ctx, GLenum target, GLuint framebuffer)
+{
+    EVENT("(GLenum target = 0x%X, GLuint framebuffer = %u)", target, framebuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindFramebuffer>(target, framebuffer);
+
+        if (context->skipValidation() || ValidateBindFramebuffer(context, target, framebuffer))
+        {
+            context->bindFramebuffer(target, framebuffer);
+        }
+    }
+}
+
+void GL_APIENTRY BindFramebufferOESContextANGLE(GLeglContext ctx, GLenum target, GLuint framebuffer)
+{
+    EVENT("(GLenum target = 0x%X, GLuint framebuffer = %u)", target, framebuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindFramebufferOES>(target, framebuffer);
+
+        if (context->skipValidation() || ValidateBindFramebufferOES(context, target, framebuffer))
+        {
+            context->bindFramebuffer(target, framebuffer);
+        }
+    }
+}
+
+void GL_APIENTRY BindImageTextureContextANGLE(GLeglContext ctx,
+                                              GLuint unit,
+                                              GLuint texture,
+                                              GLint level,
+                                              GLboolean layered,
+                                              GLint layer,
+                                              GLenum access,
+                                              GLenum format)
+{
+    EVENT(
+        "(GLuint unit = %u, GLuint texture = %u, GLint level = %d, GLboolean layered = %u, GLint "
+        "layer = %d, GLenum access = 0x%X, GLenum format = 0x%X)",
+        unit, texture, level, layered, layer, access, format);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindImageTexture>(unit, texture, level, layered, layer,
+                                                            access, format);
+
+        if (context->skipValidation() ||
+            ValidateBindImageTexture(context, unit, texture, level, layered, layer, access, format))
+        {
+            context->bindImageTexture(unit, texture, level, layered, layer, access, format);
+        }
+    }
+}
+
+void GL_APIENTRY BindProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline)
+{
+    EVENT("(GLuint pipeline = %u)", pipeline);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindProgramPipeline>(pipeline);
+
+        if (context->skipValidation() || ValidateBindProgramPipeline(context, pipeline))
+        {
+            context->bindProgramPipeline(pipeline);
+        }
+    }
+}
+
+void GL_APIENTRY BindRenderbufferContextANGLE(GLeglContext ctx, GLenum target, GLuint renderbuffer)
+{
+    EVENT("(GLenum target = 0x%X, GLuint renderbuffer = %u)", target, renderbuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindRenderbuffer>(target, renderbuffer);
+
+        if (context->skipValidation() || ValidateBindRenderbuffer(context, target, renderbuffer))
+        {
+            context->bindRenderbuffer(target, renderbuffer);
+        }
+    }
+}
+
+void GL_APIENTRY BindRenderbufferOESContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLuint renderbuffer)
+{
+    EVENT("(GLenum target = 0x%X, GLuint renderbuffer = %u)", target, renderbuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindRenderbufferOES>(target, renderbuffer);
+
+        if (context->skipValidation() || ValidateBindRenderbufferOES(context, target, renderbuffer))
+        {
+            context->bindRenderbuffer(target, renderbuffer);
+        }
+    }
+}
+
+void GL_APIENTRY BindSamplerContextANGLE(GLeglContext ctx, GLuint unit, GLuint sampler)
+{
+    EVENT("(GLuint unit = %u, GLuint sampler = %u)", unit, sampler);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindSampler>(unit, sampler);
+
+        if (context->skipValidation() || ValidateBindSampler(context, unit, sampler))
+        {
+            context->bindSampler(unit, sampler);
+        }
+    }
+}
+
+void GL_APIENTRY BindTextureContextANGLE(GLeglContext ctx, GLenum target, GLuint texture)
+{
+    EVENT("(GLenum target = 0x%X, GLuint texture = %u)", target, texture);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::BindTexture>(targetPacked, texture);
+
+        if (context->skipValidation() || ValidateBindTexture(context, targetPacked, texture))
+        {
+            context->bindTexture(targetPacked, texture);
+        }
+    }
+}
+
+void GL_APIENTRY BindTransformFeedbackContextANGLE(GLeglContext ctx, GLenum target, GLuint id)
+{
+    EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindTransformFeedback>(target, id);
+
+        if (context->skipValidation() || ValidateBindTransformFeedback(context, target, id))
+        {
+            context->bindTransformFeedback(target, id);
+        }
+    }
+}
+
+void GL_APIENTRY BindVertexArrayContextANGLE(GLeglContext ctx, GLuint array)
+{
+    EVENT("(GLuint array = %u)", array);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindVertexArray>(array);
+
+        if (context->skipValidation() || ValidateBindVertexArray(context, array))
+        {
+            context->bindVertexArray(array);
+        }
+    }
+}
+
+void GL_APIENTRY BindVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array)
+{
+    EVENT("(GLuint array = %u)", array);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindVertexArrayOES>(array);
+
+        if (context->skipValidation() || ValidateBindVertexArrayOES(context, array))
+        {
+            context->bindVertexArray(array);
+        }
+    }
+}
+
+void GL_APIENTRY BindVertexBufferContextANGLE(GLeglContext ctx,
+                                              GLuint bindingindex,
+                                              GLuint buffer,
+                                              GLintptr offset,
+                                              GLsizei stride)
+{
+    EVENT(
+        "(GLuint bindingindex = %u, GLuint buffer = %u, GLintptr offset = %d, GLsizei stride = %d)",
+        bindingindex, buffer, offset, stride);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindVertexBuffer>(bindingindex, buffer, offset, stride);
+
+        if (context->skipValidation() ||
+            ValidateBindVertexBuffer(context, bindingindex, buffer, offset, stride))
+        {
+            context->bindVertexBuffer(bindingindex, buffer, offset, stride);
+        }
+    }
+}
+
+void GL_APIENTRY
+BlendColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    EVENT("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f, GLfloat alpha = %f)", red,
+          green, blue, alpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BlendColor>(red, green, blue, alpha);
+
+        if (context->skipValidation() || ValidateBlendColor(context, red, green, blue, alpha))
+        {
+            context->blendColor(red, green, blue, alpha);
+        }
+    }
+}
+
+void GL_APIENTRY BlendEquationContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    EVENT("(GLenum mode = 0x%X)", mode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BlendEquation>(mode);
+
+        if (context->skipValidation() || ValidateBlendEquation(context, mode))
+        {
+            context->blendEquation(mode);
+        }
+    }
+}
+
+void GL_APIENTRY BlendEquationSeparateContextANGLE(GLeglContext ctx,
+                                                   GLenum modeRGB,
+                                                   GLenum modeAlpha)
+{
+    EVENT("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BlendEquationSeparate>(modeRGB, modeAlpha);
+
+        if (context->skipValidation() || ValidateBlendEquationSeparate(context, modeRGB, modeAlpha))
+        {
+            context->blendEquationSeparate(modeRGB, modeAlpha);
+        }
+    }
+}
+
+void GL_APIENTRY BlendFuncContextANGLE(GLeglContext ctx, GLenum sfactor, GLenum dfactor)
+{
+    EVENT("(GLenum sfactor = 0x%X, GLenum dfactor = 0x%X)", sfactor, dfactor);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BlendFunc>(sfactor, dfactor);
+
+        if (context->skipValidation() || ValidateBlendFunc(context, sfactor, dfactor))
+        {
+            context->blendFunc(sfactor, dfactor);
+        }
+    }
+}
+
+void GL_APIENTRY BlendFuncSeparateContextANGLE(GLeglContext ctx,
+                                               GLenum sfactorRGB,
+                                               GLenum dfactorRGB,
+                                               GLenum sfactorAlpha,
+                                               GLenum dfactorAlpha)
+{
+    EVENT(
+        "(GLenum sfactorRGB = 0x%X, GLenum dfactorRGB = 0x%X, GLenum sfactorAlpha = 0x%X, GLenum "
+        "dfactorAlpha = 0x%X)",
+        sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BlendFuncSeparate>(sfactorRGB, dfactorRGB, sfactorAlpha,
+                                                             dfactorAlpha);
+
+        if (context->skipValidation() ||
+            ValidateBlendFuncSeparate(context, sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha))
+        {
+            context->blendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
+        }
+    }
+}
+
+void GL_APIENTRY BlitFramebufferContextANGLE(GLeglContext ctx,
+                                             GLint srcX0,
+                                             GLint srcY0,
+                                             GLint srcX1,
+                                             GLint srcY1,
+                                             GLint dstX0,
+                                             GLint dstY0,
+                                             GLint dstX1,
+                                             GLint dstY1,
+                                             GLbitfield mask,
+                                             GLenum filter)
+{
+    EVENT(
+        "(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, GLint dstX0 = "
+        "%d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, GLbitfield mask = 0x%X, GLenum "
+        "filter = 0x%X)",
+        srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BlitFramebuffer>(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0,
+                                                           dstX1, dstY1, mask, filter);
+
+        if (context->skipValidation() ||
+            ValidateBlitFramebuffer(context, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
+                                    mask, filter))
+        {
+            context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
+                                     filter);
+        }
+    }
+}
+
+void GL_APIENTRY BlitFramebufferANGLEContextANGLE(GLeglContext ctx,
+                                                  GLint srcX0,
+                                                  GLint srcY0,
+                                                  GLint srcX1,
+                                                  GLint srcY1,
+                                                  GLint dstX0,
+                                                  GLint dstY0,
+                                                  GLint dstX1,
+                                                  GLint dstY1,
+                                                  GLbitfield mask,
+                                                  GLenum filter)
+{
+    EVENT(
+        "(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, GLint dstX0 = "
+        "%d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, GLbitfield mask = 0x%X, GLenum "
+        "filter = 0x%X)",
+        srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BlitFramebufferANGLE>(srcX0, srcY0, srcX1, srcY1, dstX0,
+                                                                dstY0, dstX1, dstY1, mask, filter);
+
+        if (context->skipValidation() ||
+            ValidateBlitFramebufferANGLE(context, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1,
+                                         dstY1, mask, filter))
+        {
+            context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
+                                     filter);
+        }
+    }
+}
+
+void GL_APIENTRY BufferDataContextANGLE(GLeglContext ctx,
+                                        GLenum target,
+                                        GLsizeiptr size,
+                                        const void *data,
+                                        GLenum usage)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizeiptr size = %d, const void *data = 0x%0.8p, GLenum usage = "
+        "0x%X)",
+        target, size, data, usage);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        BufferUsage usagePacked    = FromGLenum<BufferUsage>(usage);
+        context->gatherParams<EntryPoint::BufferData>(targetPacked, size, data, usagePacked);
+
+        if (context->skipValidation() ||
+            ValidateBufferData(context, targetPacked, size, data, usagePacked))
+        {
+            context->bufferData(targetPacked, size, data, usagePacked);
+        }
+    }
+}
+
+void GL_APIENTRY BufferSubDataContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLintptr offset,
+                                           GLsizeiptr size,
+                                           const void *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const void *data = "
+        "0x%0.8p)",
+        target, offset, size, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::BufferSubData>(targetPacked, offset, size, data);
+
+        if (context->skipValidation() ||
+            ValidateBufferSubData(context, targetPacked, offset, size, data))
+        {
+            context->bufferSubData(targetPacked, offset, size, data);
+        }
+    }
+}
+
+GLenum GL_APIENTRY CheckFramebufferStatusContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CheckFramebufferStatus>(target);
+
+        if (context->skipValidation() || ValidateCheckFramebufferStatus(context, target))
+        {
+            return context->checkFramebufferStatus(target);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::CheckFramebufferStatus, GLenum>();
+}
+
+GLenum GL_APIENTRY CheckFramebufferStatusOESContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CheckFramebufferStatusOES>(target);
+
+        if (context->skipValidation() || ValidateCheckFramebufferStatusOES(context, target))
+        {
+            return context->checkFramebufferStatus(target);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::CheckFramebufferStatusOES, GLenum>();
+}
+
+void GL_APIENTRY ClearContextANGLE(GLeglContext ctx, GLbitfield mask)
+{
+    EVENT("(GLbitfield mask = 0x%X)", mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Clear>(mask);
+
+        if (context->skipValidation() || ValidateClear(context, mask))
+        {
+            context->clear(mask);
+        }
+    }
+}
+
+void GL_APIENTRY ClearBufferfiContextANGLE(GLeglContext ctx,
+                                           GLenum buffer,
+                                           GLint drawbuffer,
+                                           GLfloat depth,
+                                           GLint stencil)
+{
+    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, GLfloat depth = %f, GLint stencil = %d)",
+          buffer, drawbuffer, depth, stencil);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearBufferfi>(buffer, drawbuffer, depth, stencil);
+
+        if (context->skipValidation() ||
+            ValidateClearBufferfi(context, buffer, drawbuffer, depth, stencil))
+        {
+            context->clearBufferfi(buffer, drawbuffer, depth, stencil);
+        }
+    }
+}
+
+void GL_APIENTRY ClearBufferfvContextANGLE(GLeglContext ctx,
+                                           GLenum buffer,
+                                           GLint drawbuffer,
+                                           const GLfloat *value)
+{
+    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLfloat *value = 0x%0.8p)", buffer,
+          drawbuffer, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearBufferfv>(buffer, drawbuffer, value);
+
+        if (context->skipValidation() || ValidateClearBufferfv(context, buffer, drawbuffer, value))
+        {
+            context->clearBufferfv(buffer, drawbuffer, value);
+        }
+    }
+}
+
+void GL_APIENTRY ClearBufferivContextANGLE(GLeglContext ctx,
+                                           GLenum buffer,
+                                           GLint drawbuffer,
+                                           const GLint *value)
+{
+    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLint *value = 0x%0.8p)", buffer,
+          drawbuffer, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearBufferiv>(buffer, drawbuffer, value);
+
+        if (context->skipValidation() || ValidateClearBufferiv(context, buffer, drawbuffer, value))
+        {
+            context->clearBufferiv(buffer, drawbuffer, value);
+        }
+    }
+}
+
+void GL_APIENTRY ClearBufferuivContextANGLE(GLeglContext ctx,
+                                            GLenum buffer,
+                                            GLint drawbuffer,
+                                            const GLuint *value)
+{
+    EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLuint *value = 0x%0.8p)", buffer,
+          drawbuffer, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearBufferuiv>(buffer, drawbuffer, value);
+
+        if (context->skipValidation() || ValidateClearBufferuiv(context, buffer, drawbuffer, value))
+        {
+            context->clearBufferuiv(buffer, drawbuffer, value);
+        }
+    }
+}
+
+void GL_APIENTRY
+ClearColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    EVENT("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f, GLfloat alpha = %f)", red,
+          green, blue, alpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearColor>(red, green, blue, alpha);
+
+        if (context->skipValidation() || ValidateClearColor(context, red, green, blue, alpha))
+        {
+            context->clearColor(red, green, blue, alpha);
+        }
+    }
+}
+
+void GL_APIENTRY
+ClearColorxContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+    EVENT("(GLfixed red = 0x%X, GLfixed green = 0x%X, GLfixed blue = 0x%X, GLfixed alpha = 0x%X)",
+          red, green, blue, alpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearColorx>(red, green, blue, alpha);
+
+        if (context->skipValidation() || ValidateClearColorx(context, red, green, blue, alpha))
+        {
+            context->clearColorx(red, green, blue, alpha);
+        }
+    }
+}
+
+void GL_APIENTRY ClearDepthfContextANGLE(GLeglContext ctx, GLfloat d)
+{
+    EVENT("(GLfloat d = %f)", d);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearDepthf>(d);
+
+        if (context->skipValidation() || ValidateClearDepthf(context, d))
+        {
+            context->clearDepthf(d);
+        }
+    }
+}
+
+void GL_APIENTRY ClearDepthxContextANGLE(GLeglContext ctx, GLfixed depth)
+{
+    EVENT("(GLfixed depth = 0x%X)", depth);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearDepthx>(depth);
+
+        if (context->skipValidation() || ValidateClearDepthx(context, depth))
+        {
+            context->clearDepthx(depth);
+        }
+    }
+}
+
+void GL_APIENTRY ClearStencilContextANGLE(GLeglContext ctx, GLint s)
+{
+    EVENT("(GLint s = %d)", s);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClearStencil>(s);
+
+        if (context->skipValidation() || ValidateClearStencil(context, s))
+        {
+            context->clearStencil(s);
+        }
+    }
+}
+
+void GL_APIENTRY ClientActiveTextureContextANGLE(GLeglContext ctx, GLenum texture)
+{
+    EVENT("(GLenum texture = 0x%X)", texture);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClientActiveTexture>(texture);
+
+        if (context->skipValidation() || ValidateClientActiveTexture(context, texture))
+        {
+            context->clientActiveTexture(texture);
+        }
+    }
+}
+
+GLenum GL_APIENTRY ClientWaitSyncContextANGLE(GLeglContext ctx,
+                                              GLsync sync,
+                                              GLbitfield flags,
+                                              GLuint64 timeout)
+{
+    EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)", sync, flags,
+          timeout);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClientWaitSync>(sync, flags, timeout);
+
+        if (context->skipValidation() || ValidateClientWaitSync(context, sync, flags, timeout))
+        {
+            return context->clientWaitSync(sync, flags, timeout);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::ClientWaitSync, GLenum>();
+}
+
+void GL_APIENTRY ClipPlanefContextANGLE(GLeglContext ctx, GLenum p, const GLfloat *eqn)
+{
+    EVENT("(GLenum p = 0x%X, const GLfloat *eqn = 0x%0.8p)", p, eqn);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClipPlanef>(p, eqn);
+
+        if (context->skipValidation() || ValidateClipPlanef(context, p, eqn))
+        {
+            context->clipPlanef(p, eqn);
+        }
+    }
+}
+
+void GL_APIENTRY ClipPlanexContextANGLE(GLeglContext ctx, GLenum plane, const GLfixed *equation)
+{
+    EVENT("(GLenum plane = 0x%X, const GLfixed *equation = 0x%0.8p)", plane, equation);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ClipPlanex>(plane, equation);
+
+        if (context->skipValidation() || ValidateClipPlanex(context, plane, equation))
+        {
+            context->clipPlanex(plane, equation);
+        }
+    }
+}
+
+void GL_APIENTRY
+Color4fContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    EVENT("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f, GLfloat alpha = %f)", red,
+          green, blue, alpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Color4f>(red, green, blue, alpha);
+
+        if (context->skipValidation() || ValidateColor4f(context, red, green, blue, alpha))
+        {
+            context->color4f(red, green, blue, alpha);
+        }
+    }
+}
+
+void GL_APIENTRY
+Color4ubContextANGLE(GLeglContext ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+{
+    EVENT("(GLubyte red = %d, GLubyte green = %d, GLubyte blue = %d, GLubyte alpha = %d)", red,
+          green, blue, alpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Color4ub>(red, green, blue, alpha);
+
+        if (context->skipValidation() || ValidateColor4ub(context, red, green, blue, alpha))
+        {
+            context->color4ub(red, green, blue, alpha);
+        }
+    }
+}
+
+void GL_APIENTRY
+Color4xContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+    EVENT("(GLfixed red = 0x%X, GLfixed green = 0x%X, GLfixed blue = 0x%X, GLfixed alpha = 0x%X)",
+          red, green, blue, alpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Color4x>(red, green, blue, alpha);
+
+        if (context->skipValidation() || ValidateColor4x(context, red, green, blue, alpha))
+        {
+            context->color4x(red, green, blue, alpha);
+        }
+    }
+}
+
+void GL_APIENTRY ColorMaskContextANGLE(GLeglContext ctx,
+                                       GLboolean red,
+                                       GLboolean green,
+                                       GLboolean blue,
+                                       GLboolean alpha)
+{
+    EVENT("(GLboolean red = %u, GLboolean green = %u, GLboolean blue = %u, GLboolean alpha = %u)",
+          red, green, blue, alpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ColorMask>(red, green, blue, alpha);
+
+        if (context->skipValidation() || ValidateColorMask(context, red, green, blue, alpha))
+        {
+            context->colorMask(red, green, blue, alpha);
+        }
+    }
+}
+
+void GL_APIENTRY ColorPointerContextANGLE(GLeglContext ctx,
+                                          GLint size,
+                                          GLenum type,
+                                          GLsizei stride,
+                                          const void *pointer)
+{
+    EVENT(
+        "(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const void *pointer = 0x%0.8p)",
+        size, type, stride, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ColorPointer>(size, type, stride, pointer);
+
+        if (context->skipValidation() || ValidateColorPointer(context, size, type, stride, pointer))
+        {
+            context->colorPointer(size, type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY CompileShaderContextANGLE(GLeglContext ctx, GLuint shader)
+{
+    EVENT("(GLuint shader = %u)", shader);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CompileShader>(shader);
+
+        if (context->skipValidation() || ValidateCompileShader(context, shader))
+        {
+            context->compileShader(shader);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexImage2DContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLint level,
+                                                  GLenum internalformat,
+                                                  GLsizei width,
+                                                  GLsizei height,
+                                                  GLint border,
+                                                  GLsizei imageSize,
+                                                  const void *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const void *data = "
+        "0x%0.8p)",
+        target, level, internalformat, width, height, border, imageSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CompressedTexImage2D>(
+            targetPacked, level, internalformat, width, height, border, imageSize, data);
+
+        if (context->skipValidation() ||
+            ValidateCompressedTexImage2D(context, targetPacked, level, internalformat, width,
+                                         height, border, imageSize, data))
+        {
+            context->compressedTexImage2D(targetPacked, level, internalformat, width, height,
+                                          border, imageSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexImage3DContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLint level,
+                                                  GLenum internalformat,
+                                                  GLsizei width,
+                                                  GLsizei height,
+                                                  GLsizei depth,
+                                                  GLint border,
+                                                  GLsizei imageSize,
+                                                  const void *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
+        "const void *data = 0x%0.8p)",
+        target, level, internalformat, width, height, depth, border, imageSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::CompressedTexImage3D>(
+            targetPacked, level, internalformat, width, height, depth, border, imageSize, data);
+
+        if (context->skipValidation() ||
+            ValidateCompressedTexImage3D(context, targetPacked, level, internalformat, width,
+                                         height, depth, border, imageSize, data))
+        {
+            context->compressedTexImage3D(targetPacked, level, internalformat, width, height, depth,
+                                          border, imageSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexSubImage2DContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLint level,
+                                                     GLint xoffset,
+                                                     GLint yoffset,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLenum format,
+                                                     GLsizei imageSize,
+                                                     const void *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLsizei "
+        "width = %d, GLsizei height = %d, GLenum format = 0x%X, GLsizei imageSize = %d, const void "
+        "*data = 0x%0.8p)",
+        target, level, xoffset, yoffset, width, height, format, imageSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CompressedTexSubImage2D>(
+            targetPacked, level, xoffset, yoffset, width, height, format, imageSize, data);
+
+        if (context->skipValidation() ||
+            ValidateCompressedTexSubImage2D(context, targetPacked, level, xoffset, yoffset, width,
+                                            height, format, imageSize, data))
+        {
+            context->compressedTexSubImage2D(targetPacked, level, xoffset, yoffset, width, height,
+                                             format, imageSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexSubImage3DContextANGLE(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)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+        "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+        "= 0x%X, GLsizei imageSize = %d, const void *data = 0x%0.8p)",
+        target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::CompressedTexSubImage3D>(targetPacked, level, xoffset,
+                                                                   yoffset, zoffset, width, height,
+                                                                   depth, format, imageSize, data);
+
+        if (context->skipValidation() ||
+            ValidateCompressedTexSubImage3D(context, targetPacked, level, xoffset, yoffset, zoffset,
+                                            width, height, depth, format, imageSize, data))
+        {
+            context->compressedTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width,
+                                             height, depth, format, imageSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CopyBufferSubDataContextANGLE(GLeglContext ctx,
+                                               GLenum readTarget,
+                                               GLenum writeTarget,
+                                               GLintptr readOffset,
+                                               GLintptr writeOffset,
+                                               GLsizeiptr size)
+{
+    EVENT(
+        "(GLenum readTarget = 0x%X, GLenum writeTarget = 0x%X, GLintptr readOffset = %d, GLintptr "
+        "writeOffset = %d, GLsizeiptr size = %d)",
+        readTarget, writeTarget, readOffset, writeOffset, size);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding readTargetPacked  = FromGLenum<BufferBinding>(readTarget);
+        BufferBinding writeTargetPacked = FromGLenum<BufferBinding>(writeTarget);
+        context->gatherParams<EntryPoint::CopyBufferSubData>(readTargetPacked, writeTargetPacked,
+                                                             readOffset, writeOffset, size);
+
+        if (context->skipValidation() ||
+            ValidateCopyBufferSubData(context, readTargetPacked, writeTargetPacked, readOffset,
+                                      writeOffset, size))
+        {
+            context->copyBufferSubData(readTargetPacked, writeTargetPacked, readOffset, writeOffset,
+                                       size);
+        }
+    }
+}
+
+void GL_APIENTRY CopyTexImage2DContextANGLE(GLeglContext ctx,
+                                            GLenum target,
+                                            GLint level,
+                                            GLenum internalformat,
+                                            GLint x,
+                                            GLint y,
+                                            GLsizei width,
+                                            GLsizei height,
+                                            GLint border)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLint x = %d, "
+        "GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",
+        target, level, internalformat, x, y, width, height, border);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CopyTexImage2D>(targetPacked, level, internalformat, x, y,
+                                                          width, height, border);
+
+        if (context->skipValidation() ||
+            ValidateCopyTexImage2D(context, targetPacked, level, internalformat, x, y, width,
+                                   height, border))
+        {
+            context->copyTexImage2D(targetPacked, level, internalformat, x, y, width, height,
+                                    border);
+        }
+    }
+}
+
+void GL_APIENTRY CopyTexSubImage2DContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLint level,
+                                               GLint xoffset,
+                                               GLint yoffset,
+                                               GLint x,
+                                               GLint y,
+                                               GLsizei width,
+                                               GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint x "
+        "= %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
+        target, level, xoffset, yoffset, x, y, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CopyTexSubImage2D>(targetPacked, level, xoffset, yoffset,
+                                                             x, y, width, height);
+
+        if (context->skipValidation() ||
+            ValidateCopyTexSubImage2D(context, targetPacked, level, xoffset, yoffset, x, y, width,
+                                      height))
+        {
+            context->copyTexSubImage2D(targetPacked, level, xoffset, yoffset, x, y, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY CopyTexSubImage3DContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLint level,
+                                               GLint xoffset,
+                                               GLint yoffset,
+                                               GLint zoffset,
+                                               GLint x,
+                                               GLint y,
+                                               GLsizei width,
+                                               GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+        "zoffset = %d, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
+        target, level, xoffset, yoffset, zoffset, x, y, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::CopyTexSubImage3D>(targetPacked, level, xoffset, yoffset,
+                                                             zoffset, x, y, width, height);
+
+        if (context->skipValidation() ||
+            ValidateCopyTexSubImage3D(context, targetPacked, level, xoffset, yoffset, zoffset, x, y,
+                                      width, height))
+        {
+            context->copyTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, x, y, width,
+                                       height);
+        }
+    }
+}
+
+GLuint GL_APIENTRY CreateProgramContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CreateProgram>();
+
+        if (context->skipValidation() || ValidateCreateProgram(context))
+        {
+            return context->createProgram();
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::CreateProgram, GLuint>();
+}
+
+GLuint GL_APIENTRY CreateShaderContextANGLE(GLeglContext ctx, GLenum type)
+{
+    EVENT("(GLenum type = 0x%X)", type);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        ShaderType typePacked = FromGLenum<ShaderType>(type);
+        context->gatherParams<EntryPoint::CreateShader>(typePacked);
+
+        if (context->skipValidation() || ValidateCreateShader(context, typePacked))
+        {
+            return context->createShader(typePacked);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::CreateShader, GLuint>();
+}
+
+GLuint GL_APIENTRY CreateShaderProgramvContextANGLE(GLeglContext ctx,
+                                                    GLenum type,
+                                                    GLsizei count,
+                                                    const GLchar *const *strings)
+{
+    EVENT("(GLenum type = 0x%X, GLsizei count = %d, const GLchar *const*strings = 0x%0.8p)", type,
+          count, strings);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        ShaderType typePacked = FromGLenum<ShaderType>(type);
+        context->gatherParams<EntryPoint::CreateShaderProgramv>(typePacked, count, strings);
+
+        if (context->skipValidation() ||
+            ValidateCreateShaderProgramv(context, typePacked, count, strings))
+        {
+            return context->createShaderProgramv(typePacked, count, strings);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::CreateShaderProgramv, GLuint>();
+}
+
+void GL_APIENTRY CullFaceContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    EVENT("(GLenum mode = 0x%X)", mode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        CullFaceMode modePacked = FromGLenum<CullFaceMode>(mode);
+        context->gatherParams<EntryPoint::CullFace>(modePacked);
+
+        if (context->skipValidation() || ValidateCullFace(context, modePacked))
+        {
+            context->cullFace(modePacked);
+        }
+    }
+}
+
+void GL_APIENTRY CurrentPaletteMatrixOESContextANGLE(GLeglContext ctx, GLuint matrixpaletteindex)
+{
+    EVENT("(GLuint matrixpaletteindex = %u)", matrixpaletteindex);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CurrentPaletteMatrixOES>(matrixpaletteindex);
+
+        if (context->skipValidation() ||
+            ValidateCurrentPaletteMatrixOES(context, matrixpaletteindex))
+        {
+            context->currentPaletteMatrix(matrixpaletteindex);
+        }
+    }
+}
+
+void GL_APIENTRY DebugMessageCallbackKHRContextANGLE(GLeglContext ctx,
+                                                     GLDEBUGPROCKHR callback,
+                                                     const void *userParam)
+{
+    EVENT("(GLDEBUGPROCKHR callback = 0x%0.8p, const void *userParam = 0x%0.8p)", callback,
+          userParam);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DebugMessageCallbackKHR>(callback, userParam);
+
+        if (context->skipValidation() ||
+            ValidateDebugMessageCallbackKHR(context, callback, userParam))
+        {
+            context->debugMessageCallback(callback, userParam);
+        }
+    }
+}
+
+void GL_APIENTRY DebugMessageControlKHRContextANGLE(GLeglContext ctx,
+                                                    GLenum source,
+                                                    GLenum type,
+                                                    GLenum severity,
+                                                    GLsizei count,
+                                                    const GLuint *ids,
+                                                    GLboolean enabled)
+{
+    EVENT(
+        "(GLenum source = 0x%X, GLenum type = 0x%X, GLenum severity = 0x%X, GLsizei count = %d, "
+        "const GLuint *ids = 0x%0.8p, GLboolean enabled = %u)",
+        source, type, severity, count, ids, enabled);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DebugMessageControlKHR>(source, type, severity, count,
+                                                                  ids, enabled);
+
+        if (context->skipValidation() ||
+            ValidateDebugMessageControlKHR(context, source, type, severity, count, ids, enabled))
+        {
+            context->debugMessageControl(source, type, severity, count, ids, enabled);
+        }
+    }
+}
+
+void GL_APIENTRY DebugMessageInsertKHRContextANGLE(GLeglContext ctx,
+                                                   GLenum source,
+                                                   GLenum type,
+                                                   GLuint id,
+                                                   GLenum severity,
+                                                   GLsizei length,
+                                                   const GLchar *buf)
+{
+    EVENT(
+        "(GLenum source = 0x%X, GLenum type = 0x%X, GLuint id = %u, GLenum severity = 0x%X, "
+        "GLsizei length = %d, const GLchar *buf = 0x%0.8p)",
+        source, type, id, severity, length, buf);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DebugMessageInsertKHR>(source, type, id, severity, length,
+                                                                 buf);
+
+        if (context->skipValidation() ||
+            ValidateDebugMessageInsertKHR(context, source, type, id, severity, length, buf))
+        {
+            context->debugMessageInsert(source, type, id, severity, length, buf);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteBuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *buffers)
+{
+    EVENT("(GLsizei n = %d, const GLuint *buffers = 0x%0.8p)", n, buffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteBuffers>(n, buffers);
+
+        if (context->skipValidation() || ValidateDeleteBuffers(context, n, buffers))
+        {
+            context->deleteBuffers(n, buffers);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteFencesNVContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *fences)
+{
+    EVENT("(GLsizei n = %d, const GLuint *fences = 0x%0.8p)", n, fences);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteFencesNV>(n, fences);
+
+        if (context->skipValidation() || ValidateDeleteFencesNV(context, n, fences))
+        {
+            context->deleteFencesNV(n, fences);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteFramebuffersContextANGLE(GLeglContext ctx,
+                                                GLsizei n,
+                                                const GLuint *framebuffers)
+{
+    EVENT("(GLsizei n = %d, const GLuint *framebuffers = 0x%0.8p)", n, framebuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteFramebuffers>(n, framebuffers);
+
+        if (context->skipValidation() || ValidateDeleteFramebuffers(context, n, framebuffers))
+        {
+            context->deleteFramebuffers(n, framebuffers);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteFramebuffersOESContextANGLE(GLeglContext ctx,
+                                                   GLsizei n,
+                                                   const GLuint *framebuffers)
+{
+    EVENT("(GLsizei n = %d, const GLuint *framebuffers = 0x%0.8p)", n, framebuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteFramebuffersOES>(n, framebuffers);
+
+        if (context->skipValidation() || ValidateDeleteFramebuffersOES(context, n, framebuffers))
+        {
+            context->deleteFramebuffers(n, framebuffers);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    EVENT("(GLuint program = %u)", program);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteProgram>(program);
+
+        if (context->skipValidation() || ValidateDeleteProgram(context, program))
+        {
+            context->deleteProgram(program);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteProgramPipelinesContextANGLE(GLeglContext ctx,
+                                                    GLsizei n,
+                                                    const GLuint *pipelines)
+{
+    EVENT("(GLsizei n = %d, const GLuint *pipelines = 0x%0.8p)", n, pipelines);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteProgramPipelines>(n, pipelines);
+
+        if (context->skipValidation() || ValidateDeleteProgramPipelines(context, n, pipelines))
+        {
+            context->deleteProgramPipelines(n, pipelines);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteQueriesContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids)
+{
+    EVENT("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteQueries>(n, ids);
+
+        if (context->skipValidation() || ValidateDeleteQueries(context, n, ids))
+        {
+            context->deleteQueries(n, ids);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids)
+{
+    EVENT("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteQueriesEXT>(n, ids);
+
+        if (context->skipValidation() || ValidateDeleteQueriesEXT(context, n, ids))
+        {
+            context->deleteQueries(n, ids);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteRenderbuffersContextANGLE(GLeglContext ctx,
+                                                 GLsizei n,
+                                                 const GLuint *renderbuffers)
+{
+    EVENT("(GLsizei n = %d, const GLuint *renderbuffers = 0x%0.8p)", n, renderbuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteRenderbuffers>(n, renderbuffers);
+
+        if (context->skipValidation() || ValidateDeleteRenderbuffers(context, n, renderbuffers))
+        {
+            context->deleteRenderbuffers(n, renderbuffers);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteRenderbuffersOESContextANGLE(GLeglContext ctx,
+                                                    GLsizei n,
+                                                    const GLuint *renderbuffers)
+{
+    EVENT("(GLsizei n = %d, const GLuint *renderbuffers = 0x%0.8p)", n, renderbuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteRenderbuffersOES>(n, renderbuffers);
+
+        if (context->skipValidation() || ValidateDeleteRenderbuffersOES(context, n, renderbuffers))
+        {
+            context->deleteRenderbuffers(n, renderbuffers);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteSamplersContextANGLE(GLeglContext ctx, GLsizei count, const GLuint *samplers)
+{
+    EVENT("(GLsizei count = %d, const GLuint *samplers = 0x%0.8p)", count, samplers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteSamplers>(count, samplers);
+
+        if (context->skipValidation() || ValidateDeleteSamplers(context, count, samplers))
+        {
+            context->deleteSamplers(count, samplers);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteShaderContextANGLE(GLeglContext ctx, GLuint shader)
+{
+    EVENT("(GLuint shader = %u)", shader);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteShader>(shader);
+
+        if (context->skipValidation() || ValidateDeleteShader(context, shader))
+        {
+            context->deleteShader(shader);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteSyncContextANGLE(GLeglContext ctx, GLsync sync)
+{
+    EVENT("(GLsync sync = 0x%0.8p)", sync);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteSync>(sync);
+
+        if (context->skipValidation() || ValidateDeleteSync(context, sync))
+        {
+            context->deleteSync(sync);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteTexturesContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *textures)
+{
+    EVENT("(GLsizei n = %d, const GLuint *textures = 0x%0.8p)", n, textures);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteTextures>(n, textures);
+
+        if (context->skipValidation() || ValidateDeleteTextures(context, n, textures))
+        {
+            context->deleteTextures(n, textures);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteTransformFeedbacksContextANGLE(GLeglContext ctx,
+                                                      GLsizei n,
+                                                      const GLuint *ids)
+{
+    EVENT("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteTransformFeedbacks>(n, ids);
+
+        if (context->skipValidation() || ValidateDeleteTransformFeedbacks(context, n, ids))
+        {
+            context->deleteTransformFeedbacks(n, ids);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteVertexArraysContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *arrays)
+{
+    EVENT("(GLsizei n = %d, const GLuint *arrays = 0x%0.8p)", n, arrays);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteVertexArrays>(n, arrays);
+
+        if (context->skipValidation() || ValidateDeleteVertexArrays(context, n, arrays))
+        {
+            context->deleteVertexArrays(n, arrays);
+        }
+    }
+}
+
+void GL_APIENTRY DeleteVertexArraysOESContextANGLE(GLeglContext ctx,
+                                                   GLsizei n,
+                                                   const GLuint *arrays)
+{
+    EVENT("(GLsizei n = %d, const GLuint *arrays = 0x%0.8p)", n, arrays);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeleteVertexArraysOES>(n, arrays);
+
+        if (context->skipValidation() || ValidateDeleteVertexArraysOES(context, n, arrays))
+        {
+            context->deleteVertexArrays(n, arrays);
+        }
+    }
+}
+
+void GL_APIENTRY DepthFuncContextANGLE(GLeglContext ctx, GLenum func)
+{
+    EVENT("(GLenum func = 0x%X)", func);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DepthFunc>(func);
+
+        if (context->skipValidation() || ValidateDepthFunc(context, func))
+        {
+            context->depthFunc(func);
+        }
+    }
+}
+
+void GL_APIENTRY DepthMaskContextANGLE(GLeglContext ctx, GLboolean flag)
+{
+    EVENT("(GLboolean flag = %u)", flag);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DepthMask>(flag);
+
+        if (context->skipValidation() || ValidateDepthMask(context, flag))
+        {
+            context->depthMask(flag);
+        }
+    }
+}
+
+void GL_APIENTRY DepthRangefContextANGLE(GLeglContext ctx, GLfloat n, GLfloat f)
+{
+    EVENT("(GLfloat n = %f, GLfloat f = %f)", n, f);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DepthRangef>(n, f);
+
+        if (context->skipValidation() || ValidateDepthRangef(context, n, f))
+        {
+            context->depthRangef(n, f);
+        }
+    }
+}
+
+void GL_APIENTRY DepthRangexContextANGLE(GLeglContext ctx, GLfixed n, GLfixed f)
+{
+    EVENT("(GLfixed n = 0x%X, GLfixed f = 0x%X)", n, f);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DepthRangex>(n, f);
+
+        if (context->skipValidation() || ValidateDepthRangex(context, n, f))
+        {
+            context->depthRangex(n, f);
+        }
+    }
+}
+
+void GL_APIENTRY DetachShaderContextANGLE(GLeglContext ctx, GLuint program, GLuint shader)
+{
+    EVENT("(GLuint program = %u, GLuint shader = %u)", program, shader);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DetachShader>(program, shader);
+
+        if (context->skipValidation() || ValidateDetachShader(context, program, shader))
+        {
+            context->detachShader(program, shader);
+        }
+    }
+}
+
+void GL_APIENTRY DisableContextANGLE(GLeglContext ctx, GLenum cap)
+{
+    EVENT("(GLenum cap = 0x%X)", cap);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Disable>(cap);
+
+        if (context->skipValidation() || ValidateDisable(context, cap))
+        {
+            context->disable(cap);
+        }
+    }
+}
+
+void GL_APIENTRY DisableClientStateContextANGLE(GLeglContext ctx, GLenum array)
+{
+    EVENT("(GLenum array = 0x%X)", array);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        ClientVertexArrayType arrayPacked = FromGLenum<ClientVertexArrayType>(array);
+        context->gatherParams<EntryPoint::DisableClientState>(arrayPacked);
+
+        if (context->skipValidation() || ValidateDisableClientState(context, arrayPacked))
+        {
+            context->disableClientState(arrayPacked);
+        }
+    }
+}
+
+void GL_APIENTRY DisableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index)
+{
+    EVENT("(GLuint index = %u)", index);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DisableVertexAttribArray>(index);
+
+        if (context->skipValidation() || ValidateDisableVertexAttribArray(context, index))
+        {
+            context->disableVertexAttribArray(index);
+        }
+    }
+}
+
+void GL_APIENTRY DiscardFramebufferEXTContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLsizei numAttachments,
+                                                   const GLenum *attachments)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = 0x%0.8p)",
+        target, numAttachments, attachments);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DiscardFramebufferEXT>(target, numAttachments,
+                                                                 attachments);
+
+        if (context->skipValidation() ||
+            ValidateDiscardFramebufferEXT(context, target, numAttachments, attachments))
+        {
+            context->discardFramebuffer(target, numAttachments, attachments);
+        }
+    }
+}
+
+void GL_APIENTRY DispatchComputeContextANGLE(GLeglContext ctx,
+                                             GLuint num_groups_x,
+                                             GLuint num_groups_y,
+                                             GLuint num_groups_z)
+{
+    EVENT("(GLuint num_groups_x = %u, GLuint num_groups_y = %u, GLuint num_groups_z = %u)",
+          num_groups_x, num_groups_y, num_groups_z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DispatchCompute>(num_groups_x, num_groups_y,
+                                                           num_groups_z);
+
+        if (context->skipValidation() ||
+            ValidateDispatchCompute(context, num_groups_x, num_groups_y, num_groups_z))
+        {
+            context->dispatchCompute(num_groups_x, num_groups_y, num_groups_z);
+        }
+    }
+}
+
+void GL_APIENTRY DispatchComputeIndirectContextANGLE(GLeglContext ctx, GLintptr indirect)
+{
+    EVENT("(GLintptr indirect = %d)", indirect);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DispatchComputeIndirect>(indirect);
+
+        if (context->skipValidation() || ValidateDispatchComputeIndirect(context, indirect))
+        {
+            context->dispatchComputeIndirect(indirect);
+        }
+    }
+}
+
+void GL_APIENTRY DrawArraysContextANGLE(GLeglContext ctx, GLenum mode, GLint first, GLsizei count)
+{
+    EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawArrays>(mode, first, count);
+
+        if (context->skipValidation() || ValidateDrawArrays(context, mode, first, count))
+        {
+            context->drawArrays(mode, first, count);
+        }
+    }
+}
+
+void GL_APIENTRY DrawArraysIndirectContextANGLE(GLeglContext ctx, GLenum mode, const void *indirect)
+{
+    EVENT("(GLenum mode = 0x%X, const void *indirect = 0x%0.8p)", mode, indirect);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawArraysIndirect>(mode, indirect);
+
+        if (context->skipValidation() || ValidateDrawArraysIndirect(context, mode, indirect))
+        {
+            context->drawArraysIndirect(mode, indirect);
+        }
+    }
+}
+
+void GL_APIENTRY DrawArraysInstancedContextANGLE(GLeglContext ctx,
+                                                 GLenum mode,
+                                                 GLint first,
+                                                 GLsizei count,
+                                                 GLsizei instancecount)
+{
+    EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d, GLsizei instancecount = %d)",
+          mode, first, count, instancecount);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawArraysInstanced>(mode, first, count, instancecount);
+
+        if (context->skipValidation() ||
+            ValidateDrawArraysInstanced(context, mode, first, count, instancecount))
+        {
+            context->drawArraysInstanced(mode, first, count, instancecount);
+        }
+    }
+}
+
+void GL_APIENTRY DrawArraysInstancedANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum mode,
+                                                      GLint first,
+                                                      GLsizei count,
+                                                      GLsizei primcount)
+{
+    EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d, GLsizei primcount = %d)",
+          mode, first, count, primcount);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawArraysInstancedANGLE>(mode, first, count, primcount);
+
+        if (context->skipValidation() ||
+            ValidateDrawArraysInstancedANGLE(context, mode, first, count, primcount))
+        {
+            context->drawArraysInstanced(mode, first, count, primcount);
+        }
+    }
+}
+
+void GL_APIENTRY DrawBuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLenum *bufs)
+{
+    EVENT("(GLsizei n = %d, const GLenum *bufs = 0x%0.8p)", n, bufs);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawBuffers>(n, bufs);
+
+        if (context->skipValidation() || ValidateDrawBuffers(context, n, bufs))
+        {
+            context->drawBuffers(n, bufs);
+        }
+    }
+}
+
+void GL_APIENTRY DrawBuffersEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLenum *bufs)
+{
+    EVENT("(GLsizei n = %d, const GLenum *bufs = 0x%0.8p)", n, bufs);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawBuffersEXT>(n, bufs);
+
+        if (context->skipValidation() || ValidateDrawBuffersEXT(context, n, bufs))
+        {
+            context->drawBuffers(n, bufs);
+        }
+    }
+}
+
+void GL_APIENTRY DrawElementsContextANGLE(GLeglContext ctx,
+                                          GLenum mode,
+                                          GLsizei count,
+                                          GLenum type,
+                                          const void *indices)
+{
+    EVENT(
+        "(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const void *indices = "
+        "0x%0.8p)",
+        mode, count, type, indices);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawElements>(mode, count, type, indices);
+
+        if (context->skipValidation() || ValidateDrawElements(context, mode, count, type, indices))
+        {
+            context->drawElements(mode, count, type, indices);
+        }
+    }
+}
+
+void GL_APIENTRY DrawElementsIndirectContextANGLE(GLeglContext ctx,
+                                                  GLenum mode,
+                                                  GLenum type,
+                                                  const void *indirect)
+{
+    EVENT("(GLenum mode = 0x%X, GLenum type = 0x%X, const void *indirect = 0x%0.8p)", mode, type,
+          indirect);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawElementsIndirect>(mode, type, indirect);
+
+        if (context->skipValidation() ||
+            ValidateDrawElementsIndirect(context, mode, type, indirect))
+        {
+            context->drawElementsIndirect(mode, type, indirect);
+        }
+    }
+}
+
+void GL_APIENTRY DrawElementsInstancedContextANGLE(GLeglContext ctx,
+                                                   GLenum mode,
+                                                   GLsizei count,
+                                                   GLenum type,
+                                                   const void *indices,
+                                                   GLsizei instancecount)
+{
+    EVENT(
+        "(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const void *indices = "
+        "0x%0.8p, GLsizei instancecount = %d)",
+        mode, count, type, indices, instancecount);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawElementsInstanced>(mode, count, type, indices,
+                                                                 instancecount);
+
+        if (context->skipValidation() ||
+            ValidateDrawElementsInstanced(context, mode, count, type, indices, instancecount))
+        {
+            context->drawElementsInstanced(mode, count, type, indices, instancecount);
+        }
+    }
+}
+
+void GL_APIENTRY DrawElementsInstancedANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum mode,
+                                                        GLsizei count,
+                                                        GLenum type,
+                                                        const void *indices,
+                                                        GLsizei primcount)
+{
+    EVENT(
+        "(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const void *indices = "
+        "0x%0.8p, GLsizei primcount = %d)",
+        mode, count, type, indices, primcount);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawElementsInstancedANGLE>(mode, count, type, indices,
+                                                                      primcount);
+
+        if (context->skipValidation() ||
+            ValidateDrawElementsInstancedANGLE(context, mode, count, type, indices, primcount))
+        {
+            context->drawElementsInstanced(mode, count, type, indices, primcount);
+        }
+    }
+}
+
+void GL_APIENTRY DrawRangeElementsContextANGLE(GLeglContext ctx,
+                                               GLenum mode,
+                                               GLuint start,
+                                               GLuint end,
+                                               GLsizei count,
+                                               GLenum type,
+                                               const void *indices)
+{
+    EVENT(
+        "(GLenum mode = 0x%X, GLuint start = %u, GLuint end = %u, GLsizei count = %d, GLenum type "
+        "= 0x%X, const void *indices = 0x%0.8p)",
+        mode, start, end, count, type, indices);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawRangeElements>(mode, start, end, count, type,
+                                                             indices);
+
+        if (context->skipValidation() ||
+            ValidateDrawRangeElements(context, mode, start, end, count, type, indices))
+        {
+            context->drawRangeElements(mode, start, end, count, type, indices);
+        }
+    }
+}
+
+void GL_APIENTRY DrawTexfOESContextANGLE(GLeglContext ctx,
+                                         GLfloat x,
+                                         GLfloat y,
+                                         GLfloat z,
+                                         GLfloat width,
+                                         GLfloat height)
+{
+    EVENT(
+        "(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat width = %f, GLfloat height = %f)",
+        x, y, z, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexfOES>(x, y, z, width, height);
+
+        if (context->skipValidation() || ValidateDrawTexfOES(context, x, y, z, width, height))
+        {
+            context->drawTexf(x, y, z, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY DrawTexfvOESContextANGLE(GLeglContext ctx, const GLfloat *coords)
+{
+    EVENT("(const GLfloat *coords = 0x%0.8p)", coords);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexfvOES>(coords);
+
+        if (context->skipValidation() || ValidateDrawTexfvOES(context, coords))
+        {
+            context->drawTexfv(coords);
+        }
+    }
+}
+
+void GL_APIENTRY
+DrawTexiOESContextANGLE(GLeglContext ctx, GLint x, GLint y, GLint z, GLint width, GLint height)
+{
+    EVENT("(GLint x = %d, GLint y = %d, GLint z = %d, GLint width = %d, GLint height = %d)", x, y,
+          z, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexiOES>(x, y, z, width, height);
+
+        if (context->skipValidation() || ValidateDrawTexiOES(context, x, y, z, width, height))
+        {
+            context->drawTexi(x, y, z, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY DrawTexivOESContextANGLE(GLeglContext ctx, const GLint *coords)
+{
+    EVENT("(const GLint *coords = 0x%0.8p)", coords);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexivOES>(coords);
+
+        if (context->skipValidation() || ValidateDrawTexivOES(context, coords))
+        {
+            context->drawTexiv(coords);
+        }
+    }
+}
+
+void GL_APIENTRY DrawTexsOESContextANGLE(GLeglContext ctx,
+                                         GLshort x,
+                                         GLshort y,
+                                         GLshort z,
+                                         GLshort width,
+                                         GLshort height)
+{
+    EVENT(
+        "(GLshort x = %d, GLshort y = %d, GLshort z = %d, GLshort width = %d, GLshort height = %d)",
+        x, y, z, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexsOES>(x, y, z, width, height);
+
+        if (context->skipValidation() || ValidateDrawTexsOES(context, x, y, z, width, height))
+        {
+            context->drawTexs(x, y, z, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY DrawTexsvOESContextANGLE(GLeglContext ctx, const GLshort *coords)
+{
+    EVENT("(const GLshort *coords = 0x%0.8p)", coords);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexsvOES>(coords);
+
+        if (context->skipValidation() || ValidateDrawTexsvOES(context, coords))
+        {
+            context->drawTexsv(coords);
+        }
+    }
+}
+
+void GL_APIENTRY DrawTexxOESContextANGLE(GLeglContext ctx,
+                                         GLfixed x,
+                                         GLfixed y,
+                                         GLfixed z,
+                                         GLfixed width,
+                                         GLfixed height)
+{
+    EVENT(
+        "(GLfixed x = 0x%X, GLfixed y = 0x%X, GLfixed z = 0x%X, GLfixed width = 0x%X, GLfixed "
+        "height = 0x%X)",
+        x, y, z, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexxOES>(x, y, z, width, height);
+
+        if (context->skipValidation() || ValidateDrawTexxOES(context, x, y, z, width, height))
+        {
+            context->drawTexx(x, y, z, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY DrawTexxvOESContextANGLE(GLeglContext ctx, const GLfixed *coords)
+{
+    EVENT("(const GLfixed *coords = 0x%0.8p)", coords);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DrawTexxvOES>(coords);
+
+        if (context->skipValidation() || ValidateDrawTexxvOES(context, coords))
+        {
+            context->drawTexxv(coords);
+        }
+    }
+}
+
+void GL_APIENTRY EGLImageTargetRenderbufferStorageOESContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLeglImageOES image)
+{
+    EVENT("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::EGLImageTargetRenderbufferStorageOES>(target, image);
+
+        if (context->skipValidation() ||
+            ValidateEGLImageTargetRenderbufferStorageOES(context, target, image))
+        {
+            context->eGLImageTargetRenderbufferStorage(target, image);
+        }
+    }
+}
+
+void GL_APIENTRY EGLImageTargetTexture2DOESContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLeglImageOES image)
+{
+    EVENT("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::EGLImageTargetTexture2DOES>(targetPacked, image);
+
+        if (context->skipValidation() ||
+            ValidateEGLImageTargetTexture2DOES(context, targetPacked, image))
+        {
+            context->eGLImageTargetTexture2D(targetPacked, image);
+        }
+    }
+}
+
+void GL_APIENTRY EnableContextANGLE(GLeglContext ctx, GLenum cap)
+{
+    EVENT("(GLenum cap = 0x%X)", cap);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Enable>(cap);
+
+        if (context->skipValidation() || ValidateEnable(context, cap))
+        {
+            context->enable(cap);
+        }
+    }
+}
+
+void GL_APIENTRY EnableClientStateContextANGLE(GLeglContext ctx, GLenum array)
+{
+    EVENT("(GLenum array = 0x%X)", array);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        ClientVertexArrayType arrayPacked = FromGLenum<ClientVertexArrayType>(array);
+        context->gatherParams<EntryPoint::EnableClientState>(arrayPacked);
+
+        if (context->skipValidation() || ValidateEnableClientState(context, arrayPacked))
+        {
+            context->enableClientState(arrayPacked);
+        }
+    }
+}
+
+void GL_APIENTRY EnableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index)
+{
+    EVENT("(GLuint index = %u)", index);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::EnableVertexAttribArray>(index);
+
+        if (context->skipValidation() || ValidateEnableVertexAttribArray(context, index))
+        {
+            context->enableVertexAttribArray(index);
+        }
+    }
+}
+
+void GL_APIENTRY EndQueryContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::EndQuery>(targetPacked);
+
+        if (context->skipValidation() || ValidateEndQuery(context, targetPacked))
+        {
+            context->endQuery(targetPacked);
+        }
+    }
+}
+
+void GL_APIENTRY EndQueryEXTContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::EndQueryEXT>(targetPacked);
+
+        if (context->skipValidation() || ValidateEndQueryEXT(context, targetPacked))
+        {
+            context->endQuery(targetPacked);
+        }
+    }
+}
+
+void GL_APIENTRY EndTransformFeedbackContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::EndTransformFeedback>();
+
+        if (context->skipValidation() || ValidateEndTransformFeedback(context))
+        {
+            context->endTransformFeedback();
+        }
+    }
+}
+
+GLsync GL_APIENTRY FenceSyncContextANGLE(GLeglContext ctx, GLenum condition, GLbitfield flags)
+{
+    EVENT("(GLenum condition = 0x%X, GLbitfield flags = 0x%X)", condition, flags);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FenceSync>(condition, flags);
+
+        if (context->skipValidation() || ValidateFenceSync(context, condition, flags))
+        {
+            return context->fenceSync(condition, flags);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::FenceSync, GLsync>();
+}
+
+void GL_APIENTRY FinishContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Finish>();
+
+        if (context->skipValidation() || ValidateFinish(context))
+        {
+            context->finish();
+        }
+    }
+}
+
+void GL_APIENTRY FinishFenceNVContextANGLE(GLeglContext ctx, GLuint fence)
+{
+    EVENT("(GLuint fence = %u)", fence);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FinishFenceNV>(fence);
+
+        if (context->skipValidation() || ValidateFinishFenceNV(context, fence))
+        {
+            context->finishFenceNV(fence);
+        }
+    }
+}
+
+void GL_APIENTRY FlushContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Flush>();
+
+        if (context->skipValidation() || ValidateFlush(context))
+        {
+            context->flush();
+        }
+    }
+}
+
+void GL_APIENTRY FlushMappedBufferRangeContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLintptr offset,
+                                                    GLsizeiptr length)
+{
+    EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset,
+          length);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::FlushMappedBufferRange>(targetPacked, offset, length);
+
+        if (context->skipValidation() ||
+            ValidateFlushMappedBufferRange(context, targetPacked, offset, length))
+        {
+            context->flushMappedBufferRange(targetPacked, offset, length);
+        }
+    }
+}
+
+void GL_APIENTRY FlushMappedBufferRangeEXTContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLintptr offset,
+                                                       GLsizeiptr length)
+{
+    EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset,
+          length);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::FlushMappedBufferRangeEXT>(targetPacked, offset, length);
+
+        if (context->skipValidation() ||
+            ValidateFlushMappedBufferRangeEXT(context, targetPacked, offset, length))
+        {
+            context->flushMappedBufferRange(targetPacked, offset, length);
+        }
+    }
+}
+
+void GL_APIENTRY FogfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param)
+{
+    EVENT("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Fogf>(pname, param);
+
+        if (context->skipValidation() || ValidateFogf(context, pname, param))
+        {
+            context->fogf(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY FogfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params)
+{
+    EVENT("(GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Fogfv>(pname, params);
+
+        if (context->skipValidation() || ValidateFogfv(context, pname, params))
+        {
+            context->fogfv(pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY FogxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param)
+{
+    EVENT("(GLenum pname = 0x%X, GLfixed param = 0x%X)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Fogx>(pname, param);
+
+        if (context->skipValidation() || ValidateFogx(context, pname, param))
+        {
+            context->fogx(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY FogxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *param)
+{
+    EVENT("(GLenum pname = 0x%X, const GLfixed *param = 0x%0.8p)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Fogxv>(pname, param);
+
+        if (context->skipValidation() || ValidateFogxv(context, pname, param))
+        {
+            context->fogxv(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferParameteriContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLenum pname,
+                                                   GLint param)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FramebufferParameteri>(target, pname, param);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferParameteri(context, target, pname, param))
+        {
+            context->framebufferParameteri(target, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferRenderbufferContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLenum attachment,
+                                                     GLenum renderbuffertarget,
+                                                     GLuint renderbuffer)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, GLuint "
+        "renderbuffer = %u)",
+        target, attachment, renderbuffertarget, renderbuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FramebufferRenderbuffer>(
+            target, attachment, renderbuffertarget, renderbuffer);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferRenderbuffer(context, target, attachment, renderbuffertarget,
+                                            renderbuffer))
+        {
+            context->framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferRenderbufferOESContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum attachment,
+                                                        GLenum renderbuffertarget,
+                                                        GLuint renderbuffer)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, GLuint "
+        "renderbuffer = %u)",
+        target, attachment, renderbuffertarget, renderbuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FramebufferRenderbufferOES>(
+            target, attachment, renderbuffertarget, renderbuffer);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferRenderbufferOES(context, target, attachment, renderbuffertarget,
+                                               renderbuffer))
+        {
+            context->framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferTexture2DContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLenum attachment,
+                                                  GLenum textarget,
+                                                  GLuint texture,
+                                                  GLint level)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, GLuint texture "
+        "= %u, GLint level = %d)",
+        target, attachment, textarget, texture, level);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget textargetPacked = FromGLenum<TextureTarget>(textarget);
+        context->gatherParams<EntryPoint::FramebufferTexture2D>(target, attachment, textargetPacked,
+                                                                texture, level);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferTexture2D(context, target, attachment, textargetPacked, texture,
+                                         level))
+        {
+            context->framebufferTexture2D(target, attachment, textargetPacked, texture, level);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferTexture2DOESContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLenum attachment,
+                                                     GLenum textarget,
+                                                     GLuint texture,
+                                                     GLint level)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, GLuint texture "
+        "= %u, GLint level = %d)",
+        target, attachment, textarget, texture, level);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget textargetPacked = FromGLenum<TextureTarget>(textarget);
+        context->gatherParams<EntryPoint::FramebufferTexture2DOES>(target, attachment,
+                                                                   textargetPacked, texture, level);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferTexture2DOES(context, target, attachment, textargetPacked, texture,
+                                            level))
+        {
+            context->framebufferTexture2D(target, attachment, textargetPacked, texture, level);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferTextureLayerContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLenum attachment,
+                                                     GLuint texture,
+                                                     GLint level,
+                                                     GLint layer)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+        "GLint layer = %d)",
+        target, attachment, texture, level, layer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FramebufferTextureLayer>(target, attachment, texture,
+                                                                   level, layer);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferTextureLayer(context, target, attachment, texture, level, layer))
+        {
+            context->framebufferTextureLayer(target, attachment, texture, level, layer);
+        }
+    }
+}
+
+void GL_APIENTRY FrontFaceContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    EVENT("(GLenum mode = 0x%X)", mode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FrontFace>(mode);
+
+        if (context->skipValidation() || ValidateFrontFace(context, mode))
+        {
+            context->frontFace(mode);
+        }
+    }
+}
+
+void GL_APIENTRY FrustumfContextANGLE(GLeglContext ctx,
+                                      GLfloat l,
+                                      GLfloat r,
+                                      GLfloat b,
+                                      GLfloat t,
+                                      GLfloat n,
+                                      GLfloat f)
+{
+    EVENT(
+        "(GLfloat l = %f, GLfloat r = %f, GLfloat b = %f, GLfloat t = %f, GLfloat n = %f, GLfloat "
+        "f = %f)",
+        l, r, b, t, n, f);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Frustumf>(l, r, b, t, n, f);
+
+        if (context->skipValidation() || ValidateFrustumf(context, l, r, b, t, n, f))
+        {
+            context->frustumf(l, r, b, t, n, f);
+        }
+    }
+}
+
+void GL_APIENTRY FrustumxContextANGLE(GLeglContext ctx,
+                                      GLfixed l,
+                                      GLfixed r,
+                                      GLfixed b,
+                                      GLfixed t,
+                                      GLfixed n,
+                                      GLfixed f)
+{
+    EVENT(
+        "(GLfixed l = 0x%X, GLfixed r = 0x%X, GLfixed b = 0x%X, GLfixed t = 0x%X, GLfixed n = "
+        "0x%X, GLfixed f = 0x%X)",
+        l, r, b, t, n, f);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Frustumx>(l, r, b, t, n, f);
+
+        if (context->skipValidation() || ValidateFrustumx(context, l, r, b, t, n, f))
+        {
+            context->frustumx(l, r, b, t, n, f);
+        }
+    }
+}
+
+void GL_APIENTRY GenBuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *buffers)
+{
+    EVENT("(GLsizei n = %d, GLuint *buffers = 0x%0.8p)", n, buffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenBuffers>(n, buffers);
+
+        if (context->skipValidation() || ValidateGenBuffers(context, n, buffers))
+        {
+            context->genBuffers(n, buffers);
+        }
+    }
+}
+
+void GL_APIENTRY GenFencesNVContextANGLE(GLeglContext ctx, GLsizei n, GLuint *fences)
+{
+    EVENT("(GLsizei n = %d, GLuint *fences = 0x%0.8p)", n, fences);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenFencesNV>(n, fences);
+
+        if (context->skipValidation() || ValidateGenFencesNV(context, n, fences))
+        {
+            context->genFencesNV(n, fences);
+        }
+    }
+}
+
+void GL_APIENTRY GenFramebuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *framebuffers)
+{
+    EVENT("(GLsizei n = %d, GLuint *framebuffers = 0x%0.8p)", n, framebuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenFramebuffers>(n, framebuffers);
+
+        if (context->skipValidation() || ValidateGenFramebuffers(context, n, framebuffers))
+        {
+            context->genFramebuffers(n, framebuffers);
+        }
+    }
+}
+
+void GL_APIENTRY GenFramebuffersOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *framebuffers)
+{
+    EVENT("(GLsizei n = %d, GLuint *framebuffers = 0x%0.8p)", n, framebuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenFramebuffersOES>(n, framebuffers);
+
+        if (context->skipValidation() || ValidateGenFramebuffersOES(context, n, framebuffers))
+        {
+            context->genFramebuffers(n, framebuffers);
+        }
+    }
+}
+
+void GL_APIENTRY GenProgramPipelinesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *pipelines)
+{
+    EVENT("(GLsizei n = %d, GLuint *pipelines = 0x%0.8p)", n, pipelines);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenProgramPipelines>(n, pipelines);
+
+        if (context->skipValidation() || ValidateGenProgramPipelines(context, n, pipelines))
+        {
+            context->genProgramPipelines(n, pipelines);
+        }
+    }
+}
+
+void GL_APIENTRY GenQueriesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids)
+{
+    EVENT("(GLsizei n = %d, GLuint *ids = 0x%0.8p)", n, ids);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenQueries>(n, ids);
+
+        if (context->skipValidation() || ValidateGenQueries(context, n, ids))
+        {
+            context->genQueries(n, ids);
+        }
+    }
+}
+
+void GL_APIENTRY GenQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids)
+{
+    EVENT("(GLsizei n = %d, GLuint *ids = 0x%0.8p)", n, ids);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenQueriesEXT>(n, ids);
+
+        if (context->skipValidation() || ValidateGenQueriesEXT(context, n, ids))
+        {
+            context->genQueries(n, ids);
+        }
+    }
+}
+
+void GL_APIENTRY GenRenderbuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *renderbuffers)
+{
+    EVENT("(GLsizei n = %d, GLuint *renderbuffers = 0x%0.8p)", n, renderbuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenRenderbuffers>(n, renderbuffers);
+
+        if (context->skipValidation() || ValidateGenRenderbuffers(context, n, renderbuffers))
+        {
+            context->genRenderbuffers(n, renderbuffers);
+        }
+    }
+}
+
+void GL_APIENTRY GenRenderbuffersOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *renderbuffers)
+{
+    EVENT("(GLsizei n = %d, GLuint *renderbuffers = 0x%0.8p)", n, renderbuffers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenRenderbuffersOES>(n, renderbuffers);
+
+        if (context->skipValidation() || ValidateGenRenderbuffersOES(context, n, renderbuffers))
+        {
+            context->genRenderbuffers(n, renderbuffers);
+        }
+    }
+}
+
+void GL_APIENTRY GenSamplersContextANGLE(GLeglContext ctx, GLsizei count, GLuint *samplers)
+{
+    EVENT("(GLsizei count = %d, GLuint *samplers = 0x%0.8p)", count, samplers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenSamplers>(count, samplers);
+
+        if (context->skipValidation() || ValidateGenSamplers(context, count, samplers))
+        {
+            context->genSamplers(count, samplers);
+        }
+    }
+}
+
+void GL_APIENTRY GenTexturesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *textures)
+{
+    EVENT("(GLsizei n = %d, GLuint *textures = 0x%0.8p)", n, textures);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenTextures>(n, textures);
+
+        if (context->skipValidation() || ValidateGenTextures(context, n, textures))
+        {
+            context->genTextures(n, textures);
+        }
+    }
+}
+
+void GL_APIENTRY GenTransformFeedbacksContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids)
+{
+    EVENT("(GLsizei n = %d, GLuint *ids = 0x%0.8p)", n, ids);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenTransformFeedbacks>(n, ids);
+
+        if (context->skipValidation() || ValidateGenTransformFeedbacks(context, n, ids))
+        {
+            context->genTransformFeedbacks(n, ids);
+        }
+    }
+}
+
+void GL_APIENTRY GenVertexArraysContextANGLE(GLeglContext ctx, GLsizei n, GLuint *arrays)
+{
+    EVENT("(GLsizei n = %d, GLuint *arrays = 0x%0.8p)", n, arrays);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenVertexArrays>(n, arrays);
+
+        if (context->skipValidation() || ValidateGenVertexArrays(context, n, arrays))
+        {
+            context->genVertexArrays(n, arrays);
+        }
+    }
+}
+
+void GL_APIENTRY GenVertexArraysOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *arrays)
+{
+    EVENT("(GLsizei n = %d, GLuint *arrays = 0x%0.8p)", n, arrays);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenVertexArraysOES>(n, arrays);
+
+        if (context->skipValidation() || ValidateGenVertexArraysOES(context, n, arrays))
+        {
+            context->genVertexArrays(n, arrays);
+        }
+    }
+}
+
+void GL_APIENTRY GenerateMipmapContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GenerateMipmap>(targetPacked);
+
+        if (context->skipValidation() || ValidateGenerateMipmap(context, targetPacked))
+        {
+            context->generateMipmap(targetPacked);
+        }
+    }
+}
+
+void GL_APIENTRY GenerateMipmapOESContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GenerateMipmapOES>(targetPacked);
+
+        if (context->skipValidation() || ValidateGenerateMipmapOES(context, targetPacked))
+        {
+            context->generateMipmap(targetPacked);
+        }
+    }
+}
+
+void GL_APIENTRY GetActiveAttribContextANGLE(GLeglContext ctx,
+                                             GLuint program,
+                                             GLuint index,
+                                             GLsizei bufSize,
+                                             GLsizei *length,
+                                             GLint *size,
+                                             GLenum *type,
+                                             GLchar *name)
+{
+    EVENT(
+        "(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, "
+        "GLint *size = 0x%0.8p, GLenum *type = 0x%0.8p, GLchar *name = 0x%0.8p)",
+        program, index, bufSize, length, size, type, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetActiveAttrib>(program, index, bufSize, length, size,
+                                                           type, name);
+
+        if (context->skipValidation() ||
+            ValidateGetActiveAttrib(context, program, index, bufSize, length, size, type, name))
+        {
+            context->getActiveAttrib(program, index, bufSize, length, size, type, name);
+        }
+    }
+}
+
+void GL_APIENTRY GetActiveUniformContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLuint index,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLint *size,
+                                              GLenum *type,
+                                              GLchar *name)
+{
+    EVENT(
+        "(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, "
+        "GLint *size = 0x%0.8p, GLenum *type = 0x%0.8p, GLchar *name = 0x%0.8p)",
+        program, index, bufSize, length, size, type, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetActiveUniform>(program, index, bufSize, length, size,
+                                                            type, name);
+
+        if (context->skipValidation() ||
+            ValidateGetActiveUniform(context, program, index, bufSize, length, size, type, name))
+        {
+            context->getActiveUniform(program, index, bufSize, length, size, type, name);
+        }
+    }
+}
+
+void GL_APIENTRY GetActiveUniformBlockNameContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLuint uniformBlockIndex,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLchar *uniformBlockName)
+{
+    EVENT(
+        "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLsizei bufSize = %d, GLsizei "
+        "*length = 0x%0.8p, GLchar *uniformBlockName = 0x%0.8p)",
+        program, uniformBlockIndex, bufSize, length, uniformBlockName);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetActiveUniformBlockName>(
+            program, uniformBlockIndex, bufSize, length, uniformBlockName);
+
+        if (context->skipValidation() ||
+            ValidateGetActiveUniformBlockName(context, program, uniformBlockIndex, bufSize, length,
+                                              uniformBlockName))
+        {
+            context->getActiveUniformBlockName(program, uniformBlockIndex, bufSize, length,
+                                               uniformBlockName);
+        }
+    }
+}
+
+void GL_APIENTRY GetActiveUniformBlockivContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLuint uniformBlockIndex,
+                                                     GLenum pname,
+                                                     GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLint *params = "
+        "0x%0.8p)",
+        program, uniformBlockIndex, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetActiveUniformBlockiv>(program, uniformBlockIndex,
+                                                                   pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetActiveUniformBlockiv(context, program, uniformBlockIndex, pname, params))
+        {
+            context->getActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetActiveUniformsivContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLsizei uniformCount,
+                                                 const GLuint *uniformIndices,
+                                                 GLenum pname,
+                                                 GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLsizei uniformCount = %d, const GLuint *uniformIndices = 0x%0.8p, "
+        "GLenum pname = 0x%X, GLint *params = 0x%0.8p)",
+        program, uniformCount, uniformIndices, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetActiveUniformsiv>(program, uniformCount,
+                                                               uniformIndices, pname, params);
+
+        if (context->skipValidation() || ValidateGetActiveUniformsiv(context, program, uniformCount,
+                                                                     uniformIndices, pname, params))
+        {
+            context->getActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetAttachedShadersContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLsizei maxCount,
+                                                GLsizei *count,
+                                                GLuint *shaders)
+{
+    EVENT(
+        "(GLuint program = %u, GLsizei maxCount = %d, GLsizei *count = 0x%0.8p, GLuint *shaders = "
+        "0x%0.8p)",
+        program, maxCount, count, shaders);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetAttachedShaders>(program, maxCount, count, shaders);
+
+        if (context->skipValidation() ||
+            ValidateGetAttachedShaders(context, program, maxCount, count, shaders))
+        {
+            context->getAttachedShaders(program, maxCount, count, shaders);
+        }
+    }
+}
+
+GLint GL_APIENTRY GetAttribLocationContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                const GLchar *name)
+{
+    EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetAttribLocation>(program, name);
+
+        if (context->skipValidation() || ValidateGetAttribLocation(context, program, name))
+        {
+            return context->getAttribLocation(program, name);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetAttribLocation, GLint>();
+}
+
+void GL_APIENTRY GetBooleani_vContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLuint index,
+                                           GLboolean *data)
+{
+    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLboolean *data = 0x%0.8p)", target, index,
+          data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetBooleani_v>(target, index, data);
+
+        if (context->skipValidation() || ValidateGetBooleani_v(context, target, index, data))
+        {
+            context->getBooleani_v(target, index, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetBooleanvContextANGLE(GLeglContext ctx, GLenum pname, GLboolean *data)
+{
+    EVENT("(GLenum pname = 0x%X, GLboolean *data = 0x%0.8p)", pname, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetBooleanv>(pname, data);
+
+        if (context->skipValidation() || ValidateGetBooleanv(context, pname, data))
+        {
+            context->getBooleanv(pname, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferParameteri64vContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLenum pname,
+                                                    GLint64 *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64 *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferParameteri64v>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetBufferParameteri64v(context, targetPacked, pname, params))
+        {
+            context->getBufferParameteri64v(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferParameterivContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLenum pname,
+                                                  GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferParameteriv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetBufferParameteriv(context, targetPacked, pname, params))
+        {
+            context->getBufferParameteriv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferPointervContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLenum pname,
+                                               void **params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, void **params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferPointerv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetBufferPointerv(context, targetPacked, pname, params))
+        {
+            context->getBufferPointerv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferPointervOESContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLenum pname,
+                                                  void **params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, void **params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferPointervOES>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetBufferPointervOES(context, targetPacked, pname, params))
+        {
+            context->getBufferPointerv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetClipPlanefContextANGLE(GLeglContext ctx, GLenum plane, GLfloat *equation)
+{
+    EVENT("(GLenum plane = 0x%X, GLfloat *equation = 0x%0.8p)", plane, equation);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetClipPlanef>(plane, equation);
+
+        if (context->skipValidation() || ValidateGetClipPlanef(context, plane, equation))
+        {
+            context->getClipPlanef(plane, equation);
+        }
+    }
+}
+
+void GL_APIENTRY GetClipPlanexContextANGLE(GLeglContext ctx, GLenum plane, GLfixed *equation)
+{
+    EVENT("(GLenum plane = 0x%X, GLfixed *equation = 0x%0.8p)", plane, equation);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetClipPlanex>(plane, equation);
+
+        if (context->skipValidation() || ValidateGetClipPlanex(context, plane, equation))
+        {
+            context->getClipPlanex(plane, equation);
+        }
+    }
+}
+
+GLuint GL_APIENTRY GetDebugMessageLogKHRContextANGLE(GLeglContext ctx,
+                                                     GLuint count,
+                                                     GLsizei bufSize,
+                                                     GLenum *sources,
+                                                     GLenum *types,
+                                                     GLuint *ids,
+                                                     GLenum *severities,
+                                                     GLsizei *lengths,
+                                                     GLchar *messageLog)
+{
+    EVENT(
+        "(GLuint count = %u, GLsizei bufSize = %d, GLenum *sources = 0x%0.8p, GLenum *types = "
+        "0x%0.8p, GLuint *ids = 0x%0.8p, GLenum *severities = 0x%0.8p, GLsizei *lengths = 0x%0.8p, "
+        "GLchar *messageLog = 0x%0.8p)",
+        count, bufSize, sources, types, ids, severities, lengths, messageLog);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetDebugMessageLogKHR>(
+            count, bufSize, sources, types, ids, severities, lengths, messageLog);
+
+        if (context->skipValidation() ||
+            ValidateGetDebugMessageLogKHR(context, count, bufSize, sources, types, ids, severities,
+                                          lengths, messageLog))
+        {
+            return context->getDebugMessageLog(count, bufSize, sources, types, ids, severities,
+                                               lengths, messageLog);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetDebugMessageLogKHR, GLuint>();
+}
+
+GLenum GL_APIENTRY GetErrorContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = GetGlobalContext();
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetError>();
+
+        if (context->skipValidation() || ValidateGetError(context))
+        {
+            return context->getError();
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetError, GLenum>();
+}
+
+void GL_APIENTRY GetFenceivNVContextANGLE(GLeglContext ctx,
+                                          GLuint fence,
+                                          GLenum pname,
+                                          GLint *params)
+{
+    EVENT("(GLuint fence = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", fence, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFenceivNV>(fence, pname, params);
+
+        if (context->skipValidation() || ValidateGetFenceivNV(context, fence, pname, params))
+        {
+            context->getFenceivNV(fence, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFixedvContextANGLE(GLeglContext ctx, GLenum pname, GLfixed *params)
+{
+    EVENT("(GLenum pname = 0x%X, GLfixed *params = 0x%0.8p)", pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFixedv>(pname, params);
+
+        if (context->skipValidation() || ValidateGetFixedv(context, pname, params))
+        {
+            context->getFixedv(pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFloatvContextANGLE(GLeglContext ctx, GLenum pname, GLfloat *data)
+{
+    EVENT("(GLenum pname = 0x%X, GLfloat *data = 0x%0.8p)", pname, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFloatv>(pname, data);
+
+        if (context->skipValidation() || ValidateGetFloatv(context, pname, data))
+        {
+            context->getFloatv(pname, data);
+        }
+    }
+}
+
+GLint GL_APIENTRY GetFragDataLocationContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  const GLchar *name)
+{
+    EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFragDataLocation>(program, name);
+
+        if (context->skipValidation() || ValidateGetFragDataLocation(context, program, name))
+        {
+            return context->getFragDataLocation(program, name);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetFragDataLocation, GLint>();
+}
+
+void GL_APIENTRY GetFramebufferAttachmentParameterivContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLenum attachment,
+                                                                 GLenum pname,
+                                                                 GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint *params = "
+        "0x%0.8p)",
+        target, attachment, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFramebufferAttachmentParameteriv>(target, attachment,
+                                                                               pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetFramebufferAttachmentParameteriv(context, target, attachment, pname, params))
+        {
+            context->getFramebufferAttachmentParameteriv(target, attachment, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFramebufferAttachmentParameterivOESContextANGLE(GLeglContext ctx,
+                                                                    GLenum target,
+                                                                    GLenum attachment,
+                                                                    GLenum pname,
+                                                                    GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint *params = "
+        "0x%0.8p)",
+        target, attachment, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFramebufferAttachmentParameterivOES>(
+            target, attachment, pname, params);
+
+        if (context->skipValidation() || ValidateGetFramebufferAttachmentParameterivOES(
+                                             context, target, attachment, pname, params))
+        {
+            context->getFramebufferAttachmentParameteriv(target, attachment, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFramebufferParameterivContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum pname,
+                                                       GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFramebufferParameteriv>(target, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetFramebufferParameteriv(context, target, pname, params))
+        {
+            context->getFramebufferParameteriv(target, pname, params);
+        }
+    }
+}
+
+GLenum GL_APIENTRY GetGraphicsResetStatusEXTContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetGraphicsResetStatusEXT>();
+
+        if (context->skipValidation() || ValidateGetGraphicsResetStatusEXT(context))
+        {
+            return context->getGraphicsResetStatus();
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetGraphicsResetStatusEXT, GLenum>();
+}
+
+void GL_APIENTRY GetInteger64i_vContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLuint index,
+                                             GLint64 *data)
+{
+    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint64 *data = 0x%0.8p)", target, index,
+          data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetInteger64i_v>(target, index, data);
+
+        if (context->skipValidation() || ValidateGetInteger64i_v(context, target, index, data))
+        {
+            context->getInteger64i_v(target, index, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetInteger64vContextANGLE(GLeglContext ctx, GLenum pname, GLint64 *data)
+{
+    EVENT("(GLenum pname = 0x%X, GLint64 *data = 0x%0.8p)", pname, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetInteger64v>(pname, data);
+
+        if (context->skipValidation() || ValidateGetInteger64v(context, pname, data))
+        {
+            context->getInteger64v(pname, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetIntegeri_vContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLuint index,
+                                           GLint *data)
+{
+    EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint *data = 0x%0.8p)", target, index, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetIntegeri_v>(target, index, data);
+
+        if (context->skipValidation() || ValidateGetIntegeri_v(context, target, index, data))
+        {
+            context->getIntegeri_v(target, index, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetIntegervContextANGLE(GLeglContext ctx, GLenum pname, GLint *data)
+{
+    EVENT("(GLenum pname = 0x%X, GLint *data = 0x%0.8p)", pname, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetIntegerv>(pname, data);
+
+        if (context->skipValidation() || ValidateGetIntegerv(context, pname, data))
+        {
+            context->getIntegerv(pname, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetInternalformativContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLenum internalformat,
+                                                 GLenum pname,
+                                                 GLsizei bufSize,
+                                                 GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize "
+        "= %d, GLint *params = 0x%0.8p)",
+        target, internalformat, pname, bufSize, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetInternalformativ>(target, internalformat, pname,
+                                                               bufSize, params);
+
+        if (context->skipValidation() ||
+            ValidateGetInternalformativ(context, target, internalformat, pname, bufSize, params))
+        {
+            context->getInternalformativ(target, internalformat, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetLightfvContextANGLE(GLeglContext ctx,
+                                        GLenum light,
+                                        GLenum pname,
+                                        GLfloat *params)
+{
+    EVENT("(GLenum light = 0x%X, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", light, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetLightfv>(light, pname, params);
+
+        if (context->skipValidation() || ValidateGetLightfv(context, light, pname, params))
+        {
+            context->getLightfv(light, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetLightxvContextANGLE(GLeglContext ctx,
+                                        GLenum light,
+                                        GLenum pname,
+                                        GLfixed *params)
+{
+    EVENT("(GLenum light = 0x%X, GLenum pname = 0x%X, GLfixed *params = 0x%0.8p)", light, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetLightxv>(light, pname, params);
+
+        if (context->skipValidation() || ValidateGetLightxv(context, light, pname, params))
+        {
+            context->getLightxv(light, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetMaterialfvContextANGLE(GLeglContext ctx,
+                                           GLenum face,
+                                           GLenum pname,
+                                           GLfloat *params)
+{
+    EVENT("(GLenum face = 0x%X, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", face, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetMaterialfv>(face, pname, params);
+
+        if (context->skipValidation() || ValidateGetMaterialfv(context, face, pname, params))
+        {
+            context->getMaterialfv(face, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetMaterialxvContextANGLE(GLeglContext ctx,
+                                           GLenum face,
+                                           GLenum pname,
+                                           GLfixed *params)
+{
+    EVENT("(GLenum face = 0x%X, GLenum pname = 0x%X, GLfixed *params = 0x%0.8p)", face, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetMaterialxv>(face, pname, params);
+
+        if (context->skipValidation() || ValidateGetMaterialxv(context, face, pname, params))
+        {
+            context->getMaterialxv(face, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetMultisamplefvContextANGLE(GLeglContext ctx,
+                                              GLenum pname,
+                                              GLuint index,
+                                              GLfloat *val)
+{
+    EVENT("(GLenum pname = 0x%X, GLuint index = %u, GLfloat *val = 0x%0.8p)", pname, index, val);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetMultisamplefv>(pname, index, val);
+
+        if (context->skipValidation() || ValidateGetMultisamplefv(context, pname, index, val))
+        {
+            context->getMultisamplefv(pname, index, val);
+        }
+    }
+}
+
+void GL_APIENTRY GetObjectLabelKHRContextANGLE(GLeglContext ctx,
+                                               GLenum identifier,
+                                               GLuint name,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLchar *label)
+{
+    EVENT(
+        "(GLenum identifier = 0x%X, GLuint name = %u, GLsizei bufSize = %d, GLsizei *length = "
+        "0x%0.8p, GLchar *label = 0x%0.8p)",
+        identifier, name, bufSize, length, label);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetObjectLabelKHR>(identifier, name, bufSize, length,
+                                                             label);
+
+        if (context->skipValidation() ||
+            ValidateGetObjectLabelKHR(context, identifier, name, bufSize, length, label))
+        {
+            context->getObjectLabel(identifier, name, bufSize, length, label);
+        }
+    }
+}
+
+void GL_APIENTRY GetObjectPtrLabelKHRContextANGLE(GLeglContext ctx,
+                                                  const void *ptr,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLchar *label)
+{
+    EVENT(
+        "(const void *ptr = 0x%0.8p, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar "
+        "*label = 0x%0.8p)",
+        ptr, bufSize, length, label);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetObjectPtrLabelKHR>(ptr, bufSize, length, label);
+
+        if (context->skipValidation() ||
+            ValidateGetObjectPtrLabelKHR(context, ptr, bufSize, length, label))
+        {
+            context->getObjectPtrLabel(ptr, bufSize, length, label);
+        }
+    }
+}
+
+void GL_APIENTRY GetPointervContextANGLE(GLeglContext ctx, GLenum pname, void **params)
+{
+    EVENT("(GLenum pname = 0x%X, void **params = 0x%0.8p)", pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetPointerv>(pname, params);
+
+        if (context->skipValidation() || ValidateGetPointerv(context, pname, params))
+        {
+            context->getPointerv(pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetPointervKHRContextANGLE(GLeglContext ctx, GLenum pname, void **params)
+{
+    EVENT("(GLenum pname = 0x%X, void **params = 0x%0.8p)", pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetPointervKHR>(pname, params);
+
+        if (context->skipValidation() || ValidateGetPointervKHR(context, pname, params))
+        {
+            context->getPointerv(pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramBinaryContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLenum *binaryFormat,
+                                              void *binary)
+{
+    EVENT(
+        "(GLuint program = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLenum "
+        "*binaryFormat = 0x%0.8p, void *binary = 0x%0.8p)",
+        program, bufSize, length, binaryFormat, binary);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramBinary>(program, bufSize, length, binaryFormat,
+                                                            binary);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramBinary(context, program, bufSize, length, binaryFormat, binary))
+        {
+            context->getProgramBinary(program, bufSize, length, binaryFormat, binary);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramBinaryOESContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLsizei bufSize,
+                                                 GLsizei *length,
+                                                 GLenum *binaryFormat,
+                                                 void *binary)
+{
+    EVENT(
+        "(GLuint program = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLenum "
+        "*binaryFormat = 0x%0.8p, void *binary = 0x%0.8p)",
+        program, bufSize, length, binaryFormat, binary);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramBinaryOES>(program, bufSize, length,
+                                                               binaryFormat, binary);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramBinaryOES(context, program, bufSize, length, binaryFormat, binary))
+        {
+            context->getProgramBinary(program, bufSize, length, binaryFormat, binary);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramInfoLogContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLchar *infoLog)
+{
+    EVENT(
+        "(GLuint program = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *infoLog = "
+        "0x%0.8p)",
+        program, bufSize, length, infoLog);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramInfoLog>(program, bufSize, length, infoLog);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramInfoLog(context, program, bufSize, length, infoLog))
+        {
+            context->getProgramInfoLog(program, bufSize, length, infoLog);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramInterfaceivContextANGLE(GLeglContext ctx,
+                                                   GLuint program,
+                                                   GLenum programInterface,
+                                                   GLenum pname,
+                                                   GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum programInterface = 0x%X, GLenum pname = 0x%X, GLint *params "
+        "= 0x%0.8p)",
+        program, programInterface, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramInterfaceiv>(program, programInterface, pname,
+                                                                 params);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramInterfaceiv(context, program, programInterface, pname, params))
+        {
+            context->getProgramInterfaceiv(program, programInterface, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramPipelineInfoLogContextANGLE(GLeglContext ctx,
+                                                       GLuint pipeline,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLchar *infoLog)
+{
+    EVENT(
+        "(GLuint pipeline = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *infoLog = "
+        "0x%0.8p)",
+        pipeline, bufSize, length, infoLog);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramPipelineInfoLog>(pipeline, bufSize, length,
+                                                                     infoLog);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramPipelineInfoLog(context, pipeline, bufSize, length, infoLog))
+        {
+            context->getProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramPipelineivContextANGLE(GLeglContext ctx,
+                                                  GLuint pipeline,
+                                                  GLenum pname,
+                                                  GLint *params)
+{
+    EVENT("(GLuint pipeline = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", pipeline, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramPipelineiv>(pipeline, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramPipelineiv(context, pipeline, pname, params))
+        {
+            context->getProgramPipelineiv(pipeline, pname, params);
+        }
+    }
+}
+
+GLuint GL_APIENTRY GetProgramResourceIndexContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLenum programInterface,
+                                                       const GLchar *name)
+{
+    EVENT("(GLuint program = %u, GLenum programInterface = 0x%X, const GLchar *name = 0x%0.8p)",
+          program, programInterface, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramResourceIndex>(program, programInterface, name);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramResourceIndex(context, program, programInterface, name))
+        {
+            return context->getProgramResourceIndex(program, programInterface, name);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetProgramResourceIndex, GLuint>();
+}
+
+GLint GL_APIENTRY GetProgramResourceLocationContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLenum programInterface,
+                                                         const GLchar *name)
+{
+    EVENT("(GLuint program = %u, GLenum programInterface = 0x%X, const GLchar *name = 0x%0.8p)",
+          program, programInterface, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramResourceLocation>(program, programInterface,
+                                                                      name);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramResourceLocation(context, program, programInterface, name))
+        {
+            return context->getProgramResourceLocation(program, programInterface, name);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetProgramResourceLocation, GLint>();
+}
+
+void GL_APIENTRY GetProgramResourceNameContextANGLE(GLeglContext ctx,
+                                                    GLuint program,
+                                                    GLenum programInterface,
+                                                    GLuint index,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLchar *name)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum programInterface = 0x%X, GLuint index = %u, GLsizei bufSize "
+        "= %d, GLsizei *length = 0x%0.8p, GLchar *name = 0x%0.8p)",
+        program, programInterface, index, bufSize, length, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramResourceName>(program, programInterface, index,
+                                                                  bufSize, length, name);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramResourceName(context, program, programInterface, index, bufSize,
+                                           length, name))
+        {
+            context->getProgramResourceName(program, programInterface, index, bufSize, length,
+                                            name);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramResourceivContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  GLenum programInterface,
+                                                  GLuint index,
+                                                  GLsizei propCount,
+                                                  const GLenum *props,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum programInterface = 0x%X, GLuint index = %u, GLsizei "
+        "propCount = %d, const GLenum *props = 0x%0.8p, GLsizei bufSize = %d, GLsizei *length = "
+        "0x%0.8p, GLint *params = 0x%0.8p)",
+        program, programInterface, index, propCount, props, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramResourceiv>(
+            program, programInterface, index, propCount, props, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramResourceiv(context, program, programInterface, index, propCount,
+                                         props, bufSize, length, params))
+        {
+            context->getProgramResourceiv(program, programInterface, index, propCount, props,
+                                          bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramivContextANGLE(GLeglContext ctx,
+                                          GLuint program,
+                                          GLenum pname,
+                                          GLint *params)
+{
+    EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", program, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramiv>(program, pname, params);
+
+        if (context->skipValidation() || ValidateGetProgramiv(context, program, pname, params))
+        {
+            context->getProgramiv(program, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjecti64vEXTContextANGLE(GLeglContext ctx,
+                                                   GLuint id,
+                                                   GLenum pname,
+                                                   GLint64 *params)
+{
+    EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLint64 *params = 0x%0.8p)", id, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjecti64vEXT>(id, pname, params);
+
+        if (context->skipValidation() || ValidateGetQueryObjecti64vEXT(context, id, pname, params))
+        {
+            context->getQueryObjecti64v(id, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectivEXTContextANGLE(GLeglContext ctx,
+                                                 GLuint id,
+                                                 GLenum pname,
+                                                 GLint *params)
+{
+    EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", id, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjectivEXT>(id, pname, params);
+
+        if (context->skipValidation() || ValidateGetQueryObjectivEXT(context, id, pname, params))
+        {
+            context->getQueryObjectiv(id, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectui64vEXTContextANGLE(GLeglContext ctx,
+                                                    GLuint id,
+                                                    GLenum pname,
+                                                    GLuint64 *params)
+{
+    EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLuint64 *params = 0x%0.8p)", id, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjectui64vEXT>(id, pname, params);
+
+        if (context->skipValidation() || ValidateGetQueryObjectui64vEXT(context, id, pname, params))
+        {
+            context->getQueryObjectui64v(id, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectuivContextANGLE(GLeglContext ctx,
+                                               GLuint id,
+                                               GLenum pname,
+                                               GLuint *params)
+{
+    EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", id, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjectuiv>(id, pname, params);
+
+        if (context->skipValidation() || ValidateGetQueryObjectuiv(context, id, pname, params))
+        {
+            context->getQueryObjectuiv(id, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectuivEXTContextANGLE(GLeglContext ctx,
+                                                  GLuint id,
+                                                  GLenum pname,
+                                                  GLuint *params)
+{
+    EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", id, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjectuivEXT>(id, pname, params);
+
+        if (context->skipValidation() || ValidateGetQueryObjectuivEXT(context, id, pname, params))
+        {
+            context->getQueryObjectuiv(id, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryivContextANGLE(GLeglContext ctx,
+                                        GLenum target,
+                                        GLenum pname,
+                                        GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryiv>(targetPacked, pname, params);
+
+        if (context->skipValidation() || ValidateGetQueryiv(context, targetPacked, pname, params))
+        {
+            context->getQueryiv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryivEXTContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLenum pname,
+                                           GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryivEXT>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryivEXT(context, targetPacked, pname, params))
+        {
+            context->getQueryiv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetRenderbufferParameterivContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum pname,
+                                                        GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetRenderbufferParameteriv>(target, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetRenderbufferParameteriv(context, target, pname, params))
+        {
+            context->getRenderbufferParameteriv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetRenderbufferParameterivOESContextANGLE(GLeglContext ctx,
+                                                           GLenum target,
+                                                           GLenum pname,
+                                                           GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetRenderbufferParameterivOES>(target, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetRenderbufferParameterivOES(context, target, pname, params))
+        {
+            context->getRenderbufferParameteriv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterfvContextANGLE(GLeglContext ctx,
+                                                   GLuint sampler,
+                                                   GLenum pname,
+                                                   GLfloat *params)
+{
+    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", sampler, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetSamplerParameterfv>(sampler, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetSamplerParameterfv(context, sampler, pname, params))
+        {
+            context->getSamplerParameterfv(sampler, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterivContextANGLE(GLeglContext ctx,
+                                                   GLuint sampler,
+                                                   GLenum pname,
+                                                   GLint *params)
+{
+    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", sampler, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetSamplerParameteriv>(sampler, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetSamplerParameteriv(context, sampler, pname, params))
+        {
+            context->getSamplerParameteriv(sampler, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetShaderInfoLogContextANGLE(GLeglContext ctx,
+                                              GLuint shader,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLchar *infoLog)
+{
+    EVENT(
+        "(GLuint shader = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *infoLog = "
+        "0x%0.8p)",
+        shader, bufSize, length, infoLog);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetShaderInfoLog>(shader, bufSize, length, infoLog);
+
+        if (context->skipValidation() ||
+            ValidateGetShaderInfoLog(context, shader, bufSize, length, infoLog))
+        {
+            context->getShaderInfoLog(shader, bufSize, length, infoLog);
+        }
+    }
+}
+
+void GL_APIENTRY GetShaderPrecisionFormatContextANGLE(GLeglContext ctx,
+                                                      GLenum shadertype,
+                                                      GLenum precisiontype,
+                                                      GLint *range,
+                                                      GLint *precision)
+{
+    EVENT(
+        "(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint *range = 0x%0.8p, GLint "
+        "*precision = 0x%0.8p)",
+        shadertype, precisiontype, range, precision);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetShaderPrecisionFormat>(shadertype, precisiontype,
+                                                                    range, precision);
+
+        if (context->skipValidation() ||
+            ValidateGetShaderPrecisionFormat(context, shadertype, precisiontype, range, precision))
+        {
+            context->getShaderPrecisionFormat(shadertype, precisiontype, range, precision);
+        }
+    }
+}
+
+void GL_APIENTRY GetShaderSourceContextANGLE(GLeglContext ctx,
+                                             GLuint shader,
+                                             GLsizei bufSize,
+                                             GLsizei *length,
+                                             GLchar *source)
+{
+    EVENT(
+        "(GLuint shader = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *source = "
+        "0x%0.8p)",
+        shader, bufSize, length, source);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetShaderSource>(shader, bufSize, length, source);
+
+        if (context->skipValidation() ||
+            ValidateGetShaderSource(context, shader, bufSize, length, source))
+        {
+            context->getShaderSource(shader, bufSize, length, source);
+        }
+    }
+}
+
+void GL_APIENTRY GetShaderivContextANGLE(GLeglContext ctx,
+                                         GLuint shader,
+                                         GLenum pname,
+                                         GLint *params)
+{
+    EVENT("(GLuint shader = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", shader, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetShaderiv>(shader, pname, params);
+
+        if (context->skipValidation() || ValidateGetShaderiv(context, shader, pname, params))
+        {
+            context->getShaderiv(shader, pname, params);
+        }
+    }
+}
+
+const GLubyte *GL_APIENTRY GetStringContextANGLE(GLeglContext ctx, GLenum name)
+{
+    EVENT("(GLenum name = 0x%X)", name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetString>(name);
+
+        if (context->skipValidation() || ValidateGetString(context, name))
+        {
+            return context->getString(name);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetString, const GLubyte *>();
+}
+
+const GLubyte *GL_APIENTRY GetStringiContextANGLE(GLeglContext ctx, GLenum name, GLuint index)
+{
+    EVENT("(GLenum name = 0x%X, GLuint index = %u)", name, index);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetStringi>(name, index);
+
+        if (context->skipValidation() || ValidateGetStringi(context, name, index))
+        {
+            return context->getStringi(name, index);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetStringi, const GLubyte *>();
+}
+
+void GL_APIENTRY GetSyncivContextANGLE(GLeglContext ctx,
+                                       GLsync sync,
+                                       GLenum pname,
+                                       GLsizei bufSize,
+                                       GLsizei *length,
+                                       GLint *values)
+{
+    EVENT(
+        "(GLsync sync = 0x%0.8p, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei *length = "
+        "0x%0.8p, GLint *values = 0x%0.8p)",
+        sync, pname, bufSize, length, values);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetSynciv>(sync, pname, bufSize, length, values);
+
+        if (context->skipValidation() ||
+            ValidateGetSynciv(context, sync, pname, bufSize, length, values))
+        {
+            context->getSynciv(sync, pname, bufSize, length, values);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexEnvfvContextANGLE(GLeglContext ctx,
+                                         GLenum target,
+                                         GLenum pname,
+                                         GLfloat *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTexEnvfv>(target, pname, params);
+
+        if (context->skipValidation() || ValidateGetTexEnvfv(context, target, pname, params))
+        {
+            context->getTexEnvfv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexEnvivContextANGLE(GLeglContext ctx,
+                                         GLenum target,
+                                         GLenum pname,
+                                         GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTexEnviv>(target, pname, params);
+
+        if (context->skipValidation() || ValidateGetTexEnviv(context, target, pname, params))
+        {
+            context->getTexEnviv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexEnvxvContextANGLE(GLeglContext ctx,
+                                         GLenum target,
+                                         GLenum pname,
+                                         GLfixed *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfixed *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTexEnvxv>(target, pname, params);
+
+        if (context->skipValidation() || ValidateGetTexEnvxv(context, target, pname, params))
+        {
+            context->getTexEnvxv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexGenfvOESContextANGLE(GLeglContext ctx,
+                                            GLenum coord,
+                                            GLenum pname,
+                                            GLfloat *params)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", coord, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTexGenfvOES>(coord, pname, params);
+
+        if (context->skipValidation() || ValidateGetTexGenfvOES(context, coord, pname, params))
+        {
+            context->getTexGenfv(coord, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexGenivOESContextANGLE(GLeglContext ctx,
+                                            GLenum coord,
+                                            GLenum pname,
+                                            GLint *params)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", coord, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTexGenivOES>(coord, pname, params);
+
+        if (context->skipValidation() || ValidateGetTexGenivOES(context, coord, pname, params))
+        {
+            context->getTexGeniv(coord, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexGenxvOESContextANGLE(GLeglContext ctx,
+                                            GLenum coord,
+                                            GLenum pname,
+                                            GLfixed *params)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, GLfixed *params = 0x%0.8p)", coord, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTexGenxvOES>(coord, pname, params);
+
+        if (context->skipValidation() || ValidateGetTexGenxvOES(context, coord, pname, params))
+        {
+            context->getTexGenxv(coord, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexLevelParameterfvContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLint level,
+                                                    GLenum pname,
+                                                    GLfloat *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)",
+        target, level, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::GetTexLevelParameterfv>(targetPacked, level, pname,
+                                                                  params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexLevelParameterfv(context, targetPacked, level, pname, params))
+        {
+            context->getTexLevelParameterfv(targetPacked, level, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexLevelParameterivContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLint level,
+                                                    GLenum pname,
+                                                    GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLint *params = 0x%0.8p)",
+          target, level, pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::GetTexLevelParameteriv>(targetPacked, level, pname,
+                                                                  params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexLevelParameteriv(context, targetPacked, level, pname, params))
+        {
+            context->getTexLevelParameteriv(targetPacked, level, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterfvContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLenum pname,
+                                               GLfloat *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterfv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexParameterfv(context, targetPacked, pname, params))
+        {
+            context->getTexParameterfv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterivContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLenum pname,
+                                               GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameteriv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexParameteriv(context, targetPacked, pname, params))
+        {
+            context->getTexParameteriv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterxvContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLenum pname,
+                                               GLfixed *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfixed *params = 0x%0.8p)", target, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterxv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexParameterxv(context, targetPacked, pname, params))
+        {
+            context->getTexParameterxv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTransformFeedbackVaryingContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLuint index,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLsizei *size,
+                                                         GLenum *type,
+                                                         GLchar *name)
+{
+    EVENT(
+        "(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, "
+        "GLsizei *size = 0x%0.8p, GLenum *type = 0x%0.8p, GLchar *name = 0x%0.8p)",
+        program, index, bufSize, length, size, type, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTransformFeedbackVarying>(program, index, bufSize,
+                                                                       length, size, type, name);
+
+        if (context->skipValidation() ||
+            ValidateGetTransformFeedbackVarying(context, program, index, bufSize, length, size,
+                                                type, name))
+        {
+            context->getTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
+        }
+    }
+}
+
+void GL_APIENTRY GetTranslatedShaderSourceANGLEContextANGLE(GLeglContext ctx,
+                                                            GLuint shader,
+                                                            GLsizei bufsize,
+                                                            GLsizei *length,
+                                                            GLchar *source)
+{
+    EVENT(
+        "(GLuint shader = %u, GLsizei bufsize = %d, GLsizei *length = 0x%0.8p, GLchar *source = "
+        "0x%0.8p)",
+        shader, bufsize, length, source);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetTranslatedShaderSourceANGLE>(shader, bufsize, length,
+                                                                          source);
+
+        if (context->skipValidation() ||
+            ValidateGetTranslatedShaderSourceANGLE(context, shader, bufsize, length, source))
+        {
+            context->getTranslatedShaderSource(shader, bufsize, length, source);
+        }
+    }
+}
+
+GLuint GL_APIENTRY GetUniformBlockIndexContextANGLE(GLeglContext ctx,
+                                                    GLuint program,
+                                                    const GLchar *uniformBlockName)
+{
+    EVENT("(GLuint program = %u, const GLchar *uniformBlockName = 0x%0.8p)", program,
+          uniformBlockName);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformBlockIndex>(program, uniformBlockName);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformBlockIndex(context, program, uniformBlockName))
+        {
+            return context->getUniformBlockIndex(program, uniformBlockName);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetUniformBlockIndex, GLuint>();
+}
+
+void GL_APIENTRY GetUniformIndicesContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLsizei uniformCount,
+                                               const GLchar *const *uniformNames,
+                                               GLuint *uniformIndices)
+{
+    EVENT(
+        "(GLuint program = %u, GLsizei uniformCount = %d, const GLchar *const*uniformNames = "
+        "0x%0.8p, GLuint *uniformIndices = 0x%0.8p)",
+        program, uniformCount, uniformNames, uniformIndices);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformIndices>(program, uniformCount, uniformNames,
+                                                             uniformIndices);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformIndices(context, program, uniformCount, uniformNames, uniformIndices))
+        {
+            context->getUniformIndices(program, uniformCount, uniformNames, uniformIndices);
+        }
+    }
+}
+
+GLint GL_APIENTRY GetUniformLocationContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 const GLchar *name)
+{
+    EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformLocation>(program, name);
+
+        if (context->skipValidation() || ValidateGetUniformLocation(context, program, name))
+        {
+            return context->getUniformLocation(program, name);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GetUniformLocation, GLint>();
+}
+
+void GL_APIENTRY GetUniformfvContextANGLE(GLeglContext ctx,
+                                          GLuint program,
+                                          GLint location,
+                                          GLfloat *params)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLfloat *params = 0x%0.8p)", program,
+          location, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformfv>(program, location, params);
+
+        if (context->skipValidation() || ValidateGetUniformfv(context, program, location, params))
+        {
+            context->getUniformfv(program, location, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformivContextANGLE(GLeglContext ctx,
+                                          GLuint program,
+                                          GLint location,
+                                          GLint *params)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLint *params = 0x%0.8p)", program, location,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformiv>(program, location, params);
+
+        if (context->skipValidation() || ValidateGetUniformiv(context, program, location, params))
+        {
+            context->getUniformiv(program, location, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformuivContextANGLE(GLeglContext ctx,
+                                           GLuint program,
+                                           GLint location,
+                                           GLuint *params)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLuint *params = 0x%0.8p)", program, location,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformuiv>(program, location, params);
+
+        if (context->skipValidation() || ValidateGetUniformuiv(context, program, location, params))
+        {
+            context->getUniformuiv(program, location, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribIivContextANGLE(GLeglContext ctx,
+                                                GLuint index,
+                                                GLenum pname,
+                                                GLint *params)
+{
+    EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", index, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribIiv>(index, pname, params);
+
+        if (context->skipValidation() || ValidateGetVertexAttribIiv(context, index, pname, params))
+        {
+            context->getVertexAttribIiv(index, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribIuivContextANGLE(GLeglContext ctx,
+                                                 GLuint index,
+                                                 GLenum pname,
+                                                 GLuint *params)
+{
+    EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", index, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribIuiv>(index, pname, params);
+
+        if (context->skipValidation() || ValidateGetVertexAttribIuiv(context, index, pname, params))
+        {
+            context->getVertexAttribIuiv(index, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribPointervContextANGLE(GLeglContext ctx,
+                                                     GLuint index,
+                                                     GLenum pname,
+                                                     void **pointer)
+{
+    EVENT("(GLuint index = %u, GLenum pname = 0x%X, void **pointer = 0x%0.8p)", index, pname,
+          pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribPointerv>(index, pname, pointer);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribPointerv(context, index, pname, pointer))
+        {
+            context->getVertexAttribPointerv(index, pname, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribfvContextANGLE(GLeglContext ctx,
+                                               GLuint index,
+                                               GLenum pname,
+                                               GLfloat *params)
+{
+    EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", index, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribfv>(index, pname, params);
+
+        if (context->skipValidation() || ValidateGetVertexAttribfv(context, index, pname, params))
+        {
+            context->getVertexAttribfv(index, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribivContextANGLE(GLeglContext ctx,
+                                               GLuint index,
+                                               GLenum pname,
+                                               GLint *params)
+{
+    EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", index, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribiv>(index, pname, params);
+
+        if (context->skipValidation() || ValidateGetVertexAttribiv(context, index, pname, params))
+        {
+            context->getVertexAttribiv(index, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformfvEXTContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLsizei bufSize,
+                                              GLfloat *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLfloat *params = "
+        "0x%0.8p)",
+        program, location, bufSize, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetnUniformfvEXT>(program, location, bufSize, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformfvEXT(context, program, location, bufSize, params))
+        {
+            context->getnUniformfv(program, location, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformivEXTContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLsizei bufSize,
+                                              GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLint *params = 0x%0.8p)",
+        program, location, bufSize, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetnUniformivEXT>(program, location, bufSize, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformivEXT(context, program, location, bufSize, params))
+        {
+            context->getnUniformiv(program, location, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY HintContextANGLE(GLeglContext ctx, GLenum target, GLenum mode)
+{
+    EVENT("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Hint>(target, mode);
+
+        if (context->skipValidation() || ValidateHint(context, target, mode))
+        {
+            context->hint(target, mode);
+        }
+    }
+}
+
+void GL_APIENTRY InsertEventMarkerEXTContextANGLE(GLeglContext ctx,
+                                                  GLsizei length,
+                                                  const GLchar *marker)
+{
+    // Don't run an EVENT() macro on the EXT_debug_marker entry points.
+    // It can interfere with the debug events being set by the caller.
+    // EVENT("(GLsizei length = %d, const GLchar *marker = 0x%0.8p)", length, marker);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::InsertEventMarkerEXT>(length, marker);
+
+        if (context->skipValidation() || ValidateInsertEventMarkerEXT(context, length, marker))
+        {
+            context->insertEventMarker(length, marker);
+        }
+    }
+}
+
+void GL_APIENTRY InvalidateFramebufferContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLsizei numAttachments,
+                                                   const GLenum *attachments)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = 0x%0.8p)",
+        target, numAttachments, attachments);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::InvalidateFramebuffer>(target, numAttachments,
+                                                                 attachments);
+
+        if (context->skipValidation() ||
+            ValidateInvalidateFramebuffer(context, target, numAttachments, attachments))
+        {
+            context->invalidateFramebuffer(target, numAttachments, attachments);
+        }
+    }
+}
+
+void GL_APIENTRY InvalidateSubFramebufferContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLsizei numAttachments,
+                                                      const GLenum *attachments,
+                                                      GLint x,
+                                                      GLint y,
+                                                      GLsizei width,
+                                                      GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = 0x%0.8p, "
+        "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
+        target, numAttachments, attachments, x, y, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::InvalidateSubFramebuffer>(
+            target, numAttachments, attachments, x, y, width, height);
+
+        if (context->skipValidation() ||
+            ValidateInvalidateSubFramebuffer(context, target, numAttachments, attachments, x, y,
+                                             width, height))
+        {
+            context->invalidateSubFramebuffer(target, numAttachments, attachments, x, y, width,
+                                              height);
+        }
+    }
+}
+
+GLboolean GL_APIENTRY IsBufferContextANGLE(GLeglContext ctx, GLuint buffer)
+{
+    EVENT("(GLuint buffer = %u)", buffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsBuffer>(buffer);
+
+        if (context->skipValidation() || ValidateIsBuffer(context, buffer))
+        {
+            return context->isBuffer(buffer);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsBuffer, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsEnabledContextANGLE(GLeglContext ctx, GLenum cap)
+{
+    EVENT("(GLenum cap = 0x%X)", cap);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsEnabled>(cap);
+
+        if (context->skipValidation() || ValidateIsEnabled(context, cap))
+        {
+            return context->isEnabled(cap);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsEnabled, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsFenceNVContextANGLE(GLeglContext ctx, GLuint fence)
+{
+    EVENT("(GLuint fence = %u)", fence);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsFenceNV>(fence);
+
+        if (context->skipValidation() || ValidateIsFenceNV(context, fence))
+        {
+            return context->isFenceNV(fence);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsFenceNV, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsFramebufferContextANGLE(GLeglContext ctx, GLuint framebuffer)
+{
+    EVENT("(GLuint framebuffer = %u)", framebuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsFramebuffer>(framebuffer);
+
+        if (context->skipValidation() || ValidateIsFramebuffer(context, framebuffer))
+        {
+            return context->isFramebuffer(framebuffer);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsFramebuffer, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsFramebufferOESContextANGLE(GLeglContext ctx, GLuint framebuffer)
+{
+    EVENT("(GLuint framebuffer = %u)", framebuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsFramebufferOES>(framebuffer);
+
+        if (context->skipValidation() || ValidateIsFramebufferOES(context, framebuffer))
+        {
+            return context->isFramebuffer(framebuffer);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsFramebufferOES, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    EVENT("(GLuint program = %u)", program);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsProgram>(program);
+
+        if (context->skipValidation() || ValidateIsProgram(context, program))
+        {
+            return context->isProgram(program);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsProgram, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline)
+{
+    EVENT("(GLuint pipeline = %u)", pipeline);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsProgramPipeline>(pipeline);
+
+        if (context->skipValidation() || ValidateIsProgramPipeline(context, pipeline))
+        {
+            return context->isProgramPipeline(pipeline);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsProgramPipeline, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsQueryContextANGLE(GLeglContext ctx, GLuint id)
+{
+    EVENT("(GLuint id = %u)", id);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsQuery>(id);
+
+        if (context->skipValidation() || ValidateIsQuery(context, id))
+        {
+            return context->isQuery(id);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsQuery, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsQueryEXTContextANGLE(GLeglContext ctx, GLuint id)
+{
+    EVENT("(GLuint id = %u)", id);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsQueryEXT>(id);
+
+        if (context->skipValidation() || ValidateIsQueryEXT(context, id))
+        {
+            return context->isQuery(id);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsQueryEXT, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsRenderbufferContextANGLE(GLeglContext ctx, GLuint renderbuffer)
+{
+    EVENT("(GLuint renderbuffer = %u)", renderbuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsRenderbuffer>(renderbuffer);
+
+        if (context->skipValidation() || ValidateIsRenderbuffer(context, renderbuffer))
+        {
+            return context->isRenderbuffer(renderbuffer);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsRenderbuffer, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsRenderbufferOESContextANGLE(GLeglContext ctx, GLuint renderbuffer)
+{
+    EVENT("(GLuint renderbuffer = %u)", renderbuffer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsRenderbufferOES>(renderbuffer);
+
+        if (context->skipValidation() || ValidateIsRenderbufferOES(context, renderbuffer))
+        {
+            return context->isRenderbuffer(renderbuffer);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsRenderbufferOES, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsSamplerContextANGLE(GLeglContext ctx, GLuint sampler)
+{
+    EVENT("(GLuint sampler = %u)", sampler);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsSampler>(sampler);
+
+        if (context->skipValidation() || ValidateIsSampler(context, sampler))
+        {
+            return context->isSampler(sampler);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsSampler, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsShaderContextANGLE(GLeglContext ctx, GLuint shader)
+{
+    EVENT("(GLuint shader = %u)", shader);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsShader>(shader);
+
+        if (context->skipValidation() || ValidateIsShader(context, shader))
+        {
+            return context->isShader(shader);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsShader, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsSyncContextANGLE(GLeglContext ctx, GLsync sync)
+{
+    EVENT("(GLsync sync = 0x%0.8p)", sync);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsSync>(sync);
+
+        if (context->skipValidation() || ValidateIsSync(context, sync))
+        {
+            return context->isSync(sync);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsSync, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsTextureContextANGLE(GLeglContext ctx, GLuint texture)
+{
+    EVENT("(GLuint texture = %u)", texture);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsTexture>(texture);
+
+        if (context->skipValidation() || ValidateIsTexture(context, texture))
+        {
+            return context->isTexture(texture);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsTexture, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsTransformFeedbackContextANGLE(GLeglContext ctx, GLuint id)
+{
+    EVENT("(GLuint id = %u)", id);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsTransformFeedback>(id);
+
+        if (context->skipValidation() || ValidateIsTransformFeedback(context, id))
+        {
+            return context->isTransformFeedback(id);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsTransformFeedback, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsVertexArrayContextANGLE(GLeglContext ctx, GLuint array)
+{
+    EVENT("(GLuint array = %u)", array);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsVertexArray>(array);
+
+        if (context->skipValidation() || ValidateIsVertexArray(context, array))
+        {
+            return context->isVertexArray(array);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsVertexArray, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array)
+{
+    EVENT("(GLuint array = %u)", array);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsVertexArrayOES>(array);
+
+        if (context->skipValidation() || ValidateIsVertexArrayOES(context, array))
+        {
+            return context->isVertexArray(array);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsVertexArrayOES, GLboolean>();
+}
+
+void GL_APIENTRY LightModelfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param)
+{
+    EVENT("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LightModelf>(pname, param);
+
+        if (context->skipValidation() || ValidateLightModelf(context, pname, param))
+        {
+            context->lightModelf(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY LightModelfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params)
+{
+    EVENT("(GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LightModelfv>(pname, params);
+
+        if (context->skipValidation() || ValidateLightModelfv(context, pname, params))
+        {
+            context->lightModelfv(pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY LightModelxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param)
+{
+    EVENT("(GLenum pname = 0x%X, GLfixed param = 0x%X)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LightModelx>(pname, param);
+
+        if (context->skipValidation() || ValidateLightModelx(context, pname, param))
+        {
+            context->lightModelx(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY LightModelxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *param)
+{
+    EVENT("(GLenum pname = 0x%X, const GLfixed *param = 0x%0.8p)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LightModelxv>(pname, param);
+
+        if (context->skipValidation() || ValidateLightModelxv(context, pname, param))
+        {
+            context->lightModelxv(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY LightfContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfloat param)
+{
+    EVENT("(GLenum light = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", light, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Lightf>(light, pname, param);
+
+        if (context->skipValidation() || ValidateLightf(context, light, pname, param))
+        {
+            context->lightf(light, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY LightfvContextANGLE(GLeglContext ctx,
+                                     GLenum light,
+                                     GLenum pname,
+                                     const GLfloat *params)
+{
+    EVENT("(GLenum light = 0x%X, GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", light,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Lightfv>(light, pname, params);
+
+        if (context->skipValidation() || ValidateLightfv(context, light, pname, params))
+        {
+            context->lightfv(light, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY LightxContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfixed param)
+{
+    EVENT("(GLenum light = 0x%X, GLenum pname = 0x%X, GLfixed param = 0x%X)", light, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Lightx>(light, pname, param);
+
+        if (context->skipValidation() || ValidateLightx(context, light, pname, param))
+        {
+            context->lightx(light, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY LightxvContextANGLE(GLeglContext ctx,
+                                     GLenum light,
+                                     GLenum pname,
+                                     const GLfixed *params)
+{
+    EVENT("(GLenum light = 0x%X, GLenum pname = 0x%X, const GLfixed *params = 0x%0.8p)", light,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Lightxv>(light, pname, params);
+
+        if (context->skipValidation() || ValidateLightxv(context, light, pname, params))
+        {
+            context->lightxv(light, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY LineWidthContextANGLE(GLeglContext ctx, GLfloat width)
+{
+    EVENT("(GLfloat width = %f)", width);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LineWidth>(width);
+
+        if (context->skipValidation() || ValidateLineWidth(context, width))
+        {
+            context->lineWidth(width);
+        }
+    }
+}
+
+void GL_APIENTRY LineWidthxContextANGLE(GLeglContext ctx, GLfixed width)
+{
+    EVENT("(GLfixed width = 0x%X)", width);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LineWidthx>(width);
+
+        if (context->skipValidation() || ValidateLineWidthx(context, width))
+        {
+            context->lineWidthx(width);
+        }
+    }
+}
+
+void GL_APIENTRY LinkProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    EVENT("(GLuint program = %u)", program);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LinkProgram>(program);
+
+        if (context->skipValidation() || ValidateLinkProgram(context, program))
+        {
+            context->linkProgram(program);
+        }
+    }
+}
+
+void GL_APIENTRY LoadIdentityContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LoadIdentity>();
+
+        if (context->skipValidation() || ValidateLoadIdentity(context))
+        {
+            context->loadIdentity();
+        }
+    }
+}
+
+void GL_APIENTRY LoadMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m)
+{
+    EVENT("(const GLfloat *m = 0x%0.8p)", m);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LoadMatrixf>(m);
+
+        if (context->skipValidation() || ValidateLoadMatrixf(context, m))
+        {
+            context->loadMatrixf(m);
+        }
+    }
+}
+
+void GL_APIENTRY LoadMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m)
+{
+    EVENT("(const GLfixed *m = 0x%0.8p)", m);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LoadMatrixx>(m);
+
+        if (context->skipValidation() || ValidateLoadMatrixx(context, m))
+        {
+            context->loadMatrixx(m);
+        }
+    }
+}
+
+void GL_APIENTRY LoadPaletteFromModelViewMatrixOESContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LoadPaletteFromModelViewMatrixOES>();
+
+        if (context->skipValidation() || ValidateLoadPaletteFromModelViewMatrixOES(context))
+        {
+            context->loadPaletteFromModelViewMatrix();
+        }
+    }
+}
+
+void GL_APIENTRY LogicOpContextANGLE(GLeglContext ctx, GLenum opcode)
+{
+    EVENT("(GLenum opcode = 0x%X)", opcode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::LogicOp>(opcode);
+
+        if (context->skipValidation() || ValidateLogicOp(context, opcode))
+        {
+            context->logicOp(opcode);
+        }
+    }
+}
+
+void *GL_APIENTRY MapBufferOESContextANGLE(GLeglContext ctx, GLenum target, GLenum access)
+{
+    EVENT("(GLenum target = 0x%X, GLenum access = 0x%X)", target, access);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::MapBufferOES>(targetPacked, access);
+
+        if (context->skipValidation() || ValidateMapBufferOES(context, targetPacked, access))
+        {
+            return context->mapBuffer(targetPacked, access);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::MapBufferOES, void *>();
+}
+
+void *GL_APIENTRY MapBufferRangeContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLintptr offset,
+                                             GLsizeiptr length,
+                                             GLbitfield access)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = "
+        "0x%X)",
+        target, offset, length, access);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::MapBufferRange>(targetPacked, offset, length, access);
+
+        if (context->skipValidation() ||
+            ValidateMapBufferRange(context, targetPacked, offset, length, access))
+        {
+            return context->mapBufferRange(targetPacked, offset, length, access);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::MapBufferRange, void *>();
+}
+
+void *GL_APIENTRY MapBufferRangeEXTContextANGLE(GLeglContext ctx,
+                                                GLenum target,
+                                                GLintptr offset,
+                                                GLsizeiptr length,
+                                                GLbitfield access)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = "
+        "0x%X)",
+        target, offset, length, access);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::MapBufferRangeEXT>(targetPacked, offset, length, access);
+
+        if (context->skipValidation() ||
+            ValidateMapBufferRangeEXT(context, targetPacked, offset, length, access))
+        {
+            return context->mapBufferRange(targetPacked, offset, length, access);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::MapBufferRangeEXT, void *>();
+}
+
+void GL_APIENTRY MaterialfContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfloat param)
+{
+    EVENT("(GLenum face = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", face, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Materialf>(face, pname, param);
+
+        if (context->skipValidation() || ValidateMaterialf(context, face, pname, param))
+        {
+            context->materialf(face, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY MaterialfvContextANGLE(GLeglContext ctx,
+                                        GLenum face,
+                                        GLenum pname,
+                                        const GLfloat *params)
+{
+    EVENT("(GLenum face = 0x%X, GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", face, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Materialfv>(face, pname, params);
+
+        if (context->skipValidation() || ValidateMaterialfv(context, face, pname, params))
+        {
+            context->materialfv(face, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY MaterialxContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfixed param)
+{
+    EVENT("(GLenum face = 0x%X, GLenum pname = 0x%X, GLfixed param = 0x%X)", face, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Materialx>(face, pname, param);
+
+        if (context->skipValidation() || ValidateMaterialx(context, face, pname, param))
+        {
+            context->materialx(face, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY MaterialxvContextANGLE(GLeglContext ctx,
+                                        GLenum face,
+                                        GLenum pname,
+                                        const GLfixed *param)
+{
+    EVENT("(GLenum face = 0x%X, GLenum pname = 0x%X, const GLfixed *param = 0x%0.8p)", face, pname,
+          param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Materialxv>(face, pname, param);
+
+        if (context->skipValidation() || ValidateMaterialxv(context, face, pname, param))
+        {
+            context->materialxv(face, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY MatrixIndexPointerOESContextANGLE(GLeglContext ctx,
+                                                   GLint size,
+                                                   GLenum type,
+                                                   GLsizei stride,
+                                                   const void *pointer)
+{
+    EVENT(
+        "(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const void *pointer = 0x%0.8p)",
+        size, type, stride, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MatrixIndexPointerOES>(size, type, stride, pointer);
+
+        if (context->skipValidation() ||
+            ValidateMatrixIndexPointerOES(context, size, type, stride, pointer))
+        {
+            context->matrixIndexPointer(size, type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY MatrixModeContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    EVENT("(GLenum mode = 0x%X)", mode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        MatrixType modePacked = FromGLenum<MatrixType>(mode);
+        context->gatherParams<EntryPoint::MatrixMode>(modePacked);
+
+        if (context->skipValidation() || ValidateMatrixMode(context, modePacked))
+        {
+            context->matrixMode(modePacked);
+        }
+    }
+}
+
+void GL_APIENTRY MemoryBarrierContextANGLE(GLeglContext ctx, GLbitfield barriers)
+{
+    EVENT("(GLbitfield barriers = 0x%X)", barriers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MemoryBarrier>(barriers);
+
+        if (context->skipValidation() || ValidateMemoryBarrier(context, barriers))
+        {
+            context->memoryBarrier(barriers);
+        }
+    }
+}
+
+void GL_APIENTRY MemoryBarrierByRegionContextANGLE(GLeglContext ctx, GLbitfield barriers)
+{
+    EVENT("(GLbitfield barriers = 0x%X)", barriers);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MemoryBarrierByRegion>(barriers);
+
+        if (context->skipValidation() || ValidateMemoryBarrierByRegion(context, barriers))
+        {
+            context->memoryBarrierByRegion(barriers);
+        }
+    }
+}
+
+void GL_APIENTRY MultMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m)
+{
+    EVENT("(const GLfloat *m = 0x%0.8p)", m);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MultMatrixf>(m);
+
+        if (context->skipValidation() || ValidateMultMatrixf(context, m))
+        {
+            context->multMatrixf(m);
+        }
+    }
+}
+
+void GL_APIENTRY MultMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m)
+{
+    EVENT("(const GLfixed *m = 0x%0.8p)", m);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MultMatrixx>(m);
+
+        if (context->skipValidation() || ValidateMultMatrixx(context, m))
+        {
+            context->multMatrixx(m);
+        }
+    }
+}
+
+void GL_APIENTRY MultiTexCoord4fContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLfloat s,
+                                             GLfloat t,
+                                             GLfloat r,
+                                             GLfloat q)
+{
+    EVENT("(GLenum target = 0x%X, GLfloat s = %f, GLfloat t = %f, GLfloat r = %f, GLfloat q = %f)",
+          target, s, t, r, q);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MultiTexCoord4f>(target, s, t, r, q);
+
+        if (context->skipValidation() || ValidateMultiTexCoord4f(context, target, s, t, r, q))
+        {
+            context->multiTexCoord4f(target, s, t, r, q);
+        }
+    }
+}
+
+void GL_APIENTRY MultiTexCoord4xContextANGLE(GLeglContext ctx,
+                                             GLenum texture,
+                                             GLfixed s,
+                                             GLfixed t,
+                                             GLfixed r,
+                                             GLfixed q)
+{
+    EVENT(
+        "(GLenum texture = 0x%X, GLfixed s = 0x%X, GLfixed t = 0x%X, GLfixed r = 0x%X, GLfixed q = "
+        "0x%X)",
+        texture, s, t, r, q);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MultiTexCoord4x>(texture, s, t, r, q);
+
+        if (context->skipValidation() || ValidateMultiTexCoord4x(context, texture, s, t, r, q))
+        {
+            context->multiTexCoord4x(texture, s, t, r, q);
+        }
+    }
+}
+
+void GL_APIENTRY Normal3fContextANGLE(GLeglContext ctx, GLfloat nx, GLfloat ny, GLfloat nz)
+{
+    EVENT("(GLfloat nx = %f, GLfloat ny = %f, GLfloat nz = %f)", nx, ny, nz);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Normal3f>(nx, ny, nz);
+
+        if (context->skipValidation() || ValidateNormal3f(context, nx, ny, nz))
+        {
+            context->normal3f(nx, ny, nz);
+        }
+    }
+}
+
+void GL_APIENTRY Normal3xContextANGLE(GLeglContext ctx, GLfixed nx, GLfixed ny, GLfixed nz)
+{
+    EVENT("(GLfixed nx = 0x%X, GLfixed ny = 0x%X, GLfixed nz = 0x%X)", nx, ny, nz);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Normal3x>(nx, ny, nz);
+
+        if (context->skipValidation() || ValidateNormal3x(context, nx, ny, nz))
+        {
+            context->normal3x(nx, ny, nz);
+        }
+    }
+}
+
+void GL_APIENTRY NormalPointerContextANGLE(GLeglContext ctx,
+                                           GLenum type,
+                                           GLsizei stride,
+                                           const void *pointer)
+{
+    EVENT("(GLenum type = 0x%X, GLsizei stride = %d, const void *pointer = 0x%0.8p)", type, stride,
+          pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::NormalPointer>(type, stride, pointer);
+
+        if (context->skipValidation() || ValidateNormalPointer(context, type, stride, pointer))
+        {
+            context->normalPointer(type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY ObjectLabelKHRContextANGLE(GLeglContext ctx,
+                                            GLenum identifier,
+                                            GLuint name,
+                                            GLsizei length,
+                                            const GLchar *label)
+{
+    EVENT(
+        "(GLenum identifier = 0x%X, GLuint name = %u, GLsizei length = %d, const GLchar *label = "
+        "0x%0.8p)",
+        identifier, name, length, label);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ObjectLabelKHR>(identifier, name, length, label);
+
+        if (context->skipValidation() ||
+            ValidateObjectLabelKHR(context, identifier, name, length, label))
+        {
+            context->objectLabel(identifier, name, length, label);
+        }
+    }
+}
+
+void GL_APIENTRY ObjectPtrLabelKHRContextANGLE(GLeglContext ctx,
+                                               const void *ptr,
+                                               GLsizei length,
+                                               const GLchar *label)
+{
+    EVENT("(const void *ptr = 0x%0.8p, GLsizei length = %d, const GLchar *label = 0x%0.8p)", ptr,
+          length, label);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ObjectPtrLabelKHR>(ptr, length, label);
+
+        if (context->skipValidation() || ValidateObjectPtrLabelKHR(context, ptr, length, label))
+        {
+            context->objectPtrLabel(ptr, length, label);
+        }
+    }
+}
+
+void GL_APIENTRY OrthofContextANGLE(GLeglContext ctx,
+                                    GLfloat l,
+                                    GLfloat r,
+                                    GLfloat b,
+                                    GLfloat t,
+                                    GLfloat n,
+                                    GLfloat f)
+{
+    EVENT(
+        "(GLfloat l = %f, GLfloat r = %f, GLfloat b = %f, GLfloat t = %f, GLfloat n = %f, GLfloat "
+        "f = %f)",
+        l, r, b, t, n, f);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Orthof>(l, r, b, t, n, f);
+
+        if (context->skipValidation() || ValidateOrthof(context, l, r, b, t, n, f))
+        {
+            context->orthof(l, r, b, t, n, f);
+        }
+    }
+}
+
+void GL_APIENTRY OrthoxContextANGLE(GLeglContext ctx,
+                                    GLfixed l,
+                                    GLfixed r,
+                                    GLfixed b,
+                                    GLfixed t,
+                                    GLfixed n,
+                                    GLfixed f)
+{
+    EVENT(
+        "(GLfixed l = 0x%X, GLfixed r = 0x%X, GLfixed b = 0x%X, GLfixed t = 0x%X, GLfixed n = "
+        "0x%X, GLfixed f = 0x%X)",
+        l, r, b, t, n, f);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Orthox>(l, r, b, t, n, f);
+
+        if (context->skipValidation() || ValidateOrthox(context, l, r, b, t, n, f))
+        {
+            context->orthox(l, r, b, t, n, f);
+        }
+    }
+}
+
+void GL_APIENTRY PauseTransformFeedbackContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PauseTransformFeedback>();
+
+        if (context->skipValidation() || ValidatePauseTransformFeedback(context))
+        {
+            context->pauseTransformFeedback();
+        }
+    }
+}
+
+void GL_APIENTRY PixelStoreiContextANGLE(GLeglContext ctx, GLenum pname, GLint param)
+{
+    EVENT("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PixelStorei>(pname, param);
+
+        if (context->skipValidation() || ValidatePixelStorei(context, pname, param))
+        {
+            context->pixelStorei(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY PointParameterfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param)
+{
+    EVENT("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PointParameterf>(pname, param);
+
+        if (context->skipValidation() || ValidatePointParameterf(context, pname, param))
+        {
+            context->pointParameterf(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY PointParameterfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params)
+{
+    EVENT("(GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PointParameterfv>(pname, params);
+
+        if (context->skipValidation() || ValidatePointParameterfv(context, pname, params))
+        {
+            context->pointParameterfv(pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY PointParameterxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param)
+{
+    EVENT("(GLenum pname = 0x%X, GLfixed param = 0x%X)", pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PointParameterx>(pname, param);
+
+        if (context->skipValidation() || ValidatePointParameterx(context, pname, param))
+        {
+            context->pointParameterx(pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY PointParameterxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *params)
+{
+    EVENT("(GLenum pname = 0x%X, const GLfixed *params = 0x%0.8p)", pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PointParameterxv>(pname, params);
+
+        if (context->skipValidation() || ValidatePointParameterxv(context, pname, params))
+        {
+            context->pointParameterxv(pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY PointSizeContextANGLE(GLeglContext ctx, GLfloat size)
+{
+    EVENT("(GLfloat size = %f)", size);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PointSize>(size);
+
+        if (context->skipValidation() || ValidatePointSize(context, size))
+        {
+            context->pointSize(size);
+        }
+    }
+}
+
+void GL_APIENTRY PointSizePointerOESContextANGLE(GLeglContext ctx,
+                                                 GLenum type,
+                                                 GLsizei stride,
+                                                 const void *pointer)
+{
+    EVENT("(GLenum type = 0x%X, GLsizei stride = %d, const void *pointer = 0x%0.8p)", type, stride,
+          pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PointSizePointerOES>(type, stride, pointer);
+
+        if (context->skipValidation() ||
+            ValidatePointSizePointerOES(context, type, stride, pointer))
+        {
+            context->pointSizePointer(type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY PointSizexContextANGLE(GLeglContext ctx, GLfixed size)
+{
+    EVENT("(GLfixed size = 0x%X)", size);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PointSizex>(size);
+
+        if (context->skipValidation() || ValidatePointSizex(context, size))
+        {
+            context->pointSizex(size);
+        }
+    }
+}
+
+void GL_APIENTRY PolygonOffsetContextANGLE(GLeglContext ctx, GLfloat factor, GLfloat units)
+{
+    EVENT("(GLfloat factor = %f, GLfloat units = %f)", factor, units);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PolygonOffset>(factor, units);
+
+        if (context->skipValidation() || ValidatePolygonOffset(context, factor, units))
+        {
+            context->polygonOffset(factor, units);
+        }
+    }
+}
+
+void GL_APIENTRY PolygonOffsetxContextANGLE(GLeglContext ctx, GLfixed factor, GLfixed units)
+{
+    EVENT("(GLfixed factor = 0x%X, GLfixed units = 0x%X)", factor, units);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PolygonOffsetx>(factor, units);
+
+        if (context->skipValidation() || ValidatePolygonOffsetx(context, factor, units))
+        {
+            context->polygonOffsetx(factor, units);
+        }
+    }
+}
+
+void GL_APIENTRY PopDebugGroupKHRContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PopDebugGroupKHR>();
+
+        if (context->skipValidation() || ValidatePopDebugGroupKHR(context))
+        {
+            context->popDebugGroup();
+        }
+    }
+}
+
+void GL_APIENTRY PopGroupMarkerEXTContextANGLE(GLeglContext ctx)
+{
+    // Don't run an EVENT() macro on the EXT_debug_marker entry points.
+    // It can interfere with the debug events being set by the caller.
+    // EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PopGroupMarkerEXT>();
+
+        if (context->skipValidation() || ValidatePopGroupMarkerEXT(context))
+        {
+            context->popGroupMarker();
+        }
+    }
+}
+
+void GL_APIENTRY PopMatrixContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PopMatrix>();
+
+        if (context->skipValidation() || ValidatePopMatrix(context))
+        {
+            context->popMatrix();
+        }
+    }
+}
+
+void GL_APIENTRY ProgramBinaryContextANGLE(GLeglContext ctx,
+                                           GLuint program,
+                                           GLenum binaryFormat,
+                                           const void *binary,
+                                           GLsizei length)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum binaryFormat = 0x%X, const void *binary = 0x%0.8p, GLsizei "
+        "length = %d)",
+        program, binaryFormat, binary, length);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramBinary>(program, binaryFormat, binary, length);
+
+        if (context->skipValidation() ||
+            ValidateProgramBinary(context, program, binaryFormat, binary, length))
+        {
+            context->programBinary(program, binaryFormat, binary, length);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramBinaryOESContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLenum binaryFormat,
+                                              const void *binary,
+                                              GLint length)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum binaryFormat = 0x%X, const void *binary = 0x%0.8p, GLint "
+        "length = %d)",
+        program, binaryFormat, binary, length);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramBinaryOES>(program, binaryFormat, binary, length);
+
+        if (context->skipValidation() ||
+            ValidateProgramBinaryOES(context, program, binaryFormat, binary, length))
+        {
+            context->programBinary(program, binaryFormat, binary, length);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramParameteriContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLenum pname,
+                                               GLint value)
+{
+    EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint value = %d)", program, pname, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramParameteri>(program, pname, value);
+
+        if (context->skipValidation() || ValidateProgramParameteri(context, program, pname, value))
+        {
+            context->programParameteri(program, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform1fContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLfloat v0)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLfloat v0 = %f)", program, location, v0);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform1f>(program, location, v0);
+
+        if (context->skipValidation() || ValidateProgramUniform1f(context, program, location, v0))
+        {
+            context->programUniform1f(program, location, v0);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform1fvContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform1fv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform1fv(context, program, location, count, value))
+        {
+            context->programUniform1fv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform1iContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLint v0)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLint v0 = %d)", program, location, v0);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform1i>(program, location, v0);
+
+        if (context->skipValidation() || ValidateProgramUniform1i(context, program, location, v0))
+        {
+            context->programUniform1i(program, location, v0);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform1ivContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform1iv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform1iv(context, program, location, count, value))
+        {
+            context->programUniform1iv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform1uiContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLuint v0)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLuint v0 = %u)", program, location, v0);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform1ui>(program, location, v0);
+
+        if (context->skipValidation() || ValidateProgramUniform1ui(context, program, location, v0))
+        {
+            context->programUniform1ui(program, location, v0);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform1uivContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLsizei count,
+                                                const GLuint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform1uiv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform1uiv(context, program, location, count, value))
+        {
+            context->programUniform1uiv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform2fContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLfloat v0,
+                                              GLfloat v1)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f)", program,
+          location, v0, v1);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform2f>(program, location, v0, v1);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform2f(context, program, location, v0, v1))
+        {
+            context->programUniform2f(program, location, v0, v1);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform2fvContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform2fv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform2fv(context, program, location, count, value))
+        {
+            context->programUniform2fv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY
+ProgramUniform2iContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLint v0 = %d, GLint v1 = %d)", program,
+          location, v0, v1);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform2i>(program, location, v0, v1);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform2i(context, program, location, v0, v1))
+        {
+            context->programUniform2i(program, location, v0, v1);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform2ivContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform2iv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform2iv(context, program, location, count, value))
+        {
+            context->programUniform2iv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform2uiContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLuint v0,
+                                               GLuint v1)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLuint v0 = %u, GLuint v1 = %u)", program,
+          location, v0, v1);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform2ui>(program, location, v0, v1);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform2ui(context, program, location, v0, v1))
+        {
+            context->programUniform2ui(program, location, v0, v1);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform2uivContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLsizei count,
+                                                const GLuint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform2uiv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform2uiv(context, program, location, count, value))
+        {
+            context->programUniform2uiv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform3fContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLfloat v0,
+                                              GLfloat v1,
+                                              GLfloat v2)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = "
+        "%f)",
+        program, location, v0, v1, v2);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform3f>(program, location, v0, v1, v2);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform3f(context, program, location, v0, v1, v2))
+        {
+            context->programUniform3f(program, location, v0, v1, v2);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform3fvContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform3fv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform3fv(context, program, location, count, value))
+        {
+            context->programUniform3fv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform3iContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLint v0,
+                                              GLint v1,
+                                              GLint v2)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d)",
+          program, location, v0, v1, v2);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform3i>(program, location, v0, v1, v2);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform3i(context, program, location, v0, v1, v2))
+        {
+            context->programUniform3i(program, location, v0, v1, v2);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform3ivContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform3iv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform3iv(context, program, location, count, value))
+        {
+            context->programUniform3iv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform3uiContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLuint v0,
+                                               GLuint v1,
+                                               GLuint v2)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = "
+        "%u)",
+        program, location, v0, v1, v2);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform3ui>(program, location, v0, v1, v2);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform3ui(context, program, location, v0, v1, v2))
+        {
+            context->programUniform3ui(program, location, v0, v1, v2);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform3uivContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLsizei count,
+                                                const GLuint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform3uiv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform3uiv(context, program, location, count, value))
+        {
+            context->programUniform3uiv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform4fContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLfloat v0,
+                                              GLfloat v1,
+                                              GLfloat v2,
+                                              GLfloat v3)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = "
+        "%f, GLfloat v3 = %f)",
+        program, location, v0, v1, v2, v3);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform4f>(program, location, v0, v1, v2, v3);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform4f(context, program, location, v0, v1, v2, v3))
+        {
+            context->programUniform4f(program, location, v0, v1, v2, v3);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform4fvContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform4fv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform4fv(context, program, location, count, value))
+        {
+            context->programUniform4fv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform4iContextANGLE(GLeglContext ctx,
+                                              GLuint program,
+                                              GLint location,
+                                              GLint v0,
+                                              GLint v1,
+                                              GLint v2,
+                                              GLint v3)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d, "
+        "GLint v3 = %d)",
+        program, location, v0, v1, v2, v3);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform4i>(program, location, v0, v1, v2, v3);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform4i(context, program, location, v0, v1, v2, v3))
+        {
+            context->programUniform4i(program, location, v0, v1, v2, v3);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform4ivContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLsizei count,
+                                               const GLint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform4iv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform4iv(context, program, location, count, value))
+        {
+            context->programUniform4iv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform4uiContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLint location,
+                                               GLuint v0,
+                                               GLuint v1,
+                                               GLuint v2,
+                                               GLuint v3)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = "
+        "%u, GLuint v3 = %u)",
+        program, location, v0, v1, v2, v3);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform4ui>(program, location, v0, v1, v2, v3);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform4ui(context, program, location, v0, v1, v2, v3))
+        {
+            context->programUniform4ui(program, location, v0, v1, v2, v3);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniform4uivContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLsizei count,
+                                                const GLuint *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+        "0x%0.8p)",
+        program, location, count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniform4uiv>(program, location, count, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniform4uiv(context, program, location, count, value))
+        {
+            context->programUniform4uiv(program, location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix2fvContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     GLboolean transpose,
+                                                     const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix2fv>(program, location, count,
+                                                                   transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix2fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix2fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix2x3fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix2x3fv>(program, location, count,
+                                                                     transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix2x3fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix2x3fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix2x4fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix2x4fv>(program, location, count,
+                                                                     transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix2x4fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix2x4fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix3fvContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     GLboolean transpose,
+                                                     const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix3fv>(program, location, count,
+                                                                   transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix3fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix3fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix3x2fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix3x2fv>(program, location, count,
+                                                                     transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix3x2fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix3x2fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix3x4fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix3x4fv>(program, location, count,
+                                                                     transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix3x4fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix3x4fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix4fvContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     GLboolean transpose,
+                                                     const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix4fv>(program, location, count,
+                                                                   transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix4fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix4fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix4x2fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix4x2fv>(program, location, count,
+                                                                     transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix4x2fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix4x2fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramUniformMatrix4x3fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+        "const GLfloat *value = 0x%0.8p)",
+        program, location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramUniformMatrix4x3fv>(program, location, count,
+                                                                     transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateProgramUniformMatrix4x3fv(context, program, location, count, transpose, value))
+        {
+            context->programUniformMatrix4x3fv(program, location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY PushDebugGroupKHRContextANGLE(GLeglContext ctx,
+                                               GLenum source,
+                                               GLuint id,
+                                               GLsizei length,
+                                               const GLchar *message)
+{
+    EVENT(
+        "(GLenum source = 0x%X, GLuint id = %u, GLsizei length = %d, const GLchar *message = "
+        "0x%0.8p)",
+        source, id, length, message);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PushDebugGroupKHR>(source, id, length, message);
+
+        if (context->skipValidation() ||
+            ValidatePushDebugGroupKHR(context, source, id, length, message))
+        {
+            context->pushDebugGroup(source, id, length, message);
+        }
+    }
+}
+
+void GL_APIENTRY PushGroupMarkerEXTContextANGLE(GLeglContext ctx,
+                                                GLsizei length,
+                                                const GLchar *marker)
+{
+    // Don't run an EVENT() macro on the EXT_debug_marker entry points.
+    // It can interfere with the debug events being set by the caller.
+    // EVENT("(GLsizei length = %d, const GLchar *marker = 0x%0.8p)", length, marker);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PushGroupMarkerEXT>(length, marker);
+
+        if (context->skipValidation() || ValidatePushGroupMarkerEXT(context, length, marker))
+        {
+            context->pushGroupMarker(length, marker);
+        }
+    }
+}
+
+void GL_APIENTRY PushMatrixContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PushMatrix>();
+
+        if (context->skipValidation() || ValidatePushMatrix(context))
+        {
+            context->pushMatrix();
+        }
+    }
+}
+
+void GL_APIENTRY QueryCounterEXTContextANGLE(GLeglContext ctx, GLuint id, GLenum target)
+{
+    EVENT("(GLuint id = %u, GLenum target = 0x%X)", id, target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::QueryCounterEXT>(id, targetPacked);
+
+        if (context->skipValidation() || ValidateQueryCounterEXT(context, id, targetPacked))
+        {
+            context->queryCounter(id, targetPacked);
+        }
+    }
+}
+
+GLbitfield GL_APIENTRY QueryMatrixxOESContextANGLE(GLeglContext ctx,
+                                                   GLfixed *mantissa,
+                                                   GLint *exponent)
+{
+    EVENT("(GLfixed *mantissa = 0x%0.8p, GLint *exponent = 0x%0.8p)", mantissa, exponent);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::QueryMatrixxOES>(mantissa, exponent);
+
+        if (context->skipValidation() || ValidateQueryMatrixxOES(context, mantissa, exponent))
+        {
+            return context->queryMatrixx(mantissa, exponent);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::QueryMatrixxOES, GLbitfield>();
+}
+
+void GL_APIENTRY ReadBufferContextANGLE(GLeglContext ctx, GLenum src)
+{
+    EVENT("(GLenum src = 0x%X)", src);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ReadBuffer>(src);
+
+        if (context->skipValidation() || ValidateReadBuffer(context, src))
+        {
+            context->readBuffer(src);
+        }
+    }
+}
+
+void GL_APIENTRY ReadPixelsContextANGLE(GLeglContext ctx,
+                                        GLint x,
+                                        GLint y,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLenum format,
+                                        GLenum type,
+                                        void *pixels)
+{
+    EVENT(
+        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLenum format = "
+        "0x%X, GLenum type = 0x%X, void *pixels = 0x%0.8p)",
+        x, y, width, height, format, type, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ReadPixels>(x, y, width, height, format, type, pixels);
+
+        if (context->skipValidation() ||
+            ValidateReadPixels(context, x, y, width, height, format, type, pixels))
+        {
+            context->readPixels(x, y, width, height, format, type, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY ReadnPixelsEXTContextANGLE(GLeglContext ctx,
+                                            GLint x,
+                                            GLint y,
+                                            GLsizei width,
+                                            GLsizei height,
+                                            GLenum format,
+                                            GLenum type,
+                                            GLsizei bufSize,
+                                            void *data)
+{
+    EVENT(
+        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLenum format = "
+        "0x%X, GLenum type = 0x%X, GLsizei bufSize = %d, void *data = 0x%0.8p)",
+        x, y, width, height, format, type, bufSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ReadnPixelsEXT>(x, y, width, height, format, type,
+                                                          bufSize, data);
+
+        if (context->skipValidation() ||
+            ValidateReadnPixelsEXT(context, x, y, width, height, format, type, bufSize, data))
+        {
+            context->readnPixels(x, y, width, height, format, type, bufSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY ReleaseShaderCompilerContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ReleaseShaderCompiler>();
+
+        if (context->skipValidation() || ValidateReleaseShaderCompiler(context))
+        {
+            context->releaseShaderCompiler();
+        }
+    }
+}
+
+void GL_APIENTRY RenderbufferStorageContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLenum internalformat,
+                                                 GLsizei width,
+                                                 GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = "
+        "%d)",
+        target, internalformat, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::RenderbufferStorage>(target, internalformat, width,
+                                                               height);
+
+        if (context->skipValidation() ||
+            ValidateRenderbufferStorage(context, target, internalformat, width, height))
+        {
+            context->renderbufferStorage(target, internalformat, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY RenderbufferStorageMultisampleContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLsizei samples,
+                                                            GLenum internalformat,
+                                                            GLsizei width,
+                                                            GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width "
+        "= %d, GLsizei height = %d)",
+        target, samples, internalformat, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::RenderbufferStorageMultisample>(
+            target, samples, internalformat, width, height);
+
+        if (context->skipValidation() ||
+            ValidateRenderbufferStorageMultisample(context, target, samples, internalformat, width,
+                                                   height))
+        {
+            context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY RenderbufferStorageMultisampleANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLsizei samples,
+                                                                 GLenum internalformat,
+                                                                 GLsizei width,
+                                                                 GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width "
+        "= %d, GLsizei height = %d)",
+        target, samples, internalformat, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::RenderbufferStorageMultisampleANGLE>(
+            target, samples, internalformat, width, height);
+
+        if (context->skipValidation() ||
+            ValidateRenderbufferStorageMultisampleANGLE(context, target, samples, internalformat,
+                                                        width, height))
+        {
+            context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY RenderbufferStorageOESContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLenum internalformat,
+                                                    GLsizei width,
+                                                    GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = "
+        "%d)",
+        target, internalformat, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::RenderbufferStorageOES>(target, internalformat, width,
+                                                                  height);
+
+        if (context->skipValidation() ||
+            ValidateRenderbufferStorageOES(context, target, internalformat, width, height))
+        {
+            context->renderbufferStorage(target, internalformat, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY ResumeTransformFeedbackContextANGLE(GLeglContext ctx)
+{
+    EVENT("()");
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ResumeTransformFeedback>();
+
+        if (context->skipValidation() || ValidateResumeTransformFeedback(context))
+        {
+            context->resumeTransformFeedback();
+        }
+    }
+}
+
+void GL_APIENTRY
+RotatefContextANGLE(GLeglContext ctx, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+{
+    EVENT("(GLfloat angle = %f, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", angle, x, y, z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Rotatef>(angle, x, y, z);
+
+        if (context->skipValidation() || ValidateRotatef(context, angle, x, y, z))
+        {
+            context->rotatef(angle, x, y, z);
+        }
+    }
+}
+
+void GL_APIENTRY
+RotatexContextANGLE(GLeglContext ctx, GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+{
+    EVENT("(GLfixed angle = 0x%X, GLfixed x = 0x%X, GLfixed y = 0x%X, GLfixed z = 0x%X)", angle, x,
+          y, z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Rotatex>(angle, x, y, z);
+
+        if (context->skipValidation() || ValidateRotatex(context, angle, x, y, z))
+        {
+            context->rotatex(angle, x, y, z);
+        }
+    }
+}
+
+void GL_APIENTRY SampleCoverageContextANGLE(GLeglContext ctx, GLfloat value, GLboolean invert)
+{
+    EVENT("(GLfloat value = %f, GLboolean invert = %u)", value, invert);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SampleCoverage>(value, invert);
+
+        if (context->skipValidation() || ValidateSampleCoverage(context, value, invert))
+        {
+            context->sampleCoverage(value, invert);
+        }
+    }
+}
+
+void GL_APIENTRY SampleCoveragexContextANGLE(GLeglContext ctx, GLclampx value, GLboolean invert)
+{
+    EVENT("(GLclampx value = 0x%X, GLboolean invert = %u)", value, invert);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SampleCoveragex>(value, invert);
+
+        if (context->skipValidation() || ValidateSampleCoveragex(context, value, invert))
+        {
+            context->sampleCoveragex(value, invert);
+        }
+    }
+}
+
+void GL_APIENTRY SampleMaskiContextANGLE(GLeglContext ctx, GLuint maskNumber, GLbitfield mask)
+{
+    EVENT("(GLuint maskNumber = %u, GLbitfield mask = 0x%X)", maskNumber, mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SampleMaski>(maskNumber, mask);
+
+        if (context->skipValidation() || ValidateSampleMaski(context, maskNumber, mask))
+        {
+            context->sampleMaski(maskNumber, mask);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterfContextANGLE(GLeglContext ctx,
+                                               GLuint sampler,
+                                               GLenum pname,
+                                               GLfloat param)
+{
+    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat param = %f)", sampler, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameterf>(sampler, pname, param);
+
+        if (context->skipValidation() || ValidateSamplerParameterf(context, sampler, pname, param))
+        {
+            context->samplerParameterf(sampler, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterfvContextANGLE(GLeglContext ctx,
+                                                GLuint sampler,
+                                                GLenum pname,
+                                                const GLfloat *param)
+{
+    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLfloat *param = 0x%0.8p)", sampler,
+          pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameterfv>(sampler, pname, param);
+
+        if (context->skipValidation() || ValidateSamplerParameterfv(context, sampler, pname, param))
+        {
+            context->samplerParameterfv(sampler, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameteriContextANGLE(GLeglContext ctx,
+                                               GLuint sampler,
+                                               GLenum pname,
+                                               GLint param)
+{
+    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint param = %d)", sampler, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameteri>(sampler, pname, param);
+
+        if (context->skipValidation() || ValidateSamplerParameteri(context, sampler, pname, param))
+        {
+            context->samplerParameteri(sampler, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterivContextANGLE(GLeglContext ctx,
+                                                GLuint sampler,
+                                                GLenum pname,
+                                                const GLint *param)
+{
+    EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLint *param = 0x%0.8p)", sampler,
+          pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameteriv>(sampler, pname, param);
+
+        if (context->skipValidation() || ValidateSamplerParameteriv(context, sampler, pname, param))
+        {
+            context->samplerParameteriv(sampler, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY ScalefContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z)
+{
+    EVENT("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Scalef>(x, y, z);
+
+        if (context->skipValidation() || ValidateScalef(context, x, y, z))
+        {
+            context->scalef(x, y, z);
+        }
+    }
+}
+
+void GL_APIENTRY ScalexContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z)
+{
+    EVENT("(GLfixed x = 0x%X, GLfixed y = 0x%X, GLfixed z = 0x%X)", x, y, z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Scalex>(x, y, z);
+
+        if (context->skipValidation() || ValidateScalex(context, x, y, z))
+        {
+            context->scalex(x, y, z);
+        }
+    }
+}
+
+void GL_APIENTRY
+ScissorContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+    EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width,
+          height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Scissor>(x, y, width, height);
+
+        if (context->skipValidation() || ValidateScissor(context, x, y, width, height))
+        {
+            context->scissor(x, y, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY SetFenceNVContextANGLE(GLeglContext ctx, GLuint fence, GLenum condition)
+{
+    EVENT("(GLuint fence = %u, GLenum condition = 0x%X)", fence, condition);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SetFenceNV>(fence, condition);
+
+        if (context->skipValidation() || ValidateSetFenceNV(context, fence, condition))
+        {
+            context->setFenceNV(fence, condition);
+        }
+    }
+}
+
+void GL_APIENTRY ShadeModelContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    EVENT("(GLenum mode = 0x%X)", mode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ShadeModel>(mode);
+
+        if (context->skipValidation() || ValidateShadeModel(context, mode))
+        {
+            context->shadeModel(mode);
+        }
+    }
+}
+
+void GL_APIENTRY ShaderBinaryContextANGLE(GLeglContext ctx,
+                                          GLsizei count,
+                                          const GLuint *shaders,
+                                          GLenum binaryformat,
+                                          const void *binary,
+                                          GLsizei length)
+{
+    EVENT(
+        "(GLsizei count = %d, const GLuint *shaders = 0x%0.8p, GLenum binaryformat = 0x%X, const "
+        "void *binary = 0x%0.8p, GLsizei length = %d)",
+        count, shaders, binaryformat, binary, length);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ShaderBinary>(count, shaders, binaryformat, binary,
+                                                        length);
+
+        if (context->skipValidation() ||
+            ValidateShaderBinary(context, count, shaders, binaryformat, binary, length))
+        {
+            context->shaderBinary(count, shaders, binaryformat, binary, length);
+        }
+    }
+}
+
+void GL_APIENTRY ShaderSourceContextANGLE(GLeglContext ctx,
+                                          GLuint shader,
+                                          GLsizei count,
+                                          const GLchar *const *string,
+                                          const GLint *length)
+{
+    EVENT(
+        "(GLuint shader = %u, GLsizei count = %d, const GLchar *const*string = 0x%0.8p, const "
+        "GLint *length = 0x%0.8p)",
+        shader, count, string, length);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ShaderSource>(shader, count, string, length);
+
+        if (context->skipValidation() ||
+            ValidateShaderSource(context, shader, count, string, length))
+        {
+            context->shaderSource(shader, count, string, length);
+        }
+    }
+}
+
+void GL_APIENTRY StencilFuncContextANGLE(GLeglContext ctx, GLenum func, GLint ref, GLuint mask)
+{
+    EVENT("(GLenum func = 0x%X, GLint ref = %d, GLuint mask = %u)", func, ref, mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilFunc>(func, ref, mask);
+
+        if (context->skipValidation() || ValidateStencilFunc(context, func, ref, mask))
+        {
+            context->stencilFunc(func, ref, mask);
+        }
+    }
+}
+
+void GL_APIENTRY
+StencilFuncSeparateContextANGLE(GLeglContext ctx, GLenum face, GLenum func, GLint ref, GLuint mask)
+{
+    EVENT("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %u)", face, func,
+          ref, mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilFuncSeparate>(face, func, ref, mask);
+
+        if (context->skipValidation() ||
+            ValidateStencilFuncSeparate(context, face, func, ref, mask))
+        {
+            context->stencilFuncSeparate(face, func, ref, mask);
+        }
+    }
+}
+
+void GL_APIENTRY StencilMaskContextANGLE(GLeglContext ctx, GLuint mask)
+{
+    EVENT("(GLuint mask = %u)", mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilMask>(mask);
+
+        if (context->skipValidation() || ValidateStencilMask(context, mask))
+        {
+            context->stencilMask(mask);
+        }
+    }
+}
+
+void GL_APIENTRY StencilMaskSeparateContextANGLE(GLeglContext ctx, GLenum face, GLuint mask)
+{
+    EVENT("(GLenum face = 0x%X, GLuint mask = %u)", face, mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilMaskSeparate>(face, mask);
+
+        if (context->skipValidation() || ValidateStencilMaskSeparate(context, face, mask))
+        {
+            context->stencilMaskSeparate(face, mask);
+        }
+    }
+}
+
+void GL_APIENTRY StencilOpContextANGLE(GLeglContext ctx, GLenum fail, GLenum zfail, GLenum zpass)
+{
+    EVENT("(GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpass = 0x%X)", fail, zfail, zpass);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilOp>(fail, zfail, zpass);
+
+        if (context->skipValidation() || ValidateStencilOp(context, fail, zfail, zpass))
+        {
+            context->stencilOp(fail, zfail, zpass);
+        }
+    }
+}
+
+void GL_APIENTRY StencilOpSeparateContextANGLE(GLeglContext ctx,
+                                               GLenum face,
+                                               GLenum sfail,
+                                               GLenum dpfail,
+                                               GLenum dppass)
+{
+    EVENT("(GLenum face = 0x%X, GLenum sfail = 0x%X, GLenum dpfail = 0x%X, GLenum dppass = 0x%X)",
+          face, sfail, dpfail, dppass);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilOpSeparate>(face, sfail, dpfail, dppass);
+
+        if (context->skipValidation() ||
+            ValidateStencilOpSeparate(context, face, sfail, dpfail, dppass))
+        {
+            context->stencilOpSeparate(face, sfail, dpfail, dppass);
+        }
+    }
+}
+
+GLboolean GL_APIENTRY TestFenceNVContextANGLE(GLeglContext ctx, GLuint fence)
+{
+    EVENT("(GLuint fence = %u)", fence);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TestFenceNV>(fence);
+
+        if (context->skipValidation() || ValidateTestFenceNV(context, fence))
+        {
+            return context->testFenceNV(fence);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::TestFenceNV, GLboolean>();
+}
+
+void GL_APIENTRY TexCoordPointerContextANGLE(GLeglContext ctx,
+                                             GLint size,
+                                             GLenum type,
+                                             GLsizei stride,
+                                             const void *pointer)
+{
+    EVENT(
+        "(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const void *pointer = 0x%0.8p)",
+        size, type, stride, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexCoordPointer>(size, type, stride, pointer);
+
+        if (context->skipValidation() ||
+            ValidateTexCoordPointer(context, size, type, stride, pointer))
+        {
+            context->texCoordPointer(size, type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY TexEnvfContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfloat param)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexEnvf>(target, pname, param);
+
+        if (context->skipValidation() || ValidateTexEnvf(context, target, pname, param))
+        {
+            context->texEnvf(target, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexEnvfvContextANGLE(GLeglContext ctx,
+                                      GLenum target,
+                                      GLenum pname,
+                                      const GLfloat *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", target,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexEnvfv>(target, pname, params);
+
+        if (context->skipValidation() || ValidateTexEnvfv(context, target, pname, params))
+        {
+            context->texEnvfv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexEnviContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint param)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexEnvi>(target, pname, param);
+
+        if (context->skipValidation() || ValidateTexEnvi(context, target, pname, param))
+        {
+            context->texEnvi(target, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexEnvivContextANGLE(GLeglContext ctx,
+                                      GLenum target,
+                                      GLenum pname,
+                                      const GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLint *params = 0x%0.8p)", target,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexEnviv>(target, pname, params);
+
+        if (context->skipValidation() || ValidateTexEnviv(context, target, pname, params))
+        {
+            context->texEnviv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexEnvxContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfixed param)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfixed param = 0x%X)", target, pname,
+          param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexEnvx>(target, pname, param);
+
+        if (context->skipValidation() || ValidateTexEnvx(context, target, pname, param))
+        {
+            context->texEnvx(target, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexEnvxvContextANGLE(GLeglContext ctx,
+                                      GLenum target,
+                                      GLenum pname,
+                                      const GLfixed *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLfixed *params = 0x%0.8p)", target,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexEnvxv>(target, pname, params);
+
+        if (context->skipValidation() || ValidateTexEnvxv(context, target, pname, params))
+        {
+            context->texEnvxv(target, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexGenfOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLfloat param)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", coord, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexGenfOES>(coord, pname, param);
+
+        if (context->skipValidation() || ValidateTexGenfOES(context, coord, pname, param))
+        {
+            context->texGenf(coord, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexGenfvOESContextANGLE(GLeglContext ctx,
+                                         GLenum coord,
+                                         GLenum pname,
+                                         const GLfloat *params)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", coord,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexGenfvOES>(coord, pname, params);
+
+        if (context->skipValidation() || ValidateTexGenfvOES(context, coord, pname, params))
+        {
+            context->texGenfv(coord, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexGeniOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLint param)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, GLint param = %d)", coord, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexGeniOES>(coord, pname, param);
+
+        if (context->skipValidation() || ValidateTexGeniOES(context, coord, pname, param))
+        {
+            context->texGeni(coord, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexGenivOESContextANGLE(GLeglContext ctx,
+                                         GLenum coord,
+                                         GLenum pname,
+                                         const GLint *params)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, const GLint *params = 0x%0.8p)", coord, pname,
+          params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexGenivOES>(coord, pname, params);
+
+        if (context->skipValidation() || ValidateTexGenivOES(context, coord, pname, params))
+        {
+            context->texGeniv(coord, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexGenxOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLfixed param)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, GLfixed param = 0x%X)", coord, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexGenxOES>(coord, pname, param);
+
+        if (context->skipValidation() || ValidateTexGenxOES(context, coord, pname, param))
+        {
+            context->texGenx(coord, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexGenxvOESContextANGLE(GLeglContext ctx,
+                                         GLenum coord,
+                                         GLenum pname,
+                                         const GLfixed *params)
+{
+    EVENT("(GLenum coord = 0x%X, GLenum pname = 0x%X, const GLfixed *params = 0x%0.8p)", coord,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexGenxvOES>(coord, pname, params);
+
+        if (context->skipValidation() || ValidateTexGenxvOES(context, coord, pname, params))
+        {
+            context->texGenxv(coord, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexImage2DContextANGLE(GLeglContext ctx,
+                                        GLenum target,
+                                        GLint level,
+                                        GLint internalformat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLint border,
+                                        GLenum format,
+                                        GLenum type,
+                                        const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+        "GLsizei height = %d, GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const "
+        "void *pixels = 0x%0.8p)",
+        target, level, internalformat, width, height, border, format, type, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::TexImage2D>(targetPacked, level, internalformat, width,
+                                                      height, border, format, type, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexImage2D(context, targetPacked, level, internalformat, width, height, border,
+                               format, type, pixels))
+        {
+            context->texImage2D(targetPacked, level, internalformat, width, height, border, format,
+                                type, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexImage3DContextANGLE(GLeglContext ctx,
+                                        GLenum target,
+                                        GLint level,
+                                        GLint internalformat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLsizei depth,
+                                        GLint border,
+                                        GLenum format,
+                                        GLenum type,
+                                        const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+        "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, GLenum "
+        "type = 0x%X, const void *pixels = 0x%0.8p)",
+        target, level, internalformat, width, height, depth, border, format, type, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexImage3D>(targetPacked, level, internalformat, width,
+                                                      height, depth, border, format, type, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexImage3D(context, targetPacked, level, internalformat, width, height, depth,
+                               border, format, type, pixels))
+        {
+            context->texImage3D(targetPacked, level, internalformat, width, height, depth, border,
+                                format, type, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterfContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLenum pname,
+                                           GLfloat param)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterf>(targetPacked, pname, param);
+
+        if (context->skipValidation() || ValidateTexParameterf(context, targetPacked, pname, param))
+        {
+            context->texParameterf(targetPacked, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterfvContextANGLE(GLeglContext ctx,
+                                            GLenum target,
+                                            GLenum pname,
+                                            const GLfloat *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", target,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterfv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterfv(context, targetPacked, pname, params))
+        {
+            context->texParameterfv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameteriContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLenum pname,
+                                           GLint param)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameteri>(targetPacked, pname, param);
+
+        if (context->skipValidation() || ValidateTexParameteri(context, targetPacked, pname, param))
+        {
+            context->texParameteri(targetPacked, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterivContextANGLE(GLeglContext ctx,
+                                            GLenum target,
+                                            GLenum pname,
+                                            const GLint *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLint *params = 0x%0.8p)", target,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameteriv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameteriv(context, targetPacked, pname, params))
+        {
+            context->texParameteriv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterxContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLenum pname,
+                                           GLfixed param)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfixed param = 0x%X)", target, pname,
+          param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterx>(targetPacked, pname, param);
+
+        if (context->skipValidation() || ValidateTexParameterx(context, targetPacked, pname, param))
+        {
+            context->texParameterx(targetPacked, pname, param);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterxvContextANGLE(GLeglContext ctx,
+                                            GLenum target,
+                                            GLenum pname,
+                                            const GLfixed *params)
+{
+    EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLfixed *params = 0x%0.8p)", target,
+          pname, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterxv>(targetPacked, pname, params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterxv(context, targetPacked, pname, params))
+        {
+            context->texParameterxv(targetPacked, pname, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexStorage1DEXTContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLsizei levels,
+                                             GLenum internalformat,
+                                             GLsizei width)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d)",
+        target, levels, internalformat, width);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TexStorage1DEXT>(target, levels, internalformat, width);
+
+        if (context->skipValidation() ||
+            ValidateTexStorage1DEXT(context, target, levels, internalformat, width))
+        {
+            context->texStorage1D(target, levels, internalformat, width);
+        }
+    }
+}
+
+void GL_APIENTRY TexStorage2DContextANGLE(GLeglContext ctx,
+                                          GLenum target,
+                                          GLsizei levels,
+                                          GLenum internalformat,
+                                          GLsizei width,
+                                          GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d)",
+        target, levels, internalformat, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexStorage2D>(targetPacked, levels, internalformat, width,
+                                                        height);
+
+        if (context->skipValidation() ||
+            ValidateTexStorage2D(context, targetPacked, levels, internalformat, width, height))
+        {
+            context->texStorage2D(targetPacked, levels, internalformat, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY TexStorage2DEXTContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLsizei levels,
+                                             GLenum internalformat,
+                                             GLsizei width,
+                                             GLsizei height)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d)",
+        target, levels, internalformat, width, height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexStorage2DEXT>(targetPacked, levels, internalformat,
+                                                           width, height);
+
+        if (context->skipValidation() ||
+            ValidateTexStorage2DEXT(context, targetPacked, levels, internalformat, width, height))
+        {
+            context->texStorage2D(targetPacked, levels, internalformat, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY TexStorage2DMultisampleContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLsizei samples,
+                                                     GLenum internalformat,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLboolean fixedsamplelocations)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width "
+        "= %d, GLsizei height = %d, GLboolean fixedsamplelocations = %u)",
+        target, samples, internalformat, width, height, fixedsamplelocations);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexStorage2DMultisample>(
+            targetPacked, samples, internalformat, width, height, fixedsamplelocations);
+
+        if (context->skipValidation() ||
+            ValidateTexStorage2DMultisample(context, targetPacked, samples, internalformat, width,
+                                            height, fixedsamplelocations))
+        {
+            context->texStorage2DMultisample(targetPacked, samples, internalformat, width, height,
+                                             fixedsamplelocations);
+        }
+    }
+}
+
+void GL_APIENTRY TexStorage3DContextANGLE(GLeglContext ctx,
+                                          GLenum target,
+                                          GLsizei levels,
+                                          GLenum internalformat,
+                                          GLsizei width,
+                                          GLsizei height,
+                                          GLsizei depth)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLsizei depth = %d)",
+        target, levels, internalformat, width, height, depth);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexStorage3D>(targetPacked, levels, internalformat, width,
+                                                        height, depth);
+
+        if (context->skipValidation() || ValidateTexStorage3D(context, targetPacked, levels,
+                                                              internalformat, width, height, depth))
+        {
+            context->texStorage3D(targetPacked, levels, internalformat, width, height, depth);
+        }
+    }
+}
+
+void GL_APIENTRY TexStorage3DEXTContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLsizei levels,
+                                             GLenum internalformat,
+                                             GLsizei width,
+                                             GLsizei height,
+                                             GLsizei depth)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLsizei depth = %d)",
+        target, levels, internalformat, width, height, depth);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexStorage3DEXT>(targetPacked, levels, internalformat,
+                                                           width, height, depth);
+
+        if (context->skipValidation() ||
+            ValidateTexStorage3DEXT(context, targetPacked, levels, internalformat, width, height,
+                                    depth))
+        {
+            context->texStorage3D(targetPacked, levels, internalformat, width, height, depth);
+        }
+    }
+}
+
+void GL_APIENTRY TexSubImage2DContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLint level,
+                                           GLint xoffset,
+                                           GLint yoffset,
+                                           GLsizei width,
+                                           GLsizei height,
+                                           GLenum format,
+                                           GLenum type,
+                                           const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLsizei "
+        "width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, const void "
+        "*pixels = 0x%0.8p)",
+        target, level, xoffset, yoffset, width, height, format, type, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::TexSubImage2D>(targetPacked, level, xoffset, yoffset,
+                                                         width, height, format, type, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexSubImage2D(context, targetPacked, level, xoffset, yoffset, width, height,
+                                  format, type, pixels))
+        {
+            context->texSubImage2D(targetPacked, level, xoffset, yoffset, width, height, format,
+                                   type, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexSubImage3DContextANGLE(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)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+        "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+        "= 0x%X, GLenum type = 0x%X, const void *pixels = 0x%0.8p)",
+        target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexSubImage3D>(targetPacked, level, xoffset, yoffset,
+                                                         zoffset, width, height, depth, format,
+                                                         type, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexSubImage3D(context, targetPacked, level, xoffset, yoffset, zoffset, width,
+                                  height, depth, format, type, pixels))
+        {
+            context->texSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width, height,
+                                   depth, format, type, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TransformFeedbackVaryingsContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLsizei count,
+                                                       const GLchar *const *varyings,
+                                                       GLenum bufferMode)
+{
+    EVENT(
+        "(GLuint program = %u, GLsizei count = %d, const GLchar *const*varyings = 0x%0.8p, GLenum "
+        "bufferMode = 0x%X)",
+        program, count, varyings, bufferMode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::TransformFeedbackVaryings>(program, count, varyings,
+                                                                     bufferMode);
+
+        if (context->skipValidation() ||
+            ValidateTransformFeedbackVaryings(context, program, count, varyings, bufferMode))
+        {
+            context->transformFeedbackVaryings(program, count, varyings, bufferMode);
+        }
+    }
+}
+
+void GL_APIENTRY TranslatefContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z)
+{
+    EVENT("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Translatef>(x, y, z);
+
+        if (context->skipValidation() || ValidateTranslatef(context, x, y, z))
+        {
+            context->translatef(x, y, z);
+        }
+    }
+}
+
+void GL_APIENTRY TranslatexContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z)
+{
+    EVENT("(GLfixed x = 0x%X, GLfixed y = 0x%X, GLfixed z = 0x%X)", x, y, z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Translatex>(x, y, z);
+
+        if (context->skipValidation() || ValidateTranslatex(context, x, y, z))
+        {
+            context->translatex(x, y, z);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform1fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0)
+{
+    EVENT("(GLint location = %d, GLfloat v0 = %f)", location, v0);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform1f>(location, v0);
+
+        if (context->skipValidation() || ValidateUniform1f(context, location, v0))
+        {
+            context->uniform1f(location, v0);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform1fvContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLfloat *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform1fv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform1fv(context, location, count, value))
+        {
+            context->uniform1fv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform1iContextANGLE(GLeglContext ctx, GLint location, GLint v0)
+{
+    EVENT("(GLint location = %d, GLint v0 = %d)", location, v0);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform1i>(location, v0);
+
+        if (context->skipValidation() || ValidateUniform1i(context, location, v0))
+        {
+            context->uniform1i(location, v0);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform1ivContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform1iv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform1iv(context, location, count, value))
+        {
+            context->uniform1iv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform1uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0)
+{
+    EVENT("(GLint location = %d, GLuint v0 = %u)", location, v0);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform1ui>(location, v0);
+
+        if (context->skipValidation() || ValidateUniform1ui(context, location, v0))
+        {
+            context->uniform1ui(location, v0);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform1uivContextANGLE(GLeglContext ctx,
+                                         GLint location,
+                                         GLsizei count,
+                                         const GLuint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform1uiv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform1uiv(context, location, count, value))
+        {
+            context->uniform1uiv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform2fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1)
+{
+    EVENT("(GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f)", location, v0, v1);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform2f>(location, v0, v1);
+
+        if (context->skipValidation() || ValidateUniform2f(context, location, v0, v1))
+        {
+            context->uniform2f(location, v0, v1);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform2fvContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLfloat *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform2fv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform2fv(context, location, count, value))
+        {
+            context->uniform2fv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform2iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1)
+{
+    EVENT("(GLint location = %d, GLint v0 = %d, GLint v1 = %d)", location, v0, v1);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform2i>(location, v0, v1);
+
+        if (context->skipValidation() || ValidateUniform2i(context, location, v0, v1))
+        {
+            context->uniform2i(location, v0, v1);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform2ivContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform2iv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform2iv(context, location, count, value))
+        {
+            context->uniform2iv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform2uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1)
+{
+    EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u)", location, v0, v1);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform2ui>(location, v0, v1);
+
+        if (context->skipValidation() || ValidateUniform2ui(context, location, v0, v1))
+        {
+            context->uniform2ui(location, v0, v1);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform2uivContextANGLE(GLeglContext ctx,
+                                         GLint location,
+                                         GLsizei count,
+                                         const GLuint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform2uiv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform2uiv(context, location, count, value))
+        {
+            context->uniform2uiv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY
+Uniform3fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+    EVENT("(GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = %f)", location, v0,
+          v1, v2);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform3f>(location, v0, v1, v2);
+
+        if (context->skipValidation() || ValidateUniform3f(context, location, v0, v1, v2))
+        {
+            context->uniform3f(location, v0, v1, v2);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform3fvContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLfloat *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform3fv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform3fv(context, location, count, value))
+        {
+            context->uniform3fv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY
+Uniform3iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2)
+{
+    EVENT("(GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d)", location, v0, v1,
+          v2);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform3i>(location, v0, v1, v2);
+
+        if (context->skipValidation() || ValidateUniform3i(context, location, v0, v1, v2))
+        {
+            context->uniform3i(location, v0, v1, v2);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform3ivContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform3iv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform3iv(context, location, count, value))
+        {
+            context->uniform3iv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY
+Uniform3uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+    EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = %u)", location, v0, v1,
+          v2);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform3ui>(location, v0, v1, v2);
+
+        if (context->skipValidation() || ValidateUniform3ui(context, location, v0, v1, v2))
+        {
+            context->uniform3ui(location, v0, v1, v2);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform3uivContextANGLE(GLeglContext ctx,
+                                         GLint location,
+                                         GLsizei count,
+                                         const GLuint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform3uiv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform3uiv(context, location, count, value))
+        {
+            context->uniform3uiv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform4fContextANGLE(GLeglContext ctx,
+                                       GLint location,
+                                       GLfloat v0,
+                                       GLfloat v1,
+                                       GLfloat v2,
+                                       GLfloat v3)
+{
+    EVENT(
+        "(GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = %f, GLfloat v3 = %f)",
+        location, v0, v1, v2, v3);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform4f>(location, v0, v1, v2, v3);
+
+        if (context->skipValidation() || ValidateUniform4f(context, location, v0, v1, v2, v3))
+        {
+            context->uniform4f(location, v0, v1, v2, v3);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform4fvContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLfloat *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform4fv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform4fv(context, location, count, value))
+        {
+            context->uniform4fv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY
+Uniform4iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+    EVENT("(GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d, GLint v3 = %d)",
+          location, v0, v1, v2, v3);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform4i>(location, v0, v1, v2, v3);
+
+        if (context->skipValidation() || ValidateUniform4i(context, location, v0, v1, v2, v3))
+        {
+            context->uniform4i(location, v0, v1, v2, v3);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform4ivContextANGLE(GLeglContext ctx,
+                                        GLint location,
+                                        GLsizei count,
+                                        const GLint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform4iv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform4iv(context, location, count, value))
+        {
+            context->uniform4iv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY
+Uniform4uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+    EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = %u, GLuint v3 = %u)",
+          location, v0, v1, v2, v3);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform4ui>(location, v0, v1, v2, v3);
+
+        if (context->skipValidation() || ValidateUniform4ui(context, location, v0, v1, v2, v3))
+        {
+            context->uniform4ui(location, v0, v1, v2, v3);
+        }
+    }
+}
+
+void GL_APIENTRY Uniform4uivContextANGLE(GLeglContext ctx,
+                                         GLint location,
+                                         GLsizei count,
+                                         const GLuint *value)
+{
+    EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+          count, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Uniform4uiv>(location, count, value);
+
+        if (context->skipValidation() || ValidateUniform4uiv(context, location, count, value))
+        {
+            context->uniform4uiv(location, count, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformBlockBindingContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLuint uniformBlockIndex,
+                                                 GLuint uniformBlockBinding)
+{
+    EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLuint uniformBlockBinding = %u)",
+          program, uniformBlockIndex, uniformBlockBinding);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformBlockBinding>(program, uniformBlockIndex,
+                                                               uniformBlockBinding);
+
+        if (context->skipValidation() ||
+            ValidateUniformBlockBinding(context, program, uniformBlockIndex, uniformBlockBinding))
+        {
+            context->uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix2fvContextANGLE(GLeglContext ctx,
+                                              GLint location,
+                                              GLsizei count,
+                                              GLboolean transpose,
+                                              const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix2fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix2fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix2fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix2x3fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix2x3fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix2x3fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix2x3fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix2x4fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix2x4fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix2x4fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix2x4fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix3fvContextANGLE(GLeglContext ctx,
+                                              GLint location,
+                                              GLsizei count,
+                                              GLboolean transpose,
+                                              const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix3fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix3fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix3fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix3x2fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix3x2fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix3x2fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix3x2fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix3x4fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix3x4fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix3x4fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix3x4fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix4fvContextANGLE(GLeglContext ctx,
+                                              GLint location,
+                                              GLsizei count,
+                                              GLboolean transpose,
+                                              const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix4fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix4fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix4fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix4x2fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix4x2fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix4x2fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix4x2fv(location, count, transpose, value);
+        }
+    }
+}
+
+void GL_APIENTRY UniformMatrix4x3fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    EVENT(
+        "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+        "= 0x%0.8p)",
+        location, count, transpose, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UniformMatrix4x3fv>(location, count, transpose, value);
+
+        if (context->skipValidation() ||
+            ValidateUniformMatrix4x3fv(context, location, count, transpose, value))
+        {
+            context->uniformMatrix4x3fv(location, count, transpose, value);
+        }
+    }
+}
+
+GLboolean GL_APIENTRY UnmapBufferContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::UnmapBuffer>(targetPacked);
+
+        if (context->skipValidation() || ValidateUnmapBuffer(context, targetPacked))
+        {
+            return context->unmapBuffer(targetPacked);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::UnmapBuffer, GLboolean>();
+}
+
+GLboolean GL_APIENTRY UnmapBufferOESContextANGLE(GLeglContext ctx, GLenum target)
+{
+    EVENT("(GLenum target = 0x%X)", target);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::UnmapBufferOES>(targetPacked);
+
+        if (context->skipValidation() || ValidateUnmapBufferOES(context, targetPacked))
+        {
+            return context->unmapBuffer(targetPacked);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::UnmapBufferOES, GLboolean>();
+}
+
+void GL_APIENTRY UseProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    EVENT("(GLuint program = %u)", program);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UseProgram>(program);
+
+        if (context->skipValidation() || ValidateUseProgram(context, program))
+        {
+            context->useProgram(program);
+        }
+    }
+}
+
+void GL_APIENTRY UseProgramStagesContextANGLE(GLeglContext ctx,
+                                              GLuint pipeline,
+                                              GLbitfield stages,
+                                              GLuint program)
+{
+    EVENT("(GLuint pipeline = %u, GLbitfield stages = 0x%X, GLuint program = %u)", pipeline, stages,
+          program);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::UseProgramStages>(pipeline, stages, program);
+
+        if (context->skipValidation() ||
+            ValidateUseProgramStages(context, pipeline, stages, program))
+        {
+            context->useProgramStages(pipeline, stages, program);
+        }
+    }
+}
+
+void GL_APIENTRY ValidateProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    EVENT("(GLuint program = %u)", program);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ValidateProgram>(program);
+
+        if (context->skipValidation() || ValidateValidateProgram(context, program))
+        {
+            context->validateProgram(program);
+        }
+    }
+}
+
+void GL_APIENTRY ValidateProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline)
+{
+    EVENT("(GLuint pipeline = %u)", pipeline);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ValidateProgramPipeline>(pipeline);
+
+        if (context->skipValidation() || ValidateValidateProgramPipeline(context, pipeline))
+        {
+            context->validateProgramPipeline(pipeline);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttrib1fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x)
+{
+    EVENT("(GLuint index = %u, GLfloat x = %f)", index, x);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib1f>(index, x);
+
+        if (context->skipValidation() || ValidateVertexAttrib1f(context, index, x))
+        {
+            context->vertexAttrib1f(index, x);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttrib1fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib1fv>(index, v);
+
+        if (context->skipValidation() || ValidateVertexAttrib1fv(context, index, v))
+        {
+            context->vertexAttrib1fv(index, v);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttrib2fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y)
+{
+    EVENT("(GLuint index = %u, GLfloat x = %f, GLfloat y = %f)", index, x, y);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib2f>(index, x, y);
+
+        if (context->skipValidation() || ValidateVertexAttrib2f(context, index, x, y))
+        {
+            context->vertexAttrib2f(index, x, y);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttrib2fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib2fv>(index, v);
+
+        if (context->skipValidation() || ValidateVertexAttrib2fv(context, index, v))
+        {
+            context->vertexAttrib2fv(index, v);
+        }
+    }
+}
+
+void GL_APIENTRY
+VertexAttrib3fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z)
+{
+    EVENT("(GLuint index = %u, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib3f>(index, x, y, z);
+
+        if (context->skipValidation() || ValidateVertexAttrib3f(context, index, x, y, z))
+        {
+            context->vertexAttrib3f(index, x, y, z);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttrib3fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib3fv>(index, v);
+
+        if (context->skipValidation() || ValidateVertexAttrib3fv(context, index, v))
+        {
+            context->vertexAttrib3fv(index, v);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttrib4fContextANGLE(GLeglContext ctx,
+                                            GLuint index,
+                                            GLfloat x,
+                                            GLfloat y,
+                                            GLfloat z,
+                                            GLfloat w)
+{
+    EVENT("(GLuint index = %u, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)",
+          index, x, y, z, w);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib4f>(index, x, y, z, w);
+
+        if (context->skipValidation() || ValidateVertexAttrib4f(context, index, x, y, z, w))
+        {
+            context->vertexAttrib4f(index, x, y, z, w);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttrib4fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttrib4fv>(index, v);
+
+        if (context->skipValidation() || ValidateVertexAttrib4fv(context, index, v))
+        {
+            context->vertexAttrib4fv(index, v);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribBindingContextANGLE(GLeglContext ctx,
+                                                 GLuint attribindex,
+                                                 GLuint bindingindex)
+{
+    EVENT("(GLuint attribindex = %u, GLuint bindingindex = %u)", attribindex, bindingindex);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribBinding>(attribindex, bindingindex);
+
+        if (context->skipValidation() ||
+            ValidateVertexAttribBinding(context, attribindex, bindingindex))
+        {
+            context->vertexAttribBinding(attribindex, bindingindex);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribDivisorContextANGLE(GLeglContext ctx, GLuint index, GLuint divisor)
+{
+    EVENT("(GLuint index = %u, GLuint divisor = %u)", index, divisor);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribDivisor>(index, divisor);
+
+        if (context->skipValidation() || ValidateVertexAttribDivisor(context, index, divisor))
+        {
+            context->vertexAttribDivisor(index, divisor);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribDivisorANGLEContextANGLE(GLeglContext ctx,
+                                                      GLuint index,
+                                                      GLuint divisor)
+{
+    EVENT("(GLuint index = %u, GLuint divisor = %u)", index, divisor);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribDivisorANGLE>(index, divisor);
+
+        if (context->skipValidation() || ValidateVertexAttribDivisorANGLE(context, index, divisor))
+        {
+            context->vertexAttribDivisor(index, divisor);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribFormatContextANGLE(GLeglContext ctx,
+                                                GLuint attribindex,
+                                                GLint size,
+                                                GLenum type,
+                                                GLboolean normalized,
+                                                GLuint relativeoffset)
+{
+    EVENT(
+        "(GLuint attribindex = %u, GLint size = %d, GLenum type = 0x%X, GLboolean normalized = %u, "
+        "GLuint relativeoffset = %u)",
+        attribindex, size, type, normalized, relativeoffset);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribFormat>(attribindex, size, type, normalized,
+                                                              relativeoffset);
+
+        if (context->skipValidation() ||
+            ValidateVertexAttribFormat(context, attribindex, size, type, normalized,
+                                       relativeoffset))
+        {
+            context->vertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
+        }
+    }
+}
+
+void GL_APIENTRY
+VertexAttribI4iContextANGLE(GLeglContext ctx, GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+    EVENT("(GLuint index = %u, GLint x = %d, GLint y = %d, GLint z = %d, GLint w = %d)", index, x,
+          y, z, w);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribI4i>(index, x, y, z, w);
+
+        if (context->skipValidation() || ValidateVertexAttribI4i(context, index, x, y, z, w))
+        {
+            context->vertexAttribI4i(index, x, y, z, w);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribI4ivContextANGLE(GLeglContext ctx, GLuint index, const GLint *v)
+{
+    EVENT("(GLuint index = %u, const GLint *v = 0x%0.8p)", index, v);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribI4iv>(index, v);
+
+        if (context->skipValidation() || ValidateVertexAttribI4iv(context, index, v))
+        {
+            context->vertexAttribI4iv(index, v);
+        }
+    }
+}
+
+void GL_APIENTRY
+VertexAttribI4uiContextANGLE(GLeglContext ctx, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+    EVENT("(GLuint index = %u, GLuint x = %u, GLuint y = %u, GLuint z = %u, GLuint w = %u)", index,
+          x, y, z, w);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribI4ui>(index, x, y, z, w);
+
+        if (context->skipValidation() || ValidateVertexAttribI4ui(context, index, x, y, z, w))
+        {
+            context->vertexAttribI4ui(index, x, y, z, w);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribI4uivContextANGLE(GLeglContext ctx, GLuint index, const GLuint *v)
+{
+    EVENT("(GLuint index = %u, const GLuint *v = 0x%0.8p)", index, v);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribI4uiv>(index, v);
+
+        if (context->skipValidation() || ValidateVertexAttribI4uiv(context, index, v))
+        {
+            context->vertexAttribI4uiv(index, v);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribIFormatContextANGLE(GLeglContext ctx,
+                                                 GLuint attribindex,
+                                                 GLint size,
+                                                 GLenum type,
+                                                 GLuint relativeoffset)
+{
+    EVENT(
+        "(GLuint attribindex = %u, GLint size = %d, GLenum type = 0x%X, GLuint relativeoffset = "
+        "%u)",
+        attribindex, size, type, relativeoffset);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribIFormat>(attribindex, size, type,
+                                                               relativeoffset);
+
+        if (context->skipValidation() ||
+            ValidateVertexAttribIFormat(context, attribindex, size, type, relativeoffset))
+        {
+            context->vertexAttribIFormat(attribindex, size, type, relativeoffset);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribIPointerContextANGLE(GLeglContext ctx,
+                                                  GLuint index,
+                                                  GLint size,
+                                                  GLenum type,
+                                                  GLsizei stride,
+                                                  const void *pointer)
+{
+    EVENT(
+        "(GLuint index = %u, GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const void "
+        "*pointer = 0x%0.8p)",
+        index, size, type, stride, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribIPointer>(index, size, type, stride, pointer);
+
+        if (context->skipValidation() ||
+            ValidateVertexAttribIPointer(context, index, size, type, stride, pointer))
+        {
+            context->vertexAttribIPointer(index, size, type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY VertexAttribPointerContextANGLE(GLeglContext ctx,
+                                                 GLuint index,
+                                                 GLint size,
+                                                 GLenum type,
+                                                 GLboolean normalized,
+                                                 GLsizei stride,
+                                                 const void *pointer)
+{
+    EVENT(
+        "(GLuint index = %u, GLint size = %d, GLenum type = 0x%X, GLboolean normalized = %u, "
+        "GLsizei stride = %d, const void *pointer = 0x%0.8p)",
+        index, size, type, normalized, stride, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexAttribPointer>(index, size, type, normalized,
+                                                               stride, pointer);
+
+        if (context->skipValidation() ||
+            ValidateVertexAttribPointer(context, index, size, type, normalized, stride, pointer))
+        {
+            context->vertexAttribPointer(index, size, type, normalized, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY VertexBindingDivisorContextANGLE(GLeglContext ctx,
+                                                  GLuint bindingindex,
+                                                  GLuint divisor)
+{
+    EVENT("(GLuint bindingindex = %u, GLuint divisor = %u)", bindingindex, divisor);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexBindingDivisor>(bindingindex, divisor);
+
+        if (context->skipValidation() ||
+            ValidateVertexBindingDivisor(context, bindingindex, divisor))
+        {
+            context->vertexBindingDivisor(bindingindex, divisor);
+        }
+    }
+}
+
+void GL_APIENTRY VertexPointerContextANGLE(GLeglContext ctx,
+                                           GLint size,
+                                           GLenum type,
+                                           GLsizei stride,
+                                           const void *pointer)
+{
+    EVENT(
+        "(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const void *pointer = 0x%0.8p)",
+        size, type, stride, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::VertexPointer>(size, type, stride, pointer);
+
+        if (context->skipValidation() ||
+            ValidateVertexPointer(context, size, type, stride, pointer))
+        {
+            context->vertexPointer(size, type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY
+ViewportContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+    EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width,
+          height);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::Viewport>(x, y, width, height);
+
+        if (context->skipValidation() || ValidateViewport(context, x, y, width, height))
+        {
+            context->viewport(x, y, width, height);
+        }
+    }
+}
+
+void GL_APIENTRY WaitSyncContextANGLE(GLeglContext ctx,
+                                      GLsync sync,
+                                      GLbitfield flags,
+                                      GLuint64 timeout)
+{
+    EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)", sync, flags,
+          timeout);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::WaitSync>(sync, flags, timeout);
+
+        if (context->skipValidation() || ValidateWaitSync(context, sync, flags, timeout))
+        {
+            context->waitSync(sync, flags, timeout);
+        }
+    }
+}
+
+void GL_APIENTRY WeightPointerOESContextANGLE(GLeglContext ctx,
+                                              GLint size,
+                                              GLenum type,
+                                              GLsizei stride,
+                                              const void *pointer)
+{
+    EVENT(
+        "(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const void *pointer = 0x%0.8p)",
+        size, type, stride, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::WeightPointerOES>(size, type, stride, pointer);
+
+        if (context->skipValidation() ||
+            ValidateWeightPointerOES(context, size, type, stride, pointer))
+        {
+            context->weightPointer(size, type, stride, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY BindUniformLocationCHROMIUMContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         const GLchar *name)
+{
+    EVENT("(GLuint program = %u, GLint location = %d, const GLchar* name = 0x%0.8p)", program,
+          location, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindUniformLocationCHROMIUM>(program, location, name);
+
+        if (context->skipValidation() ||
+            ValidateBindUniformLocationCHROMIUM(context, program, location, name))
+        {
+            context->bindUniformLocation(program, location, name);
+        }
+    }
+}
+
+void GL_APIENTRY CoverageModulationCHROMIUMContextANGLE(GLeglContext ctx, GLenum components)
+{
+    EVENT("(GLenum components = 0x%X)", components);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CoverageModulationCHROMIUM>(components);
+
+        if (context->skipValidation() || ValidateCoverageModulationCHROMIUM(context, components))
+        {
+            context->coverageModulation(components);
+        }
+    }
+}
+
+void GL_APIENTRY MatrixLoadfCHROMIUMContextANGLE(GLeglContext ctx,
+                                                 GLenum matrixMode,
+                                                 const GLfloat *matrix)
+{
+    EVENT("(GLenum matrixMode = 0x%X, const GLfloat * matrix = 0x%0.8p)", matrixMode, matrix);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MatrixLoadfCHROMIUM>(matrixMode, matrix);
+
+        if (context->skipValidation() || ValidateMatrixLoadfCHROMIUM(context, matrixMode, matrix))
+        {
+            context->matrixLoadf(matrixMode, matrix);
+        }
+    }
+}
+
+void GL_APIENTRY MatrixLoadIdentityCHROMIUMContextANGLE(GLeglContext ctx, GLenum matrixMode)
+{
+    EVENT("(GLenum matrixMode = 0x%X)", matrixMode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::MatrixLoadIdentityCHROMIUM>(matrixMode);
+
+        if (context->skipValidation() || ValidateMatrixLoadIdentityCHROMIUM(context, matrixMode))
+        {
+            context->matrixLoadIdentity(matrixMode);
+        }
+    }
+}
+
+GLuint GL_APIENTRY GenPathsCHROMIUMContextANGLE(GLeglContext ctx, GLsizei range)
+{
+    EVENT("(GLsizei range = %d)", range);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GenPathsCHROMIUM>(range);
+
+        if (context->skipValidation() || ValidateGenPathsCHROMIUM(context, range))
+        {
+            return context->genPaths(range);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::GenPathsCHROMIUM, GLuint>();
+}
+
+void GL_APIENTRY DeletePathsCHROMIUMContextANGLE(GLeglContext ctx, GLuint first, GLsizei range)
+{
+    EVENT("(GLuint first = %u, GLsizei range = %d)", first, range);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::DeletePathsCHROMIUM>(first, range);
+
+        if (context->skipValidation() || ValidateDeletePathsCHROMIUM(context, first, range))
+        {
+            context->deletePaths(first, range);
+        }
+    }
+}
+
+GLboolean GL_APIENTRY IsPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path)
+{
+    EVENT("(GLuint path = %u)", path);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::IsPathCHROMIUM>(path);
+
+        if (context->skipValidation() || ValidateIsPathCHROMIUM(context, path))
+        {
+            return context->isPath(path);
+        }
+    }
+
+    return GetDefaultReturnValue<EntryPoint::IsPathCHROMIUM, GLboolean>();
+}
+
+void GL_APIENTRY PathCommandsCHROMIUMContextANGLE(GLeglContext ctx,
+                                                  GLuint path,
+                                                  GLsizei numCommands,
+                                                  const GLubyte *commands,
+                                                  GLsizei numCoords,
+                                                  GLenum coordType,
+                                                  const void *coords)
+{
+    EVENT(
+        "(GLuint path = %u, GLsizei numCommands = %d, const GLubyte * commands = 0x%0.8p, GLsizei "
+        "numCoords = %d, GLenum coordType = 0x%X, const void* coords = 0x%0.8p)",
+        path, numCommands, commands, numCoords, coordType, coords);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PathCommandsCHROMIUM>(path, numCommands, commands,
+                                                                numCoords, coordType, coords);
+
+        if (context->skipValidation() ||
+            ValidatePathCommandsCHROMIUM(context, path, numCommands, commands, numCoords, coordType,
+                                         coords))
+        {
+            context->pathCommands(path, numCommands, commands, numCoords, coordType, coords);
+        }
+    }
+}
+
+void GL_APIENTRY PathParameterfCHROMIUMContextANGLE(GLeglContext ctx,
+                                                    GLuint path,
+                                                    GLenum pname,
+                                                    GLfloat value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLfloat value = %f)", path, pname, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PathParameterfCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidatePathParameterfCHROMIUM(context, path, pname, value))
+        {
+            context->pathParameterf(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY PathParameteriCHROMIUMContextANGLE(GLeglContext ctx,
+                                                    GLuint path,
+                                                    GLenum pname,
+                                                    GLint value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLint value = %d)", path, pname, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PathParameteriCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidatePathParameteriCHROMIUM(context, path, pname, value))
+        {
+            context->pathParameteri(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY GetPathParameterfvCHROMIUMContextANGLE(GLeglContext ctx,
+                                                        GLuint path,
+                                                        GLenum pname,
+                                                        GLfloat *value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLfloat * value = 0x%0.8p)", path, pname, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetPathParameterfvCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidateGetPathParameterfvCHROMIUM(context, path, pname, value))
+        {
+            context->getPathParameterfv(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY GetPathParameterivCHROMIUMContextANGLE(GLeglContext ctx,
+                                                        GLuint path,
+                                                        GLenum pname,
+                                                        GLint *value)
+{
+    EVENT("(GLuint path = %u, GLenum pname = 0x%X, GLint * value = 0x%0.8p)", path, pname, value);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetPathParameterivCHROMIUM>(path, pname, value);
+
+        if (context->skipValidation() ||
+            ValidateGetPathParameterivCHROMIUM(context, path, pname, value))
+        {
+            context->getPathParameteriv(path, pname, value);
+        }
+    }
+}
+
+void GL_APIENTRY PathStencilFuncCHROMIUMContextANGLE(GLeglContext ctx,
+                                                     GLenum func,
+                                                     GLint ref,
+                                                     GLuint mask)
+{
+    EVENT("(GLenum func = 0x%X, GLint ref = %d, GLuint mask = %u)", func, ref, mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::PathStencilFuncCHROMIUM>(func, ref, mask);
+
+        if (context->skipValidation() || ValidatePathStencilFuncCHROMIUM(context, func, ref, mask))
+        {
+            context->pathStencilFunc(func, ref, mask);
+        }
+    }
+}
+
+void GL_APIENTRY StencilFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                     GLuint path,
+                                                     GLenum fillMode,
+                                                     GLuint mask)
+{
+    EVENT("(GLuint path = %u, GLenum fillMode = 0x%X, GLuint mask = %u)", path, fillMode, mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilFillPathCHROMIUM>(path, fillMode, mask);
+
+        if (context->skipValidation() ||
+            ValidateStencilFillPathCHROMIUM(context, path, fillMode, mask))
+        {
+            context->stencilFillPath(path, fillMode, mask);
+        }
+    }
+}
+
+void GL_APIENTRY StencilStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                       GLuint path,
+                                                       GLint reference,
+                                                       GLuint mask)
+{
+    EVENT("(GLuint path = %u, GLint reference = %d, GLuint mask = %u)", path, reference, mask);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilStrokePathCHROMIUM>(path, reference, mask);
+
+        if (context->skipValidation() ||
+            ValidateStencilStrokePathCHROMIUM(context, path, reference, mask))
+        {
+            context->stencilStrokePath(path, reference, mask);
+        }
+    }
+}
+
+void GL_APIENTRY CoverFillPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path, GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLenum coverMode = 0x%X)", path, coverMode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CoverFillPathCHROMIUM>(path, coverMode);
+
+        if (context->skipValidation() || ValidateCoverFillPathCHROMIUM(context, path, coverMode))
+        {
+            context->coverFillPath(path, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY CoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                     GLuint path,
+                                                     GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLenum coverMode = 0x%X)", path, coverMode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CoverStrokePathCHROMIUM>(path, coverMode);
+
+        if (context->skipValidation() || ValidateCoverStrokePathCHROMIUM(context, path, coverMode))
+        {
+            context->coverStrokePath(path, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY StencilThenCoverFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                              GLuint path,
+                                                              GLenum fillMode,
+                                                              GLuint mask,
+                                                              GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLenum fillMode = 0x%X, GLuint mask = %u, GLenum coverMode = 0x%X)",
+          path, fillMode, mask, coverMode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilThenCoverFillPathCHROMIUM>(path, fillMode, mask,
+                                                                            coverMode);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverFillPathCHROMIUM(context, path, fillMode, mask, coverMode))
+        {
+            context->stencilThenCoverFillPath(path, fillMode, mask, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY StencilThenCoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                GLuint path,
+                                                                GLint reference,
+                                                                GLuint mask,
+                                                                GLenum coverMode)
+{
+    EVENT("(GLuint path = %u, GLint reference = %d, GLuint mask = %u, GLenum coverMode = 0x%X)",
+          path, reference, mask, coverMode);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilThenCoverStrokePathCHROMIUM>(path, reference, mask,
+                                                                              coverMode);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverStrokePathCHROMIUM(context, path, reference, mask, coverMode))
+        {
+            context->stencilThenCoverStrokePath(path, reference, mask, coverMode);
+        }
+    }
+}
+
+void GL_APIENTRY CoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                            GLsizei numPath,
+                                                            GLenum pathNameType,
+                                                            const void *paths,
+                                                            GLuint pathBase,
+                                                            GLenum coverMode,
+                                                            GLenum transformType,
+                                                            const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPath = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum coverMode = 0x%X, GLenum transformType = 0x%X, const GLfloat * "
+        "transformValues = 0x%0.8p)",
+        numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CoverFillPathInstancedCHROMIUM>(
+            numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+        if (context->skipValidation() ||
+            ValidateCoverFillPathInstancedCHROMIUM(context, numPath, pathNameType, paths, pathBase,
+                                                   coverMode, transformType, transformValues))
+        {
+            context->coverFillPathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
+                                            transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY CoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                              GLsizei numPath,
+                                                              GLenum pathNameType,
+                                                              const void *paths,
+                                                              GLuint pathBase,
+                                                              GLenum coverMode,
+                                                              GLenum transformType,
+                                                              const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPath = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum coverMode = 0x%X, GLenum transformType = 0x%X, const GLfloat * "
+        "transformValues = 0x%0.8p)",
+        numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CoverStrokePathInstancedCHROMIUM>(
+            numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+        if (context->skipValidation() || ValidateCoverStrokePathInstancedCHROMIUM(
+                                             context, numPath, pathNameType, paths, pathBase,
+                                             coverMode, transformType, transformValues))
+        {
+            context->coverStrokePathInstanced(numPath, pathNameType, paths, pathBase, coverMode,
+                                              transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY StencilStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                GLsizei numPath,
+                                                                GLenum pathNameType,
+                                                                const void *paths,
+                                                                GLuint pathBase,
+                                                                GLint reference,
+                                                                GLuint mask,
+                                                                GLenum transformType,
+                                                                const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPath = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLint reference = %d, GLuint mask = %u, GLenum transformType = 0x%X, const "
+        "GLfloat * transformValues = 0x%0.8p)",
+        numPath, pathNameType, paths, pathBase, reference, mask, transformType, transformValues);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilStrokePathInstancedCHROMIUM>(
+            numPath, pathNameType, paths, pathBase, reference, mask, transformType,
+            transformValues);
+
+        if (context->skipValidation() || ValidateStencilStrokePathInstancedCHROMIUM(
+                                             context, numPath, pathNameType, paths, pathBase,
+                                             reference, mask, transformType, transformValues))
+        {
+            context->stencilStrokePathInstanced(numPath, pathNameType, paths, pathBase, reference,
+                                                mask, transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY StencilFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                              GLsizei numPaths,
+                                                              GLenum pathNameType,
+                                                              const void *paths,
+                                                              GLuint pathBase,
+                                                              GLenum fillMode,
+                                                              GLuint mask,
+                                                              GLenum transformType,
+                                                              const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPaths = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum fillMode = 0x%X, GLuint mask = %u, GLenum transformType = 0x%X, "
+        "const GLfloat * transformValues = 0x%0.8p)",
+        numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilFillPathInstancedCHROMIUM>(
+            numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType,
+            transformValues);
+
+        if (context->skipValidation() || ValidateStencilFillPathInstancedCHROMIUM(
+                                             context, numPaths, pathNameType, paths, pathBase,
+                                             fillMode, mask, transformType, transformValues))
+        {
+            context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBase, fillMode,
+                                              mask, transformType, transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY
+StencilThenCoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                      GLsizei numPaths,
+                                                      GLenum pathNameType,
+                                                      const void *paths,
+                                                      GLuint pathBase,
+                                                      GLenum fillMode,
+                                                      GLuint mask,
+                                                      GLenum coverMode,
+                                                      GLenum transformType,
+                                                      const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPaths = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLenum fillMode = 0x%X, GLuint mask = %u, GLenum coverMode = 0x%X, GLenum "
+        "transformType = 0x%X, const GLfloat * transformValues = 0x%0.8p)",
+        numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType,
+        transformValues);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilThenCoverFillPathInstancedCHROMIUM>(
+            numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType,
+            transformValues);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverFillPathInstancedCHROMIUM(
+                context, numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode,
+                transformType, transformValues))
+        {
+            context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths, pathBase,
+                                                       fillMode, mask, coverMode, transformType,
+                                                       transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY
+StencilThenCoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                        GLsizei numPaths,
+                                                        GLenum pathNameType,
+                                                        const void *paths,
+                                                        GLuint pathBase,
+                                                        GLint reference,
+                                                        GLuint mask,
+                                                        GLenum coverMode,
+                                                        GLenum transformType,
+                                                        const GLfloat *transformValues)
+{
+    EVENT(
+        "(GLsizei numPaths = %d, GLenum pathNameType = 0x%X, const void * paths = 0x%0.8p, GLuint "
+        "pathBase = %u, GLint reference = %d, GLuint mask = %u, GLenum coverMode = 0x%X, GLenum "
+        "transformType = 0x%X, const GLfloat * transformValues = 0x%0.8p)",
+        numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType,
+        transformValues);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::StencilThenCoverStrokePathInstancedCHROMIUM>(
+            numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType,
+            transformValues);
+
+        if (context->skipValidation() ||
+            ValidateStencilThenCoverStrokePathInstancedCHROMIUM(
+                context, numPaths, pathNameType, paths, pathBase, reference, mask, coverMode,
+                transformType, transformValues))
+        {
+            context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
+                                                         reference, mask, coverMode, transformType,
+                                                         transformValues);
+        }
+    }
+}
+
+void GL_APIENTRY BindFragmentInputLocationCHROMIUMContextANGLE(GLeglContext ctx,
+                                                               GLuint programs,
+                                                               GLint location,
+                                                               const GLchar *name)
+{
+    EVENT("(GLuint programs = %u, GLint location = %d, const GLchar * name = 0x%0.8p)", programs,
+          location, name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::BindFragmentInputLocationCHROMIUM>(programs, location,
+                                                                             name);
+
+        if (context->skipValidation() ||
+            ValidateBindFragmentInputLocationCHROMIUM(context, programs, location, name))
+        {
+            context->bindFragmentInputLocation(programs, location, name);
+        }
+    }
+}
+
+void GL_APIENTRY ProgramPathFragmentInputGenCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                 GLuint program,
+                                                                 GLint location,
+                                                                 GLenum genMode,
+                                                                 GLint components,
+                                                                 const GLfloat *coeffs)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLenum genMode = 0x%X, GLint components = %d, "
+        "const GLfloat * coeffs = 0x%0.8p)",
+        program, location, genMode, components, coeffs);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ProgramPathFragmentInputGenCHROMIUM>(
+            program, location, genMode, components, coeffs);
+
+        if (context->skipValidation() ||
+            ValidateProgramPathFragmentInputGenCHROMIUM(context, program, location, genMode,
+                                                        components, coeffs))
+        {
+            context->programPathFragmentInputGen(program, location, genMode, components, coeffs);
+        }
+    }
+}
+
+void GL_APIENTRY CopyTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                 GLuint sourceId,
+                                                 GLint sourceLevel,
+                                                 GLenum destTarget,
+                                                 GLuint destId,
+                                                 GLint destLevel,
+                                                 GLint internalFormat,
+                                                 GLenum destType,
+                                                 GLboolean unpackFlipY,
+                                                 GLboolean unpackPremultiplyAlpha,
+                                                 GLboolean unpackUnmultiplyAlpha)
+{
+    EVENT(
+        "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
+        "%u, GLint destLevel = %d, GLint internalFormat = %d, GLenum destType = 0x%X, GLboolean "
+        "unpackFlipY = %u, GLboolean unpackPremultiplyAlpha = %u, GLboolean unpackUnmultiplyAlpha "
+        "= %u)",
+        sourceId, sourceLevel, destTarget, destId, destLevel, internalFormat, destType, unpackFlipY,
+        unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget destTargetPacked = FromGLenum<TextureTarget>(destTarget);
+        context->gatherParams<EntryPoint::CopyTextureCHROMIUM>(
+            sourceId, sourceLevel, destTargetPacked, destId, destLevel, internalFormat, destType,
+            unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+        if (context->skipValidation() ||
+            ValidateCopyTextureCHROMIUM(context, sourceId, sourceLevel, destTargetPacked, destId,
+                                        destLevel, internalFormat, destType, unpackFlipY,
+                                        unpackPremultiplyAlpha, unpackUnmultiplyAlpha))
+        {
+            context->copyTexture(sourceId, sourceLevel, destTargetPacked, destId, destLevel,
+                                 internalFormat, destType, unpackFlipY, unpackPremultiplyAlpha,
+                                 unpackUnmultiplyAlpha);
+        }
+    }
+}
+
+void GL_APIENTRY CopySubTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                    GLuint sourceId,
+                                                    GLint sourceLevel,
+                                                    GLenum destTarget,
+                                                    GLuint destId,
+                                                    GLint destLevel,
+                                                    GLint xoffset,
+                                                    GLint yoffset,
+                                                    GLint x,
+                                                    GLint y,
+                                                    GLint width,
+                                                    GLint height,
+                                                    GLboolean unpackFlipY,
+                                                    GLboolean unpackPremultiplyAlpha,
+                                                    GLboolean unpackUnmultiplyAlpha)
+{
+    EVENT(
+        "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
+        "%u, GLint destLevel = %d, GLint xoffset = %d, GLint yoffset = %d, GLint x = %d, GLint y = "
+        "%d, GLint width = %d, GLint height = %d, GLboolean unpackFlipY = %u, GLboolean "
+        "unpackPremultiplyAlpha = %u, GLboolean unpackUnmultiplyAlpha = %u)",
+        sourceId, sourceLevel, destTarget, destId, destLevel, xoffset, yoffset, x, y, width, height,
+        unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget destTargetPacked = FromGLenum<TextureTarget>(destTarget);
+        context->gatherParams<EntryPoint::CopySubTextureCHROMIUM>(
+            sourceId, sourceLevel, destTargetPacked, destId, destLevel, xoffset, yoffset, x, y,
+            width, height, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+        if (context->skipValidation() ||
+            ValidateCopySubTextureCHROMIUM(context, sourceId, sourceLevel, destTargetPacked, destId,
+                                           destLevel, xoffset, yoffset, x, y, width, height,
+                                           unpackFlipY, unpackPremultiplyAlpha,
+                                           unpackUnmultiplyAlpha))
+        {
+            context->copySubTexture(sourceId, sourceLevel, destTargetPacked, destId, destLevel,
+                                    xoffset, yoffset, x, y, width, height, unpackFlipY,
+                                    unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedCopyTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                           GLuint sourceId,
+                                                           GLuint destId)
+{
+    EVENT("(GLuint sourceId = %u, GLuint destId = %u)", sourceId, destId);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::CompressedCopyTextureCHROMIUM>(sourceId, destId);
+
+        if (context->skipValidation() ||
+            ValidateCompressedCopyTextureCHROMIUM(context, sourceId, destId))
+        {
+            context->compressedCopyTexture(sourceId, destId);
+        }
+    }
+}
+
+void GL_APIENTRY RequestExtensionANGLEContextANGLE(GLeglContext ctx, const GLchar *name)
+{
+    EVENT("(const GLchar * name = 0x%0.8p)", name);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::RequestExtensionANGLE>(name);
+
+        if (context->skipValidation() || ValidateRequestExtensionANGLE(context, name))
+        {
+            context->requestExtension(name);
+        }
+    }
+}
+
+void GL_APIENTRY GetBooleanvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLboolean *params)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLboolean * "
+        "params = 0x%0.8p)",
+        pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetBooleanvRobustANGLE>(pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetBooleanvRobustANGLE(context, pname, bufSize, length, params))
+        {
+            context->getBooleanvRobust(pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLenum target,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferParameterivRobustANGLE>(targetPacked, pname,
+                                                                           bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetBufferParameterivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getBufferParameterivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFloatvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLfloat *params)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLfloat * params "
+        "= 0x%0.8p)",
+        pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFloatvRobustANGLE>(pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetFloatvRobustANGLE(context, pname, bufSize, length, params))
+        {
+            context->getFloatvRobust(pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                            GLenum target,
+                                                                            GLenum attachment,
+                                                                            GLenum pname,
+                                                                            GLsizei bufSize,
+                                                                            GLsizei *length,
+                                                                            GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = "
+        "%d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        target, attachment, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFramebufferAttachmentParameterivRobustANGLE>(
+            target, attachment, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetFramebufferAttachmentParameterivRobustANGLE(context, target, attachment,
+                                                                   pname, bufSize, length, params))
+        {
+            context->getFramebufferAttachmentParameterivRobust(target, attachment, pname, bufSize,
+                                                               length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetIntegervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLint *data)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLint * data = "
+        "0x%0.8p)",
+        pname, bufSize, length, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetIntegervRobustANGLE>(pname, bufSize, length, data);
+
+        if (context->skipValidation() ||
+            ValidateGetIntegervRobustANGLE(context, pname, bufSize, length, data))
+        {
+            context->getIntegervRobust(pname, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        program, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramivRobustANGLE>(program, pname, bufSize, length,
+                                                                   params);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramivRobustANGLE(context, program, pname, bufSize, length, params))
+        {
+            context->getProgramivRobust(program, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetRenderbufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLenum pname,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetRenderbufferParameterivRobustANGLE>(
+            target, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetRenderbufferParameterivRobustANGLE(
+                                             context, target, pname, bufSize, length, params))
+        {
+            context->getRenderbufferParameterivRobust(target, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetShaderivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                    GLuint shader,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLint *params)
+{
+    EVENT(
+        "(GLuint shader = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        shader, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetShaderivRobustANGLE>(shader, pname, bufSize, length,
+                                                                  params);
+
+        if (context->skipValidation() ||
+            ValidateGetShaderivRobustANGLE(context, shader, pname, bufSize, length, params))
+        {
+            context->getShaderivRobust(shader, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLfloat *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterfvRobustANGLE>(targetPacked, pname,
+                                                                        bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterfvRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterfvRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterivRobustANGLE>(targetPacked, pname,
+                                                                        bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLint location,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLfloat *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformfvRobustANGLE>(program, location, bufSize,
+                                                                   length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformfvRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getUniformfvRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLint location,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformivRobustANGLE>(program, location, bufSize,
+                                                                   length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getUniformivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLuint index,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLfloat *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribfvRobustANGLE>(index, pname, bufSize,
+                                                                        length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribfvRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribfvRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLuint index,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLint *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribivRobustANGLE>(index, pname, bufSize,
+                                                                        length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribivRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribivRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribPointervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLuint index,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                void **pointer)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, void ** pointer = 0x%0.8p)",
+        index, pname, bufSize, length, pointer);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribPointervRobustANGLE>(index, pname, bufSize,
+                                                                              length, pointer);
+
+        if (context->skipValidation() || ValidateGetVertexAttribPointervRobustANGLE(
+                                             context, index, pname, bufSize, length, pointer))
+        {
+            context->getVertexAttribPointervRobust(index, pname, bufSize, length, pointer);
+        }
+    }
+}
+
+void GL_APIENTRY ReadPixelsRobustANGLEContextANGLE(GLeglContext ctx,
+                                                   GLint x,
+                                                   GLint y,
+                                                   GLsizei width,
+                                                   GLsizei height,
+                                                   GLenum format,
+                                                   GLenum type,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLsizei *columns,
+                                                   GLsizei *rows,
+                                                   void *pixels)
+{
+    EVENT(
+        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLenum format = "
+        "0x%X, GLenum type = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLsizei * "
+        "columns = 0x%0.8p, GLsizei * rows = 0x%0.8p, void * pixels = 0x%0.8p)",
+        x, y, width, height, format, type, bufSize, length, columns, rows, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ReadPixelsRobustANGLE>(
+            x, y, width, height, format, type, bufSize, length, columns, rows, pixels);
+
+        if (context->skipValidation() ||
+            ValidateReadPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
+                                          length, columns, rows, pixels))
+        {
+            context->readPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
+                                      rows, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLint level,
+                                                   GLint internalformat,
+                                                   GLsizei width,
+                                                   GLsizei height,
+                                                   GLint border,
+                                                   GLenum format,
+                                                   GLenum type,
+                                                   GLsizei bufSize,
+                                                   const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+        "GLsizei height = %d, GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLsizei "
+        "bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, internalformat, width, height, border, format, type, bufSize, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::TexImage2DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, border, format, type, bufSize,
+            pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexImage2DRobustANGLE(context, targetPacked, level, internalformat, width,
+                                          height, border, format, type, bufSize, pixels))
+        {
+            context->texImage2DRobust(targetPacked, level, internalformat, width, height, border,
+                                      format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum pname,
+                                                       GLsizei bufSize,
+                                                       const GLfloat *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLfloat * params "
+        "= 0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterfvRobustANGLE>(targetPacked, pname, bufSize,
+                                                                     params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterfvRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterfvRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum pname,
+                                                       GLsizei bufSize,
+                                                       const GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLint * params = "
+        "0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                     params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterivRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterivRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLint level,
+                                                      GLint xoffset,
+                                                      GLint yoffset,
+                                                      GLsizei width,
+                                                      GLsizei height,
+                                                      GLenum format,
+                                                      GLenum type,
+                                                      GLsizei bufSize,
+                                                      const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLsizei "
+        "width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLsizei "
+        "bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, xoffset, yoffset, width, height, format, type, bufSize, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::TexSubImage2DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, width, height, format, type, bufSize, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexSubImage2DRobustANGLE(context, targetPacked, level, xoffset, yoffset, width,
+                                             height, format, type, bufSize, pixels))
+        {
+            context->texSubImage2DRobust(targetPacked, level, xoffset, yoffset, width, height,
+                                         format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLint level,
+                                                   GLint internalformat,
+                                                   GLsizei width,
+                                                   GLsizei height,
+                                                   GLsizei depth,
+                                                   GLint border,
+                                                   GLenum format,
+                                                   GLenum type,
+                                                   GLsizei bufSize,
+                                                   const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+        "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, GLenum "
+        "type = 0x%X, GLsizei bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, internalformat, width, height, depth, border, format, type, bufSize, pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexImage3DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, depth, border, format, type,
+            bufSize, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexImage3DRobustANGLE(context, targetPacked, level, internalformat, width,
+                                          height, depth, border, format, type, bufSize, pixels))
+        {
+            context->texImage3DRobust(targetPacked, level, internalformat, width, height, depth,
+                                      border, format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY TexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLint level,
+                                                      GLint xoffset,
+                                                      GLint yoffset,
+                                                      GLint zoffset,
+                                                      GLsizei width,
+                                                      GLsizei height,
+                                                      GLsizei depth,
+                                                      GLenum format,
+                                                      GLenum type,
+                                                      GLsizei bufSize,
+                                                      const void *pixels)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+        "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+        "= 0x%X, GLenum type = 0x%X, GLsizei bufSize = %d, const void * pixels = 0x%0.8p)",
+        target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize,
+        pixels);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexSubImage3DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, zoffset, width, height, depth, format, type,
+            bufSize, pixels);
+
+        if (context->skipValidation() ||
+            ValidateTexSubImage3DRobustANGLE(context, targetPacked, level, xoffset, yoffset,
+                                             zoffset, width, height, depth, format, type, bufSize,
+                                             pixels))
+        {
+            context->texSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset, width,
+                                         height, depth, format, type, bufSize, pixels);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLenum target,
+                                                             GLint level,
+                                                             GLenum internalformat,
+                                                             GLsizei width,
+                                                             GLsizei height,
+                                                             GLint border,
+                                                             GLsizei imageSize,
+                                                             GLsizei dataSize,
+                                                             const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, GLsizei dataSize = "
+        "%d, const GLvoid * data = 0x%0.8p)",
+        target, level, internalformat, width, height, border, imageSize, dataSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CompressedTexImage2DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, border, imageSize, dataSize, data);
+
+        if (context->skipValidation() || ValidateCompressedTexImage2DRobustANGLE(
+                                             context, targetPacked, level, internalformat, width,
+                                             height, border, imageSize, dataSize, data))
+        {
+            context->compressedTexImage2DRobust(targetPacked, level, internalformat, width, height,
+                                                border, imageSize, dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLint level,
+                                                                GLsizei xoffset,
+                                                                GLsizei yoffset,
+                                                                GLsizei width,
+                                                                GLsizei height,
+                                                                GLenum format,
+                                                                GLsizei imageSize,
+                                                                GLsizei dataSize,
+                                                                const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLsizei xoffset = %d, GLsizei yoffset = %d, "
+        "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLsizei imageSize = %d, "
+        "GLsizei dataSize = %d, const GLvoid * data = 0x%0.8p)",
+        target, level, xoffset, yoffset, width, height, format, imageSize, dataSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::CompressedTexSubImage2DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, width, height, format, imageSize, dataSize,
+            data);
+
+        if (context->skipValidation() || ValidateCompressedTexSubImage2DRobustANGLE(
+                                             context, targetPacked, level, xoffset, yoffset, width,
+                                             height, format, imageSize, dataSize, data))
+        {
+            context->compressedTexSubImage2DRobust(targetPacked, level, xoffset, yoffset, width,
+                                                   height, format, imageSize, dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLenum target,
+                                                             GLint level,
+                                                             GLenum internalformat,
+                                                             GLsizei width,
+                                                             GLsizei height,
+                                                             GLsizei depth,
+                                                             GLint border,
+                                                             GLsizei imageSize,
+                                                             GLsizei dataSize,
+                                                             const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+        "%d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
+        "GLsizei dataSize = %d, const GLvoid * data = 0x%0.8p)",
+        target, level, internalformat, width, height, depth, border, imageSize, dataSize, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::CompressedTexImage3DRobustANGLE>(
+            targetPacked, level, internalformat, width, height, depth, border, imageSize, dataSize,
+            data);
+
+        if (context->skipValidation() || ValidateCompressedTexImage3DRobustANGLE(
+                                             context, targetPacked, level, internalformat, width,
+                                             height, depth, border, imageSize, dataSize, data))
+        {
+            context->compressedTexImage3DRobust(targetPacked, level, internalformat, width, height,
+                                                depth, border, imageSize, dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY CompressedTexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLint level,
+                                                                GLint xoffset,
+                                                                GLint yoffset,
+                                                                GLint zoffset,
+                                                                GLsizei width,
+                                                                GLsizei height,
+                                                                GLsizei depth,
+                                                                GLenum format,
+                                                                GLsizei imageSize,
+                                                                GLsizei dataSize,
+                                                                const GLvoid *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+        "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+        "= 0x%X, GLsizei imageSize = %d, GLsizei dataSize = %d, const GLvoid * data = 0x%0.8p)",
+        target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, dataSize,
+        data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::CompressedTexSubImage3DRobustANGLE>(
+            targetPacked, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
+            dataSize, data);
+
+        if (context->skipValidation() ||
+            ValidateCompressedTexSubImage3DRobustANGLE(context, targetPacked, level, xoffset,
+                                                       yoffset, zoffset, width, height, depth,
+                                                       format, imageSize, dataSize, data))
+        {
+            context->compressedTexSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset,
+                                                   width, height, depth, format, imageSize,
+                                                   dataSize, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        QueryType targetPacked = FromGLenum<QueryType>(target);
+        context->gatherParams<EntryPoint::GetQueryivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                 length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryivRobustANGLE(context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getQueryivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLuint id,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLuint *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLuint * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjectuivRobustANGLE>(id, pname, bufSize, length,
+                                                                        params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjectuivRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjectuivRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferPointervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          void **params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, void ** params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferPointervRobustANGLE>(targetPacked, pname,
+                                                                        bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetBufferPointervRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getBufferPointervRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetIntegeri_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLuint index,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * data = 0x%0.8p)",
+        target, index, bufSize, length, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetIntegeri_vRobustANGLE>(target, index, bufSize, length,
+                                                                    data);
+
+        if (context->skipValidation() ||
+            ValidateGetIntegeri_vRobustANGLE(context, target, index, bufSize, length, data))
+        {
+            context->getIntegeri_vRobust(target, index, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetInternalformativRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum internalformat,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize "
+        "= %d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        target, internalformat, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetInternalformativRobustANGLE>(
+            target, internalformat, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetInternalformativRobustANGLE(context, target, internalformat, pname, bufSize,
+                                                   length, params))
+        {
+            context->getInternalformativRobust(target, internalformat, pname, bufSize, length,
+                                               params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLuint index,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribIivRobustANGLE>(index, pname, bufSize,
+                                                                         length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribIivRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribIivRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetVertexAttribIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLuint index,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLuint *params)
+{
+    EVENT(
+        "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        index, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetVertexAttribIuivRobustANGLE>(index, pname, bufSize,
+                                                                          length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetVertexAttribIuivRobustANGLE(context, index, pname, bufSize, length, params))
+        {
+            context->getVertexAttribIuivRobust(index, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetUniformuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLuint program,
+                                                      GLint location,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLuint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetUniformuivRobustANGLE>(program, location, bufSize,
+                                                                    length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetUniformuivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getUniformuivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetActiveUniformBlockivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLuint program,
+                                                                GLuint uniformBlockIndex,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLsizei bufSize "
+        "= %d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        program, uniformBlockIndex, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetActiveUniformBlockivRobustANGLE>(
+            program, uniformBlockIndex, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetActiveUniformBlockivRobustANGLE(context, program, uniformBlockIndex, pname,
+                                                       bufSize, length, params))
+        {
+            context->getActiveUniformBlockivRobust(program, uniformBlockIndex, pname, bufSize,
+                                                   length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetInteger64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint64 *data)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLint64 * data = "
+        "0x%0.8p)",
+        pname, bufSize, length, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetInteger64vRobustANGLE>(pname, bufSize, length, data);
+
+        if (context->skipValidation() ||
+            ValidateGetInteger64vRobustANGLE(context, pname, bufSize, length, data))
+        {
+            context->getInteger64vRobust(pname, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetInteger64i_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLuint index,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLint64 *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint64 * data = 0x%0.8p)",
+        target, index, bufSize, length, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetInteger64i_vRobustANGLE>(target, index, bufSize,
+                                                                      length, data);
+
+        if (context->skipValidation() ||
+            ValidateGetInteger64i_vRobustANGLE(context, target, index, bufSize, length, data))
+        {
+            context->getInteger64i_vRobust(target, index, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetBufferParameteri64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLint64 *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint64 * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+        context->gatherParams<EntryPoint::GetBufferParameteri64vRobustANGLE>(
+            targetPacked, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetBufferParameteri64vRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getBufferParameteri64vRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLuint sampler,
+                                                           GLuint pname,
+                                                           GLsizei bufSize,
+                                                           const GLint *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLuint pname = %u, GLsizei bufSize = %d, const GLint * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameterivRobustANGLE>(sampler, pname, bufSize,
+                                                                         param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterivRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLuint sampler,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           const GLfloat *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLfloat * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameterfvRobustANGLE>(sampler, pname, bufSize,
+                                                                         param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterfvRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLuint sampler,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetSamplerParameterivRobustANGLE>(sampler, pname, bufSize,
+                                                                            length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLuint sampler,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLfloat *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetSamplerParameterfvRobustANGLE>(sampler, pname, bufSize,
+                                                                            length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterfvRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterfvRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetFramebufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLuint sampler,
+                                                                  GLenum pname,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  GLint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetFramebufferParameterivRobustANGLE>(
+            sampler, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetFramebufferParameterivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getFramebufferParameterivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetProgramInterfaceivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLuint program,
+                                                              GLenum programInterface,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLenum programInterface = 0x%X, GLenum pname = 0x%X, GLsizei "
+        "bufSize = %d, GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        program, programInterface, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetProgramInterfaceivRobustANGLE>(
+            program, programInterface, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetProgramInterfaceivRobustANGLE(context, program, programInterface, pname,
+                                                     bufSize, length, params))
+        {
+            context->getProgramInterfaceivRobust(program, programInterface, pname, bufSize, length,
+                                                 params);
+        }
+    }
+}
+
+void GL_APIENTRY GetBooleani_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLuint index,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLboolean *data)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLboolean * data = 0x%0.8p)",
+        target, index, bufSize, length, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetBooleani_vRobustANGLE>(target, index, bufSize, length,
+                                                                    data);
+
+        if (context->skipValidation() ||
+            ValidateGetBooleani_vRobustANGLE(context, target, index, bufSize, length, data))
+        {
+            context->getBooleani_vRobust(target, index, bufSize, length, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetMultisamplefvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                         GLenum pname,
+                                                         GLuint index,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLfloat *val)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLuint index = %u, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * val = 0x%0.8p)",
+        pname, index, bufSize, length, val);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetMultisamplefvRobustANGLE>(pname, index, bufSize,
+                                                                       length, val);
+
+        if (context->skipValidation() ||
+            ValidateGetMultisamplefvRobustANGLE(context, pname, index, bufSize, length, val))
+        {
+            context->getMultisamplefvRobust(pname, index, bufSize, length, val);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexLevelParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLint level,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufSize = %d, "
+        "GLsizei * length = 0x%0.8p, GLint * params = 0x%0.8p)",
+        target, level, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::GetTexLevelParameterivRobustANGLE>(
+            targetPacked, level, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexLevelParameterivRobustANGLE(context, targetPacked, level, pname, bufSize,
+                                                      length, params))
+        {
+            context->getTexLevelParameterivRobust(targetPacked, level, pname, bufSize, length,
+                                                  params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexLevelParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLint level,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLfloat *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufSize = %d, "
+        "GLsizei * length = 0x%0.8p, GLfloat * params = 0x%0.8p)",
+        target, level, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureTarget targetPacked = FromGLenum<TextureTarget>(target);
+        context->gatherParams<EntryPoint::GetTexLevelParameterfvRobustANGLE>(
+            targetPacked, level, pname, bufSize, length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetTexLevelParameterfvRobustANGLE(context, targetPacked, level, pname, bufSize,
+                                                      length, params))
+        {
+            context->getTexLevelParameterfvRobust(targetPacked, level, pname, bufSize, length,
+                                                  params);
+        }
+    }
+}
+
+void GL_APIENTRY GetPointervRobustANGLERobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               void **params)
+{
+    EVENT(
+        "(GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, void ** params = "
+        "0x%0.8p)",
+        pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetPointervRobustANGLERobustANGLE>(pname, bufSize, length,
+                                                                             params);
+
+        if (context->skipValidation() ||
+            ValidateGetPointervRobustANGLERobustANGLE(context, pname, bufSize, length, params))
+        {
+            context->getPointervRobustANGLERobust(pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY ReadnPixelsRobustANGLEContextANGLE(GLeglContext ctx,
+                                                    GLint x,
+                                                    GLint y,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLenum format,
+                                                    GLenum type,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLsizei *columns,
+                                                    GLsizei *rows,
+                                                    void *data)
+{
+    EVENT(
+        "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLenum format = "
+        "0x%X, GLenum type = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, GLsizei * "
+        "columns = 0x%0.8p, GLsizei * rows = 0x%0.8p, void * data = 0x%0.8p)",
+        x, y, width, height, format, type, bufSize, length, columns, rows, data);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::ReadnPixelsRobustANGLE>(
+            x, y, width, height, format, type, bufSize, length, columns, rows, data);
+
+        if (context->skipValidation() ||
+            ValidateReadnPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
+                                           length, columns, rows, data))
+        {
+            context->readnPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
+                                       rows, data);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLuint program,
+                                                      GLint location,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLfloat *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLfloat * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetnUniformfvRobustANGLE>(program, location, bufSize,
+                                                                    length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformfvRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getnUniformfvRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLuint program,
+                                                      GLint location,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetnUniformivRobustANGLE>(program, location, bufSize,
+                                                                    length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getnUniformivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetnUniformuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLuint *params)
+{
+    EVENT(
+        "(GLuint program = %u, GLint location = %d, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        program, location, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetnUniformuivRobustANGLE>(program, location, bufSize,
+                                                                     length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetnUniformuivRobustANGLE(context, program, location, bufSize, length, params))
+        {
+            context->getnUniformuivRobust(program, location, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum pname,
+                                                        GLsizei bufSize,
+                                                        const GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLint * params = "
+        "0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterIivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                      params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterIivRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterIivRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY TexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum pname,
+                                                         GLsizei bufSize,
+                                                         const GLuint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLuint * params = "
+        "0x%0.8p)",
+        target, pname, bufSize, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::TexParameterIuivRobustANGLE>(targetPacked, pname, bufSize,
+                                                                       params);
+
+        if (context->skipValidation() ||
+            ValidateTexParameterIuivRobustANGLE(context, targetPacked, pname, bufSize, params))
+        {
+            context->texParameterIuivRobust(targetPacked, pname, bufSize, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLenum target,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterIivRobustANGLE>(targetPacked, pname,
+                                                                         bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterIivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterIivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetTexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLuint *params)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        target, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        TextureType targetPacked = FromGLenum<TextureType>(target);
+        context->gatherParams<EntryPoint::GetTexParameterIuivRobustANGLE>(targetPacked, pname,
+                                                                          bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetTexParameterIuivRobustANGLE(
+                                             context, targetPacked, pname, bufSize, length, params))
+        {
+            context->getTexParameterIuivRobust(targetPacked, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLuint sampler,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            const GLint *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLint * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameterIivRobustANGLE>(sampler, pname, bufSize,
+                                                                          param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterIivRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterIivRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY SamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLuint sampler,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             const GLuint *param)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, const GLuint * param = "
+        "0x%0.8p)",
+        sampler, pname, bufSize, param);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::SamplerParameterIuivRobustANGLE>(sampler, pname, bufSize,
+                                                                           param);
+
+        if (context->skipValidation() ||
+            ValidateSamplerParameterIuivRobustANGLE(context, sampler, pname, bufSize, param))
+        {
+            context->samplerParameterIuivRobust(sampler, pname, bufSize, param);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLuint sampler,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetSamplerParameterIivRobustANGLE>(
+            sampler, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterIivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterIivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetSamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLuint sampler,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLuint *params)
+{
+    EVENT(
+        "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = "
+        "0x%0.8p, GLuint * params = 0x%0.8p)",
+        sampler, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetSamplerParameterIuivRobustANGLE>(
+            sampler, pname, bufSize, length, params);
+
+        if (context->skipValidation() || ValidateGetSamplerParameterIuivRobustANGLE(
+                                             context, sampler, pname, bufSize, length, params))
+        {
+            context->getSamplerParameterIuivRobust(sampler, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                         GLuint id,
+                                                         GLenum pname,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLint *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLint * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjectivRobustANGLE>(id, pname, bufSize, length,
+                                                                       params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjectivRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjectivRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjecti64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLuint id,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint64 *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLint64 * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjecti64vRobustANGLE>(id, pname, bufSize, length,
+                                                                         params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjecti64vRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjecti64vRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY GetQueryObjectui64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLuint id,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLuint64 *params)
+{
+    EVENT(
+        "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei * length = 0x%0.8p, "
+        "GLuint64 * params = 0x%0.8p)",
+        id, pname, bufSize, length, params);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::GetQueryObjectui64vRobustANGLE>(id, pname, bufSize,
+                                                                          length, params);
+
+        if (context->skipValidation() ||
+            ValidateGetQueryObjectui64vRobustANGLE(context, id, pname, bufSize, length, params))
+        {
+            context->getQueryObjectui64vRobust(id, pname, bufSize, length, params);
+        }
+    }
+}
+
+void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLEContextANGLE(GLeglContext ctx,
+                                                                     GLenum target,
+                                                                     GLenum attachment,
+                                                                     GLuint texture,
+                                                                     GLint level,
+                                                                     GLint baseViewIndex,
+                                                                     GLsizei numViews)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+        "GLint baseViewIndex = %d, GLsizei numViews = %d)",
+        target, attachment, texture, level, baseViewIndex, numViews);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FramebufferTextureMultiviewLayeredANGLE>(
+            target, attachment, texture, level, baseViewIndex, numViews);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferTextureMultiviewLayeredANGLE(context, target, attachment, texture,
+                                                            level, baseViewIndex, numViews))
+        {
+            context->framebufferTextureMultiviewLayered(target, attachment, texture, level,
+                                                        baseViewIndex, numViews);
+        }
+    }
+}
+
+void GL_APIENTRY
+FramebufferTextureMultiviewSideBySideANGLEContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum attachment,
+                                                       GLuint texture,
+                                                       GLint level,
+                                                       GLsizei numViews,
+                                                       const GLint *viewportOffsets)
+{
+    EVENT(
+        "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+        "GLsizei numViews = %d, const GLint * viewportOffsets = 0x%0.8p)",
+        target, attachment, texture, level, numViews, viewportOffsets);
+
+    Context *context = static_cast<gl::Context *>(ctx);
+    if (context)
+    {
+        ASSERT(context == GetValidGlobalContext());
+        context->gatherParams<EntryPoint::FramebufferTextureMultiviewSideBySideANGLE>(
+            target, attachment, texture, level, numViews, viewportOffsets);
+
+        if (context->skipValidation() ||
+            ValidateFramebufferTextureMultiviewSideBySideANGLE(context, target, attachment, texture,
+                                                               level, numViews, viewportOffsets))
+        {
+            context->framebufferTextureMultiviewSideBySide(target, attachment, texture, level,
+                                                           numViews, viewportOffsets);
+        }
+    }
+}
 }  // namespace gl
--- a/gfx/angle/checkout/src/libGLESv2/entry_points_gles_ext_autogen.h
+++ b/gfx/angle/checkout/src/libGLESv2/entry_points_gles_ext_autogen.h
@@ -1,10 +1,10 @@
 // GENERATED FILE - DO NOT EDIT.
-// Generated by generate_entry_points.py using data from gl.xml.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
 //
 // 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.
 //
 // entry_points_gles_ext_autogen.h:
 //   Defines the GLES extension entry points.
 
@@ -46,22 +46,533 @@ ANGLE_EXPORT void GL_APIENTRY DrawArrays
                                                        GLsizei primcount);
 ANGLE_EXPORT void GL_APIENTRY DrawElementsInstancedANGLE(GLenum mode,
                                                          GLsizei count,
                                                          GLenum type,
                                                          const void *indices,
                                                          GLsizei primcount);
 ANGLE_EXPORT void GL_APIENTRY VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
 
+// GL_ANGLE_multiview
+ANGLE_EXPORT void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target,
+                                                                      GLenum attachment,
+                                                                      GLuint texture,
+                                                                      GLint level,
+                                                                      GLint baseViewIndex,
+                                                                      GLsizei numViews);
+ANGLE_EXPORT void GL_APIENTRY
+FramebufferTextureMultiviewSideBySideANGLE(GLenum target,
+                                           GLenum attachment,
+                                           GLuint texture,
+                                           GLint level,
+                                           GLsizei numViews,
+                                           const GLint *viewportOffsets);
+
+// GL_ANGLE_request_extension
+ANGLE_EXPORT void GL_APIENTRY RequestExtensionANGLE(const GLchar *name);
+
+// GL_ANGLE_robust_client_memory
+ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLboolean *params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
+                                                                             GLenum attachment,
+                                                                             GLenum pname,
+                                                                             GLsizei bufSize,
+                                                                             GLsizei *length,
+                                                                             GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
+                                                                    GLenum pname,
+                                                                    GLsizei bufSize,
+                                                                    GLsizei *length,
+                                                                    GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetShaderivRobustANGLE(GLuint shader,
+                                                     GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
+                                                      GLint location,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
+                                                      GLint location,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 void **pointer);
+ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
+                                                    GLint y,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLenum format,
+                                                    GLenum type,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLsizei *columns,
+                                                    GLsizei *rows,
+                                                    void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
+                                                    GLint level,
+                                                    GLint internalformat,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLint border,
+                                                    GLenum format,
+                                                    GLenum type,
+                                                    GLsizei bufSize,
+                                                    const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
+                                                        GLenum pname,
+                                                        GLsizei bufSize,
+                                                        const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
+                                                        GLenum pname,
+                                                        GLsizei bufSize,
+                                                        const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
+                                                       GLint level,
+                                                       GLint xoffset,
+                                                       GLint yoffset,
+                                                       GLsizei width,
+                                                       GLsizei height,
+                                                       GLenum format,
+                                                       GLenum type,
+                                                       GLsizei bufSize,
+                                                       const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
+                                                    GLint level,
+                                                    GLint internalformat,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLsizei depth,
+                                                    GLint border,
+                                                    GLenum format,
+                                                    GLenum type,
+                                                    GLsizei bufSize,
+                                                    const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
+                                                       GLint level,
+                                                       GLint xoffset,
+                                                       GLint yoffset,
+                                                       GLint zoffset,
+                                                       GLsizei width,
+                                                       GLsizei height,
+                                                       GLsizei depth,
+                                                       GLenum format,
+                                                       GLenum type,
+                                                       GLsizei bufSize,
+                                                       const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage2DRobustANGLE(GLenum target,
+                                                              GLint level,
+                                                              GLenum internalformat,
+                                                              GLsizei width,
+                                                              GLsizei height,
+                                                              GLint border,
+                                                              GLsizei imageSize,
+                                                              GLsizei dataSize,
+                                                              const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage2DRobustANGLE(GLenum target,
+                                                                 GLint level,
+                                                                 GLsizei xoffset,
+                                                                 GLsizei yoffset,
+                                                                 GLsizei width,
+                                                                 GLsizei height,
+                                                                 GLenum format,
+                                                                 GLsizei imageSize,
+                                                                 GLsizei dataSize,
+                                                                 const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage3DRobustANGLE(GLenum target,
+                                                              GLint level,
+                                                              GLenum internalformat,
+                                                              GLsizei width,
+                                                              GLsizei height,
+                                                              GLsizei depth,
+                                                              GLint border,
+                                                              GLsizei imageSize,
+                                                              GLsizei dataSize,
+                                                              const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage3DRobustANGLE(GLenum target,
+                                                                 GLint level,
+                                                                 GLint xoffset,
+                                                                 GLint yoffset,
+                                                                 GLint zoffset,
+                                                                 GLsizei width,
+                                                                 GLsizei height,
+                                                                 GLsizei depth,
+                                                                 GLenum format,
+                                                                 GLsizei imageSize,
+                                                                 GLsizei dataSize,
+                                                                 const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY
+GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           void **params);
+ANGLE_EXPORT void GL_APIENTRY GetIntegeri_vRobustANGLE(GLenum target,
+                                                       GLuint index,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
+                                                             GLenum internalformat,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
+                                                       GLint location,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
+                                                                 GLuint uniformBlockIndex,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
+                                                         GLuint index,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
+                                                            GLuint pname,
+                                                            GLsizei bufSize,
+                                                            const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            const GLfloat *param);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLuint sampler,
+                                                                   GLenum pname,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
+                                                               GLenum programInterface,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
+                                                       GLuint index,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
+                                                          GLuint index,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLfloat *val);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
+                                                                GLint level,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
+                                                                GLint level,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                void **params);
+ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
+                                                     GLint y,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLenum format,
+                                                     GLenum type,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLsizei *columns,
+                                                     GLsizei *rows,
+                                                     void *data);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
+                                                       GLint location,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
+                                                       GLint location,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
+                                                        GLint location,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
+                                                         GLenum pname,
+                                                         GLsizei bufSize,
+                                                         const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          const GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              const GLuint *param);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLuint64 *params);
+
 // GL_ANGLE_translated_shader_source
 ANGLE_EXPORT void GL_APIENTRY GetTranslatedShaderSourceANGLE(GLuint shader,
                                                              GLsizei bufsize,
                                                              GLsizei *length,
                                                              GLchar *source);
 
+// GL_CHROMIUM_bind_uniform_location
+ANGLE_EXPORT void GL_APIENTRY BindUniformLocationCHROMIUM(GLuint program,
+                                                          GLint location,
+                                                          const GLchar *name);
+
+// GL_CHROMIUM_copy_compressed_texture
+ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId);
+
+// GL_CHROMIUM_copy_texture
+ANGLE_EXPORT void GL_APIENTRY CopyTextureCHROMIUM(GLuint sourceId,
+                                                  GLint sourceLevel,
+                                                  GLenum destTarget,
+                                                  GLuint destId,
+                                                  GLint destLevel,
+                                                  GLint internalFormat,
+                                                  GLenum destType,
+                                                  GLboolean unpackFlipY,
+                                                  GLboolean unpackPremultiplyAlpha,
+                                                  GLboolean unpackUnmultiplyAlpha);
+ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
+                                                     GLint sourceLevel,
+                                                     GLenum destTarget,
+                                                     GLuint destId,
+                                                     GLint destLevel,
+                                                     GLint xoffset,
+                                                     GLint yoffset,
+                                                     GLint x,
+                                                     GLint y,
+                                                     GLint width,
+                                                     GLint height,
+                                                     GLboolean unpackFlipY,
+                                                     GLboolean unpackPremultiplyAlpha,
+                                                     GLboolean unpackUnmultiplyAlpha);
+
+// GL_CHROMIUM_framebuffer_mixed_samples
+ANGLE_EXPORT void GL_APIENTRY CoverageModulationCHROMIUM(GLenum components);
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix);
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadIdentityCHROMIUM(GLenum matrixMode);
+
+// GL_CHROMIUM_path_rendering
+ANGLE_EXPORT GLuint GL_APIENTRY GenPathsCHROMIUM(GLsizei range);
+ANGLE_EXPORT void GL_APIENTRY DeletePathsCHROMIUM(GLuint first, GLsizei range);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsPathCHROMIUM(GLuint path);
+ANGLE_EXPORT void GL_APIENTRY PathCommandsCHROMIUM(GLuint path,
+                                                   GLsizei numCommands,
+                                                   const GLubyte *commands,
+                                                   GLsizei numCoords,
+                                                   GLenum coordType,
+                                                   const void *coords);
+ANGLE_EXPORT void GL_APIENTRY PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value);
+ANGLE_EXPORT void GL_APIENTRY PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value);
+ANGLE_EXPORT void GL_APIENTRY GetPathParameterfvCHROMIUM(GLuint path, GLenum pname, GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY GetPathParameterivCHROMIUM(GLuint path, GLenum pname, GLint *value);
+ANGLE_EXPORT void GL_APIENTRY PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY CoverFillPathCHROMIUM(GLuint path, GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverFillPathCHROMIUM(GLuint path,
+                                                               GLenum fillMode,
+                                                               GLuint mask,
+                                                               GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverStrokePathCHROMIUM(GLuint path,
+                                                                 GLint reference,
+                                                                 GLuint mask,
+                                                                 GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY CoverFillPathInstancedCHROMIUM(GLsizei numPath,
+                                                             GLenum pathNameType,
+                                                             const void *paths,
+                                                             GLuint pathBase,
+                                                             GLenum coverMode,
+                                                             GLenum transformType,
+                                                             const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY CoverStrokePathInstancedCHROMIUM(GLsizei numPath,
+                                                               GLenum pathNameType,
+                                                               const void *paths,
+                                                               GLuint pathBase,
+                                                               GLenum coverMode,
+                                                               GLenum transformType,
+                                                               const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY StencilStrokePathInstancedCHROMIUM(GLsizei numPath,
+                                                                 GLenum pathNameType,
+                                                                 const void *paths,
+                                                                 GLuint pathBase,
+                                                                 GLint reference,
+                                                                 GLuint mask,
+                                                                 GLenum transformType,
+                                                                 const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
+                                                               GLenum pathNameType,
+                                                               const void *paths,
+                                                               GLuint pathBase,
+                                                               GLenum fillMode,
+                                                               GLuint mask,
+                                                               GLenum transformType,
+                                                               const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+                                          GLenum pathNameType,
+                                          const void *paths,
+                                          GLuint pathBase,
+                                          GLenum fillMode,
+                                          GLuint mask,
+                                          GLenum coverMode,
+                                          GLenum transformType,
+                                          const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+                                            GLenum pathNameType,
+                                            const void *paths,
+                                            GLuint pathBase,
+                                            GLint reference,
+                                            GLuint mask,
+                                            GLenum coverMode,
+                                            GLenum transformType,
+                                            const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY BindFragmentInputLocationCHROMIUM(GLuint programs,
+                                                                GLint location,
+                                                                const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY ProgramPathFragmentInputGenCHROMIUM(GLuint program,
+                                                                  GLint location,
+                                                                  GLenum genMode,
+                                                                  GLint components,
+                                                                  const GLfloat *coeffs);
+
 // GL_EXT_debug_marker
 ANGLE_EXPORT void GL_APIENTRY InsertEventMarkerEXT(GLsizei length, const GLchar *marker);
 ANGLE_EXPORT void GL_APIENTRY PopGroupMarkerEXT();
 ANGLE_EXPORT void GL_APIENTRY PushGroupMarkerEXT(GLsizei length, const GLchar *marker);
 
 // GL_EXT_discard_framebuffer
 ANGLE_EXPORT void GL_APIENTRY DiscardFramebufferEXT(GLenum target,
                                                     GLsizei numAttachments,
@@ -277,11 +788,2474 @@ ANGLE_EXPORT void GL_APIENTRY TexGenivOE
 ANGLE_EXPORT void GL_APIENTRY TexGenxOES(GLenum coord, GLenum pname, GLfixed param);
 ANGLE_EXPORT void GL_APIENTRY TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params);
 
 // GL_OES_vertex_array_object
 ANGLE_EXPORT void GL_APIENTRY BindVertexArrayOES(GLuint array);
 ANGLE_EXPORT void GL_APIENTRY DeleteVertexArraysOES(GLsizei n, const GLuint *arrays);
 ANGLE_EXPORT void GL_APIENTRY GenVertexArraysOES(GLsizei n, GLuint *arrays);
 ANGLE_EXPORT GLboolean GL_APIENTRY IsVertexArrayOES(GLuint array);
+
+// EGL_ANGLE_explicit_context
+ANGLE_EXPORT void GL_APIENTRY ActiveShaderProgramContextANGLE(GLeglContext ctx,
+                                                              GLuint pipeline,
+                                                              GLuint program);
+ANGLE_EXPORT void GL_APIENTRY ActiveTextureContextANGLE(GLeglContext ctx, GLenum texture);
+ANGLE_EXPORT void GL_APIENTRY AlphaFuncContextANGLE(GLeglContext ctx, GLenum func, GLfloat ref);
+ANGLE_EXPORT void GL_APIENTRY AlphaFuncxContextANGLE(GLeglContext ctx, GLenum func, GLfixed ref);
+ANGLE_EXPORT void GL_APIENTRY AttachShaderContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY BeginQueryContextANGLE(GLeglContext ctx, GLenum target, GLuint id);
+ANGLE_EXPORT void GL_APIENTRY BeginQueryEXTContextANGLE(GLeglContext ctx, GLenum target, GLuint id);
+ANGLE_EXPORT void GL_APIENTRY BeginTransformFeedbackContextANGLE(GLeglContext ctx,
+                                                                 GLenum primitiveMode);
+ANGLE_EXPORT void GL_APIENTRY BindAttribLocationContextANGLE(GLeglContext ctx,
+                                                             GLuint program,
+                                                             GLuint index,
+                                                             const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY BindBufferContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLuint buffer);
+ANGLE_EXPORT void GL_APIENTRY BindBufferBaseContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLuint index,
+                                                         GLuint buffer);
+ANGLE_EXPORT void GL_APIENTRY BindBufferRangeContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLuint index,
+                                                          GLuint buffer,
+                                                          GLintptr offset,
+                                                          GLsizeiptr size);
+ANGLE_EXPORT void GL_APIENTRY BindFramebufferContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLuint framebuffer);
+ANGLE_EXPORT void GL_APIENTRY BindFramebufferOESContextANGLE(GLeglContext ctx,
+                                                             GLenum target,
+                                                             GLuint framebuffer);
+ANGLE_EXPORT void GL_APIENTRY BindImageTextureContextANGLE(GLeglContext ctx,
+                                                           GLuint unit,
+                                                           GLuint texture,
+                                                           GLint level,
+                                                           GLboolean layered,
+                                                           GLint layer,
+                                                           GLenum access,
+                                                           GLenum format);
+ANGLE_EXPORT void GL_APIENTRY BindProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline);
+ANGLE_EXPORT void GL_APIENTRY BindRenderbufferContextANGLE(GLeglContext ctx,
+                                                           GLenum target,
+                                                           GLuint renderbuffer);
+ANGLE_EXPORT void GL_APIENTRY BindRenderbufferOESContextANGLE(GLeglContext ctx,
+                                                              GLenum target,
+                                                              GLuint renderbuffer);
+ANGLE_EXPORT void GL_APIENTRY BindSamplerContextANGLE(GLeglContext ctx,
+                                                      GLuint unit,
+                                                      GLuint sampler);
+ANGLE_EXPORT void GL_APIENTRY BindTextureContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLuint texture);
+ANGLE_EXPORT void GL_APIENTRY BindTransformFeedbackContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLuint id);
+ANGLE_EXPORT void GL_APIENTRY BindVertexArrayContextANGLE(GLeglContext ctx, GLuint array);
+ANGLE_EXPORT void GL_APIENTRY BindVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array);
+ANGLE_EXPORT void GL_APIENTRY BindVertexBufferContextANGLE(GLeglContext ctx,
+                                                           GLuint bindingindex,
+                                                           GLuint buffer,
+                                                           GLintptr offset,
+                                                           GLsizei stride);
+ANGLE_EXPORT void GL_APIENTRY
+BlendColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+ANGLE_EXPORT void GL_APIENTRY BlendEquationContextANGLE(GLeglContext ctx, GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY BlendEquationSeparateContextANGLE(GLeglContext ctx,
+                                                                GLenum modeRGB,
+                                                                GLenum modeAlpha);
+ANGLE_EXPORT void GL_APIENTRY BlendFuncContextANGLE(GLeglContext ctx,
+                                                    GLenum sfactor,
+                                                    GLenum dfactor);
+ANGLE_EXPORT void GL_APIENTRY BlendFuncSeparateContextANGLE(GLeglContext ctx,
+                                                            GLenum sfactorRGB,
+                                                            GLenum dfactorRGB,
+                                                            GLenum sfactorAlpha,
+                                                            GLenum dfactorAlpha);
+ANGLE_EXPORT void GL_APIENTRY BlitFramebufferContextANGLE(GLeglContext ctx,
+                                                          GLint srcX0,
+                                                          GLint srcY0,
+                                                          GLint srcX1,
+                                                          GLint srcY1,
+                                                          GLint dstX0,
+                                                          GLint dstY0,
+                                                          GLint dstX1,
+                                                          GLint dstY1,
+                                                          GLbitfield mask,
+                                                          GLenum filter);
+ANGLE_EXPORT void GL_APIENTRY BlitFramebufferANGLEContextANGLE(GLeglContext ctx,
+                                                               GLint srcX0,
+                                                               GLint srcY0,
+                                                               GLint srcX1,
+                                                               GLint srcY1,
+                                                               GLint dstX0,
+                                                               GLint dstY0,
+                                                               GLint dstX1,
+                                                               GLint dstY1,
+                                                               GLbitfield mask,
+                                                               GLenum filter);
+ANGLE_EXPORT void GL_APIENTRY BufferDataContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLsizeiptr size,
+                                                     const void *data,
+                                                     GLenum usage);
+ANGLE_EXPORT void GL_APIENTRY BufferSubDataContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLintptr offset,
+                                                        GLsizeiptr size,
+                                                        const void *data);
+ANGLE_EXPORT GLenum GL_APIENTRY CheckFramebufferStatusContextANGLE(GLeglContext ctx, GLenum target);
+ANGLE_EXPORT GLenum GL_APIENTRY CheckFramebufferStatusOESContextANGLE(GLeglContext ctx,
+                                                                      GLenum target);
+ANGLE_EXPORT void GL_APIENTRY ClearContextANGLE(GLeglContext ctx, GLbitfield mask);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferfiContextANGLE(GLeglContext ctx,
+                                                        GLenum buffer,
+                                                        GLint drawbuffer,
+                                                        GLfloat depth,
+                                                        GLint stencil);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferfvContextANGLE(GLeglContext ctx,
+                                                        GLenum buffer,
+                                                        GLint drawbuffer,
+                                                        const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferivContextANGLE(GLeglContext ctx,
+                                                        GLenum buffer,
+                                                        GLint drawbuffer,
+                                                        const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferuivContextANGLE(GLeglContext ctx,
+                                                         GLenum buffer,
+                                                         GLint drawbuffer,
+                                                         const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY
+ClearColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+ANGLE_EXPORT void GL_APIENTRY
+ClearColorxContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+ANGLE_EXPORT void GL_APIENTRY ClearDepthfContextANGLE(GLeglContext ctx, GLfloat d);
+ANGLE_EXPORT void GL_APIENTRY ClearDepthxContextANGLE(GLeglContext ctx, GLfixed depth);
+ANGLE_EXPORT void GL_APIENTRY ClearStencilContextANGLE(GLeglContext ctx, GLint s);
+ANGLE_EXPORT void GL_APIENTRY ClientActiveTextureContextANGLE(GLeglContext ctx, GLenum texture);
+ANGLE_EXPORT GLenum GL_APIENTRY ClientWaitSyncContextANGLE(GLeglContext ctx,
+                                                           GLsync sync,
+                                                           GLbitfield flags,
+                                                           GLuint64 timeout);
+ANGLE_EXPORT void GL_APIENTRY ClipPlanefContextANGLE(GLeglContext ctx,
+                                                     GLenum p,
+                                                     const GLfloat *eqn);
+ANGLE_EXPORT void GL_APIENTRY ClipPlanexContextANGLE(GLeglContext ctx,
+                                                     GLenum plane,
+                                                     const GLfixed *equation);
+ANGLE_EXPORT void GL_APIENTRY
+Color4fContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+ANGLE_EXPORT void GL_APIENTRY
+Color4ubContextANGLE(GLeglContext ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+ANGLE_EXPORT void GL_APIENTRY
+Color4xContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+ANGLE_EXPORT void GL_APIENTRY ColorMaskContextANGLE(GLeglContext ctx,
+                                                    GLboolean red,
+                                                    GLboolean green,
+                                                    GLboolean blue,
+                                                    GLboolean alpha);
+ANGLE_EXPORT void GL_APIENTRY ColorPointerContextANGLE(GLeglContext ctx,
+                                                       GLint size,
+                                                       GLenum type,
+                                                       GLsizei stride,
+                                                       const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY CompileShaderContextANGLE(GLeglContext ctx, GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage2DContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLint level,
+                                                               GLenum internalformat,
+                                                               GLsizei width,
+                                                               GLsizei height,
+                                                               GLint border,
+                                                               GLsizei imageSize,
+                                                               const void *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage3DContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLint level,
+                                                               GLenum internalformat,
+                                                               GLsizei width,
+                                                               GLsizei height,
+                                                               GLsizei depth,
+                                                               GLint border,
+                                                               GLsizei imageSize,
+                                                               const void *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage2DContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLint level,
+                                                                  GLint xoffset,
+                                                                  GLint yoffset,
+                                                                  GLsizei width,
+                                                                  GLsizei height,
+                                                                  GLenum format,
+                                                                  GLsizei imageSize,
+                                                                  const void *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage3DContextANGLE(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);
+ANGLE_EXPORT void GL_APIENTRY CopyBufferSubDataContextANGLE(GLeglContext ctx,
+                                                            GLenum readTarget,
+                                                            GLenum writeTarget,
+                                                            GLintptr readOffset,
+                                                            GLintptr writeOffset,
+                                                            GLsizeiptr size);
+ANGLE_EXPORT void GL_APIENTRY CopyTexImage2DContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLint level,
+                                                         GLenum internalformat,
+                                                         GLint x,
+                                                         GLint y,
+                                                         GLsizei width,
+                                                         GLsizei height,
+                                                         GLint border);
+ANGLE_EXPORT void GL_APIENTRY CopyTexSubImage2DContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLint level,
+                                                            GLint xoffset,
+                                                            GLint yoffset,
+                                                            GLint x,
+                                                            GLint y,
+                                                            GLsizei width,
+                                                            GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY CopyTexSubImage3DContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLint level,
+                                                            GLint xoffset,
+                                                            GLint yoffset,
+                                                            GLint zoffset,
+                                                            GLint x,
+                                                            GLint y,
+                                                            GLsizei width,
+                                                            GLsizei height);
+ANGLE_EXPORT GLuint GL_APIENTRY CreateProgramContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT GLuint GL_APIENTRY CreateShaderContextANGLE(GLeglContext ctx, GLenum type);
+ANGLE_EXPORT GLuint GL_APIENTRY CreateShaderProgramvContextANGLE(GLeglContext ctx,
+                                                                 GLenum type,
+                                                                 GLsizei count,
+                                                                 const GLchar *const *strings);
+ANGLE_EXPORT void GL_APIENTRY CullFaceContextANGLE(GLeglContext ctx, GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY CurrentPaletteMatrixOESContextANGLE(GLeglContext ctx,
+                                                                  GLuint matrixpaletteindex);
+ANGLE_EXPORT void GL_APIENTRY DebugMessageCallbackKHRContextANGLE(GLeglContext ctx,
+                                                                  GLDEBUGPROCKHR callback,
+                                                                  const void *userParam);
+ANGLE_EXPORT void GL_APIENTRY DebugMessageControlKHRContextANGLE(GLeglContext ctx,
+                                                                 GLenum source,
+                                                                 GLenum type,
+                                                                 GLenum severity,
+                                                                 GLsizei count,
+                                                                 const GLuint *ids,
+                                                                 GLboolean enabled);
+ANGLE_EXPORT void GL_APIENTRY DebugMessageInsertKHRContextANGLE(GLeglContext ctx,
+                                                                GLenum source,
+                                                                GLenum type,
+                                                                GLuint id,
+                                                                GLenum severity,
+                                                                GLsizei length,
+                                                                const GLchar *buf);
+ANGLE_EXPORT void GL_APIENTRY DeleteBuffersContextANGLE(GLeglContext ctx,
+                                                        GLsizei n,
+                                                        const GLuint *buffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteFencesNVContextANGLE(GLeglContext ctx,
+                                                         GLsizei n,
+                                                         const GLuint *fences);
+ANGLE_EXPORT void GL_APIENTRY DeleteFramebuffersContextANGLE(GLeglContext ctx,
+                                                             GLsizei n,
+                                                             const GLuint *framebuffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteFramebuffersOESContextANGLE(GLeglContext ctx,
+                                                                GLsizei n,
+                                                                const GLuint *framebuffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteProgramContextANGLE(GLeglContext ctx, GLuint program);
+ANGLE_EXPORT void GL_APIENTRY DeleteProgramPipelinesContextANGLE(GLeglContext ctx,
+                                                                 GLsizei n,
+                                                                 const GLuint *pipelines);
+ANGLE_EXPORT void GL_APIENTRY DeleteQueriesContextANGLE(GLeglContext ctx,
+                                                        GLsizei n,
+                                                        const GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY DeleteQueriesEXTContextANGLE(GLeglContext ctx,
+                                                           GLsizei n,
+                                                           const GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY DeleteRenderbuffersContextANGLE(GLeglContext ctx,
+                                                              GLsizei n,
+                                                              const GLuint *renderbuffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteRenderbuffersOESContextANGLE(GLeglContext ctx,
+                                                                 GLsizei n,
+                                                                 const GLuint *renderbuffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteSamplersContextANGLE(GLeglContext ctx,
+                                                         GLsizei count,
+                                                         const GLuint *samplers);
+ANGLE_EXPORT void GL_APIENTRY DeleteShaderContextANGLE(GLeglContext ctx, GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY DeleteSyncContextANGLE(GLeglContext ctx, GLsync sync);
+ANGLE_EXPORT void GL_APIENTRY DeleteTexturesContextANGLE(GLeglContext ctx,
+                                                         GLsizei n,
+                                                         const GLuint *textures);
+ANGLE_EXPORT void GL_APIENTRY DeleteTransformFeedbacksContextANGLE(GLeglContext ctx,
+                                                                   GLsizei n,
+                                                                   const GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY DeleteVertexArraysContextANGLE(GLeglContext ctx,
+                                                             GLsizei n,
+                                                             const GLuint *arrays);
+ANGLE_EXPORT void GL_APIENTRY DeleteVertexArraysOESContextANGLE(GLeglContext ctx,
+                                                                GLsizei n,
+                                                                const GLuint *arrays);
+ANGLE_EXPORT void GL_APIENTRY DepthFuncContextANGLE(GLeglContext ctx, GLenum func);
+ANGLE_EXPORT void GL_APIENTRY DepthMaskContextANGLE(GLeglContext ctx, GLboolean flag);
+ANGLE_EXPORT void GL_APIENTRY DepthRangefContextANGLE(GLeglContext ctx, GLfloat n, GLfloat f);
+ANGLE_EXPORT void GL_APIENTRY DepthRangexContextANGLE(GLeglContext ctx, GLfixed n, GLfixed f);
+ANGLE_EXPORT void GL_APIENTRY DetachShaderContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY DisableContextANGLE(GLeglContext ctx, GLenum cap);
+ANGLE_EXPORT void GL_APIENTRY DisableClientStateContextANGLE(GLeglContext ctx, GLenum array);
+ANGLE_EXPORT void GL_APIENTRY DisableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index);
+ANGLE_EXPORT void GL_APIENTRY DiscardFramebufferEXTContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLsizei numAttachments,
+                                                                const GLenum *attachments);
+ANGLE_EXPORT void GL_APIENTRY DispatchComputeContextANGLE(GLeglContext ctx,
+                                                          GLuint num_groups_x,
+                                                          GLuint num_groups_y,
+                                                          GLuint num_groups_z);
+ANGLE_EXPORT void GL_APIENTRY DispatchComputeIndirectContextANGLE(GLeglContext ctx,
+                                                                  GLintptr indirect);
+ANGLE_EXPORT void GL_APIENTRY DrawArraysContextANGLE(GLeglContext ctx,
+                                                     GLenum mode,
+                                                     GLint first,
+                                                     GLsizei count);
+ANGLE_EXPORT void GL_APIENTRY DrawArraysIndirectContextANGLE(GLeglContext ctx,
+                                                             GLenum mode,
+                                                             const void *indirect);
+ANGLE_EXPORT void GL_APIENTRY DrawArraysInstancedContextANGLE(GLeglContext ctx,
+                                                              GLenum mode,
+                                                              GLint first,
+                                                              GLsizei count,
+                                                              GLsizei instancecount);
+ANGLE_EXPORT void GL_APIENTRY DrawArraysInstancedANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum mode,
+                                                                   GLint first,
+                                                                   GLsizei count,
+                                                                   GLsizei primcount);
+ANGLE_EXPORT void GL_APIENTRY DrawBuffersContextANGLE(GLeglContext ctx,
+                                                      GLsizei n,
+                                                      const GLenum *bufs);
+ANGLE_EXPORT void GL_APIENTRY DrawBuffersEXTContextANGLE(GLeglContext ctx,
+                                                         GLsizei n,
+                                                         const GLenum *bufs);
+ANGLE_EXPORT void GL_APIENTRY DrawElementsContextANGLE(GLeglContext ctx,
+                                                       GLenum mode,
+                                                       GLsizei count,
+                                                       GLenum type,
+                                                       const void *indices);
+ANGLE_EXPORT void GL_APIENTRY DrawElementsIndirectContextANGLE(GLeglContext ctx,
+                                                               GLenum mode,
+                                                               GLenum type,
+                                                               const void *indirect);
+ANGLE_EXPORT void GL_APIENTRY DrawElementsInstancedContextANGLE(GLeglContext ctx,
+                                                                GLenum mode,
+                                                                GLsizei count,
+                                                                GLenum type,
+                                                                const void *indices,
+                                                                GLsizei instancecount);
+ANGLE_EXPORT void GL_APIENTRY DrawElementsInstancedANGLEContextANGLE(GLeglContext ctx,
+                                                                     GLenum mode,
+                                                                     GLsizei count,
+                                                                     GLenum type,
+                                                                     const void *indices,
+                                                                     GLsizei primcount);
+ANGLE_EXPORT void GL_APIENTRY DrawRangeElementsContextANGLE(GLeglContext ctx,
+                                                            GLenum mode,
+                                                            GLuint start,
+                                                            GLuint end,
+                                                            GLsizei count,
+                                                            GLenum type,
+                                                            const void *indices);
+ANGLE_EXPORT void GL_APIENTRY DrawTexfOESContextANGLE(GLeglContext ctx,
+                                                      GLfloat x,
+                                                      GLfloat y,
+                                                      GLfloat z,
+                                                      GLfloat width,
+                                                      GLfloat height);
+ANGLE_EXPORT void GL_APIENTRY DrawTexfvOESContextANGLE(GLeglContext ctx, const GLfloat *coords);
+ANGLE_EXPORT void GL_APIENTRY
+DrawTexiOESContextANGLE(GLeglContext ctx, GLint x, GLint y, GLint z, GLint width, GLint height);
+ANGLE_EXPORT void GL_APIENTRY DrawTexivOESContextANGLE(GLeglContext ctx, const GLint *coords);
+ANGLE_EXPORT void GL_APIENTRY DrawTexsOESContextANGLE(GLeglContext ctx,
+                                                      GLshort x,
+                                                      GLshort y,
+                                                      GLshort z,
+                                                      GLshort width,
+                                                      GLshort height);
+ANGLE_EXPORT void GL_APIENTRY DrawTexsvOESContextANGLE(GLeglContext ctx, const GLshort *coords);
+ANGLE_EXPORT void GL_APIENTRY DrawTexxOESContextANGLE(GLeglContext ctx,
+                                                      GLfixed x,
+                                                      GLfixed y,
+                                                      GLfixed z,
+                                                      GLfixed width,
+                                                      GLfixed height);
+ANGLE_EXPORT void GL_APIENTRY DrawTexxvOESContextANGLE(GLeglContext ctx, const GLfixed *coords);
+ANGLE_EXPORT void GL_APIENTRY EGLImageTargetRenderbufferStorageOESContextANGLE(GLeglContext ctx,
+                                                                               GLenum target,
+                                                                               GLeglImageOES image);
+ANGLE_EXPORT void GL_APIENTRY EGLImageTargetTexture2DOESContextANGLE(GLeglContext ctx,
+                                                                     GLenum target,
+                                                                     GLeglImageOES image);
+ANGLE_EXPORT void GL_APIENTRY EnableContextANGLE(GLeglContext ctx, GLenum cap);
+ANGLE_EXPORT void GL_APIENTRY EnableClientStateContextANGLE(GLeglContext ctx, GLenum array);
+ANGLE_EXPORT void GL_APIENTRY EnableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index);
+ANGLE_EXPORT void GL_APIENTRY EndQueryContextANGLE(GLeglContext ctx, GLenum target);
+ANGLE_EXPORT void GL_APIENTRY EndQueryEXTContextANGLE(GLeglContext ctx, GLenum target);
+ANGLE_EXPORT void GL_APIENTRY EndTransformFeedbackContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT GLsync GL_APIENTRY FenceSyncContextANGLE(GLeglContext ctx,
+                                                      GLenum condition,
+                                                      GLbitfield flags);
+ANGLE_EXPORT void GL_APIENTRY FinishContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY FinishFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
+ANGLE_EXPORT void GL_APIENTRY FlushContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY FlushMappedBufferRangeContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLintptr offset,
+                                                                 GLsizeiptr length);
+ANGLE_EXPORT void GL_APIENTRY FlushMappedBufferRangeEXTContextANGLE(GLeglContext ctx,
+                                                                    GLenum target,
+                                                                    GLintptr offset,
+                                                                    GLsizeiptr length);
+ANGLE_EXPORT void GL_APIENTRY FogfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY FogfvContextANGLE(GLeglContext ctx,
+                                                GLenum pname,
+                                                const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY FogxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY FogxvContextANGLE(GLeglContext ctx,
+                                                GLenum pname,
+                                                const GLfixed *param);
+ANGLE_EXPORT void GL_APIENTRY FramebufferParameteriContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLenum pname,
+                                                                GLint param);
+ANGLE_EXPORT void GL_APIENTRY FramebufferRenderbufferContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLenum attachment,
+                                                                  GLenum renderbuffertarget,
+                                                                  GLuint renderbuffer);
+ANGLE_EXPORT void GL_APIENTRY FramebufferRenderbufferOESContextANGLE(GLeglContext ctx,
+                                                                     GLenum target,
+                                                                     GLenum attachment,
+                                                                     GLenum renderbuffertarget,
+                                                                     GLuint renderbuffer);
+ANGLE_EXPORT void GL_APIENTRY FramebufferTexture2DContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLenum attachment,
+                                                               GLenum textarget,
+                                                               GLuint texture,
+                                                               GLint level);
+ANGLE_EXPORT void GL_APIENTRY FramebufferTexture2DOESContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLenum attachment,
+                                                                  GLenum textarget,
+                                                                  GLuint texture,
+                                                                  GLint level);
+ANGLE_EXPORT void GL_APIENTRY FramebufferTextureLayerContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLenum attachment,
+                                                                  GLuint texture,
+                                                                  GLint level,
+                                                                  GLint layer);
+ANGLE_EXPORT void GL_APIENTRY FrontFaceContextANGLE(GLeglContext ctx, GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY FrustumfContextANGLE(GLeglContext ctx,
+                                                   GLfloat l,
+                                                   GLfloat r,
+                                                   GLfloat b,
+                                                   GLfloat t,
+                                                   GLfloat n,
+                                                   GLfloat f);
+ANGLE_EXPORT void GL_APIENTRY FrustumxContextANGLE(GLeglContext ctx,
+                                                   GLfixed l,
+                                                   GLfixed r,
+                                                   GLfixed b,
+                                                   GLfixed t,
+                                                   GLfixed n,
+                                                   GLfixed f);
+ANGLE_EXPORT void GL_APIENTRY GenBuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *buffers);
+ANGLE_EXPORT void GL_APIENTRY GenFencesNVContextANGLE(GLeglContext ctx, GLsizei n, GLuint *fences);
+ANGLE_EXPORT void GL_APIENTRY GenFramebuffersContextANGLE(GLeglContext ctx,
+                                                          GLsizei n,
+                                                          GLuint *framebuffers);
+ANGLE_EXPORT void GL_APIENTRY GenFramebuffersOESContextANGLE(GLeglContext ctx,
+                                                             GLsizei n,
+                                                             GLuint *framebuffers);
+ANGLE_EXPORT void GL_APIENTRY GenProgramPipelinesContextANGLE(GLeglContext ctx,
+                                                              GLsizei n,
+                                                              GLuint *pipelines);
+ANGLE_EXPORT void GL_APIENTRY GenQueriesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY GenQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY GenRenderbuffersContextANGLE(GLeglContext ctx,
+                                                           GLsizei n,
+                                                           GLuint *renderbuffers);
+ANGLE_EXPORT void GL_APIENTRY GenRenderbuffersOESContextANGLE(GLeglContext ctx,
+                                                              GLsizei n,
+                                                              GLuint *renderbuffers);
+ANGLE_EXPORT void GL_APIENTRY GenSamplersContextANGLE(GLeglContext ctx,
+                                                      GLsizei count,
+                                                      GLuint *samplers);
+ANGLE_EXPORT void GL_APIENTRY GenTexturesContextANGLE(GLeglContext ctx,
+                                                      GLsizei n,
+                                                      GLuint *textures);
+ANGLE_EXPORT void GL_APIENTRY GenTransformFeedbacksContextANGLE(GLeglContext ctx,
+                                                                GLsizei n,
+                                                                GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY GenVertexArraysContextANGLE(GLeglContext ctx,
+                                                          GLsizei n,
+                                                          GLuint *arrays);
+ANGLE_EXPORT void GL_APIENTRY GenVertexArraysOESContextANGLE(GLeglContext ctx,
+                                                             GLsizei n,
+                                                             GLuint *arrays);
+ANGLE_EXPORT void GL_APIENTRY GenerateMipmapContextANGLE(GLeglContext ctx, GLenum target);
+ANGLE_EXPORT void GL_APIENTRY GenerateMipmapOESContextANGLE(GLeglContext ctx, GLenum target);
+ANGLE_EXPORT void GL_APIENTRY GetActiveAttribContextANGLE(GLeglContext ctx,
+                                                          GLuint program,
+                                                          GLuint index,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLint *size,
+                                                          GLenum *type,
+                                                          GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLuint index,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint *size,
+                                                           GLenum *type,
+                                                           GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockNameContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLuint uniformBlockIndex,
+                                                                    GLsizei bufSize,
+                                                                    GLsizei *length,
+                                                                    GLchar *uniformBlockName);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLuint uniformBlockIndex,
+                                                                  GLenum pname,
+                                                                  GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformsivContextANGLE(GLeglContext ctx,
+                                                              GLuint program,
+                                                              GLsizei uniformCount,
+                                                              const GLuint *uniformIndices,
+                                                              GLenum pname,
+                                                              GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetAttachedShadersContextANGLE(GLeglContext ctx,
+                                                             GLuint program,
+                                                             GLsizei maxCount,
+                                                             GLsizei *count,
+                                                             GLuint *shaders);
+ANGLE_EXPORT GLint GL_APIENTRY GetAttribLocationContextANGLE(GLeglContext ctx,
+                                                             GLuint program,
+                                                             const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetBooleani_vContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLuint index,
+                                                        GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY GetBooleanvContextANGLE(GLeglContext ctx,
+                                                      GLenum pname,
+                                                      GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLenum pname,
+                                                                 GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLenum pname,
+                                                               GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointervContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            void **params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointervOESContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLenum pname,
+                                                               void **params);
+ANGLE_EXPORT void GL_APIENTRY GetClipPlanefContextANGLE(GLeglContext ctx,
+                                                        GLenum plane,
+                                                        GLfloat *equation);
+ANGLE_EXPORT void GL_APIENTRY GetClipPlanexContextANGLE(GLeglContext ctx,
+                                                        GLenum plane,
+                                                        GLfixed *equation);
+ANGLE_EXPORT GLuint GL_APIENTRY GetDebugMessageLogKHRContextANGLE(GLeglContext ctx,
+                                                                  GLuint count,
+                                                                  GLsizei bufSize,
+                                                                  GLenum *sources,
+                                                                  GLenum *types,
+                                                                  GLuint *ids,
+                                                                  GLenum *severities,
+                                                                  GLsizei *lengths,
+                                                                  GLchar *messageLog);
+ANGLE_EXPORT GLenum GL_APIENTRY GetErrorContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY GetFenceivNVContextANGLE(GLeglContext ctx,
+                                                       GLuint fence,
+                                                       GLenum pname,
+                                                       GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetFixedvContextANGLE(GLeglContext ctx,
+                                                    GLenum pname,
+                                                    GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY GetFloatvContextANGLE(GLeglContext ctx, GLenum pname, GLfloat *data);
+ANGLE_EXPORT GLint GL_APIENTRY GetFragDataLocationContextANGLE(GLeglContext ctx,
+                                                               GLuint program,
+                                                               const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivContextANGLE(GLeglContext ctx,
+                                                                              GLenum target,
+                                                                              GLenum attachment,
+                                                                              GLenum pname,
+                                                                              GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivOESContextANGLE(GLeglContext ctx,
+                                                                                 GLenum target,
+                                                                                 GLenum attachment,
+                                                                                 GLenum pname,
+                                                                                 GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivContextANGLE(GLeglContext ctx,
+                                                                    GLenum target,
+                                                                    GLenum pname,
+                                                                    GLint *params);
+ANGLE_EXPORT GLenum GL_APIENTRY GetGraphicsResetStatusEXTContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLuint index,
+                                                          GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64vContextANGLE(GLeglContext ctx,
+                                                        GLenum pname,
+                                                        GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetIntegeri_vContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLuint index,
+                                                        GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetIntegervContextANGLE(GLeglContext ctx, GLenum pname, GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetInternalformativContextANGLE(GLeglContext ctx,
+                                                              GLenum target,
+                                                              GLenum internalformat,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetLightfvContextANGLE(GLeglContext ctx,
+                                                     GLenum light,
+                                                     GLenum pname,
+                                                     GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetLightxvContextANGLE(GLeglContext ctx,
+                                                     GLenum light,
+                                                     GLenum pname,
+                                                     GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY GetMaterialfvContextANGLE(GLeglContext ctx,
+                                                        GLenum face,
+                                                        GLenum pname,
+                                                        GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetMaterialxvContextANGLE(GLeglContext ctx,
+                                                        GLenum face,
+                                                        GLenum pname,
+                                                        GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvContextANGLE(GLeglContext ctx,
+                                                           GLenum pname,
+                                                           GLuint index,
+                                                           GLfloat *val);
+ANGLE_EXPORT void GL_APIENTRY GetObjectLabelKHRContextANGLE(GLeglContext ctx,
+                                                            GLenum identifier,
+                                                            GLuint name,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLchar *label);
+ANGLE_EXPORT void GL_APIENTRY GetObjectPtrLabelKHRContextANGLE(GLeglContext ctx,
+                                                               const void *ptr,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLchar *label);
+ANGLE_EXPORT void GL_APIENTRY GetPointervContextANGLE(GLeglContext ctx,
+                                                      GLenum pname,
+                                                      void **params);
+ANGLE_EXPORT void GL_APIENTRY GetPointervKHRContextANGLE(GLeglContext ctx,
+                                                         GLenum pname,
+                                                         void **params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramBinaryContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLenum *binaryFormat,
+                                                           void *binary);
+ANGLE_EXPORT void GL_APIENTRY GetProgramBinaryOESContextANGLE(GLeglContext ctx,
+                                                              GLuint program,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLenum *binaryFormat,
+                                                              void *binary);
+ANGLE_EXPORT void GL_APIENTRY GetProgramInfoLogContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLchar *infoLog);
+ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivContextANGLE(GLeglContext ctx,
+                                                                GLuint program,
+                                                                GLenum programInterface,
+                                                                GLenum pname,
+                                                                GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramPipelineInfoLogContextANGLE(GLeglContext ctx,
+                                                                    GLuint pipeline,
+                                                                    GLsizei bufSize,
+                                                                    GLsizei *length,
+                                                                    GLchar *infoLog);
+ANGLE_EXPORT void GL_APIENTRY GetProgramPipelineivContextANGLE(GLeglContext ctx,
+                                                               GLuint pipeline,
+                                                               GLenum pname,
+                                                               GLint *params);
+ANGLE_EXPORT GLuint GL_APIENTRY GetProgramResourceIndexContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLenum programInterface,
+                                                                    const GLchar *name);
+ANGLE_EXPORT GLint GL_APIENTRY GetProgramResourceLocationContextANGLE(GLeglContext ctx,
+                                                                      GLuint program,
+                                                                      GLenum programInterface,
+                                                                      const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetProgramResourceNameContextANGLE(GLeglContext ctx,
+                                                                 GLuint program,
+                                                                 GLenum programInterface,
+                                                                 GLuint index,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetProgramResourceivContextANGLE(GLeglContext ctx,
+                                                               GLuint program,
+                                                               GLenum programInterface,
+                                                               GLuint index,
+                                                               GLsizei propCount,
+                                                               const GLenum *props,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramivContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLenum pname,
+                                                       GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vEXTContextANGLE(GLeglContext ctx,
+                                                                GLuint id,
+                                                                GLenum pname,
+                                                                GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivEXTContextANGLE(GLeglContext ctx,
+                                                              GLuint id,
+                                                              GLenum pname,
+                                                              GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vEXTContextANGLE(GLeglContext ctx,
+                                                                 GLuint id,
+                                                                 GLenum pname,
+                                                                 GLuint64 *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivContextANGLE(GLeglContext ctx,
+                                                            GLuint id,
+                                                            GLenum pname,
+                                                            GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivEXTContextANGLE(GLeglContext ctx,
+                                                               GLuint id,
+                                                               GLenum pname,
+                                                               GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryivContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLenum pname,
+                                                     GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryivEXTContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum pname,
+                                                        GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivContextANGLE(GLeglContext ctx,
+                                                                     GLenum target,
+                                                                     GLenum pname,
+                                                                     GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivOESContextANGLE(GLeglContext ctx,
+                                                                        GLenum target,
+                                                                        GLenum pname,
+                                                                        GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvContextANGLE(GLeglContext ctx,
+                                                                GLuint sampler,
+                                                                GLenum pname,
+                                                                GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivContextANGLE(GLeglContext ctx,
+                                                                GLuint sampler,
+                                                                GLenum pname,
+                                                                GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetShaderInfoLogContextANGLE(GLeglContext ctx,
+                                                           GLuint shader,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLchar *infoLog);
+ANGLE_EXPORT void GL_APIENTRY GetShaderPrecisionFormatContextANGLE(GLeglContext ctx,
+                                                                   GLenum shadertype,
+                                                                   GLenum precisiontype,
+                                                                   GLint *range,
+                                                                   GLint *precision);
+ANGLE_EXPORT void GL_APIENTRY GetShaderSourceContextANGLE(GLeglContext ctx,
+                                                          GLuint shader,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLchar *source);
+ANGLE_EXPORT void GL_APIENTRY GetShaderivContextANGLE(GLeglContext ctx,
+                                                      GLuint shader,
+                                                      GLenum pname,
+                                                      GLint *params);
+ANGLE_EXPORT const GLubyte *GL_APIENTRY GetStringContextANGLE(GLeglContext ctx, GLenum name);
+ANGLE_EXPORT const GLubyte *GL_APIENTRY GetStringiContextANGLE(GLeglContext ctx,
+                                                               GLenum name,
+                                                               GLuint index);
+ANGLE_EXPORT void GL_APIENTRY GetSyncivContextANGLE(GLeglContext ctx,
+                                                    GLsync sync,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLint *values);
+ANGLE_EXPORT void GL_APIENTRY GetTexEnvfvContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLenum pname,
+                                                      GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexEnvivContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLenum pname,
+                                                      GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexEnvxvContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLenum pname,
+                                                      GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexGenfvOESContextANGLE(GLeglContext ctx,
+                                                         GLenum coord,
+                                                         GLenum pname,
+                                                         GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexGenivOESContextANGLE(GLeglContext ctx,
+                                                         GLenum coord,
+                                                         GLenum pname,
+                                                         GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexGenxvOESContextANGLE(GLeglContext ctx,
+                                                         GLenum coord,
+                                                         GLenum pname,
+                                                         GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLint level,
+                                                                 GLenum pname,
+                                                                 GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLint level,
+                                                                 GLenum pname,
+                                                                 GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterivContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterxvContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY GetTransformFeedbackVaryingContextANGLE(GLeglContext ctx,
+                                                                      GLuint program,
+                                                                      GLuint index,
+                                                                      GLsizei bufSize,
+                                                                      GLsizei *length,
+                                                                      GLsizei *size,
+                                                                      GLenum *type,
+                                                                      GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetTranslatedShaderSourceANGLEContextANGLE(GLeglContext ctx,
+                                                                         GLuint shader,
+                                                                         GLsizei bufsize,
+                                                                         GLsizei *length,
+                                                                         GLchar *source);
+ANGLE_EXPORT GLuint GL_APIENTRY GetUniformBlockIndexContextANGLE(GLeglContext ctx,
+                                                                 GLuint program,
+                                                                 const GLchar *uniformBlockName);
+ANGLE_EXPORT void GL_APIENTRY GetUniformIndicesContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLsizei uniformCount,
+                                                            const GLchar *const *uniformNames,
+                                                            GLuint *uniformIndices);
+ANGLE_EXPORT GLint GL_APIENTRY GetUniformLocationContextANGLE(GLeglContext ctx,
+                                                              GLuint program,
+                                                              const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetUniformfvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformivContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformuivContextANGLE(GLeglContext ctx,
+                                                        GLuint program,
+                                                        GLint location,
+                                                        GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivContextANGLE(GLeglContext ctx,
+                                                             GLuint index,
+                                                             GLenum pname,
+                                                             GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivContextANGLE(GLeglContext ctx,
+                                                              GLuint index,
+                                                              GLenum pname,
+                                                              GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervContextANGLE(GLeglContext ctx,
+                                                                  GLuint index,
+                                                                  GLenum pname,
+                                                                  void **pointer);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvContextANGLE(GLeglContext ctx,
+                                                            GLuint index,
+                                                            GLenum pname,
+                                                            GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivContextANGLE(GLeglContext ctx,
+                                                            GLuint index,
+                                                            GLenum pname,
+                                                            GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformfvEXTContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLsizei bufSize,
+                                                           GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformivEXTContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLsizei bufSize,
+                                                           GLint *params);
+ANGLE_EXPORT void GL_APIENTRY HintContextANGLE(GLeglContext ctx, GLenum target, GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY InsertEventMarkerEXTContextANGLE(GLeglContext ctx,
+                                                               GLsizei length,
+                                                               const GLchar *marker);
+ANGLE_EXPORT void GL_APIENTRY InvalidateFramebufferContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLsizei numAttachments,
+                                                                const GLenum *attachments);
+ANGLE_EXPORT void GL_APIENTRY InvalidateSubFramebufferContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLsizei numAttachments,
+                                                                   const GLenum *attachments,
+                                                                   GLint x,
+                                                                   GLint y,
+                                                                   GLsizei width,
+                                                                   GLsizei height);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsBufferContextANGLE(GLeglContext ctx, GLuint buffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsEnabledContextANGLE(GLeglContext ctx, GLenum cap);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsFramebufferContextANGLE(GLeglContext ctx, GLuint framebuffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsFramebufferOESContextANGLE(GLeglContext ctx,
+                                                                GLuint framebuffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsProgramContextANGLE(GLeglContext ctx, GLuint program);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsQueryContextANGLE(GLeglContext ctx, GLuint id);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsQueryEXTContextANGLE(GLeglContext ctx, GLuint id);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsRenderbufferContextANGLE(GLeglContext ctx,
+                                                              GLuint renderbuffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsRenderbufferOESContextANGLE(GLeglContext ctx,
+                                                                 GLuint renderbuffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsSamplerContextANGLE(GLeglContext ctx, GLuint sampler);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsShaderContextANGLE(GLeglContext ctx, GLuint shader);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsSyncContextANGLE(GLeglContext ctx, GLsync sync);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsTextureContextANGLE(GLeglContext ctx, GLuint texture);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsTransformFeedbackContextANGLE(GLeglContext ctx, GLuint id);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsVertexArrayContextANGLE(GLeglContext ctx, GLuint array);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array);
+ANGLE_EXPORT void GL_APIENTRY LightModelfContextANGLE(GLeglContext ctx,
+                                                      GLenum pname,
+                                                      GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY LightModelfvContextANGLE(GLeglContext ctx,
+                                                       GLenum pname,
+                                                       const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY LightModelxContextANGLE(GLeglContext ctx,
+                                                      GLenum pname,
+                                                      GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY LightModelxvContextANGLE(GLeglContext ctx,
+                                                       GLenum pname,
+                                                       const GLfixed *param);
+ANGLE_EXPORT void GL_APIENTRY LightfContextANGLE(GLeglContext ctx,
+                                                 GLenum light,
+                                                 GLenum pname,
+                                                 GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY LightfvContextANGLE(GLeglContext ctx,
+                                                  GLenum light,
+                                                  GLenum pname,
+                                                  const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY LightxContextANGLE(GLeglContext ctx,
+                                                 GLenum light,
+                                                 GLenum pname,
+                                                 GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY LightxvContextANGLE(GLeglContext ctx,
+                                                  GLenum light,
+                                                  GLenum pname,
+                                                  const GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY LineWidthContextANGLE(GLeglContext ctx, GLfloat width);
+ANGLE_EXPORT void GL_APIENTRY LineWidthxContextANGLE(GLeglContext ctx, GLfixed width);
+ANGLE_EXPORT void GL_APIENTRY LinkProgramContextANGLE(GLeglContext ctx, GLuint program);
+ANGLE_EXPORT void GL_APIENTRY LoadIdentityContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY LoadMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m);
+ANGLE_EXPORT void GL_APIENTRY LoadMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m);
+ANGLE_EXPORT void GL_APIENTRY LoadPaletteFromModelViewMatrixOESContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY LogicOpContextANGLE(GLeglContext ctx, GLenum opcode);
+ANGLE_EXPORT void *GL_APIENTRY MapBufferOESContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum access);
+ANGLE_EXPORT void *GL_APIENTRY MapBufferRangeContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLintptr offset,
+                                                          GLsizeiptr length,
+                                                          GLbitfield access);
+ANGLE_EXPORT void *GL_APIENTRY MapBufferRangeEXTContextANGLE(GLeglContext ctx,
+                                                             GLenum target,
+                                                             GLintptr offset,
+                                                             GLsizeiptr length,
+                                                             GLbitfield access);
+ANGLE_EXPORT void GL_APIENTRY MaterialfContextANGLE(GLeglContext ctx,
+                                                    GLenum face,
+                                                    GLenum pname,
+                                                    GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY MaterialfvContextANGLE(GLeglContext ctx,
+                                                     GLenum face,
+                                                     GLenum pname,
+                                                     const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY MaterialxContextANGLE(GLeglContext ctx,
+                                                    GLenum face,
+                                                    GLenum pname,
+                                                    GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY MaterialxvContextANGLE(GLeglContext ctx,
+                                                     GLenum face,
+                                                     GLenum pname,
+                                                     const GLfixed *param);
+ANGLE_EXPORT void GL_APIENTRY MatrixIndexPointerOESContextANGLE(GLeglContext ctx,
+                                                                GLint size,
+                                                                GLenum type,
+                                                                GLsizei stride,
+                                                                const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY MatrixModeContextANGLE(GLeglContext ctx, GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY MemoryBarrierContextANGLE(GLeglContext ctx, GLbitfield barriers);
+ANGLE_EXPORT void GL_APIENTRY MemoryBarrierByRegionContextANGLE(GLeglContext ctx,
+                                                                GLbitfield barriers);
+ANGLE_EXPORT void GL_APIENTRY MultMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m);
+ANGLE_EXPORT void GL_APIENTRY MultMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m);
+ANGLE_EXPORT void GL_APIENTRY MultiTexCoord4fContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLfloat s,
+                                                          GLfloat t,
+                                                          GLfloat r,
+                                                          GLfloat q);
+ANGLE_EXPORT void GL_APIENTRY MultiTexCoord4xContextANGLE(GLeglContext ctx,
+                                                          GLenum texture,
+                                                          GLfixed s,
+                                                          GLfixed t,
+                                                          GLfixed r,
+                                                          GLfixed q);
+ANGLE_EXPORT void GL_APIENTRY Normal3fContextANGLE(GLeglContext ctx,
+                                                   GLfloat nx,
+                                                   GLfloat ny,
+                                                   GLfloat nz);
+ANGLE_EXPORT void GL_APIENTRY Normal3xContextANGLE(GLeglContext ctx,
+                                                   GLfixed nx,
+                                                   GLfixed ny,
+                                                   GLfixed nz);
+ANGLE_EXPORT void GL_APIENTRY NormalPointerContextANGLE(GLeglContext ctx,
+                                                        GLenum type,
+                                                        GLsizei stride,
+                                                        const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY ObjectLabelKHRContextANGLE(GLeglContext ctx,
+                                                         GLenum identifier,
+                                                         GLuint name,
+                                                         GLsizei length,
+                                                         const GLchar *label);
+ANGLE_EXPORT void GL_APIENTRY ObjectPtrLabelKHRContextANGLE(GLeglContext ctx,
+                                                            const void *ptr,
+                                                            GLsizei length,
+                                                            const GLchar *label);
+ANGLE_EXPORT void GL_APIENTRY OrthofContextANGLE(GLeglContext ctx,
+                                                 GLfloat l,
+                                                 GLfloat r,
+                                                 GLfloat b,
+                                                 GLfloat t,
+                                                 GLfloat n,
+                                                 GLfloat f);
+ANGLE_EXPORT void GL_APIENTRY OrthoxContextANGLE(GLeglContext ctx,
+                                                 GLfixed l,
+                                                 GLfixed r,
+                                                 GLfixed b,
+                                                 GLfixed t,
+                                                 GLfixed n,
+                                                 GLfixed f);
+ANGLE_EXPORT void GL_APIENTRY PauseTransformFeedbackContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY PixelStoreiContextANGLE(GLeglContext ctx, GLenum pname, GLint param);
+ANGLE_EXPORT void GL_APIENTRY PointParameterfContextANGLE(GLeglContext ctx,
+                                                          GLenum pname,
+                                                          GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY PointParameterfvContextANGLE(GLeglContext ctx,
+                                                           GLenum pname,
+                                                           const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY PointParameterxContextANGLE(GLeglContext ctx,
+                                                          GLenum pname,
+                                                          GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY PointParameterxvContextANGLE(GLeglContext ctx,
+                                                           GLenum pname,
+                                                           const GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY PointSizeContextANGLE(GLeglContext ctx, GLfloat size);
+ANGLE_EXPORT void GL_APIENTRY PointSizePointerOESContextANGLE(GLeglContext ctx,
+                                                              GLenum type,
+                                                              GLsizei stride,
+                                                              const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY PointSizexContextANGLE(GLeglContext ctx, GLfixed size);
+ANGLE_EXPORT void GL_APIENTRY PolygonOffsetContextANGLE(GLeglContext ctx,
+                                                        GLfloat factor,
+                                                        GLfloat units);
+ANGLE_EXPORT void GL_APIENTRY PolygonOffsetxContextANGLE(GLeglContext ctx,
+                                                         GLfixed factor,
+                                                         GLfixed units);
+ANGLE_EXPORT void GL_APIENTRY PopDebugGroupKHRContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY PopGroupMarkerEXTContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY PopMatrixContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY ProgramBinaryContextANGLE(GLeglContext ctx,
+                                                        GLuint program,
+                                                        GLenum binaryFormat,
+                                                        const void *binary,
+                                                        GLsizei length);
+ANGLE_EXPORT void GL_APIENTRY ProgramBinaryOESContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLenum binaryFormat,
+                                                           const void *binary,
+                                                           GLint length);
+ANGLE_EXPORT void GL_APIENTRY ProgramParameteriContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLenum pname,
+                                                            GLint value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1fContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLfloat v0);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1fvContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1iContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLint v0);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1ivContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1uiContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLuint v0);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1uivContextANGLE(GLeglContext ctx,
+                                                             GLuint program,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2fContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLfloat v0,
+                                                           GLfloat v1);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2fvContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramUniform2iContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2ivContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2uiContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLuint v0,
+                                                            GLuint v1);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2uivContextANGLE(GLeglContext ctx,
+                                                             GLuint program,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3fContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLfloat v0,
+                                                           GLfloat v1,
+                                                           GLfloat v2);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3fvContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3iContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLint v0,
+                                                           GLint v1,
+                                                           GLint v2);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3ivContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3uiContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLuint v0,
+                                                            GLuint v1,
+                                                            GLuint v2);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3uivContextANGLE(GLeglContext ctx,
+                                                             GLuint program,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4fContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLfloat v0,
+                                                           GLfloat v1,
+                                                           GLfloat v2,
+                                                           GLfloat v3);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4fvContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4iContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           GLint v0,
+                                                           GLint v1,
+                                                           GLint v2,
+                                                           GLint v3);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4ivContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLsizei count,
+                                                            const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4uiContextANGLE(GLeglContext ctx,
+                                                            GLuint program,
+                                                            GLint location,
+                                                            GLuint v0,
+                                                            GLuint v1,
+                                                            GLuint v2,
+                                                            GLuint v3);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4uivContextANGLE(GLeglContext ctx,
+                                                             GLuint program,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2fvContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLint location,
+                                                                  GLsizei count,
+                                                                  GLboolean transpose,
+                                                                  const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x3fvContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLint location,
+                                                                    GLsizei count,
+                                                                    GLboolean transpose,
+                                                                    const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x4fvContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLint location,
+                                                                    GLsizei count,
+                                                                    GLboolean transpose,
+                                                                    const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3fvContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLint location,
+                                                                  GLsizei count,
+                                                                  GLboolean transpose,
+                                                                  const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x2fvContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLint location,
+                                                                    GLsizei count,
+                                                                    GLboolean transpose,
+                                                                    const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x4fvContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLint location,
+                                                                    GLsizei count,
+                                                                    GLboolean transpose,
+                                                                    const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4fvContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLint location,
+                                                                  GLsizei count,
+                                                                  GLboolean transpose,
+                                                                  const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x2fvContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLint location,
+                                                                    GLsizei count,
+                                                                    GLboolean transpose,
+                                                                    const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x3fvContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLint location,
+                                                                    GLsizei count,
+                                                                    GLboolean transpose,
+                                                                    const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY PushDebugGroupKHRContextANGLE(GLeglContext ctx,
+                                                            GLenum source,
+                                                            GLuint id,
+                                                            GLsizei length,
+                                                            const GLchar *message);
+ANGLE_EXPORT void GL_APIENTRY PushGroupMarkerEXTContextANGLE(GLeglContext ctx,
+                                                             GLsizei length,
+                                                             const GLchar *marker);
+ANGLE_EXPORT void GL_APIENTRY PushMatrixContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY QueryCounterEXTContextANGLE(GLeglContext ctx,
+                                                          GLuint id,
+                                                          GLenum target);
+ANGLE_EXPORT GLbitfield GL_APIENTRY QueryMatrixxOESContextANGLE(GLeglContext ctx,
+                                                                GLfixed *mantissa,
+                                                                GLint *exponent);
+ANGLE_EXPORT void GL_APIENTRY ReadBufferContextANGLE(GLeglContext ctx, GLenum src);
+ANGLE_EXPORT void GL_APIENTRY ReadPixelsContextANGLE(GLeglContext ctx,
+                                                     GLint x,
+                                                     GLint y,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLenum format,
+                                                     GLenum type,
+                                                     void *pixels);
+ANGLE_EXPORT void GL_APIENTRY ReadnPixelsEXTContextANGLE(GLeglContext ctx,
+                                                         GLint x,
+                                                         GLint y,
+                                                         GLsizei width,
+                                                         GLsizei height,
+                                                         GLenum format,
+                                                         GLenum type,
+                                                         GLsizei bufSize,
+                                                         void *data);
+ANGLE_EXPORT void GL_APIENTRY ReleaseShaderCompilerContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageContextANGLE(GLeglContext ctx,
+                                                              GLenum target,
+                                                              GLenum internalformat,
+                                                              GLsizei width,
+                                                              GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageMultisampleContextANGLE(GLeglContext ctx,
+                                                                         GLenum target,
+                                                                         GLsizei samples,
+                                                                         GLenum internalformat,
+                                                                         GLsizei width,
+                                                                         GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageMultisampleANGLEContextANGLE(GLeglContext ctx,
+                                                                              GLenum target,
+                                                                              GLsizei samples,
+                                                                              GLenum internalformat,
+                                                                              GLsizei width,
+                                                                              GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageOESContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLenum internalformat,
+                                                                 GLsizei width,
+                                                                 GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY ResumeTransformFeedbackContextANGLE(GLeglContext ctx);
+ANGLE_EXPORT void GL_APIENTRY
+RotatefContextANGLE(GLeglContext ctx, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+ANGLE_EXPORT void GL_APIENTRY
+RotatexContextANGLE(GLeglContext ctx, GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+ANGLE_EXPORT void GL_APIENTRY SampleCoverageContextANGLE(GLeglContext ctx,
+                                                         GLfloat value,
+                                                         GLboolean invert);
+ANGLE_EXPORT void GL_APIENTRY SampleCoveragexContextANGLE(GLeglContext ctx,
+                                                          GLclampx value,
+                                                          GLboolean invert);
+ANGLE_EXPORT void GL_APIENTRY SampleMaskiContextANGLE(GLeglContext ctx,
+                                                      GLuint maskNumber,
+                                                      GLbitfield mask);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterfContextANGLE(GLeglContext ctx,
+                                                            GLuint sampler,
+                                                            GLenum pname,
+                                                            GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvContextANGLE(GLeglContext ctx,
+                                                             GLuint sampler,
+                                                             GLenum pname,
+                                                             const GLfloat *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameteriContextANGLE(GLeglContext ctx,
+                                                            GLuint sampler,
+                                                            GLenum pname,
+                                                            GLint param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterivContextANGLE(GLeglContext ctx,
+                                                             GLuint sampler,
+                                                             GLenum pname,
+                                                             const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY ScalefContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z);
+ANGLE_EXPORT void GL_APIENTRY ScalexContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z);
+ANGLE_EXPORT void GL_APIENTRY
+ScissorContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY SetFenceNVContextANGLE(GLeglContext ctx,
+                                                     GLuint fence,
+                                                     GLenum condition);
+ANGLE_EXPORT void GL_APIENTRY ShadeModelContextANGLE(GLeglContext ctx, GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY ShaderBinaryContextANGLE(GLeglContext ctx,
+                                                       GLsizei count,
+                                                       const GLuint *shaders,
+                                                       GLenum binaryformat,
+                                                       const void *binary,
+                                                       GLsizei length);
+ANGLE_EXPORT void GL_APIENTRY ShaderSourceContextANGLE(GLeglContext ctx,
+                                                       GLuint shader,
+                                                       GLsizei count,
+                                                       const GLchar *const *string,
+                                                       const GLint *length);
+ANGLE_EXPORT void GL_APIENTRY StencilFuncContextANGLE(GLeglContext ctx,
+                                                      GLenum func,
+                                                      GLint ref,
+                                                      GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY
+StencilFuncSeparateContextANGLE(GLeglContext ctx, GLenum face, GLenum func, GLint ref, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilMaskContextANGLE(GLeglContext ctx, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilMaskSeparateContextANGLE(GLeglContext ctx,
+                                                              GLenum face,
+                                                              GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilOpContextANGLE(GLeglContext ctx,
+                                                    GLenum fail,
+                                                    GLenum zfail,
+                                                    GLenum zpass);
+ANGLE_EXPORT void GL_APIENTRY StencilOpSeparateContextANGLE(GLeglContext ctx,
+                                                            GLenum face,
+                                                            GLenum sfail,
+                                                            GLenum dpfail,
+                                                            GLenum dppass);
+ANGLE_EXPORT GLboolean GL_APIENTRY TestFenceNVContextANGLE(GLeglContext ctx, GLuint fence);
+ANGLE_EXPORT void GL_APIENTRY TexCoordPointerContextANGLE(GLeglContext ctx,
+                                                          GLint size,
+                                                          GLenum type,
+                                                          GLsizei stride,
+                                                          const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY TexEnvfContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLenum pname,
+                                                  GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY TexEnvfvContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLenum pname,
+                                                   const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY TexEnviContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLenum pname,
+                                                  GLint param);
+ANGLE_EXPORT void GL_APIENTRY TexEnvivContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLenum pname,
+                                                   const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexEnvxContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLenum pname,
+                                                  GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY TexEnvxvContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLenum pname,
+                                                   const GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY TexGenfOESContextANGLE(GLeglContext ctx,
+                                                     GLenum coord,
+                                                     GLenum pname,
+                                                     GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY TexGenfvOESContextANGLE(GLeglContext ctx,
+                                                      GLenum coord,
+                                                      GLenum pname,
+                                                      const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY TexGeniOESContextANGLE(GLeglContext ctx,
+                                                     GLenum coord,
+                                                     GLenum pname,
+                                                     GLint param);
+ANGLE_EXPORT void GL_APIENTRY TexGenivOESContextANGLE(GLeglContext ctx,
+                                                      GLenum coord,
+                                                      GLenum pname,
+                                                      const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexGenxOESContextANGLE(GLeglContext ctx,
+                                                     GLenum coord,
+                                                     GLenum pname,
+                                                     GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY TexGenxvOESContextANGLE(GLeglContext ctx,
+                                                      GLenum coord,
+                                                      GLenum pname,
+                                                      const GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY TexImage2DContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLint level,
+                                                     GLint internalformat,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLint border,
+                                                     GLenum format,
+                                                     GLenum type,
+                                                     const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexImage3DContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLint level,
+                                                     GLint internalformat,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLsizei depth,
+                                                     GLint border,
+                                                     GLenum format,
+                                                     GLenum type,
+                                                     const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexParameterfContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum pname,
+                                                        GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY TexParameterfvContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum pname,
+                                                         const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameteriContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum pname,
+                                                        GLint param);
+ANGLE_EXPORT void GL_APIENTRY TexParameterivContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum pname,
+                                                         const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterxContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLenum pname,
+                                                        GLfixed param);
+ANGLE_EXPORT void GL_APIENTRY TexParameterxvContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum pname,
+                                                         const GLfixed *params);
+ANGLE_EXPORT void GL_APIENTRY TexStorage1DEXTContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLsizei levels,
+                                                          GLenum internalformat,
+                                                          GLsizei width);
+ANGLE_EXPORT void GL_APIENTRY TexStorage2DContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLsizei levels,
+                                                       GLenum internalformat,
+                                                       GLsizei width,
+                                                       GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY TexStorage2DEXTContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLsizei levels,
+                                                          GLenum internalformat,
+                                                          GLsizei width,
+                                                          GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY TexStorage2DMultisampleContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLsizei samples,
+                                                                  GLenum internalformat,
+                                                                  GLsizei width,
+                                                                  GLsizei height,
+                                                                  GLboolean fixedsamplelocations);
+ANGLE_EXPORT void GL_APIENTRY TexStorage3DContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLsizei levels,
+                                                       GLenum internalformat,
+                                                       GLsizei width,
+                                                       GLsizei height,
+                                                       GLsizei depth);
+ANGLE_EXPORT void GL_APIENTRY TexStorage3DEXTContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLsizei levels,
+                                                          GLenum internalformat,
+                                                          GLsizei width,
+                                                          GLsizei height,
+                                                          GLsizei depth);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage2DContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLint level,
+                                                        GLint xoffset,
+                                                        GLint yoffset,
+                                                        GLsizei width,
+                                                        GLsizei height,
+                                                        GLenum format,
+                                                        GLenum type,
+                                                        const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage3DContextANGLE(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);
+ANGLE_EXPORT void GL_APIENTRY TransformFeedbackVaryingsContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLsizei count,
+                                                                    const GLchar *const *varyings,
+                                                                    GLenum bufferMode);
+ANGLE_EXPORT void GL_APIENTRY TranslatefContextANGLE(GLeglContext ctx,
+                                                     GLfloat x,
+                                                     GLfloat y,
+                                                     GLfloat z);
+ANGLE_EXPORT void GL_APIENTRY TranslatexContextANGLE(GLeglContext ctx,
+                                                     GLfixed x,
+                                                     GLfixed y,
+                                                     GLfixed z);
+ANGLE_EXPORT void GL_APIENTRY Uniform1fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0);
+ANGLE_EXPORT void GL_APIENTRY Uniform1fvContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform1iContextANGLE(GLeglContext ctx, GLint location, GLint v0);
+ANGLE_EXPORT void GL_APIENTRY Uniform1ivContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform1uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0);
+ANGLE_EXPORT void GL_APIENTRY Uniform1uivContextANGLE(GLeglContext ctx,
+                                                      GLint location,
+                                                      GLsizei count,
+                                                      const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform2fContextANGLE(GLeglContext ctx,
+                                                    GLint location,
+                                                    GLfloat v0,
+                                                    GLfloat v1);
+ANGLE_EXPORT void GL_APIENTRY Uniform2fvContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform2iContextANGLE(GLeglContext ctx,
+                                                    GLint location,
+                                                    GLint v0,
+                                                    GLint v1);
+ANGLE_EXPORT void GL_APIENTRY Uniform2ivContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform2uiContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLuint v0,
+                                                     GLuint v1);
+ANGLE_EXPORT void GL_APIENTRY Uniform2uivContextANGLE(GLeglContext ctx,
+                                                      GLint location,
+                                                      GLsizei count,
+                                                      const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY
+Uniform3fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+ANGLE_EXPORT void GL_APIENTRY Uniform3fvContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY
+Uniform3iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2);
+ANGLE_EXPORT void GL_APIENTRY Uniform3ivContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY
+Uniform3uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2);
+ANGLE_EXPORT void GL_APIENTRY Uniform3uivContextANGLE(GLeglContext ctx,
+                                                      GLint location,
+                                                      GLsizei count,
+                                                      const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform4fContextANGLE(GLeglContext ctx,
+                                                    GLint location,
+                                                    GLfloat v0,
+                                                    GLfloat v1,
+                                                    GLfloat v2,
+                                                    GLfloat v3);
+ANGLE_EXPORT void GL_APIENTRY Uniform4fvContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY
+Uniform4iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+ANGLE_EXPORT void GL_APIENTRY Uniform4ivContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLsizei count,
+                                                     const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform4uiContextANGLE(GLeglContext ctx,
+                                                     GLint location,
+                                                     GLuint v0,
+                                                     GLuint v1,
+                                                     GLuint v2,
+                                                     GLuint v3);
+ANGLE_EXPORT void GL_APIENTRY Uniform4uivContextANGLE(GLeglContext ctx,
+                                                      GLint location,
+                                                      GLsizei count,
+                                                      const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY UniformBlockBindingContextANGLE(GLeglContext ctx,
+                                                              GLuint program,
+                                                              GLuint uniformBlockIndex,
+                                                              GLuint uniformBlockBinding);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix2fvContextANGLE(GLeglContext ctx,
+                                                           GLint location,
+                                                           GLsizei count,
+                                                           GLboolean transpose,
+                                                           const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix2x3fvContextANGLE(GLeglContext ctx,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             GLboolean transpose,
+                                                             const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix2x4fvContextANGLE(GLeglContext ctx,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             GLboolean transpose,
+                                                             const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix3fvContextANGLE(GLeglContext ctx,
+                                                           GLint location,
+                                                           GLsizei count,
+                                                           GLboolean transpose,
+                                                           const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix3x2fvContextANGLE(GLeglContext ctx,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             GLboolean transpose,
+                                                             const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix3x4fvContextANGLE(GLeglContext ctx,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             GLboolean transpose,
+                                                             const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix4fvContextANGLE(GLeglContext ctx,
+                                                           GLint location,
+                                                           GLsizei count,
+                                                           GLboolean transpose,
+                                                           const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix4x2fvContextANGLE(GLeglContext ctx,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             GLboolean transpose,
+                                                             const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix4x3fvContextANGLE(GLeglContext ctx,
+                                                             GLint location,
+                                                             GLsizei count,
+                                                             GLboolean transpose,
+                                                             const GLfloat *value);
+ANGLE_EXPORT GLboolean GL_APIENTRY UnmapBufferContextANGLE(GLeglContext ctx, GLenum target);
+ANGLE_EXPORT GLboolean GL_APIENTRY UnmapBufferOESContextANGLE(GLeglContext ctx, GLenum target);
+ANGLE_EXPORT void GL_APIENTRY UseProgramContextANGLE(GLeglContext ctx, GLuint program);
+ANGLE_EXPORT void GL_APIENTRY UseProgramStagesContextANGLE(GLeglContext ctx,
+                                                           GLuint pipeline,
+                                                           GLbitfield stages,
+                                                           GLuint program);
+ANGLE_EXPORT void GL_APIENTRY ValidateProgramContextANGLE(GLeglContext ctx, GLuint program);
+ANGLE_EXPORT void GL_APIENTRY ValidateProgramPipelineContextANGLE(GLeglContext ctx,
+                                                                  GLuint pipeline);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib1fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib1fvContextANGLE(GLeglContext ctx,
+                                                          GLuint index,
+                                                          const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib2fContextANGLE(GLeglContext ctx,
+                                                         GLuint index,
+                                                         GLfloat x,
+                                                         GLfloat y);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib2fvContextANGLE(GLeglContext ctx,
+                                                          GLuint index,
+                                                          const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY
+VertexAttrib3fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib3fvContextANGLE(GLeglContext ctx,
+                                                          GLuint index,
+                                                          const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib4fContextANGLE(GLeglContext ctx,
+                                                         GLuint index,
+                                                         GLfloat x,
+                                                         GLfloat y,
+                                                         GLfloat z,
+                                                         GLfloat w);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib4fvContextANGLE(GLeglContext ctx,
+                                                          GLuint index,
+                                                          const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribBindingContextANGLE(GLeglContext ctx,
+                                                              GLuint attribindex,
+                                                              GLuint bindingindex);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribDivisorContextANGLE(GLeglContext ctx,
+                                                              GLuint index,
+                                                              GLuint divisor);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribDivisorANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLuint index,
+                                                                   GLuint divisor);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribFormatContextANGLE(GLeglContext ctx,
+                                                             GLuint attribindex,
+                                                             GLint size,
+                                                             GLenum type,
+                                                             GLboolean normalized,
+                                                             GLuint relativeoffset);
+ANGLE_EXPORT void GL_APIENTRY
+VertexAttribI4iContextANGLE(GLeglContext ctx, GLuint index, GLint x, GLint y, GLint z, GLint w);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribI4ivContextANGLE(GLeglContext ctx,
+                                                           GLuint index,
+                                                           const GLint *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribI4uiContextANGLE(GLeglContext ctx,
+                                                           GLuint index,
+                                                           GLuint x,
+                                                           GLuint y,
+                                                           GLuint z,
+                                                           GLuint w);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribI4uivContextANGLE(GLeglContext ctx,
+                                                            GLuint index,
+                                                            const GLuint *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribIFormatContextANGLE(GLeglContext ctx,
+                                                              GLuint attribindex,
+                                                              GLint size,
+                                                              GLenum type,
+                                                              GLuint relativeoffset);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribIPointerContextANGLE(GLeglContext ctx,
+                                                               GLuint index,
+                                                               GLint size,
+                                                               GLenum type,
+                                                               GLsizei stride,
+                                                               const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribPointerContextANGLE(GLeglContext ctx,
+                                                              GLuint index,
+                                                              GLint size,
+                                                              GLenum type,
+                                                              GLboolean normalized,
+                                                              GLsizei stride,
+                                                              const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY VertexBindingDivisorContextANGLE(GLeglContext ctx,
+                                                               GLuint bindingindex,
+                                                               GLuint divisor);
+ANGLE_EXPORT void GL_APIENTRY VertexPointerContextANGLE(GLeglContext ctx,
+                                                        GLint size,
+                                                        GLenum type,
+                                                        GLsizei stride,
+                                                        const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY
+ViewportContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY WaitSyncContextANGLE(GLeglContext ctx,
+                                                   GLsync sync,
+                                                   GLbitfield flags,
+                                                   GLuint64 timeout);
+ANGLE_EXPORT void GL_APIENTRY WeightPointerOESContextANGLE(GLeglContext ctx,
+                                                           GLint size,
+                                                           GLenum type,
+                                                           GLsizei stride,
+                                                           const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY BindUniformLocationCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                      GLuint program,
+                                                                      GLint location,
+                                                                      const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY CoverageModulationCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                     GLenum components);
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadfCHROMIUMContextANGLE(GLeglContext ctx,
+                                                              GLenum matrixMode,
+                                                              const GLfloat *matrix);
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadIdentityCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                     GLenum matrixMode);
+ANGLE_EXPORT GLuint GL_APIENTRY GenPathsCHROMIUMContextANGLE(GLeglContext ctx, GLsizei range);
+ANGLE_EXPORT void GL_APIENTRY DeletePathsCHROMIUMContextANGLE(GLeglContext ctx,
+                                                              GLuint first,
+                                                              GLsizei range);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path);
+ANGLE_EXPORT void GL_APIENTRY PathCommandsCHROMIUMContextANGLE(GLeglContext ctx,
+                                                               GLuint path,
+                                                               GLsizei numCommands,
+                                                               const GLubyte *commands,
+                                                               GLsizei numCoords,
+                                                               GLenum coordType,
+                                                               const void *coords);
+ANGLE_EXPORT void GL_APIENTRY PathParameterfCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                 GLuint path,
+                                                                 GLenum pname,
+                                                                 GLfloat value);
+ANGLE_EXPORT void GL_APIENTRY PathParameteriCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                 GLuint path,
+                                                                 GLenum pname,
+                                                                 GLint value);
+ANGLE_EXPORT void GL_APIENTRY GetPathParameterfvCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                     GLuint path,
+                                                                     GLenum pname,
+                                                                     GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY GetPathParameterivCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                     GLuint path,
+                                                                     GLenum pname,
+                                                                     GLint *value);
+ANGLE_EXPORT void GL_APIENTRY PathStencilFuncCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                  GLenum func,
+                                                                  GLint ref,
+                                                                  GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                  GLuint path,
+                                                                  GLenum fillMode,
+                                                                  GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                    GLuint path,
+                                                                    GLint reference,
+                                                                    GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY CoverFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                GLuint path,
+                                                                GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY CoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                  GLuint path,
+                                                                  GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                           GLuint path,
+                                                                           GLenum fillMode,
+                                                                           GLuint mask,
+                                                                           GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                             GLuint path,
+                                                                             GLint reference,
+                                                                             GLuint mask,
+                                                                             GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY
+CoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                           GLsizei numPath,
+                                           GLenum pathNameType,
+                                           const void *paths,
+                                           GLuint pathBase,
+                                           GLenum coverMode,
+                                           GLenum transformType,
+                                           const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+CoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                             GLsizei numPath,
+                                             GLenum pathNameType,
+                                             const void *paths,
+                                             GLuint pathBase,
+                                             GLenum coverMode,
+                                             GLenum transformType,
+                                             const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                               GLsizei numPath,
+                                               GLenum pathNameType,
+                                               const void *paths,
+                                               GLuint pathBase,
+                                               GLint reference,
+                                               GLuint mask,
+                                               GLenum transformType,
+                                               const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                             GLsizei numPaths,
+                                             GLenum pathNameType,
+                                             const void *paths,
+                                             GLuint pathBase,
+                                             GLenum fillMode,
+                                             GLuint mask,
+                                             GLenum transformType,
+                                             const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                      GLsizei numPaths,
+                                                      GLenum pathNameType,
+                                                      const void *paths,
+                                                      GLuint pathBase,
+                                                      GLenum fillMode,
+                                                      GLuint mask,
+                                                      GLenum coverMode,
+                                                      GLenum transformType,
+                                                      const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                        GLsizei numPaths,
+                                                        GLenum pathNameType,
+                                                        const void *paths,
+                                                        GLuint pathBase,
+                                                        GLint reference,
+                                                        GLuint mask,
+                                                        GLenum coverMode,
+                                                        GLenum transformType,
+                                                        const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY BindFragmentInputLocationCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                            GLuint programs,
+                                                                            GLint location,
+                                                                            const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramPathFragmentInputGenCHROMIUMContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLenum genMode,
+                                                GLint components,
+                                                const GLfloat *coeffs);
+ANGLE_EXPORT void GL_APIENTRY CopyTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                              GLuint sourceId,
+                                                              GLint sourceLevel,
+                                                              GLenum destTarget,
+                                                              GLuint destId,
+                                                              GLint destLevel,
+                                                              GLint internalFormat,
+                                                              GLenum destType,
+                                                              GLboolean unpackFlipY,
+                                                              GLboolean unpackPremultiplyAlpha,
+                                                              GLboolean unpackUnmultiplyAlpha);
+ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                 GLuint sourceId,
+                                                                 GLint sourceLevel,
+                                                                 GLenum destTarget,
+                                                                 GLuint destId,
+                                                                 GLint destLevel,
+                                                                 GLint xoffset,
+                                                                 GLint yoffset,
+                                                                 GLint x,
+                                                                 GLint y,
+                                                                 GLint width,
+                                                                 GLint height,
+                                                                 GLboolean unpackFlipY,
+                                                                 GLboolean unpackPremultiplyAlpha,
+                                                                 GLboolean unpackUnmultiplyAlpha);
+ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                        GLuint sourceId,
+                                                                        GLuint destId);
+ANGLE_EXPORT void GL_APIENTRY RequestExtensionANGLEContextANGLE(GLeglContext ctx,
+                                                                const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLboolean *params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                          GLenum target,
+                                                                          GLenum pname,
+                                                                          GLsizei bufSize,
+                                                                          GLsizei *length,
+                                                                          GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY
+GetFramebufferAttachmentParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLenum target,
+                                                           GLenum attachment,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLenum pname,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                                GLenum target,
+                                                                                GLenum pname,
+                                                                                GLsizei bufSize,
+                                                                                GLsizei *length,
+                                                                                GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetShaderivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLuint shader,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                       GLenum target,
+                                                                       GLenum pname,
+                                                                       GLsizei bufSize,
+                                                                       GLsizei *length,
+                                                                       GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                       GLenum target,
+                                                                       GLenum pname,
+                                                                       GLsizei bufSize,
+                                                                       GLsizei *length,
+                                                                       GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLint location,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLint location,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                       GLuint index,
+                                                                       GLenum pname,
+                                                                       GLsizei bufSize,
+                                                                       GLsizei *length,
+                                                                       GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                       GLuint index,
+                                                                       GLenum pname,
+                                                                       GLsizei bufSize,
+                                                                       GLsizei *length,
+                                                                       GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                             GLuint index,
+                                                                             GLenum pname,
+                                                                             GLsizei bufSize,
+                                                                             GLsizei *length,
+                                                                             void **pointer);
+ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLint x,
+                                                                GLint y,
+                                                                GLsizei width,
+                                                                GLsizei height,
+                                                                GLenum format,
+                                                                GLenum type,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLsizei *columns,
+                                                                GLsizei *rows,
+                                                                void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLint level,
+                                                                GLint internalformat,
+                                                                GLsizei width,
+                                                                GLsizei height,
+                                                                GLint border,
+                                                                GLenum format,
+                                                                GLenum type,
+                                                                GLsizei bufSize,
+                                                                const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                    GLenum target,
+                                                                    GLenum pname,
+                                                                    GLsizei bufSize,
+                                                                    const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                    GLenum target,
+                                                                    GLenum pname,
+                                                                    GLsizei bufSize,
+                                                                    const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLint level,
+                                                                   GLint xoffset,
+                                                                   GLint yoffset,
+                                                                   GLsizei width,
+                                                                   GLsizei height,
+                                                                   GLenum format,
+                                                                   GLenum type,
+                                                                   GLsizei bufSize,
+                                                                   const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLint level,
+                                                                GLint internalformat,
+                                                                GLsizei width,
+                                                                GLsizei height,
+                                                                GLsizei depth,
+                                                                GLint border,
+                                                                GLenum format,
+                                                                GLenum type,
+                                                                GLsizei bufSize,
+                                                                const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLint level,
+                                                                   GLint xoffset,
+                                                                   GLint yoffset,
+                                                                   GLint zoffset,
+                                                                   GLsizei width,
+                                                                   GLsizei height,
+                                                                   GLsizei depth,
+                                                                   GLenum format,
+                                                                   GLenum type,
+                                                                   GLsizei bufSize,
+                                                                   const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                          GLenum target,
+                                                                          GLint level,
+                                                                          GLenum internalformat,
+                                                                          GLsizei width,
+                                                                          GLsizei height,
+                                                                          GLint border,
+                                                                          GLsizei imageSize,
+                                                                          GLsizei dataSize,
+                                                                          const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                             GLenum target,
+                                                                             GLint level,
+                                                                             GLsizei xoffset,
+                                                                             GLsizei yoffset,
+                                                                             GLsizei width,
+                                                                             GLsizei height,
+                                                                             GLenum format,
+                                                                             GLsizei imageSize,
+                                                                             GLsizei dataSize,
+                                                                             const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                          GLenum target,
+                                                                          GLint level,
+                                                                          GLenum internalformat,
+                                                                          GLsizei width,
+                                                                          GLsizei height,
+                                                                          GLsizei depth,
+                                                                          GLint border,
+                                                                          GLsizei imageSize,
+                                                                          GLsizei dataSize,
+                                                                          const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                             GLenum target,
+                                                                             GLint level,
+                                                                             GLint xoffset,
+                                                                             GLint yoffset,
+                                                                             GLint zoffset,
+                                                                             GLsizei width,
+                                                                             GLsizei height,
+                                                                             GLsizei depth,
+                                                                             GLenum format,
+                                                                             GLsizei imageSize,
+                                                                             GLsizei dataSize,
+                                                                             const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY GetQueryivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLenum target,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                       GLuint id,
+                                                                       GLenum pname,
+                                                                       GLsizei bufSize,
+                                                                       GLsizei *length,
+                                                                       GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                       GLenum target,
+                                                                       GLenum pname,
+                                                                       GLsizei bufSize,
+                                                                       GLsizei *length,
+                                                                       void **params);
+ANGLE_EXPORT void GL_APIENTRY GetIntegeri_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLuint index,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                         GLenum target,
+                                                                         GLenum internalformat,
+                                                                         GLenum pname,
+                                                                         GLsizei bufSize,
+                                                                         GLsizei *length,
+                                                                         GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                        GLuint index,
+                                                                        GLenum pname,
+                                                                        GLsizei bufSize,
+                                                                        GLsizei *length,
+                                                                        GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                         GLuint index,
+                                                                         GLenum pname,
+                                                                         GLsizei bufSize,
+                                                                         GLsizei *length,
+                                                                         GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLuint program,
+                                                                   GLint location,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY
+GetActiveUniformBlockivRobustANGLEContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLuint uniformBlockIndex,
+                                               GLenum pname,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum pname,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                     GLenum target,
+                                                                     GLuint index,
+                                                                     GLsizei bufSize,
+                                                                     GLsizei *length,
+                                                                     GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                            GLenum target,
+                                                                            GLenum pname,
+                                                                            GLsizei bufSize,
+                                                                            GLsizei *length,
+                                                                            GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                        GLuint sampler,
+                                                                        GLuint pname,
+                                                                        GLsizei bufSize,
+                                                                        const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                        GLuint sampler,
+                                                                        GLenum pname,
+                                                                        GLsizei bufSize,
+                                                                        const GLfloat *param);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                           GLuint sampler,
+                                                                           GLenum pname,
+                                                                           GLsizei bufSize,
+                                                                           GLsizei *length,
+                                                                           GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                           GLuint sampler,
+                                                                           GLenum pname,
+                                                                           GLsizei bufSize,
+                                                                           GLsizei *length,
+                                                                           GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                               GLuint sampler,
+                                                                               GLenum pname,
+                                                                               GLsizei bufSize,
+                                                                               GLsizei *length,
+                                                                               GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                           GLuint program,
+                                                                           GLenum programInterface,
+                                                                           GLenum pname,
+                                                                           GLsizei bufSize,
+                                                                           GLsizei *length,
+                                                                           GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLuint index,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                      GLenum pname,
+                                                                      GLuint index,
+                                                                      GLsizei bufSize,
+                                                                      GLsizei *length,
+                                                                      GLfloat *val);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                            GLenum target,
+                                                                            GLint level,
+                                                                            GLenum pname,
+                                                                            GLsizei bufSize,
+                                                                            GLsizei *length,
+                                                                            GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                            GLenum target,
+                                                                            GLint level,
+                                                                            GLenum pname,
+                                                                            GLsizei bufSize,
+                                                                            GLsizei *length,
+                                                                            GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLEContextANGLE(GLeglContext ctx,
+                                                                            GLenum pname,
+                                                                            GLsizei bufSize,
+                                                                            GLsizei *length,
+                                                                            void **params);
+ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLint x,
+                                                                 GLint y,
+                                                                 GLsizei width,
+                                                                 GLsizei height,
+                                                                 GLenum format,
+                                                                 GLenum type,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLsizei *columns,
+                                                                 GLsizei *rows,
+                                                                 void *data);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLuint program,
+                                                                   GLint location,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLuint program,
+                                                                   GLint location,
+                                                                   GLsizei bufSize,
+                                                                   GLsizei *length,
+                                                                   GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                    GLuint program,
+                                                                    GLint location,
+                                                                    GLsizei bufSize,
+                                                                    GLsizei *length,
+                                                                    GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                     GLenum target,
+                                                                     GLenum pname,
+                                                                     GLsizei bufSize,
+                                                                     const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                      GLenum target,
+                                                                      GLenum pname,
+                                                                      GLsizei bufSize,
+                                                                      const GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                        GLenum target,
+                                                                        GLenum pname,
+                                                                        GLsizei bufSize,
+                                                                        GLsizei *length,
+                                                                        GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                         GLenum target,
+                                                                         GLenum pname,
+                                                                         GLsizei bufSize,
+                                                                         GLsizei *length,
+                                                                         GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                         GLuint sampler,
+                                                                         GLenum pname,
+                                                                         GLsizei bufSize,
+                                                                         const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                          GLuint sampler,
+                                                                          GLenum pname,
+                                                                          GLsizei bufSize,
+                                                                          const GLuint *param);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                            GLuint sampler,
+                                                                            GLenum pname,
+                                                                            GLsizei bufSize,
+                                                                            GLsizei *length,
+                                                                            GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                             GLuint sampler,
+                                                                             GLenum pname,
+                                                                             GLsizei bufSize,
+                                                                             GLsizei *length,
+                                                                             GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                      GLuint id,
+                                                                      GLenum pname,
+                                                                      GLsizei bufSize,
+                                                                      GLsizei *length,
+                                                                      GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                        GLuint id,
+                                                                        GLenum pname,
+                                                                        GLsizei bufSize,
+                                                                        GLsizei *length,
+                                                                        GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                         GLuint id,
+                                                                         GLenum pname,
+                                                                         GLsizei bufSize,
+                                                                         GLsizei *length,
+                                                                         GLuint64 *params);
+ANGLE_EXPORT void GL_APIENTRY
+FramebufferTextureMultiviewLayeredANGLEContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLenum attachment,
+                                                    GLuint texture,
+                                                    GLint level,
+                                                    GLint baseViewIndex,
+                                                    GLsizei numViews);
+ANGLE_EXPORT void GL_APIENTRY
+FramebufferTextureMultiviewSideBySideANGLEContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum attachment,
+                                                       GLuint texture,
+                                                       GLint level,
+                                                       GLsizei numViews,
+                                                       const GLint *viewportOffsets);
 }  // namespace gl
 
 #endif  // LIBGLESV2_ENTRY_POINTS_GLES_EXT_AUTOGEN_H_
deleted file mode 100644
--- a/gfx/angle/checkout/src/libGLESv2/libGLESv2.cpp
+++ /dev/null
@@ -1,2579 +0,0 @@
-//
-// Copyright (c) 2002-2014 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.
-//
-
-// libGLESv2.cpp: Implements the exported OpenGL ES 2.0 functions.
-
-#include "angle_gl.h"
-
-#include "libGLESv2/entry_points_gles_1_0_autogen.h"
-#include "libGLESv2/entry_points_gles_2_0_autogen.h"
-#include "libGLESv2/entry_points_gles_2_0_ext.h"
-#include "libGLESv2/entry_points_gles_3_0_autogen.h"
-#include "libGLESv2/entry_points_gles_3_1_autogen.h"
-#include "libGLESv2/entry_points_gles_ext_autogen.h"
-
-#include "common/event_tracer.h"
-
-extern "C" {
-
-void GL_APIENTRY glActiveTexture(GLenum texture)
-{
-    return gl::ActiveTexture(texture);
-}
-
-void GL_APIENTRY glAttachShader(GLuint program, GLuint shader)
-{
-    return gl::AttachShader(program, shader);
-}
-
-void GL_APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar *name)
-{
-    return gl::BindAttribLocation(program, index, name);
-}
-
-void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer)
-{
-    return gl::BindBuffer(target, buffer);
-}
-
-void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer)
-{
-    return gl::BindFramebuffer(target, framebuffer);
-}
-
-void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
-{
-    return gl::BindRenderbuffer(target, renderbuffer);
-}
-
-void GL_APIENTRY glBindTexture(GLenum target, GLuint texture)
-{
-    return gl::BindTexture(target, texture);
-}
-
-void GL_APIENTRY glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
-{
-    return gl::BlendColor(red, green, blue, alpha);
-}
-
-void GL_APIENTRY glBlendEquation(GLenum mode)
-{
-    return gl::BlendEquation(mode);
-}
-
-void GL_APIENTRY glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
-{
-    return gl::BlendEquationSeparate(modeRGB, modeAlpha);
-}
-
-void GL_APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
-{
-    return gl::BlendFunc(sfactor, dfactor);
-}
-
-void GL_APIENTRY glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
-{
-    return gl::BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
-}
-
-void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage)
-{
-    return gl::BufferData(target, size, data, usage);
-}
-
-void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void *data)
-{
-    return gl::BufferSubData(target, offset, size, data);
-}
-
-GLenum GL_APIENTRY glCheckFramebufferStatus(GLenum target)
-{
-    return gl::CheckFramebufferStatus(target);
-}
-
-void GL_APIENTRY glClear(GLbitfield mask)
-{
-    return gl::Clear(mask);
-}
-
-void GL_APIENTRY glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
-{
-    return gl::ClearColor(red, green, blue, alpha);
-}
-
-void GL_APIENTRY glClearDepthf(GLfloat depth)
-{
-    return gl::ClearDepthf(depth);
-}
-
-void GL_APIENTRY glClearStencil(GLint s)
-{
-    return gl::ClearStencil(s);
-}
-
-void GL_APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
-{
-    return gl::ColorMask(red, green, blue, alpha);
-}
-
-void GL_APIENTRY glCompileShader(GLuint shader)
-{
-    return gl::CompileShader(shader);
-}
-
-void GL_APIENTRY glCompressedTexImage2D(GLenum target,
-                                        GLint level,
-                                        GLenum internalformat,
-                                        GLsizei width,
-                                        GLsizei height,
-                                        GLint border,
-                                        GLsizei imageSize,
-                                        const void *data)
-{
-    return gl::CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize,
-                                    data);
-}
-
-void GL_APIENTRY glCompressedTexSubImage2D(GLenum target,
-                                           GLint level,
-                                           GLint xoffset,
-                                           GLint yoffset,
-                                           GLsizei width,
-                                           GLsizei height,
-                                           GLenum format,
-                                           GLsizei imageSize,
-                                           const void *data)
-{
-    return gl::CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format,
-                                       imageSize, data);
-}
-
-void GL_APIENTRY glCopyTexImage2D(GLenum target,
-                                  GLint level,
-                                  GLenum internalformat,
-                                  GLint x,
-                                  GLint y,
-                                  GLsizei width,
-                                  GLsizei height,
-                                  GLint border)
-{
-    return gl::CopyTexImage2D(target, level, internalformat, x, y, width, height, border);
-}
-
-void GL_APIENTRY glCopyTexSubImage2D(GLenum target,
-                                     GLint level,
-                                     GLint xoffset,
-                                     GLint yoffset,
-                                     GLint x,
-                                     GLint y,
-                                     GLsizei width,
-                                     GLsizei height)
-{
-    return gl::CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
-}
-
-GLuint GL_APIENTRY glCreateProgram(void)
-{
-    return gl::CreateProgram();
-}
-
-GLuint GL_APIENTRY glCreateShader(GLenum type)
-{
-    return gl::CreateShader(type);
-}
-
-void GL_APIENTRY glCullFace(GLenum mode)
-{
-    return gl::CullFace(mode);
-}
-
-void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint *buffers)
-{
-    return gl::DeleteBuffers(n, buffers);
-}
-
-void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
-{
-    return gl::DeleteFramebuffers(n, framebuffers);
-}
-
-void GL_APIENTRY glDeleteProgram(GLuint program)
-{
-    return gl::DeleteProgram(program);
-}
-
-void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
-{
-    return gl::DeleteRenderbuffers(n, renderbuffers);
-}
-
-void GL_APIENTRY glDeleteShader(GLuint shader)
-{
-    return gl::DeleteShader(shader);
-}
-
-void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint *textures)
-{
-    return gl::DeleteTextures(n, textures);
-}
-
-void GL_APIENTRY glDepthFunc(GLenum func)
-{
-    return gl::DepthFunc(func);
-}
-
-void GL_APIENTRY glDepthMask(GLboolean flag)
-{
-    return gl::DepthMask(flag);
-}
-
-void GL_APIENTRY glDepthRangef(GLfloat n, GLfloat f)
-{
-    return gl::DepthRangef(n, f);
-}
-
-void GL_APIENTRY glDetachShader(GLuint program, GLuint shader)
-{
-    return gl::DetachShader(program, shader);
-}
-
-void GL_APIENTRY glDisable(GLenum cap)
-{
-    return gl::Disable(cap);
-}
-
-void GL_APIENTRY glDisableVertexAttribArray(GLuint index)
-{
-    return gl::DisableVertexAttribArray(index);
-}
-
-void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)
-{
-    return gl::DrawArrays(mode, first, count);
-}
-
-void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
-{
-    return gl::DrawElements(mode, count, type, indices);
-}
-
-void GL_APIENTRY glEnable(GLenum cap)
-{
-    return gl::Enable(cap);
-}
-
-void GL_APIENTRY glEnableVertexAttribArray(GLuint index)
-{
-    return gl::EnableVertexAttribArray(index);
-}
-
-void GL_APIENTRY glFinish(void)
-{
-    return gl::Finish();
-}
-
-void GL_APIENTRY glFlush(void)
-{
-    return gl::Flush();
-}
-
-void GL_APIENTRY glFramebufferRenderbuffer(GLenum target,
-                                           GLenum attachment,
-                                           GLenum renderbuffertarget,
-                                           GLuint renderbuffer)
-{
-    return gl::FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
-}
-
-void GL_APIENTRY glFramebufferTexture2D(GLenum target,
-                                        GLenum attachment,
-                                        GLenum textarget,
-                                        GLuint texture,
-                                        GLint level)
-{
-    return gl::FramebufferTexture2D(target, attachment, textarget, texture, level);
-}
-
-void GL_APIENTRY glFrontFace(GLenum mode)
-{
-    return gl::FrontFace(mode);
-}
-
-void GL_APIENTRY glGenBuffers(GLsizei n, GLuint *buffers)
-{
-    return gl::GenBuffers(n, buffers);
-}
-
-void GL_APIENTRY glGenerateMipmap(GLenum target)
-{
-    return gl::GenerateMipmap(target);
-}
-
-void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint *framebuffers)
-{
-    return gl::GenFramebuffers(n, framebuffers);
-}
-
-void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
-{
-    return gl::GenRenderbuffers(n, renderbuffers);
-}
-
-void GL_APIENTRY glGenTextures(GLsizei n, GLuint *textures)
-{
-    return gl::GenTextures(n, textures);
-}
-
-void GL_APIENTRY glGetActiveAttrib(GLuint program,
-                                   GLuint index,
-                                   GLsizei bufsize,
-                                   GLsizei *length,
-                                   GLint *size,
-                                   GLenum *type,
-                                   GLchar *name)
-{
-    return gl::GetActiveAttrib(program, index, bufsize, length, size, type, name);
-}
-
-void GL_APIENTRY glGetActiveUniform(GLuint program,
-                                    GLuint index,
-                                    GLsizei bufsize,
-                                    GLsizei *length,
-                                    GLint *size,
-                                    GLenum *type,
-                                    GLchar *name)
-{
-    return gl::GetActiveUniform(program, index, bufsize, length, size, type, name);
-}
-
-void GL_APIENTRY glGetAttachedShaders(GLuint program,
-                                      GLsizei maxcount,
-                                      GLsizei *count,
-                                      GLuint *shaders)
-{
-    return gl::GetAttachedShaders(program, maxcount, count, shaders);
-}
-
-GLint GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar *name)
-{
-    return gl::GetAttribLocation(program, name);
-}
-
-void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean *params)
-{
-    return gl::GetBooleanv(pname, params);
-}
-
-void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
-{
-    return gl::GetBufferParameteriv(target, pname, params);
-}
-
-GLenum GL_APIENTRY glGetError(void)
-{
-    return gl::GetError();
-}
-
-void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat *params)
-{
-    return gl::GetFloatv(pname, params);
-}
-
-void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target,
-                                                       GLenum attachment,
-                                                       GLenum pname,
-                                                       GLint *params)
-{
-    return gl::GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
-}
-
-void GL_APIENTRY glGetIntegerv(GLenum pname, GLint *params)
-{
-    return gl::GetIntegerv(pname, params);
-}
-
-void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint *params)
-{
-    return gl::GetProgramiv(program, pname, params);
-}
-
-void GL_APIENTRY glGetProgramInfoLog(GLuint program,
-                                     GLsizei bufsize,
-                                     GLsizei *length,
-                                     GLchar *infolog)
-{
-    return gl::GetProgramInfoLog(program, bufsize, length, infolog);
-}
-
-void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
-{
-    return gl::GetRenderbufferParameteriv(target, pname, params);
-}
-
-void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
-{
-    return gl::GetShaderiv(shader, pname, params);
-}
-
-void GL_APIENTRY glGetShaderInfoLog(GLuint shader,
-                                    GLsizei bufsize,
-                                    GLsizei *length,
-                                    GLchar *infolog)
-{
-    return gl::GetShaderInfoLog(shader, bufsize, length, infolog);
-}
-
-void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype,
-                                            GLenum precisiontype,
-                                            GLint *range,
-                                            GLint *precision)
-{
-    return gl::GetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
-}
-
-void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source)
-{
-    return gl::GetShaderSource(shader, bufsize, length, source);
-}
-
-const GLubyte *GL_APIENTRY glGetString(GLenum name)
-{
-    return gl::GetString(name);
-}
-
-void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
-{
-    return gl::GetTexParameterfv(target, pname, params);
-}
-
-void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
-{
-    return gl::GetTexParameteriv(target, pname, params);
-}
-
-void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat *params)
-{
-    return gl::GetUniformfv(program, location, params);
-}
-
-void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint *params)
-{
-    return gl::GetUniformiv(program, location, params);
-}
-
-GLint GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar *name)
-{
-    return gl::GetUniformLocation(program, name);
-}
-
-void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
-{
-    return gl::GetVertexAttribfv(index, pname, params);
-}
-
-void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
-{
-    return gl::GetVertexAttribiv(index, pname, params);
-}
-
-void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)
-{
-    return gl::GetVertexAttribPointerv(index, pname, pointer);
-}
-
-void GL_APIENTRY glHint(GLenum target, GLenum mode)
-{
-    return gl::Hint(target, mode);
-}
-
-GLboolean GL_APIENTRY glIsBuffer(GLuint buffer)
-{
-    return gl::IsBuffer(buffer);
-}
-
-GLboolean GL_APIENTRY glIsEnabled(GLenum cap)
-{
-    return gl::IsEnabled(cap);
-}
-
-GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer)
-{
-    return gl::IsFramebuffer(framebuffer);
-}
-
-GLboolean GL_APIENTRY glIsProgram(GLuint program)
-{
-    return gl::IsProgram(program);
-}
-
-GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer)
-{
-    return gl::IsRenderbuffer(renderbuffer);
-}
-
-GLboolean GL_APIENTRY glIsShader(GLuint shader)
-{
-    return gl::IsShader(shader);
-}
-
-GLboolean GL_APIENTRY glIsTexture(GLuint texture)
-{
-    return gl::IsTexture(texture);
-}
-
-void GL_APIENTRY glLineWidth(GLfloat width)
-{
-    return gl::LineWidth(width);
-}
-
-void GL_APIENTRY glLinkProgram(GLuint program)
-{
-    return gl::LinkProgram(program);
-}
-
-void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)
-{
-    return gl::PixelStorei(pname, param);
-}
-
-void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units)
-{
-    return gl::PolygonOffset(factor, units);
-}
-
-void GL_APIENTRY glReadPixels(GLint x,
-                              GLint y,
-                              GLsizei width,
-                              GLsizei height,
-                              GLenum format,
-                              GLenum type,
-                              void *pixels)
-{
-    return gl::ReadPixels(x, y, width, height, format, type, pixels);
-}
-
-void GL_APIENTRY glReleaseShaderCompiler(void)
-{
-    return gl::ReleaseShaderCompiler();
-}
-
-void GL_APIENTRY glRenderbufferStorage(GLenum target,
-                                       GLenum internalformat,
-                                       GLsizei width,
-                                       GLsizei height)
-{
-    return gl::RenderbufferStorage(target, internalformat, width, height);
-}
-
-void GL_APIENTRY glSampleCoverage(GLfloat value, GLboolean invert)
-{
-    return gl::SampleCoverage(value, invert);
-}
-
-void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
-{
-    return gl::Scissor(x, y, width, height);
-}
-
-void GL_APIENTRY glShaderBinary(GLsizei n,
-                                const GLuint *shaders,
-                                GLenum binaryformat,
-                                const void *binary,
-                                GLsizei length)
-{
-    return gl::ShaderBinary(n, shaders, binaryformat, binary, length);
-}
-
-void GL_APIENTRY glShaderSource(GLuint shader,
-                                GLsizei count,
-                                const GLchar *const *string,
-                                const GLint *length)
-{
-    return gl::ShaderSource(shader, count, string, length);
-}
-
-void GL_APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask)
-{
-    return gl::StencilFunc(func, ref, mask);
-}
-
-void GL_APIENTRY glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
-{
-    return gl::StencilFuncSeparate(face, func, ref, mask);
-}
-
-void GL_APIENTRY glStencilMask(GLuint mask)
-{
-    return gl::StencilMask(mask);
-}
-
-void GL_APIENTRY glStencilMaskSeparate(GLenum face, GLuint mask)
-{
-    return gl::StencilMaskSeparate(face, mask);
-}
-
-void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
-{
-    return gl::StencilOp(fail, zfail, zpass);
-}
-
-void GL_APIENTRY glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
-{
-    return gl::StencilOpSeparate(face, fail, zfail, zpass);
-}
-
-void GL_APIENTRY glTexImage2D(GLenum target,
-                              GLint level,
-                              GLint internalformat,
-                              GLsizei width,
-                              GLsizei height,
-                              GLint border,
-                              GLenum format,
-                              GLenum type,
-                              const void *pixels)
-{
-    return gl::TexImage2D(target, level, internalformat, width, height, border, format, type,
-                          pixels);
-}
-
-void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)
-{
-    return gl::TexParameterf(target, pname, param);
-}
-
-void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
-{
-    return gl::TexParameterfv(target, pname, params);
-}
-
-void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)
-{
-    return gl::TexParameteri(target, pname, param);
-}
-
-void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
-{
-    return gl::TexParameteriv(target, pname, params);
-}
-
-void GL_APIENTRY glTexSubImage2D(GLenum target,
-                                 GLint level,
-                                 GLint xoffset,
-                                 GLint yoffset,
-                                 GLsizei width,
-                                 GLsizei height,
-                                 GLenum format,
-                                 GLenum type,
-                                 const void *pixels)
-{
-    return gl::TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
-}
-
-void GL_APIENTRY glUniform1f(GLint location, GLfloat x)
-{
-    return gl::Uniform1f(location, x);
-}
-
-void GL_APIENTRY glUniform1fv(GLint location, GLsizei count, const GLfloat *v)
-{
-    return gl::Uniform1fv(location, count, v);
-}
-
-void GL_APIENTRY glUniform1i(GLint location, GLint x)
-{
-    return gl::Uniform1i(location, x);
-}
-
-void GL_APIENTRY glUniform1iv(GLint location, GLsizei count, const GLint *v)
-{
-    return gl::Uniform1iv(location, count, v);
-}
-
-void GL_APIENTRY glUniform2f(GLint location, GLfloat x, GLfloat y)
-{
-    return gl::Uniform2f(location, x, y);
-}
-
-void GL_APIENTRY glUniform2fv(GLint location, GLsizei count, const GLfloat *v)
-{
-    return gl::Uniform2fv(location, count, v);
-}
-
-void GL_APIENTRY glUniform2i(GLint location, GLint x, GLint y)
-{
-    return gl::Uniform2i(location, x, y);
-}
-
-void GL_APIENTRY glUniform2iv(GLint location, GLsizei count, const GLint *v)
-{
-    return gl::Uniform2iv(location, count, v);
-}
-
-void GL_APIENTRY glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
-{
-    return gl::Uniform3f(location, x, y, z);
-}
-
-void GL_APIENTRY glUniform3fv(GLint location, GLsizei count, const GLfloat *v)
-{
-    return gl::Uniform3fv(location, count, v);
-}
-
-void GL_APIENTRY glUniform3i(GLint location, GLint x, GLint y, GLint z)
-{
-    return gl::Uniform3i(location, x, y, z);
-}
-
-void GL_APIENTRY glUniform3iv(GLint location, GLsizei count, const GLint *v)
-{
-    return gl::Uniform3iv(location, count, v);
-}
-
-void GL_APIENTRY glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
-{
-    return gl::Uniform4f(location, x, y, z, w);
-}
-
-void GL_APIENTRY glUniform4fv(GLint location, GLsizei count, const GLfloat *v)
-{
-    return gl::Uniform4fv(location, count, v);
-}
-
-void GL_APIENTRY glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
-{
-    return gl::Uniform4i(location, x, y, z, w);
-}
-
-void GL_APIENTRY glUniform4iv(GLint location, GLsizei count, const GLint *v)
-{
-    return gl::Uniform4iv(location, count, v);
-}
-
-void GL_APIENTRY glUniformMatrix2fv(GLint location,
-                                    GLsizei count,
-                                    GLboolean transpose,
-                                    const GLfloat *value)
-{
-    return gl::UniformMatrix2fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUniformMatrix3fv(GLint location,
-                                    GLsizei count,
-                                    GLboolean transpose,
-                                    const GLfloat *value)
-{
-    return gl::UniformMatrix3fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUniformMatrix4fv(GLint location,
-                                    GLsizei count,
-                                    GLboolean transpose,
-                                    const GLfloat *value)
-{
-    return gl::UniformMatrix4fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUseProgram(GLuint program)
-{
-    return gl::UseProgram(program);
-}
-
-void GL_APIENTRY glValidateProgram(GLuint program)
-{
-    return gl::ValidateProgram(program);
-}
-
-void GL_APIENTRY glVertexAttrib1f(GLuint indx, GLfloat x)
-{
-    return gl::VertexAttrib1f(indx, x);
-}
-
-void GL_APIENTRY glVertexAttrib1fv(GLuint indx, const GLfloat *values)
-{
-    return gl::VertexAttrib1fv(indx, values);
-}
-
-void GL_APIENTRY glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
-{
-    return gl::VertexAttrib2f(indx, x, y);
-}
-
-void GL_APIENTRY glVertexAttrib2fv(GLuint indx, const GLfloat *values)
-{
-    return gl::VertexAttrib2fv(indx, values);
-}
-
-void GL_APIENTRY glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
-{
-    return gl::VertexAttrib3f(indx, x, y, z);
-}
-
-void GL_APIENTRY glVertexAttrib3fv(GLuint indx, const GLfloat *values)
-{
-    return gl::VertexAttrib3fv(indx, values);
-}
-
-void GL_APIENTRY glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
-{
-    return gl::VertexAttrib4f(indx, x, y, z, w);
-}
-
-void GL_APIENTRY glVertexAttrib4fv(GLuint indx, const GLfloat *values)
-{
-    return gl::VertexAttrib4fv(indx, values);
-}
-
-void GL_APIENTRY glVertexAttribPointer(GLuint indx,
-                                       GLint size,
-                                       GLenum type,
-                                       GLboolean normalized,
-                                       GLsizei stride,
-                                       const void *ptr)
-{
-    return gl::VertexAttribPointer(indx, size, type, normalized, stride, ptr);
-}
-
-void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
-{
-    return gl::Viewport(x, y, width, height);
-}
-
-void GL_APIENTRY glReadBuffer(GLenum mode)
-{
-    return gl::ReadBuffer(mode);
-}
-
-void GL_APIENTRY glDrawRangeElements(GLenum mode,
-                                     GLuint start,
-                                     GLuint end,
-                                     GLsizei count,
-                                     GLenum type,
-                                     const void *indices)
-{
-    return gl::DrawRangeElements(mode, start, end, count, type, indices);
-}
-
-void GL_APIENTRY glTexImage3D(GLenum target,
-                              GLint level,
-                              GLint internalformat,
-                              GLsizei width,
-                              GLsizei height,
-                              GLsizei depth,
-                              GLint border,
-                              GLenum format,
-                              GLenum type,
-                              const void *pixels)
-{
-    return gl::TexImage3D(target, level, internalformat, width, height, depth, border, format, type,
-                          pixels);
-}
-
-void GL_APIENTRY glTexSubImage3D(GLenum target,
-                                 GLint level,
-                                 GLint xoffset,
-                                 GLint yoffset,
-                                 GLint zoffset,
-                                 GLsizei width,
-                                 GLsizei height,
-                                 GLsizei depth,
-                                 GLenum format,
-                                 GLenum type,
-                                 const void *pixels)
-{
-    return gl::TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format,
-                             type, pixels);
-}
-
-void GL_APIENTRY glCopyTexSubImage3D(GLenum target,
-                                     GLint level,
-                                     GLint xoffset,
-                                     GLint yoffset,
-                                     GLint zoffset,
-                                     GLint x,
-                                     GLint y,
-                                     GLsizei width,
-                                     GLsizei height)
-{
-    return gl::CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
-}
-
-void GL_APIENTRY glCompressedTexImage3D(GLenum target,
-                                        GLint level,
-                                        GLenum internalformat,
-                                        GLsizei width,
-                                        GLsizei height,
-                                        GLsizei depth,
-                                        GLint border,
-                                        GLsizei imageSize,
-                                        const void *data)
-{
-    return gl::CompressedTexImage3D(target, level, internalformat, width, height, depth, border,
-                                    imageSize, data);
-}
-
-void GL_APIENTRY glCompressedTexSubImage3D(GLenum target,
-                                           GLint level,
-                                           GLint xoffset,
-                                           GLint yoffset,
-                                           GLint zoffset,
-                                           GLsizei width,
-                                           GLsizei height,
-                                           GLsizei depth,
-                                           GLenum format,
-                                           GLsizei imageSize,
-                                           const void *data)
-{
-    return gl::CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height,
-                                       depth, format, imageSize, data);
-}
-
-void GL_APIENTRY glGenQueries(GLsizei n, GLuint *ids)
-{
-    return gl::GenQueries(n, ids);
-}
-
-void GL_APIENTRY glDeleteQueries(GLsizei n, const GLuint *ids)
-{
-    return gl::DeleteQueries(n, ids);
-}
-
-GLboolean GL_APIENTRY glIsQuery(GLuint id)
-{
-    return gl::IsQuery(id);
-}
-
-void GL_APIENTRY glBeginQuery(GLenum target, GLuint id)
-{
-    return gl::BeginQuery(target, id);
-}
-
-void GL_APIENTRY glEndQuery(GLenum target)
-{
-    return gl::EndQuery(target);
-}
-
-void GL_APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint *params)
-{
-    return gl::GetQueryiv(target, pname, params);
-}
-
-void GL_APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
-{
-    return gl::GetQueryObjectuiv(id, pname, params);
-}
-
-GLboolean GL_APIENTRY glUnmapBuffer(GLenum target)
-{
-    return gl::UnmapBuffer(target);
-}
-
-void GL_APIENTRY glGetBufferPointerv(GLenum target, GLenum pname, void **params)
-{
-    return gl::GetBufferPointerv(target, pname, params);
-}
-
-void GL_APIENTRY glDrawBuffers(GLsizei n, const GLenum *bufs)
-{
-    return gl::DrawBuffers(n, bufs);
-}
-
-void GL_APIENTRY glUniformMatrix2x3fv(GLint location,
-                                      GLsizei count,
-                                      GLboolean transpose,
-                                      const GLfloat *value)
-{
-    return gl::UniformMatrix2x3fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUniformMatrix3x2fv(GLint location,
-                                      GLsizei count,
-                                      GLboolean transpose,
-                                      const GLfloat *value)
-{
-    return gl::UniformMatrix3x2fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUniformMatrix2x4fv(GLint location,
-                                      GLsizei count,
-                                      GLboolean transpose,
-                                      const GLfloat *value)
-{
-    return gl::UniformMatrix2x4fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUniformMatrix4x2fv(GLint location,
-                                      GLsizei count,
-                                      GLboolean transpose,
-                                      const GLfloat *value)
-{
-    return gl::UniformMatrix4x2fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUniformMatrix3x4fv(GLint location,
-                                      GLsizei count,
-                                      GLboolean transpose,
-                                      const GLfloat *value)
-{
-    return gl::UniformMatrix3x4fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glUniformMatrix4x3fv(GLint location,
-                                      GLsizei count,
-                                      GLboolean transpose,
-                                      const GLfloat *value)
-{
-    return gl::UniformMatrix4x3fv(location, count, transpose, value);
-}
-
-void GL_APIENTRY glBlitFramebuffer(GLint srcX0,
-                                   GLint srcY0,
-                                   GLint srcX1,
-                                   GLint srcY1,
-                                   GLint dstX0,
-                                   GLint dstY0,
-                                   GLint dstX1,
-                                   GLint dstY1,
-                                   GLbitfield mask,
-                                   GLenum filter)
-{
-    return gl::BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
-                               filter);
-}
-
-void GL_APIENTRY glRenderbufferStorageMultisample(GLenum target,
-                                                  GLsizei samples,
-                                                  GLenum internalformat,
-                                                  GLsizei width,
-                                                  GLsizei height)
-{
-    return gl::RenderbufferStorageMultisample(target, samples, internalformat, width, height);
-}
-
-void GL_APIENTRY glFramebufferTextureLayer(GLenum target,
-                                           GLenum attachment,
-                                           GLuint texture,
-                                           GLint level,
-                                           GLint layer)
-{
-    return gl::FramebufferTextureLayer(target, attachment, texture, level, layer);
-}
-
-void *GL_APIENTRY glMapBufferRange(GLenum target,
-                                   GLintptr offset,
-                                   GLsizeiptr length,
-                                   GLbitfield access)
-{
-    return gl::MapBufferRange(target, offset, length, access);
-}
-
-void GL_APIENTRY glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
-{
-    return gl::FlushMappedBufferRange(target, offset, length);
-}
-
-void GL_APIENTRY glBindVertexArray(GLuint array)
-{
-    return gl::BindVertexArray(array);
-}
-
-void GL_APIENTRY glDeleteVertexArrays(GLsizei n, const GLuint *arrays)
-{
-    return gl::DeleteVertexArrays(n, arrays);
-}
-
-void GL_APIENTRY glGenVertexArrays(GLsizei n, GLuint *arrays)
-{
-    return gl::GenVertexArrays(n, arrays);
-}
-
-GLboolean GL_APIENTRY glIsVertexArray(GLuint array)
-{
-    return gl::IsVertexArray(array);
-}
-
-void GL_APIENTRY glGetIntegeri_v(GLenum target, GLuint index, GLint *data)
-{
-    return gl::GetIntegeri_v(target, index, data);
-}
-
-void GL_APIENTRY glBeginTransformFeedback(GLenum primitiveMode)
-{
-    return gl::BeginTransformFeedback(primitiveMode);
-}
-
-void GL_APIENTRY glEndTransformFeedback(void)
-{
-    return gl::EndTransformFeedback();
-}
-
-void GL_APIENTRY
-glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
-{
-    return gl::BindBufferRange(target, index, buffer, offset, size);
-}
-
-void GL_APIENTRY glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
-{
-    return gl::BindBufferBase(target, index, buffer);
-}
-
-void GL_APIENTRY glTransformFeedbackVaryings(GLuint program,
-                                             GLsizei count,
-                                             const GLchar *const *varyings,
-                                             GLenum bufferMode)
-{
-    return gl::TransformFeedbackVaryings(program, count, varyings, bufferMode);
-}
-
-void GL_APIENTRY glGetTransformFeedbackVarying(GLuint program,
-                                               GLuint index,
-                                               GLsizei bufSize,
-                                               GLsizei *length,
-                                               GLsizei *size,
-                                               GLenum *type,
-                                               GLchar *name)
-{
-    return gl::GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
-}
-
-void GL_APIENTRY
-glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
-{
-    return gl::VertexAttribIPointer(index, size, type, stride, pointer);
-}
-
-void GL_APIENTRY glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
-{
-    return gl::GetVertexAttribIiv(index, pname, params);
-}
-
-void GL_APIENTRY glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
-{
-    return gl::GetVertexAttribIuiv(index, pname, params);
-}
-
-void GL_APIENTRY glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
-{
-    return gl::VertexAttribI4i(index, x, y, z, w);
-}
-
-void GL_APIENTRY glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
-{
-    return gl::VertexAttribI4ui(index, x, y, z, w);
-}
-
-void GL_APIENTRY glVertexAttribI4iv(GLuint index, const GLint *v)
-{
-    return gl::VertexAttribI4iv(index, v);
-}
-
-void GL_APIENTRY glVertexAttribI4uiv(GLuint index, const GLuint *v)
-{
-    return gl::VertexAttribI4uiv(index, v);
-}
-
-void GL_APIENTRY glGetUniformuiv(GLuint program, GLint location, GLuint *params)
-{
-    return gl::GetUniformuiv(program, location, params);
-}
-
-GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar *name)
-{
-    return gl::GetFragDataLocation(program, name);
-}
-
-void GL_APIENTRY glUniform1ui(GLint location, GLuint v0)
-{
-    return gl::Uniform1ui(location, v0);
-}
-
-void GL_APIENTRY glUniform2ui(GLint location, GLuint v0, GLuint v1)
-{
-    return gl::Uniform2ui(location, v0, v1);
-}
-
-void GL_APIENTRY glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
-{
-    return gl::Uniform3ui(location, v0, v1, v2);
-}
-
-void GL_APIENTRY glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
-{
-    return gl::Uniform4ui(location, v0, v1, v2, v3);
-}
-
-void GL_APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint *value)
-{
-    return gl::Uniform1uiv(location, count, value);
-}
-
-void GL_APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint *value)
-{
-    return gl::Uniform2uiv(location, count, value);
-}
-
-void GL_APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint *value)
-{
-    return gl::Uniform3uiv(location, count, value);
-}
-
-void GL_APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint *value)
-{
-    return gl::Uniform4uiv(location, count, value);
-}
-
-void GL_APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
-{
-    return gl::ClearBufferiv(buffer, drawbuffer, value);
-}
-
-void GL_APIENTRY glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
-{
-    return gl::ClearBufferuiv(buffer, drawbuffer, value);
-}
-
-void GL_APIENTRY glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
-{
-    return gl::ClearBufferfv(buffer, drawbuffer, value);
-}
-
-void GL_APIENTRY glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
-{
-    return gl::ClearBufferfi(buffer, drawbuffer, depth, stencil);
-}
-
-const GLubyte *GL_APIENTRY glGetStringi(GLenum name, GLuint index)
-{
-    return gl::GetStringi(name, index);
-}
-
-void GL_APIENTRY glCopyBufferSubData(GLenum readTarget,
-                                     GLenum writeTarget,
-                                     GLintptr readOffset,
-                                     GLintptr writeOffset,
-                                     GLsizeiptr size)
-{
-    return gl::CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
-}
-
-void GL_APIENTRY glGetUniformIndices(GLuint program,
-                                     GLsizei uniformCount,
-                                     const GLchar *const *uniformNames,
-                                     GLuint *uniformIndices)
-{
-    return gl::GetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
-}
-
-void GL_APIENTRY glGetActiveUniformsiv(GLuint program,
-                                       GLsizei uniformCount,
-                                       const GLuint *uniformIndices,
-                                       GLenum pname,
-                                       GLint *params)
-{
-    return gl::GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
-}
-
-GLuint GL_APIENTRY glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
-{
-    return gl::GetUniformBlockIndex(program, uniformBlockName);
-}
-
-void GL_APIENTRY glGetActiveUniformBlockiv(GLuint program,
-                                           GLuint uniformBlockIndex,
-                                           GLenum pname,
-                                           GLint *params)
-{
-    return gl::GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
-}
-
-void GL_APIENTRY glGetActiveUniformBlockName(GLuint program,
-                                             GLuint uniformBlockIndex,
-                                             GLsizei bufSize,
-                                             GLsizei *length,
-                                             GLchar *uniformBlockName)
-{
-    return gl::GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length,
-                                         uniformBlockName);
-}
-
-void GL_APIENTRY glUniformBlockBinding(GLuint program,
-                                       GLuint uniformBlockIndex,
-                                       GLuint uniformBlockBinding)
-{
-    return gl::UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
-}
-
-void GL_APIENTRY glDrawArraysInstanced(GLenum mode,
-                                       GLint first,
-                                       GLsizei count,
-                                       GLsizei instanceCount)
-{
-    return gl::DrawArraysInstanced(mode, first, count, instanceCount);
-}
-
-void GL_APIENTRY glDrawElementsInstanced(GLenum mode,
-                                         GLsizei count,
-                                         GLenum type,
-                                         const void *indices,
-                                         GLsizei instanceCount)
-{
-    return gl::DrawElementsInstanced(mode, count, type, indices, instanceCount);
-}
-
-GLsync GL_APIENTRY glFenceSync(GLenum condition, GLbitfield flags)
-{
-    return gl::FenceSync(condition, flags);
-}
-
-GLboolean GL_APIENTRY glIsSync(GLsync sync)
-{
-    return gl::IsSync(sync);
-}
-
-void GL_APIENTRY glDeleteSync(GLsync sync)
-{
-    return gl::DeleteSync(sync);
-}
-
-GLenum GL_APIENTRY glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
-{
-    return gl::ClientWaitSync(sync, flags, timeout);
-}
-
-void GL_APIENTRY glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
-{
-    return gl::WaitSync(sync, flags, timeout);
-}
-
-void GL_APIENTRY glGetInteger64v(GLenum pname, GLint64 *params)
-{
-    return gl::GetInteger64v(pname, params);
-}
-
-void GL_APIENTRY
-glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
-{
-    return gl::GetSynciv(sync, pname, bufSize, length, values);
-}
-
-void GL_APIENTRY glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
-{
-    return gl::GetInteger64i_v(target, index, data);
-}
-
-void GL_APIENTRY glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
-{
-    return gl::GetBufferParameteri64v(target, pname, params);
-}
-
-void GL_APIENTRY glGenSamplers(GLsizei count, GLuint *samplers)
-{
-    return gl::GenSamplers(count, samplers);
-}
-
-void GL_APIENTRY glDeleteSamplers(GLsizei count, const GLuint *samplers)
-{
-    return gl::DeleteSamplers(count, samplers);
-}
-
-GLboolean GL_APIENTRY glIsSampler(GLuint sampler)
-{
-    return gl::IsSampler(sampler);
-}
-
-void GL_APIENTRY glBindSampler(GLuint unit, GLuint sampler)
-{
-    return gl::BindSampler(unit, sampler);
-}
-
-void GL_APIENTRY glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
-{
-    return gl::SamplerParameteri(sampler, pname, param);
-}
-
-void GL_APIENTRY glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
-{
-    return gl::SamplerParameteriv(sampler, pname, param);
-}
-
-void GL_APIENTRY glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
-{
-    return gl::SamplerParameterf(sampler, pname, param);
-}
-
-void GL_APIENTRY glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
-{
-    return gl::SamplerParameterfv(sampler, pname, param);
-}
-
-void GL_APIENTRY glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
-{
-    return gl::GetSamplerParameteriv(sampler, pname, params);
-}
-
-void GL_APIENTRY glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
-{
-    return gl::GetSamplerParameterfv(sampler, pname, params);
-}
-
-void GL_APIENTRY glVertexAttribDivisor(GLuint index, GLuint divisor)
-{
-    return gl::VertexAttribDivisor(index, divisor);
-}
-
-void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id)
-{
-    return gl::BindTransformFeedback(target, id);
-}
-
-void GL_APIENTRY glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
-{
-    return gl::DeleteTransformFeedbacks(n, ids);
-}
-
-void GL_APIENTRY glGenTransformFeedbacks(GLsizei n, GLuint *ids)
-{
-    return gl::GenTransformFeedbacks(n, ids);
-}
-
-GLboolean GL_APIENTRY glIsTransformFeedback(GLuint id)
-{
-    return gl::IsTransformFeedback(id);
-}
-
-void GL_APIENTRY glPauseTransformFeedback(void)
-{
-    return gl::PauseTransformFeedback();
-}
-
-void GL_APIENTRY glResumeTransformFeedback(void)
-{
-    return gl::ResumeTransformFeedback();
-}
-
-void GL_APIENTRY glGetProgramBinary(GLuint program,
-                                    GLsizei bufSize,
-                                    GLsizei *length,
-                                    GLenum *binaryFormat,
-                                    void *binary)
-{
-    return gl::GetProgramBinary(program, bufSize, length, binaryFormat, binary);
-}
-
-void GL_APIENTRY glProgramBinary(GLuint program,
-                                 GLenum binaryFormat,
-                                 const void *binary,
-                                 GLsizei length)
-{
-    return gl::ProgramBinary(program, binaryFormat, binary, length);
-}
-
-void GL_APIENTRY glProgramParameteri(GLuint program, GLenum pname, GLint value)
-{
-    return gl::ProgramParameteri(program, pname, value);
-}
-
-void GL_APIENTRY glInvalidateFramebuffer(GLenum target,
-                                         GLsizei numAttachments,
-                                         const GLenum *attachments)
-{
-    return gl::InvalidateFramebuffer(target, numAttachments, attachments);
-}
-
-void GL_APIENTRY glInvalidateSubFramebuffer(GLenum target,
-                                            GLsizei numAttachments,
-                                            const GLenum *attachments,
-                                            GLint x,
-                                            GLint y,
-                                            GLsizei width,
-                                            GLsizei height)
-{
-    return gl::InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
-}
-
-void GL_APIENTRY
-glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
-{
-    return gl::TexStorage2D(target, levels, internalformat, width, height);
-}
-
-void GL_APIENTRY glTexStorage3D(GLenum target,
-                                GLsizei levels,
-                                GLenum internalformat,
-                                GLsizei width,
-                                GLsizei height,
-                                GLsizei depth)
-{
-    return gl::TexStorage3D(target, levels, internalformat, width, height, depth);
-}
-
-void GL_APIENTRY glGetInternalformativ(GLenum target,
-                                       GLenum internalformat,
-                                       GLenum pname,
-                                       GLsizei bufSize,
-                                       GLint *params)
-{
-    return gl::GetInternalformativ(target, internalformat, pname, bufSize, params);
-}
-
-void GL_APIENTRY glBlitFramebufferANGLE(GLint srcX0,
-                                        GLint srcY0,
-                                        GLint srcX1,
-                                        GLint srcY1,
-                                        GLint dstX0,
-                                        GLint dstY0,
-                                        GLint dstX1,
-                                        GLint dstY1,
-                                        GLbitfield mask,
-                                        GLenum filter)
-{
-    return gl::BlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
-                                    filter);
-}
-
-void GL_APIENTRY glRenderbufferStorageMultisampleANGLE(GLenum target,
-                                                       GLsizei samples,
-                                                       GLenum internalformat,
-                                                       GLsizei width,
-                                                       GLsizei height)
-{
-    return gl::RenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
-}
-
-void GL_APIENTRY glDiscardFramebufferEXT(GLenum target,
-                                         GLsizei numAttachments,
-                                         const GLenum *attachments)
-{
-    return gl::DiscardFramebufferEXT(target, numAttachments, attachments);
-}
-
-void GL_APIENTRY glDeleteFencesNV(GLsizei n, const GLuint *fences)
-{
-    return gl::DeleteFencesNV(n, fences);
-}
-
-void GL_APIENTRY glGenFencesNV(GLsizei n, GLuint *fences)
-{
-    return gl::GenFencesNV(n, fences);
-}
-
-GLboolean GL_APIENTRY glIsFenceNV(GLuint fence)
-{
-    return gl::IsFenceNV(fence);
-}
-
-GLboolean GL_APIENTRY glTestFenceNV(GLuint fence)
-{
-    return gl::TestFenceNV(fence);
-}
-
-void GL_APIENTRY glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
-{
-    return gl::GetFenceivNV(fence, pname, params);
-}
-
-void GL_APIENTRY glFinishFenceNV(GLuint fence)
-{
-    return gl::FinishFenceNV(fence);
-}
-
-void GL_APIENTRY glSetFenceNV(GLuint fence, GLenum condition)
-{
-    return gl::SetFenceNV(fence, condition);
-}
-
-void GL_APIENTRY glGetTranslatedShaderSourceANGLE(GLuint shader,
-                                                  GLsizei bufsize,
-                                                  GLsizei *length,
-                                                  GLchar *source)
-{
-    return gl::GetTranslatedShaderSourceANGLE(shader, bufsize, length, source);
-}
-
-void GL_APIENTRY glTexStorage2DEXT(GLenum target,
-                                   GLsizei levels,
-                                   GLenum internalformat,
-                                   GLsizei width,
-                                   GLsizei height)
-{
-    return gl::TexStorage2DEXT(target, levels, internalformat, width, height);
-}
-
-GLenum GL_APIENTRY glGetGraphicsResetStatusEXT(void)
-{
-    return gl::GetGraphicsResetStatusEXT();
-}
-
-void GL_APIENTRY glReadnPixelsEXT(GLint x,
-                                  GLint y,
-                                  GLsizei width,
-                                  GLsizei height,
-                                  GLenum format,
-                                  GLenum type,
-                                  GLsizei bufSize,
-                                  void *data)
-{
-    return gl::ReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
-}
-
-void GL_APIENTRY glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, float *params)
-{
-    return gl::GetnUniformfvEXT(program, location, bufSize, params);
-}
-
-void GL_APIENTRY glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params)
-{
-    return gl::GetnUniformivEXT(program, location, bufSize, params);
-}
-
-void GL_APIENTRY glGenQueriesEXT(GLsizei n, GLuint *ids)
-{
-    return gl::GenQueriesEXT(n, ids);
-}
-
-void GL_APIENTRY glDeleteQueriesEXT(GLsizei n, const GLuint *ids)
-{
-    return gl::DeleteQueriesEXT(n, ids);
-}
-
-GLboolean GL_APIENTRY glIsQueryEXT(GLuint id)
-{
-    return gl::IsQueryEXT(id);
-}
-
-void GL_APIENTRY glBeginQueryEXT(GLenum target, GLuint id)
-{
-    return gl::BeginQueryEXT(target, id);
-}
-
-void GL_APIENTRY glEndQueryEXT(GLenum target)
-{
-    return gl::EndQueryEXT(target);
-}
-
-void GL_APIENTRY glQueryCounterEXT(GLuint id, GLenum target)
-{
-    return gl::QueryCounterEXT(id, target);
-}
-
-void GL_APIENTRY glGetQueryivEXT(GLenum target, GLenum pname, GLint *params)
-{
-    return gl::GetQueryivEXT(target, pname, params);
-}
-
-void GL_APIENTRY glGetQueryObjectivEXT(GLuint id, GLenum pname, GLint *params)
-{
-    return gl::GetQueryObjectivEXT(id, pname, params);
-}
-
-void GL_APIENTRY glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)
-{
-    return gl::GetQueryObjectuivEXT(id, pname, params);
-}
-
-void GL_APIENTRY glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 *params)
-{
-    return gl::GetQueryObjecti64vEXT(id, pname, params);
-}
-
-void GL_APIENTRY glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 *params)
-{
-    return gl::GetQueryObjectui64vEXT(id, pname, params);
-}
-
-void GL_APIENTRY glDrawBuffersEXT(GLsizei n, const GLenum *bufs)
-{
-    return gl::DrawBuffersEXT(n, bufs);
-}
-
-void GL_APIENTRY glDrawArraysInstancedANGLE(GLenum mode,
-                                            GLint first,
-                                            GLsizei count,
-                                            GLsizei primcount)
-{
-    return gl::DrawArraysInstancedANGLE(mode, first, count, primcount);
-}
-
-void GL_APIENTRY glDrawElementsInstancedANGLE(GLenum mode,
-                                              GLsizei count,
-                                              GLenum type,
-                                              const void *indices,
-                                              GLsizei primcount)
-{
-    return gl::DrawElementsInstancedANGLE(mode, count, type, indices, primcount);
-}
-
-void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor)
-{
-    return gl::VertexAttribDivisorANGLE(index, divisor);
-}
-
-void GL_APIENTRY glGetProgramBinaryOES(GLuint program,
-                                       GLsizei bufSize,
-                                       GLsizei *length,
-                                       GLenum *binaryFormat,
-                                       void *binary)
-{
-    return gl::GetProgramBinaryOES(program, bufSize, length, binaryFormat, binary);
-}
-
-void GL_APIENTRY glProgramBinaryOES(GLuint program,
-                                    GLenum binaryFormat,
-                                    const void *binary,
-                                    GLint length)
-{
-    return gl::ProgramBinaryOES(program, binaryFormat, binary, length);
-}
-
-void *GL_APIENTRY glMapBufferOES(GLenum target, GLenum access)
-{
-    return gl::MapBufferOES(target, access);
-}
-
-GLboolean GL_APIENTRY glUnmapBufferOES(GLenum target)
-{
-    return gl::UnmapBufferOES(target);
-}
-
-void GL_APIENTRY glGetBufferPointervOES(GLenum target, GLenum pname, void **params)
-{
-    return gl::GetBufferPointervOES(target, pname, params);
-}
-
-void *GL_APIENTRY glMapBufferRangeEXT(GLenum target,
-                                      GLintptr offset,
-                                      GLsizeiptr length,
-                                      GLbitfield access)
-{
-    return gl::MapBufferRangeEXT(target, offset, length, access);
-}
-
-void GL_APIENTRY glFlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length)
-{
-    return gl::FlushMappedBufferRangeEXT(target, offset, length);
-}
-
-void GL_APIENTRY glInsertEventMarkerEXT(GLsizei length, const char *marker)
-{
-    return gl::InsertEventMarkerEXT(length, marker);
-}
-
-void GL_APIENTRY glPushGroupMarkerEXT(GLsizei length, const char *marker)
-{
-    return gl::PushGroupMarkerEXT(length, marker);
-}
-
-void GL_APIENTRY glPopGroupMarkerEXT()
-{
-    return gl::PopGroupMarkerEXT();
-}
-
-void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
-{
-    return gl::EGLImageTargetTexture2DOES(target, image);
-}
-
-void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
-{
-    return gl::EGLImageTargetRenderbufferStorageOES(target, image);
-}
-
-void GL_APIENTRY glBindVertexArrayOES(GLuint array)
-{
-    return gl::BindVertexArrayOES(array);
-}
-
-void GL_APIENTRY glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
-{
-    return gl::DeleteVertexArraysOES(n, arrays);
-}
-
-void GL_APIENTRY glGenVertexArraysOES(GLsizei n, GLuint *arrays)
-{
-    return gl::GenVertexArraysOES(n, arrays);
-}
-
-GLboolean GL_APIENTRY glIsVertexArrayOES(GLuint array)
-{
-    return gl::IsVertexArrayOES(array);
-}
-
-void GL_APIENTRY glDebugMessageControlKHR(GLenum source,
-                                          GLenum type,
-                                          GLenum severity,
-                                          GLsizei count,
-                                          const GLuint *ids,
-                                          GLboolean enabled)
-{
-    return gl::DebugMessageControlKHR(source, type, severity, count, ids, enabled);
-}
-
-void GL_APIENTRY glDebugMessageInsertKHR(GLenum source,
-                                         GLenum type,
-                                         GLuint id,
-                                         GLenum severity,
-                                         GLsizei length,
-                                         const GLchar *buf)
-{
-    return gl::DebugMessageInsertKHR(source, type, id, severity, length, buf);
-}
-
-void GL_APIENTRY glDebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void *userParam)
-{
-    return gl::DebugMessageCallbackKHR(callback, userParam);
-}
-
-GLuint GL_APIENTRY glGetDebugMessageLogKHR(GLuint count,
-                                           GLsizei bufSize,
-                                           GLenum *sources,
-                                           GLenum *types,
-                                           GLuint *ids,
-                                           GLenum *severities,
-                                           GLsizei *lengths,
-                                           GLchar *messageLog)
-{
-    return gl::GetDebugMessageLogKHR(count, bufSize, sources, types, ids, severities, lengths,
-                                     messageLog);
-}
-
-void GL_APIENTRY glPushDebugGroupKHR(GLenum source,
-                                     GLuint id,
-                                     GLsizei length,
-                                     const GLchar *message)
-{
-    return gl::PushDebugGroupKHR(source, id, length, message);
-}
-
-void GL_APIENTRY glPopDebugGroupKHR(void)
-{
-    return gl::PopDebugGroupKHR();
-}
-
-void GL_APIENTRY glObjectLabelKHR(GLenum identifier,
-                                  GLuint name,
-                                  GLsizei length,
-                                  const GLchar *label)
-{
-    return gl::ObjectLabelKHR(identifier, name, length, label);
-}
-
-void GL_APIENTRY
-glGetObjectLabelKHR(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label)
-{
-    return gl::GetObjectLabelKHR(identifier, name, bufSize, length, label);
-}
-
-void GL_APIENTRY glObjectPtrLabelKHR(const void *ptr, GLsizei length, const GLchar *label)
-{
-    return gl::ObjectPtrLabelKHR(ptr, length, label);
-}
-
-void GL_APIENTRY glGetObjectPtrLabelKHR(const void *ptr,
-                                        GLsizei bufSize,
-                                        GLsizei *length,
-                                        GLchar *label)
-{
-    return gl::GetObjectPtrLabelKHR(ptr, bufSize, length, label);
-}
-
-void GL_APIENTRY glGetPointervKHR(GLenum pname, void **params)
-{
-    return gl::GetPointervKHR(pname, params);
-}
-
-void GL_APIENTRY glBindUniformLocationCHROMIUM(GLuint program, GLint location, const GLchar *name)
-{
-    return gl::BindUniformLocationCHROMIUM(program, location, name);
-}
-
-void GL_APIENTRY glCoverageModulationCHROMIUM(GLenum components)
-{
-    return gl::CoverageModulationCHROMIUM(components);
-}
-
-// CHROMIUM_path_rendendering
-void GL_APIENTRY glMatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix)
-{
-    gl::MatrixLoadfCHROMIUM(matrixMode, matrix);
-}
-
-void GL_APIENTRY glMatrixLoadIdentityCHROMIUM(GLenum matrixMode)
-{
-    gl::MatrixLoadIdentityCHROMIUM(matrixMode);
-}
-
-GLuint GL_APIENTRY glGenPathsCHROMIUM(GLsizei range)
-{
-    return gl::GenPathsCHROMIUM(range);
-}
-
-void GL_APIENTRY glDeletePathsCHROMIUM(GLuint first, GLsizei range)
-{
-    gl::DeletePathsCHROMIUM(first, range);
-}
-
-GLboolean GL_APIENTRY glIsPathCHROMIUM(GLuint path)
-{
-    return gl::IsPathCHROMIUM(path);
-}
-
-void GL_APIENTRY glPathCommandsCHROMIUM(GLuint path,
-                                        GLsizei numCommands,
-                                        const GLubyte *commands,
-                                        GLsizei numCoords,
-                                        GLenum coordType,
-                                        const void *coords)
-{
-    gl::PathCommandsCHROMIUM(path, numCommands, commands, numCoords, coordType, coords);
-}
-
-void GL_APIENTRY glPathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value)
-{
-    gl::PathParameterfCHROMIUM(path, pname, value);
-}
-
-void GL_APIENTRY glPathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value)
-{
-    gl::PathParameteriCHROMIUM(path, pname, value);
-}
-
-void GL_APIENTRY glGetPathParameterfvCHROMIUM(GLuint path, GLenum pname, GLfloat *value)
-{
-    gl::GetPathParameterfvCHROMIUM(path, pname, value);
-}
-
-void GL_APIENTRY glGetPathParameterivCHROMIUM(GLuint path, GLenum pname, GLint *value)
-{
-    gl::GetPathParameterivCHROMIUM(path, pname, value);
-}
-
-void GL_APIENTRY glPathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask)
-{
-    gl::PathStencilFuncCHROMIUM(func, ref, mask);
-}
-
-void GL_APIENTRY glStencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask)
-{
-    gl::StencilFillPathCHROMIUM(path, fillMode, mask);
-}
-
-void GL_APIENTRY glStencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask)
-{
-    gl::StencilStrokePathCHROMIUM(path, reference, mask);
-}
-
-void GL_APIENTRY glCoverFillPathCHROMIUM(GLuint path, GLenum coverMode)
-{
-    gl::CoverFillPathCHROMIUM(path, coverMode);
-}
-
-void GL_APIENTRY glCoverStrokePathCHROMIUM(GLuint path, GLenum coverMode)
-{
-    gl::CoverStrokePathCHROMIUM(path, coverMode);
-}
-
-void GL_APIENTRY glStencilThenCoverFillPathCHROMIUM(GLuint path,
-                                                    GLenum fillMode,
-                                                    GLuint mask,
-                                                    GLenum coverMode)
-{
-    gl::StencilThenCoverFillPathCHROMIUM(path, fillMode, mask, coverMode);
-}
-
-void GL_APIENTRY glStencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                                      GLint reference,
-                                                      GLuint mask,
-                                                      GLenum coverMode)
-{
-    gl::StencilThenCoverStrokePathCHROMIUM(path, reference, mask, coverMode);
-}
-
-void GL_APIENTRY glCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                                  GLenum pathNameType,
-                                                  const void *paths,
-                                                  GLuint pathBase,
-                                                  GLenum coverMode,
-                                                  GLenum transformType,
-                                                  const GLfloat *transformValues)
-{
-    gl::CoverFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, coverMode,
-                                       transformType, transformValues);
-}
-
-void GL_APIENTRY glCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                                    GLenum pathNameType,
-                                                    const void *paths,
-                                                    GLuint pathBase,
-                                                    GLenum coverMode,
-                                                    GLenum transformType,
-                                                    const GLfloat *transformValues)
-{
-    gl::CoverStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, coverMode,
-                                         transformType, transformValues);
-}
-
-void GL_APIENTRY glStencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                                    GLenum pathNameType,
-                                                    const void *paths,
-                                                    GLuint pathBase,
-                                                    GLenum fillMode,
-                                                    GLuint mask,
-                                                    GLenum transformType,
-                                                    const GLfloat *transformValues)
-{
-    gl::StencilFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, fillMode, mask,
-                                         transformType, transformValues);
-}
-
-void GL_APIENTRY glStencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                                      GLenum pathNameType,
-                                                      const void *paths,
-                                                      GLuint pathBase,
-                                                      GLint reference,
-                                                      GLuint mask,
-                                                      GLenum transformType,
-                                                      const GLfloat *transformValues)
-{
-    gl::StencilStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, reference, mask,
-                                           transformType, transformValues);
-}
-
-void GL_APIENTRY glStencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                                             GLenum pathNameType,
-                                                             const void *paths,
-                                                             GLuint pathBase,
-                                                             GLenum fillMode,
-                                                             GLuint mask,
-                                                             GLenum coverMode,
-                                                             GLenum transformType,
-                                                             const GLfloat *transformValues)
-{
-    gl::StencilThenCoverFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, fillMode,
-                                                  mask, coverMode, transformType, transformValues);
-}
-
-void GL_APIENTRY glStencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                                               GLenum pathNameType,
-                                                               const void *paths,
-                                                               GLuint pathBase,
-                                                               GLint reference,
-                                                               GLuint mask,
-                                                               GLenum coverMode,
-                                                               GLenum transformType,
-                                                               const GLfloat *transformValues)
-{
-    gl::StencilThenCoverStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase,
-                                                    reference, mask, coverMode, transformType,
-                                                    transformValues);
-}
-
-void GL_APIENTRY glBindFragmentInputLocationCHROMIUM(GLuint program,
-                                                     GLint location,
-                                                     const GLchar *name)
-{
-    gl::BindFragmentInputLocationCHROMIUM(program, location, name);
-}
-
-void GL_APIENTRY glProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                                       GLint location,
-                                                       GLenum genMode,
-                                                       GLint components,
-                                                       const GLfloat *coeffs)
-{
-    gl::ProgramPathFragmentInputGenCHROMIUM(program, location, genMode, components, coeffs);
-}
-
-// GLES 3.1
-void GL_APIENTRY glDispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ)
-{
-    gl::DispatchCompute(numGroupsX, numGroupsY, numGroupsZ);
-}
-
-void GL_APIENTRY glDispatchComputeIndirect(GLintptr indirect)
-{
-    gl::DispatchComputeIndirect(indirect);
-}
-
-void GL_APIENTRY glDrawArraysIndirect(GLenum mode, const void *indirect)
-{
-    gl::DrawArraysIndirect(mode, indirect);
-}
-
-void GL_APIENTRY glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect)
-{
-    gl::DrawElementsIndirect(mode, type, indirect);
-}
-
-void GL_APIENTRY glFramebufferParameteri(GLenum target, GLenum pname, GLint param)
-{
-    gl::FramebufferParameteri(target, pname, param);
-}
-
-void GL_APIENTRY glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params)
-{
-    gl::GetFramebufferParameteriv(target, pname, params);
-}
-
-void GL_APIENTRY glGetProgramInterfaceiv(GLuint program,
-                                         GLenum programInterface,
-                                         GLenum pname,
-                                         GLint *params)
-{
-    gl::GetProgramInterfaceiv(program, programInterface, pname, params);
-}
-
-GLuint GL_APIENTRY glGetProgramResourceIndex(GLuint program,
-                                             GLenum programInterface,
-                                             const GLchar *name)
-{
-    return gl::GetProgramResourceIndex(program, programInterface, name);
-}
-
-void GL_APIENTRY glGetProgramResourceName(GLuint program,
-                                          GLenum programInterface,
-                                          GLuint index,
-                                          GLsizei bufSize,
-                                          GLsizei *length,
-                                          GLchar *name)
-{
-    gl::GetProgramResourceName(program, programInterface, index, bufSize, length, name);
-}
-
-void GL_APIENTRY glGetProgramResourceiv(GLuint program,
-                                        GLenum programInterface,
-                                        GLuint index,
-                                        GLsizei propCount,
-                                        const GLenum *props,
-                                        GLsizei bufSize,
-                                        GLsizei *length,
-                                        GLint *params)
-{
-    gl::GetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length,
-                             params);
-}
-
-GLint GL_APIENTRY glGetProgramResourceLocation(GLuint program,
-                                               GLenum programInterface,
-                                               const GLchar *name)
-{
-    return gl::GetProgramResourceLocation(program, programInterface, name);
-}
-
-void GL_APIENTRY glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
-{
-    gl::UseProgramStages(pipeline, stages, program);
-}
-
-void GL_APIENTRY glActiveShaderProgram(GLuint pipeline, GLuint program)
-{
-    gl::ActiveShaderProgram(pipeline, program);
-}
-
-GLuint GL_APIENTRY glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const *strings)
-{
-    return gl::CreateShaderProgramv(type, count, strings);
-}
-
-void GL_APIENTRY glBindProgramPipeline(GLuint pipeline)
-{
-    gl::BindProgramPipeline(pipeline);
-}
-
-void GL_APIENTRY glDeleteProgramPipelines(GLsizei n, const GLuint *pipelines)
-{
-    gl::DeleteProgramPipelines(n, pipelines);
-}
-
-void GL_APIENTRY glGenProgramPipelines(GLsizei n, GLuint *pipelines)
-{
-    gl::GenProgramPipelines(n, pipelines);
-}
-
-GLboolean GL_APIENTRY glIsProgramPipeline(GLuint pipeline)
-{
-    return gl::IsProgramPipeline(pipeline);
-}
-
-void GL_APIENTRY glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
-{
-    gl::GetProgramPipelineiv(pipeline, pname, params);
-}
-
-void GL_APIENTRY glProgramUniform1i(GLuint program, GLint location, GLint v0)
-{
-    gl::ProgramUniform1i(program, location, v0);
-}
-
-void GL_APIENTRY glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
-{
-    gl::ProgramUniform2i(program, location, v0, v1);
-}
-
-void GL_APIENTRY glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
-{
-    gl::ProgramUniform3i(program, location, v0, v1, v2);
-}
-
-void GL_APIENTRY
-glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
-{
-    gl::ProgramUniform4i(program, location, v0, v1, v2, v3);
-}
-
-void GL_APIENTRY glProgramUniform1ui(GLuint program, GLint location, GLuint v0)
-{
-    gl::ProgramUniform1ui(program, location, v0);
-}
-
-void GL_APIENTRY glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
-{
-    gl::ProgramUniform2ui(program, location, v0, v1);
-}
-
-void GL_APIENTRY
-glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
-{
-    gl::ProgramUniform3ui(program, location, v0, v1, v2);
-}
-
-void GL_APIENTRY
-glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
-{
-    gl::ProgramUniform4ui(program, location, v0, v1, v2, v3);
-}
-
-void GL_APIENTRY glProgramUniform1f(GLuint program, GLint location, GLfloat v0)
-{
-    gl::ProgramUniform1f(program, location, v0);
-}
-
-void GL_APIENTRY glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
-{
-    gl::ProgramUniform2f(program, location, v0, v1);
-}
-
-void GL_APIENTRY
-glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
-{
-    gl::ProgramUniform3f(program, location, v0, v1, v2);
-}
-
-void GL_APIENTRY
-glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
-{
-    gl::ProgramUniform4f(program, location, v0, v1, v2, v3);
-}
-
-void GL_APIENTRY glProgramUniform1iv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLint *value)
-{
-    gl::ProgramUniform1iv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform2iv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLint *value)
-{
-    gl::ProgramUniform2iv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform3iv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLint *value)
-{
-    gl::ProgramUniform3iv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform4iv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLint *value)
-{
-    gl::ProgramUniform4iv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform1uiv(GLuint program,
-                                      GLint location,
-                                      GLsizei count,
-                                      const GLuint *value)
-{
-    gl::ProgramUniform1uiv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform2uiv(GLuint program,
-                                      GLint location,
-                                      GLsizei count,
-                                      const GLuint *value)
-{
-    gl::ProgramUniform2uiv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform3uiv(GLuint program,
-                                      GLint location,
-                                      GLsizei count,
-                                      const GLuint *value)
-{
-    gl::ProgramUniform3uiv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform4uiv(GLuint program,
-                                      GLint location,
-                                      GLsizei count,
-                                      const GLuint *value)
-{
-    gl::ProgramUniform4uiv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform1fv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLfloat *value)
-{
-    gl::ProgramUniform1fv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform2fv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLfloat *value)
-{
-    gl::ProgramUniform2fv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform3fv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLfloat *value)
-{
-    gl::ProgramUniform3fv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniform4fv(GLuint program,
-                                     GLint location,
-                                     GLsizei count,
-                                     const GLfloat *value)
-{
-    gl::ProgramUniform4fv(program, location, count, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix2fv(GLuint program,
-                                           GLint location,
-                                           GLsizei count,
-                                           GLboolean transpose,
-                                           const GLfloat *value)
-{
-    gl::ProgramUniformMatrix2fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix3fv(GLuint program,
-                                           GLint location,
-                                           GLsizei count,
-                                           GLboolean transpose,
-                                           const GLfloat *value)
-{
-    gl::ProgramUniformMatrix3fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix4fv(GLuint program,
-                                           GLint location,
-                                           GLsizei count,
-                                           GLboolean transpose,
-                                           const GLfloat *value)
-{
-    gl::ProgramUniformMatrix4fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix2x3fv(GLuint program,
-                                             GLint location,
-                                             GLsizei count,
-                                             GLboolean transpose,
-                                             const GLfloat *value)
-{
-    gl::ProgramUniformMatrix2x3fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix3x2fv(GLuint program,
-                                             GLint location,
-                                             GLsizei count,
-                                             GLboolean transpose,
-                                             const GLfloat *value)
-{
-    gl::ProgramUniformMatrix3x2fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix2x4fv(GLuint program,
-                                             GLint location,
-                                             GLsizei count,
-                                             GLboolean transpose,
-                                             const GLfloat *value)
-{
-    gl::ProgramUniformMatrix2x4fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix4x2fv(GLuint program,
-                                             GLint location,
-                                             GLsizei count,
-                                             GLboolean transpose,
-                                             const GLfloat *value)
-{
-    gl::ProgramUniformMatrix4x2fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix3x4fv(GLuint program,
-                                             GLint location,
-                                             GLsizei count,
-                                             GLboolean transpose,
-                                             const GLfloat *value)
-{
-    gl::ProgramUniformMatrix3x4fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glProgramUniformMatrix4x3fv(GLuint program,
-                                             GLint location,
-                                             GLsizei count,
-                                             GLboolean transpose,
-                                             const GLfloat *value)
-{
-    gl::ProgramUniformMatrix4x3fv(program, location, count, transpose, value);
-}
-
-void GL_APIENTRY glValidateProgramPipeline(GLuint pipeline)
-{
-    gl::ValidateProgramPipeline(pipeline);
-}
-
-void GL_APIENTRY glGetProgramPipelineInfoLog(GLuint pipeline,
-                                             GLsizei bufSize,
-                                             GLsizei *length,
-                                             GLchar *infoLog)
-{
-    gl::GetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
-}
-
-void GL_APIENTRY glBindImageTexture(GLuint unit,
-                                    GLuint texture,
-                                    GLint level,
-                                    GLboolean layered,
-                                    GLint layer,
-                                    GLenum access,
-                                    GLenum format)
-{
-    gl::BindImageTexture(unit, texture, level, layered, layer, access, format);
-}
-
-void GL_APIENTRY glGetBooleani_v(GLenum target, GLuint index, GLboolean *data)
-{
-    gl::GetBooleani_v(target, index, data);
-}
-
-void GL_APIENTRY glMemoryBarrier(GLbitfield barriers)
-{
-    gl::MemoryBarrier(barriers);
-}
-
-void GL_APIENTRY glMemoryBarrierByRegion(GLbitfield barriers)
-{
-    gl::MemoryBarrierByRegion(barriers);
-}
-
-void GL_APIENTRY glTexStorage2DMultisample(GLenum target,
-                                           GLsizei samples,
-                                           GLenum internalformat,
-                                           GLsizei width,
-                                           GLsizei height,
-                                           GLboolean fixedsamplelocations)
-{
-    gl::TexStorage2DMultisample(target, samples, internalformat, width, height,
-                                fixedsamplelocations);
-}
-
-void GL_APIENTRY glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
-{
-    gl::GetMultisamplefv(pname, index, val);
-}
-
-void GL_APIENTRY glSampleMaski(GLuint maskNumber, GLbitfield mask)
-{
-    gl::SampleMaski(maskNumber, mask);
-}
-
-void GL_APIENTRY glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
-{
-    gl::GetTexLevelParameteriv(target, level, pname, params);
-}
-
-void GL_APIENTRY glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
-{
-    gl::GetTexLevelParameterfv(target, level, pname, params);
-}
-
-void GL_APIENTRY glBindVertexBuffer(GLuint bindingindex,
-                                    GLuint buffer,
-                                    GLintptr offset,
-                                    GLsizei stride)
-{
-    gl::BindVertexBuffer(bindingindex, buffer, offset, stride);
-}
-
-void GL_APIENTRY glVertexAttribFormat(GLuint attribindex,
-                                      GLint size,
-                                      GLenum type,
-                                      GLboolean normalized,
-                                      GLuint relativeoffset)
-{
-    gl::VertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
-}
-
-void GL_APIENTRY glVertexAttribIFormat(GLuint attribindex,
-                                       GLint size,
-                                       GLenum type,
-                                       GLuint relativeoffset)
-{
-    gl::VertexAttribIFormat(attribindex, size, type, relativeoffset);
-}
-
-void GL_APIENTRY glVertexAttribBinding(GLuint attribindex, GLuint bindingindex)
-{
-    gl::VertexAttribBinding(attribindex, bindingindex);
-}
-
-void GL_APIENTRY glVertexBindingDivisor(GLuint bindingindex, GLuint divisor)
-{
-    gl::VertexBindingDivisor(bindingindex, divisor);
-}
-
-void GL_APIENTRY glFramebufferTextureMultiviewLayeredANGLE(GLenum target,
-                                                           GLenum attachment,
-                                                           GLuint texture,
-                                                           GLint level,
-                                                           GLint baseViewIndex,
-                                                           GLsizei numViews)
-{
-    gl::FramebufferTextureMultiviewLayeredANGLE(target, attachment, texture, level, baseViewIndex,
-                                                numViews);
-}
-
-void GL_APIENTRY glFramebufferTextureMultiviewSideBySideANGLE(GLenum target,
-                                                              GLenum attachment,
-                                                              GLuint texture,
-                                                              GLint level,
-                                                              GLsizei numViews,
-                                                              const GLint *viewportOffsets)
-{
-    gl::FramebufferTextureMultiviewSideBySideANGLE(target, attachment, texture, level, numViews,
-                                                   viewportOffsets);
-}
-
-void GL_APIENTRY glRequestExtensionANGLE(const GLchar *name)
-{
-    gl::RequestExtensionANGLE(name);
-}
-
-}  // extern "C"
deleted file mode 100644
--- a/gfx/angle/checkout/src/libGLESv2/libGLESv2.def
+++ /dev/null
@@ -1,412 +0,0 @@
-LIBRARY libGLESv2
-EXPORTS
-    glActiveTexture                 @1
-    glAttachShader                  @2
-    glBindAttribLocation            @3
-    glBindBuffer                    @4
-    glBindFramebuffer               @5
-    glBindRenderbuffer              @6
-    glBindTexture                   @7
-    glBlendColor                    @8
-    glBlendEquation                 @9
-    glBlendEquationSeparate         @10
-    glBlendFunc                     @11
-    glBlendFuncSeparate             @12
-    glBufferData                    @13
-    glBufferSubData                 @14
-    glCheckFramebufferStatus        @15
-    glClear                         @16
-    glClearColor                    @17
-    glClearDepthf                   @18
-    glClearStencil                  @19
-    glColorMask                     @20
-    glCompileShader                 @21
-    glCompressedTexImage2D          @22
-    glCompressedTexSubImage2D       @23
-    glCopyTexImage2D                @24
-    glCopyTexSubImage2D             @25
-    glCreateProgram                 @26
-    glCreateShader                  @27
-    glCullFace                      @28
-    glDeleteBuffers                 @29
-    glDeleteFramebuffers            @30
-    glDeleteProgram                 @32
-    glDeleteRenderbuffers           @33
-    glDeleteShader                  @34
-    glDeleteTextures                @31
-    glDepthFunc                     @36
-    glDepthMask                     @37
-    glDepthRangef                   @38
-    glDetachShader                  @35
-    glDisable                       @39
-    glDisableVertexAttribArray      @40
-    glDrawArrays                    @41
-    glDrawElements                  @42
-    glEnable                        @43
-    glEnableVertexAttribArray       @44
-    glFinish                        @45
-    glFlush                         @46
-    glFramebufferRenderbuffer       @47
-    glFramebufferTexture2D          @48
-    glFrontFace                     @49
-    glGenBuffers                    @50
-    glGenFramebuffers               @52
-    glGenRenderbuffers              @53
-    glGenTextures                   @54
-    glGenerateMipmap                @51
-    glGetActiveAttrib               @55
-    glGetActiveUniform              @56
-    glGetAttachedShaders            @57
-    glGetAttribLocation             @58
-    glGetBooleanv                   @59
-    glGetBufferParameteriv          @60
-    glGetError                      @61
-    glGetFloatv                     @62
-    glGetFramebufferAttachmentParameteriv   @63
-    glGetIntegerv                   @64
-    glGetProgramInfoLog             @66
-    glGetProgramiv                  @65
-    glGetRenderbufferParameteriv    @67
-    glGetShaderInfoLog              @69
-    glGetShaderPrecisionFormat      @70
-    glGetShaderSource               @71
-    glGetShaderiv                   @68
-    glGetString                     @72
-    glGetTexParameterfv             @73
-    glGetTexParameteriv             @74
-    glGetUniformLocation            @77
-    glGetUniformfv                  @75
-    glGetUniformiv                  @76
-    glGetVertexAttribPointerv       @80
-    glGetVertexAttribfv             @78
-    glGetVertexAttribiv             @79
-    glHint                          @81
-    glIsBuffer                      @82
-    glIsEnabled                     @83
-    glIsFramebuffer                 @84
-    glIsProgram                     @85
-    glIsRenderbuffer                @86
-    glIsShader                      @87
-    glIsTexture                     @88
-    glLineWidth                     @89
-    glLinkProgram                   @90
-    glPixelStorei                   @91
-    glPolygonOffset                 @92
-    glReadPixels                    @93
-    glReleaseShaderCompiler         @94
-    glRenderbufferStorage           @95
-    glSampleCoverage                @96
-    glScissor                       @97
-    glShaderBinary                  @98
-    glShaderSource                  @99
-    glStencilFunc                   @100
-    glStencilFuncSeparate           @101
-    glStencilMask                   @102
-    glStencilMaskSeparate           @103
-    glStencilOp                     @104
-    glStencilOpSeparate             @105
-    glTexImage2D                    @106
-    glTexParameterf                 @107
-    glTexParameterfv                @108
-    glTexParameteri                 @109
-    glTexParameteriv                @110
-    glTexSubImage2D                 @111
-    glUniform1f                     @112
-    glUniform1fv                    @113
-    glUniform1i                     @114
-    glUniform1iv                    @115
-    glUniform2f                     @116
-    glUniform2fv                    @117
-    glUniform2i                     @118
-    glUniform2iv                    @119
-    glUniform3f                     @120
-    glUniform3fv                    @121
-    glUniform3i                     @122
-    glUniform3iv                    @123
-    glUniform4f                     @124
-    glUniform4fv                    @125
-    glUniform4i                     @126
-    glUniform4iv                    @127
-    glUniformMatrix2fv              @128
-    glUniformMatrix3fv              @129
-    glUniformMatrix4fv              @130
-    glUseProgram                    @131
-    glValidateProgram               @132
-    glVertexAttrib1f                @133
-    glVertexAttrib1fv               @134
-    glVertexAttrib2f                @135
-    glVertexAttrib2fv               @136
-    glVertexAttrib3f                @137
-    glVertexAttrib3fv               @138
-    glVertexAttrib4f                @139
-    glVertexAttrib4fv               @140
-    glVertexAttribPointer           @141
-    glViewport                      @142
-
-    ; Extensions
-    glBlitFramebufferANGLE          @149
-    glRenderbufferStorageMultisampleANGLE @150
-    glDeleteFencesNV                @151
-    glFinishFenceNV                 @152
-    glGenFencesNV                   @153
-    glGetFenceivNV                  @154
-    glIsFenceNV                     @155
-    glSetFenceNV                    @156
-    glTestFenceNV                   @157
-    glGetTranslatedShaderSourceANGLE @159
-    glTexStorage2DEXT               @160
-    glGetGraphicsResetStatusEXT     @161
-    glReadnPixelsEXT                @162
-    glGetnUniformfvEXT              @163
-    glGetnUniformivEXT              @164
-    glGenQueriesEXT                 @165
-    glDeleteQueriesEXT              @166
-    glIsQueryEXT                    @167
-    glBeginQueryEXT                 @168
-    glEndQueryEXT                   @169
-    glGetQueryivEXT                 @170
-    glGetQueryObjectuivEXT          @171
-    glVertexAttribDivisorANGLE      @172
-    glDrawArraysInstancedANGLE      @173
-    glDrawElementsInstancedANGLE    @174
-    glProgramBinaryOES              @175
-    glGetProgramBinaryOES           @176
-    glDrawBuffersEXT                @179
-    glMapBufferOES                  @285
-    glUnmapBufferOES                @286
-    glGetBufferPointervOES          @287
-    glMapBufferRangeEXT             @288
-    glFlushMappedBufferRangeEXT     @289
-    glDiscardFramebufferEXT         @293
-    glInsertEventMarkerEXT          @294
-    glPushGroupMarkerEXT            @295
-    glPopGroupMarkerEXT             @296
-    glEGLImageTargetTexture2DOES    @297
-    glEGLImageTargetRenderbufferStorageOES @298
-    glBindVertexArrayOES            @299
-    glDeleteVertexArraysOES         @300
-    glGenVertexArraysOES            @301
-    glIsVertexArrayOES              @302
-    glDebugMessageControlKHR        @303
-    glDebugMessageInsertKHR         @304
-    glDebugMessageCallbackKHR       @305
-    glGetDebugMessageLogKHR         @306
-    glPushDebugGroupKHR             @307
-    glPopDebugGroupKHR              @308
-    glObjectLabelKHR                @309
-    glGetObjectLabelKHR             @310
-    glObjectPtrLabelKHR             @311
-    glGetObjectPtrLabelKHR          @312
-    glGetPointervKHR                @313
-    glQueryCounterEXT               @314
-    glGetQueryObjectivEXT           @315
-    glGetQueryObjecti64vEXT         @316
-    glGetQueryObjectui64vEXT        @317
-    glBindUniformLocationCHROMIUM   @318
-    glCoverageModulationCHROMIUM    @319
-
-    glMatrixLoadfCHROMIUM           @320
-    glMatrixLoadIdentityCHROMIUM    @321
-    glGenPathsCHROMIUM              @322
-    glDeletePathsCHROMIUM           @323
-    glIsPathCHROMIUM                @324
-    glPathCommandsCHROMIUM          @325
-    glPathParameterfCHROMIUM        @326
-    glPathParameteriCHROMIUM        @327
-    glGetPathParameterfvCHROMIUM    @328
-    glGetPathParameterivCHROMIUM    @329
-    glPathStencilFuncCHROMIUM       @330
-    glStencilFillPathCHROMIUM       @331
-    glStencilStrokePathCHROMIUM     @332
-    glCoverFillPathCHROMIUM         @333
-    glCoverStrokePathCHROMIUM       @334
-    glStencilThenCoverFillPathCHROMIUM            @335
-    glStencilThenCoverStrokePathCHROMIUM          @336
-    glCoverFillPathInstancedCHROMIUM              @337
-    glCoverStrokePathInstancedCHROMIUM            @338
-    glStencilStrokePathInstancedCHROMIUM          @339
-    glStencilFillPathInstancedCHROMIUM            @340
-    glStencilThenCoverFillPathInstancedCHROMIUM   @341
-    glStencilThenCoverStrokePathInstancedCHROMIUM @342
-    glBindFragmentInputLocationCHROMIUM           @343
-    glProgramPathFragmentInputGenCHROMIUM         @344
-
-    glFramebufferTextureMultiviewLayeredANGLE @413
-    glFramebufferTextureMultiviewSideBySideANGLE @414
-    glRequestExtensionANGLE         @415
-
-    ; GLES 3.0 Functions
-    glReadBuffer                    @180
-    glDrawRangeElements             @181
-    glTexImage3D                    @182
-    glTexSubImage3D                 @183
-    glCopyTexSubImage3D             @184
-    glCompressedTexImage3D          @185
-    glCompressedTexSubImage3D       @186
-    glGenQueries                    @187
-    glDeleteQueries                 @188
-    glIsQuery                       @189
-    glBeginQuery                    @190
-    glEndQuery                      @191
-    glGetQueryiv                    @192
-    glGetQueryObjectuiv             @193
-    glUnmapBuffer                   @194
-    glGetBufferPointerv             @195
-    glDrawBuffers                   @196
-    glUniformMatrix2x3fv            @197
-    glUniformMatrix3x2fv            @198
-    glUniformMatrix2x4fv            @199
-    glUniformMatrix4x2fv            @200
-    glUniformMatrix3x4fv            @201
-    glUniformMatrix4x3fv            @202
-    glBlitFramebuffer               @203
-    glRenderbufferStorageMultisample @204
-    glFramebufferTextureLayer       @205
-    glMapBufferRange                @206
-    glFlushMappedBufferRange        @207
-    glBindVertexArray               @208
-    glDeleteVertexArrays            @209
-    glGenVertexArrays               @210
-    glIsVertexArray                 @211
-    glGetIntegeri_v                 @212
-    glBeginTransformFeedback        @213
-    glEndTransformFeedback          @214
-    glBindBufferRange               @215
-    glBindBufferBase                @216
-    glTransformFeedbackVaryings     @217
-    glGetTransformFeedbackVarying   @218
-    glVertexAttribIPointer          @219
-    glGetVertexAttribIiv            @220
-    glGetVertexAttribIuiv           @221
-    glVertexAttribI4i               @222
-    glVertexAttribI4ui              @223
-    glVertexAttribI4iv              @224
-    glVertexAttribI4uiv             @225
-    glGetUniformuiv                 @226
-    glGetFragDataLocation           @227
-    glUniform1ui                    @228
-    glUniform2ui                    @229
-    glUniform3ui                    @230
-    glUniform4ui                    @231
-    glUniform1uiv                   @232
-    glUniform2uiv                   @233
-    glUniform3uiv                   @234
-    glUniform4uiv                   @235
-    glClearBufferiv                 @236
-    glClearBufferuiv                @237
-    glClearBufferfv                 @238
-    glClearBufferfi                 @239
-    glGetStringi                    @240
-    glCopyBufferSubData             @241
-    glGetUniformIndices             @242
-    glGetActiveUniformsiv           @243
-    glGetUniformBlockIndex          @244
-    glGetActiveUniformBlockiv       @245
-    glGetActiveUniformBlockName     @246
-    glUniformBlockBinding           @247
-    glDrawArraysInstanced           @248
-    glDrawElementsInstanced         @249
-    glFenceSync                     @250
-    glIsSync                        @251
-    glDeleteSync                    @252
-    glClientWaitSync                @253
-    glWaitSync                      @254
-    glGetInteger64v                 @255
-    glGetSynciv                     @256
-    glGetInteger64i_v               @257
-    glGetBufferParameteri64v        @258
-    glGenSamplers                   @259
-    glDeleteSamplers                @260
-    glIsSampler                     @261
-    glBindSampler                   @262
-    glSamplerParameteri             @263
-    glSamplerParameteriv            @264
-    glSamplerParameterf             @265
-    glSamplerParameterfv            @266
-    glGetSamplerParameteriv         @267
-    glGetSamplerParameterfv         @268
-    glVertexAttribDivisor           @269
-    glBindTransformFeedback         @270
-    glDeleteTransformFeedbacks      @271
-    glGenTransformFeedbacks         @272
-    glIsTransformFeedback           @273
-    glPauseTransformFeedback        @274
-    glResumeTransformFeedback       @275
-    glGetProgramBinary              @276
-    glProgramBinary                 @277
-    glProgramParameteri             @278
-    glInvalidateFramebuffer         @279
-    glInvalidateSubFramebuffer      @280
-    glTexStorage2D                  @281
-    glTexStorage3D                  @282
-    glGetInternalformativ           @283
-
-    ; GLES 3.1 Functions
-    glDispatchCompute               @345
-    glDispatchComputeIndirect       @346
-    glDrawArraysIndirect            @347
-    glDrawElementsIndirect          @348
-    glFramebufferParameteri         @349
-    glGetFramebufferParameteriv     @350
-    glGetProgramInterfaceiv         @351
-    glGetProgramResourceIndex       @352
-    glGetProgramResourceName        @353
-    glGetProgramResourceiv          @354
-    glGetProgramResourceLocation    @355
-    glUseProgramStages              @356
-    glActiveShaderProgram           @357
-    glCreateShaderProgramv          @358
-    glBindProgramPipeline           @359
-    glDeleteProgramPipelines        @360
-    glGenProgramPipelines           @361
-    glIsProgramPipeline             @362
-    glGetProgramPipelineiv          @363
-    glProgramUniform1i              @364
-    glProgramUniform2i              @365
-    glProgramUniform3i              @366
-    glProgramUniform4i              @367
-    glProgramUniform1ui             @368
-    glProgramUniform2ui             @369
-    glProgramUniform3ui             @370
-    glProgramUniform4ui             @371
-    glProgramUniform1f              @372
-    glProgramUniform2f              @373
-    glProgramUniform3f              @374
-    glProgramUniform4f              @375
-    glProgramUniform1iv             @376
-    glProgramUniform2iv             @377
-    glProgramUniform3iv             @378
-    glProgramUniform4iv             @379
-    glProgramUniform1uiv            @380
-    glProgramUniform2uiv            @381
-    glProgramUniform3uiv            @382
-    glProgramUniform4uiv            @383
-    glProgramUniform1fv             @384
-    glProgramUniform2fv             @385
-    glProgramUniform3fv             @386
-    glProgramUniform4fv             @387
-    glProgramUniformMatrix2fv       @388
-    glProgramUniformMatrix3fv       @389
-    glProgramUniformMatrix4fv       @390
-    glProgramUniformMatrix2x3fv     @391
-    glProgramUniformMatrix3x2fv     @392
-    glProgramUniformMatrix2x4fv     @393
-    glProgramUniformMatrix4x2fv     @394
-    glProgramUniformMatrix3x4fv     @395
-    glProgramUniformMatrix4x3fv     @396
-    glValidateProgramPipeline       @397
-    glGetProgramPipelineInfoLog     @398
-    glBindImageTexture              @399
-    glGetBooleani_v                 @400
-    glMemoryBarrier                 @401
-    glMemoryBarrierByRegion         @402
-    glTexStorage2DMultisample       @403
-    glGetMultisamplefv              @404
-    glSampleMaski                   @405
-    glGetTexLevelParameteriv        @406
-    glGetTexLevelParameterfv        @407
-    glBindVertexBuffer              @408
-    glVertexAttribFormat            @409
-    glVertexAttribIFormat           @410
-    glVertexAttribBinding           @411
-    glVertexBindingDivisor          @412
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libGLESv2/libGLESv2_autogen.cpp
@@ -0,0 +1,8701 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
+//
+// 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.
+//
+// libGLESv2.cpp: Implements the exported OpenGL ES functions.
+
+#include "angle_gl.h"
+
+#include "libGLESv2/entry_points_gles_1_0_autogen.h"
+#include "libGLESv2/entry_points_gles_2_0_autogen.h"
+#include "libGLESv2/entry_points_gles_3_0_autogen.h"
+#include "libGLESv2/entry_points_gles_3_1_autogen.h"
+#include "libGLESv2/entry_points_gles_ext_autogen.h"
+
+#include "common/event_tracer.h"
+
+extern "C" {
+
+// OpenGL ES 2.0
+void GL_APIENTRY glActiveTexture(GLenum texture)
+{
+    return gl::ActiveTexture(texture);
+}
+
+void GL_APIENTRY glAttachShader(GLuint program, GLuint shader)
+{
+    return gl::AttachShader(program, shader);
+}
+
+void GL_APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar *name)
+{
+    return gl::BindAttribLocation(program, index, name);
+}
+
+void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer)
+{
+    return gl::BindBuffer(target, buffer);
+}
+
+void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer)
+{
+    return gl::BindFramebuffer(target, framebuffer);
+}
+
+void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+{
+    return gl::BindRenderbuffer(target, renderbuffer);
+}
+
+void GL_APIENTRY glBindTexture(GLenum target, GLuint texture)
+{
+    return gl::BindTexture(target, texture);
+}
+
+void GL_APIENTRY glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    return gl::BlendColor(red, green, blue, alpha);
+}
+
+void GL_APIENTRY glBlendEquation(GLenum mode)
+{
+    return gl::BlendEquation(mode);
+}
+
+void GL_APIENTRY glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+{
+    return gl::BlendEquationSeparate(modeRGB, modeAlpha);
+}
+
+void GL_APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
+{
+    return gl::BlendFunc(sfactor, dfactor);
+}
+
+void GL_APIENTRY glBlendFuncSeparate(GLenum sfactorRGB,
+                                     GLenum dfactorRGB,
+                                     GLenum sfactorAlpha,
+                                     GLenum dfactorAlpha)
+{
+    return gl::BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
+}
+
+void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage)
+{
+    return gl::BufferData(target, size, data, usage);
+}
+
+void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void *data)
+{
+    return gl::BufferSubData(target, offset, size, data);
+}
+
+GLenum GL_APIENTRY glCheckFramebufferStatus(GLenum target)
+{
+    return gl::CheckFramebufferStatus(target);
+}
+
+void GL_APIENTRY glClear(GLbitfield mask)
+{
+    return gl::Clear(mask);
+}
+
+void GL_APIENTRY glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    return gl::ClearColor(red, green, blue, alpha);
+}
+
+void GL_APIENTRY glClearDepthf(GLfloat d)
+{
+    return gl::ClearDepthf(d);
+}
+
+void GL_APIENTRY glClearStencil(GLint s)
+{
+    return gl::ClearStencil(s);
+}
+
+void GL_APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+{
+    return gl::ColorMask(red, green, blue, alpha);
+}
+
+void GL_APIENTRY glCompileShader(GLuint shader)
+{
+    return gl::CompileShader(shader);
+}
+
+void GL_APIENTRY glCompressedTexImage2D(GLenum target,
+                                        GLint level,
+                                        GLenum internalformat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLint border,
+                                        GLsizei imageSize,
+                                        const void *data)
+{
+    return gl::CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize,
+                                    data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage2D(GLenum target,
+                                           GLint level,
+                                           GLint xoffset,
+                                           GLint yoffset,
+                                           GLsizei width,
+                                           GLsizei height,
+                                           GLenum format,
+                                           GLsizei imageSize,
+                                           const void *data)
+{
+    return gl::CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format,
+                                       imageSize, data);
+}
+
+void GL_APIENTRY glCopyTexImage2D(GLenum target,
+                                  GLint level,
+                                  GLenum internalformat,
+                                  GLint x,
+                                  GLint y,
+                                  GLsizei width,
+                                  GLsizei height,
+                                  GLint border)
+{
+    return gl::CopyTexImage2D(target, level, internalformat, x, y, width, height, border);
+}
+
+void GL_APIENTRY glCopyTexSubImage2D(GLenum target,
+                                     GLint level,
+                                     GLint xoffset,
+                                     GLint yoffset,
+                                     GLint x,
+                                     GLint y,
+                                     GLsizei width,
+                                     GLsizei height)
+{
+    return gl::CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+}
+
+GLuint GL_APIENTRY glCreateProgram()
+{
+    return gl::CreateProgram();
+}
+
+GLuint GL_APIENTRY glCreateShader(GLenum type)
+{
+    return gl::CreateShader(type);
+}
+
+void GL_APIENTRY glCullFace(GLenum mode)
+{
+    return gl::CullFace(mode);
+}
+
+void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint *buffers)
+{
+    return gl::DeleteBuffers(n, buffers);
+}
+
+void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
+{
+    return gl::DeleteFramebuffers(n, framebuffers);
+}
+
+void GL_APIENTRY glDeleteProgram(GLuint program)
+{
+    return gl::DeleteProgram(program);
+}
+
+void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
+{
+    return gl::DeleteRenderbuffers(n, renderbuffers);
+}
+
+void GL_APIENTRY glDeleteShader(GLuint shader)
+{
+    return gl::DeleteShader(shader);
+}
+
+void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint *textures)
+{
+    return gl::DeleteTextures(n, textures);
+}
+
+void GL_APIENTRY glDepthFunc(GLenum func)
+{
+    return gl::DepthFunc(func);
+}
+
+void GL_APIENTRY glDepthMask(GLboolean flag)
+{
+    return gl::DepthMask(flag);
+}
+
+void GL_APIENTRY glDepthRangef(GLfloat n, GLfloat f)
+{
+    return gl::DepthRangef(n, f);
+}
+
+void GL_APIENTRY glDetachShader(GLuint program, GLuint shader)
+{
+    return gl::DetachShader(program, shader);
+}
+
+void GL_APIENTRY glDisable(GLenum cap)
+{
+    return gl::Disable(cap);
+}
+
+void GL_APIENTRY glDisableVertexAttribArray(GLuint index)
+{
+    return gl::DisableVertexAttribArray(index);
+}
+
+void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+    return gl::DrawArrays(mode, first, count);
+}
+
+void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+{
+    return gl::DrawElements(mode, count, type, indices);
+}
+
+void GL_APIENTRY glEnable(GLenum cap)
+{
+    return gl::Enable(cap);
+}
+
+void GL_APIENTRY glEnableVertexAttribArray(GLuint index)
+{
+    return gl::EnableVertexAttribArray(index);
+}
+
+void GL_APIENTRY glFinish()
+{
+    return gl::Finish();
+}
+
+void GL_APIENTRY glFlush()
+{
+    return gl::Flush();
+}
+
+void GL_APIENTRY glFramebufferRenderbuffer(GLenum target,
+                                           GLenum attachment,
+                                           GLenum renderbuffertarget,
+                                           GLuint renderbuffer)
+{
+    return gl::FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+}
+
+void GL_APIENTRY glFramebufferTexture2D(GLenum target,
+                                        GLenum attachment,
+                                        GLenum textarget,
+                                        GLuint texture,
+                                        GLint level)
+{
+    return gl::FramebufferTexture2D(target, attachment, textarget, texture, level);
+}
+
+void GL_APIENTRY glFrontFace(GLenum mode)
+{
+    return gl::FrontFace(mode);
+}
+
+void GL_APIENTRY glGenBuffers(GLsizei n, GLuint *buffers)
+{
+    return gl::GenBuffers(n, buffers);
+}
+
+void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint *framebuffers)
+{
+    return gl::GenFramebuffers(n, framebuffers);
+}
+
+void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
+{
+    return gl::GenRenderbuffers(n, renderbuffers);
+}
+
+void GL_APIENTRY glGenTextures(GLsizei n, GLuint *textures)
+{
+    return gl::GenTextures(n, textures);
+}
+
+void GL_APIENTRY glGenerateMipmap(GLenum target)
+{
+    return gl::GenerateMipmap(target);
+}
+
+void GL_APIENTRY glGetActiveAttrib(GLuint program,
+                                   GLuint index,
+                                   GLsizei bufSize,
+                                   GLsizei *length,
+                                   GLint *size,
+                                   GLenum *type,
+                                   GLchar *name)
+{
+    return gl::GetActiveAttrib(program, index, bufSize, length, size, type, name);
+}
+
+void GL_APIENTRY glGetActiveUniform(GLuint program,
+                                    GLuint index,
+                                    GLsizei bufSize,
+                                    GLsizei *length,
+                                    GLint *size,
+                                    GLenum *type,
+                                    GLchar *name)
+{
+    return gl::GetActiveUniform(program, index, bufSize, length, size, type, name);
+}
+
+void GL_APIENTRY glGetAttachedShaders(GLuint program,
+                                      GLsizei maxCount,
+                                      GLsizei *count,
+                                      GLuint *shaders)
+{
+    return gl::GetAttachedShaders(program, maxCount, count, shaders);
+}
+
+GLint GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar *name)
+{
+    return gl::GetAttribLocation(program, name);
+}
+
+void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean *data)
+{
+    return gl::GetBooleanv(pname, data);
+}
+
+void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetBufferParameteriv(target, pname, params);
+}
+
+GLenum GL_APIENTRY glGetError()
+{
+    return gl::GetError();
+}
+
+void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat *data)
+{
+    return gl::GetFloatv(pname, data);
+}
+
+void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target,
+                                                       GLenum attachment,
+                                                       GLenum pname,
+                                                       GLint *params)
+{
+    return gl::GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
+}
+
+void GL_APIENTRY glGetIntegerv(GLenum pname, GLint *data)
+{
+    return gl::GetIntegerv(pname, data);
+}
+
+void GL_APIENTRY glGetProgramInfoLog(GLuint program,
+                                     GLsizei bufSize,
+                                     GLsizei *length,
+                                     GLchar *infoLog)
+{
+    return gl::GetProgramInfoLog(program, bufSize, length, infoLog);
+}
+
+void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint *params)
+{
+    return gl::GetProgramiv(program, pname, params);
+}
+
+void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetRenderbufferParameteriv(target, pname, params);
+}
+
+void GL_APIENTRY glGetShaderInfoLog(GLuint shader,
+                                    GLsizei bufSize,
+                                    GLsizei *length,
+                                    GLchar *infoLog)
+{
+    return gl::GetShaderInfoLog(shader, bufSize, length, infoLog);
+}
+
+void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype,
+                                            GLenum precisiontype,
+                                            GLint *range,
+                                            GLint *precision)
+{
+    return gl::GetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
+}
+
+void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
+{
+    return gl::GetShaderSource(shader, bufSize, length, source);
+}
+
+void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
+{
+    return gl::GetShaderiv(shader, pname, params);
+}
+
+const GLubyte *GL_APIENTRY glGetString(GLenum name)
+{
+    return gl::GetString(name);
+}
+
+void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+{
+    return gl::GetTexParameterfv(target, pname, params);
+}
+
+void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetTexParameteriv(target, pname, params);
+}
+
+GLint GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar *name)
+{
+    return gl::GetUniformLocation(program, name);
+}
+
+void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat *params)
+{
+    return gl::GetUniformfv(program, location, params);
+}
+
+void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint *params)
+{
+    return gl::GetUniformiv(program, location, params);
+}
+
+void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)
+{
+    return gl::GetVertexAttribPointerv(index, pname, pointer);
+}
+
+void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
+{
+    return gl::GetVertexAttribfv(index, pname, params);
+}
+
+void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
+{
+    return gl::GetVertexAttribiv(index, pname, params);
+}
+
+void GL_APIENTRY glHint(GLenum target, GLenum mode)
+{
+    return gl::Hint(target, mode);
+}
+
+GLboolean GL_APIENTRY glIsBuffer(GLuint buffer)
+{
+    return gl::IsBuffer(buffer);
+}
+
+GLboolean GL_APIENTRY glIsEnabled(GLenum cap)
+{
+    return gl::IsEnabled(cap);
+}
+
+GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer)
+{
+    return gl::IsFramebuffer(framebuffer);
+}
+
+GLboolean GL_APIENTRY glIsProgram(GLuint program)
+{
+    return gl::IsProgram(program);
+}
+
+GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer)
+{
+    return gl::IsRenderbuffer(renderbuffer);
+}
+
+GLboolean GL_APIENTRY glIsShader(GLuint shader)
+{
+    return gl::IsShader(shader);
+}
+
+GLboolean GL_APIENTRY glIsTexture(GLuint texture)
+{
+    return gl::IsTexture(texture);
+}
+
+void GL_APIENTRY glLineWidth(GLfloat width)
+{
+    return gl::LineWidth(width);
+}
+
+void GL_APIENTRY glLinkProgram(GLuint program)
+{
+    return gl::LinkProgram(program);
+}
+
+void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)
+{
+    return gl::PixelStorei(pname, param);
+}
+
+void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units)
+{
+    return gl::PolygonOffset(factor, units);
+}
+
+void GL_APIENTRY glReadPixels(GLint x,
+                              GLint y,
+                              GLsizei width,
+                              GLsizei height,
+                              GLenum format,
+                              GLenum type,
+                              void *pixels)
+{
+    return gl::ReadPixels(x, y, width, height, format, type, pixels);
+}
+
+void GL_APIENTRY glReleaseShaderCompiler()
+{
+    return gl::ReleaseShaderCompiler();
+}
+
+void GL_APIENTRY glRenderbufferStorage(GLenum target,
+                                       GLenum internalformat,
+                                       GLsizei width,
+                                       GLsizei height)
+{
+    return gl::RenderbufferStorage(target, internalformat, width, height);
+}
+
+void GL_APIENTRY glSampleCoverage(GLfloat value, GLboolean invert)
+{
+    return gl::SampleCoverage(value, invert);
+}
+
+void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+    return gl::Scissor(x, y, width, height);
+}
+
+void GL_APIENTRY glShaderBinary(GLsizei count,
+                                const GLuint *shaders,
+                                GLenum binaryformat,
+                                const void *binary,
+                                GLsizei length)
+{
+    return gl::ShaderBinary(count, shaders, binaryformat, binary, length);
+}
+
+void GL_APIENTRY glShaderSource(GLuint shader,
+                                GLsizei count,
+                                const GLchar *const *string,
+                                const GLint *length)
+{
+    return gl::ShaderSource(shader, count, string, length);
+}
+
+void GL_APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask)
+{
+    return gl::StencilFunc(func, ref, mask);
+}
+
+void GL_APIENTRY glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+{
+    return gl::StencilFuncSeparate(face, func, ref, mask);
+}
+
+void GL_APIENTRY glStencilMask(GLuint mask)
+{
+    return gl::StencilMask(mask);
+}
+
+void GL_APIENTRY glStencilMaskSeparate(GLenum face, GLuint mask)
+{
+    return gl::StencilMaskSeparate(face, mask);
+}
+
+void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+    return gl::StencilOp(fail, zfail, zpass);
+}
+
+void GL_APIENTRY glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
+{
+    return gl::StencilOpSeparate(face, sfail, dpfail, dppass);
+}
+
+void GL_APIENTRY glTexImage2D(GLenum target,
+                              GLint level,
+                              GLint internalformat,
+                              GLsizei width,
+                              GLsizei height,
+                              GLint border,
+                              GLenum format,
+                              GLenum type,
+                              const void *pixels)
+{
+    return gl::TexImage2D(target, level, internalformat, width, height, border, format, type,
+                          pixels);
+}
+
+void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+    return gl::TexParameterf(target, pname, param);
+}
+
+void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+{
+    return gl::TexParameterfv(target, pname, params);
+}
+
+void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)
+{
+    return gl::TexParameteri(target, pname, param);
+}
+
+void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+{
+    return gl::TexParameteriv(target, pname, params);
+}
+
+void GL_APIENTRY glTexSubImage2D(GLenum target,
+                                 GLint level,
+                                 GLint xoffset,
+                                 GLint yoffset,
+                                 GLsizei width,
+                                 GLsizei height,
+                                 GLenum format,
+                                 GLenum type,
+                                 const void *pixels)
+{
+    return gl::TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+}
+
+void GL_APIENTRY glUniform1f(GLint location, GLfloat v0)
+{
+    return gl::Uniform1f(location, v0);
+}
+
+void GL_APIENTRY glUniform1fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    return gl::Uniform1fv(location, count, value);
+}
+
+void GL_APIENTRY glUniform1i(GLint location, GLint v0)
+{
+    return gl::Uniform1i(location, v0);
+}
+
+void GL_APIENTRY glUniform1iv(GLint location, GLsizei count, const GLint *value)
+{
+    return gl::Uniform1iv(location, count, value);
+}
+
+void GL_APIENTRY glUniform2f(GLint location, GLfloat v0, GLfloat v1)
+{
+    return gl::Uniform2f(location, v0, v1);
+}
+
+void GL_APIENTRY glUniform2fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    return gl::Uniform2fv(location, count, value);
+}
+
+void GL_APIENTRY glUniform2i(GLint location, GLint v0, GLint v1)
+{
+    return gl::Uniform2i(location, v0, v1);
+}
+
+void GL_APIENTRY glUniform2iv(GLint location, GLsizei count, const GLint *value)
+{
+    return gl::Uniform2iv(location, count, value);
+}
+
+void GL_APIENTRY glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+    return gl::Uniform3f(location, v0, v1, v2);
+}
+
+void GL_APIENTRY glUniform3fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    return gl::Uniform3fv(location, count, value);
+}
+
+void GL_APIENTRY glUniform3i(GLint location, GLint v0, GLint v1, GLint v2)
+{
+    return gl::Uniform3i(location, v0, v1, v2);
+}
+
+void GL_APIENTRY glUniform3iv(GLint location, GLsizei count, const GLint *value)
+{
+    return gl::Uniform3iv(location, count, value);
+}
+
+void GL_APIENTRY glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+{
+    return gl::Uniform4f(location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glUniform4fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    return gl::Uniform4fv(location, count, value);
+}
+
+void GL_APIENTRY glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+    return gl::Uniform4i(location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glUniform4iv(GLint location, GLsizei count, const GLint *value)
+{
+    return gl::Uniform4iv(location, count, value);
+}
+
+void GL_APIENTRY glUniformMatrix2fv(GLint location,
+                                    GLsizei count,
+                                    GLboolean transpose,
+                                    const GLfloat *value)
+{
+    return gl::UniformMatrix2fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix3fv(GLint location,
+                                    GLsizei count,
+                                    GLboolean transpose,
+                                    const GLfloat *value)
+{
+    return gl::UniformMatrix3fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix4fv(GLint location,
+                                    GLsizei count,
+                                    GLboolean transpose,
+                                    const GLfloat *value)
+{
+    return gl::UniformMatrix4fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUseProgram(GLuint program)
+{
+    return gl::UseProgram(program);
+}
+
+void GL_APIENTRY glValidateProgram(GLuint program)
+{
+    return gl::ValidateProgram(program);
+}
+
+void GL_APIENTRY glVertexAttrib1f(GLuint index, GLfloat x)
+{
+    return gl::VertexAttrib1f(index, x);
+}
+
+void GL_APIENTRY glVertexAttrib1fv(GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib1fv(index, v);
+}
+
+void GL_APIENTRY glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
+{
+    return gl::VertexAttrib2f(index, x, y);
+}
+
+void GL_APIENTRY glVertexAttrib2fv(GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib2fv(index, v);
+}
+
+void GL_APIENTRY glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::VertexAttrib3f(index, x, y, z);
+}
+
+void GL_APIENTRY glVertexAttrib3fv(GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib3fv(index, v);
+}
+
+void GL_APIENTRY glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+    return gl::VertexAttrib4f(index, x, y, z, w);
+}
+
+void GL_APIENTRY glVertexAttrib4fv(GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib4fv(index, v);
+}
+
+void GL_APIENTRY glVertexAttribPointer(GLuint index,
+                                       GLint size,
+                                       GLenum type,
+                                       GLboolean normalized,
+                                       GLsizei stride,
+                                       const void *pointer)
+{
+    return gl::VertexAttribPointer(index, size, type, normalized, stride, pointer);
+}
+
+void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+    return gl::Viewport(x, y, width, height);
+}
+
+// OpenGL ES 3.0
+void GL_APIENTRY glBeginQuery(GLenum target, GLuint id)
+{
+    return gl::BeginQuery(target, id);
+}
+
+void GL_APIENTRY glBeginTransformFeedback(GLenum primitiveMode)
+{
+    return gl::BeginTransformFeedback(primitiveMode);
+}
+
+void GL_APIENTRY glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
+{
+    return gl::BindBufferBase(target, index, buffer);
+}
+
+void GL_APIENTRY
+glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+{
+    return gl::BindBufferRange(target, index, buffer, offset, size);
+}
+
+void GL_APIENTRY glBindSampler(GLuint unit, GLuint sampler)
+{
+    return gl::BindSampler(unit, sampler);
+}
+
+void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id)
+{
+    return gl::BindTransformFeedback(target, id);
+}
+
+void GL_APIENTRY glBindVertexArray(GLuint array)
+{
+    return gl::BindVertexArray(array);
+}
+
+void GL_APIENTRY glBlitFramebuffer(GLint srcX0,
+                                   GLint srcY0,
+                                   GLint srcX1,
+                                   GLint srcY1,
+                                   GLint dstX0,
+                                   GLint dstY0,
+                                   GLint dstX1,
+                                   GLint dstY1,
+                                   GLbitfield mask,
+                                   GLenum filter)
+{
+    return gl::BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
+                               filter);
+}
+
+void GL_APIENTRY glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+{
+    return gl::ClearBufferfi(buffer, drawbuffer, depth, stencil);
+}
+
+void GL_APIENTRY glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
+{
+    return gl::ClearBufferfv(buffer, drawbuffer, value);
+}
+
+void GL_APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
+{
+    return gl::ClearBufferiv(buffer, drawbuffer, value);
+}
+
+void GL_APIENTRY glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
+{
+    return gl::ClearBufferuiv(buffer, drawbuffer, value);
+}
+
+GLenum GL_APIENTRY glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+{
+    return gl::ClientWaitSync(sync, flags, timeout);
+}
+
+void GL_APIENTRY glCompressedTexImage3D(GLenum target,
+                                        GLint level,
+                                        GLenum internalformat,
+                                        GLsizei width,
+                                        GLsizei height,
+                                        GLsizei depth,
+                                        GLint border,
+                                        GLsizei imageSize,
+                                        const void *data)
+{
+    return gl::CompressedTexImage3D(target, level, internalformat, width, height, depth, border,
+                                    imageSize, data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage3D(GLenum target,
+                                           GLint level,
+                                           GLint xoffset,
+                                           GLint yoffset,
+                                           GLint zoffset,
+                                           GLsizei width,
+                                           GLsizei height,
+                                           GLsizei depth,
+                                           GLenum format,
+                                           GLsizei imageSize,
+                                           const void *data)
+{
+    return gl::CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height,
+                                       depth, format, imageSize, data);
+}
+
+void GL_APIENTRY glCopyBufferSubData(GLenum readTarget,
+                                     GLenum writeTarget,
+                                     GLintptr readOffset,
+                                     GLintptr writeOffset,
+                                     GLsizeiptr size)
+{
+    return gl::CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
+}
+
+void GL_APIENTRY glCopyTexSubImage3D(GLenum target,
+                                     GLint level,
+                                     GLint xoffset,
+                                     GLint yoffset,
+                                     GLint zoffset,
+                                     GLint x,
+                                     GLint y,
+                                     GLsizei width,
+                                     GLsizei height)
+{
+    return gl::CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
+}
+
+void GL_APIENTRY glDeleteQueries(GLsizei n, const GLuint *ids)
+{
+    return gl::DeleteQueries(n, ids);
+}
+
+void GL_APIENTRY glDeleteSamplers(GLsizei count, const GLuint *samplers)
+{
+    return gl::DeleteSamplers(count, samplers);
+}
+
+void GL_APIENTRY glDeleteSync(GLsync sync)
+{
+    return gl::DeleteSync(sync);
+}
+
+void GL_APIENTRY glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
+{
+    return gl::DeleteTransformFeedbacks(n, ids);
+}
+
+void GL_APIENTRY glDeleteVertexArrays(GLsizei n, const GLuint *arrays)
+{
+    return gl::DeleteVertexArrays(n, arrays);
+}
+
+void GL_APIENTRY glDrawArraysInstanced(GLenum mode,
+                                       GLint first,
+                                       GLsizei count,
+                                       GLsizei instancecount)
+{
+    return gl::DrawArraysInstanced(mode, first, count, instancecount);
+}
+
+void GL_APIENTRY glDrawBuffers(GLsizei n, const GLenum *bufs)
+{
+    return gl::DrawBuffers(n, bufs);
+}
+
+void GL_APIENTRY glDrawElementsInstanced(GLenum mode,
+                                         GLsizei count,
+                                         GLenum type,
+                                         const void *indices,
+                                         GLsizei instancecount)
+{
+    return gl::DrawElementsInstanced(mode, count, type, indices, instancecount);
+}
+
+void GL_APIENTRY glDrawRangeElements(GLenum mode,
+                                     GLuint start,
+                                     GLuint end,
+                                     GLsizei count,
+                                     GLenum type,
+                                     const void *indices)
+{
+    return gl::DrawRangeElements(mode, start, end, count, type, indices);
+}
+
+void GL_APIENTRY glEndQuery(GLenum target)
+{
+    return gl::EndQuery(target);
+}
+
+void GL_APIENTRY glEndTransformFeedback()
+{
+    return gl::EndTransformFeedback();
+}
+
+GLsync GL_APIENTRY glFenceSync(GLenum condition, GLbitfield flags)
+{
+    return gl::FenceSync(condition, flags);
+}
+
+void GL_APIENTRY glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+{
+    return gl::FlushMappedBufferRange(target, offset, length);
+}
+
+void GL_APIENTRY glFramebufferTextureLayer(GLenum target,
+                                           GLenum attachment,
+                                           GLuint texture,
+                                           GLint level,
+                                           GLint layer)
+{
+    return gl::FramebufferTextureLayer(target, attachment, texture, level, layer);
+}
+
+void GL_APIENTRY glGenQueries(GLsizei n, GLuint *ids)
+{
+    return gl::GenQueries(n, ids);
+}
+
+void GL_APIENTRY glGenSamplers(GLsizei count, GLuint *samplers)
+{
+    return gl::GenSamplers(count, samplers);
+}
+
+void GL_APIENTRY glGenTransformFeedbacks(GLsizei n, GLuint *ids)
+{
+    return gl::GenTransformFeedbacks(n, ids);
+}
+
+void GL_APIENTRY glGenVertexArrays(GLsizei n, GLuint *arrays)
+{
+    return gl::GenVertexArrays(n, arrays);
+}
+
+void GL_APIENTRY glGetActiveUniformBlockName(GLuint program,
+                                             GLuint uniformBlockIndex,
+                                             GLsizei bufSize,
+                                             GLsizei *length,
+                                             GLchar *uniformBlockName)
+{
+    return gl::GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length,
+                                         uniformBlockName);
+}
+
+void GL_APIENTRY glGetActiveUniformBlockiv(GLuint program,
+                                           GLuint uniformBlockIndex,
+                                           GLenum pname,
+                                           GLint *params)
+{
+    return gl::GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
+}
+
+void GL_APIENTRY glGetActiveUniformsiv(GLuint program,
+                                       GLsizei uniformCount,
+                                       const GLuint *uniformIndices,
+                                       GLenum pname,
+                                       GLint *params)
+{
+    return gl::GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
+}
+
+void GL_APIENTRY glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
+{
+    return gl::GetBufferParameteri64v(target, pname, params);
+}
+
+void GL_APIENTRY glGetBufferPointerv(GLenum target, GLenum pname, void **params)
+{
+    return gl::GetBufferPointerv(target, pname, params);
+}
+
+GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar *name)
+{
+    return gl::GetFragDataLocation(program, name);
+}
+
+void GL_APIENTRY glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
+{
+    return gl::GetInteger64i_v(target, index, data);
+}
+
+void GL_APIENTRY glGetInteger64v(GLenum pname, GLint64 *data)
+{
+    return gl::GetInteger64v(pname, data);
+}
+
+void GL_APIENTRY glGetIntegeri_v(GLenum target, GLuint index, GLint *data)
+{
+    return gl::GetIntegeri_v(target, index, data);
+}
+
+void GL_APIENTRY glGetInternalformativ(GLenum target,
+                                       GLenum internalformat,
+                                       GLenum pname,
+                                       GLsizei bufSize,
+                                       GLint *params)
+{
+    return gl::GetInternalformativ(target, internalformat, pname, bufSize, params);
+}
+
+void GL_APIENTRY glGetProgramBinary(GLuint program,
+                                    GLsizei bufSize,
+                                    GLsizei *length,
+                                    GLenum *binaryFormat,
+                                    void *binary)
+{
+    return gl::GetProgramBinary(program, bufSize, length, binaryFormat, binary);
+}
+
+void GL_APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+{
+    return gl::GetQueryObjectuiv(id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetQueryiv(target, pname, params);
+}
+
+void GL_APIENTRY glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
+{
+    return gl::GetSamplerParameterfv(sampler, pname, params);
+}
+
+void GL_APIENTRY glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
+{
+    return gl::GetSamplerParameteriv(sampler, pname, params);
+}
+
+const GLubyte *GL_APIENTRY glGetStringi(GLenum name, GLuint index)
+{
+    return gl::GetStringi(name, index);
+}
+
+void GL_APIENTRY
+glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+{
+    return gl::GetSynciv(sync, pname, bufSize, length, values);
+}
+
+void GL_APIENTRY glGetTransformFeedbackVarying(GLuint program,
+                                               GLuint index,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLsizei *size,
+                                               GLenum *type,
+                                               GLchar *name)
+{
+    return gl::GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
+}
+
+GLuint GL_APIENTRY glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
+{
+    return gl::GetUniformBlockIndex(program, uniformBlockName);
+}
+
+void GL_APIENTRY glGetUniformIndices(GLuint program,
+                                     GLsizei uniformCount,
+                                     const GLchar *const *uniformNames,
+                                     GLuint *uniformIndices)
+{
+    return gl::GetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
+}
+
+void GL_APIENTRY glGetUniformuiv(GLuint program, GLint location, GLuint *params)
+{
+    return gl::GetUniformuiv(program, location, params);
+}
+
+void GL_APIENTRY glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
+{
+    return gl::GetVertexAttribIiv(index, pname, params);
+}
+
+void GL_APIENTRY glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
+{
+    return gl::GetVertexAttribIuiv(index, pname, params);
+}
+
+void GL_APIENTRY glInvalidateFramebuffer(GLenum target,
+                                         GLsizei numAttachments,
+                                         const GLenum *attachments)
+{
+    return gl::InvalidateFramebuffer(target, numAttachments, attachments);
+}
+
+void GL_APIENTRY glInvalidateSubFramebuffer(GLenum target,
+                                            GLsizei numAttachments,
+                                            const GLenum *attachments,
+                                            GLint x,
+                                            GLint y,
+                                            GLsizei width,
+                                            GLsizei height)
+{
+    return gl::InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
+}
+
+GLboolean GL_APIENTRY glIsQuery(GLuint id)
+{
+    return gl::IsQuery(id);
+}
+
+GLboolean GL_APIENTRY glIsSampler(GLuint sampler)
+{
+    return gl::IsSampler(sampler);
+}
+
+GLboolean GL_APIENTRY glIsSync(GLsync sync)
+{
+    return gl::IsSync(sync);
+}
+
+GLboolean GL_APIENTRY glIsTransformFeedback(GLuint id)
+{
+    return gl::IsTransformFeedback(id);
+}
+
+GLboolean GL_APIENTRY glIsVertexArray(GLuint array)
+{
+    return gl::IsVertexArray(array);
+}
+
+void *GL_APIENTRY glMapBufferRange(GLenum target,
+                                   GLintptr offset,
+                                   GLsizeiptr length,
+                                   GLbitfield access)
+{
+    return gl::MapBufferRange(target, offset, length, access);
+}
+
+void GL_APIENTRY glPauseTransformFeedback()
+{
+    return gl::PauseTransformFeedback();
+}
+
+void GL_APIENTRY glProgramBinary(GLuint program,
+                                 GLenum binaryFormat,
+                                 const void *binary,
+                                 GLsizei length)
+{
+    return gl::ProgramBinary(program, binaryFormat, binary, length);
+}
+
+void GL_APIENTRY glProgramParameteri(GLuint program, GLenum pname, GLint value)
+{
+    return gl::ProgramParameteri(program, pname, value);
+}
+
+void GL_APIENTRY glReadBuffer(GLenum src)
+{
+    return gl::ReadBuffer(src);
+}
+
+void GL_APIENTRY glRenderbufferStorageMultisample(GLenum target,
+                                                  GLsizei samples,
+                                                  GLenum internalformat,
+                                                  GLsizei width,
+                                                  GLsizei height)
+{
+    return gl::RenderbufferStorageMultisample(target, samples, internalformat, width, height);
+}
+
+void GL_APIENTRY glResumeTransformFeedback()
+{
+    return gl::ResumeTransformFeedback();
+}
+
+void GL_APIENTRY glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+{
+    return gl::SamplerParameterf(sampler, pname, param);
+}
+
+void GL_APIENTRY glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
+{
+    return gl::SamplerParameterfv(sampler, pname, param);
+}
+
+void GL_APIENTRY glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
+{
+    return gl::SamplerParameteri(sampler, pname, param);
+}
+
+void GL_APIENTRY glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
+{
+    return gl::SamplerParameteriv(sampler, pname, param);
+}
+
+void GL_APIENTRY glTexImage3D(GLenum target,
+                              GLint level,
+                              GLint internalformat,
+                              GLsizei width,
+                              GLsizei height,
+                              GLsizei depth,
+                              GLint border,
+                              GLenum format,
+                              GLenum type,
+                              const void *pixels)
+{
+    return gl::TexImage3D(target, level, internalformat, width, height, depth, border, format, type,
+                          pixels);
+}
+
+void GL_APIENTRY
+glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+{
+    return gl::TexStorage2D(target, levels, internalformat, width, height);
+}
+
+void GL_APIENTRY glTexStorage3D(GLenum target,
+                                GLsizei levels,
+                                GLenum internalformat,
+                                GLsizei width,
+                                GLsizei height,
+                                GLsizei depth)
+{
+    return gl::TexStorage3D(target, levels, internalformat, width, height, depth);
+}
+
+void GL_APIENTRY glTexSubImage3D(GLenum target,
+                                 GLint level,
+                                 GLint xoffset,
+                                 GLint yoffset,
+                                 GLint zoffset,
+                                 GLsizei width,
+                                 GLsizei height,
+                                 GLsizei depth,
+                                 GLenum format,
+                                 GLenum type,
+                                 const void *pixels)
+{
+    return gl::TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format,
+                             type, pixels);
+}
+
+void GL_APIENTRY glTransformFeedbackVaryings(GLuint program,
+                                             GLsizei count,
+                                             const GLchar *const *varyings,
+                                             GLenum bufferMode)
+{
+    return gl::TransformFeedbackVaryings(program, count, varyings, bufferMode);
+}
+
+void GL_APIENTRY glUniform1ui(GLint location, GLuint v0)
+{
+    return gl::Uniform1ui(location, v0);
+}
+
+void GL_APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint *value)
+{
+    return gl::Uniform1uiv(location, count, value);
+}
+
+void GL_APIENTRY glUniform2ui(GLint location, GLuint v0, GLuint v1)
+{
+    return gl::Uniform2ui(location, v0, v1);
+}
+
+void GL_APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint *value)
+{
+    return gl::Uniform2uiv(location, count, value);
+}
+
+void GL_APIENTRY glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+    return gl::Uniform3ui(location, v0, v1, v2);
+}
+
+void GL_APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint *value)
+{
+    return gl::Uniform3uiv(location, count, value);
+}
+
+void GL_APIENTRY glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+    return gl::Uniform4ui(location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint *value)
+{
+    return gl::Uniform4uiv(location, count, value);
+}
+
+void GL_APIENTRY glUniformBlockBinding(GLuint program,
+                                       GLuint uniformBlockIndex,
+                                       GLuint uniformBlockBinding)
+{
+    return gl::UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
+}
+
+void GL_APIENTRY glUniformMatrix2x3fv(GLint location,
+                                      GLsizei count,
+                                      GLboolean transpose,
+                                      const GLfloat *value)
+{
+    return gl::UniformMatrix2x3fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix2x4fv(GLint location,
+                                      GLsizei count,
+                                      GLboolean transpose,
+                                      const GLfloat *value)
+{
+    return gl::UniformMatrix2x4fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix3x2fv(GLint location,
+                                      GLsizei count,
+                                      GLboolean transpose,
+                                      const GLfloat *value)
+{
+    return gl::UniformMatrix3x2fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix3x4fv(GLint location,
+                                      GLsizei count,
+                                      GLboolean transpose,
+                                      const GLfloat *value)
+{
+    return gl::UniformMatrix3x4fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix4x2fv(GLint location,
+                                      GLsizei count,
+                                      GLboolean transpose,
+                                      const GLfloat *value)
+{
+    return gl::UniformMatrix4x2fv(location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix4x3fv(GLint location,
+                                      GLsizei count,
+                                      GLboolean transpose,
+                                      const GLfloat *value)
+{
+    return gl::UniformMatrix4x3fv(location, count, transpose, value);
+}
+
+GLboolean GL_APIENTRY glUnmapBuffer(GLenum target)
+{
+    return gl::UnmapBuffer(target);
+}
+
+void GL_APIENTRY glVertexAttribDivisor(GLuint index, GLuint divisor)
+{
+    return gl::VertexAttribDivisor(index, divisor);
+}
+
+void GL_APIENTRY glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+    return gl::VertexAttribI4i(index, x, y, z, w);
+}
+
+void GL_APIENTRY glVertexAttribI4iv(GLuint index, const GLint *v)
+{
+    return gl::VertexAttribI4iv(index, v);
+}
+
+void GL_APIENTRY glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+    return gl::VertexAttribI4ui(index, x, y, z, w);
+}
+
+void GL_APIENTRY glVertexAttribI4uiv(GLuint index, const GLuint *v)
+{
+    return gl::VertexAttribI4uiv(index, v);
+}
+
+void GL_APIENTRY
+glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
+{
+    return gl::VertexAttribIPointer(index, size, type, stride, pointer);
+}
+
+void GL_APIENTRY glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+{
+    return gl::WaitSync(sync, flags, timeout);
+}
+
+// OpenGL ES 3.1
+void GL_APIENTRY glActiveShaderProgram(GLuint pipeline, GLuint program)
+{
+    return gl::ActiveShaderProgram(pipeline, program);
+}
+
+void GL_APIENTRY glBindImageTexture(GLuint unit,
+                                    GLuint texture,
+                                    GLint level,
+                                    GLboolean layered,
+                                    GLint layer,
+                                    GLenum access,
+                                    GLenum format)
+{
+    return gl::BindImageTexture(unit, texture, level, layered, layer, access, format);
+}
+
+void GL_APIENTRY glBindProgramPipeline(GLuint pipeline)
+{
+    return gl::BindProgramPipeline(pipeline);
+}
+
+void GL_APIENTRY glBindVertexBuffer(GLuint bindingindex,
+                                    GLuint buffer,
+                                    GLintptr offset,
+                                    GLsizei stride)
+{
+    return gl::BindVertexBuffer(bindingindex, buffer, offset, stride);
+}
+
+GLuint GL_APIENTRY glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const *strings)
+{
+    return gl::CreateShaderProgramv(type, count, strings);
+}
+
+void GL_APIENTRY glDeleteProgramPipelines(GLsizei n, const GLuint *pipelines)
+{
+    return gl::DeleteProgramPipelines(n, pipelines);
+}
+
+void GL_APIENTRY glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
+{
+    return gl::DispatchCompute(num_groups_x, num_groups_y, num_groups_z);
+}
+
+void GL_APIENTRY glDispatchComputeIndirect(GLintptr indirect)
+{
+    return gl::DispatchComputeIndirect(indirect);
+}
+
+void GL_APIENTRY glDrawArraysIndirect(GLenum mode, const void *indirect)
+{
+    return gl::DrawArraysIndirect(mode, indirect);
+}
+
+void GL_APIENTRY glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect)
+{
+    return gl::DrawElementsIndirect(mode, type, indirect);
+}
+
+void GL_APIENTRY glFramebufferParameteri(GLenum target, GLenum pname, GLint param)
+{
+    return gl::FramebufferParameteri(target, pname, param);
+}
+
+void GL_APIENTRY glGenProgramPipelines(GLsizei n, GLuint *pipelines)
+{
+    return gl::GenProgramPipelines(n, pipelines);
+}
+
+void GL_APIENTRY glGetBooleani_v(GLenum target, GLuint index, GLboolean *data)
+{
+    return gl::GetBooleani_v(target, index, data);
+}
+
+void GL_APIENTRY glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetFramebufferParameteriv(target, pname, params);
+}
+
+void GL_APIENTRY glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
+{
+    return gl::GetMultisamplefv(pname, index, val);
+}
+
+void GL_APIENTRY glGetProgramInterfaceiv(GLuint program,
+                                         GLenum programInterface,
+                                         GLenum pname,
+                                         GLint *params)
+{
+    return gl::GetProgramInterfaceiv(program, programInterface, pname, params);
+}
+
+void GL_APIENTRY glGetProgramPipelineInfoLog(GLuint pipeline,
+                                             GLsizei bufSize,
+                                             GLsizei *length,
+                                             GLchar *infoLog)
+{
+    return gl::GetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
+}
+
+void GL_APIENTRY glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
+{
+    return gl::GetProgramPipelineiv(pipeline, pname, params);
+}
+
+GLuint GL_APIENTRY glGetProgramResourceIndex(GLuint program,
+                                             GLenum programInterface,
+                                             const GLchar *name)
+{
+    return gl::GetProgramResourceIndex(program, programInterface, name);
+}
+
+GLint GL_APIENTRY glGetProgramResourceLocation(GLuint program,
+                                               GLenum programInterface,
+                                               const GLchar *name)
+{
+    return gl::GetProgramResourceLocation(program, programInterface, name);
+}
+
+void GL_APIENTRY glGetProgramResourceName(GLuint program,
+                                          GLenum programInterface,
+                                          GLuint index,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLchar *name)
+{
+    return gl::GetProgramResourceName(program, programInterface, index, bufSize, length, name);
+}
+
+void GL_APIENTRY glGetProgramResourceiv(GLuint program,
+                                        GLenum programInterface,
+                                        GLuint index,
+                                        GLsizei propCount,
+                                        const GLenum *props,
+                                        GLsizei bufSize,
+                                        GLsizei *length,
+                                        GLint *params)
+{
+    return gl::GetProgramResourceiv(program, programInterface, index, propCount, props, bufSize,
+                                    length, params);
+}
+
+void GL_APIENTRY glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+{
+    return gl::GetTexLevelParameterfv(target, level, pname, params);
+}
+
+void GL_APIENTRY glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+{
+    return gl::GetTexLevelParameteriv(target, level, pname, params);
+}
+
+GLboolean GL_APIENTRY glIsProgramPipeline(GLuint pipeline)
+{
+    return gl::IsProgramPipeline(pipeline);
+}
+
+void GL_APIENTRY glMemoryBarrier(GLbitfield barriers)
+{
+    return gl::MemoryBarrier(barriers);
+}
+
+void GL_APIENTRY glMemoryBarrierByRegion(GLbitfield barriers)
+{
+    return gl::MemoryBarrierByRegion(barriers);
+}
+
+void GL_APIENTRY glProgramUniform1f(GLuint program, GLint location, GLfloat v0)
+{
+    return gl::ProgramUniform1f(program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform1fv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLfloat *value)
+{
+    return gl::ProgramUniform1fv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform1i(GLuint program, GLint location, GLint v0)
+{
+    return gl::ProgramUniform1i(program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform1iv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLint *value)
+{
+    return gl::ProgramUniform1iv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform1ui(GLuint program, GLint location, GLuint v0)
+{
+    return gl::ProgramUniform1ui(program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform1uiv(GLuint program,
+                                      GLint location,
+                                      GLsizei count,
+                                      const GLuint *value)
+{
+    return gl::ProgramUniform1uiv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
+{
+    return gl::ProgramUniform2f(program, location, v0, v1);
+}
+
+void GL_APIENTRY glProgramUniform2fv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLfloat *value)
+{
+    return gl::ProgramUniform2fv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
+{
+    return gl::ProgramUniform2i(program, location, v0, v1);
+}
+
+void GL_APIENTRY glProgramUniform2iv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLint *value)
+{
+    return gl::ProgramUniform2iv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
+{
+    return gl::ProgramUniform2ui(program, location, v0, v1);
+}
+
+void GL_APIENTRY glProgramUniform2uiv(GLuint program,
+                                      GLint location,
+                                      GLsizei count,
+                                      const GLuint *value)
+{
+    return gl::ProgramUniform2uiv(program, location, count, value);
+}
+
+void GL_APIENTRY
+glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+    return gl::ProgramUniform3f(program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glProgramUniform3fv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLfloat *value)
+{
+    return gl::ProgramUniform3fv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
+{
+    return gl::ProgramUniform3i(program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glProgramUniform3iv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLint *value)
+{
+    return gl::ProgramUniform3iv(program, location, count, value);
+}
+
+void GL_APIENTRY
+glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+    return gl::ProgramUniform3ui(program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glProgramUniform3uiv(GLuint program,
+                                      GLint location,
+                                      GLsizei count,
+                                      const GLuint *value)
+{
+    return gl::ProgramUniform3uiv(program, location, count, value);
+}
+
+void GL_APIENTRY
+glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+{
+    return gl::ProgramUniform4f(program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform4fv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLfloat *value)
+{
+    return gl::ProgramUniform4fv(program, location, count, value);
+}
+
+void GL_APIENTRY
+glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+    return gl::ProgramUniform4i(program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform4iv(GLuint program,
+                                     GLint location,
+                                     GLsizei count,
+                                     const GLint *value)
+{
+    return gl::ProgramUniform4iv(program, location, count, value);
+}
+
+void GL_APIENTRY
+glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+    return gl::ProgramUniform4ui(program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform4uiv(GLuint program,
+                                      GLint location,
+                                      GLsizei count,
+                                      const GLuint *value)
+{
+    return gl::ProgramUniform4uiv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2fv(GLuint program,
+                                           GLint location,
+                                           GLsizei count,
+                                           GLboolean transpose,
+                                           const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix2fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2x3fv(GLuint program,
+                                             GLint location,
+                                             GLsizei count,
+                                             GLboolean transpose,
+                                             const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix2x3fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2x4fv(GLuint program,
+                                             GLint location,
+                                             GLsizei count,
+                                             GLboolean transpose,
+                                             const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix2x4fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3fv(GLuint program,
+                                           GLint location,
+                                           GLsizei count,
+                                           GLboolean transpose,
+                                           const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix3fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3x2fv(GLuint program,
+                                             GLint location,
+                                             GLsizei count,
+                                             GLboolean transpose,
+                                             const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix3x2fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3x4fv(GLuint program,
+                                             GLint location,
+                                             GLsizei count,
+                                             GLboolean transpose,
+                                             const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix3x4fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4fv(GLuint program,
+                                           GLint location,
+                                           GLsizei count,
+                                           GLboolean transpose,
+                                           const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix4fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4x2fv(GLuint program,
+                                             GLint location,
+                                             GLsizei count,
+                                             GLboolean transpose,
+                                             const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix4x2fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4x3fv(GLuint program,
+                                             GLint location,
+                                             GLsizei count,
+                                             GLboolean transpose,
+                                             const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix4x3fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glSampleMaski(GLuint maskNumber, GLbitfield mask)
+{
+    return gl::SampleMaski(maskNumber, mask);
+}
+
+void GL_APIENTRY glTexStorage2DMultisample(GLenum target,
+                                           GLsizei samples,
+                                           GLenum internalformat,
+                                           GLsizei width,
+                                           GLsizei height,
+                                           GLboolean fixedsamplelocations)
+{
+    return gl::TexStorage2DMultisample(target, samples, internalformat, width, height,
+                                       fixedsamplelocations);
+}
+
+void GL_APIENTRY glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
+{
+    return gl::UseProgramStages(pipeline, stages, program);
+}
+
+void GL_APIENTRY glValidateProgramPipeline(GLuint pipeline)
+{
+    return gl::ValidateProgramPipeline(pipeline);
+}
+
+void GL_APIENTRY glVertexAttribBinding(GLuint attribindex, GLuint bindingindex)
+{
+    return gl::VertexAttribBinding(attribindex, bindingindex);
+}
+
+void GL_APIENTRY glVertexAttribFormat(GLuint attribindex,
+                                      GLint size,
+                                      GLenum type,
+                                      GLboolean normalized,
+                                      GLuint relativeoffset)
+{
+    return gl::VertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
+}
+
+void GL_APIENTRY glVertexAttribIFormat(GLuint attribindex,
+                                       GLint size,
+                                       GLenum type,
+                                       GLuint relativeoffset)
+{
+    return gl::VertexAttribIFormat(attribindex, size, type, relativeoffset);
+}
+
+void GL_APIENTRY glVertexBindingDivisor(GLuint bindingindex, GLuint divisor)
+{
+    return gl::VertexBindingDivisor(bindingindex, divisor);
+}
+
+// OpenGL ES 1.0
+void GL_APIENTRY glAlphaFunc(GLenum func, GLfloat ref)
+{
+    return gl::AlphaFunc(func, ref);
+}
+
+void GL_APIENTRY glAlphaFuncx(GLenum func, GLfixed ref)
+{
+    return gl::AlphaFuncx(func, ref);
+}
+
+void GL_APIENTRY glClearColorx(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+    return gl::ClearColorx(red, green, blue, alpha);
+}
+
+void GL_APIENTRY glClearDepthx(GLfixed depth)
+{
+    return gl::ClearDepthx(depth);
+}
+
+void GL_APIENTRY glClientActiveTexture(GLenum texture)
+{
+    return gl::ClientActiveTexture(texture);
+}
+
+void GL_APIENTRY glClipPlanef(GLenum p, const GLfloat *eqn)
+{
+    return gl::ClipPlanef(p, eqn);
+}
+
+void GL_APIENTRY glClipPlanex(GLenum plane, const GLfixed *equation)
+{
+    return gl::ClipPlanex(plane, equation);
+}
+
+void GL_APIENTRY glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    return gl::Color4f(red, green, blue, alpha);
+}
+
+void GL_APIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+{
+    return gl::Color4ub(red, green, blue, alpha);
+}
+
+void GL_APIENTRY glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+    return gl::Color4x(red, green, blue, alpha);
+}
+
+void GL_APIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+{
+    return gl::ColorPointer(size, type, stride, pointer);
+}
+
+void GL_APIENTRY glDepthRangex(GLfixed n, GLfixed f)
+{
+    return gl::DepthRangex(n, f);
+}
+
+void GL_APIENTRY glDisableClientState(GLenum array)
+{
+    return gl::DisableClientState(array);
+}
+
+void GL_APIENTRY glEnableClientState(GLenum array)
+{
+    return gl::EnableClientState(array);
+}
+
+void GL_APIENTRY glFogf(GLenum pname, GLfloat param)
+{
+    return gl::Fogf(pname, param);
+}
+
+void GL_APIENTRY glFogfv(GLenum pname, const GLfloat *params)
+{
+    return gl::Fogfv(pname, params);
+}
+
+void GL_APIENTRY glFogx(GLenum pname, GLfixed param)
+{
+    return gl::Fogx(pname, param);
+}
+
+void GL_APIENTRY glFogxv(GLenum pname, const GLfixed *param)
+{
+    return gl::Fogxv(pname, param);
+}
+
+void GL_APIENTRY glFrustumf(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f)
+{
+    return gl::Frustumf(l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glFrustumx(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f)
+{
+    return gl::Frustumx(l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glGetClipPlanef(GLenum plane, GLfloat *equation)
+{
+    return gl::GetClipPlanef(plane, equation);
+}
+
+void GL_APIENTRY glGetClipPlanex(GLenum plane, GLfixed *equation)
+{
+    return gl::GetClipPlanex(plane, equation);
+}
+
+void GL_APIENTRY glGetFixedv(GLenum pname, GLfixed *params)
+{
+    return gl::GetFixedv(pname, params);
+}
+
+void GL_APIENTRY glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+{
+    return gl::GetLightfv(light, pname, params);
+}
+
+void GL_APIENTRY glGetLightxv(GLenum light, GLenum pname, GLfixed *params)
+{
+    return gl::GetLightxv(light, pname, params);
+}
+
+void GL_APIENTRY glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+{
+    return gl::GetMaterialfv(face, pname, params);
+}
+
+void GL_APIENTRY glGetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
+{
+    return gl::GetMaterialxv(face, pname, params);
+}
+
+void GL_APIENTRY glGetPointerv(GLenum pname, void **params)
+{
+    return gl::GetPointerv(pname, params);
+}
+
+void GL_APIENTRY glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+{
+    return gl::GetTexEnvfv(target, pname, params);
+}
+
+void GL_APIENTRY glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetTexEnviv(target, pname, params);
+}
+
+void GL_APIENTRY glGetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
+{
+    return gl::GetTexEnvxv(target, pname, params);
+}
+
+void GL_APIENTRY glGetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
+{
+    return gl::GetTexParameterxv(target, pname, params);
+}
+
+void GL_APIENTRY glLightModelf(GLenum pname, GLfloat param)
+{
+    return gl::LightModelf(pname, param);
+}
+
+void GL_APIENTRY glLightModelfv(GLenum pname, const GLfloat *params)
+{
+    return gl::LightModelfv(pname, params);
+}
+
+void GL_APIENTRY glLightModelx(GLenum pname, GLfixed param)
+{
+    return gl::LightModelx(pname, param);
+}
+
+void GL_APIENTRY glLightModelxv(GLenum pname, const GLfixed *param)
+{
+    return gl::LightModelxv(pname, param);
+}
+
+void GL_APIENTRY glLightf(GLenum light, GLenum pname, GLfloat param)
+{
+    return gl::Lightf(light, pname, param);
+}
+
+void GL_APIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+{
+    return gl::Lightfv(light, pname, params);
+}
+
+void GL_APIENTRY glLightx(GLenum light, GLenum pname, GLfixed param)
+{
+    return gl::Lightx(light, pname, param);
+}
+
+void GL_APIENTRY glLightxv(GLenum light, GLenum pname, const GLfixed *params)
+{
+    return gl::Lightxv(light, pname, params);
+}
+
+void GL_APIENTRY glLineWidthx(GLfixed width)
+{
+    return gl::LineWidthx(width);
+}
+
+void GL_APIENTRY glLoadIdentity()
+{
+    return gl::LoadIdentity();
+}
+
+void GL_APIENTRY glLoadMatrixf(const GLfloat *m)
+{
+    return gl::LoadMatrixf(m);
+}
+
+void GL_APIENTRY glLoadMatrixx(const GLfixed *m)
+{
+    return gl::LoadMatrixx(m);
+}
+
+void GL_APIENTRY glLogicOp(GLenum opcode)
+{
+    return gl::LogicOp(opcode);
+}
+
+void GL_APIENTRY glMaterialf(GLenum face, GLenum pname, GLfloat param)
+{
+    return gl::Materialf(face, pname, param);
+}
+
+void GL_APIENTRY glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+{
+    return gl::Materialfv(face, pname, params);
+}
+
+void GL_APIENTRY glMaterialx(GLenum face, GLenum pname, GLfixed param)
+{
+    return gl::Materialx(face, pname, param);
+}
+
+void GL_APIENTRY glMaterialxv(GLenum face, GLenum pname, const GLfixed *param)
+{
+    return gl::Materialxv(face, pname, param);
+}
+
+void GL_APIENTRY glMatrixMode(GLenum mode)
+{
+    return gl::MatrixMode(mode);
+}
+
+void GL_APIENTRY glMultMatrixf(const GLfloat *m)
+{
+    return gl::MultMatrixf(m);
+}
+
+void GL_APIENTRY glMultMatrixx(const GLfixed *m)
+{
+    return gl::MultMatrixx(m);
+}
+
+void GL_APIENTRY glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+{
+    return gl::MultiTexCoord4f(target, s, t, r, q);
+}
+
+void GL_APIENTRY glMultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+{
+    return gl::MultiTexCoord4x(texture, s, t, r, q);
+}
+
+void GL_APIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+{
+    return gl::Normal3f(nx, ny, nz);
+}
+
+void GL_APIENTRY glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz)
+{
+    return gl::Normal3x(nx, ny, nz);
+}
+
+void GL_APIENTRY glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+{
+    return gl::NormalPointer(type, stride, pointer);
+}
+
+void GL_APIENTRY glOrthof(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f)
+{
+    return gl::Orthof(l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glOrthox(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f)
+{
+    return gl::Orthox(l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glPointParameterf(GLenum pname, GLfloat param)
+{
+    return gl::PointParameterf(pname, param);
+}
+
+void GL_APIENTRY glPointParameterfv(GLenum pname, const GLfloat *params)
+{
+    return gl::PointParameterfv(pname, params);
+}
+
+void GL_APIENTRY glPointParameterx(GLenum pname, GLfixed param)
+{
+    return gl::PointParameterx(pname, param);
+}
+
+void GL_APIENTRY glPointParameterxv(GLenum pname, const GLfixed *params)
+{
+    return gl::PointParameterxv(pname, params);
+}
+
+void GL_APIENTRY glPointSize(GLfloat size)
+{
+    return gl::PointSize(size);
+}
+
+void GL_APIENTRY glPointSizex(GLfixed size)
+{
+    return gl::PointSizex(size);
+}
+
+void GL_APIENTRY glPolygonOffsetx(GLfixed factor, GLfixed units)
+{
+    return gl::PolygonOffsetx(factor, units);
+}
+
+void GL_APIENTRY glPopMatrix()
+{
+    return gl::PopMatrix();
+}
+
+void GL_APIENTRY glPushMatrix()
+{
+    return gl::PushMatrix();
+}
+
+void GL_APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::Rotatef(angle, x, y, z);
+}
+
+void GL_APIENTRY glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+{
+    return gl::Rotatex(angle, x, y, z);
+}
+
+void GL_APIENTRY glSampleCoveragex(GLclampx value, GLboolean invert)
+{
+    return gl::SampleCoveragex(value, invert);
+}
+
+void GL_APIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::Scalef(x, y, z);
+}
+
+void GL_APIENTRY glScalex(GLfixed x, GLfixed y, GLfixed z)
+{
+    return gl::Scalex(x, y, z);
+}
+
+void GL_APIENTRY glShadeModel(GLenum mode)
+{
+    return gl::ShadeModel(mode);
+}
+
+void GL_APIENTRY glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+{
+    return gl::TexCoordPointer(size, type, stride, pointer);
+}
+
+void GL_APIENTRY glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+{
+    return gl::TexEnvf(target, pname, param);
+}
+
+void GL_APIENTRY glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+{
+    return gl::TexEnvfv(target, pname, params);
+}
+
+void GL_APIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param)
+{
+    return gl::TexEnvi(target, pname, param);
+}
+
+void GL_APIENTRY glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+{
+    return gl::TexEnviv(target, pname, params);
+}
+
+void GL_APIENTRY glTexEnvx(GLenum target, GLenum pname, GLfixed param)
+{
+    return gl::TexEnvx(target, pname, param);
+}
+
+void GL_APIENTRY glTexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
+{
+    return gl::TexEnvxv(target, pname, params);
+}
+
+void GL_APIENTRY glTexParameterx(GLenum target, GLenum pname, GLfixed param)
+{
+    return gl::TexParameterx(target, pname, param);
+}
+
+void GL_APIENTRY glTexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
+{
+    return gl::TexParameterxv(target, pname, params);
+}
+
+void GL_APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::Translatef(x, y, z);
+}
+
+void GL_APIENTRY glTranslatex(GLfixed x, GLfixed y, GLfixed z)
+{
+    return gl::Translatex(x, y, z);
+}
+
+void GL_APIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+{
+    return gl::VertexPointer(size, type, stride, pointer);
+}
+
+// GL_ANGLE_framebuffer_blit
+void GL_APIENTRY glBlitFramebufferANGLE(GLint srcX0,
+                                        GLint srcY0,
+                                        GLint srcX1,
+                                        GLint srcY1,
+                                        GLint dstX0,
+                                        GLint dstY0,
+                                        GLint dstX1,
+                                        GLint dstY1,
+                                        GLbitfield mask,
+                                        GLenum filter)
+{
+    return gl::BlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
+                                    filter);
+}
+
+// GL_ANGLE_framebuffer_multisample
+void GL_APIENTRY glRenderbufferStorageMultisampleANGLE(GLenum target,
+                                                       GLsizei samples,
+                                                       GLenum internalformat,
+                                                       GLsizei width,
+                                                       GLsizei height)
+{
+    return gl::RenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
+}
+
+// GL_ANGLE_instanced_arrays
+void GL_APIENTRY glDrawArraysInstancedANGLE(GLenum mode,
+                                            GLint first,
+                                            GLsizei count,
+                                            GLsizei primcount)
+{
+    return gl::DrawArraysInstancedANGLE(mode, first, count, primcount);
+}
+
+void GL_APIENTRY glDrawElementsInstancedANGLE(GLenum mode,
+                                              GLsizei count,
+                                              GLenum type,
+                                              const void *indices,
+                                              GLsizei primcount)
+{
+    return gl::DrawElementsInstancedANGLE(mode, count, type, indices, primcount);
+}
+
+void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor)
+{
+    return gl::VertexAttribDivisorANGLE(index, divisor);
+}
+
+// GL_ANGLE_multiview
+void GL_APIENTRY glFramebufferTextureMultiviewLayeredANGLE(GLenum target,
+                                                           GLenum attachment,
+                                                           GLuint texture,
+                                                           GLint level,
+                                                           GLint baseViewIndex,
+                                                           GLsizei numViews)
+{
+    return gl::FramebufferTextureMultiviewLayeredANGLE(target, attachment, texture, level,
+                                                       baseViewIndex, numViews);
+}
+
+void GL_APIENTRY glFramebufferTextureMultiviewSideBySideANGLE(GLenum target,
+                                                              GLenum attachment,
+                                                              GLuint texture,
+                                                              GLint level,
+                                                              GLsizei numViews,
+                                                              const GLint *viewportOffsets)
+{
+    return gl::FramebufferTextureMultiviewSideBySideANGLE(target, attachment, texture, level,
+                                                          numViews, viewportOffsets);
+}
+
+// GL_ANGLE_request_extension
+void GL_APIENTRY glRequestExtensionANGLE(const GLchar *name)
+{
+    return gl::RequestExtensionANGLE(name);
+}
+
+// GL_ANGLE_robust_client_memory
+void GL_APIENTRY glGetBooleanvRobustANGLE(GLenum pname,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLboolean *params)
+{
+    return gl::GetBooleanvRobustANGLE(pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetBufferParameterivRobustANGLE(GLenum target,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLint *params)
+{
+    return gl::GetBufferParameterivRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetFloatvRobustANGLE(GLenum pname,
+                                        GLsizei bufSize,
+                                        GLsizei *length,
+                                        GLfloat *params)
+{
+    return gl::GetFloatvRobustANGLE(pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
+                                                                  GLenum attachment,
+                                                                  GLenum pname,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  GLint *params)
+{
+    return gl::GetFramebufferAttachmentParameterivRobustANGLE(target, attachment, pname, bufSize,
+                                                              length, params);
+}
+
+void GL_APIENTRY glGetIntegervRobustANGLE(GLenum pname,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLint *data)
+{
+    return gl::GetIntegervRobustANGLE(pname, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetProgramivRobustANGLE(GLuint program,
+                                           GLenum pname,
+                                           GLsizei bufSize,
+                                           GLsizei *length,
+                                           GLint *params)
+{
+    return gl::GetProgramivRobustANGLE(program, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetRenderbufferParameterivRobustANGLE(GLenum target,
+                                                         GLenum pname,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLint *params)
+{
+    return gl::GetRenderbufferParameterivRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetShaderivRobustANGLE(GLuint shader,
+                                          GLenum pname,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLint *params)
+{
+    return gl::GetShaderivRobustANGLE(shader, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetTexParameterfvRobustANGLE(GLenum target,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLfloat *params)
+{
+    return gl::GetTexParameterfvRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetTexParameterivRobustANGLE(GLenum target,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLint *params)
+{
+    return gl::GetTexParameterivRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetUniformfvRobustANGLE(GLuint program,
+                                           GLint location,
+                                           GLsizei bufSize,
+                                           GLsizei *length,
+                                           GLfloat *params)
+{
+    return gl::GetUniformfvRobustANGLE(program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetUniformivRobustANGLE(GLuint program,
+                                           GLint location,
+                                           GLsizei bufSize,
+                                           GLsizei *length,
+                                           GLint *params)
+{
+    return gl::GetUniformivRobustANGLE(program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribfvRobustANGLE(GLuint index,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLfloat *params)
+{
+    return gl::GetVertexAttribfvRobustANGLE(index, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribivRobustANGLE(GLuint index,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLint *params)
+{
+    return gl::GetVertexAttribivRobustANGLE(index, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribPointervRobustANGLE(GLuint index,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      void **pointer)
+{
+    return gl::GetVertexAttribPointervRobustANGLE(index, pname, bufSize, length, pointer);
+}
+
+void GL_APIENTRY glReadPixelsRobustANGLE(GLint x,
+                                         GLint y,
+                                         GLsizei width,
+                                         GLsizei height,
+                                         GLenum format,
+                                         GLenum type,
+                                         GLsizei bufSize,
+                                         GLsizei *length,
+                                         GLsizei *columns,
+                                         GLsizei *rows,
+                                         void *pixels)
+{
+    return gl::ReadPixelsRobustANGLE(x, y, width, height, format, type, bufSize, length, columns,
+                                     rows, pixels);
+}
+
+void GL_APIENTRY glTexImage2DRobustANGLE(GLenum target,
+                                         GLint level,
+                                         GLint internalformat,
+                                         GLsizei width,
+                                         GLsizei height,
+                                         GLint border,
+                                         GLenum format,
+                                         GLenum type,
+                                         GLsizei bufSize,
+                                         const void *pixels)
+{
+    return gl::TexImage2DRobustANGLE(target, level, internalformat, width, height, border, format,
+                                     type, bufSize, pixels);
+}
+
+void GL_APIENTRY glTexParameterfvRobustANGLE(GLenum target,
+                                             GLenum pname,
+                                             GLsizei bufSize,
+                                             const GLfloat *params)
+{
+    return gl::TexParameterfvRobustANGLE(target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glTexParameterivRobustANGLE(GLenum target,
+                                             GLenum pname,
+                                             GLsizei bufSize,
+                                             const GLint *params)
+{
+    return gl::TexParameterivRobustANGLE(target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glTexSubImage2DRobustANGLE(GLenum target,
+                                            GLint level,
+                                            GLint xoffset,
+                                            GLint yoffset,
+                                            GLsizei width,
+                                            GLsizei height,
+                                            GLenum format,
+                                            GLenum type,
+                                            GLsizei bufSize,
+                                            const void *pixels)
+{
+    return gl::TexSubImage2DRobustANGLE(target, level, xoffset, yoffset, width, height, format,
+                                        type, bufSize, pixels);
+}
+
+void GL_APIENTRY glTexImage3DRobustANGLE(GLenum target,
+                                         GLint level,
+                                         GLint internalformat,
+                                         GLsizei width,
+                                         GLsizei height,
+                                         GLsizei depth,
+                                         GLint border,
+                                         GLenum format,
+                                         GLenum type,
+                                         GLsizei bufSize,
+                                         const void *pixels)
+{
+    return gl::TexImage3DRobustANGLE(target, level, internalformat, width, height, depth, border,
+                                     format, type, bufSize, pixels);
+}
+
+void GL_APIENTRY glTexSubImage3DRobustANGLE(GLenum target,
+                                            GLint level,
+                                            GLint xoffset,
+                                            GLint yoffset,
+                                            GLint zoffset,
+                                            GLsizei width,
+                                            GLsizei height,
+                                            GLsizei depth,
+                                            GLenum format,
+                                            GLenum type,
+                                            GLsizei bufSize,
+                                            const void *pixels)
+{
+    return gl::TexSubImage3DRobustANGLE(target, level, xoffset, yoffset, zoffset, width, height,
+                                        depth, format, type, bufSize, pixels);
+}
+
+void GL_APIENTRY glCompressedTexImage2DRobustANGLE(GLenum target,
+                                                   GLint level,
+                                                   GLenum internalformat,
+                                                   GLsizei width,
+                                                   GLsizei height,
+                                                   GLint border,
+                                                   GLsizei imageSize,
+                                                   GLsizei dataSize,
+                                                   const GLvoid *data)
+{
+    return gl::CompressedTexImage2DRobustANGLE(target, level, internalformat, width, height, border,
+                                               imageSize, dataSize, data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage2DRobustANGLE(GLenum target,
+                                                      GLint level,
+                                                      GLsizei xoffset,
+                                                      GLsizei yoffset,
+                                                      GLsizei width,
+                                                      GLsizei height,
+                                                      GLenum format,
+                                                      GLsizei imageSize,
+                                                      GLsizei dataSize,
+                                                      const GLvoid *data)
+{
+    return gl::CompressedTexSubImage2DRobustANGLE(target, level, xoffset, yoffset, width, height,
+                                                  format, imageSize, dataSize, data);
+}
+
+void GL_APIENTRY glCompressedTexImage3DRobustANGLE(GLenum target,
+                                                   GLint level,
+                                                   GLenum internalformat,
+                                                   GLsizei width,
+                                                   GLsizei height,
+                                                   GLsizei depth,
+                                                   GLint border,
+                                                   GLsizei imageSize,
+                                                   GLsizei dataSize,
+                                                   const GLvoid *data)
+{
+    return gl::CompressedTexImage3DRobustANGLE(target, level, internalformat, width, height, depth,
+                                               border, imageSize, dataSize, data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage3DRobustANGLE(GLenum target,
+                                                      GLint level,
+                                                      GLint xoffset,
+                                                      GLint yoffset,
+                                                      GLint zoffset,
+                                                      GLsizei width,
+                                                      GLsizei height,
+                                                      GLsizei depth,
+                                                      GLenum format,
+                                                      GLsizei imageSize,
+                                                      GLsizei dataSize,
+                                                      const GLvoid *data)
+{
+    return gl::CompressedTexSubImage3DRobustANGLE(target, level, xoffset, yoffset, zoffset, width,
+                                                  height, depth, format, imageSize, dataSize, data);
+}
+
+void GL_APIENTRY glGetQueryivRobustANGLE(GLenum target,
+                                         GLenum pname,
+                                         GLsizei bufSize,
+                                         GLsizei *length,
+                                         GLint *params)
+{
+    return gl::GetQueryivRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetQueryObjectuivRobustANGLE(GLuint id,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLuint *params)
+{
+    return gl::GetQueryObjectuivRobustANGLE(id, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetBufferPointervRobustANGLE(GLenum target,
+                                                GLenum pname,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                void **params)
+{
+    return gl::GetBufferPointervRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetIntegeri_vRobustANGLE(GLenum target,
+                                            GLuint index,
+                                            GLsizei bufSize,
+                                            GLsizei *length,
+                                            GLint *data)
+{
+    return gl::GetIntegeri_vRobustANGLE(target, index, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetInternalformativRobustANGLE(GLenum target,
+                                                  GLenum internalformat,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLint *params)
+{
+    return gl::GetInternalformativRobustANGLE(target, internalformat, pname, bufSize, length,
+                                              params);
+}
+
+void GL_APIENTRY glGetVertexAttribIivRobustANGLE(GLuint index,
+                                                 GLenum pname,
+                                                 GLsizei bufSize,
+                                                 GLsizei *length,
+                                                 GLint *params)
+{
+    return gl::GetVertexAttribIivRobustANGLE(index, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribIuivRobustANGLE(GLuint index,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLuint *params)
+{
+    return gl::GetVertexAttribIuivRobustANGLE(index, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetUniformuivRobustANGLE(GLuint program,
+                                            GLint location,
+                                            GLsizei bufSize,
+                                            GLsizei *length,
+                                            GLuint *params)
+{
+    return gl::GetUniformuivRobustANGLE(program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetActiveUniformBlockivRobustANGLE(GLuint program,
+                                                      GLuint uniformBlockIndex,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *params)
+{
+    return gl::GetActiveUniformBlockivRobustANGLE(program, uniformBlockIndex, pname, bufSize,
+                                                  length, params);
+}
+
+void GL_APIENTRY glGetInteger64vRobustANGLE(GLenum pname,
+                                            GLsizei bufSize,
+                                            GLsizei *length,
+                                            GLint64 *data)
+{
+    return gl::GetInteger64vRobustANGLE(pname, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetInteger64i_vRobustANGLE(GLenum target,
+                                              GLuint index,
+                                              GLsizei bufSize,
+                                              GLsizei *length,
+                                              GLint64 *data)
+{
+    return gl::GetInteger64i_vRobustANGLE(target, index, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetBufferParameteri64vRobustANGLE(GLenum target,
+                                                     GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint64 *params)
+{
+    return gl::GetBufferParameteri64vRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glSamplerParameterivRobustANGLE(GLuint sampler,
+                                                 GLuint pname,
+                                                 GLsizei bufSize,
+                                                 const GLint *param)
+{
+    return gl::SamplerParameterivRobustANGLE(sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glSamplerParameterfvRobustANGLE(GLuint sampler,
+                                                 GLenum pname,
+                                                 GLsizei bufSize,
+                                                 const GLfloat *param)
+{
+    return gl::SamplerParameterfvRobustANGLE(sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glGetSamplerParameterivRobustANGLE(GLuint sampler,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLint *params)
+{
+    return gl::GetSamplerParameterivRobustANGLE(sampler, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetSamplerParameterfvRobustANGLE(GLuint sampler,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLfloat *params)
+{
+    return gl::GetSamplerParameterfvRobustANGLE(sampler, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetFramebufferParameterivRobustANGLE(GLuint sampler,
+                                                        GLenum pname,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLint *params)
+{
+    return gl::GetFramebufferParameterivRobustANGLE(sampler, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetProgramInterfaceivRobustANGLE(GLuint program,
+                                                    GLenum programInterface,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLint *params)
+{
+    return gl::GetProgramInterfaceivRobustANGLE(program, programInterface, pname, bufSize, length,
+                                                params);
+}
+
+void GL_APIENTRY glGetBooleani_vRobustANGLE(GLenum target,
+                                            GLuint index,
+                                            GLsizei bufSize,
+                                            GLsizei *length,
+                                            GLboolean *data)
+{
+    return gl::GetBooleani_vRobustANGLE(target, index, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetMultisamplefvRobustANGLE(GLenum pname,
+                                               GLuint index,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLfloat *val)
+{
+    return gl::GetMultisamplefvRobustANGLE(pname, index, bufSize, length, val);
+}
+
+void GL_APIENTRY glGetTexLevelParameterivRobustANGLE(GLenum target,
+                                                     GLint level,
+                                                     GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint *params)
+{
+    return gl::GetTexLevelParameterivRobustANGLE(target, level, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetTexLevelParameterfvRobustANGLE(GLenum target,
+                                                     GLint level,
+                                                     GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLfloat *params)
+{
+    return gl::GetTexLevelParameterfvRobustANGLE(target, level, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetPointervRobustANGLERobustANGLE(GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     void **params)
+{
+    return gl::GetPointervRobustANGLERobustANGLE(pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glReadnPixelsRobustANGLE(GLint x,
+                                          GLint y,
+                                          GLsizei width,
+                                          GLsizei height,
+                                          GLenum format,
+                                          GLenum type,
+                                          GLsizei bufSize,
+                                          GLsizei *length,
+                                          GLsizei *columns,
+                                          GLsizei *rows,
+                                          void *data)
+{
+    return gl::ReadnPixelsRobustANGLE(x, y, width, height, format, type, bufSize, length, columns,
+                                      rows, data);
+}
+
+void GL_APIENTRY glGetnUniformfvRobustANGLE(GLuint program,
+                                            GLint location,
+                                            GLsizei bufSize,
+                                            GLsizei *length,
+                                            GLfloat *params)
+{
+    return gl::GetnUniformfvRobustANGLE(program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetnUniformivRobustANGLE(GLuint program,
+                                            GLint location,
+                                            GLsizei bufSize,
+                                            GLsizei *length,
+                                            GLint *params)
+{
+    return gl::GetnUniformivRobustANGLE(program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetnUniformuivRobustANGLE(GLuint program,
+                                             GLint location,
+                                             GLsizei bufSize,
+                                             GLsizei *length,
+                                             GLuint *params)
+{
+    return gl::GetnUniformuivRobustANGLE(program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glTexParameterIivRobustANGLE(GLenum target,
+                                              GLenum pname,
+                                              GLsizei bufSize,
+                                              const GLint *params)
+{
+    return gl::TexParameterIivRobustANGLE(target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glTexParameterIuivRobustANGLE(GLenum target,
+                                               GLenum pname,
+                                               GLsizei bufSize,
+                                               const GLuint *params)
+{
+    return gl::TexParameterIuivRobustANGLE(target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glGetTexParameterIivRobustANGLE(GLenum target,
+                                                 GLenum pname,
+                                                 GLsizei bufSize,
+                                                 GLsizei *length,
+                                                 GLint *params)
+{
+    return gl::GetTexParameterIivRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetTexParameterIuivRobustANGLE(GLenum target,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLuint *params)
+{
+    return gl::GetTexParameterIuivRobustANGLE(target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glSamplerParameterIivRobustANGLE(GLuint sampler,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  const GLint *param)
+{
+    return gl::SamplerParameterIivRobustANGLE(sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glSamplerParameterIuivRobustANGLE(GLuint sampler,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   const GLuint *param)
+{
+    return gl::SamplerParameterIuivRobustANGLE(sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glGetSamplerParameterIivRobustANGLE(GLuint sampler,
+                                                     GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint *params)
+{
+    return gl::GetSamplerParameterIivRobustANGLE(sampler, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetSamplerParameterIuivRobustANGLE(GLuint sampler,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLuint *params)
+{
+    return gl::GetSamplerParameterIuivRobustANGLE(sampler, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetQueryObjectivRobustANGLE(GLuint id,
+                                               GLenum pname,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLint *params)
+{
+    return gl::GetQueryObjectivRobustANGLE(id, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetQueryObjecti64vRobustANGLE(GLuint id,
+                                                 GLenum pname,
+                                                 GLsizei bufSize,
+                                                 GLsizei *length,
+                                                 GLint64 *params)
+{
+    return gl::GetQueryObjecti64vRobustANGLE(id, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetQueryObjectui64vRobustANGLE(GLuint id,
+                                                  GLenum pname,
+                                                  GLsizei bufSize,
+                                                  GLsizei *length,
+                                                  GLuint64 *params)
+{
+    return gl::GetQueryObjectui64vRobustANGLE(id, pname, bufSize, length, params);
+}
+
+// GL_ANGLE_translated_shader_source
+void GL_APIENTRY glGetTranslatedShaderSourceANGLE(GLuint shader,
+                                                  GLsizei bufsize,
+                                                  GLsizei *length,
+                                                  GLchar *source)
+{
+    return gl::GetTranslatedShaderSourceANGLE(shader, bufsize, length, source);
+}
+
+// GL_CHROMIUM_bind_uniform_location
+void GL_APIENTRY glBindUniformLocationCHROMIUM(GLuint program, GLint location, const GLchar *name)
+{
+    return gl::BindUniformLocationCHROMIUM(program, location, name);
+}
+
+// GL_CHROMIUM_copy_compressed_texture
+void GL_APIENTRY glCompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
+{
+    return gl::CompressedCopyTextureCHROMIUM(sourceId, destId);
+}
+
+// GL_CHROMIUM_copy_texture
+void GL_APIENTRY glCopyTextureCHROMIUM(GLuint sourceId,
+                                       GLint sourceLevel,
+                                       GLenum destTarget,
+                                       GLuint destId,
+                                       GLint destLevel,
+                                       GLint internalFormat,
+                                       GLenum destType,
+                                       GLboolean unpackFlipY,
+                                       GLboolean unpackPremultiplyAlpha,
+                                       GLboolean unpackUnmultiplyAlpha)
+{
+    return gl::CopyTextureCHROMIUM(sourceId, sourceLevel, destTarget, destId, destLevel,
+                                   internalFormat, destType, unpackFlipY, unpackPremultiplyAlpha,
+                                   unpackUnmultiplyAlpha);
+}
+
+void GL_APIENTRY glCopySubTextureCHROMIUM(GLuint sourceId,
+                                          GLint sourceLevel,
+                                          GLenum destTarget,
+                                          GLuint destId,
+                                          GLint destLevel,
+                                          GLint xoffset,
+                                          GLint yoffset,
+                                          GLint x,
+                                          GLint y,
+                                          GLint width,
+                                          GLint height,
+                                          GLboolean unpackFlipY,
+                                          GLboolean unpackPremultiplyAlpha,
+                                          GLboolean unpackUnmultiplyAlpha)
+{
+    return gl::CopySubTextureCHROMIUM(sourceId, sourceLevel, destTarget, destId, destLevel, xoffset,
+                                      yoffset, x, y, width, height, unpackFlipY,
+                                      unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+}
+
+// GL_CHROMIUM_framebuffer_mixed_samples
+void GL_APIENTRY glCoverageModulationCHROMIUM(GLenum components)
+{
+    return gl::CoverageModulationCHROMIUM(components);
+}
+
+void GL_APIENTRY glMatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix)
+{
+    return gl::MatrixLoadfCHROMIUM(matrixMode, matrix);
+}
+
+void GL_APIENTRY glMatrixLoadIdentityCHROMIUM(GLenum matrixMode)
+{
+    return gl::MatrixLoadIdentityCHROMIUM(matrixMode);
+}
+
+// GL_CHROMIUM_path_rendering
+GLuint GL_APIENTRY glGenPathsCHROMIUM(GLsizei range)
+{
+    return gl::GenPathsCHROMIUM(range);
+}
+
+void GL_APIENTRY glDeletePathsCHROMIUM(GLuint first, GLsizei range)
+{
+    return gl::DeletePathsCHROMIUM(first, range);
+}
+
+GLboolean GL_APIENTRY glIsPathCHROMIUM(GLuint path)
+{
+    return gl::IsPathCHROMIUM(path);
+}
+
+void GL_APIENTRY glPathCommandsCHROMIUM(GLuint path,
+                                        GLsizei numCommands,
+                                        const GLubyte *commands,
+                                        GLsizei numCoords,
+                                        GLenum coordType,
+                                        const void *coords)
+{
+    return gl::PathCommandsCHROMIUM(path, numCommands, commands, numCoords, coordType, coords);
+}
+
+void GL_APIENTRY glPathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value)
+{
+    return gl::PathParameterfCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glPathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value)
+{
+    return gl::PathParameteriCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glGetPathParameterfvCHROMIUM(GLuint path, GLenum pname, GLfloat *value)
+{
+    return gl::GetPathParameterfvCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glGetPathParameterivCHROMIUM(GLuint path, GLenum pname, GLint *value)
+{
+    return gl::GetPathParameterivCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glPathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask)
+{
+    return gl::PathStencilFuncCHROMIUM(func, ref, mask);
+}
+
+void GL_APIENTRY glStencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask)
+{
+    return gl::StencilFillPathCHROMIUM(path, fillMode, mask);
+}
+
+void GL_APIENTRY glStencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask)
+{
+    return gl::StencilStrokePathCHROMIUM(path, reference, mask);
+}
+
+void GL_APIENTRY glCoverFillPathCHROMIUM(GLuint path, GLenum coverMode)
+{
+    return gl::CoverFillPathCHROMIUM(path, coverMode);
+}
+
+void GL_APIENTRY glCoverStrokePathCHROMIUM(GLuint path, GLenum coverMode)
+{
+    return gl::CoverStrokePathCHROMIUM(path, coverMode);
+}
+
+void GL_APIENTRY glStencilThenCoverFillPathCHROMIUM(GLuint path,
+                                                    GLenum fillMode,
+                                                    GLuint mask,
+                                                    GLenum coverMode)
+{
+    return gl::StencilThenCoverFillPathCHROMIUM(path, fillMode, mask, coverMode);
+}
+
+void GL_APIENTRY glStencilThenCoverStrokePathCHROMIUM(GLuint path,
+                                                      GLint reference,
+                                                      GLuint mask,
+                                                      GLenum coverMode)
+{
+    return gl::StencilThenCoverStrokePathCHROMIUM(path, reference, mask, coverMode);
+}
+
+void GL_APIENTRY glCoverFillPathInstancedCHROMIUM(GLsizei numPath,
+                                                  GLenum pathNameType,
+                                                  const void *paths,
+                                                  GLuint pathBase,
+                                                  GLenum coverMode,
+                                                  GLenum transformType,
+                                                  const GLfloat *transformValues)
+{
+    return gl::CoverFillPathInstancedCHROMIUM(numPath, pathNameType, paths, pathBase, coverMode,
+                                              transformType, transformValues);
+}
+
+void GL_APIENTRY glCoverStrokePathInstancedCHROMIUM(GLsizei numPath,
+                                                    GLenum pathNameType,
+                                                    const void *paths,
+                                                    GLuint pathBase,
+                                                    GLenum coverMode,
+                                                    GLenum transformType,
+                                                    const GLfloat *transformValues)
+{
+    return gl::CoverStrokePathInstancedCHROMIUM(numPath, pathNameType, paths, pathBase, coverMode,
+                                                transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilStrokePathInstancedCHROMIUM(GLsizei numPath,
+                                                      GLenum pathNameType,
+                                                      const void *paths,
+                                                      GLuint pathBase,
+                                                      GLint reference,
+                                                      GLuint mask,
+                                                      GLenum transformType,
+                                                      const GLfloat *transformValues)
+{
+    return gl::StencilStrokePathInstancedCHROMIUM(numPath, pathNameType, paths, pathBase, reference,
+                                                  mask, transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilFillPathInstancedCHROMIUM(GLsizei numPaths,
+                                                    GLenum pathNameType,
+                                                    const void *paths,
+                                                    GLuint pathBase,
+                                                    GLenum fillMode,
+                                                    GLuint mask,
+                                                    GLenum transformType,
+                                                    const GLfloat *transformValues)
+{
+    return gl::StencilFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, fillMode,
+                                                mask, transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+                                                             GLenum pathNameType,
+                                                             const void *paths,
+                                                             GLuint pathBase,
+                                                             GLenum fillMode,
+                                                             GLuint mask,
+                                                             GLenum coverMode,
+                                                             GLenum transformType,
+                                                             const GLfloat *transformValues)
+{
+    return gl::StencilThenCoverFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase,
+                                                         fillMode, mask, coverMode, transformType,
+                                                         transformValues);
+}
+
+void GL_APIENTRY glStencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+                                                               GLenum pathNameType,
+                                                               const void *paths,
+                                                               GLuint pathBase,
+                                                               GLint reference,
+                                                               GLuint mask,
+                                                               GLenum coverMode,
+                                                               GLenum transformType,
+                                                               const GLfloat *transformValues)
+{
+    return gl::StencilThenCoverStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase,
+                                                           reference, mask, coverMode,
+                                                           transformType, transformValues);
+}
+
+void GL_APIENTRY glBindFragmentInputLocationCHROMIUM(GLuint programs,
+                                                     GLint location,
+                                                     const GLchar *name)
+{
+    return gl::BindFragmentInputLocationCHROMIUM(programs, location, name);
+}
+
+void GL_APIENTRY glProgramPathFragmentInputGenCHROMIUM(GLuint program,
+                                                       GLint location,
+                                                       GLenum genMode,
+                                                       GLint components,
+                                                       const GLfloat *coeffs)
+{
+    return gl::ProgramPathFragmentInputGenCHROMIUM(program, location, genMode, components, coeffs);
+}
+
+// GL_EXT_debug_marker
+void GL_APIENTRY glInsertEventMarkerEXT(GLsizei length, const GLchar *marker)
+{
+    return gl::InsertEventMarkerEXT(length, marker);
+}
+
+void GL_APIENTRY glPopGroupMarkerEXT()
+{
+    return gl::PopGroupMarkerEXT();
+}
+
+void GL_APIENTRY glPushGroupMarkerEXT(GLsizei length, const GLchar *marker)
+{
+    return gl::PushGroupMarkerEXT(length, marker);
+}
+
+// GL_EXT_discard_framebuffer
+void GL_APIENTRY glDiscardFramebufferEXT(GLenum target,
+                                         GLsizei numAttachments,
+                                         const GLenum *attachments)
+{
+    return gl::DiscardFramebufferEXT(target, numAttachments, attachments);
+}
+
+// GL_EXT_disjoint_timer_query
+void GL_APIENTRY glBeginQueryEXT(GLenum target, GLuint id)
+{
+    return gl::BeginQueryEXT(target, id);
+}
+
+void GL_APIENTRY glDeleteQueriesEXT(GLsizei n, const GLuint *ids)
+{
+    return gl::DeleteQueriesEXT(n, ids);
+}
+
+void GL_APIENTRY glEndQueryEXT(GLenum target)
+{
+    return gl::EndQueryEXT(target);
+}
+
+void GL_APIENTRY glGenQueriesEXT(GLsizei n, GLuint *ids)
+{
+    return gl::GenQueriesEXT(n, ids);
+}
+
+void GL_APIENTRY glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 *params)
+{
+    return gl::GetQueryObjecti64vEXT(id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjectivEXT(GLuint id, GLenum pname, GLint *params)
+{
+    return gl::GetQueryObjectivEXT(id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 *params)
+{
+    return gl::GetQueryObjectui64vEXT(id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)
+{
+    return gl::GetQueryObjectuivEXT(id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryivEXT(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetQueryivEXT(target, pname, params);
+}
+
+GLboolean GL_APIENTRY glIsQueryEXT(GLuint id)
+{
+    return gl::IsQueryEXT(id);
+}
+
+void GL_APIENTRY glQueryCounterEXT(GLuint id, GLenum target)
+{
+    return gl::QueryCounterEXT(id, target);
+}
+
+// GL_EXT_draw_buffers
+void GL_APIENTRY glDrawBuffersEXT(GLsizei n, const GLenum *bufs)
+{
+    return gl::DrawBuffersEXT(n, bufs);
+}
+
+// GL_EXT_map_buffer_range
+void GL_APIENTRY glFlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length)
+{
+    return gl::FlushMappedBufferRangeEXT(target, offset, length);
+}
+
+void *GL_APIENTRY glMapBufferRangeEXT(GLenum target,
+                                      GLintptr offset,
+                                      GLsizeiptr length,
+                                      GLbitfield access)
+{
+    return gl::MapBufferRangeEXT(target, offset, length, access);
+}
+
+// GL_EXT_occlusion_query_boolean
+
+// GL_EXT_robustness
+GLenum GL_APIENTRY glGetGraphicsResetStatusEXT()
+{
+    return gl::GetGraphicsResetStatusEXT();
+}
+
+void GL_APIENTRY glGetnUniformfvEXT(GLuint program,
+                                    GLint location,
+                                    GLsizei bufSize,
+                                    GLfloat *params)
+{
+    return gl::GetnUniformfvEXT(program, location, bufSize, params);
+}
+
+void GL_APIENTRY glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params)
+{
+    return gl::GetnUniformivEXT(program, location, bufSize, params);
+}
+
+void GL_APIENTRY glReadnPixelsEXT(GLint x,
+                                  GLint y,
+                                  GLsizei width,
+                                  GLsizei height,
+                                  GLenum format,
+                                  GLenum type,
+                                  GLsizei bufSize,
+                                  void *data)
+{
+    return gl::ReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
+}
+
+// GL_EXT_texture_storage
+void GL_APIENTRY glTexStorage1DEXT(GLenum target,
+                                   GLsizei levels,
+                                   GLenum internalformat,
+                                   GLsizei width)
+{
+    return gl::TexStorage1DEXT(target, levels, internalformat, width);
+}
+
+void GL_APIENTRY glTexStorage2DEXT(GLenum target,
+                                   GLsizei levels,
+                                   GLenum internalformat,
+                                   GLsizei width,
+                                   GLsizei height)
+{
+    return gl::TexStorage2DEXT(target, levels, internalformat, width, height);
+}
+
+void GL_APIENTRY glTexStorage3DEXT(GLenum target,
+                                   GLsizei levels,
+                                   GLenum internalformat,
+                                   GLsizei width,
+                                   GLsizei height,
+                                   GLsizei depth)
+{
+    return gl::TexStorage3DEXT(target, levels, internalformat, width, height, depth);
+}
+
+// GL_KHR_debug
+void GL_APIENTRY glDebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void *userParam)
+{
+    return gl::DebugMessageCallbackKHR(callback, userParam);
+}
+
+void GL_APIENTRY glDebugMessageControlKHR(GLenum source,
+                                          GLenum type,
+                                          GLenum severity,
+                                          GLsizei count,
+                                          const GLuint *ids,
+                                          GLboolean enabled)
+{
+    return gl::DebugMessageControlKHR(source, type, severity, count, ids, enabled);
+}
+
+void GL_APIENTRY glDebugMessageInsertKHR(GLenum source,
+                                         GLenum type,
+                                         GLuint id,
+                                         GLenum severity,
+                                         GLsizei length,
+                                         const GLchar *buf)
+{
+    return gl::DebugMessageInsertKHR(source, type, id, severity, length, buf);
+}
+
+GLuint GL_APIENTRY glGetDebugMessageLogKHR(GLuint count,
+                                           GLsizei bufSize,
+                                           GLenum *sources,
+                                           GLenum *types,
+                                           GLuint *ids,
+                                           GLenum *severities,
+                                           GLsizei *lengths,
+                                           GLchar *messageLog)
+{
+    return gl::GetDebugMessageLogKHR(count, bufSize, sources, types, ids, severities, lengths,
+                                     messageLog);
+}
+
+void GL_APIENTRY
+glGetObjectLabelKHR(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label)
+{
+    return gl::GetObjectLabelKHR(identifier, name, bufSize, length, label);
+}
+
+void GL_APIENTRY glGetObjectPtrLabelKHR(const void *ptr,
+                                        GLsizei bufSize,
+                                        GLsizei *length,
+                                        GLchar *label)
+{
+    return gl::GetObjectPtrLabelKHR(ptr, bufSize, length, label);
+}
+
+void GL_APIENTRY glGetPointervKHR(GLenum pname, void **params)
+{
+    return gl::GetPointervKHR(pname, params);
+}
+
+void GL_APIENTRY glObjectLabelKHR(GLenum identifier,
+                                  GLuint name,
+                                  GLsizei length,
+                                  const GLchar *label)
+{
+    return gl::ObjectLabelKHR(identifier, name, length, label);
+}
+
+void GL_APIENTRY glObjectPtrLabelKHR(const void *ptr, GLsizei length, const GLchar *label)
+{
+    return gl::ObjectPtrLabelKHR(ptr, length, label);
+}
+
+void GL_APIENTRY glPopDebugGroupKHR()
+{
+    return gl::PopDebugGroupKHR();
+}
+
+void GL_APIENTRY glPushDebugGroupKHR(GLenum source,
+                                     GLuint id,
+                                     GLsizei length,
+                                     const GLchar *message)
+{
+    return gl::PushDebugGroupKHR(source, id, length, message);
+}
+
+// GL_NV_fence
+void GL_APIENTRY glDeleteFencesNV(GLsizei n, const GLuint *fences)
+{
+    return gl::DeleteFencesNV(n, fences);
+}
+
+void GL_APIENTRY glFinishFenceNV(GLuint fence)
+{
+    return gl::FinishFenceNV(fence);
+}
+
+void GL_APIENTRY glGenFencesNV(GLsizei n, GLuint *fences)
+{
+    return gl::GenFencesNV(n, fences);
+}
+
+void GL_APIENTRY glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
+{
+    return gl::GetFenceivNV(fence, pname, params);
+}
+
+GLboolean GL_APIENTRY glIsFenceNV(GLuint fence)
+{
+    return gl::IsFenceNV(fence);
+}
+
+void GL_APIENTRY glSetFenceNV(GLuint fence, GLenum condition)
+{
+    return gl::SetFenceNV(fence, condition);
+}
+
+GLboolean GL_APIENTRY glTestFenceNV(GLuint fence)
+{
+    return gl::TestFenceNV(fence);
+}
+
+// GL_OES_EGL_image
+void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
+{
+    return gl::EGLImageTargetRenderbufferStorageOES(target, image);
+}
+
+void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
+{
+    return gl::EGLImageTargetTexture2DOES(target, image);
+}
+
+// GL_OES_draw_texture
+void GL_APIENTRY glDrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
+{
+    return gl::DrawTexfOES(x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexfvOES(const GLfloat *coords)
+{
+    return gl::DrawTexfvOES(coords);
+}
+
+void GL_APIENTRY glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)
+{
+    return gl::DrawTexiOES(x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexivOES(const GLint *coords)
+{
+    return gl::DrawTexivOES(coords);
+}
+
+void GL_APIENTRY glDrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
+{
+    return gl::DrawTexsOES(x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexsvOES(const GLshort *coords)
+{
+    return gl::DrawTexsvOES(coords);
+}
+
+void GL_APIENTRY glDrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
+{
+    return gl::DrawTexxOES(x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexxvOES(const GLfixed *coords)
+{
+    return gl::DrawTexxvOES(coords);
+}
+
+// GL_OES_framebuffer_object
+void GL_APIENTRY glBindFramebufferOES(GLenum target, GLuint framebuffer)
+{
+    return gl::BindFramebufferOES(target, framebuffer);
+}
+
+void GL_APIENTRY glBindRenderbufferOES(GLenum target, GLuint renderbuffer)
+{
+    return gl::BindRenderbufferOES(target, renderbuffer);
+}
+
+GLenum GL_APIENTRY glCheckFramebufferStatusOES(GLenum target)
+{
+    return gl::CheckFramebufferStatusOES(target);
+}
+
+void GL_APIENTRY glDeleteFramebuffersOES(GLsizei n, const GLuint *framebuffers)
+{
+    return gl::DeleteFramebuffersOES(n, framebuffers);
+}
+
+void GL_APIENTRY glDeleteRenderbuffersOES(GLsizei n, const GLuint *renderbuffers)
+{
+    return gl::DeleteRenderbuffersOES(n, renderbuffers);
+}
+
+void GL_APIENTRY glFramebufferRenderbufferOES(GLenum target,
+                                              GLenum attachment,
+                                              GLenum renderbuffertarget,
+                                              GLuint renderbuffer)
+{
+    return gl::FramebufferRenderbufferOES(target, attachment, renderbuffertarget, renderbuffer);
+}
+
+void GL_APIENTRY glFramebufferTexture2DOES(GLenum target,
+                                           GLenum attachment,
+                                           GLenum textarget,
+                                           GLuint texture,
+                                           GLint level)
+{
+    return gl::FramebufferTexture2DOES(target, attachment, textarget, texture, level);
+}
+
+void GL_APIENTRY glGenFramebuffersOES(GLsizei n, GLuint *framebuffers)
+{
+    return gl::GenFramebuffersOES(n, framebuffers);
+}
+
+void GL_APIENTRY glGenRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
+{
+    return gl::GenRenderbuffersOES(n, renderbuffers);
+}
+
+void GL_APIENTRY glGenerateMipmapOES(GLenum target)
+{
+    return gl::GenerateMipmapOES(target);
+}
+
+void GL_APIENTRY glGetFramebufferAttachmentParameterivOES(GLenum target,
+                                                          GLenum attachment,
+                                                          GLenum pname,
+                                                          GLint *params)
+{
+    return gl::GetFramebufferAttachmentParameterivOES(target, attachment, pname, params);
+}
+
+void GL_APIENTRY glGetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint *params)
+{
+    return gl::GetRenderbufferParameterivOES(target, pname, params);
+}
+
+GLboolean GL_APIENTRY glIsFramebufferOES(GLuint framebuffer)
+{
+    return gl::IsFramebufferOES(framebuffer);
+}
+
+GLboolean GL_APIENTRY glIsRenderbufferOES(GLuint renderbuffer)
+{
+    return gl::IsRenderbufferOES(renderbuffer);
+}
+
+void GL_APIENTRY glRenderbufferStorageOES(GLenum target,
+                                          GLenum internalformat,
+                                          GLsizei width,
+                                          GLsizei height)
+{
+    return gl::RenderbufferStorageOES(target, internalformat, width, height);
+}
+
+// GL_OES_get_program_binary
+void GL_APIENTRY glGetProgramBinaryOES(GLuint program,
+                                       GLsizei bufSize,
+                                       GLsizei *length,
+                                       GLenum *binaryFormat,
+                                       void *binary)
+{
+    return gl::GetProgramBinaryOES(program, bufSize, length, binaryFormat, binary);
+}
+
+void GL_APIENTRY glProgramBinaryOES(GLuint program,
+                                    GLenum binaryFormat,
+                                    const void *binary,
+                                    GLint length)
+{
+    return gl::ProgramBinaryOES(program, binaryFormat, binary, length);
+}
+
+// GL_OES_mapbuffer
+void GL_APIENTRY glGetBufferPointervOES(GLenum target, GLenum pname, void **params)
+{
+    return gl::GetBufferPointervOES(target, pname, params);
+}
+
+void *GL_APIENTRY glMapBufferOES(GLenum target, GLenum access)
+{
+    return gl::MapBufferOES(target, access);
+}
+
+GLboolean GL_APIENTRY glUnmapBufferOES(GLenum target)
+{
+    return gl::UnmapBufferOES(target);
+}
+
+// GL_OES_matrix_palette
+void GL_APIENTRY glCurrentPaletteMatrixOES(GLuint matrixpaletteindex)
+{
+    return gl::CurrentPaletteMatrixOES(matrixpaletteindex);
+}
+
+void GL_APIENTRY glLoadPaletteFromModelViewMatrixOES()
+{
+    return gl::LoadPaletteFromModelViewMatrixOES();
+}
+
+void GL_APIENTRY glMatrixIndexPointerOES(GLint size,
+                                         GLenum type,
+                                         GLsizei stride,
+                                         const void *pointer)
+{
+    return gl::MatrixIndexPointerOES(size, type, stride, pointer);
+}
+
+void GL_APIENTRY glWeightPointerOES(GLint size, GLenum type, GLsizei stride, const void *pointer)
+{
+    return gl::WeightPointerOES(size, type, stride, pointer);
+}
+
+// GL_OES_point_size_array
+void GL_APIENTRY glPointSizePointerOES(GLenum type, GLsizei stride, const void *pointer)
+{
+    return gl::PointSizePointerOES(type, stride, pointer);
+}
+
+// GL_OES_query_matrix
+GLbitfield GL_APIENTRY glQueryMatrixxOES(GLfixed *mantissa, GLint *exponent)
+{
+    return gl::QueryMatrixxOES(mantissa, exponent);
+}
+
+// GL_OES_texture_cube_map
+void GL_APIENTRY glGetTexGenfvOES(GLenum coord, GLenum pname, GLfloat *params)
+{
+    return gl::GetTexGenfvOES(coord, pname, params);
+}
+
+void GL_APIENTRY glGetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
+{
+    return gl::GetTexGenivOES(coord, pname, params);
+}
+
+void GL_APIENTRY glGetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
+{
+    return gl::GetTexGenxvOES(coord, pname, params);
+}
+
+void GL_APIENTRY glTexGenfOES(GLenum coord, GLenum pname, GLfloat param)
+{
+    return gl::TexGenfOES(coord, pname, param);
+}
+
+void GL_APIENTRY glTexGenfvOES(GLenum coord, GLenum pname, const GLfloat *params)
+{
+    return gl::TexGenfvOES(coord, pname, params);
+}
+
+void GL_APIENTRY glTexGeniOES(GLenum coord, GLenum pname, GLint param)
+{
+    return gl::TexGeniOES(coord, pname, param);
+}
+
+void GL_APIENTRY glTexGenivOES(GLenum coord, GLenum pname, const GLint *params)
+{
+    return gl::TexGenivOES(coord, pname, params);
+}
+
+void GL_APIENTRY glTexGenxOES(GLenum coord, GLenum pname, GLfixed param)
+{
+    return gl::TexGenxOES(coord, pname, param);
+}
+
+void GL_APIENTRY glTexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
+{
+    return gl::TexGenxvOES(coord, pname, params);
+}
+
+// GL_OES_vertex_array_object
+void GL_APIENTRY glBindVertexArrayOES(GLuint array)
+{
+    return gl::BindVertexArrayOES(array);
+}
+
+void GL_APIENTRY glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
+{
+    return gl::DeleteVertexArraysOES(n, arrays);
+}
+
+void GL_APIENTRY glGenVertexArraysOES(GLsizei n, GLuint *arrays)
+{
+    return gl::GenVertexArraysOES(n, arrays);
+}
+
+GLboolean GL_APIENTRY glIsVertexArrayOES(GLuint array)
+{
+    return gl::IsVertexArrayOES(array);
+}
+
+// EGL_ANGLE_explicit_context
+void GL_APIENTRY glActiveShaderProgramContextANGLE(GLeglContext ctx,
+                                                   GLuint pipeline,
+                                                   GLuint program)
+{
+    return gl::ActiveShaderProgramContextANGLE(ctx, pipeline, program);
+}
+
+void GL_APIENTRY glActiveTextureContextANGLE(GLeglContext ctx, GLenum texture)
+{
+    return gl::ActiveTextureContextANGLE(ctx, texture);
+}
+
+void GL_APIENTRY glAlphaFuncContextANGLE(GLeglContext ctx, GLenum func, GLfloat ref)
+{
+    return gl::AlphaFuncContextANGLE(ctx, func, ref);
+}
+
+void GL_APIENTRY glAlphaFuncxContextANGLE(GLeglContext ctx, GLenum func, GLfixed ref)
+{
+    return gl::AlphaFuncxContextANGLE(ctx, func, ref);
+}
+
+void GL_APIENTRY glAttachShaderContextANGLE(GLeglContext ctx, GLuint program, GLuint shader)
+{
+    return gl::AttachShaderContextANGLE(ctx, program, shader);
+}
+
+void GL_APIENTRY glBeginQueryContextANGLE(GLeglContext ctx, GLenum target, GLuint id)
+{
+    return gl::BeginQueryContextANGLE(ctx, target, id);
+}
+
+void GL_APIENTRY glBeginQueryEXTContextANGLE(GLeglContext ctx, GLenum target, GLuint id)
+{
+    return gl::BeginQueryEXTContextANGLE(ctx, target, id);
+}
+
+void GL_APIENTRY glBeginTransformFeedbackContextANGLE(GLeglContext ctx, GLenum primitiveMode)
+{
+    return gl::BeginTransformFeedbackContextANGLE(ctx, primitiveMode);
+}
+
+void GL_APIENTRY glBindAttribLocationContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  GLuint index,
+                                                  const GLchar *name)
+{
+    return gl::BindAttribLocationContextANGLE(ctx, program, index, name);
+}
+
+void GL_APIENTRY glBindBufferContextANGLE(GLeglContext ctx, GLenum target, GLuint buffer)
+{
+    return gl::BindBufferContextANGLE(ctx, target, buffer);
+}
+
+void GL_APIENTRY glBindBufferBaseContextANGLE(GLeglContext ctx,
+                                              GLenum target,
+                                              GLuint index,
+                                              GLuint buffer)
+{
+    return gl::BindBufferBaseContextANGLE(ctx, target, index, buffer);
+}
+
+void GL_APIENTRY glBindBufferRangeContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLuint index,
+                                               GLuint buffer,
+                                               GLintptr offset,
+                                               GLsizeiptr size)
+{
+    return gl::BindBufferRangeContextANGLE(ctx, target, index, buffer, offset, size);
+}
+
+void GL_APIENTRY glBindFramebufferContextANGLE(GLeglContext ctx, GLenum target, GLuint framebuffer)
+{
+    return gl::BindFramebufferContextANGLE(ctx, target, framebuffer);
+}
+
+void GL_APIENTRY glBindFramebufferOESContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLuint framebuffer)
+{
+    return gl::BindFramebufferOESContextANGLE(ctx, target, framebuffer);
+}
+
+void GL_APIENTRY glBindImageTextureContextANGLE(GLeglContext ctx,
+                                                GLuint unit,
+                                                GLuint texture,
+                                                GLint level,
+                                                GLboolean layered,
+                                                GLint layer,
+                                                GLenum access,
+                                                GLenum format)
+{
+    return gl::BindImageTextureContextANGLE(ctx, unit, texture, level, layered, layer, access,
+                                            format);
+}
+
+void GL_APIENTRY glBindProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline)
+{
+    return gl::BindProgramPipelineContextANGLE(ctx, pipeline);
+}
+
+void GL_APIENTRY glBindRenderbufferContextANGLE(GLeglContext ctx,
+                                                GLenum target,
+                                                GLuint renderbuffer)
+{
+    return gl::BindRenderbufferContextANGLE(ctx, target, renderbuffer);
+}
+
+void GL_APIENTRY glBindRenderbufferOESContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLuint renderbuffer)
+{
+    return gl::BindRenderbufferOESContextANGLE(ctx, target, renderbuffer);
+}
+
+void GL_APIENTRY glBindSamplerContextANGLE(GLeglContext ctx, GLuint unit, GLuint sampler)
+{
+    return gl::BindSamplerContextANGLE(ctx, unit, sampler);
+}
+
+void GL_APIENTRY glBindTextureContextANGLE(GLeglContext ctx, GLenum target, GLuint texture)
+{
+    return gl::BindTextureContextANGLE(ctx, target, texture);
+}
+
+void GL_APIENTRY glBindTransformFeedbackContextANGLE(GLeglContext ctx, GLenum target, GLuint id)
+{
+    return gl::BindTransformFeedbackContextANGLE(ctx, target, id);
+}
+
+void GL_APIENTRY glBindVertexArrayContextANGLE(GLeglContext ctx, GLuint array)
+{
+    return gl::BindVertexArrayContextANGLE(ctx, array);
+}
+
+void GL_APIENTRY glBindVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array)
+{
+    return gl::BindVertexArrayOESContextANGLE(ctx, array);
+}
+
+void GL_APIENTRY glBindVertexBufferContextANGLE(GLeglContext ctx,
+                                                GLuint bindingindex,
+                                                GLuint buffer,
+                                                GLintptr offset,
+                                                GLsizei stride)
+{
+    return gl::BindVertexBufferContextANGLE(ctx, bindingindex, buffer, offset, stride);
+}
+
+void GL_APIENTRY
+glBlendColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    return gl::BlendColorContextANGLE(ctx, red, green, blue, alpha);
+}
+
+void GL_APIENTRY glBlendEquationContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    return gl::BlendEquationContextANGLE(ctx, mode);
+}
+
+void GL_APIENTRY glBlendEquationSeparateContextANGLE(GLeglContext ctx,
+                                                     GLenum modeRGB,
+                                                     GLenum modeAlpha)
+{
+    return gl::BlendEquationSeparateContextANGLE(ctx, modeRGB, modeAlpha);
+}
+
+void GL_APIENTRY glBlendFuncContextANGLE(GLeglContext ctx, GLenum sfactor, GLenum dfactor)
+{
+    return gl::BlendFuncContextANGLE(ctx, sfactor, dfactor);
+}
+
+void GL_APIENTRY glBlendFuncSeparateContextANGLE(GLeglContext ctx,
+                                                 GLenum sfactorRGB,
+                                                 GLenum dfactorRGB,
+                                                 GLenum sfactorAlpha,
+                                                 GLenum dfactorAlpha)
+{
+    return gl::BlendFuncSeparateContextANGLE(ctx, sfactorRGB, dfactorRGB, sfactorAlpha,
+                                             dfactorAlpha);
+}
+
+void GL_APIENTRY glBlitFramebufferContextANGLE(GLeglContext ctx,
+                                               GLint srcX0,
+                                               GLint srcY0,
+                                               GLint srcX1,
+                                               GLint srcY1,
+                                               GLint dstX0,
+                                               GLint dstY0,
+                                               GLint dstX1,
+                                               GLint dstY1,
+                                               GLbitfield mask,
+                                               GLenum filter)
+{
+    return gl::BlitFramebufferContextANGLE(ctx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1,
+                                           dstY1, mask, filter);
+}
+
+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)
+{
+    return gl::BlitFramebufferANGLEContextANGLE(ctx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0,
+                                                dstX1, dstY1, mask, filter);
+}
+
+void GL_APIENTRY glBufferDataContextANGLE(GLeglContext ctx,
+                                          GLenum target,
+                                          GLsizeiptr size,
+                                          const void *data,
+                                          GLenum usage)
+{
+    return gl::BufferDataContextANGLE(ctx, target, size, data, usage);
+}
+
+void GL_APIENTRY glBufferSubDataContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLintptr offset,
+                                             GLsizeiptr size,
+                                             const void *data)
+{
+    return gl::BufferSubDataContextANGLE(ctx, target, offset, size, data);
+}
+
+GLenum GL_APIENTRY glCheckFramebufferStatusContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::CheckFramebufferStatusContextANGLE(ctx, target);
+}
+
+GLenum GL_APIENTRY glCheckFramebufferStatusOESContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::CheckFramebufferStatusOESContextANGLE(ctx, target);
+}
+
+void GL_APIENTRY glClearContextANGLE(GLeglContext ctx, GLbitfield mask)
+{
+    return gl::ClearContextANGLE(ctx, mask);
+}
+
+void GL_APIENTRY glClearBufferfiContextANGLE(GLeglContext ctx,
+                                             GLenum buffer,
+                                             GLint drawbuffer,
+                                             GLfloat depth,
+                                             GLint stencil)
+{
+    return gl::ClearBufferfiContextANGLE(ctx, buffer, drawbuffer, depth, stencil);
+}
+
+void GL_APIENTRY glClearBufferfvContextANGLE(GLeglContext ctx,
+                                             GLenum buffer,
+                                             GLint drawbuffer,
+                                             const GLfloat *value)
+{
+    return gl::ClearBufferfvContextANGLE(ctx, buffer, drawbuffer, value);
+}
+
+void GL_APIENTRY glClearBufferivContextANGLE(GLeglContext ctx,
+                                             GLenum buffer,
+                                             GLint drawbuffer,
+                                             const GLint *value)
+{
+    return gl::ClearBufferivContextANGLE(ctx, buffer, drawbuffer, value);
+}
+
+void GL_APIENTRY glClearBufferuivContextANGLE(GLeglContext ctx,
+                                              GLenum buffer,
+                                              GLint drawbuffer,
+                                              const GLuint *value)
+{
+    return gl::ClearBufferuivContextANGLE(ctx, buffer, drawbuffer, value);
+}
+
+void GL_APIENTRY
+glClearColorContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    return gl::ClearColorContextANGLE(ctx, red, green, blue, alpha);
+}
+
+void GL_APIENTRY
+glClearColorxContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+    return gl::ClearColorxContextANGLE(ctx, red, green, blue, alpha);
+}
+
+void GL_APIENTRY glClearDepthfContextANGLE(GLeglContext ctx, GLfloat d)
+{
+    return gl::ClearDepthfContextANGLE(ctx, d);
+}
+
+void GL_APIENTRY glClearDepthxContextANGLE(GLeglContext ctx, GLfixed depth)
+{
+    return gl::ClearDepthxContextANGLE(ctx, depth);
+}
+
+void GL_APIENTRY glClearStencilContextANGLE(GLeglContext ctx, GLint s)
+{
+    return gl::ClearStencilContextANGLE(ctx, s);
+}
+
+void GL_APIENTRY glClientActiveTextureContextANGLE(GLeglContext ctx, GLenum texture)
+{
+    return gl::ClientActiveTextureContextANGLE(ctx, texture);
+}
+
+GLenum GL_APIENTRY glClientWaitSyncContextANGLE(GLeglContext ctx,
+                                                GLsync sync,
+                                                GLbitfield flags,
+                                                GLuint64 timeout)
+{
+    return gl::ClientWaitSyncContextANGLE(ctx, sync, flags, timeout);
+}
+
+void GL_APIENTRY glClipPlanefContextANGLE(GLeglContext ctx, GLenum p, const GLfloat *eqn)
+{
+    return gl::ClipPlanefContextANGLE(ctx, p, eqn);
+}
+
+void GL_APIENTRY glClipPlanexContextANGLE(GLeglContext ctx, GLenum plane, const GLfixed *equation)
+{
+    return gl::ClipPlanexContextANGLE(ctx, plane, equation);
+}
+
+void GL_APIENTRY
+glColor4fContextANGLE(GLeglContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+    return gl::Color4fContextANGLE(ctx, red, green, blue, alpha);
+}
+
+void GL_APIENTRY
+glColor4ubContextANGLE(GLeglContext ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+{
+    return gl::Color4ubContextANGLE(ctx, red, green, blue, alpha);
+}
+
+void GL_APIENTRY
+glColor4xContextANGLE(GLeglContext ctx, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+    return gl::Color4xContextANGLE(ctx, red, green, blue, alpha);
+}
+
+void GL_APIENTRY glColorMaskContextANGLE(GLeglContext ctx,
+                                         GLboolean red,
+                                         GLboolean green,
+                                         GLboolean blue,
+                                         GLboolean alpha)
+{
+    return gl::ColorMaskContextANGLE(ctx, red, green, blue, alpha);
+}
+
+void GL_APIENTRY glColorPointerContextANGLE(GLeglContext ctx,
+                                            GLint size,
+                                            GLenum type,
+                                            GLsizei stride,
+                                            const void *pointer)
+{
+    return gl::ColorPointerContextANGLE(ctx, size, type, stride, pointer);
+}
+
+void GL_APIENTRY glCompileShaderContextANGLE(GLeglContext ctx, GLuint shader)
+{
+    return gl::CompileShaderContextANGLE(ctx, shader);
+}
+
+void GL_APIENTRY glCompressedTexImage2DContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLint level,
+                                                    GLenum internalformat,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLint border,
+                                                    GLsizei imageSize,
+                                                    const void *data)
+{
+    return gl::CompressedTexImage2DContextANGLE(ctx, target, level, internalformat, width, height,
+                                                border, imageSize, data);
+}
+
+void GL_APIENTRY glCompressedTexImage3DContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLint level,
+                                                    GLenum internalformat,
+                                                    GLsizei width,
+                                                    GLsizei height,
+                                                    GLsizei depth,
+                                                    GLint border,
+                                                    GLsizei imageSize,
+                                                    const void *data)
+{
+    return gl::CompressedTexImage3DContextANGLE(ctx, target, level, internalformat, width, height,
+                                                depth, border, imageSize, data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage2DContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLint level,
+                                                       GLint xoffset,
+                                                       GLint yoffset,
+                                                       GLsizei width,
+                                                       GLsizei height,
+                                                       GLenum format,
+                                                       GLsizei imageSize,
+                                                       const void *data)
+{
+    return gl::CompressedTexSubImage2DContextANGLE(ctx, target, level, xoffset, yoffset, width,
+                                                   height, format, imageSize, data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage3DContextANGLE(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)
+{
+    return gl::CompressedTexSubImage3DContextANGLE(ctx, target, level, xoffset, yoffset, zoffset,
+                                                   width, height, depth, format, imageSize, data);
+}
+
+void GL_APIENTRY glCopyBufferSubDataContextANGLE(GLeglContext ctx,
+                                                 GLenum readTarget,
+                                                 GLenum writeTarget,
+                                                 GLintptr readOffset,
+                                                 GLintptr writeOffset,
+                                                 GLsizeiptr size)
+{
+    return gl::CopyBufferSubDataContextANGLE(ctx, readTarget, writeTarget, readOffset, writeOffset,
+                                             size);
+}
+
+void GL_APIENTRY glCopyTexImage2DContextANGLE(GLeglContext ctx,
+                                              GLenum target,
+                                              GLint level,
+                                              GLenum internalformat,
+                                              GLint x,
+                                              GLint y,
+                                              GLsizei width,
+                                              GLsizei height,
+                                              GLint border)
+{
+    return gl::CopyTexImage2DContextANGLE(ctx, target, level, internalformat, x, y, width, height,
+                                          border);
+}
+
+void GL_APIENTRY glCopyTexSubImage2DContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLint level,
+                                                 GLint xoffset,
+                                                 GLint yoffset,
+                                                 GLint x,
+                                                 GLint y,
+                                                 GLsizei width,
+                                                 GLsizei height)
+{
+    return gl::CopyTexSubImage2DContextANGLE(ctx, target, level, xoffset, yoffset, x, y, width,
+                                             height);
+}
+
+void GL_APIENTRY glCopyTexSubImage3DContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLint level,
+                                                 GLint xoffset,
+                                                 GLint yoffset,
+                                                 GLint zoffset,
+                                                 GLint x,
+                                                 GLint y,
+                                                 GLsizei width,
+                                                 GLsizei height)
+{
+    return gl::CopyTexSubImage3DContextANGLE(ctx, target, level, xoffset, yoffset, zoffset, x, y,
+                                             width, height);
+}
+
+GLuint GL_APIENTRY glCreateProgramContextANGLE(GLeglContext ctx)
+{
+    return gl::CreateProgramContextANGLE(ctx);
+}
+
+GLuint GL_APIENTRY glCreateShaderContextANGLE(GLeglContext ctx, GLenum type)
+{
+    return gl::CreateShaderContextANGLE(ctx, type);
+}
+
+GLuint GL_APIENTRY glCreateShaderProgramvContextANGLE(GLeglContext ctx,
+                                                      GLenum type,
+                                                      GLsizei count,
+                                                      const GLchar *const *strings)
+{
+    return gl::CreateShaderProgramvContextANGLE(ctx, type, count, strings);
+}
+
+void GL_APIENTRY glCullFaceContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    return gl::CullFaceContextANGLE(ctx, mode);
+}
+
+void GL_APIENTRY glCurrentPaletteMatrixOESContextANGLE(GLeglContext ctx, GLuint matrixpaletteindex)
+{
+    return gl::CurrentPaletteMatrixOESContextANGLE(ctx, matrixpaletteindex);
+}
+
+void GL_APIENTRY glDebugMessageCallbackKHRContextANGLE(GLeglContext ctx,
+                                                       GLDEBUGPROCKHR callback,
+                                                       const void *userParam)
+{
+    return gl::DebugMessageCallbackKHRContextANGLE(ctx, callback, userParam);
+}
+
+void GL_APIENTRY glDebugMessageControlKHRContextANGLE(GLeglContext ctx,
+                                                      GLenum source,
+                                                      GLenum type,
+                                                      GLenum severity,
+                                                      GLsizei count,
+                                                      const GLuint *ids,
+                                                      GLboolean enabled)
+{
+    return gl::DebugMessageControlKHRContextANGLE(ctx, source, type, severity, count, ids, enabled);
+}
+
+void GL_APIENTRY glDebugMessageInsertKHRContextANGLE(GLeglContext ctx,
+                                                     GLenum source,
+                                                     GLenum type,
+                                                     GLuint id,
+                                                     GLenum severity,
+                                                     GLsizei length,
+                                                     const GLchar *buf)
+{
+    return gl::DebugMessageInsertKHRContextANGLE(ctx, source, type, id, severity, length, buf);
+}
+
+void GL_APIENTRY glDeleteBuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *buffers)
+{
+    return gl::DeleteBuffersContextANGLE(ctx, n, buffers);
+}
+
+void GL_APIENTRY glDeleteFencesNVContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *fences)
+{
+    return gl::DeleteFencesNVContextANGLE(ctx, n, fences);
+}
+
+void GL_APIENTRY glDeleteFramebuffersContextANGLE(GLeglContext ctx,
+                                                  GLsizei n,
+                                                  const GLuint *framebuffers)
+{
+    return gl::DeleteFramebuffersContextANGLE(ctx, n, framebuffers);
+}
+
+void GL_APIENTRY glDeleteFramebuffersOESContextANGLE(GLeglContext ctx,
+                                                     GLsizei n,
+                                                     const GLuint *framebuffers)
+{
+    return gl::DeleteFramebuffersOESContextANGLE(ctx, n, framebuffers);
+}
+
+void GL_APIENTRY glDeleteProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    return gl::DeleteProgramContextANGLE(ctx, program);
+}
+
+void GL_APIENTRY glDeleteProgramPipelinesContextANGLE(GLeglContext ctx,
+                                                      GLsizei n,
+                                                      const GLuint *pipelines)
+{
+    return gl::DeleteProgramPipelinesContextANGLE(ctx, n, pipelines);
+}
+
+void GL_APIENTRY glDeleteQueriesContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids)
+{
+    return gl::DeleteQueriesContextANGLE(ctx, n, ids);
+}
+
+void GL_APIENTRY glDeleteQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *ids)
+{
+    return gl::DeleteQueriesEXTContextANGLE(ctx, n, ids);
+}
+
+void GL_APIENTRY glDeleteRenderbuffersContextANGLE(GLeglContext ctx,
+                                                   GLsizei n,
+                                                   const GLuint *renderbuffers)
+{
+    return gl::DeleteRenderbuffersContextANGLE(ctx, n, renderbuffers);
+}
+
+void GL_APIENTRY glDeleteRenderbuffersOESContextANGLE(GLeglContext ctx,
+                                                      GLsizei n,
+                                                      const GLuint *renderbuffers)
+{
+    return gl::DeleteRenderbuffersOESContextANGLE(ctx, n, renderbuffers);
+}
+
+void GL_APIENTRY glDeleteSamplersContextANGLE(GLeglContext ctx,
+                                              GLsizei count,
+                                              const GLuint *samplers)
+{
+    return gl::DeleteSamplersContextANGLE(ctx, count, samplers);
+}
+
+void GL_APIENTRY glDeleteShaderContextANGLE(GLeglContext ctx, GLuint shader)
+{
+    return gl::DeleteShaderContextANGLE(ctx, shader);
+}
+
+void GL_APIENTRY glDeleteSyncContextANGLE(GLeglContext ctx, GLsync sync)
+{
+    return gl::DeleteSyncContextANGLE(ctx, sync);
+}
+
+void GL_APIENTRY glDeleteTexturesContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *textures)
+{
+    return gl::DeleteTexturesContextANGLE(ctx, n, textures);
+}
+
+void GL_APIENTRY glDeleteTransformFeedbacksContextANGLE(GLeglContext ctx,
+                                                        GLsizei n,
+                                                        const GLuint *ids)
+{
+    return gl::DeleteTransformFeedbacksContextANGLE(ctx, n, ids);
+}
+
+void GL_APIENTRY glDeleteVertexArraysContextANGLE(GLeglContext ctx, GLsizei n, const GLuint *arrays)
+{
+    return gl::DeleteVertexArraysContextANGLE(ctx, n, arrays);
+}
+
+void GL_APIENTRY glDeleteVertexArraysOESContextANGLE(GLeglContext ctx,
+                                                     GLsizei n,
+                                                     const GLuint *arrays)
+{
+    return gl::DeleteVertexArraysOESContextANGLE(ctx, n, arrays);
+}
+
+void GL_APIENTRY glDepthFuncContextANGLE(GLeglContext ctx, GLenum func)
+{
+    return gl::DepthFuncContextANGLE(ctx, func);
+}
+
+void GL_APIENTRY glDepthMaskContextANGLE(GLeglContext ctx, GLboolean flag)
+{
+    return gl::DepthMaskContextANGLE(ctx, flag);
+}
+
+void GL_APIENTRY glDepthRangefContextANGLE(GLeglContext ctx, GLfloat n, GLfloat f)
+{
+    return gl::DepthRangefContextANGLE(ctx, n, f);
+}
+
+void GL_APIENTRY glDepthRangexContextANGLE(GLeglContext ctx, GLfixed n, GLfixed f)
+{
+    return gl::DepthRangexContextANGLE(ctx, n, f);
+}
+
+void GL_APIENTRY glDetachShaderContextANGLE(GLeglContext ctx, GLuint program, GLuint shader)
+{
+    return gl::DetachShaderContextANGLE(ctx, program, shader);
+}
+
+void GL_APIENTRY glDisableContextANGLE(GLeglContext ctx, GLenum cap)
+{
+    return gl::DisableContextANGLE(ctx, cap);
+}
+
+void GL_APIENTRY glDisableClientStateContextANGLE(GLeglContext ctx, GLenum array)
+{
+    return gl::DisableClientStateContextANGLE(ctx, array);
+}
+
+void GL_APIENTRY glDisableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index)
+{
+    return gl::DisableVertexAttribArrayContextANGLE(ctx, index);
+}
+
+void GL_APIENTRY glDiscardFramebufferEXTContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLsizei numAttachments,
+                                                     const GLenum *attachments)
+{
+    return gl::DiscardFramebufferEXTContextANGLE(ctx, target, numAttachments, attachments);
+}
+
+void GL_APIENTRY glDispatchComputeContextANGLE(GLeglContext ctx,
+                                               GLuint num_groups_x,
+                                               GLuint num_groups_y,
+                                               GLuint num_groups_z)
+{
+    return gl::DispatchComputeContextANGLE(ctx, num_groups_x, num_groups_y, num_groups_z);
+}
+
+void GL_APIENTRY glDispatchComputeIndirectContextANGLE(GLeglContext ctx, GLintptr indirect)
+{
+    return gl::DispatchComputeIndirectContextANGLE(ctx, indirect);
+}
+
+void GL_APIENTRY glDrawArraysContextANGLE(GLeglContext ctx, GLenum mode, GLint first, GLsizei count)
+{
+    return gl::DrawArraysContextANGLE(ctx, mode, first, count);
+}
+
+void GL_APIENTRY glDrawArraysIndirectContextANGLE(GLeglContext ctx,
+                                                  GLenum mode,
+                                                  const void *indirect)
+{
+    return gl::DrawArraysIndirectContextANGLE(ctx, mode, indirect);
+}
+
+void GL_APIENTRY glDrawArraysInstancedContextANGLE(GLeglContext ctx,
+                                                   GLenum mode,
+                                                   GLint first,
+                                                   GLsizei count,
+                                                   GLsizei instancecount)
+{
+    return gl::DrawArraysInstancedContextANGLE(ctx, mode, first, count, instancecount);
+}
+
+void GL_APIENTRY glDrawArraysInstancedANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum mode,
+                                                        GLint first,
+                                                        GLsizei count,
+                                                        GLsizei primcount)
+{
+    return gl::DrawArraysInstancedANGLEContextANGLE(ctx, mode, first, count, primcount);
+}
+
+void GL_APIENTRY glDrawBuffersContextANGLE(GLeglContext ctx, GLsizei n, const GLenum *bufs)
+{
+    return gl::DrawBuffersContextANGLE(ctx, n, bufs);
+}
+
+void GL_APIENTRY glDrawBuffersEXTContextANGLE(GLeglContext ctx, GLsizei n, const GLenum *bufs)
+{
+    return gl::DrawBuffersEXTContextANGLE(ctx, n, bufs);
+}
+
+void GL_APIENTRY glDrawElementsContextANGLE(GLeglContext ctx,
+                                            GLenum mode,
+                                            GLsizei count,
+                                            GLenum type,
+                                            const void *indices)
+{
+    return gl::DrawElementsContextANGLE(ctx, mode, count, type, indices);
+}
+
+void GL_APIENTRY glDrawElementsIndirectContextANGLE(GLeglContext ctx,
+                                                    GLenum mode,
+                                                    GLenum type,
+                                                    const void *indirect)
+{
+    return gl::DrawElementsIndirectContextANGLE(ctx, mode, type, indirect);
+}
+
+void GL_APIENTRY glDrawElementsInstancedContextANGLE(GLeglContext ctx,
+                                                     GLenum mode,
+                                                     GLsizei count,
+                                                     GLenum type,
+                                                     const void *indices,
+                                                     GLsizei instancecount)
+{
+    return gl::DrawElementsInstancedContextANGLE(ctx, mode, count, type, indices, instancecount);
+}
+
+void GL_APIENTRY glDrawElementsInstancedANGLEContextANGLE(GLeglContext ctx,
+                                                          GLenum mode,
+                                                          GLsizei count,
+                                                          GLenum type,
+                                                          const void *indices,
+                                                          GLsizei primcount)
+{
+    return gl::DrawElementsInstancedANGLEContextANGLE(ctx, mode, count, type, indices, primcount);
+}
+
+void GL_APIENTRY glDrawRangeElementsContextANGLE(GLeglContext ctx,
+                                                 GLenum mode,
+                                                 GLuint start,
+                                                 GLuint end,
+                                                 GLsizei count,
+                                                 GLenum type,
+                                                 const void *indices)
+{
+    return gl::DrawRangeElementsContextANGLE(ctx, mode, start, end, count, type, indices);
+}
+
+void GL_APIENTRY glDrawTexfOESContextANGLE(GLeglContext ctx,
+                                           GLfloat x,
+                                           GLfloat y,
+                                           GLfloat z,
+                                           GLfloat width,
+                                           GLfloat height)
+{
+    return gl::DrawTexfOESContextANGLE(ctx, x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexfvOESContextANGLE(GLeglContext ctx, const GLfloat *coords)
+{
+    return gl::DrawTexfvOESContextANGLE(ctx, coords);
+}
+
+void GL_APIENTRY
+glDrawTexiOESContextANGLE(GLeglContext ctx, GLint x, GLint y, GLint z, GLint width, GLint height)
+{
+    return gl::DrawTexiOESContextANGLE(ctx, x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexivOESContextANGLE(GLeglContext ctx, const GLint *coords)
+{
+    return gl::DrawTexivOESContextANGLE(ctx, coords);
+}
+
+void GL_APIENTRY glDrawTexsOESContextANGLE(GLeglContext ctx,
+                                           GLshort x,
+                                           GLshort y,
+                                           GLshort z,
+                                           GLshort width,
+                                           GLshort height)
+{
+    return gl::DrawTexsOESContextANGLE(ctx, x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexsvOESContextANGLE(GLeglContext ctx, const GLshort *coords)
+{
+    return gl::DrawTexsvOESContextANGLE(ctx, coords);
+}
+
+void GL_APIENTRY glDrawTexxOESContextANGLE(GLeglContext ctx,
+                                           GLfixed x,
+                                           GLfixed y,
+                                           GLfixed z,
+                                           GLfixed width,
+                                           GLfixed height)
+{
+    return gl::DrawTexxOESContextANGLE(ctx, x, y, z, width, height);
+}
+
+void GL_APIENTRY glDrawTexxvOESContextANGLE(GLeglContext ctx, const GLfixed *coords)
+{
+    return gl::DrawTexxvOESContextANGLE(ctx, coords);
+}
+
+void GL_APIENTRY glEGLImageTargetRenderbufferStorageOESContextANGLE(GLeglContext ctx,
+                                                                    GLenum target,
+                                                                    GLeglImageOES image)
+{
+    return gl::EGLImageTargetRenderbufferStorageOESContextANGLE(ctx, target, image);
+}
+
+void GL_APIENTRY glEGLImageTargetTexture2DOESContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLeglImageOES image)
+{
+    return gl::EGLImageTargetTexture2DOESContextANGLE(ctx, target, image);
+}
+
+void GL_APIENTRY glEnableContextANGLE(GLeglContext ctx, GLenum cap)
+{
+    return gl::EnableContextANGLE(ctx, cap);
+}
+
+void GL_APIENTRY glEnableClientStateContextANGLE(GLeglContext ctx, GLenum array)
+{
+    return gl::EnableClientStateContextANGLE(ctx, array);
+}
+
+void GL_APIENTRY glEnableVertexAttribArrayContextANGLE(GLeglContext ctx, GLuint index)
+{
+    return gl::EnableVertexAttribArrayContextANGLE(ctx, index);
+}
+
+void GL_APIENTRY glEndQueryContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::EndQueryContextANGLE(ctx, target);
+}
+
+void GL_APIENTRY glEndQueryEXTContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::EndQueryEXTContextANGLE(ctx, target);
+}
+
+void GL_APIENTRY glEndTransformFeedbackContextANGLE(GLeglContext ctx)
+{
+    return gl::EndTransformFeedbackContextANGLE(ctx);
+}
+
+GLsync GL_APIENTRY glFenceSyncContextANGLE(GLeglContext ctx, GLenum condition, GLbitfield flags)
+{
+    return gl::FenceSyncContextANGLE(ctx, condition, flags);
+}
+
+void GL_APIENTRY glFinishContextANGLE(GLeglContext ctx)
+{
+    return gl::FinishContextANGLE(ctx);
+}
+
+void GL_APIENTRY glFinishFenceNVContextANGLE(GLeglContext ctx, GLuint fence)
+{
+    return gl::FinishFenceNVContextANGLE(ctx, fence);
+}
+
+void GL_APIENTRY glFlushContextANGLE(GLeglContext ctx)
+{
+    return gl::FlushContextANGLE(ctx);
+}
+
+void GL_APIENTRY glFlushMappedBufferRangeContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLintptr offset,
+                                                      GLsizeiptr length)
+{
+    return gl::FlushMappedBufferRangeContextANGLE(ctx, target, offset, length);
+}
+
+void GL_APIENTRY glFlushMappedBufferRangeEXTContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLintptr offset,
+                                                         GLsizeiptr length)
+{
+    return gl::FlushMappedBufferRangeEXTContextANGLE(ctx, target, offset, length);
+}
+
+void GL_APIENTRY glFogfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param)
+{
+    return gl::FogfContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glFogfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params)
+{
+    return gl::FogfvContextANGLE(ctx, pname, params);
+}
+
+void GL_APIENTRY glFogxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param)
+{
+    return gl::FogxContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glFogxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *param)
+{
+    return gl::FogxvContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glFramebufferParameteriContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLenum pname,
+                                                     GLint param)
+{
+    return gl::FramebufferParameteriContextANGLE(ctx, target, pname, param);
+}
+
+void GL_APIENTRY glFramebufferRenderbufferContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum attachment,
+                                                       GLenum renderbuffertarget,
+                                                       GLuint renderbuffer)
+{
+    return gl::FramebufferRenderbufferContextANGLE(ctx, target, attachment, renderbuffertarget,
+                                                   renderbuffer);
+}
+
+void GL_APIENTRY glFramebufferRenderbufferOESContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLenum attachment,
+                                                          GLenum renderbuffertarget,
+                                                          GLuint renderbuffer)
+{
+    return gl::FramebufferRenderbufferOESContextANGLE(ctx, target, attachment, renderbuffertarget,
+                                                      renderbuffer);
+}
+
+void GL_APIENTRY glFramebufferTexture2DContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLenum attachment,
+                                                    GLenum textarget,
+                                                    GLuint texture,
+                                                    GLint level)
+{
+    return gl::FramebufferTexture2DContextANGLE(ctx, target, attachment, textarget, texture, level);
+}
+
+void GL_APIENTRY glFramebufferTexture2DOESContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum attachment,
+                                                       GLenum textarget,
+                                                       GLuint texture,
+                                                       GLint level)
+{
+    return gl::FramebufferTexture2DOESContextANGLE(ctx, target, attachment, textarget, texture,
+                                                   level);
+}
+
+void GL_APIENTRY glFramebufferTextureLayerContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLenum attachment,
+                                                       GLuint texture,
+                                                       GLint level,
+                                                       GLint layer)
+{
+    return gl::FramebufferTextureLayerContextANGLE(ctx, target, attachment, texture, level, layer);
+}
+
+void GL_APIENTRY glFrontFaceContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    return gl::FrontFaceContextANGLE(ctx, mode);
+}
+
+void GL_APIENTRY glFrustumfContextANGLE(GLeglContext ctx,
+                                        GLfloat l,
+                                        GLfloat r,
+                                        GLfloat b,
+                                        GLfloat t,
+                                        GLfloat n,
+                                        GLfloat f)
+{
+    return gl::FrustumfContextANGLE(ctx, l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glFrustumxContextANGLE(GLeglContext ctx,
+                                        GLfixed l,
+                                        GLfixed r,
+                                        GLfixed b,
+                                        GLfixed t,
+                                        GLfixed n,
+                                        GLfixed f)
+{
+    return gl::FrustumxContextANGLE(ctx, l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glGenBuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *buffers)
+{
+    return gl::GenBuffersContextANGLE(ctx, n, buffers);
+}
+
+void GL_APIENTRY glGenFencesNVContextANGLE(GLeglContext ctx, GLsizei n, GLuint *fences)
+{
+    return gl::GenFencesNVContextANGLE(ctx, n, fences);
+}
+
+void GL_APIENTRY glGenFramebuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *framebuffers)
+{
+    return gl::GenFramebuffersContextANGLE(ctx, n, framebuffers);
+}
+
+void GL_APIENTRY glGenFramebuffersOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *framebuffers)
+{
+    return gl::GenFramebuffersOESContextANGLE(ctx, n, framebuffers);
+}
+
+void GL_APIENTRY glGenProgramPipelinesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *pipelines)
+{
+    return gl::GenProgramPipelinesContextANGLE(ctx, n, pipelines);
+}
+
+void GL_APIENTRY glGenQueriesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids)
+{
+    return gl::GenQueriesContextANGLE(ctx, n, ids);
+}
+
+void GL_APIENTRY glGenQueriesEXTContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids)
+{
+    return gl::GenQueriesEXTContextANGLE(ctx, n, ids);
+}
+
+void GL_APIENTRY glGenRenderbuffersContextANGLE(GLeglContext ctx, GLsizei n, GLuint *renderbuffers)
+{
+    return gl::GenRenderbuffersContextANGLE(ctx, n, renderbuffers);
+}
+
+void GL_APIENTRY glGenRenderbuffersOESContextANGLE(GLeglContext ctx,
+                                                   GLsizei n,
+                                                   GLuint *renderbuffers)
+{
+    return gl::GenRenderbuffersOESContextANGLE(ctx, n, renderbuffers);
+}
+
+void GL_APIENTRY glGenSamplersContextANGLE(GLeglContext ctx, GLsizei count, GLuint *samplers)
+{
+    return gl::GenSamplersContextANGLE(ctx, count, samplers);
+}
+
+void GL_APIENTRY glGenTexturesContextANGLE(GLeglContext ctx, GLsizei n, GLuint *textures)
+{
+    return gl::GenTexturesContextANGLE(ctx, n, textures);
+}
+
+void GL_APIENTRY glGenTransformFeedbacksContextANGLE(GLeglContext ctx, GLsizei n, GLuint *ids)
+{
+    return gl::GenTransformFeedbacksContextANGLE(ctx, n, ids);
+}
+
+void GL_APIENTRY glGenVertexArraysContextANGLE(GLeglContext ctx, GLsizei n, GLuint *arrays)
+{
+    return gl::GenVertexArraysContextANGLE(ctx, n, arrays);
+}
+
+void GL_APIENTRY glGenVertexArraysOESContextANGLE(GLeglContext ctx, GLsizei n, GLuint *arrays)
+{
+    return gl::GenVertexArraysOESContextANGLE(ctx, n, arrays);
+}
+
+void GL_APIENTRY glGenerateMipmapContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::GenerateMipmapContextANGLE(ctx, target);
+}
+
+void GL_APIENTRY glGenerateMipmapOESContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::GenerateMipmapOESContextANGLE(ctx, target);
+}
+
+void GL_APIENTRY glGetActiveAttribContextANGLE(GLeglContext ctx,
+                                               GLuint program,
+                                               GLuint index,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLint *size,
+                                               GLenum *type,
+                                               GLchar *name)
+{
+    return gl::GetActiveAttribContextANGLE(ctx, program, index, bufSize, length, size, type, name);
+}
+
+void GL_APIENTRY glGetActiveUniformContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLuint index,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLint *size,
+                                                GLenum *type,
+                                                GLchar *name)
+{
+    return gl::GetActiveUniformContextANGLE(ctx, program, index, bufSize, length, size, type, name);
+}
+
+void GL_APIENTRY glGetActiveUniformBlockNameContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLuint uniformBlockIndex,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLchar *uniformBlockName)
+{
+    return gl::GetActiveUniformBlockNameContextANGLE(ctx, program, uniformBlockIndex, bufSize,
+                                                     length, uniformBlockName);
+}
+
+void GL_APIENTRY glGetActiveUniformBlockivContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLuint uniformBlockIndex,
+                                                       GLenum pname,
+                                                       GLint *params)
+{
+    return gl::GetActiveUniformBlockivContextANGLE(ctx, program, uniformBlockIndex, pname, params);
+}
+
+void GL_APIENTRY glGetActiveUniformsivContextANGLE(GLeglContext ctx,
+                                                   GLuint program,
+                                                   GLsizei uniformCount,
+                                                   const GLuint *uniformIndices,
+                                                   GLenum pname,
+                                                   GLint *params)
+{
+    return gl::GetActiveUniformsivContextANGLE(ctx, program, uniformCount, uniformIndices, pname,
+                                               params);
+}
+
+void GL_APIENTRY glGetAttachedShadersContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  GLsizei maxCount,
+                                                  GLsizei *count,
+                                                  GLuint *shaders)
+{
+    return gl::GetAttachedShadersContextANGLE(ctx, program, maxCount, count, shaders);
+}
+
+GLint GL_APIENTRY glGetAttribLocationContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  const GLchar *name)
+{
+    return gl::GetAttribLocationContextANGLE(ctx, program, name);
+}
+
+void GL_APIENTRY glGetBooleani_vContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLuint index,
+                                             GLboolean *data)
+{
+    return gl::GetBooleani_vContextANGLE(ctx, target, index, data);
+}
+
+void GL_APIENTRY glGetBooleanvContextANGLE(GLeglContext ctx, GLenum pname, GLboolean *data)
+{
+    return gl::GetBooleanvContextANGLE(ctx, pname, data);
+}
+
+void GL_APIENTRY glGetBufferParameteri64vContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLenum pname,
+                                                      GLint64 *params)
+{
+    return gl::GetBufferParameteri64vContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetBufferParameterivContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLenum pname,
+                                                    GLint *params)
+{
+    return gl::GetBufferParameterivContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetBufferPointervContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLenum pname,
+                                                 void **params)
+{
+    return gl::GetBufferPointervContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetBufferPointervOESContextANGLE(GLeglContext ctx,
+                                                    GLenum target,
+                                                    GLenum pname,
+                                                    void **params)
+{
+    return gl::GetBufferPointervOESContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetClipPlanefContextANGLE(GLeglContext ctx, GLenum plane, GLfloat *equation)
+{
+    return gl::GetClipPlanefContextANGLE(ctx, plane, equation);
+}
+
+void GL_APIENTRY glGetClipPlanexContextANGLE(GLeglContext ctx, GLenum plane, GLfixed *equation)
+{
+    return gl::GetClipPlanexContextANGLE(ctx, plane, equation);
+}
+
+GLuint GL_APIENTRY glGetDebugMessageLogKHRContextANGLE(GLeglContext ctx,
+                                                       GLuint count,
+                                                       GLsizei bufSize,
+                                                       GLenum *sources,
+                                                       GLenum *types,
+                                                       GLuint *ids,
+                                                       GLenum *severities,
+                                                       GLsizei *lengths,
+                                                       GLchar *messageLog)
+{
+    return gl::GetDebugMessageLogKHRContextANGLE(ctx, count, bufSize, sources, types, ids,
+                                                 severities, lengths, messageLog);
+}
+
+GLenum GL_APIENTRY glGetErrorContextANGLE(GLeglContext ctx)
+{
+    return gl::GetErrorContextANGLE(ctx);
+}
+
+void GL_APIENTRY glGetFenceivNVContextANGLE(GLeglContext ctx,
+                                            GLuint fence,
+                                            GLenum pname,
+                                            GLint *params)
+{
+    return gl::GetFenceivNVContextANGLE(ctx, fence, pname, params);
+}
+
+void GL_APIENTRY glGetFixedvContextANGLE(GLeglContext ctx, GLenum pname, GLfixed *params)
+{
+    return gl::GetFixedvContextANGLE(ctx, pname, params);
+}
+
+void GL_APIENTRY glGetFloatvContextANGLE(GLeglContext ctx, GLenum pname, GLfloat *data)
+{
+    return gl::GetFloatvContextANGLE(ctx, pname, data);
+}
+
+GLint GL_APIENTRY glGetFragDataLocationContextANGLE(GLeglContext ctx,
+                                                    GLuint program,
+                                                    const GLchar *name)
+{
+    return gl::GetFragDataLocationContextANGLE(ctx, program, name);
+}
+
+void GL_APIENTRY glGetFramebufferAttachmentParameterivContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLenum attachment,
+                                                                   GLenum pname,
+                                                                   GLint *params)
+{
+    return gl::GetFramebufferAttachmentParameterivContextANGLE(ctx, target, attachment, pname,
+                                                               params);
+}
+
+void GL_APIENTRY glGetFramebufferAttachmentParameterivOESContextANGLE(GLeglContext ctx,
+                                                                      GLenum target,
+                                                                      GLenum attachment,
+                                                                      GLenum pname,
+                                                                      GLint *params)
+{
+    return gl::GetFramebufferAttachmentParameterivOESContextANGLE(ctx, target, attachment, pname,
+                                                                  params);
+}
+
+void GL_APIENTRY glGetFramebufferParameterivContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum pname,
+                                                         GLint *params)
+{
+    return gl::GetFramebufferParameterivContextANGLE(ctx, target, pname, params);
+}
+
+GLenum GL_APIENTRY glGetGraphicsResetStatusEXTContextANGLE(GLeglContext ctx)
+{
+    return gl::GetGraphicsResetStatusEXTContextANGLE(ctx);
+}
+
+void GL_APIENTRY glGetInteger64i_vContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLuint index,
+                                               GLint64 *data)
+{
+    return gl::GetInteger64i_vContextANGLE(ctx, target, index, data);
+}
+
+void GL_APIENTRY glGetInteger64vContextANGLE(GLeglContext ctx, GLenum pname, GLint64 *data)
+{
+    return gl::GetInteger64vContextANGLE(ctx, pname, data);
+}
+
+void GL_APIENTRY glGetIntegeri_vContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLuint index,
+                                             GLint *data)
+{
+    return gl::GetIntegeri_vContextANGLE(ctx, target, index, data);
+}
+
+void GL_APIENTRY glGetIntegervContextANGLE(GLeglContext ctx, GLenum pname, GLint *data)
+{
+    return gl::GetIntegervContextANGLE(ctx, pname, data);
+}
+
+void GL_APIENTRY glGetInternalformativContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLenum internalformat,
+                                                   GLenum pname,
+                                                   GLsizei bufSize,
+                                                   GLint *params)
+{
+    return gl::GetInternalformativContextANGLE(ctx, target, internalformat, pname, bufSize, params);
+}
+
+void GL_APIENTRY glGetLightfvContextANGLE(GLeglContext ctx,
+                                          GLenum light,
+                                          GLenum pname,
+                                          GLfloat *params)
+{
+    return gl::GetLightfvContextANGLE(ctx, light, pname, params);
+}
+
+void GL_APIENTRY glGetLightxvContextANGLE(GLeglContext ctx,
+                                          GLenum light,
+                                          GLenum pname,
+                                          GLfixed *params)
+{
+    return gl::GetLightxvContextANGLE(ctx, light, pname, params);
+}
+
+void GL_APIENTRY glGetMaterialfvContextANGLE(GLeglContext ctx,
+                                             GLenum face,
+                                             GLenum pname,
+                                             GLfloat *params)
+{
+    return gl::GetMaterialfvContextANGLE(ctx, face, pname, params);
+}
+
+void GL_APIENTRY glGetMaterialxvContextANGLE(GLeglContext ctx,
+                                             GLenum face,
+                                             GLenum pname,
+                                             GLfixed *params)
+{
+    return gl::GetMaterialxvContextANGLE(ctx, face, pname, params);
+}
+
+void GL_APIENTRY glGetMultisamplefvContextANGLE(GLeglContext ctx,
+                                                GLenum pname,
+                                                GLuint index,
+                                                GLfloat *val)
+{
+    return gl::GetMultisamplefvContextANGLE(ctx, pname, index, val);
+}
+
+void GL_APIENTRY glGetObjectLabelKHRContextANGLE(GLeglContext ctx,
+                                                 GLenum identifier,
+                                                 GLuint name,
+                                                 GLsizei bufSize,
+                                                 GLsizei *length,
+                                                 GLchar *label)
+{
+    return gl::GetObjectLabelKHRContextANGLE(ctx, identifier, name, bufSize, length, label);
+}
+
+void GL_APIENTRY glGetObjectPtrLabelKHRContextANGLE(GLeglContext ctx,
+                                                    const void *ptr,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLchar *label)
+{
+    return gl::GetObjectPtrLabelKHRContextANGLE(ctx, ptr, bufSize, length, label);
+}
+
+void GL_APIENTRY glGetPointervContextANGLE(GLeglContext ctx, GLenum pname, void **params)
+{
+    return gl::GetPointervContextANGLE(ctx, pname, params);
+}
+
+void GL_APIENTRY glGetPointervKHRContextANGLE(GLeglContext ctx, GLenum pname, void **params)
+{
+    return gl::GetPointervKHRContextANGLE(ctx, pname, params);
+}
+
+void GL_APIENTRY glGetProgramBinaryContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLenum *binaryFormat,
+                                                void *binary)
+{
+    return gl::GetProgramBinaryContextANGLE(ctx, program, bufSize, length, binaryFormat, binary);
+}
+
+void GL_APIENTRY glGetProgramBinaryOESContextANGLE(GLeglContext ctx,
+                                                   GLuint program,
+                                                   GLsizei bufSize,
+                                                   GLsizei *length,
+                                                   GLenum *binaryFormat,
+                                                   void *binary)
+{
+    return gl::GetProgramBinaryOESContextANGLE(ctx, program, bufSize, length, binaryFormat, binary);
+}
+
+void GL_APIENTRY glGetProgramInfoLogContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLsizei bufSize,
+                                                 GLsizei *length,
+                                                 GLchar *infoLog)
+{
+    return gl::GetProgramInfoLogContextANGLE(ctx, program, bufSize, length, infoLog);
+}
+
+void GL_APIENTRY glGetProgramInterfaceivContextANGLE(GLeglContext ctx,
+                                                     GLuint program,
+                                                     GLenum programInterface,
+                                                     GLenum pname,
+                                                     GLint *params)
+{
+    return gl::GetProgramInterfaceivContextANGLE(ctx, program, programInterface, pname, params);
+}
+
+void GL_APIENTRY glGetProgramPipelineInfoLogContextANGLE(GLeglContext ctx,
+                                                         GLuint pipeline,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLchar *infoLog)
+{
+    return gl::GetProgramPipelineInfoLogContextANGLE(ctx, pipeline, bufSize, length, infoLog);
+}
+
+void GL_APIENTRY glGetProgramPipelineivContextANGLE(GLeglContext ctx,
+                                                    GLuint pipeline,
+                                                    GLenum pname,
+                                                    GLint *params)
+{
+    return gl::GetProgramPipelineivContextANGLE(ctx, pipeline, pname, params);
+}
+
+GLuint GL_APIENTRY glGetProgramResourceIndexContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLenum programInterface,
+                                                         const GLchar *name)
+{
+    return gl::GetProgramResourceIndexContextANGLE(ctx, program, programInterface, name);
+}
+
+GLint GL_APIENTRY glGetProgramResourceLocationContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLenum programInterface,
+                                                           const GLchar *name)
+{
+    return gl::GetProgramResourceLocationContextANGLE(ctx, program, programInterface, name);
+}
+
+void GL_APIENTRY glGetProgramResourceNameContextANGLE(GLeglContext ctx,
+                                                      GLuint program,
+                                                      GLenum programInterface,
+                                                      GLuint index,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLchar *name)
+{
+    return gl::GetProgramResourceNameContextANGLE(ctx, program, programInterface, index, bufSize,
+                                                  length, name);
+}
+
+void GL_APIENTRY glGetProgramResourceivContextANGLE(GLeglContext ctx,
+                                                    GLuint program,
+                                                    GLenum programInterface,
+                                                    GLuint index,
+                                                    GLsizei propCount,
+                                                    const GLenum *props,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLint *params)
+{
+    return gl::GetProgramResourceivContextANGLE(ctx, program, programInterface, index, propCount,
+                                                props, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetProgramivContextANGLE(GLeglContext ctx,
+                                            GLuint program,
+                                            GLenum pname,
+                                            GLint *params)
+{
+    return gl::GetProgramivContextANGLE(ctx, program, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjecti64vEXTContextANGLE(GLeglContext ctx,
+                                                     GLuint id,
+                                                     GLenum pname,
+                                                     GLint64 *params)
+{
+    return gl::GetQueryObjecti64vEXTContextANGLE(ctx, id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjectivEXTContextANGLE(GLeglContext ctx,
+                                                   GLuint id,
+                                                   GLenum pname,
+                                                   GLint *params)
+{
+    return gl::GetQueryObjectivEXTContextANGLE(ctx, id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjectui64vEXTContextANGLE(GLeglContext ctx,
+                                                      GLuint id,
+                                                      GLenum pname,
+                                                      GLuint64 *params)
+{
+    return gl::GetQueryObjectui64vEXTContextANGLE(ctx, id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjectuivContextANGLE(GLeglContext ctx,
+                                                 GLuint id,
+                                                 GLenum pname,
+                                                 GLuint *params)
+{
+    return gl::GetQueryObjectuivContextANGLE(ctx, id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryObjectuivEXTContextANGLE(GLeglContext ctx,
+                                                    GLuint id,
+                                                    GLenum pname,
+                                                    GLuint *params)
+{
+    return gl::GetQueryObjectuivEXTContextANGLE(ctx, id, pname, params);
+}
+
+void GL_APIENTRY glGetQueryivContextANGLE(GLeglContext ctx,
+                                          GLenum target,
+                                          GLenum pname,
+                                          GLint *params)
+{
+    return gl::GetQueryivContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetQueryivEXTContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLenum pname,
+                                             GLint *params)
+{
+    return gl::GetQueryivEXTContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetRenderbufferParameterivContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLenum pname,
+                                                          GLint *params)
+{
+    return gl::GetRenderbufferParameterivContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetRenderbufferParameterivOESContextANGLE(GLeglContext ctx,
+                                                             GLenum target,
+                                                             GLenum pname,
+                                                             GLint *params)
+{
+    return gl::GetRenderbufferParameterivOESContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetSamplerParameterfvContextANGLE(GLeglContext ctx,
+                                                     GLuint sampler,
+                                                     GLenum pname,
+                                                     GLfloat *params)
+{
+    return gl::GetSamplerParameterfvContextANGLE(ctx, sampler, pname, params);
+}
+
+void GL_APIENTRY glGetSamplerParameterivContextANGLE(GLeglContext ctx,
+                                                     GLuint sampler,
+                                                     GLenum pname,
+                                                     GLint *params)
+{
+    return gl::GetSamplerParameterivContextANGLE(ctx, sampler, pname, params);
+}
+
+void GL_APIENTRY glGetShaderInfoLogContextANGLE(GLeglContext ctx,
+                                                GLuint shader,
+                                                GLsizei bufSize,
+                                                GLsizei *length,
+                                                GLchar *infoLog)
+{
+    return gl::GetShaderInfoLogContextANGLE(ctx, shader, bufSize, length, infoLog);
+}
+
+void GL_APIENTRY glGetShaderPrecisionFormatContextANGLE(GLeglContext ctx,
+                                                        GLenum shadertype,
+                                                        GLenum precisiontype,
+                                                        GLint *range,
+                                                        GLint *precision)
+{
+    return gl::GetShaderPrecisionFormatContextANGLE(ctx, shadertype, precisiontype, range,
+                                                    precision);
+}
+
+void GL_APIENTRY glGetShaderSourceContextANGLE(GLeglContext ctx,
+                                               GLuint shader,
+                                               GLsizei bufSize,
+                                               GLsizei *length,
+                                               GLchar *source)
+{
+    return gl::GetShaderSourceContextANGLE(ctx, shader, bufSize, length, source);
+}
+
+void GL_APIENTRY glGetShaderivContextANGLE(GLeglContext ctx,
+                                           GLuint shader,
+                                           GLenum pname,
+                                           GLint *params)
+{
+    return gl::GetShaderivContextANGLE(ctx, shader, pname, params);
+}
+
+const GLubyte *GL_APIENTRY glGetStringContextANGLE(GLeglContext ctx, GLenum name)
+{
+    return gl::GetStringContextANGLE(ctx, name);
+}
+
+const GLubyte *GL_APIENTRY glGetStringiContextANGLE(GLeglContext ctx, GLenum name, GLuint index)
+{
+    return gl::GetStringiContextANGLE(ctx, name, index);
+}
+
+void GL_APIENTRY glGetSyncivContextANGLE(GLeglContext ctx,
+                                         GLsync sync,
+                                         GLenum pname,
+                                         GLsizei bufSize,
+                                         GLsizei *length,
+                                         GLint *values)
+{
+    return gl::GetSyncivContextANGLE(ctx, sync, pname, bufSize, length, values);
+}
+
+void GL_APIENTRY glGetTexEnvfvContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLenum pname,
+                                           GLfloat *params)
+{
+    return gl::GetTexEnvfvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetTexEnvivContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLenum pname,
+                                           GLint *params)
+{
+    return gl::GetTexEnvivContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetTexEnvxvContextANGLE(GLeglContext ctx,
+                                           GLenum target,
+                                           GLenum pname,
+                                           GLfixed *params)
+{
+    return gl::GetTexEnvxvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetTexGenfvOESContextANGLE(GLeglContext ctx,
+                                              GLenum coord,
+                                              GLenum pname,
+                                              GLfloat *params)
+{
+    return gl::GetTexGenfvOESContextANGLE(ctx, coord, pname, params);
+}
+
+void GL_APIENTRY glGetTexGenivOESContextANGLE(GLeglContext ctx,
+                                              GLenum coord,
+                                              GLenum pname,
+                                              GLint *params)
+{
+    return gl::GetTexGenivOESContextANGLE(ctx, coord, pname, params);
+}
+
+void GL_APIENTRY glGetTexGenxvOESContextANGLE(GLeglContext ctx,
+                                              GLenum coord,
+                                              GLenum pname,
+                                              GLfixed *params)
+{
+    return gl::GetTexGenxvOESContextANGLE(ctx, coord, pname, params);
+}
+
+void GL_APIENTRY glGetTexLevelParameterfvContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLint level,
+                                                      GLenum pname,
+                                                      GLfloat *params)
+{
+    return gl::GetTexLevelParameterfvContextANGLE(ctx, target, level, pname, params);
+}
+
+void GL_APIENTRY glGetTexLevelParameterivContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLint level,
+                                                      GLenum pname,
+                                                      GLint *params)
+{
+    return gl::GetTexLevelParameterivContextANGLE(ctx, target, level, pname, params);
+}
+
+void GL_APIENTRY glGetTexParameterfvContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLenum pname,
+                                                 GLfloat *params)
+{
+    return gl::GetTexParameterfvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetTexParameterivContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLenum pname,
+                                                 GLint *params)
+{
+    return gl::GetTexParameterivContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetTexParameterxvContextANGLE(GLeglContext ctx,
+                                                 GLenum target,
+                                                 GLenum pname,
+                                                 GLfixed *params)
+{
+    return gl::GetTexParameterxvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glGetTransformFeedbackVaryingContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLuint index,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLsizei *size,
+                                                           GLenum *type,
+                                                           GLchar *name)
+{
+    return gl::GetTransformFeedbackVaryingContextANGLE(ctx, program, index, bufSize, length, size,
+                                                       type, name);
+}
+
+void GL_APIENTRY glGetTranslatedShaderSourceANGLEContextANGLE(GLeglContext ctx,
+                                                              GLuint shader,
+                                                              GLsizei bufsize,
+                                                              GLsizei *length,
+                                                              GLchar *source)
+{
+    return gl::GetTranslatedShaderSourceANGLEContextANGLE(ctx, shader, bufsize, length, source);
+}
+
+GLuint GL_APIENTRY glGetUniformBlockIndexContextANGLE(GLeglContext ctx,
+                                                      GLuint program,
+                                                      const GLchar *uniformBlockName)
+{
+    return gl::GetUniformBlockIndexContextANGLE(ctx, program, uniformBlockName);
+}
+
+void GL_APIENTRY glGetUniformIndicesContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLsizei uniformCount,
+                                                 const GLchar *const *uniformNames,
+                                                 GLuint *uniformIndices)
+{
+    return gl::GetUniformIndicesContextANGLE(ctx, program, uniformCount, uniformNames,
+                                             uniformIndices);
+}
+
+GLint GL_APIENTRY glGetUniformLocationContextANGLE(GLeglContext ctx,
+                                                   GLuint program,
+                                                   const GLchar *name)
+{
+    return gl::GetUniformLocationContextANGLE(ctx, program, name);
+}
+
+void GL_APIENTRY glGetUniformfvContextANGLE(GLeglContext ctx,
+                                            GLuint program,
+                                            GLint location,
+                                            GLfloat *params)
+{
+    return gl::GetUniformfvContextANGLE(ctx, program, location, params);
+}
+
+void GL_APIENTRY glGetUniformivContextANGLE(GLeglContext ctx,
+                                            GLuint program,
+                                            GLint location,
+                                            GLint *params)
+{
+    return gl::GetUniformivContextANGLE(ctx, program, location, params);
+}
+
+void GL_APIENTRY glGetUniformuivContextANGLE(GLeglContext ctx,
+                                             GLuint program,
+                                             GLint location,
+                                             GLuint *params)
+{
+    return gl::GetUniformuivContextANGLE(ctx, program, location, params);
+}
+
+void GL_APIENTRY glGetVertexAttribIivContextANGLE(GLeglContext ctx,
+                                                  GLuint index,
+                                                  GLenum pname,
+                                                  GLint *params)
+{
+    return gl::GetVertexAttribIivContextANGLE(ctx, index, pname, params);
+}
+
+void GL_APIENTRY glGetVertexAttribIuivContextANGLE(GLeglContext ctx,
+                                                   GLuint index,
+                                                   GLenum pname,
+                                                   GLuint *params)
+{
+    return gl::GetVertexAttribIuivContextANGLE(ctx, index, pname, params);
+}
+
+void GL_APIENTRY glGetVertexAttribPointervContextANGLE(GLeglContext ctx,
+                                                       GLuint index,
+                                                       GLenum pname,
+                                                       void **pointer)
+{
+    return gl::GetVertexAttribPointervContextANGLE(ctx, index, pname, pointer);
+}
+
+void GL_APIENTRY glGetVertexAttribfvContextANGLE(GLeglContext ctx,
+                                                 GLuint index,
+                                                 GLenum pname,
+                                                 GLfloat *params)
+{
+    return gl::GetVertexAttribfvContextANGLE(ctx, index, pname, params);
+}
+
+void GL_APIENTRY glGetVertexAttribivContextANGLE(GLeglContext ctx,
+                                                 GLuint index,
+                                                 GLenum pname,
+                                                 GLint *params)
+{
+    return gl::GetVertexAttribivContextANGLE(ctx, index, pname, params);
+}
+
+void GL_APIENTRY glGetnUniformfvEXTContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLsizei bufSize,
+                                                GLfloat *params)
+{
+    return gl::GetnUniformfvEXTContextANGLE(ctx, program, location, bufSize, params);
+}
+
+void GL_APIENTRY glGetnUniformivEXTContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLsizei bufSize,
+                                                GLint *params)
+{
+    return gl::GetnUniformivEXTContextANGLE(ctx, program, location, bufSize, params);
+}
+
+void GL_APIENTRY glHintContextANGLE(GLeglContext ctx, GLenum target, GLenum mode)
+{
+    return gl::HintContextANGLE(ctx, target, mode);
+}
+
+void GL_APIENTRY glInsertEventMarkerEXTContextANGLE(GLeglContext ctx,
+                                                    GLsizei length,
+                                                    const GLchar *marker)
+{
+    return gl::InsertEventMarkerEXTContextANGLE(ctx, length, marker);
+}
+
+void GL_APIENTRY glInvalidateFramebufferContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLsizei numAttachments,
+                                                     const GLenum *attachments)
+{
+    return gl::InvalidateFramebufferContextANGLE(ctx, target, numAttachments, attachments);
+}
+
+void GL_APIENTRY glInvalidateSubFramebufferContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLsizei numAttachments,
+                                                        const GLenum *attachments,
+                                                        GLint x,
+                                                        GLint y,
+                                                        GLsizei width,
+                                                        GLsizei height)
+{
+    return gl::InvalidateSubFramebufferContextANGLE(ctx, target, numAttachments, attachments, x, y,
+                                                    width, height);
+}
+
+GLboolean GL_APIENTRY glIsBufferContextANGLE(GLeglContext ctx, GLuint buffer)
+{
+    return gl::IsBufferContextANGLE(ctx, buffer);
+}
+
+GLboolean GL_APIENTRY glIsEnabledContextANGLE(GLeglContext ctx, GLenum cap)
+{
+    return gl::IsEnabledContextANGLE(ctx, cap);
+}
+
+GLboolean GL_APIENTRY glIsFenceNVContextANGLE(GLeglContext ctx, GLuint fence)
+{
+    return gl::IsFenceNVContextANGLE(ctx, fence);
+}
+
+GLboolean GL_APIENTRY glIsFramebufferContextANGLE(GLeglContext ctx, GLuint framebuffer)
+{
+    return gl::IsFramebufferContextANGLE(ctx, framebuffer);
+}
+
+GLboolean GL_APIENTRY glIsFramebufferOESContextANGLE(GLeglContext ctx, GLuint framebuffer)
+{
+    return gl::IsFramebufferOESContextANGLE(ctx, framebuffer);
+}
+
+GLboolean GL_APIENTRY glIsProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    return gl::IsProgramContextANGLE(ctx, program);
+}
+
+GLboolean GL_APIENTRY glIsProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline)
+{
+    return gl::IsProgramPipelineContextANGLE(ctx, pipeline);
+}
+
+GLboolean GL_APIENTRY glIsQueryContextANGLE(GLeglContext ctx, GLuint id)
+{
+    return gl::IsQueryContextANGLE(ctx, id);
+}
+
+GLboolean GL_APIENTRY glIsQueryEXTContextANGLE(GLeglContext ctx, GLuint id)
+{
+    return gl::IsQueryEXTContextANGLE(ctx, id);
+}
+
+GLboolean GL_APIENTRY glIsRenderbufferContextANGLE(GLeglContext ctx, GLuint renderbuffer)
+{
+    return gl::IsRenderbufferContextANGLE(ctx, renderbuffer);
+}
+
+GLboolean GL_APIENTRY glIsRenderbufferOESContextANGLE(GLeglContext ctx, GLuint renderbuffer)
+{
+    return gl::IsRenderbufferOESContextANGLE(ctx, renderbuffer);
+}
+
+GLboolean GL_APIENTRY glIsSamplerContextANGLE(GLeglContext ctx, GLuint sampler)
+{
+    return gl::IsSamplerContextANGLE(ctx, sampler);
+}
+
+GLboolean GL_APIENTRY glIsShaderContextANGLE(GLeglContext ctx, GLuint shader)
+{
+    return gl::IsShaderContextANGLE(ctx, shader);
+}
+
+GLboolean GL_APIENTRY glIsSyncContextANGLE(GLeglContext ctx, GLsync sync)
+{
+    return gl::IsSyncContextANGLE(ctx, sync);
+}
+
+GLboolean GL_APIENTRY glIsTextureContextANGLE(GLeglContext ctx, GLuint texture)
+{
+    return gl::IsTextureContextANGLE(ctx, texture);
+}
+
+GLboolean GL_APIENTRY glIsTransformFeedbackContextANGLE(GLeglContext ctx, GLuint id)
+{
+    return gl::IsTransformFeedbackContextANGLE(ctx, id);
+}
+
+GLboolean GL_APIENTRY glIsVertexArrayContextANGLE(GLeglContext ctx, GLuint array)
+{
+    return gl::IsVertexArrayContextANGLE(ctx, array);
+}
+
+GLboolean GL_APIENTRY glIsVertexArrayOESContextANGLE(GLeglContext ctx, GLuint array)
+{
+    return gl::IsVertexArrayOESContextANGLE(ctx, array);
+}
+
+void GL_APIENTRY glLightModelfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param)
+{
+    return gl::LightModelfContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glLightModelfvContextANGLE(GLeglContext ctx, GLenum pname, const GLfloat *params)
+{
+    return gl::LightModelfvContextANGLE(ctx, pname, params);
+}
+
+void GL_APIENTRY glLightModelxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param)
+{
+    return gl::LightModelxContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glLightModelxvContextANGLE(GLeglContext ctx, GLenum pname, const GLfixed *param)
+{
+    return gl::LightModelxvContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glLightfContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfloat param)
+{
+    return gl::LightfContextANGLE(ctx, light, pname, param);
+}
+
+void GL_APIENTRY glLightfvContextANGLE(GLeglContext ctx,
+                                       GLenum light,
+                                       GLenum pname,
+                                       const GLfloat *params)
+{
+    return gl::LightfvContextANGLE(ctx, light, pname, params);
+}
+
+void GL_APIENTRY glLightxContextANGLE(GLeglContext ctx, GLenum light, GLenum pname, GLfixed param)
+{
+    return gl::LightxContextANGLE(ctx, light, pname, param);
+}
+
+void GL_APIENTRY glLightxvContextANGLE(GLeglContext ctx,
+                                       GLenum light,
+                                       GLenum pname,
+                                       const GLfixed *params)
+{
+    return gl::LightxvContextANGLE(ctx, light, pname, params);
+}
+
+void GL_APIENTRY glLineWidthContextANGLE(GLeglContext ctx, GLfloat width)
+{
+    return gl::LineWidthContextANGLE(ctx, width);
+}
+
+void GL_APIENTRY glLineWidthxContextANGLE(GLeglContext ctx, GLfixed width)
+{
+    return gl::LineWidthxContextANGLE(ctx, width);
+}
+
+void GL_APIENTRY glLinkProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    return gl::LinkProgramContextANGLE(ctx, program);
+}
+
+void GL_APIENTRY glLoadIdentityContextANGLE(GLeglContext ctx)
+{
+    return gl::LoadIdentityContextANGLE(ctx);
+}
+
+void GL_APIENTRY glLoadMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m)
+{
+    return gl::LoadMatrixfContextANGLE(ctx, m);
+}
+
+void GL_APIENTRY glLoadMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m)
+{
+    return gl::LoadMatrixxContextANGLE(ctx, m);
+}
+
+void GL_APIENTRY glLoadPaletteFromModelViewMatrixOESContextANGLE(GLeglContext ctx)
+{
+    return gl::LoadPaletteFromModelViewMatrixOESContextANGLE(ctx);
+}
+
+void GL_APIENTRY glLogicOpContextANGLE(GLeglContext ctx, GLenum opcode)
+{
+    return gl::LogicOpContextANGLE(ctx, opcode);
+}
+
+void *GL_APIENTRY glMapBufferOESContextANGLE(GLeglContext ctx, GLenum target, GLenum access)
+{
+    return gl::MapBufferOESContextANGLE(ctx, target, access);
+}
+
+void *GL_APIENTRY glMapBufferRangeContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLintptr offset,
+                                               GLsizeiptr length,
+                                               GLbitfield access)
+{
+    return gl::MapBufferRangeContextANGLE(ctx, target, offset, length, access);
+}
+
+void *GL_APIENTRY glMapBufferRangeEXTContextANGLE(GLeglContext ctx,
+                                                  GLenum target,
+                                                  GLintptr offset,
+                                                  GLsizeiptr length,
+                                                  GLbitfield access)
+{
+    return gl::MapBufferRangeEXTContextANGLE(ctx, target, offset, length, access);
+}
+
+void GL_APIENTRY glMaterialfContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfloat param)
+{
+    return gl::MaterialfContextANGLE(ctx, face, pname, param);
+}
+
+void GL_APIENTRY glMaterialfvContextANGLE(GLeglContext ctx,
+                                          GLenum face,
+                                          GLenum pname,
+                                          const GLfloat *params)
+{
+    return gl::MaterialfvContextANGLE(ctx, face, pname, params);
+}
+
+void GL_APIENTRY glMaterialxContextANGLE(GLeglContext ctx, GLenum face, GLenum pname, GLfixed param)
+{
+    return gl::MaterialxContextANGLE(ctx, face, pname, param);
+}
+
+void GL_APIENTRY glMaterialxvContextANGLE(GLeglContext ctx,
+                                          GLenum face,
+                                          GLenum pname,
+                                          const GLfixed *param)
+{
+    return gl::MaterialxvContextANGLE(ctx, face, pname, param);
+}
+
+void GL_APIENTRY glMatrixIndexPointerOESContextANGLE(GLeglContext ctx,
+                                                     GLint size,
+                                                     GLenum type,
+                                                     GLsizei stride,
+                                                     const void *pointer)
+{
+    return gl::MatrixIndexPointerOESContextANGLE(ctx, size, type, stride, pointer);
+}
+
+void GL_APIENTRY glMatrixModeContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    return gl::MatrixModeContextANGLE(ctx, mode);
+}
+
+void GL_APIENTRY glMemoryBarrierContextANGLE(GLeglContext ctx, GLbitfield barriers)
+{
+    return gl::MemoryBarrierContextANGLE(ctx, barriers);
+}
+
+void GL_APIENTRY glMemoryBarrierByRegionContextANGLE(GLeglContext ctx, GLbitfield barriers)
+{
+    return gl::MemoryBarrierByRegionContextANGLE(ctx, barriers);
+}
+
+void GL_APIENTRY glMultMatrixfContextANGLE(GLeglContext ctx, const GLfloat *m)
+{
+    return gl::MultMatrixfContextANGLE(ctx, m);
+}
+
+void GL_APIENTRY glMultMatrixxContextANGLE(GLeglContext ctx, const GLfixed *m)
+{
+    return gl::MultMatrixxContextANGLE(ctx, m);
+}
+
+void GL_APIENTRY glMultiTexCoord4fContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLfloat s,
+                                               GLfloat t,
+                                               GLfloat r,
+                                               GLfloat q)
+{
+    return gl::MultiTexCoord4fContextANGLE(ctx, target, s, t, r, q);
+}
+
+void GL_APIENTRY glMultiTexCoord4xContextANGLE(GLeglContext ctx,
+                                               GLenum texture,
+                                               GLfixed s,
+                                               GLfixed t,
+                                               GLfixed r,
+                                               GLfixed q)
+{
+    return gl::MultiTexCoord4xContextANGLE(ctx, texture, s, t, r, q);
+}
+
+void GL_APIENTRY glNormal3fContextANGLE(GLeglContext ctx, GLfloat nx, GLfloat ny, GLfloat nz)
+{
+    return gl::Normal3fContextANGLE(ctx, nx, ny, nz);
+}
+
+void GL_APIENTRY glNormal3xContextANGLE(GLeglContext ctx, GLfixed nx, GLfixed ny, GLfixed nz)
+{
+    return gl::Normal3xContextANGLE(ctx, nx, ny, nz);
+}
+
+void GL_APIENTRY glNormalPointerContextANGLE(GLeglContext ctx,
+                                             GLenum type,
+                                             GLsizei stride,
+                                             const void *pointer)
+{
+    return gl::NormalPointerContextANGLE(ctx, type, stride, pointer);
+}
+
+void GL_APIENTRY glObjectLabelKHRContextANGLE(GLeglContext ctx,
+                                              GLenum identifier,
+                                              GLuint name,
+                                              GLsizei length,
+                                              const GLchar *label)
+{
+    return gl::ObjectLabelKHRContextANGLE(ctx, identifier, name, length, label);
+}
+
+void GL_APIENTRY glObjectPtrLabelKHRContextANGLE(GLeglContext ctx,
+                                                 const void *ptr,
+                                                 GLsizei length,
+                                                 const GLchar *label)
+{
+    return gl::ObjectPtrLabelKHRContextANGLE(ctx, ptr, length, label);
+}
+
+void GL_APIENTRY glOrthofContextANGLE(GLeglContext ctx,
+                                      GLfloat l,
+                                      GLfloat r,
+                                      GLfloat b,
+                                      GLfloat t,
+                                      GLfloat n,
+                                      GLfloat f)
+{
+    return gl::OrthofContextANGLE(ctx, l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glOrthoxContextANGLE(GLeglContext ctx,
+                                      GLfixed l,
+                                      GLfixed r,
+                                      GLfixed b,
+                                      GLfixed t,
+                                      GLfixed n,
+                                      GLfixed f)
+{
+    return gl::OrthoxContextANGLE(ctx, l, r, b, t, n, f);
+}
+
+void GL_APIENTRY glPauseTransformFeedbackContextANGLE(GLeglContext ctx)
+{
+    return gl::PauseTransformFeedbackContextANGLE(ctx);
+}
+
+void GL_APIENTRY glPixelStoreiContextANGLE(GLeglContext ctx, GLenum pname, GLint param)
+{
+    return gl::PixelStoreiContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glPointParameterfContextANGLE(GLeglContext ctx, GLenum pname, GLfloat param)
+{
+    return gl::PointParameterfContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glPointParameterfvContextANGLE(GLeglContext ctx,
+                                                GLenum pname,
+                                                const GLfloat *params)
+{
+    return gl::PointParameterfvContextANGLE(ctx, pname, params);
+}
+
+void GL_APIENTRY glPointParameterxContextANGLE(GLeglContext ctx, GLenum pname, GLfixed param)
+{
+    return gl::PointParameterxContextANGLE(ctx, pname, param);
+}
+
+void GL_APIENTRY glPointParameterxvContextANGLE(GLeglContext ctx,
+                                                GLenum pname,
+                                                const GLfixed *params)
+{
+    return gl::PointParameterxvContextANGLE(ctx, pname, params);
+}
+
+void GL_APIENTRY glPointSizeContextANGLE(GLeglContext ctx, GLfloat size)
+{
+    return gl::PointSizeContextANGLE(ctx, size);
+}
+
+void GL_APIENTRY glPointSizePointerOESContextANGLE(GLeglContext ctx,
+                                                   GLenum type,
+                                                   GLsizei stride,
+                                                   const void *pointer)
+{
+    return gl::PointSizePointerOESContextANGLE(ctx, type, stride, pointer);
+}
+
+void GL_APIENTRY glPointSizexContextANGLE(GLeglContext ctx, GLfixed size)
+{
+    return gl::PointSizexContextANGLE(ctx, size);
+}
+
+void GL_APIENTRY glPolygonOffsetContextANGLE(GLeglContext ctx, GLfloat factor, GLfloat units)
+{
+    return gl::PolygonOffsetContextANGLE(ctx, factor, units);
+}
+
+void GL_APIENTRY glPolygonOffsetxContextANGLE(GLeglContext ctx, GLfixed factor, GLfixed units)
+{
+    return gl::PolygonOffsetxContextANGLE(ctx, factor, units);
+}
+
+void GL_APIENTRY glPopDebugGroupKHRContextANGLE(GLeglContext ctx)
+{
+    return gl::PopDebugGroupKHRContextANGLE(ctx);
+}
+
+void GL_APIENTRY glPopGroupMarkerEXTContextANGLE(GLeglContext ctx)
+{
+    return gl::PopGroupMarkerEXTContextANGLE(ctx);
+}
+
+void GL_APIENTRY glPopMatrixContextANGLE(GLeglContext ctx)
+{
+    return gl::PopMatrixContextANGLE(ctx);
+}
+
+void GL_APIENTRY glProgramBinaryContextANGLE(GLeglContext ctx,
+                                             GLuint program,
+                                             GLenum binaryFormat,
+                                             const void *binary,
+                                             GLsizei length)
+{
+    return gl::ProgramBinaryContextANGLE(ctx, program, binaryFormat, binary, length);
+}
+
+void GL_APIENTRY glProgramBinaryOESContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLenum binaryFormat,
+                                                const void *binary,
+                                                GLint length)
+{
+    return gl::ProgramBinaryOESContextANGLE(ctx, program, binaryFormat, binary, length);
+}
+
+void GL_APIENTRY glProgramParameteriContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLenum pname,
+                                                 GLint value)
+{
+    return gl::ProgramParameteriContextANGLE(ctx, program, pname, value);
+}
+
+void GL_APIENTRY glProgramUniform1fContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLfloat v0)
+{
+    return gl::ProgramUniform1fContextANGLE(ctx, program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform1fvContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLfloat *value)
+{
+    return gl::ProgramUniform1fvContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform1iContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLint v0)
+{
+    return gl::ProgramUniform1iContextANGLE(ctx, program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform1ivContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLint *value)
+{
+    return gl::ProgramUniform1ivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform1uiContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLuint v0)
+{
+    return gl::ProgramUniform1uiContextANGLE(ctx, program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform1uivContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  const GLuint *value)
+{
+    return gl::ProgramUniform1uivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2fContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLfloat v0,
+                                                GLfloat v1)
+{
+    return gl::ProgramUniform2fContextANGLE(ctx, program, location, v0, v1);
+}
+
+void GL_APIENTRY glProgramUniform2fvContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLfloat *value)
+{
+    return gl::ProgramUniform2fvContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY
+glProgramUniform2iContextANGLE(GLeglContext ctx, GLuint program, GLint location, GLint v0, GLint v1)
+{
+    return gl::ProgramUniform2iContextANGLE(ctx, program, location, v0, v1);
+}
+
+void GL_APIENTRY glProgramUniform2ivContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLint *value)
+{
+    return gl::ProgramUniform2ivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2uiContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLuint v0,
+                                                 GLuint v1)
+{
+    return gl::ProgramUniform2uiContextANGLE(ctx, program, location, v0, v1);
+}
+
+void GL_APIENTRY glProgramUniform2uivContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  const GLuint *value)
+{
+    return gl::ProgramUniform2uivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform3fContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLfloat v0,
+                                                GLfloat v1,
+                                                GLfloat v2)
+{
+    return gl::ProgramUniform3fContextANGLE(ctx, program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glProgramUniform3fvContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLfloat *value)
+{
+    return gl::ProgramUniform3fvContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform3iContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLint v0,
+                                                GLint v1,
+                                                GLint v2)
+{
+    return gl::ProgramUniform3iContextANGLE(ctx, program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glProgramUniform3ivContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLint *value)
+{
+    return gl::ProgramUniform3ivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform3uiContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLuint v0,
+                                                 GLuint v1,
+                                                 GLuint v2)
+{
+    return gl::ProgramUniform3uiContextANGLE(ctx, program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glProgramUniform3uivContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  const GLuint *value)
+{
+    return gl::ProgramUniform3uivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform4fContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLfloat v0,
+                                                GLfloat v1,
+                                                GLfloat v2,
+                                                GLfloat v3)
+{
+    return gl::ProgramUniform4fContextANGLE(ctx, program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform4fvContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLfloat *value)
+{
+    return gl::ProgramUniform4fvContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform4iContextANGLE(GLeglContext ctx,
+                                                GLuint program,
+                                                GLint location,
+                                                GLint v0,
+                                                GLint v1,
+                                                GLint v2,
+                                                GLint v3)
+{
+    return gl::ProgramUniform4iContextANGLE(ctx, program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform4ivContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLsizei count,
+                                                 const GLint *value)
+{
+    return gl::ProgramUniform4ivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform4uiContextANGLE(GLeglContext ctx,
+                                                 GLuint program,
+                                                 GLint location,
+                                                 GLuint v0,
+                                                 GLuint v1,
+                                                 GLuint v2,
+                                                 GLuint v3)
+{
+    return gl::ProgramUniform4uiContextANGLE(ctx, program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform4uivContextANGLE(GLeglContext ctx,
+                                                  GLuint program,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  const GLuint *value)
+{
+    return gl::ProgramUniform4uivContextANGLE(ctx, program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix2fvContextANGLE(ctx, program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2x3fvContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         GLsizei count,
+                                                         GLboolean transpose,
+                                                         const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix2x3fvContextANGLE(ctx, program, location, count, transpose,
+                                                     value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2x4fvContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         GLsizei count,
+                                                         GLboolean transpose,
+                                                         const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix2x4fvContextANGLE(ctx, program, location, count, transpose,
+                                                     value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix3fvContextANGLE(ctx, program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3x2fvContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         GLsizei count,
+                                                         GLboolean transpose,
+                                                         const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix3x2fvContextANGLE(ctx, program, location, count, transpose,
+                                                     value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3x4fvContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         GLsizei count,
+                                                         GLboolean transpose,
+                                                         const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix3x4fvContextANGLE(ctx, program, location, count, transpose,
+                                                     value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4fvContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei count,
+                                                       GLboolean transpose,
+                                                       const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix4fvContextANGLE(ctx, program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4x2fvContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         GLsizei count,
+                                                         GLboolean transpose,
+                                                         const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix4x2fvContextANGLE(ctx, program, location, count, transpose,
+                                                     value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4x3fvContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         GLsizei count,
+                                                         GLboolean transpose,
+                                                         const GLfloat *value)
+{
+    return gl::ProgramUniformMatrix4x3fvContextANGLE(ctx, program, location, count, transpose,
+                                                     value);
+}
+
+void GL_APIENTRY glPushDebugGroupKHRContextANGLE(GLeglContext ctx,
+                                                 GLenum source,
+                                                 GLuint id,
+                                                 GLsizei length,
+                                                 const GLchar *message)
+{
+    return gl::PushDebugGroupKHRContextANGLE(ctx, source, id, length, message);
+}
+
+void GL_APIENTRY glPushGroupMarkerEXTContextANGLE(GLeglContext ctx,
+                                                  GLsizei length,
+                                                  const GLchar *marker)
+{
+    return gl::PushGroupMarkerEXTContextANGLE(ctx, length, marker);
+}
+
+void GL_APIENTRY glPushMatrixContextANGLE(GLeglContext ctx)
+{
+    return gl::PushMatrixContextANGLE(ctx);
+}
+
+void GL_APIENTRY glQueryCounterEXTContextANGLE(GLeglContext ctx, GLuint id, GLenum target)
+{
+    return gl::QueryCounterEXTContextANGLE(ctx, id, target);
+}
+
+GLbitfield GL_APIENTRY glQueryMatrixxOESContextANGLE(GLeglContext ctx,
+                                                     GLfixed *mantissa,
+                                                     GLint *exponent)
+{
+    return gl::QueryMatrixxOESContextANGLE(ctx, mantissa, exponent);
+}
+
+void GL_APIENTRY glReadBufferContextANGLE(GLeglContext ctx, GLenum src)
+{
+    return gl::ReadBufferContextANGLE(ctx, src);
+}
+
+void GL_APIENTRY glReadPixelsContextANGLE(GLeglContext ctx,
+                                          GLint x,
+                                          GLint y,
+                                          GLsizei width,
+                                          GLsizei height,
+                                          GLenum format,
+                                          GLenum type,
+                                          void *pixels)
+{
+    return gl::ReadPixelsContextANGLE(ctx, x, y, width, height, format, type, pixels);
+}
+
+void GL_APIENTRY glReadnPixelsEXTContextANGLE(GLeglContext ctx,
+                                              GLint x,
+                                              GLint y,
+                                              GLsizei width,
+                                              GLsizei height,
+                                              GLenum format,
+                                              GLenum type,
+                                              GLsizei bufSize,
+                                              void *data)
+{
+    return gl::ReadnPixelsEXTContextANGLE(ctx, x, y, width, height, format, type, bufSize, data);
+}
+
+void GL_APIENTRY glReleaseShaderCompilerContextANGLE(GLeglContext ctx)
+{
+    return gl::ReleaseShaderCompilerContextANGLE(ctx);
+}
+
+void GL_APIENTRY glRenderbufferStorageContextANGLE(GLeglContext ctx,
+                                                   GLenum target,
+                                                   GLenum internalformat,
+                                                   GLsizei width,
+                                                   GLsizei height)
+{
+    return gl::RenderbufferStorageContextANGLE(ctx, target, internalformat, width, height);
+}
+
+void GL_APIENTRY glRenderbufferStorageMultisampleContextANGLE(GLeglContext ctx,
+                                                              GLenum target,
+                                                              GLsizei samples,
+                                                              GLenum internalformat,
+                                                              GLsizei width,
+                                                              GLsizei height)
+{
+    return gl::RenderbufferStorageMultisampleContextANGLE(ctx, target, samples, internalformat,
+                                                          width, height);
+}
+
+void GL_APIENTRY glRenderbufferStorageMultisampleANGLEContextANGLE(GLeglContext ctx,
+                                                                   GLenum target,
+                                                                   GLsizei samples,
+                                                                   GLenum internalformat,
+                                                                   GLsizei width,
+                                                                   GLsizei height)
+{
+    return gl::RenderbufferStorageMultisampleANGLEContextANGLE(ctx, target, samples, internalformat,
+                                                               width, height);
+}
+
+void GL_APIENTRY glRenderbufferStorageOESContextANGLE(GLeglContext ctx,
+                                                      GLenum target,
+                                                      GLenum internalformat,
+                                                      GLsizei width,
+                                                      GLsizei height)
+{
+    return gl::RenderbufferStorageOESContextANGLE(ctx, target, internalformat, width, height);
+}
+
+void GL_APIENTRY glResumeTransformFeedbackContextANGLE(GLeglContext ctx)
+{
+    return gl::ResumeTransformFeedbackContextANGLE(ctx);
+}
+
+void GL_APIENTRY
+glRotatefContextANGLE(GLeglContext ctx, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::RotatefContextANGLE(ctx, angle, x, y, z);
+}
+
+void GL_APIENTRY
+glRotatexContextANGLE(GLeglContext ctx, GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+{
+    return gl::RotatexContextANGLE(ctx, angle, x, y, z);
+}
+
+void GL_APIENTRY glSampleCoverageContextANGLE(GLeglContext ctx, GLfloat value, GLboolean invert)
+{
+    return gl::SampleCoverageContextANGLE(ctx, value, invert);
+}
+
+void GL_APIENTRY glSampleCoveragexContextANGLE(GLeglContext ctx, GLclampx value, GLboolean invert)
+{
+    return gl::SampleCoveragexContextANGLE(ctx, value, invert);
+}
+
+void GL_APIENTRY glSampleMaskiContextANGLE(GLeglContext ctx, GLuint maskNumber, GLbitfield mask)
+{
+    return gl::SampleMaskiContextANGLE(ctx, maskNumber, mask);
+}
+
+void GL_APIENTRY glSamplerParameterfContextANGLE(GLeglContext ctx,
+                                                 GLuint sampler,
+                                                 GLenum pname,
+                                                 GLfloat param)
+{
+    return gl::SamplerParameterfContextANGLE(ctx, sampler, pname, param);
+}
+
+void GL_APIENTRY glSamplerParameterfvContextANGLE(GLeglContext ctx,
+                                                  GLuint sampler,
+                                                  GLenum pname,
+                                                  const GLfloat *param)
+{
+    return gl::SamplerParameterfvContextANGLE(ctx, sampler, pname, param);
+}
+
+void GL_APIENTRY glSamplerParameteriContextANGLE(GLeglContext ctx,
+                                                 GLuint sampler,
+                                                 GLenum pname,
+                                                 GLint param)
+{
+    return gl::SamplerParameteriContextANGLE(ctx, sampler, pname, param);
+}
+
+void GL_APIENTRY glSamplerParameterivContextANGLE(GLeglContext ctx,
+                                                  GLuint sampler,
+                                                  GLenum pname,
+                                                  const GLint *param)
+{
+    return gl::SamplerParameterivContextANGLE(ctx, sampler, pname, param);
+}
+
+void GL_APIENTRY glScalefContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::ScalefContextANGLE(ctx, x, y, z);
+}
+
+void GL_APIENTRY glScalexContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z)
+{
+    return gl::ScalexContextANGLE(ctx, x, y, z);
+}
+
+void GL_APIENTRY
+glScissorContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+    return gl::ScissorContextANGLE(ctx, x, y, width, height);
+}
+
+void GL_APIENTRY glSetFenceNVContextANGLE(GLeglContext ctx, GLuint fence, GLenum condition)
+{
+    return gl::SetFenceNVContextANGLE(ctx, fence, condition);
+}
+
+void GL_APIENTRY glShadeModelContextANGLE(GLeglContext ctx, GLenum mode)
+{
+    return gl::ShadeModelContextANGLE(ctx, mode);
+}
+
+void GL_APIENTRY glShaderBinaryContextANGLE(GLeglContext ctx,
+                                            GLsizei count,
+                                            const GLuint *shaders,
+                                            GLenum binaryformat,
+                                            const void *binary,
+                                            GLsizei length)
+{
+    return gl::ShaderBinaryContextANGLE(ctx, count, shaders, binaryformat, binary, length);
+}
+
+void GL_APIENTRY glShaderSourceContextANGLE(GLeglContext ctx,
+                                            GLuint shader,
+                                            GLsizei count,
+                                            const GLchar *const *string,
+                                            const GLint *length)
+{
+    return gl::ShaderSourceContextANGLE(ctx, shader, count, string, length);
+}
+
+void GL_APIENTRY glStencilFuncContextANGLE(GLeglContext ctx, GLenum func, GLint ref, GLuint mask)
+{
+    return gl::StencilFuncContextANGLE(ctx, func, ref, mask);
+}
+
+void GL_APIENTRY glStencilFuncSeparateContextANGLE(GLeglContext ctx,
+                                                   GLenum face,
+                                                   GLenum func,
+                                                   GLint ref,
+                                                   GLuint mask)
+{
+    return gl::StencilFuncSeparateContextANGLE(ctx, face, func, ref, mask);
+}
+
+void GL_APIENTRY glStencilMaskContextANGLE(GLeglContext ctx, GLuint mask)
+{
+    return gl::StencilMaskContextANGLE(ctx, mask);
+}
+
+void GL_APIENTRY glStencilMaskSeparateContextANGLE(GLeglContext ctx, GLenum face, GLuint mask)
+{
+    return gl::StencilMaskSeparateContextANGLE(ctx, face, mask);
+}
+
+void GL_APIENTRY glStencilOpContextANGLE(GLeglContext ctx, GLenum fail, GLenum zfail, GLenum zpass)
+{
+    return gl::StencilOpContextANGLE(ctx, fail, zfail, zpass);
+}
+
+void GL_APIENTRY glStencilOpSeparateContextANGLE(GLeglContext ctx,
+                                                 GLenum face,
+                                                 GLenum sfail,
+                                                 GLenum dpfail,
+                                                 GLenum dppass)
+{
+    return gl::StencilOpSeparateContextANGLE(ctx, face, sfail, dpfail, dppass);
+}
+
+GLboolean GL_APIENTRY glTestFenceNVContextANGLE(GLeglContext ctx, GLuint fence)
+{
+    return gl::TestFenceNVContextANGLE(ctx, fence);
+}
+
+void GL_APIENTRY glTexCoordPointerContextANGLE(GLeglContext ctx,
+                                               GLint size,
+                                               GLenum type,
+                                               GLsizei stride,
+                                               const void *pointer)
+{
+    return gl::TexCoordPointerContextANGLE(ctx, size, type, stride, pointer);
+}
+
+void GL_APIENTRY glTexEnvfContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfloat param)
+{
+    return gl::TexEnvfContextANGLE(ctx, target, pname, param);
+}
+
+void GL_APIENTRY glTexEnvfvContextANGLE(GLeglContext ctx,
+                                        GLenum target,
+                                        GLenum pname,
+                                        const GLfloat *params)
+{
+    return gl::TexEnvfvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glTexEnviContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLint param)
+{
+    return gl::TexEnviContextANGLE(ctx, target, pname, param);
+}
+
+void GL_APIENTRY glTexEnvivContextANGLE(GLeglContext ctx,
+                                        GLenum target,
+                                        GLenum pname,
+                                        const GLint *params)
+{
+    return gl::TexEnvivContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glTexEnvxContextANGLE(GLeglContext ctx, GLenum target, GLenum pname, GLfixed param)
+{
+    return gl::TexEnvxContextANGLE(ctx, target, pname, param);
+}
+
+void GL_APIENTRY glTexEnvxvContextANGLE(GLeglContext ctx,
+                                        GLenum target,
+                                        GLenum pname,
+                                        const GLfixed *params)
+{
+    return gl::TexEnvxvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glTexGenfOESContextANGLE(GLeglContext ctx,
+                                          GLenum coord,
+                                          GLenum pname,
+                                          GLfloat param)
+{
+    return gl::TexGenfOESContextANGLE(ctx, coord, pname, param);
+}
+
+void GL_APIENTRY glTexGenfvOESContextANGLE(GLeglContext ctx,
+                                           GLenum coord,
+                                           GLenum pname,
+                                           const GLfloat *params)
+{
+    return gl::TexGenfvOESContextANGLE(ctx, coord, pname, params);
+}
+
+void GL_APIENTRY glTexGeniOESContextANGLE(GLeglContext ctx, GLenum coord, GLenum pname, GLint param)
+{
+    return gl::TexGeniOESContextANGLE(ctx, coord, pname, param);
+}
+
+void GL_APIENTRY glTexGenivOESContextANGLE(GLeglContext ctx,
+                                           GLenum coord,
+                                           GLenum pname,
+                                           const GLint *params)
+{
+    return gl::TexGenivOESContextANGLE(ctx, coord, pname, params);
+}
+
+void GL_APIENTRY glTexGenxOESContextANGLE(GLeglContext ctx,
+                                          GLenum coord,
+                                          GLenum pname,
+                                          GLfixed param)
+{
+    return gl::TexGenxOESContextANGLE(ctx, coord, pname, param);
+}
+
+void GL_APIENTRY glTexGenxvOESContextANGLE(GLeglContext ctx,
+                                           GLenum coord,
+                                           GLenum pname,
+                                           const GLfixed *params)
+{
+    return gl::TexGenxvOESContextANGLE(ctx, coord, pname, params);
+}
+
+void GL_APIENTRY glTexImage2DContextANGLE(GLeglContext ctx,
+                                          GLenum target,
+                                          GLint level,
+                                          GLint internalformat,
+                                          GLsizei width,
+                                          GLsizei height,
+                                          GLint border,
+                                          GLenum format,
+                                          GLenum type,
+                                          const void *pixels)
+{
+    return gl::TexImage2DContextANGLE(ctx, target, level, internalformat, width, height, border,
+                                      format, type, pixels);
+}
+
+void GL_APIENTRY glTexImage3DContextANGLE(GLeglContext ctx,
+                                          GLenum target,
+                                          GLint level,
+                                          GLint internalformat,
+                                          GLsizei width,
+                                          GLsizei height,
+                                          GLsizei depth,
+                                          GLint border,
+                                          GLenum format,
+                                          GLenum type,
+                                          const void *pixels)
+{
+    return gl::TexImage3DContextANGLE(ctx, target, level, internalformat, width, height, depth,
+                                      border, format, type, pixels);
+}
+
+void GL_APIENTRY glTexParameterfContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLenum pname,
+                                             GLfloat param)
+{
+    return gl::TexParameterfContextANGLE(ctx, target, pname, param);
+}
+
+void GL_APIENTRY glTexParameterfvContextANGLE(GLeglContext ctx,
+                                              GLenum target,
+                                              GLenum pname,
+                                              const GLfloat *params)
+{
+    return gl::TexParameterfvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glTexParameteriContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLenum pname,
+                                             GLint param)
+{
+    return gl::TexParameteriContextANGLE(ctx, target, pname, param);
+}
+
+void GL_APIENTRY glTexParameterivContextANGLE(GLeglContext ctx,
+                                              GLenum target,
+                                              GLenum pname,
+                                              const GLint *params)
+{
+    return gl::TexParameterivContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glTexParameterxContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLenum pname,
+                                             GLfixed param)
+{
+    return gl::TexParameterxContextANGLE(ctx, target, pname, param);
+}
+
+void GL_APIENTRY glTexParameterxvContextANGLE(GLeglContext ctx,
+                                              GLenum target,
+                                              GLenum pname,
+                                              const GLfixed *params)
+{
+    return gl::TexParameterxvContextANGLE(ctx, target, pname, params);
+}
+
+void GL_APIENTRY glTexStorage1DEXTContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLsizei levels,
+                                               GLenum internalformat,
+                                               GLsizei width)
+{
+    return gl::TexStorage1DEXTContextANGLE(ctx, target, levels, internalformat, width);
+}
+
+void GL_APIENTRY glTexStorage2DContextANGLE(GLeglContext ctx,
+                                            GLenum target,
+                                            GLsizei levels,
+                                            GLenum internalformat,
+                                            GLsizei width,
+                                            GLsizei height)
+{
+    return gl::TexStorage2DContextANGLE(ctx, target, levels, internalformat, width, height);
+}
+
+void GL_APIENTRY glTexStorage2DEXTContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLsizei levels,
+                                               GLenum internalformat,
+                                               GLsizei width,
+                                               GLsizei height)
+{
+    return gl::TexStorage2DEXTContextANGLE(ctx, target, levels, internalformat, width, height);
+}
+
+void GL_APIENTRY glTexStorage2DMultisampleContextANGLE(GLeglContext ctx,
+                                                       GLenum target,
+                                                       GLsizei samples,
+                                                       GLenum internalformat,
+                                                       GLsizei width,
+                                                       GLsizei height,
+                                                       GLboolean fixedsamplelocations)
+{
+    return gl::TexStorage2DMultisampleContextANGLE(ctx, target, samples, internalformat, width,
+                                                   height, fixedsamplelocations);
+}
+
+void GL_APIENTRY glTexStorage3DContextANGLE(GLeglContext ctx,
+                                            GLenum target,
+                                            GLsizei levels,
+                                            GLenum internalformat,
+                                            GLsizei width,
+                                            GLsizei height,
+                                            GLsizei depth)
+{
+    return gl::TexStorage3DContextANGLE(ctx, target, levels, internalformat, width, height, depth);
+}
+
+void GL_APIENTRY glTexStorage3DEXTContextANGLE(GLeglContext ctx,
+                                               GLenum target,
+                                               GLsizei levels,
+                                               GLenum internalformat,
+                                               GLsizei width,
+                                               GLsizei height,
+                                               GLsizei depth)
+{
+    return gl::TexStorage3DEXTContextANGLE(ctx, target, levels, internalformat, width, height,
+                                           depth);
+}
+
+void GL_APIENTRY glTexSubImage2DContextANGLE(GLeglContext ctx,
+                                             GLenum target,
+                                             GLint level,
+                                             GLint xoffset,
+                                             GLint yoffset,
+                                             GLsizei width,
+                                             GLsizei height,
+                                             GLenum format,
+                                             GLenum type,
+                                             const void *pixels)
+{
+    return gl::TexSubImage2DContextANGLE(ctx, target, level, xoffset, yoffset, width, height,
+                                         format, type, pixels);
+}
+
+void GL_APIENTRY glTexSubImage3DContextANGLE(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)
+{
+    return gl::TexSubImage3DContextANGLE(ctx, target, level, xoffset, yoffset, zoffset, width,
+                                         height, depth, format, type, pixels);
+}
+
+void GL_APIENTRY glTransformFeedbackVaryingsContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLsizei count,
+                                                         const GLchar *const *varyings,
+                                                         GLenum bufferMode)
+{
+    return gl::TransformFeedbackVaryingsContextANGLE(ctx, program, count, varyings, bufferMode);
+}
+
+void GL_APIENTRY glTranslatefContextANGLE(GLeglContext ctx, GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::TranslatefContextANGLE(ctx, x, y, z);
+}
+
+void GL_APIENTRY glTranslatexContextANGLE(GLeglContext ctx, GLfixed x, GLfixed y, GLfixed z)
+{
+    return gl::TranslatexContextANGLE(ctx, x, y, z);
+}
+
+void GL_APIENTRY glUniform1fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0)
+{
+    return gl::Uniform1fContextANGLE(ctx, location, v0);
+}
+
+void GL_APIENTRY glUniform1fvContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLfloat *value)
+{
+    return gl::Uniform1fvContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniform1iContextANGLE(GLeglContext ctx, GLint location, GLint v0)
+{
+    return gl::Uniform1iContextANGLE(ctx, location, v0);
+}
+
+void GL_APIENTRY glUniform1ivContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLint *value)
+{
+    return gl::Uniform1ivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniform1uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0)
+{
+    return gl::Uniform1uiContextANGLE(ctx, location, v0);
+}
+
+void GL_APIENTRY glUniform1uivContextANGLE(GLeglContext ctx,
+                                           GLint location,
+                                           GLsizei count,
+                                           const GLuint *value)
+{
+    return gl::Uniform1uivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniform2fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1)
+{
+    return gl::Uniform2fContextANGLE(ctx, location, v0, v1);
+}
+
+void GL_APIENTRY glUniform2fvContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLfloat *value)
+{
+    return gl::Uniform2fvContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniform2iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1)
+{
+    return gl::Uniform2iContextANGLE(ctx, location, v0, v1);
+}
+
+void GL_APIENTRY glUniform2ivContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLint *value)
+{
+    return gl::Uniform2ivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniform2uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1)
+{
+    return gl::Uniform2uiContextANGLE(ctx, location, v0, v1);
+}
+
+void GL_APIENTRY glUniform2uivContextANGLE(GLeglContext ctx,
+                                           GLint location,
+                                           GLsizei count,
+                                           const GLuint *value)
+{
+    return gl::Uniform2uivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY
+glUniform3fContextANGLE(GLeglContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+    return gl::Uniform3fContextANGLE(ctx, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glUniform3fvContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLfloat *value)
+{
+    return gl::Uniform3fvContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY
+glUniform3iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2)
+{
+    return gl::Uniform3iContextANGLE(ctx, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glUniform3ivContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLint *value)
+{
+    return gl::Uniform3ivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY
+glUniform3uiContextANGLE(GLeglContext ctx, GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+    return gl::Uniform3uiContextANGLE(ctx, location, v0, v1, v2);
+}
+
+void GL_APIENTRY glUniform3uivContextANGLE(GLeglContext ctx,
+                                           GLint location,
+                                           GLsizei count,
+                                           const GLuint *value)
+{
+    return gl::Uniform3uivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniform4fContextANGLE(GLeglContext ctx,
+                                         GLint location,
+                                         GLfloat v0,
+                                         GLfloat v1,
+                                         GLfloat v2,
+                                         GLfloat v3)
+{
+    return gl::Uniform4fContextANGLE(ctx, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glUniform4fvContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLfloat *value)
+{
+    return gl::Uniform4fvContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY
+glUniform4iContextANGLE(GLeglContext ctx, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+    return gl::Uniform4iContextANGLE(ctx, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glUniform4ivContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLsizei count,
+                                          const GLint *value)
+{
+    return gl::Uniform4ivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniform4uiContextANGLE(GLeglContext ctx,
+                                          GLint location,
+                                          GLuint v0,
+                                          GLuint v1,
+                                          GLuint v2,
+                                          GLuint v3)
+{
+    return gl::Uniform4uiContextANGLE(ctx, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glUniform4uivContextANGLE(GLeglContext ctx,
+                                           GLint location,
+                                           GLsizei count,
+                                           const GLuint *value)
+{
+    return gl::Uniform4uivContextANGLE(ctx, location, count, value);
+}
+
+void GL_APIENTRY glUniformBlockBindingContextANGLE(GLeglContext ctx,
+                                                   GLuint program,
+                                                   GLuint uniformBlockIndex,
+                                                   GLuint uniformBlockBinding)
+{
+    return gl::UniformBlockBindingContextANGLE(ctx, program, uniformBlockIndex,
+                                               uniformBlockBinding);
+}
+
+void GL_APIENTRY glUniformMatrix2fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    return gl::UniformMatrix2fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix2x3fvContextANGLE(GLeglContext ctx,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  GLboolean transpose,
+                                                  const GLfloat *value)
+{
+    return gl::UniformMatrix2x3fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix2x4fvContextANGLE(GLeglContext ctx,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  GLboolean transpose,
+                                                  const GLfloat *value)
+{
+    return gl::UniformMatrix2x4fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix3fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    return gl::UniformMatrix3fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix3x2fvContextANGLE(GLeglContext ctx,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  GLboolean transpose,
+                                                  const GLfloat *value)
+{
+    return gl::UniformMatrix3x2fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix3x4fvContextANGLE(GLeglContext ctx,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  GLboolean transpose,
+                                                  const GLfloat *value)
+{
+    return gl::UniformMatrix3x4fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix4fvContextANGLE(GLeglContext ctx,
+                                                GLint location,
+                                                GLsizei count,
+                                                GLboolean transpose,
+                                                const GLfloat *value)
+{
+    return gl::UniformMatrix4fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix4x2fvContextANGLE(GLeglContext ctx,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  GLboolean transpose,
+                                                  const GLfloat *value)
+{
+    return gl::UniformMatrix4x2fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+void GL_APIENTRY glUniformMatrix4x3fvContextANGLE(GLeglContext ctx,
+                                                  GLint location,
+                                                  GLsizei count,
+                                                  GLboolean transpose,
+                                                  const GLfloat *value)
+{
+    return gl::UniformMatrix4x3fvContextANGLE(ctx, location, count, transpose, value);
+}
+
+GLboolean GL_APIENTRY glUnmapBufferContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::UnmapBufferContextANGLE(ctx, target);
+}
+
+GLboolean GL_APIENTRY glUnmapBufferOESContextANGLE(GLeglContext ctx, GLenum target)
+{
+    return gl::UnmapBufferOESContextANGLE(ctx, target);
+}
+
+void GL_APIENTRY glUseProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    return gl::UseProgramContextANGLE(ctx, program);
+}
+
+void GL_APIENTRY glUseProgramStagesContextANGLE(GLeglContext ctx,
+                                                GLuint pipeline,
+                                                GLbitfield stages,
+                                                GLuint program)
+{
+    return gl::UseProgramStagesContextANGLE(ctx, pipeline, stages, program);
+}
+
+void GL_APIENTRY glValidateProgramContextANGLE(GLeglContext ctx, GLuint program)
+{
+    return gl::ValidateProgramContextANGLE(ctx, program);
+}
+
+void GL_APIENTRY glValidateProgramPipelineContextANGLE(GLeglContext ctx, GLuint pipeline)
+{
+    return gl::ValidateProgramPipelineContextANGLE(ctx, pipeline);
+}
+
+void GL_APIENTRY glVertexAttrib1fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x)
+{
+    return gl::VertexAttrib1fContextANGLE(ctx, index, x);
+}
+
+void GL_APIENTRY glVertexAttrib1fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib1fvContextANGLE(ctx, index, v);
+}
+
+void GL_APIENTRY glVertexAttrib2fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y)
+{
+    return gl::VertexAttrib2fContextANGLE(ctx, index, x, y);
+}
+
+void GL_APIENTRY glVertexAttrib2fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib2fvContextANGLE(ctx, index, v);
+}
+
+void GL_APIENTRY
+glVertexAttrib3fContextANGLE(GLeglContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z)
+{
+    return gl::VertexAttrib3fContextANGLE(ctx, index, x, y, z);
+}
+
+void GL_APIENTRY glVertexAttrib3fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib3fvContextANGLE(ctx, index, v);
+}
+
+void GL_APIENTRY glVertexAttrib4fContextANGLE(GLeglContext ctx,
+                                              GLuint index,
+                                              GLfloat x,
+                                              GLfloat y,
+                                              GLfloat z,
+                                              GLfloat w)
+{
+    return gl::VertexAttrib4fContextANGLE(ctx, index, x, y, z, w);
+}
+
+void GL_APIENTRY glVertexAttrib4fvContextANGLE(GLeglContext ctx, GLuint index, const GLfloat *v)
+{
+    return gl::VertexAttrib4fvContextANGLE(ctx, index, v);
+}
+
+void GL_APIENTRY glVertexAttribBindingContextANGLE(GLeglContext ctx,
+                                                   GLuint attribindex,
+                                                   GLuint bindingindex)
+{
+    return gl::VertexAttribBindingContextANGLE(ctx, attribindex, bindingindex);
+}
+
+void GL_APIENTRY glVertexAttribDivisorContextANGLE(GLeglContext ctx, GLuint index, GLuint divisor)
+{
+    return gl::VertexAttribDivisorContextANGLE(ctx, index, divisor);
+}
+
+void GL_APIENTRY glVertexAttribDivisorANGLEContextANGLE(GLeglContext ctx,
+                                                        GLuint index,
+                                                        GLuint divisor)
+{
+    return gl::VertexAttribDivisorANGLEContextANGLE(ctx, index, divisor);
+}
+
+void GL_APIENTRY glVertexAttribFormatContextANGLE(GLeglContext ctx,
+                                                  GLuint attribindex,
+                                                  GLint size,
+                                                  GLenum type,
+                                                  GLboolean normalized,
+                                                  GLuint relativeoffset)
+{
+    return gl::VertexAttribFormatContextANGLE(ctx, attribindex, size, type, normalized,
+                                              relativeoffset);
+}
+
+void GL_APIENTRY
+glVertexAttribI4iContextANGLE(GLeglContext ctx, GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+    return gl::VertexAttribI4iContextANGLE(ctx, index, x, y, z, w);
+}
+
+void GL_APIENTRY glVertexAttribI4ivContextANGLE(GLeglContext ctx, GLuint index, const GLint *v)
+{
+    return gl::VertexAttribI4ivContextANGLE(ctx, index, v);
+}
+
+void GL_APIENTRY glVertexAttribI4uiContextANGLE(GLeglContext ctx,
+                                                GLuint index,
+                                                GLuint x,
+                                                GLuint y,
+                                                GLuint z,
+                                                GLuint w)
+{
+    return gl::VertexAttribI4uiContextANGLE(ctx, index, x, y, z, w);
+}
+
+void GL_APIENTRY glVertexAttribI4uivContextANGLE(GLeglContext ctx, GLuint index, const GLuint *v)
+{
+    return gl::VertexAttribI4uivContextANGLE(ctx, index, v);
+}
+
+void GL_APIENTRY glVertexAttribIFormatContextANGLE(GLeglContext ctx,
+                                                   GLuint attribindex,
+                                                   GLint size,
+                                                   GLenum type,
+                                                   GLuint relativeoffset)
+{
+    return gl::VertexAttribIFormatContextANGLE(ctx, attribindex, size, type, relativeoffset);
+}
+
+void GL_APIENTRY glVertexAttribIPointerContextANGLE(GLeglContext ctx,
+                                                    GLuint index,
+                                                    GLint size,
+                                                    GLenum type,
+                                                    GLsizei stride,
+                                                    const void *pointer)
+{
+    return gl::VertexAttribIPointerContextANGLE(ctx, index, size, type, stride, pointer);
+}
+
+void GL_APIENTRY glVertexAttribPointerContextANGLE(GLeglContext ctx,
+                                                   GLuint index,
+                                                   GLint size,
+                                                   GLenum type,
+                                                   GLboolean normalized,
+                                                   GLsizei stride,
+                                                   const void *pointer)
+{
+    return gl::VertexAttribPointerContextANGLE(ctx, index, size, type, normalized, stride, pointer);
+}
+
+void GL_APIENTRY glVertexBindingDivisorContextANGLE(GLeglContext ctx,
+                                                    GLuint bindingindex,
+                                                    GLuint divisor)
+{
+    return gl::VertexBindingDivisorContextANGLE(ctx, bindingindex, divisor);
+}
+
+void GL_APIENTRY glVertexPointerContextANGLE(GLeglContext ctx,
+                                             GLint size,
+                                             GLenum type,
+                                             GLsizei stride,
+                                             const void *pointer)
+{
+    return gl::VertexPointerContextANGLE(ctx, size, type, stride, pointer);
+}
+
+void GL_APIENTRY
+glViewportContextANGLE(GLeglContext ctx, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+    return gl::ViewportContextANGLE(ctx, x, y, width, height);
+}
+
+void GL_APIENTRY glWaitSyncContextANGLE(GLeglContext ctx,
+                                        GLsync sync,
+                                        GLbitfield flags,
+                                        GLuint64 timeout)
+{
+    return gl::WaitSyncContextANGLE(ctx, sync, flags, timeout);
+}
+
+void GL_APIENTRY glWeightPointerOESContextANGLE(GLeglContext ctx,
+                                                GLint size,
+                                                GLenum type,
+                                                GLsizei stride,
+                                                const void *pointer)
+{
+    return gl::WeightPointerOESContextANGLE(ctx, size, type, stride, pointer);
+}
+
+void GL_APIENTRY glBindUniformLocationCHROMIUMContextANGLE(GLeglContext ctx,
+                                                           GLuint program,
+                                                           GLint location,
+                                                           const GLchar *name)
+{
+    return gl::BindUniformLocationCHROMIUMContextANGLE(ctx, program, location, name);
+}
+
+void GL_APIENTRY glCoverageModulationCHROMIUMContextANGLE(GLeglContext ctx, GLenum components)
+{
+    return gl::CoverageModulationCHROMIUMContextANGLE(ctx, components);
+}
+
+void GL_APIENTRY glMatrixLoadfCHROMIUMContextANGLE(GLeglContext ctx,
+                                                   GLenum matrixMode,
+                                                   const GLfloat *matrix)
+{
+    return gl::MatrixLoadfCHROMIUMContextANGLE(ctx, matrixMode, matrix);
+}
+
+void GL_APIENTRY glMatrixLoadIdentityCHROMIUMContextANGLE(GLeglContext ctx, GLenum matrixMode)
+{
+    return gl::MatrixLoadIdentityCHROMIUMContextANGLE(ctx, matrixMode);
+}
+
+GLuint GL_APIENTRY glGenPathsCHROMIUMContextANGLE(GLeglContext ctx, GLsizei range)
+{
+    return gl::GenPathsCHROMIUMContextANGLE(ctx, range);
+}
+
+void GL_APIENTRY glDeletePathsCHROMIUMContextANGLE(GLeglContext ctx, GLuint first, GLsizei range)
+{
+    return gl::DeletePathsCHROMIUMContextANGLE(ctx, first, range);
+}
+
+GLboolean GL_APIENTRY glIsPathCHROMIUMContextANGLE(GLeglContext ctx, GLuint path)
+{
+    return gl::IsPathCHROMIUMContextANGLE(ctx, path);
+}
+
+void GL_APIENTRY glPathCommandsCHROMIUMContextANGLE(GLeglContext ctx,
+                                                    GLuint path,
+                                                    GLsizei numCommands,
+                                                    const GLubyte *commands,
+                                                    GLsizei numCoords,
+                                                    GLenum coordType,
+                                                    const void *coords)
+{
+    return gl::PathCommandsCHROMIUMContextANGLE(ctx, path, numCommands, commands, numCoords,
+                                                coordType, coords);
+}
+
+void GL_APIENTRY glPathParameterfCHROMIUMContextANGLE(GLeglContext ctx,
+                                                      GLuint path,
+                                                      GLenum pname,
+                                                      GLfloat value)
+{
+    return gl::PathParameterfCHROMIUMContextANGLE(ctx, path, pname, value);
+}
+
+void GL_APIENTRY glPathParameteriCHROMIUMContextANGLE(GLeglContext ctx,
+                                                      GLuint path,
+                                                      GLenum pname,
+                                                      GLint value)
+{
+    return gl::PathParameteriCHROMIUMContextANGLE(ctx, path, pname, value);
+}
+
+void GL_APIENTRY glGetPathParameterfvCHROMIUMContextANGLE(GLeglContext ctx,
+                                                          GLuint path,
+                                                          GLenum pname,
+                                                          GLfloat *value)
+{
+    return gl::GetPathParameterfvCHROMIUMContextANGLE(ctx, path, pname, value);
+}
+
+void GL_APIENTRY glGetPathParameterivCHROMIUMContextANGLE(GLeglContext ctx,
+                                                          GLuint path,
+                                                          GLenum pname,
+                                                          GLint *value)
+{
+    return gl::GetPathParameterivCHROMIUMContextANGLE(ctx, path, pname, value);
+}
+
+void GL_APIENTRY glPathStencilFuncCHROMIUMContextANGLE(GLeglContext ctx,
+                                                       GLenum func,
+                                                       GLint ref,
+                                                       GLuint mask)
+{
+    return gl::PathStencilFuncCHROMIUMContextANGLE(ctx, func, ref, mask);
+}
+
+void GL_APIENTRY glStencilFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                       GLuint path,
+                                                       GLenum fillMode,
+                                                       GLuint mask)
+{
+    return gl::StencilFillPathCHROMIUMContextANGLE(ctx, path, fillMode, mask);
+}
+
+void GL_APIENTRY glStencilStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                         GLuint path,
+                                                         GLint reference,
+                                                         GLuint mask)
+{
+    return gl::StencilStrokePathCHROMIUMContextANGLE(ctx, path, reference, mask);
+}
+
+void GL_APIENTRY glCoverFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                     GLuint path,
+                                                     GLenum coverMode)
+{
+    return gl::CoverFillPathCHROMIUMContextANGLE(ctx, path, coverMode);
+}
+
+void GL_APIENTRY glCoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                       GLuint path,
+                                                       GLenum coverMode)
+{
+    return gl::CoverStrokePathCHROMIUMContextANGLE(ctx, path, coverMode);
+}
+
+void GL_APIENTRY glStencilThenCoverFillPathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                GLuint path,
+                                                                GLenum fillMode,
+                                                                GLuint mask,
+                                                                GLenum coverMode)
+{
+    return gl::StencilThenCoverFillPathCHROMIUMContextANGLE(ctx, path, fillMode, mask, coverMode);
+}
+
+void GL_APIENTRY glStencilThenCoverStrokePathCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                  GLuint path,
+                                                                  GLint reference,
+                                                                  GLuint mask,
+                                                                  GLenum coverMode)
+{
+    return gl::StencilThenCoverStrokePathCHROMIUMContextANGLE(ctx, path, reference, mask,
+                                                              coverMode);
+}
+
+void GL_APIENTRY glCoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                              GLsizei numPath,
+                                                              GLenum pathNameType,
+                                                              const void *paths,
+                                                              GLuint pathBase,
+                                                              GLenum coverMode,
+                                                              GLenum transformType,
+                                                              const GLfloat *transformValues)
+{
+    return gl::CoverFillPathInstancedCHROMIUMContextANGLE(
+        ctx, numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+}
+
+void GL_APIENTRY glCoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                GLsizei numPath,
+                                                                GLenum pathNameType,
+                                                                const void *paths,
+                                                                GLuint pathBase,
+                                                                GLenum coverMode,
+                                                                GLenum transformType,
+                                                                const GLfloat *transformValues)
+{
+    return gl::CoverStrokePathInstancedCHROMIUMContextANGLE(
+        ctx, numPath, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                  GLsizei numPath,
+                                                                  GLenum pathNameType,
+                                                                  const void *paths,
+                                                                  GLuint pathBase,
+                                                                  GLint reference,
+                                                                  GLuint mask,
+                                                                  GLenum transformType,
+                                                                  const GLfloat *transformValues)
+{
+    return gl::StencilStrokePathInstancedCHROMIUMContextANGLE(ctx, numPath, pathNameType, paths,
+                                                              pathBase, reference, mask,
+                                                              transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                GLsizei numPaths,
+                                                                GLenum pathNameType,
+                                                                const void *paths,
+                                                                GLuint pathBase,
+                                                                GLenum fillMode,
+                                                                GLuint mask,
+                                                                GLenum transformType,
+                                                                const GLfloat *transformValues)
+{
+    return gl::StencilFillPathInstancedCHROMIUMContextANGLE(ctx, numPaths, pathNameType, paths,
+                                                            pathBase, fillMode, mask, transformType,
+                                                            transformValues);
+}
+
+void GL_APIENTRY
+glStencilThenCoverFillPathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                        GLsizei numPaths,
+                                                        GLenum pathNameType,
+                                                        const void *paths,
+                                                        GLuint pathBase,
+                                                        GLenum fillMode,
+                                                        GLuint mask,
+                                                        GLenum coverMode,
+                                                        GLenum transformType,
+                                                        const GLfloat *transformValues)
+{
+    return gl::StencilThenCoverFillPathInstancedCHROMIUMContextANGLE(
+        ctx, numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType,
+        transformValues);
+}
+
+void GL_APIENTRY
+glStencilThenCoverStrokePathInstancedCHROMIUMContextANGLE(GLeglContext ctx,
+                                                          GLsizei numPaths,
+                                                          GLenum pathNameType,
+                                                          const void *paths,
+                                                          GLuint pathBase,
+                                                          GLint reference,
+                                                          GLuint mask,
+                                                          GLenum coverMode,
+                                                          GLenum transformType,
+                                                          const GLfloat *transformValues)
+{
+    return gl::StencilThenCoverStrokePathInstancedCHROMIUMContextANGLE(
+        ctx, numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType,
+        transformValues);
+}
+
+void GL_APIENTRY glBindFragmentInputLocationCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                 GLuint programs,
+                                                                 GLint location,
+                                                                 const GLchar *name)
+{
+    return gl::BindFragmentInputLocationCHROMIUMContextANGLE(ctx, programs, location, name);
+}
+
+void GL_APIENTRY glProgramPathFragmentInputGenCHROMIUMContextANGLE(GLeglContext ctx,
+                                                                   GLuint program,
+                                                                   GLint location,
+                                                                   GLenum genMode,
+                                                                   GLint components,
+                                                                   const GLfloat *coeffs)
+{
+    return gl::ProgramPathFragmentInputGenCHROMIUMContextANGLE(ctx, program, location, genMode,
+                                                               components, coeffs);
+}
+
+void GL_APIENTRY glCopyTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                   GLuint sourceId,
+                                                   GLint sourceLevel,
+                                                   GLenum destTarget,
+                                                   GLuint destId,
+                                                   GLint destLevel,
+                                                   GLint internalFormat,
+                                                   GLenum destType,
+                                                   GLboolean unpackFlipY,
+                                                   GLboolean unpackPremultiplyAlpha,
+                                                   GLboolean unpackUnmultiplyAlpha)
+{
+    return gl::CopyTextureCHROMIUMContextANGLE(ctx, sourceId, sourceLevel, destTarget, destId,
+                                               destLevel, internalFormat, destType, unpackFlipY,
+                                               unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+}
+
+void GL_APIENTRY glCopySubTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                      GLuint sourceId,
+                                                      GLint sourceLevel,
+                                                      GLenum destTarget,
+                                                      GLuint destId,
+                                                      GLint destLevel,
+                                                      GLint xoffset,
+                                                      GLint yoffset,
+                                                      GLint x,
+                                                      GLint y,
+                                                      GLint width,
+                                                      GLint height,
+                                                      GLboolean unpackFlipY,
+                                                      GLboolean unpackPremultiplyAlpha,
+                                                      GLboolean unpackUnmultiplyAlpha)
+{
+    return gl::CopySubTextureCHROMIUMContextANGLE(
+        ctx, sourceId, sourceLevel, destTarget, destId, destLevel, xoffset, yoffset, x, y, width,
+        height, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+}
+
+void GL_APIENTRY glCompressedCopyTextureCHROMIUMContextANGLE(GLeglContext ctx,
+                                                             GLuint sourceId,
+                                                             GLuint destId)
+{
+    return gl::CompressedCopyTextureCHROMIUMContextANGLE(ctx, sourceId, destId);
+}
+
+void GL_APIENTRY glRequestExtensionANGLEContextANGLE(GLeglContext ctx, const GLchar *name)
+{
+    return gl::RequestExtensionANGLEContextANGLE(ctx, name);
+}
+
+void GL_APIENTRY glGetBooleanvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLboolean *params)
+{
+    return gl::GetBooleanvRobustANGLEContextANGLE(ctx, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetBufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               GLsizei *length,
+                                                               GLint *params)
+{
+    return gl::GetBufferParameterivRobustANGLEContextANGLE(ctx, target, pname, bufSize, length,
+                                                           params);
+}
+
+void GL_APIENTRY glGetFloatvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                    GLenum pname,
+                                                    GLsizei bufSize,
+                                                    GLsizei *length,
+                                                    GLfloat *params)
+{
+    return gl::GetFloatvRobustANGLEContextANGLE(ctx, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetFramebufferAttachmentParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                              GLenum target,
+                                                                              GLenum attachment,
+                                                                              GLenum pname,
+                                                                              GLsizei bufSize,
+                                                                              GLsizei *length,
+                                                                              GLint *params)
+{
+    return gl::GetFramebufferAttachmentParameterivRobustANGLEContextANGLE(
+        ctx, target, attachment, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetIntegervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *data)
+{
+    return gl::GetIntegervRobustANGLEContextANGLE(ctx, pname, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetProgramivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLenum pname,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLint *params)
+{
+    return gl::GetProgramivRobustANGLEContextANGLE(ctx, program, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetRenderbufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                     GLenum target,
+                                                                     GLenum pname,
+                                                                     GLsizei bufSize,
+                                                                     GLsizei *length,
+                                                                     GLint *params)
+{
+    return gl::GetRenderbufferParameterivRobustANGLEContextANGLE(ctx, target, pname, bufSize,
+                                                                 length, params);
+}
+
+void GL_APIENTRY glGetShaderivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLuint shader,
+                                                      GLenum pname,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLint *params)
+{
+    return gl::GetShaderivRobustANGLEContextANGLE(ctx, shader, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetTexParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLfloat *params)
+{
+    return gl::GetTexParameterfvRobustANGLEContextANGLE(ctx, target, pname, bufSize, length,
+                                                        params);
+}
+
+void GL_APIENTRY glGetTexParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLint *params)
+{
+    return gl::GetTexParameterivRobustANGLEContextANGLE(ctx, target, pname, bufSize, length,
+                                                        params);
+}
+
+void GL_APIENTRY glGetUniformfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLfloat *params)
+{
+    return gl::GetUniformfvRobustANGLEContextANGLE(ctx, program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetUniformivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                       GLuint program,
+                                                       GLint location,
+                                                       GLsizei bufSize,
+                                                       GLsizei *length,
+                                                       GLint *params)
+{
+    return gl::GetUniformivRobustANGLEContextANGLE(ctx, program, location, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLuint index,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLfloat *params)
+{
+    return gl::GetVertexAttribfvRobustANGLEContextANGLE(ctx, index, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLuint index,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLint *params)
+{
+    return gl::GetVertexAttribivRobustANGLEContextANGLE(ctx, index, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribPointervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLuint index,
+                                                                  GLenum pname,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  void **pointer)
+{
+    return gl::GetVertexAttribPointervRobustANGLEContextANGLE(ctx, index, pname, bufSize, length,
+                                                              pointer);
+}
+
+void GL_APIENTRY glReadPixelsRobustANGLEContextANGLE(GLeglContext ctx,
+                                                     GLint x,
+                                                     GLint y,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLenum format,
+                                                     GLenum type,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLsizei *columns,
+                                                     GLsizei *rows,
+                                                     void *pixels)
+{
+    return gl::ReadPixelsRobustANGLEContextANGLE(ctx, x, y, width, height, format, type, bufSize,
+                                                 length, columns, rows, pixels);
+}
+
+void GL_APIENTRY glTexImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLint level,
+                                                     GLint internalformat,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLint border,
+                                                     GLenum format,
+                                                     GLenum type,
+                                                     GLsizei bufSize,
+                                                     const void *pixels)
+{
+    return gl::TexImage2DRobustANGLEContextANGLE(ctx, target, level, internalformat, width, height,
+                                                 border, format, type, bufSize, pixels);
+}
+
+void GL_APIENTRY glTexParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum pname,
+                                                         GLsizei bufSize,
+                                                         const GLfloat *params)
+{
+    return gl::TexParameterfvRobustANGLEContextANGLE(ctx, target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glTexParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum pname,
+                                                         GLsizei bufSize,
+                                                         const GLint *params)
+{
+    return gl::TexParameterivRobustANGLEContextANGLE(ctx, target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glTexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLint level,
+                                                        GLint xoffset,
+                                                        GLint yoffset,
+                                                        GLsizei width,
+                                                        GLsizei height,
+                                                        GLenum format,
+                                                        GLenum type,
+                                                        GLsizei bufSize,
+                                                        const void *pixels)
+{
+    return gl::TexSubImage2DRobustANGLEContextANGLE(ctx, target, level, xoffset, yoffset, width,
+                                                    height, format, type, bufSize, pixels);
+}
+
+void GL_APIENTRY glTexImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLint level,
+                                                     GLint internalformat,
+                                                     GLsizei width,
+                                                     GLsizei height,
+                                                     GLsizei depth,
+                                                     GLint border,
+                                                     GLenum format,
+                                                     GLenum type,
+                                                     GLsizei bufSize,
+                                                     const void *pixels)
+{
+    return gl::TexImage3DRobustANGLEContextANGLE(ctx, target, level, internalformat, width, height,
+                                                 depth, border, format, type, bufSize, pixels);
+}
+
+void GL_APIENTRY glTexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLint level,
+                                                        GLint xoffset,
+                                                        GLint yoffset,
+                                                        GLint zoffset,
+                                                        GLsizei width,
+                                                        GLsizei height,
+                                                        GLsizei depth,
+                                                        GLenum format,
+                                                        GLenum type,
+                                                        GLsizei bufSize,
+                                                        const void *pixels)
+{
+    return gl::TexSubImage3DRobustANGLEContextANGLE(ctx, target, level, xoffset, yoffset, zoffset,
+                                                    width, height, depth, format, type, bufSize,
+                                                    pixels);
+}
+
+void GL_APIENTRY glCompressedTexImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLint level,
+                                                               GLenum internalformat,
+                                                               GLsizei width,
+                                                               GLsizei height,
+                                                               GLint border,
+                                                               GLsizei imageSize,
+                                                               GLsizei dataSize,
+                                                               const GLvoid *data)
+{
+    return gl::CompressedTexImage2DRobustANGLEContextANGLE(
+        ctx, target, level, internalformat, width, height, border, imageSize, dataSize, data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage2DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLint level,
+                                                                  GLsizei xoffset,
+                                                                  GLsizei yoffset,
+                                                                  GLsizei width,
+                                                                  GLsizei height,
+                                                                  GLenum format,
+                                                                  GLsizei imageSize,
+                                                                  GLsizei dataSize,
+                                                                  const GLvoid *data)
+{
+    return gl::CompressedTexSubImage2DRobustANGLEContextANGLE(
+        ctx, target, level, xoffset, yoffset, width, height, format, imageSize, dataSize, data);
+}
+
+void GL_APIENTRY glCompressedTexImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLenum target,
+                                                               GLint level,
+                                                               GLenum internalformat,
+                                                               GLsizei width,
+                                                               GLsizei height,
+                                                               GLsizei depth,
+                                                               GLint border,
+                                                               GLsizei imageSize,
+                                                               GLsizei dataSize,
+                                                               const GLvoid *data)
+{
+    return gl::CompressedTexImage3DRobustANGLEContextANGLE(ctx, target, level, internalformat,
+                                                           width, height, depth, border, imageSize,
+                                                           dataSize, data);
+}
+
+void GL_APIENTRY glCompressedTexSubImage3DRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLenum target,
+                                                                  GLint level,
+                                                                  GLint xoffset,
+                                                                  GLint yoffset,
+                                                                  GLint zoffset,
+                                                                  GLsizei width,
+                                                                  GLsizei height,
+                                                                  GLsizei depth,
+                                                                  GLenum format,
+                                                                  GLsizei imageSize,
+                                                                  GLsizei dataSize,
+                                                                  const GLvoid *data)
+{
+    return gl::CompressedTexSubImage3DRobustANGLEContextANGLE(ctx, target, level, xoffset, yoffset,
+                                                              zoffset, width, height, depth, format,
+                                                              imageSize, dataSize, data);
+}
+
+void GL_APIENTRY glGetQueryivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                     GLenum target,
+                                                     GLenum pname,
+                                                     GLsizei bufSize,
+                                                     GLsizei *length,
+                                                     GLint *params)
+{
+    return gl::GetQueryivRobustANGLEContextANGLE(ctx, target, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetQueryObjectuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLuint id,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            GLuint *params)
+{
+    return gl::GetQueryObjectuivRobustANGLEContextANGLE(ctx, id, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetBufferPointervRobustANGLEContextANGLE(GLeglContext ctx,
+                                                            GLenum target,
+                                                            GLenum pname,
+                                                            GLsizei bufSize,
+                                                            GLsizei *length,
+                                                            void **params)
+{
+    return gl::GetBufferPointervRobustANGLEContextANGLE(ctx, target, pname, bufSize, length,
+                                                        params);
+}
+
+void GL_APIENTRY glGetIntegeri_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLuint index,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLint *data)
+{
+    return gl::GetIntegeri_vRobustANGLEContextANGLE(ctx, target, index, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetInternalformativRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLenum target,
+                                                              GLenum internalformat,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLint *params)
+{
+    return gl::GetInternalformativRobustANGLEContextANGLE(ctx, target, internalformat, pname,
+                                                          bufSize, length, params);
+}
+
+void GL_APIENTRY glGetVertexAttribIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLuint index,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLint *params)
+{
+    return gl::GetVertexAttribIivRobustANGLEContextANGLE(ctx, index, pname, bufSize, length,
+                                                         params);
+}
+
+void GL_APIENTRY glGetVertexAttribIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLuint index,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLuint *params)
+{
+    return gl::GetVertexAttribIuivRobustANGLEContextANGLE(ctx, index, pname, bufSize, length,
+                                                          params);
+}
+
+void GL_APIENTRY glGetUniformuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLuint program,
+                                                        GLint location,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLuint *params)
+{
+    return gl::GetUniformuivRobustANGLEContextANGLE(ctx, program, location, bufSize, length,
+                                                    params);
+}
+
+void GL_APIENTRY glGetActiveUniformBlockivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLuint program,
+                                                                  GLuint uniformBlockIndex,
+                                                                  GLenum pname,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  GLint *params)
+{
+    return gl::GetActiveUniformBlockivRobustANGLEContextANGLE(ctx, program, uniformBlockIndex,
+                                                              pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetInteger64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum pname,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLint64 *data)
+{
+    return gl::GetInteger64vRobustANGLEContextANGLE(ctx, pname, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetInteger64i_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLuint index,
+                                                          GLsizei bufSize,
+                                                          GLsizei *length,
+                                                          GLint64 *data)
+{
+    return gl::GetInteger64i_vRobustANGLEContextANGLE(ctx, target, index, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetBufferParameteri64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLint64 *params)
+{
+    return gl::GetBufferParameteri64vRobustANGLEContextANGLE(ctx, target, pname, bufSize, length,
+                                                             params);
+}
+
+void GL_APIENTRY glSamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLuint sampler,
+                                                             GLuint pname,
+                                                             GLsizei bufSize,
+                                                             const GLint *param)
+{
+    return gl::SamplerParameterivRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glSamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLuint sampler,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             const GLfloat *param)
+{
+    return gl::SamplerParameterfvRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glGetSamplerParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLuint sampler,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint *params)
+{
+    return gl::GetSamplerParameterivRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, length,
+                                                            params);
+}
+
+void GL_APIENTRY glGetSamplerParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLuint sampler,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLfloat *params)
+{
+    return gl::GetSamplerParameterfvRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, length,
+                                                            params);
+}
+
+void GL_APIENTRY glGetFramebufferParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                    GLuint sampler,
+                                                                    GLenum pname,
+                                                                    GLsizei bufSize,
+                                                                    GLsizei *length,
+                                                                    GLint *params)
+{
+    return gl::GetFramebufferParameterivRobustANGLEContextANGLE(ctx, sampler, pname, bufSize,
+                                                                length, params);
+}
+
+void GL_APIENTRY glGetProgramInterfaceivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                GLuint program,
+                                                                GLenum programInterface,
+                                                                GLenum pname,
+                                                                GLsizei bufSize,
+                                                                GLsizei *length,
+                                                                GLint *params)
+{
+    return gl::GetProgramInterfaceivRobustANGLEContextANGLE(ctx, program, programInterface, pname,
+                                                            bufSize, length, params);
+}
+
+void GL_APIENTRY glGetBooleani_vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLenum target,
+                                                        GLuint index,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLboolean *data)
+{
+    return gl::GetBooleani_vRobustANGLEContextANGLE(ctx, target, index, bufSize, length, data);
+}
+
+void GL_APIENTRY glGetMultisamplefvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLenum pname,
+                                                           GLuint index,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLfloat *val)
+{
+    return gl::GetMultisamplefvRobustANGLEContextANGLE(ctx, pname, index, bufSize, length, val);
+}
+
+void GL_APIENTRY glGetTexLevelParameterivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLint level,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLint *params)
+{
+    return gl::GetTexLevelParameterivRobustANGLEContextANGLE(ctx, target, level, pname, bufSize,
+                                                             length, params);
+}
+
+void GL_APIENTRY glGetTexLevelParameterfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLenum target,
+                                                                 GLint level,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLfloat *params)
+{
+    return gl::GetTexLevelParameterfvRobustANGLEContextANGLE(ctx, target, level, pname, bufSize,
+                                                             length, params);
+}
+
+void GL_APIENTRY glGetPointervRobustANGLERobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 void **params)
+{
+    return gl::GetPointervRobustANGLERobustANGLEContextANGLE(ctx, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glReadnPixelsRobustANGLEContextANGLE(GLeglContext ctx,
+                                                      GLint x,
+                                                      GLint y,
+                                                      GLsizei width,
+                                                      GLsizei height,
+                                                      GLenum format,
+                                                      GLenum type,
+                                                      GLsizei bufSize,
+                                                      GLsizei *length,
+                                                      GLsizei *columns,
+                                                      GLsizei *rows,
+                                                      void *data)
+{
+    return gl::ReadnPixelsRobustANGLEContextANGLE(ctx, x, y, width, height, format, type, bufSize,
+                                                  length, columns, rows, data);
+}
+
+void GL_APIENTRY glGetnUniformfvRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLuint program,
+                                                        GLint location,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLfloat *params)
+{
+    return gl::GetnUniformfvRobustANGLEContextANGLE(ctx, program, location, bufSize, length,
+                                                    params);
+}
+
+void GL_APIENTRY glGetnUniformivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                        GLuint program,
+                                                        GLint location,
+                                                        GLsizei bufSize,
+                                                        GLsizei *length,
+                                                        GLint *params)
+{
+    return gl::GetnUniformivRobustANGLEContextANGLE(ctx, program, location, bufSize, length,
+                                                    params);
+}
+
+void GL_APIENTRY glGetnUniformuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                         GLuint program,
+                                                         GLint location,
+                                                         GLsizei bufSize,
+                                                         GLsizei *length,
+                                                         GLuint *params)
+{
+    return gl::GetnUniformuivRobustANGLEContextANGLE(ctx, program, location, bufSize, length,
+                                                     params);
+}
+
+void GL_APIENTRY glTexParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                          GLenum target,
+                                                          GLenum pname,
+                                                          GLsizei bufSize,
+                                                          const GLint *params)
+{
+    return gl::TexParameterIivRobustANGLEContextANGLE(ctx, target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glTexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLenum target,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           const GLuint *params)
+{
+    return gl::TexParameterIuivRobustANGLEContextANGLE(ctx, target, pname, bufSize, params);
+}
+
+void GL_APIENTRY glGetTexParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLenum target,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLint *params)
+{
+    return gl::GetTexParameterIivRobustANGLEContextANGLE(ctx, target, pname, bufSize, length,
+                                                         params);
+}
+
+void GL_APIENTRY glGetTexParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLenum target,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLuint *params)
+{
+    return gl::GetTexParameterIuivRobustANGLEContextANGLE(ctx, target, pname, bufSize, length,
+                                                          params);
+}
+
+void GL_APIENTRY glSamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLuint sampler,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              const GLint *param)
+{
+    return gl::SamplerParameterIivRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glSamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                               GLuint sampler,
+                                                               GLenum pname,
+                                                               GLsizei bufSize,
+                                                               const GLuint *param)
+{
+    return gl::SamplerParameterIuivRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, param);
+}
+
+void GL_APIENTRY glGetSamplerParameterIivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                 GLuint sampler,
+                                                                 GLenum pname,
+                                                                 GLsizei bufSize,
+                                                                 GLsizei *length,
+                                                                 GLint *params)
+{
+    return gl::GetSamplerParameterIivRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, length,
+                                                             params);
+}
+
+void GL_APIENTRY glGetSamplerParameterIuivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                                  GLuint sampler,
+                                                                  GLenum pname,
+                                                                  GLsizei bufSize,
+                                                                  GLsizei *length,
+                                                                  GLuint *params)
+{
+    return gl::GetSamplerParameterIuivRobustANGLEContextANGLE(ctx, sampler, pname, bufSize, length,
+                                                              params);
+}
+
+void GL_APIENTRY glGetQueryObjectivRobustANGLEContextANGLE(GLeglContext ctx,
+                                                           GLuint id,
+                                                           GLenum pname,
+                                                           GLsizei bufSize,
+                                                           GLsizei *length,
+                                                           GLint *params)
+{
+    return gl::GetQueryObjectivRobustANGLEContextANGLE(ctx, id, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetQueryObjecti64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                             GLuint id,
+                                                             GLenum pname,
+                                                             GLsizei bufSize,
+                                                             GLsizei *length,
+                                                             GLint64 *params)
+{
+    return gl::GetQueryObjecti64vRobustANGLEContextANGLE(ctx, id, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glGetQueryObjectui64vRobustANGLEContextANGLE(GLeglContext ctx,
+                                                              GLuint id,
+                                                              GLenum pname,
+                                                              GLsizei bufSize,
+                                                              GLsizei *length,
+                                                              GLuint64 *params)
+{
+    return gl::GetQueryObjectui64vRobustANGLEContextANGLE(ctx, id, pname, bufSize, length, params);
+}
+
+void GL_APIENTRY glFramebufferTextureMultiviewLayeredANGLEContextANGLE(GLeglContext ctx,
+                                                                       GLenum target,
+                                                                       GLenum attachment,
+                                                                       GLuint texture,
+                                                                       GLint level,
+                                                                       GLint baseViewIndex,
+                                                                       GLsizei numViews)
+{
+    return gl::FramebufferTextureMultiviewLayeredANGLEContextANGLE(ctx, target, attachment, texture,
+                                                                   level, baseViewIndex, numViews);
+}
+
+void GL_APIENTRY
+glFramebufferTextureMultiviewSideBySideANGLEContextANGLE(GLeglContext ctx,
+                                                         GLenum target,
+                                                         GLenum attachment,
+                                                         GLuint texture,
+                                                         GLint level,
+                                                         GLsizei numViews,
+                                                         const GLint *viewportOffsets)
+{
+    return gl::FramebufferTextureMultiviewSideBySideANGLEContextANGLE(
+        ctx, target, attachment, texture, level, numViews, viewportOffsets);
+}
+
+}  // extern "C"
new file mode 100644
--- /dev/null
+++ b/gfx/angle/checkout/src/libGLESv2/libGLESv2_autogen.def
@@ -0,0 +1,1272 @@
+; GENERATED FILE - DO NOT EDIT.
+; Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
+;
+; 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.
+LIBRARY libGLESv2
+EXPORTS
+
+    ; OpenGL ES 2.0
+    glActiveTexture                                   @1
+    glAttachShader                                    @2
+    glBindAttribLocation                              @3
+    glBindBuffer                                      @4
+    glBindFramebuffer                                 @5
+    glBindRenderbuffer                                @6
+    glBindTexture                                     @7
+    glBlendColor                                      @8
+    glBlendEquation                                   @9
+    glBlendEquationSeparate                           @10
+    glBlendFunc                                       @11
+    glBlendFuncSeparate                               @12
+    glBufferData                                      @13
+    glBufferSubData                                   @14
+    glCheckFramebufferStatus                          @15
+    glClear                                           @16
+    glClearColor                                      @17
+    glClearDepthf                                     @18
+    glClearStencil                                    @19
+    glColorMask                                       @20
+    glCompileShader                                   @21
+    glCompressedTexImage2D                            @22
+    glCompressedTexSubImage2D                         @23
+    glCopyTexImage2D                                  @24
+    glCopyTexSubImage2D                               @25
+    glCreateProgram                                   @26
+    glCreateShader                                    @27
+    glCullFace                                        @28
+    glDeleteBuffers                                   @29
+    glDeleteFramebuffers                              @30
+    glDeleteProgram                                   @31
+    glDeleteRenderbuffers                             @32
+    glDeleteShader                                    @33
+    glDeleteTextures                                  @34
+    glDepthFunc                                       @35
+    glDepthMask                                       @36
+    glDepthRangef                                     @37
+    glDetachShader                                    @38
+    glDisable                                         @39
+    glDisableVertexAttribArray                        @40
+    glDrawArrays                                      @41
+    glDrawElements                                    @42
+    glEnable                                          @43
+    glEnableVertexAttribArray                         @44
+    glFinish                                          @45
+    glFlush                                           @46
+    glFramebufferRenderbuffer                         @47
+    glFramebufferTexture2D                            @48
+    glFrontFace                                       @49
+    glGenBuffers                                      @50
+    glGenFramebuffers                                 @51
+    glGenRenderbuffers                                @52
+    glGenTextures                                     @53
+    glGenerateMipmap                                  @54
+    glGetActiveAttrib                                 @55
+    glGetActiveUniform                                @56
+    glGetAttachedShaders                              @57
+    glGetAttribLocation                               @58
+    glGetBooleanv                                     @59
+    glGetBufferParameteriv                            @60
+    glGetError                                        @61
+    glGetFloatv                                       @62
+    glGetFramebufferAttachmentParameteriv             @63
+    glGetIntegerv                                     @64
+    glGetProgramInfoLog                               @65
+    glGetProgramiv                                    @66
+    glGetRenderbufferParameteriv                      @67
+    glGetShaderInfoLog                                @68
+    glGetShaderPrecisionFormat                        @69
+    glGetShaderSource                                 @70
+    glGetShaderiv                                     @71
+    glGetString                                       @72
+    glGetTexParameterfv                               @73
+    glGetTexParameteriv                               @74
+    glGetUniformLocation                              @75
+    glGetUniformfv                                    @76
+    glGetUniformiv                                    @77
+    glGetVertexAttribPointerv                         @78
+    glGetVertexAttribfv                               @79
+    glGetVertexAttribiv                               @80
+    glHint                                            @81
+    glIsBuffer                                        @82
+    glIsEnabled                                       @83
+    glIsFramebuffer                                   @84
+    glIsProgram                                       @85
+    glIsRenderbuffer                                  @86
+    glIsShader                                        @87
+    glIsTexture                                       @88
+    glLineWidth                                       @89
+    glLinkProgram                                     @90
+    glPixelStorei                                     @91
+    glPolygonOffset                                   @92
+    glReadPixels                                      @93
+    glReleaseShaderCompiler                           @94
+    glRenderbufferStorage                             @95
+    glSampleCoverage                                  @96
+    glScissor                                         @97
+    glShaderBinary                                    @98
+    glShaderSource                                    @99
+    glStencilFunc                                     @100
+    glStencilFuncSeparate                             @101
+    glStencilMask                                     @102
+    glStencilMaskSeparate                             @103
+    glStencilOp                                       @104
+    glStencilOpSeparate                               @105
+    glTexImage2D                                      @106
+    glTexParameterf                                   @107
+    glTexParameterfv                                  @108
+    glTexParameteri                                   @109
+    glTexParameteriv                                  @110
+    glTexSubImage2D                                   @111
+    glUniform1f                                       @112
+    glUniform1fv                                      @113
+    glUniform1i                                       @114
+    glUniform1iv                                      @115
+    glUniform2f                                       @116
+    glUniform2fv                                      @117
+    glUniform2i                                       @118
+    glUniform2iv                                      @119
+    glUniform3f                                       @120
+    glUniform3fv                                      @121
+    glUniform3i                                       @122
+    glUniform3iv                                      @123
+    glUniform4f                                       @124
+    glUniform4fv                                      @125
+    glUniform4i                                       @126
+    glUniform4iv                                      @127
+    glUniformMatrix2fv                                @128
+    glUniformMatrix3fv                                @129
+    glUniformMatrix4fv                                @130
+    glUseProgram                                      @131
+    glValidateProgram                                 @132
+    glVertexAttrib1f                                  @133
+    glVertexAttrib1fv                                 @134
+    glVertexAttrib2f                                  @135
+    glVertexAttrib2fv                                 @136
+    glVertexAttrib3f                                  @137
+    glVertexAttrib3fv                                 @138
+    glVertexAttrib4f                                  @139
+    glVertexAttrib4fv                                 @140
+    glVertexAttribPointer                             @141
+    glViewport                                        @142
+
+    ; OpenGL ES 3.0
+    glBeginQuery                                      @143
+    glBeginTransformFeedback                          @144
+    glBindBufferBase                                  @145
+    glBindBufferRange                                 @146
+    glBindSampler                                     @147
+    glBindTransformFeedback                           @148
+    glBindVertexArray                                 @149
+    glBlitFramebuffer                                 @150
+    glClearBufferfi                                   @151
+    glClearBufferfv                                   @152
+    glClearBufferiv                                   @153
+    glClearBufferuiv                                  @154
+    glClientWaitSync                                  @155
+    glCompressedTexImage3D                            @156
+    glCompressedTexSubImage3D                         @157
+    glCopyBufferSubData                               @158
+    glCopyTexSubImage3D                               @159
+    glDeleteQueries                                   @160
+    glDeleteSamplers                                  @161
+    glDeleteSync                                      @162
+    glDeleteTransformFeedbacks                        @163
+    glDeleteVertexArrays                              @164
+    glDrawArraysInstanced                             @165
+    glDrawBuffers                                     @166
+    glDrawElementsInstanced                           @167
+    glDrawRangeElements                               @168
+    glEndQuery                                        @169
+    glEndTransformFeedback                            @170
+    glFenceSync                                       @171
+    glFlushMappedBufferRange                          @172
+    glFramebufferTextureLayer                         @173
+    glGenQueries                                      @174
+    glGenSamplers                                     @175
+    glGenTransformFeedbacks                           @176
+    glGenVertexArrays                                 @177
+    glGetActiveUniformBlockName                       @178
+    glGetActiveUniformBlockiv                         @179
+    glGetActiveUniformsiv                             @180
+    glGetBufferParameteri64v                          @181
+    glGetBufferPointerv                               @182
+    glGetFragDataLocation                             @183
+    glGetInteger64i_v                                 @184
+    glGetInteger64v                                   @185
+    glGetIntegeri_v                                   @186
+    glGetInternalformativ                             @187
+    glGetProgramBinary                                @188
+    glGetQueryObjectuiv                               @189
+    glGetQueryiv                                      @190
+    glGetSamplerParameterfv                           @191
+    glGetSamplerParameteriv                           @192
+    glGetStringi                                      @193
+    glGetSynciv                                       @194
+    glGetTransformFeedbackVarying                     @195
+    glGetUniformBlockIndex                            @196
+    glGetUniformIndices                               @197
+    glGetUniformuiv                                   @198
+    glGetVertexAttribIiv                              @199
+    glGetVertexAttribIuiv                             @200
+    glInvalidateFramebuffer                           @201
+    glInvalidateSubFramebuffer                        @202
+    glIsQuery                                         @203
+    glIsSampler                                       @204
+    glIsSync                                          @205
+    glIsTransformFeedback                             @206
+    glIsVertexArray                                   @207
+    glMapBufferRange                                  @208
+    glPauseTransformFeedback                          @209
+    glProgramBinary                                   @210
+    glProgramParameteri                               @211
+    glReadBuffer                                      @212
+    glRenderbufferStorageMultisample                  @213
+    glResumeTransformFeedback                         @214
+    glSamplerParameterf                               @215
+    glSamplerParameterfv                              @216
+    glSamplerParameteri                               @217
+    glSamplerParameteriv                              @218
+    glTexImage3D                                      @219
+    glTexStorage2D                                    @220
+    glTexStorage3D                                    @221
+    glTexSubImage3D                                   @222
+    glTransformFeedbackVaryings                       @223
+    glUniform1ui                                      @224
+    glUniform1uiv                                     @225
+    glUniform2ui                                      @226
+    glUniform2uiv                                     @227
+    glUniform3ui                                      @228
+    glUniform3uiv                                     @229
+    glUniform4ui                                      @230
+    glUniform4uiv                                     @231
+    glUniformBlockBinding                             @232
+    glUniformMatrix2x3fv                              @233
+    glUniformMatrix2x4fv                              @234
+    glUniformMatrix3x2fv                              @235
+    glUniformMatrix3x4fv                              @236
+    glUniformMatrix4x2fv                              @237
+    glUniformMatrix4x3fv                              @238
+    glUnmapBuffer                                     @239
+    glVertexAttribDivisor                             @240
+    glVertexAttribI4i                                 @241
+    glVertexAttribI4iv                                @242
+    glVertexAttribI4ui                                @243
+    glVertexAttribI4uiv                               @244
+    glVertexAttribIPointer                            @245
+    glWaitSync                                        @246
+
+    ; OpenGL ES 3.1
+    glActiveShaderProgram                             @247
+    glBindImageTexture                                @248
+    glBindProgramPipeline                             @249
+    glBindVertexBuffer                                @250
+    glCreateShaderProgramv                            @251
+    glDeleteProgramPipelines                          @252
+    glDispatchCompute                                 @253
+    glDispatchComputeIndirect                         @254
+    glDrawArraysIndirect                              @255
+    glDrawElementsIndirect                            @256
+    glFramebufferParameteri                           @257
+    glGenProgramPipelines                             @258
+    glGetBooleani_v                                   @259
+    glGetFramebufferParameteriv                       @260
+    glGetMultisamplefv                                @261
+    glGetProgramInterfaceiv                           @262
+    glGetProgramPipelineInfoLog                       @263
+    glGetProgramPipelineiv                            @264
+    glGetProgramResourceIndex                         @265
+    glGetProgramResourceLocation                      @266
+    glGetProgramResourceName                          @267
+    glGetProgramResourceiv                            @268
+    glGetTexLevelParameterfv                          @269
+    glGetTexLevelParameteriv                          @270
+    glIsProgramPipeline                               @271
+    glMemoryBarrier                                   @272
+    glMemoryBarrierByRegion                           @273
+    glProgramUniform1f                                @274
+    glProgramUniform1fv                               @275
+    glProgramUniform1i                                @276
+    glProgramUniform1iv                               @277
+    glProgramUniform1ui                               @278
+    glProgramUniform1uiv                              @279
+    glProgramUniform2f                                @280
+    glProgramUniform2fv                               @281
+    glProgramUniform2i                                @282
+    glProgramUniform2iv                               @283
+    glProgramUniform2ui                               @284
+    glProgramUniform2uiv                              @285
+    glProgramUniform3f                                @286
+    glProgramUniform3fv                               @287
+    glProgramUniform3i                                @288
+    glProgramUniform3iv                               @289
+    glProgramUniform3ui                               @290
+    glProgramUniform3uiv                              @291
+    glProgramUniform4f                                @292
+    glProgramUniform4fv                               @293
+    glProgramUniform4i                                @294
+    glProgramUniform4iv                               @295
+    glProgramUniform4ui                               @296
+    glProgramUniform4uiv                              @297
+    glProgramUniformMatrix2fv                         @298
+    glProgramUniformMatrix2x3fv                       @299
+    glProgramUniformMatrix2x4fv                       @300
+    glProgramUniformMatrix3fv                         @301
+    glProgramUniformMatrix3x2fv                       @302
+    glProgramUniformMatrix3x4fv                       @303
+    glProgramUniformMatrix4fv                         @304
+    glProgramUniformMatrix4x2fv                       @305
+    glProgramUniformMatrix4x3fv                       @306
+    glSampleMaski                                     @307
+    glTexStorage2DMultisample                         @308
+    glUseProgramStages                                @309
+    glValidateProgramPipeline                         @310
+    glVertexAttribBinding                             @311
+    glVertexAttribFormat                              @312
+    glVertexAttribIFormat                             @313
+    glVertexBindingDivisor                            @314
+
+    ; OpenGL ES 1.0
+    glAlphaFunc                                       @315
+    glAlphaFuncx                                      @316
+    glClearColorx                                     @317
+    glClearDepthx                                     @318
+    glClientActiveTexture                             @319
+    glClipPlanef                                      @320
+    glClipPlanex                                      @321
+    glColor4f                                         @322
+    glColor4ub                                        @323
+    glColor4x                                         @324
+    glColorPointer                                    @325
+    glDepthRangex                                     @326
+    glDisableClientState                              @327
+    glEnableClientState                               @328
+    glFogf                                            @329
+    glFogfv                                           @330
+    glFogx                                            @331
+    glFogxv                                           @332
+    glFrustumf                                        @333
+    glFrustumx                                        @334
+    glGetClipPlanef                                   @335
+    glGetClipPlanex                                   @336
+    glGetFixedv                                       @337
+    glGetLightfv                                      @338
+    glGetLightxv                                      @339
+    glGetMaterialfv                                   @340
+    glGetMaterialxv                                   @341
+    glGetPointerv                                     @342
+    glGetTexEnvfv                                     @343
+    glGetTexEnviv                                     @344
+    glGetTexEnvxv                                     @345
+    glGetTexParameterxv                               @346
+    glLightModelf                                     @347
+    glLightModelfv                                    @348
+    glLightModelx                                     @349
+    glLightModelxv                                    @350
+    glLightf                                          @351
+    glLightfv                                         @352
+    glLightx                                          @353
+    glLightxv                                         @354
+    glLineWidthx                                      @355
+    glLoadIdentity                                    @356
+    glLoadMatrixf                                     @357
+    glLoadMatrixx                                     @358
+    glLogicOp                                         @359
+    glMaterialf                                       @360
+    glMaterialfv                                      @361
+    glMaterialx                                       @362
+    glMaterialxv                                      @363
+    glMatrixMode                                      @364
+    glMultMatrixf                                     @365
+    glMultMatrixx                                     @366
+    glMultiTexCoord4f                                 @367
+    glMultiTexCoord4x                                 @368
+    glNormal3f                                        @369
+    glNormal3x                                        @370
+    glNormalPointer                                   @371
+    glOrthof                                          @372
+    glOrthox                                          @373
+    glPointParameterf                                 @374
+    glPointParameterfv                                @375
+    glPointParameterx                                 @376
+    glPointParameterxv                                @377
+    glPointSize                                       @378
+    glPointSizex                                      @379
+    glPolygonOffsetx                                  @380
+    glPopMatrix                                       @381
+    glPushMatrix                                      @382
+    glRotatef                                         @383
+    glRotatex                                         @384
+    glSampleCoveragex                                 @385
+    glScalef                                          @386
+    glScalex                                          @387
+    glShadeModel                                      @388
+    glTexCoordPointer                                 @389
+    glTexEnvf                                         @390
+    glTexEnvfv                                        @391
+    glTexEnvi                                         @392
+    glTexEnviv                                        @393
+    glTexEnvx                                         @394
+    glTexEnvxv                                        @395
+    glTexParameterx                                   @396
+    glTexParameterxv                                  @397
+    glTranslatef                                      @398
+    glTranslatex                                      @399
+    glVertexPointer                                   @400
+
+    ; GL_ANGLE_framebuffer_blit
+    glBlitFramebufferANGLE                            @401
+
+    ; GL_ANGLE_framebuffer_multisample
+    glRenderbufferStorageMultisampleANGLE             @402
+
+    ; GL_ANGLE_instanced_arrays
+    glDrawArraysInstancedANGLE                        @403
+    glDrawElementsInstancedANGLE                      @404
+    glVertexAttribDivisorANGLE                        @405
+
+    ; GL_ANGLE_multiview
+    glFramebufferTextureMultiviewLayeredANGLE         @406
+    glFramebufferTextureMultiviewSideBySideANGLE      @407
+
+    ; GL_ANGLE_request_extension
+    glRequestExtensionANGLE                           @408
+
+    ; GL_ANGLE_robust_client_memory
+    glGetBooleanvRobustANGLE                          @409
+    glGetBufferParameterivRobustANGLE                 @410
+    glGetFloatvRobustANGLE                            @411
+    glGetFramebufferAttachmentParameterivRobustANGLE  @412
+    glGetIntegervRobustANGLE                          @413
+    glGetProgramivRobustANGLE                         @414
+    glGetRenderbufferParameterivRobustANGLE           @415
+    glGetShaderivRobustANGLE                          @416
+    glGetTexParameterfvRobustANGLE                    @417
+    glGetTexParameterivRobustANGLE                    @418
+    glGetUniformfvRobustANGLE                         @419
+    glGetUniformivRobustANGLE                         @420
+    glGetVertexAttribfvRobustANGLE                    @421
+    glGetVertexAttribivRobustANGLE                    @422
+    glGetVertexAttribPointervRobustANGLE              @423
+    glReadPixelsRobustANGLE                           @424
+    glTexImage2DRobustANGLE                           @425
+    glTexParameterfvRobustANGLE                       @426
+    glTexParameterivRobustANGLE                       @427
+    glTexSubImage2DRobustANGLE                        @428
+    glTexImage3DRobustANGLE                           @429
+    glTexSubImage3DRobustANGLE                        @430
+    glCompressedTexImage2DRobustANGLE                 @431
+    glCompressedTexSubImage2DRobustANGLE              @432
+    glCompressedTexImage3DRobustANGLE                 @433
+    glCompressedTexSubImage3DRobustANGLE              @434
+    glGetQueryivRobustANGLE                           @435
+    glGetQueryObjectuivRobustANGLE                    @436
+    glGetBufferPointervRobustANGLE                    @437
+    glGetIntegeri_vRobustANGLE                        @438
+    glGetInternalformativRobustANGLE                  @439
+    glGetVertexAttribIivRobustANGLE                   @440
+    glGetVertexAttribIuivRobustANGLE                  @441
+    glGetUniformuivRobustANGLE                        @442
+    glGetActiveUniformBlockivRobustANGLE              @443
+    glGetInteger64vRobustANGLE                        @444
+    glGetInteger64i_vRobustANGLE                      @445
+    glGetBufferParameteri64vRobustANGLE               @446
+    glSamplerParameterivRobustANGLE                   @447
+    glSamplerParameterfvRobustANGLE                   @448
+    glGetSamplerParameterivRobustANGLE                @449
+    glGetSamplerParameterfvRobustANGLE                @450
+    glGetFramebufferParameterivRobustANGLE            @451
+    glGetProgramInterfaceivRobustANGLE                @452
+    glGetBooleani_vRobustANGLE                        @453
+    glGetMultisamplefvRobustANGLE                     @454
+    glGetTexLevelParameterivRobustANGLE               @455
+    glGetTexLevelParameterfvRobustANGLE               @456
+    glGetPointervRobustANGLERobustANGLE               @457
+    glReadnPixelsRobustANGLE                          @458
+    glGetnUniformfvRobustANGLE                        @459
+    glGetnUniformivRobustANGLE                        @460
+    glGetnUniformuivRobustANGLE                       @461
+    glTexParameterIivRobustANGLE                      @462
+    glTexParameterIuivRobustANGLE                     @463
+    glGetTexParameterIivRobustANGLE                   @464
+    glGetTexParameterIuivRobustANGLE                  @465
+    glSamplerParameterIivRobustANGLE                  @466
+    glSamplerParameterIuivRobustANGLE                 @467
+    glGetSamplerParameterIivRobustANGLE               @468
+    glGetSamplerParameterIuivRobustANGLE              @469
+    glGetQueryObjectivRobustANGLE                     @470
+    glGetQueryObjecti64vRobustANGLE                   @471
+    glGetQueryObjectui64vRobustANGLE                  @472
+
+    ; GL_ANGLE_translated_shader_source
+    glGetTranslatedShaderSourceANGLE                  @473
+
+    ; GL_CHROMIUM_bind_uniform_location
+    glBindUniformLocationCHROMIUM                     @474
+
+    ; GL_CHROMIUM_copy_compressed_texture
+    glCompressedCopyTextureCHROMIUM                   @475
+
+    ; GL_CHROMIUM_copy_texture
+    glCopyTextureCHROMIUM                             @476
+    glCopySubTextureCHROMIUM                          @477
+
+    ; GL_CHROMIUM_framebuffer_mixed_samples
+    glCoverageModulationCHROMIUM                      @478
+    glMatrixLoadfCHROMIUM                             @479
+    glMatrixLoadIdentityCHROMIUM                      @480
+
+    ; GL_CHROMIUM_path_rendering
+    glGenPathsCHROMIUM                                @481
+    glDeletePathsCHROMIUM                             @482
+    glIsPathCHROMIUM                                  @483
+    glPathCommandsCHROMIUM                            @484
+    glPathParameterfCHROMIUM                          @485
+    glPathParameteriCHROMIUM                          @486
+    glGetPathParameterfvCHROMIUM                      @487
+    glGetPathParameterivCHROMIUM                      @488
+    glPathStencilFuncCHROMIUM                         @489
+    glStencilFillPathCHROMIUM                         @490
+    glStencilStrokePathCHROMIUM                       @491
+    glCoverFillPathCHROMIUM                           @492
+    glCoverStrokePathCHROMIUM                         @493
+    glStencilThenCoverFillPathCHROMIUM                @494
+    glStencilThenCoverStrokePathCHROMIUM              @495
+    glCoverFillPathInstancedCHROMIUM                  @496
+    glCoverStrokePathInstancedCHROMIUM                @497
+    glStencilStrokePathInstancedCHROMIUM              @498
+    glStencilFillPathInstancedCHROMIUM                @499
+    glStencilThenCoverFillPathInstancedCHROMIUM       @500
+    glStencilThenCoverStrokePathInstancedCHROMIUM     @501
+    glBindFragmentInputLocationCHROMIUM               @502
+    glProgramPathFragmentInputGenCHROMIUM             @503
+
+    ; GL_EXT_debug_marker
+    glInsertEventMarkerEXT                            @504
+    glPopGroupMarkerEXT                               @505
+    glPushGroupMarkerEXT                              @506
+
+    ; GL_EXT_discard_framebuffer
+    glDiscardFramebufferEXT                           @507
+
+    ; GL_EXT_disjoint_timer_query
+    glBeginQueryEXT                                   @508
+    glDeleteQueriesEXT                                @509
+    glEndQueryEXT                                     @510
+    glGenQueriesEXT                                   @511
+    glGetQueryObjecti64vEXT                           @512
+    glGetQueryObjectivEXT                             @513
+    glGetQueryObjectui64vEXT                          @514
+    glGetQueryObjectuivEXT                            @515
+    glGetQueryivEXT                                   @516
+    glIsQueryEXT                                      @517
+    glQueryCounterEXT                                 @518
+
+    ; GL_EXT_draw_buffers
+    glDrawBuffersEXT                                  @519
+
+    ; GL_EXT_map_buffer_range
+    glFlushMappedBufferRangeEXT                       @520
+    glMapBufferRangeEXT                               @521
+
+    ; GL_EXT_occlusion_query_boolean
+
+    ; GL_EXT_robustness
+    glGetGraphicsResetStatusEXT                       @522
+    glGetnUniformfvEXT                                @523
+    glGetnUniformivEXT                                @524
+    glReadnPixelsEXT                                  @525
+
+    ; GL_EXT_texture_storage
+    glTexStorage1DEXT                                 @526
+    glTexStorage2DEXT                                 @527
+    glTexStorage3DEXT                                 @528
+
+    ; GL_KHR_debug
+    glDebugMessageCallbackKHR                         @529
+    glDebugMessageControlKHR                          @530
+    glDebugMessageInsertKHR                           @531
+    glGetDebugMessageLogKHR                           @532
+    glGetObjectLabelKHR                               @533
+    glGetObjectPtrLabelKHR                            @534
+    glGetPointervKHR                                  @535
+    glObjectLabelKHR                                  @536
+    glObjectPtrLabelKHR                               @537
+    glPopDebugGroupKHR                                @538
+    glPushDebugGroupKHR                               @539
+
+    ; GL_NV_fence
+    glDeleteFencesNV                                  @540
+    glFinishFenceNV                                   @541
+    glGenFencesNV                                     @542
+    glGetFenceivNV                                    @543
+    glIsFenceNV                                       @544
+    glSetFenceNV                                      @545
+    glTestFenceNV                                     @546
+
+    ; GL_OES_EGL_image
+    glEGLImageTargetRenderbufferStorageOES            @547
+    glEGLImageTargetTexture2DOES                      @548
+
+    ; GL_OES_draw_texture
+    glDrawTexfOES                                     @549
+    glDrawTexfvOES                                    @550
+    glDrawTexiOES                                     @551
+    glDrawTexivOES                                    @552
+    glDrawTexsOES                                     @553
+    glDrawTexsvOES                                    @554
+    glDrawTexxOES                                     @555
+    glDrawTexxvOES                                    @556
+
+    ; GL_OES_framebuffer_object
+    glBindFramebufferOES                              @557
+    glBindRenderbufferOES                             @558
+    glCheckFramebufferStatusOES                       @559
+    glDeleteFramebuffersOES                           @560
+    glDeleteRenderbuffersOES                          @561
+    glFramebufferRenderbufferOES                      @562
+    glFramebufferTexture2DOES                         @563
+    glGenFramebuffersOES                              @564
+    glGenRenderbuffersOES                             @565
+    glGenerateMipmapOES                               @566
+    glGetFramebufferAttachmentParameterivOES          @567
+    glGetRenderbufferParameterivOES                   @568
+    glIsFramebufferOES                                @569
+    glIsRenderbufferOES                               @570
+    glRenderbufferStorageOES                          @571
+
+    ; GL_OES_get_program_binary
+    glGetProgramBinaryOES                             @572
+    glProgramBinaryOES                                @573
+
+    ; GL_OES_mapbuffer
+    glGetBufferPointervOES                            @574
+    glMapBufferOES                                    @575
+    glUnmapBufferOES                                  @576
+
+    ; GL_OES_matrix_palette
+    glCurrentPaletteMatrixOES                         @577
+    glLoadPaletteFromModelViewMatrixOES               @578
+    glMatrixIndexPointerOES                           @579
+    glWeightPointerOES                                @580
+
+    ; GL_OES_point_size_array
+    glPointSizePointerOES                             @581
+
+    ; GL_OES_query_matrix
+    glQueryMatrixxOES                                 @582
+
+    ; GL_OES_texture_cube_map
+    glGetTexGenfvOES                                  @583
+    glGetTexGenivOES                                  @584
+    glGetTexGenxvOES                                  @585
+    glTexGenfOES                                      @586
+    glTexGenfvOES                                     @587
+    glTexGeniOES                                      @588
+    glTexGenivOES                                     @589
+    glTexGenxOES                                      @590
+    glTexGenxvOES                                     @591
+
+    ; GL_OES_vertex_array_object
+    glBindVertexArrayOES                              @592
+    glDeleteVertexArraysOES                           @593
+    glGenVertexArraysOES                              @594
+    glIsVertexArrayOES                                @595
+
+    ; EGL_ANGLE_explicit_context
+    glActiveShaderProgramContextANGLE                             @596
+    glActiveTextureContextANGLE                                   @597
+    glAlphaFuncContextANGLE                                       @598
+    glAlphaFuncxContextANGLE                                      @599
+    glAttachShaderContextANGLE                                    @600
+    glBeginQueryContextANGLE                                      @601
+    glBeginQueryEXTContextANGLE                                   @602
+    glBeginTransformFeedbackContextANGLE                          @603
+    glBindAttribLocationContextANGLE                              @604
+    glBindBufferContextANGLE                                      @605
+    glBindBufferBaseContextANGLE                                  @606
+    glBindBufferRangeContextANGLE                                 @607
+    glBindFramebufferContextANGLE                                 @608
+    glBindFramebufferOESContextANGLE                              @609
+    glBindImageTextureContextANGLE                                @610
+    glBindProgramPipelineContextANGLE                             @611
+    glBindRenderbufferContextANGLE                                @612
+    glBindRenderbufferOESContextANGLE                             @613
+    glBindSamplerContextANGLE                                     @614
+    glBindTextureContextANGLE                                     @615
+    glBindTransformFeedbackContextANGLE                           @616
+    glBindVertexArrayContextANGLE                                 @617
+    glBindVertexArrayOESContextANGLE                              @618
+    glBindVertexBufferContextANGLE                                @619
+    glBlendColorContextANGLE                                      @620
+    glBlendEquationContextANGLE                                   @621
+    glBlendEquationSeparateContextANGLE                           @622
+    glBlendFuncContextANGLE                                       @623
+    glBlendFuncSeparateContextANGLE                               @624
+    glBlitFramebufferContextANGLE                                 @625
+    glBlitFramebufferANGLEContextANGLE                            @626
+    glBufferDataContextANGLE                                      @627
+    glBufferSubDataContextANGLE                                   @628
+    glCheckFramebufferStatusContextANGLE                          @629
+    glCheckFramebufferStatusOESContextANGLE                       @630
+    glClearContextANGLE                                           @631
+    glClearBufferfiContextANGLE                                   @632
+    glClearBufferfvContextANGLE                                   @633
+    glClearBufferivContextANGLE                                   @634
+    glClearBufferuivContextANGLE                                  @635
+    glClearColorContextANGLE                                      @636
+    glClearColorxContextANGLE                                     @637
+    glClearDepthfContextANGLE                                     @638
+    glClearDepthxContextANGLE                                     @639
+    glClearStencilContextANGLE                                    @640
+    glClientActiveTextureContextANGLE                             @641
+    glClientWaitSyncContextANGLE                                  @642
+    glClipPlanefContextANGLE                                      @643
+    glClipPlanexContextANGLE                                      @644
+    glColor4fContextANGLE                                         @645
+    glColor4ubContextANGLE                                        @646
+    glColor4xContextANGLE                                         @647
+    glColorMaskContextANGLE                                       @648
+    glColorPointerContextANGLE                                    @649
+    glCompileShaderContextANGLE                                   @650
+    glCompressedTexImage2DContextANGLE                            @651
+    glCompressedTexImage3DContextANGLE                            @652
+    glCompressedTexSubImage2DContextANGLE                         @653
+    glCompressedTexSubImage3DContextANGLE                         @654
+    glCopyBufferSubDataContextANGLE                               @655
+    glCopyTexImage2DContextANGLE                                  @656
+    glCopyTexSubImage2DContextANGLE                               @657
+    glCopyTexSubImage3DContextANGLE                               @658
+    glCreateProgramContextANGLE                                   @659
+    glCreateShaderContextANGLE                                    @660
+    glCreateShaderProgramvContextANGLE                            @661
+    glCullFaceContextANGLE                                        @662
+    glCurrentPaletteMatrixOESContextANGLE                         @663
+    glDebugMessageCallbackKHRContextANGLE                         @664
+    glDebugMessageControlKHRContextANGLE                          @665
+    glDebugMessageInsertKHRContextANGLE                           @666
+    glDeleteBuffersContextANGLE                                   @667
+    glDeleteFencesNVContextANGLE                                  @668
+    glDeleteFramebuffersContextANGLE                              @669
+    glDeleteFramebuffersOESContextANGLE                           @670
+    glDeleteProgramContextANGLE                                   @671
+    glDeleteProgramPipelinesContextANGLE                          @672
+    glDeleteQueriesContextANGLE                                   @673
+    glDeleteQueriesEXTContextANGLE                                @674
+    glDeleteRenderbuffersContextANGLE                             @675
+    glDeleteRenderbuffersOESContextANGLE                          @676
+    glDeleteSamplersContextANGLE                                  @677
+    glDeleteShaderContextANGLE                                    @678
+    glDeleteSyncContextANGLE                                      @679
+    glDeleteTexturesContextANGLE                                  @680
+    glDeleteTransformFeedbacksContextANGLE                        @681
+    glDeleteVertexArraysContextANGLE                              @682
+    glDeleteVertexArraysOESContextANGLE                           @683
+    glDepthFuncContextANGLE                                       @684
+    glDepthMaskContextANGLE                                       @685
+    glDepthRangefContextANGLE                                     @686
+    glDepthRangexContextANGLE                                     @687
+    glDetachShaderContextANGLE                                    @688
+    glDisableContextANGLE                                         @689
+    glDisableClientStateContextANGLE                              @690
+    glDisableVertexAttribArrayContextANGLE                        @691
+    glDiscardFramebufferEXTContextANGLE                           @692
+    glDispatchComputeContextANGLE                                 @693
+    glDispatchComputeIndirectContextANGLE                         @694
+    glDrawArraysContextANGLE                                      @695
+    glDrawArraysIndirectContextANGLE                              @696
+    glDrawArraysInstancedContextANGLE                             @697
+    glDrawArraysInstancedANGLEContextANGLE                        @698
+    glDrawBuffersContextANGLE                                     @699
+    glDrawBuffersEXTContextANGLE                                  @700
+    glDrawElementsContextANGLE                                    @701
+    glDrawElementsIndirectContextANGLE                            @702
+    glDrawElementsInstancedContextANGLE                           @703
+    glDrawElementsInstancedANGLEContextANGLE                      @704
+    glDrawRangeElementsContextANGLE                               @705
+    glDrawTexfOESContextANGLE                                     @706
+    glDrawTexfvOESContextANGLE                                    @707
+    glDrawTexiOESContextANGLE                                     @708
+    glDrawTexivOESContextANGLE                                    @709
+    glDrawTexsOESContextANGLE                                     @710
+    glDrawTexsvOESContextANGLE                                    @711
+    glDrawTexxOESContextANGLE                                     @712
+    glDrawTexxvOESContextANGLE                                    @713
+    glEGLImageTargetRenderbufferStorageOESContextANGLE            @714
+    glEGLImageTargetTexture2DOESContextANGLE                      @715
+    glEnableContextANGLE                                          @716
+    glEnableClientStateContextANGLE                               @717
+    glEnableVertexAttribArrayContextANGLE                         @718
+    glEndQueryContextANGLE                                        @719
+    glEndQueryEXTContextANGLE                                     @720
+    glEndTransformFeedbackContextANGLE                            @721
+    glFenceSyncContextANGLE                                       @722
+    glFinishContextANGLE                                          @723
+    glFinishFenceNVContextANGLE                                   @724
+    glFlushContextANGLE                                           @725
+    glFlushMappedBufferRangeContextANGLE                          @726
+    glFlushMappedBufferRangeEXTContextANGLE                       @727
+    glFogfContextANGLE                                            @728
+    glFogfvContextANGLE                                           @729
+    glFogxContextANGLE                                            @730
+    glFogxvContextANGLE                                           @731
+    glFramebufferParameteriContextANGLE                           @732
+    glFramebufferRenderbufferContextANGLE                         @733
+    glFramebufferRenderbufferOESContextANGLE                      @734
+    glFramebufferTexture2DContextANGLE                            @735
+    glFramebufferTexture2DOESContextANGLE                         @736
+    glFramebufferTextureLayerContextANGLE                         @737
+    glFrontFaceContextANGLE                                       @738
+    glFrustumfContextANGLE                                        @739
+    glFrustumxContextANGLE                                        @740
+    glGenBuffersContextANGLE                                      @741
+    glGenFencesNVContextANGLE                                     @742
+    glGenFramebuffersContextANGLE                                 @743
+    glGenFramebuffersOESContextANGLE                              @744
+    glGenProgramPipelinesContextANGLE                             @745
+    glGenQueriesContextANGLE                                      @746
+    glGenQueriesEXTContextANGLE                                   @747
+    glGenRenderbuffersContextANGLE                                @748
+    glGenRenderbuffersOESContextANGLE                             @749
+    glGenSamplersContextANGLE                                     @750
+    glGenTexturesContextANGLE                                     @751
+    glGenTransformFeedbacksContextANGLE                           @752
+    glGenVertexArraysContextANGLE                                 @753
+    glGenVertexArraysOESContextANGLE                              @754
+    glGenerateMipmapContextANGLE                                  @755
+    glGenerateMipmapOESContextANGLE                               @756
+    glGetActiveAttribContextANGLE                                 @757
+    glGetActiveUniformContextANGLE                                @758
+    glGetActiveUniformBlockNameContextANGLE                       @759
+    glGetActiveUniformBlockivContextANGLE                         @760
+    glGetActiveUniformsivContextANGLE                             @761
+    glGetAttachedShadersContextANGLE                              @762
+    glGetAttribLocationContextANGLE                               @763
+    glGetBooleani_vContextANGLE                                   @764
+    glGetBooleanvContextANGLE                                     @765
+    glGetBufferParameteri64vContextANGLE                          @766
+    glGetBufferParameterivContextANGLE                            @767
+    glGetBufferPointervContextANGLE                               @768
+    glGetBufferPointervOESContextANGLE                            @769
+    glGetClipPlanefContextANGLE                                   @770
+    glGetClipPlanexContextANGLE                                   @771
+    glGetDebugMessageLogKHRContextANGLE                           @772
+    glGetErrorContextANGLE                                        @773
+    glGetFenceivNVContextANGLE                                    @774
+    glGetFixedvContextANGLE                                       @775
+    glGetFloatvContextANGLE                                       @776
+    glGetFragDataLocationContextANGLE                             @777
+    glGetFramebufferAttachmentParameterivContextANGLE             @778
+    glGetFramebufferAttachmentParameterivOESContextANGLE          @779
+    glGetFramebufferParameterivContextANGLE                       @780
+    glGetGraphicsResetStatusEXTContextANGLE                       @781
+    glGetInteger64i_vContextANGLE                                 @782
+    glGetInteger64vContextANGLE                                   @783
+    glGetIntegeri_vContextANGLE                                   @784
+    glGetIntegervContextANGLE                                     @785
+    glGetInternalformativContextANGLE                             @786
+    glGetLightfvContextANGLE                                      @787
+    glGetLightxvContextANGLE                                      @788
+    glGetMaterialfvContextANGLE                                   @789
+    glGetMaterialxvContextANGLE                                   @790
+    glGetMultisamplefvContextANGLE                                @791
+    glGetObjectLabelKHRContextANGLE                               @792
+    glGetObjectPtrLabelKHRContextANGLE                            @793
+    glGetPointervContextANGLE                                     @794
+    glGetPointervKHRContextANGLE                                  @795
+    glGetProgramBinaryContextANGLE                                @796
+    glGetProgramBinaryOESContextANGLE                             @797
+    glGetProgramInfoLogContextANGLE                               @798
+    glGetProgramInterfaceivContextANGLE                           @799
+    glGetProgramPipelineInfoLogContextANGLE                       @800
+    glGetProgramPipelineivContextANGLE                            @801
+    glGetProgramResourceIndexContextANGLE                         @802
+    glGetProgramResourceLocationContextANGLE                      @803
+    glGetProgramResourceNameContextANGLE                          @804
+    glGetProgramResourceivContextANGLE                            @805
+    glGetProgramivContextANGLE                                    @806
+    glGetQueryObjecti64vEXTContextANGLE                           @807
+    glGetQueryObjectivEXTContextANGLE                             @808
+    glGetQueryObjectui64vEXTContextANGLE                          @809
+    glGetQueryObjectuivContextANGLE                               @810
+    glGetQueryObjectuivEXTContextANGLE                            @811
+    glGetQueryivContextANGLE                                      @812
+    glGetQueryivEXTContextANGLE                                   @813
+    glGetRenderbufferParameterivContextANGLE                      @814
+    glGetRenderbufferParameterivOESContextANGLE                   @815
+    glGetSamplerParameterfvContextANGLE                           @816
+    glGetSamplerParameterivContextANGLE                           @817
+    glGetShaderInfoLogContextANGLE                                @818
+    glGetShaderPrecisionFormatContextANGLE                        @819
+    glGetShaderSourceContextANGLE                                 @820
+    glGetShaderivContextANGLE                                     @821
+    glGetStringContextANGLE                                       @822
+    glGetStringiContextANGLE                                      @823
+    glGetSyncivContextANGLE                                       @824
+    glGetTexEnvfvContextANGLE                                     @825
+    glGetTexEnvivContextANGLE                                     @826
+    glGetTexEnvxvContextANGLE                                     @827
+    glGetTexGenfvOESContextANGLE                                  @828
+    glGetTexGenivOESContextANGLE                                  @829
+    glGetTexGenxvOESContextANGLE                                  @830
+    glGetTexLevelParameterfvContextANGLE                          @831
+    glGetTexLevelParameterivContextANGLE                          @832
+    glGetTexParameterfvContextANGLE                               @833
+    glGetTexParameterivContextANGLE                               @834
+    glGetTexParameterxvContextANGLE                               @835
+    glGetTransformFeedbackVaryingContextANGLE                     @836
+    glGetTranslatedShaderSourceANGLEContextANGLE                  @837
+    glGetUniformBlockIndexContextANGLE                            @838
+    glGetUniformIndicesContextANGLE                               @839
+    glGetUniformLocationContextANGLE                              @840
+    glGetUniformfvContextANGLE                                    @841
+    glGetUniformivContextANGLE                                    @842
+    glGetUniformuivContextANGLE                                   @843
+    glGetVertexAttribIivContextANGLE                              @844
+    glGetVertexAttribIuivContextANGLE                             @845
+    glGetVertexAttribPointervContextANGLE                         @846
+    glGetVertexAttribfvContextANGLE                               @847
+    glGetVertexAttribivContextANGLE                               @848
+    glGetnUniformfvEXTContextANGLE                                @849
+    glGetnUniformivEXTContextANGLE                                @850
+    glHintContextANGLE                                            @851
+    glInsertEventMarkerEXTContextANGLE                            @852
+    glInvalidateFramebufferContextANGLE                           @853
+    glInvalidateSubFramebufferContextANGLE                        @854
+    glIsBufferContextANGLE                                        @855
+    glIsEnabledContextANGLE                                       @856
+    glIsFenceNVContextANGLE                                       @857
+    glIsFramebufferContextANGLE                                   @858
+    glIsFramebufferOESContextANGLE                                @859
+    glIsProgramContextANGLE                                       @860
+    glIsProgramPipelineContextANGLE                               @861
+    glIsQueryContextANGLE                                         @862
+    glIsQueryEXTContextANGLE                                      @863
+    glIsRenderbufferContextANGLE                                  @864
+    glIsRenderbufferOESContextANGLE                               @865
+    glIsSamplerContextANGLE                                       @866
+    glIsShaderContextANGLE                                        @867
+    glIsSyncContextANGLE                                          @868
+    glIsTextureContextANGLE                                       @869
+    glIsTransformFeedbackContextANGLE                             @870
+    glIsVertexArrayContextANGLE                                   @871
+    glIsVertexArrayOESContextANGLE                                @872
+    glLightModelfContextANGLE                                     @873
+    glLightModelfvContextANGLE                                    @874
+    glLightModelxContextANGLE                                     @875
+    glLightModelxvContextANGLE                                    @876
+    glLightfContextANGLE                                          @877
+    glLightfvContextANGLE                                         @878
+    glLightxContextANGLE                                          @879
+    glLightxvContextANGLE                                         @880
+    glLineWidthContextANGLE                                       @881
+    glLineWidthxContextANGLE                                      @882
+    glLinkProgramContextANGLE                                     @883
+    glLoadIdentityContextANGLE                                    @884
+    glLoadMatrixfContextANGLE                                     @885
+    glLoadMatrixxContextANGLE                                     @886
+    glLoadPaletteFromModelViewMatrixOESContextANGLE               @887
+    glLogicOpContextANGLE                                         @888
+    glMapBufferOESContextANGLE                                    @889
+    glMapBufferRangeContextANGLE                                  @890
+    glMapBufferRangeEXTContextANGLE                               @891
+    glMaterialfContextANGLE                                       @892
+    glMaterialfvContextANGLE                                      @893
+    glMaterialxContextANGLE                                       @894
+    glMaterialxvContextANGLE                                      @895
+    glMatrixIndexPointerOESContextANGLE                           @896
+    glMatrixModeContextANGLE                                      @897
+    glMemoryBarrierContextANGLE                                   @898
+    glMemoryBarrierByRegionContextANGLE                           @899
+    glMultMatrixfContextANGLE                                     @900
+    glMultMatrixxContextANGLE                                     @901
+    glMultiTexCoord4fContextANGLE                                 @902
+    glMultiTexCoord4xContextANGLE                                 @903
+    glNormal3fContextANGLE                                        @904
+    glNormal3xContextANGLE                                        @905
+    glNormalPointerContextANGLE                                   @906
+    glObjectLabelKHRContextANGLE                                  @907
+    glObjectPtrLabelKHRContextANGLE                               @908
+    glOrthofContextANGLE                                          @909
+    glOrthoxContextANGLE                                          @910
+    glPauseTransformFeedbackContextANGLE                          @911
+    glPixelStoreiContextANGLE                                     @912
+    glPointParameterfContextANGLE                                 @913
+    glPointParameterfvContextANGLE                                @914
+    glPointParameterxContextANGLE                                 @915
+    glPointParameterxvContextANGLE                                @916
+    glPointSizeContextANGLE                                       @917
+    glPointSizePointerOESContextANGLE                             @918
+    glPointSizexContextANGLE                                      @919
+    glPolygonOffsetContextANGLE                                   @920
+    glPolygonOffsetxContextANGLE                                  @921
+    glPopDebugGroupKHRContextANGLE                                @922
+    glPopGroupMarkerEXTContextANGLE                               @923
+    glPopMatrixContextANGLE                                       @924
+    glProgramBinaryContextANGLE                                   @925
+    glProgramBinaryOESContextANGLE                                @926
+    glProgramParameteriContextANGLE                               @927
+    glProgramUniform1fContextANGLE                                @928
+    glProgramUniform1fvContextANGLE                               @929
+    glProgramUniform1iContextANGLE                                @930
+    glProgramUniform1ivContextANGLE                               @931
+    glProgramUniform1uiContextANGLE                               @932
+    glProgramUniform1uivContextANGLE                              @933
+    glProgramUniform2fContextANGLE                                @934
+    glProgramUniform2fvContextANGLE                               @935
+    glProgramUniform2iContextANGLE                                @936
+    glProgramUniform2ivContextANGLE                               @937
+    glProgramUniform2uiContextANGLE                               @938
+    glProgramUniform2uivContextANGLE                              @939
+    glProgramUniform3fContextANGLE                                @940
+    glProgramUniform3fvContextANGLE                               @941
+    glProgramUniform3iContextANGLE                                @942
+    glProgramUniform3ivContextANGLE                               @943
+    glProgramUniform3uiContextANGLE                               @944
+    glProgramUniform3uivContextANGLE                              @945
+    glProgramUniform4fContextANGLE                                @946
+    glProgramUniform4fvContextANGLE                               @947
+    glProgramUniform4iContextANGLE                                @948
+    glProgramUniform4ivContextANGLE                               @949
+    glProgramUniform4uiContextANGLE                               @950
+    glProgramUniform4uivContextANGLE                              @951
+    glProgramUniformMatrix2fvContextANGLE                         @952
+    glProgramUniformMatrix2x3fvContextANGLE                       @953
+    glProgramUniformMatrix2x4fvContextANGLE                       @954
+    glProgramUniformMatrix3fvContextANGLE                         @955
+    glProgramUniformMatrix3x2fvContextANGLE                       @956
+    glProgramUniformMatrix3x4fvContextANGLE                       @957
+    glProgramUniformMatrix4fvContextANGLE                         @958
+    glProgramUniformMatrix4x2fvContextANGLE                       @959
+    glProgramUniformMatrix4x3fvContextANGLE                       @960
+    glPushDebugGroupKHRContextANGLE                               @961
+    glPushGroupMarkerEXTContextANGLE                              @962
+    glPushMatrixContextANGLE                                      @963
+    glQueryCounterEXTContextANGLE                                 @964
+    glQueryMatrixxOESContextANGLE                                 @965
+    glReadBufferContextANGLE                                      @966
+    glReadPixelsContextANGLE                                      @967
+    glReadnPixelsEXTContextANGLE                                  @968
+    glReleaseShaderCompilerContextANGLE                           @969
+    glRenderbufferStorageContextANGLE                             @970
+    glRenderbufferStorageMultisampleContextANGLE                  @971
+    glRenderbufferStorageMultisampleANGLEContextANGLE             @972
+    glRenderbufferStorageOESContextANGLE                          @973
+    glResumeTransformFeedbackContextANGLE                         @974
+    glRotatefContextANGLE                                         @975
+    glRotatexContextANGLE                                         @976
+    glSampleCoverageContextANGLE                                  @977
+    glSampleCoveragexContextANGLE                                 @978
+    glSampleMaskiContextANGLE                                     @979
+    glSamplerParameterfContextANGLE                               @980
+    glSamplerParameterfvContextANGLE                              @981
+    glSamplerParameteriContextANGLE                               @982
+    glSamplerParameterivContextANGLE                              @983
+    glScalefContextANGLE                                          @984
+    glScalexContextANGLE                                          @985
+    glScissorContextANGLE                                         @986
+    glSetFenceNVContextANGLE                                      @987
+    glShadeModelContextANGLE                                      @988
+    glShaderBinaryContextANGLE                                    @989
+    glShaderSourceContextANGLE                                    @990
+    glStencilFuncContextANGLE                                     @991
+    glStencilFuncSeparateContextANGLE                             @992
+    glStencilMaskContextANGLE                                     @993
+    glStencilMaskSeparateContextANGLE                             @994
+    glStencilOpContextANGLE                                       @995
+    glStencilOpSeparateContextANGLE                               @996
+    glTestFenceNVContextANGLE                                     @997
+    glTexCoordPointerContextANGLE                                 @998
+    glTexEnvfContextANGLE                                         @999
+    glTexEnvfvContextANGLE                                        @1000
+    glTexEnviContextANGLE                                         @1001
+    glTexEnvivContextANGLE                                        @1002
+    glTexEnvxContextANGLE                                         @1003
+    glTexEnvxvContextANGLE                                        @1004
+    glTexGenfOESContextANGLE                                      @1005
+    glTexGenfvOESContextANGLE                                     @1006
+    glTexGeniOESContextANGLE                                      @1007
+    glTexGenivOESContextANGLE                                     @1008
+    glTexGenxOESContextANGLE                                      @1009
+    glTexGenxvOESContextANGLE                                     @1010
+    glTexImage2DContextANGLE                                      @1011
+    glTexImage3DContextANGLE                                      @1012
+    glTexParameterfContextANGLE                                   @1013
+    glTexParameterfvContextANGLE                                  @1014
+    glTexParameteriContextANGLE                                   @1015
+    glTexParameterivContextANGLE                                  @1016
+    glTexParameterxContextANGLE                                   @1017
+    glTexParameterxvContextANGLE                                  @1018
+    glTexStorage1DEXTContextANGLE                                 @1019
+    glTexStorage2DContextANGLE                                    @1020
+    glTexStorage2DEXTContextANGLE                                 @1021
+    glTexStorage2DMultisampleContextANGLE                         @1022
+    glTexStorage3DContextANGLE                                    @1023
+    glTexStorage3DEXTContextANGLE                                 @1024
+    glTexSubImage2DContextANGLE                                   @1025
+    glTexSubImage3DContextANGLE                                   @1026
+    glTransformFeedbackVaryingsContextANGLE                       @1027
+    glTranslatefContextANGLE                                      @1028
+    glTranslatexContextANGLE                                      @1029
+    glUniform1fContextANGLE                                       @1030
+    glUniform1fvContextANGLE                                      @1031
+    glUniform1iContextANGLE                                       @1032
+    glUniform1ivContextANGLE                                      @1033
+    glUniform1uiContextANGLE                                      @1034
+    glUniform1uivContextANGLE                                     @1035
+    glUniform2fContextANGLE                                       @1036
+    glUniform2fvContextANGLE                                      @1037
+    glUniform2iContextANGLE                                       @1038
+    glUniform2ivContextANGLE                                      @1039
+    glUniform2uiContextANGLE                                      @1040
+    glUniform2uivContextANGLE                                     @1041
+    glUniform3fContextANGLE                                       @1042
+    glUniform3fvContextANGLE                                      @1043
+    glUniform3iContextANGLE                                       @1044
+    glUniform3ivContextANGLE                                      @1045
+    glUniform3uiContextANGLE                                      @1046
+    glUniform3uivContextANGLE                                     @1047
+    glUniform4fContextANGLE                                       @1048
+    glUniform4fvContextANGLE                                      @1049
+    glUniform4iContextANGLE                                       @1050
+    glUniform4ivContextANGLE                                      @1051
+    glUniform4uiContextANGLE                                      @1052
+    glUniform4uivContextANGLE                                     @1053
+    glUniformBlockBindingContextANGLE                             @1054
+    glUniformMatrix2fvContextANGLE                                @1055
+    glUniformMatrix2x3fvContextANGLE                              @1056
+    glUniformMatrix2x4fvContextANGLE                              @1057
+    glUniformMatrix3fvContextANGLE                                @1058
+    glUniformMatrix3x2fvContextANGLE                              @1059
+    glUniformMatrix3x4fvContextANGLE                              @1060
+    glUniformMatrix4fvContextANGLE                                @1061
+    glUniformMatrix4x2fvContextANGLE                              @1062
+    glUniformMatrix4x3fvContextANGLE                              @1063
+    glUnmapBufferContextANGLE                                     @1064
+    glUnmapBufferOESContextANGLE                                  @1065
+    glUseProgramContextANGLE                                      @1066
+    glUseProgramStagesContextANGLE                                @1067
+    glValidateProgramContextANGLE                                 @1068
+    glValidateProgramPipelineContextANGLE                         @1069
+    glVertexAttrib1fContextANGLE                                  @1070
+    glVertexAttrib1fvContextANGLE                                 @1071
+    glVertexAttrib2fContextANGLE                                  @1072
+    glVertexAttrib2fvContextANGLE                                 @1073
+    glVertexAttrib3fContextANGLE                                  @1074
+    glVertexAttrib3fvContextANGLE                                 @1075
+    glVertexAttrib4fContextANGLE                                  @1076
+    glVertexAttrib4fvContextANGLE                                 @1077
+    glVertexAttribBindingContextANGLE                             @1078
+    glVertexAttribDivisorContextANGLE                             @1079
+    glVertexAttribDivisorANGLEContextANGLE                        @1080
+    glVertexAttribFormatContextANGLE                              @1081
+    glVertexAttribI4iContextANGLE                                 @1082
+    glVertexAttribI4ivContextANGLE                                @1083
+    glVertexAttribI4uiContextANGLE                                @1084
+    glVertexAttribI4uivContextANGLE                               @1085
+    glVertexAttribIFormatContextANGLE                             @1086
+    glVertexAttribIPointerContextANGLE                            @1087
+    glVertexAttribPointerContextANGLE                             @1088
+    glVertexBindingDivisorContextANGLE                            @1089
+    glVertexPointerContextANGLE                                   @1090
+    glViewportContextANGLE                                        @1091
+    glWaitSyncContextANGLE                                        @1092
+    glWeightPointerOESContextANGLE                                @1093
+    glBindUniformLocationCHROMIUMContextANGLE                     @1094
+    glCoverageModulationCHROMIUMContextANGLE                      @1095
+    glMatrixLoadfCHROMIUMContextANGLE                             @1096
+    glMatrixLoadIdentityCHROMIUMContextANGLE                      @1097
+    glGenPathsCHROMIUMContextANGLE                                @1098
+    glDeletePathsCHROMIUMContextANGLE                             @1099
+    glIsPathCHROMIUMContextANGLE                                  @1100
+    glPathCommandsCHROMIUMContextANGLE                            @1101
+    glPathParameterfCHROMIUMContextANGLE                          @1102
+    glPathParameteriCHROMIUMContextANGLE                          @1103
+    glGetPathParameterfvCHROMIUMContextANGLE                      @1104
+    glGetPathParameterivCHROMIUMContextANGLE                      @1105
+    glPathStencilFuncCHROMIUMContextANGLE                         @1106
+    glStencilFillPathCHROMIUMContextANGLE                         @1107
+    glStencilStrokePathCHROMIUMContextANGLE                       @1108
+    glCoverFillPathCHROMIUMContextANGLE                           @1109
+    glCoverStrokePathCHROMIUMContextANGLE                         @1110
+    glStencilThenCoverFillPathCHROMIUMContextANGLE                @1111
+    glStencilThenCoverStrokePathCHROMIUMContextANGLE              @1112
+    glCoverFillPathInstancedCHROMIUMContextANGLE                  @1113
+    glCoverStrokePathInstancedCHROMIUMContextANGLE                @1114
+    glStencilStrokePathInstancedCHROMIUMContextANGLE              @1115
+    glStencilFillPathInstancedCHROMIUMContextANGLE                @1116
+    glStencilThenCoverFillPathInstancedCHROMIUMContextANGLE       @1117
+    glStencilThenCoverStrokePathInstancedCHROMIUMContextANGLE     @1118
+    glBindFragmentInputLocationCHROMIUMContextANGLE               @1119
+    glProgramPathFragmentInputGenCHROMIUMContextANGLE             @1120
+    glCopyTextureCHROMIUMContextANGLE                             @1121
+    glCopySubTextureCHROMIUMContextANGLE                          @1122
+    glCompressedCopyTextureCHROMIUMContextANGLE                   @1123
+    glRequestExtensionANGLEContextANGLE                           @1124
+    glGetBooleanvRobustANGLEContextANGLE                          @1125
+    glGetBufferParameterivRobustANGLEContextANGLE                 @1126
+    glGetFloatvRobustANGLEContextANGLE                            @1127
+    glGetFramebufferAttachmentParameterivRobustANGLEContextANGLE  @1128
+    glGetIntegervRobustANGLEContextANGLE                          @1129
+    glGetProgramivRobustANGLEContextANGLE                         @1130
+    glGetRenderbufferParameterivRobustANGLEContextANGLE           @1131
+    glGetShaderivRobustANGLEContextANGLE                          @1132
+    glGetTexParameterfvRobustANGLEContextANGLE                    @1133
+    glGetTexParameterivRobustANGLEContextANGLE                    @1134
+    glGetUniformfvRobustANGLEContextANGLE                         @1135
+    glGetUniformivRobustANGLEContextANGLE                         @1136
+    glGetVertexAttribfvRobustANGLEContextANGLE                    @1137
+    glGetVertexAttribivRobustANGLEContextANGLE                    @1138
+    glGetVertexAttribPointervRobustANGLEContextANGLE              @1139
+    glReadPixelsRobustANGLEContextANGLE                           @1140
+    glTexImage2DRobustANGLEContextANGLE                           @1141
+    glTexParameterfvRobustANGLEContextANGLE                       @1142
+    glTexParameterivRobustANGLEContextANGLE                       @1143
+    glTexSubImage2DRobustANGLEContextANGLE                        @1144
+    glTexImage3DRobustANGLEContextANGLE                           @1145
+    glTexSubImage3DRobustANGLEContextANGLE                        @1146
+    glCompressedTexImage2DRobustANGLEContextANGLE                 @1147
+    glCompressedTexSubImage2DRobustANGLEContextANGLE              @1148
+    glCompressedTexImage3DRobustANGLEContextANGLE                 @1149
+    glCompressedTexSubImage3DRobustANGLEContextANGLE              @1150
+    glGetQueryivRobustANGLEContextANGLE                           @1151
+    glGetQueryObjectuivRobustANGLEContextANGLE                    @1152
+    glGetBufferPointervRobustANGLEContextANGLE                    @1153
+    glGetIntegeri_vRobustANGLEContextANGLE                        @1154
+    glGetInternalformativRobustANGLEContextANGLE                  @1155
+    glGetVertexAttribIivRobustANGLEContextANGLE                   @1156
+    glGetVertexAttribIuivRobustANGLEContextANGLE                  @1157
+    glGetUniformuivRobustANGLEContextANGLE                        @1158
+    glGetActiveUniformBlockivRobustANGLEContextANGLE              @1159
+    glGetInteger64vRobustANGLEContextANGLE                        @1160
+    glGetInteger64i_vRobustANGLEContextANGLE                      @1161
+    glGetBufferParameteri64vRobustANGLEContextANGLE               @1162
+    glSamplerParameterivRobustANGLEContextANGLE                   @1163
+    glSamplerParameterfvRobustANGLEContextANGLE                   @1164
+    glGetSamplerParameterivRobustANGLEContextANGLE                @1165
+    glGetSamplerParameterfvRobustANGLEContextANGLE                @1166
+    glGetFramebufferParameterivRobustANGLEContextANGLE            @1167
+    glGetProgramInterfaceivRobustANGLEContextANGLE                @1168
+    glGetBooleani_vRobustANGLEContextANGLE                        @1169
+    glGetMultisamplefvRobustANGLEContextANGLE                     @1170
+    glGetTexLevelParameterivRobustANGLEContextANGLE               @1171
+    glGetTexLevelParameterfvRobustANGLEContextANGLE               @1172
+    glGetPointervRobustANGLERobustANGLEContextANGLE               @1173
+    glReadnPixelsRobustANGLEContextANGLE                          @1174
+    glGetnUniformfvRobustANGLEContextANGLE                        @1175
+    glGetnUniformivRobustANGLEContextANGLE                        @1176
+    glGetnUniformuivRobustANGLEContextANGLE                       @1177
+    glTexParameterIivRobustANGLEContextANGLE                      @1178
+    glTexParameterIuivRobustANGLEContextANGLE                     @1179
+    glGetTexParameterIivRobustANGLEContextANGLE                   @1180
+    glGetTexParameterIuivRobustANGLEContextANGLE                  @1181
+    glSamplerParameterIivRobustANGLEContextANGLE                  @1182
+    glSamplerParameterIuivRobustANGLEContextANGLE                 @1183
+    glGetSamplerParameterIivRobustANGLEContextANGLE               @1184
+    glGetSamplerParameterIuivRobustANGLEContextANGLE              @1185
+    glGetQueryObjectivRobustANGLEContextANGLE                     @1186
+    glGetQueryObjecti64vRobustANGLEContextANGLE                   @1187
+    glGetQueryObjectui64vRobustANGLEContextANGLE                  @1188
+    glFramebufferTextureMultiviewLayeredANGLEContextANGLE         @1189
+    glFramebufferTextureMultiviewSideBySideANGLEContextANGLE      @1190
--- a/gfx/angle/checkout/src/libGLESv2/proc_table_autogen.cpp
+++ b/gfx/angle/checkout/src/libGLESv2/proc_table_autogen.cpp
@@ -10,17 +10,16 @@
 //
 
 #include "libGLESv2/proc_table.h"
 
 #include "libGLESv2/entry_points_egl.h"
 #include "libGLESv2/entry_points_egl_ext.h"
 #include "libGLESv2/entry_points_gles_1_0_autogen.h"
 #include "libGLESv2/entry_points_gles_2_0_autogen.h"
-#include "libGLESv2/entry_points_gles_2_0_ext.h"
 #include "libGLESv2/entry_points_gles_3_0_autogen.h"
 #include "libGLESv2/entry_points_gles_3_1_autogen.h"
 #include "libGLESv2/entry_points_gles_ext_autogen.h"
 #include "platform/Platform.h"
 
 #define P(FUNC) reinterpret_cast<__eglMustCastToProperFunctionPointerType>(FUNC)
 
 namespace egl
@@ -96,556 +95,1139 @@ ProcEntry g_procTable[] = {
     {"eglSwapBuffersWithDamageEXT", P(egl::SwapBuffersWithDamageEXT)},
     {"eglSwapInterval", P(egl::SwapInterval)},
     {"eglTerminate", P(egl::Terminate)},
     {"eglWaitClient", P(egl::WaitClient)},
     {"eglWaitGL", P(egl::WaitGL)},
     {"eglWaitNative", P(egl::WaitNative)},
     {"eglWaitSync", P(egl::WaitSync)},
     {"glActiveShaderProgram", P(gl::ActiveShaderProgram)},
+    {"glActiveShaderProgramContextANGLE", P(gl::ActiveShaderProgramContextANGLE)},
     {"glActiveTexture", P(gl::ActiveTexture)},
+    {"glActiveTextureContextANGLE", P(gl::ActiveTextureContextANGLE)},
     {"glAlphaFunc", P(gl::AlphaFunc)},
+    {"glAlphaFuncContextANGLE", P(gl::AlphaFuncContextANGLE)},
     {"glAlphaFuncx", P(gl::AlphaFuncx)},
+    {"glAlphaFuncxContextANGLE", P(gl::AlphaFuncxContextANGLE)},
     {"glAttachShader", P(gl::AttachShader)},
+    {"glAttachShaderContextANGLE", P(gl::AttachShaderContextANGLE)},
     {"glBeginQuery", P(gl::BeginQuery)},
+    {"glBeginQueryContextANGLE", P(gl::BeginQueryContextANGLE)},
     {"glBeginQueryEXT", P(gl::BeginQueryEXT)},
+    {"glBeginQueryEXTContextANGLE", P(gl::BeginQueryEXTContextANGLE)},
     {"glBeginTransformFeedback", P(gl::BeginTransformFeedback)},
+    {"glBeginTransformFeedbackContextANGLE", P(gl::BeginTransformFeedbackContextANGLE)},
     {"glBindAttribLocation", P(gl::BindAttribLocation)},
+    {"glBindAttribLocationContextANGLE", P(gl::BindAttribLocationContextANGLE)},
     {"glBindBuffer", P(gl::BindBuffer)},
     {"glBindBufferBase", P(gl::BindBufferBase)},
+    {"glBindBufferBaseContextANGLE", P(gl::BindBufferBaseContextANGLE)},
+    {"glBindBufferContextANGLE", P(gl::BindBufferContextANGLE)},
     {"glBindBufferRange", P(gl::BindBufferRange)},
+    {"glBindBufferRangeContextANGLE", P(gl::BindBufferRangeContextANGLE)},
     {"glBindFramebuffer", P(gl::BindFramebuffer)},
+    {"glBindFramebufferContextANGLE", P(gl::BindFramebufferContextANGLE)},
     {"glBindImageTexture", P(gl::BindImageTexture)},
+    {"glBindImageTextureContextANGLE", P(gl::BindImageTextureContextANGLE)},
     {"glBindProgramPipeline", P(gl::BindProgramPipeline)},
+    {"glBindProgramPipelineContextANGLE", P(gl::BindProgramPipelineContextANGLE)},
     {"glBindRenderbuffer", P(gl::BindRenderbuffer)},
+    {"glBindRenderbufferContextANGLE", P(gl::BindRenderbufferContextANGLE)},
     {"glBindSampler", P(gl::BindSampler)},
+    {"glBindSamplerContextANGLE", P(gl::BindSamplerContextANGLE)},
     {"glBindTexture", P(gl::BindTexture)},
+    {"glBindTextureContextANGLE", P(gl::BindTextureContextANGLE)},
     {"glBindTransformFeedback", P(gl::BindTransformFeedback)},
+    {"glBindTransformFeedbackContextANGLE", P(gl::BindTransformFeedbackContextANGLE)},
     {"glBindUniformLocationCHROMIUM", P(gl::BindUniformLocationCHROMIUM)},
+    {"glBindUniformLocationCHROMIUMContextANGLE", P(gl::BindUniformLocationCHROMIUMContextANGLE)},
     {"glBindVertexArray", P(gl::BindVertexArray)},
+    {"glBindVertexArrayContextANGLE", P(gl::BindVertexArrayContextANGLE)},
     {"glBindVertexArrayOES", P(gl::BindVertexArrayOES)},
+    {"glBindVertexArrayOESContextANGLE", P(gl::BindVertexArrayOESContextANGLE)},
     {"glBindVertexBuffer", P(gl::BindVertexBuffer)},
+    {"glBindVertexBufferContextANGLE", P(gl::BindVertexBufferContextANGLE)},
     {"glBlendColor", P(gl::BlendColor)},
+    {"glBlendColorContextANGLE", P(gl::BlendColorContextANGLE)},
     {"glBlendEquation", P(gl::BlendEquation)},
+    {"glBlendEquationContextANGLE", P(gl::BlendEquationContextANGLE)},
     {"glBlendEquationSeparate", P(gl::BlendEquationSeparate)},
+    {"glBlendEquationSeparateContextANGLE", P(gl::BlendEquationSeparateContextANGLE)},
     {"glBlendFunc", P(gl::BlendFunc)},
+    {"glBlendFuncContextANGLE", P(gl::BlendFuncContextANGLE)},
     {"glBlendFuncSeparate", P(gl::BlendFuncSeparate)},
+    {"glBlendFuncSeparateContextANGLE", P(gl::BlendFuncSeparateContextANGLE)},
     {"glBlitFramebuffer", P(gl::BlitFramebuffer)},
     {"glBlitFramebufferANGLE", P(gl::BlitFramebufferANGLE)},
+    {"glBlitFramebufferANGLEContextANGLE", P(gl::BlitFramebufferANGLEContextANGLE)},
+    {"glBlitFramebufferContextANGLE", P(gl::BlitFramebufferContextANGLE)},
     {"glBufferData", P(gl::BufferData)},
+    {"glBufferDataContextANGLE", P(gl::BufferDataContextANGLE)},
     {"glBufferSubData", P(gl::BufferSubData)},
+    {"glBufferSubDataContextANGLE", P(gl::BufferSubDataContextANGLE)},
     {"glCheckFramebufferStatus", P(gl::CheckFramebufferStatus)},
+    {"glCheckFramebufferStatusContextANGLE", P(gl::CheckFramebufferStatusContextANGLE)},
     {"glClear", P(gl::Clear)},
     {"glClearBufferfi", P(gl::ClearBufferfi)},
+    {"glClearBufferfiContextANGLE", P(gl::ClearBufferfiContextANGLE)},
     {"glClearBufferfv", P(gl::ClearBufferfv)},
+    {"glClearBufferfvContextANGLE", P(gl::ClearBufferfvContextANGLE)},
     {"glClearBufferiv", P(gl::ClearBufferiv)},
+    {"glClearBufferivContextANGLE", P(gl::ClearBufferivContextANGLE)},
     {"glClearBufferuiv", P(gl::ClearBufferuiv)},
+    {"glClearBufferuivContextANGLE", P(gl::ClearBufferuivContextANGLE)},
     {"glClearColor", P(gl::ClearColor)},
+    {"glClearColorContextANGLE", P(gl::ClearColorContextANGLE)},
     {"glClearColorx", P(gl::ClearColorx)},
+    {"glClearColorxContextANGLE", P(gl::ClearColorxContextANGLE)},
+    {"glClearContextANGLE", P(gl::ClearContextANGLE)},
     {"glClearDepthf", P(gl::ClearDepthf)},
+    {"glClearDepthfContextANGLE", P(gl::ClearDepthfContextANGLE)},
     {"glClearDepthx", P(gl::ClearDepthx)},
+    {"glClearDepthxContextANGLE", P(gl::ClearDepthxContextANGLE)},
     {"glClearStencil", P(gl::ClearStencil)},
+    {"glClearStencilContextANGLE", P(gl::ClearStencilContextANGLE)},
     {"glClientActiveTexture", P(gl::ClientActiveTexture)},
+    {"glClientActiveTextureContextANGLE", P(gl::ClientActiveTextureContextANGLE)},
     {"glClientWaitSync", P(gl::ClientWaitSync)},
+    {"glClientWaitSyncContextANGLE", P(gl::ClientWaitSyncContextANGLE)},
     {"glClipPlanef", P(gl::ClipPlanef)},
+    {"glClipPlanefContextANGLE", P(gl::ClipPlanefContextANGLE)},
     {"glClipPlanex", P(gl::ClipPlanex)},
+    {"glClipPlanexContextANGLE", P(gl::ClipPlanexContextANGLE)},
     {"glColor4f", P(gl::Color4f)},
+    {"glColor4fContextANGLE", P(gl::Color4fContextANGLE)},
     {"glColor4ub", P(gl::Color4ub)},
+    {"glColor4ubContextANGLE", P(gl::Color4ubContextANGLE)},
     {"glColor4x", P(gl::Color4x)},
+    {"glColor4xContextANGLE", P(gl::Color4xContextANGLE)},
     {"glColorMask", P(gl::ColorMask)},
+    {"glColorMaskContextANGLE", P(gl::ColorMaskContextANGLE)},
     {"glColorPointer", P(gl::ColorPointer)},
+    {"glColorPointerContextANGLE", P(gl::ColorPointerContextANGLE)},
     {"glCompileShader", P(gl::CompileShader)},
+    {"glCompileShaderContextANGLE", P(gl::CompileShaderContextANGLE)},
     {"glCompressedCopyTextureCHROMIUM", P(gl::CompressedCopyTextureCHROMIUM)},
+    {"glCompressedCopyTextureCHROMIUMContextANGLE",
+     P(gl::CompressedCopyTextureCHROMIUMContextANGLE)},
     {"glCompressedTexImage2D", P(gl::CompressedTexImage2D)},
+    {"glCompressedTexImage2DContextANGLE", P(gl::CompressedTexImage2DContextANGLE)},
     {"glCompressedTexImage2DRobustANGLE", P(gl::CompressedTexImage2DRobustANGLE)},
+    {"glCompressedTexImage2DRobustANGLEContextANGLE",
+     P(gl::CompressedTexImage2DRobustANGLEContextANGLE)},
     {"glCompressedTexImage3D", P(gl::CompressedTexImage3D)},
+    {"glCompressedTexImage3DContextANGLE", P(gl::CompressedTexImage3DContextANGLE)},
     {"glCompressedTexImage3DRobustANGLE", P(gl::CompressedTexImage3DRobustANGLE)},
+    {"glCompressedTexImage3DRobustANGLEContextANGLE",
+     P(gl::CompressedTexImage3DRobustANGLEContextANGLE)},
     {"glCompressedTexSubImage2D", P(gl::CompressedTexSubImage2D)},
+    {"glCompressedTexSubImage2DContextANGLE", P(gl::CompressedTexSubImage2DContextANGLE)},
     {"glCompressedTexSubImage2DRobustANGLE", P(gl::CompressedTexSubImage2DRobustANGLE)},
+    {"glCompressedTexSubImage2DRobustANGLEContextANGLE",
+     P(gl::CompressedTexSubImage2DRobustANGLEContextANGLE)},
     {"glCompressedTexSubImage3D", P(gl::CompressedTexSubImage3D)},
+    {"glCompressedTexSubImage3DContextANGLE", P(gl::CompressedTexSubImage3DContextANGLE)},
     {"glCompressedTexSubImage3DRobustANGLE", P(gl::CompressedTexSubImage3DRobustANGLE)},
+    {"glCompressedTexSubImage3DRobustANGLEContextANGLE",
+     P(gl::CompressedTexSubImage3DRobustANGLEContextANGLE)},
     {"glCopyBufferSubData", P(gl::CopyBufferSubData)},
+    {"glCopyBufferSubDataContextANGLE", P(gl::CopyBufferSubDataContextANGLE)},
     {"glCopySubTextureCHROMIUM", P(gl::CopySubTextureCHROMIUM)},
+    {"glCopySubTextureCHROMIUMContextANGLE", P(gl::CopySubTextureCHROMIUMContextANGLE)},
     {"glCopyTexImage2D", P(gl::CopyTexImage2D)},
+    {"glCopyTexImage2DContextANGLE", P(gl::CopyTexImage2DContextANGLE)},
     {"glCopyTexSubImage2D", P(gl::CopyTexSubImage2D)},
+    {"glCopyTexSubImage2DContextANGLE", P(gl::CopyTexSubImage2DContextANGLE)},
     {"glCopyTexSubImage3D", P(gl::CopyTexSubImage3D)},
+    {"glCopyTexSubImage3DContextANGLE", P(gl::CopyTexSubImage3DContextANGLE)},
     {"glCopyTextureCHROMIUM", P(gl::CopyTextureCHROMIUM)},
+    {"glCopyTextureCHROMIUMContextANGLE", P(gl::CopyTextureCHROMIUMContextANGLE)},
     {"glCreateProgram", P(gl::CreateProgram)},
+    {"glCreateProgramContextANGLE", P(gl::CreateProgramContextANGLE)},
     {"glCreateShader", P(gl::CreateShader)},
+    {"glCreateShaderContextANGLE", P(gl::CreateShaderContextANGLE)},
     {"glCreateShaderProgramv", P(gl::CreateShaderProgramv)},
+    {"glCreateShaderProgramvContextANGLE", P(gl::CreateShaderProgramvContextANGLE)},
     {"glCullFace", P(gl::CullFace)},
+    {"glCullFaceContextANGLE", P(gl::CullFaceContextANGLE)},
     {"glCurrentPaletteMatrixOES", P(gl::CurrentPaletteMatrixOES)},
+    {"glCurrentPaletteMatrixOESContextANGLE", P(gl::CurrentPaletteMatrixOESContextANGLE)},
     {"glDebugMessageCallbackKHR", P(gl::DebugMessageCallbackKHR)},
+    {"glDebugMessageCallbackKHRContextANGLE", P(gl::DebugMessageCallbackKHRContextANGLE)},
     {"glDebugMessageControlKHR", P(gl::DebugMessageControlKHR)},
+    {"glDebugMessageControlKHRContextANGLE", P(gl::DebugMessageControlKHRContextANGLE)},
     {"glDebugMessageInsertKHR", P(gl::DebugMessageInsertKHR)},
+    {"glDebugMessageInsertKHRContextANGLE", P(gl::DebugMessageInsertKHRContextANGLE)},
     {"glDeleteBuffers", P(gl::DeleteBuffers)},
+    {"glDeleteBuffersContextANGLE", P(gl::DeleteBuffersContextANGLE)},
     {"glDeleteFencesNV", P(gl::DeleteFencesNV)},
+    {"glDeleteFencesNVContextANGLE", P(gl::DeleteFencesNVContextANGLE)},
     {"glDeleteFramebuffers", P(gl::DeleteFramebuffers)},
+    {"glDeleteFramebuffersContextANGLE", P(gl::DeleteFramebuffersContextANGLE)},
     {"glDeleteProgram", P(gl::DeleteProgram)},
+    {"glDeleteProgramContextANGLE", P(gl::DeleteProgramContextANGLE)},
     {"glDeleteProgramPipelines", P(gl::DeleteProgramPipelines)},
+    {"glDeleteProgramPipelinesContextANGLE", P(gl::DeleteProgramPipelinesContextANGLE)},
     {"glDeleteQueries", P(gl::DeleteQueries)},
+    {"glDeleteQueriesContextANGLE", P(gl::DeleteQueriesContextANGLE)},
     {"glDeleteQueriesEXT", P(gl::DeleteQueriesEXT)},
+    {"glDeleteQueriesEXTContextANGLE", P(gl::DeleteQueriesEXTContextANGLE)},
     {"glDeleteRenderbuffers", P(gl::DeleteRenderbuffers)},
+    {"glDeleteRenderbuffersContextANGLE", P(gl::DeleteRenderbuffersContextANGLE)},
     {"glDeleteSamplers", P(gl::DeleteSamplers)},
+    {"glDeleteSamplersContextANGLE", P(gl::DeleteSamplersContextANGLE)},
     {"glDeleteShader", P(gl::DeleteShader)},
+    {"glDeleteShaderContextANGLE", P(gl::DeleteShaderContextANGLE)},
     {"glDeleteSync", P(gl::DeleteSync)},
+    {"glDeleteSyncContextANGLE", P(gl::DeleteSyncContextANGLE)},
     {"glDeleteTextures", P(gl::DeleteTextures)},
+    {"glDeleteTexturesContextANGLE", P(gl::DeleteTexturesContextANGLE)},
     {"glDeleteTransformFeedbacks", P(gl::DeleteTransformFeedbacks)},
+    {"glDeleteTransformFeedbacksContextANGLE", P(gl::DeleteTransformFeedbacksContextANGLE)},
     {"glDeleteVertexArrays", P(gl::DeleteVertexArrays)},
+    {"glDeleteVertexArraysContextANGLE", P(gl::DeleteVertexArraysContextANGLE)},
     {"glDeleteVertexArraysOES", P(gl::DeleteVertexArraysOES)},
+    {"glDeleteVertexArraysOESContextANGLE", P(gl::DeleteVertexArraysOESContextANGLE)},
     {"glDepthFunc", P(gl::DepthFunc)},
+    {"glDepthFuncContextANGLE", P(gl::DepthFuncContextANGLE)},
     {"glDepthMask", P(gl::DepthMask)},
+    {"glDepthMaskContextANGLE", P(gl::DepthMaskContextANGLE)},
     {"glDepthRangef", P(gl::DepthRangef)},
+    {"glDepthRangefContextANGLE", P(gl::DepthRangefContextANGLE)},
     {"glDepthRangex", P(gl::DepthRangex)},
+    {"glDepthRangexContextANGLE", P(gl::DepthRangexContextANGLE)},
     {"glDetachShader", P(gl::DetachShader)},
+    {"glDetachShaderContextANGLE", P(gl::DetachShaderContextANGLE)},
     {"glDisable", P(gl::Disable)},
     {"glDisableClientState", P(gl::DisableClientState)},
+    {"glDisableClientStateContextANGLE", P(gl::DisableClientStateContextANGLE)},
+    {"glDisableContextANGLE", P(gl::DisableContextANGLE)},
     {"glDisableVertexAttribArray", P(gl::DisableVertexAttribArray)},
+    {"glDisableVertexAttribArrayContextANGLE", P(gl::DisableVertexAttribArrayContextANGLE)},
     {"glDiscardFramebufferEXT", P(gl::DiscardFramebufferEXT)},
+    {"glDiscardFramebufferEXTContextANGLE", P(gl::DiscardFramebufferEXTContextANGLE)},
     {"glDispatchCompute", P(gl::DispatchCompute)},
+    {"glDispatchComputeContextANGLE", P(gl::DispatchComputeContextANGLE)},
     {"glDispatchComputeIndirect", P(gl::DispatchComputeIndirect)},
+    {"glDispatchComputeIndirectContextANGLE", P(gl::DispatchComputeIndirectContextANGLE)},
     {"glDrawArrays", P(gl::DrawArrays)},
+    {"glDrawArraysContextANGLE", P(gl::DrawArraysContextANGLE)},
     {"glDrawArraysIndirect", P(gl::DrawArraysIndirect)},
+    {"glDrawArraysIndirectContextANGLE", P(gl::DrawArraysIndirectContextANGLE)},
     {"glDrawArraysInstanced", P(gl::DrawArraysInstanced)},
     {"glDrawArraysInstancedANGLE", P(gl::DrawArraysInstancedANGLE)},
+    {"glDrawArraysInstancedANGLEContextANGLE", P(gl::DrawArraysInstancedANGLEContextANGLE)},
+    {"glDrawArraysInstancedContextANGLE", P(gl::DrawArraysInstancedContextANGLE)},
     {"glDrawBuffers", P(gl::DrawBuffers)},
+    {"glDrawBuffersContextANGLE", P(gl::DrawBuffersContextANGLE)},
     {"glDrawBuffersEXT", P(gl::DrawBuffersEXT)},
+    {"glDrawBuffersEXTContextANGLE", P(gl::DrawBuffersEXTContextANGLE)},
     {"glDrawElements", P(gl::DrawElements)},
+    {"glDrawElementsContextANGLE", P(gl::DrawElementsContextANGLE)},
     {"glDrawElementsIndirect", P(gl::DrawElementsIndirect)},
+    {"glDrawElementsIndirectContextANGLE", P(gl::DrawElementsIndirectContextANGLE)},
     {"glDrawElementsInstanced", P(gl::DrawElementsInstanced)},
     {"glDrawElementsInstancedANGLE", P(gl::DrawElementsInstancedANGLE)},
+    {"glDrawElementsInstancedANGLEContextANGLE", P(gl::DrawElementsInstancedANGLEContextANGLE)},
+    {"glDrawElementsInstancedContextANGLE", P(gl::DrawElementsInstancedContextANGLE)},
     {"glDrawRangeElements", P(gl::DrawRangeElements)},
+    {"glDrawRangeElementsContextANGLE", P(gl::DrawRangeElementsContextANGLE)},
     {"glDrawTexfOES", P(gl::DrawTexfOES)},
+    {"glDrawTexfOESContextANGLE", P(gl::DrawTexfOESContextANGLE)},
     {"glDrawTexfvOES", P(gl::DrawTexfvOES)},
+    {"glDrawTexfvOESContextANGLE", P(gl::DrawTexfvOESContextANGLE)},
     {"glDrawTexiOES", P(gl::DrawTexiOES)},
+    {"glDrawTexiOESContextANGLE", P(gl::DrawTexiOESContextANGLE)},
     {"glDrawTexivOES", P(gl::DrawTexivOES)},
+    {"glDrawTexivOESContextANGLE", P(gl::DrawTexivOESContextANGLE)},
     {"glDrawTexsOES", P(gl::DrawTexsOES)},
+    {"glDrawTexsOESContextANGLE", P(gl::DrawTexsOESContextANGLE)},
     {"glDrawTexsvOES", P(gl::DrawTexsvOES)},
+    {"glDrawTexsvOESContextANGLE", P(gl::DrawTexsvOESContextANGLE)},
     {"glDrawTexxOES", P(gl::DrawTexxOES)},
+    {"glDrawTexxOESContextANGLE", P(gl::DrawTexxOESContextANGLE)},
     {"glDrawTexxvOES", P(gl::DrawTexxvOES)},
+    {"glDrawTexxvOESContextANGLE", P(gl::DrawTexxvOESContextANGLE)},
     {"glEGLImageTargetRenderbufferStorageOES", P(gl::EGLImageTargetRenderbufferStorageOES)},
+    {"glEGLImageTargetRenderbufferStorageOESContextANGLE",
+     P(gl::EGLImageTargetRenderbufferStorageOESContextANGLE)},
     {"glEGLImageTargetTexture2DOES", P(gl::EGLImageTargetTexture2DOES)},
+    {"glEGLImageTargetTexture2DOESContextANGLE", P(gl::EGLImageTargetTexture2DOESContextANGLE)},
     {"glEnable", P(gl::Enable)},
     {"glEnableClientState", P(gl::EnableClientState)},
+    {"glEnableClientStateContextANGLE", P(gl::EnableClientStateContextANGLE)},
+    {"glEnableContextANGLE", P(gl::EnableContextANGLE)},
     {"glEnableVertexAttribArray", P(gl::EnableVertexAttribArray)},
+    {"glEnableVertexAttribArrayContextANGLE", P(gl::EnableVertexAttribArrayContextANGLE)},
     {"glEndQuery", P(gl::EndQuery)},
+    {"glEndQueryContextANGLE", P(gl::EndQueryContextANGLE)},
     {"glEndQueryEXT", P(gl::EndQueryEXT)},
+    {"glEndQueryEXTContextANGLE", P(gl::EndQueryEXTContextANGLE)},
     {"glEndTransformFeedback", P(gl::EndTransformFeedback)},
+    {"glEndTransformFeedbackContextANGLE", P(gl::EndTransformFeedbackContextANGLE)},
     {"glFenceSync", P(gl::FenceSync)},
+    {"glFenceSyncContextANGLE", P(gl::FenceSyncContextANGLE)},
     {"glFinish", P(gl::Finish)},
+    {"glFinishContextANGLE", P(gl::FinishContextANGLE)},
     {"glFinishFenceNV", P(gl::FinishFenceNV)},
+    {"glFinishFenceNVContextANGLE", P(gl::FinishFenceNVContextANGLE)},
     {"glFlush", P(gl::Flush)},
+    {"glFlushContextANGLE", P(gl::FlushContextANGLE)},
     {"glFlushMappedBufferRange", P(gl::FlushMappedBufferRange)},
+    {"glFlushMappedBufferRangeContextANGLE", P(gl::FlushMappedBufferRangeContextANGLE)},
     {"glFlushMappedBufferRangeEXT", P(gl::FlushMappedBufferRangeEXT)},
+    {"glFlushMappedBufferRangeEXTContextANGLE", P(gl::FlushMappedBufferRangeEXTContextANGLE)},
     {"glFogf", P(gl::Fogf)},
+    {"glFogfContextANGLE", P(gl::FogfContextANGLE)},
     {"glFogfv", P(gl::Fogfv)},
+    {"glFogfvContextANGLE", P(gl::FogfvContextANGLE)},
     {"glFogx", P(gl::Fogx)},
+    {"glFogxContextANGLE", P(gl::FogxContextANGLE)},
     {"glFogxv", P(gl::Fogxv)},
+    {"glFogxvContextANGLE", P(gl::FogxvContextANGLE)},
     {"glFramebufferParameteri", P(gl::FramebufferParameteri)},
+    {"glFramebufferParameteriContextANGLE", P(gl::FramebufferParameteriContextANGLE)},
     {"glFramebufferRenderbuffer", P(gl::FramebufferRenderbuffer)},
+    {"glFramebufferRenderbufferContextANGLE", P(gl::FramebufferRenderbufferContextANGLE)},
     {"glFramebufferTexture2D", P(gl::FramebufferTexture2D)},
+    {"glFramebufferTexture2DContextANGLE", P(gl::FramebufferTexture2DContextANGLE)},
     {"glFramebufferTextureLayer", P(gl::FramebufferTextureLayer)},
+    {"glFramebufferTextureLayerContextANGLE", P(gl::FramebufferTextureLayerContextANGLE)},
     {"glFramebufferTextureMultiviewLayeredANGLE", P(gl::FramebufferTextureMultiviewLayeredANGLE)},
+    {"glFramebufferTextureMultiviewLayeredANGLEContextANGLE",
+     P(gl::FramebufferTextureMultiviewLayeredANGLEContextANGLE)},
     {"glFramebufferTextureMultiviewSideBySideANGLE",
      P(gl::FramebufferTextureMultiviewSideBySideANGLE)},
+    {"glFramebufferTextureMultiviewSideBySideANGLEContextANGLE",
+     P(gl::FramebufferTextureMultiviewSideBySideANGLEContextANGLE)},
     {"glFrontFace", P(gl::FrontFace)},
+    {"glFrontFaceContextANGLE", P(gl::FrontFaceContextANGLE)},
     {"glFrustumf", P(gl::Frustumf)},
+    {"glFrustumfContextANGLE", P(gl::FrustumfContextANGLE)},
     {"glFrustumx", P(gl::Frustumx)},
+    {"glFrustumxContextANGLE", P(gl::FrustumxContextANGLE)},
     {"glGenBuffers", P(gl::GenBuffers)},
+    {"glGenBuffersContextANGLE", P(gl::GenBuffersContextANGLE)},
     {"glGenFencesNV", P(gl::GenFencesNV)},
+    {"glGenFencesNVContextANGLE", P(gl::GenFencesNVContextANGLE)},
     {"glGenFramebuffers", P(gl::GenFramebuffers)},
+    {"glGenFramebuffersContextANGLE", P(gl::GenFramebuffersContextANGLE)},
     {"glGenProgramPipelines", P(gl::GenProgramPipelines)},
+    {"glGenProgramPipelinesContextANGLE", P(gl::GenProgramPipelinesContextANGLE)},
     {"glGenQueries", P(gl::GenQueries)},
+    {"glGenQueriesContextANGLE", P(gl::GenQueriesContextANGLE)},
     {"glGenQueriesEXT", P(gl::GenQueriesEXT)},
+    {"glGenQueriesEXTContextANGLE", P(gl::GenQueriesEXTContextANGLE)},
     {"glGenRenderbuffers", P(gl::GenRenderbuffers)},
+    {"glGenRenderbuffersContextANGLE", P(gl::GenRenderbuffersContextANGLE)},
     {"glGenSamplers", P(gl::GenSamplers)},
+    {"glGenSamplersContextANGLE", P(gl::GenSamplersContextANGLE)},
     {"glGenTextures", P(gl::GenTextures)},
+    {"glGenTexturesContextANGLE", P(gl::GenTexturesContextANGLE)},
     {"glGenTransformFeedbacks", P(gl::GenTransformFeedbacks)},
+    {"glGenTransformFeedbacksContextANGLE", P(gl::GenTransformFeedbacksContextANGLE)},
     {"glGenVertexArrays", P(gl::GenVertexArrays)},
+    {"glGenVertexArraysContextANGLE", P(gl::GenVertexArraysContextANGLE)},
     {"glGenVertexArraysOES", P(gl::GenVertexArraysOES)},
+    {"glGenVertexArraysOESContextANGLE", P(gl::GenVertexArraysOESContextANGLE)},
     {"glGenerateMipmap", P(gl::GenerateMipmap)},
+    {"glGenerateMipmapContextANGLE", P(gl::GenerateMipmapContextANGLE)},
     {"glGetActiveAttrib", P(gl::GetActiveAttrib)},
+    {"glGetActiveAttribContextANGLE", P(gl::GetActiveAttribContextANGLE)},
     {"glGetActiveUniform", P(gl::GetActiveUniform)},
     {"glGetActiveUniformBlockName", P(gl::GetActiveUniformBlockName)},
+    {"glGetActiveUniformBlockNameContextANGLE", P(gl::GetActiveUniformBlockNameContextANGLE)},
     {"glGetActiveUniformBlockiv", P(gl::GetActiveUniformBlockiv)},
+    {"glGetActiveUniformBlockivContextANGLE", P(gl::GetActiveUniformBlockivContextANGLE)},
     {"glGetActiveUniformBlockivRobustANGLE", P(gl::GetActiveUniformBlockivRobustANGLE)},
+    {"glGetActiveUniformBlockivRobustANGLEContextANGLE",
+     P(gl::GetActiveUniformBlockivRobustANGLEContextANGLE)},
+    {"glGetActiveUniformContextANGLE", P(gl::GetActiveUniformContextANGLE)},
     {"glGetActiveUniformsiv", P(gl::GetActiveUniformsiv)},
+    {"glGetActiveUniformsivContextANGLE", P(gl::GetActiveUniformsivContextANGLE)},
     {"glGetAttachedShaders", P(gl::GetAttachedShaders)},
+    {"glGetAttachedShadersContextANGLE", P(gl::GetAttachedShadersContextANGLE)},
     {"glGetAttribLocation", P(gl::GetAttribLocation)},
+    {"glGetAttribLocationContextANGLE", P(gl::GetAttribLocationContextANGLE)},
     {"glGetBooleani_v", P(gl::GetBooleani_v)},
+    {"glGetBooleani_vContextANGLE", P(gl::GetBooleani_vContextANGLE)},
     {"glGetBooleani_vRobustANGLE", P(gl::GetBooleani_vRobustANGLE)},
+    {"glGetBooleani_vRobustANGLEContextANGLE", P(gl::GetBooleani_vRobustANGLEContextANGLE)},
     {"glGetBooleanv", P(gl::GetBooleanv)},
+    {"glGetBooleanvContextANGLE", P(gl::GetBooleanvContextANGLE)},
     {"glGetBooleanvRobustANGLE", P(gl::GetBooleanvRobustANGLE)},
+    {"glGetBooleanvRobustANGLEContextANGLE", P(gl::GetBooleanvRobustANGLEContextANGLE)},
     {"glGetBufferParameteri64v", P(gl::GetBufferParameteri64v)},
+    {"glGetBufferParameteri64vContextANGLE", P(gl::GetBufferParameteri64vContextANGLE)},
     {"glGetBufferParameteri64vRobustANGLE", P(gl::GetBufferParameteri64vRobustANGLE)},
+    {"glGetBufferParameteri64vRobustANGLEContextANGLE",
+     P(gl::GetBufferParameteri64vRobustANGLEContextANGLE)},
     {"glGetBufferParameteriv", P(gl::GetBufferParameteriv)},
+    {"glGetBufferParameterivContextANGLE", P(gl::GetBufferParameterivContextANGLE)},
     {"glGetBufferParameterivRobustANGLE", P(gl::GetBufferParameterivRobustANGLE)},
+    {"glGetBufferParameterivRobustANGLEContextANGLE",
+     P(gl::GetBufferParameterivRobustANGLEContextANGLE)},
     {"glGetBufferPointerv", P(gl::GetBufferPointerv)},
+    {"glGetBufferPointervContextANGLE", P(gl::GetBufferPointervContextANGLE)},
     {"glGetBufferPointervOES", P(gl::GetBufferPointervOES)},
+    {"glGetBufferPointervOESContextANGLE", P(gl::GetBufferPointervOESContextANGLE)},
     {"glGetBufferPointervRobustANGLE", P(gl::GetBufferPointervRobustANGLE)},
+    {"glGetBufferPointervRobustANGLEContextANGLE", P(gl::GetBufferPointervRobustANGLEContextANGLE)},
     {"glGetClipPlanef", P(gl::GetClipPlanef)},
+    {"glGetClipPlanefContextANGLE", P(gl::GetClipPlanefContextANGLE)},
     {"glGetClipPlanex", P(gl::GetClipPlanex)},
+    {"glGetClipPlanexContextANGLE", P(gl::GetClipPlanexContextANGLE)},
     {"glGetDebugMessageLogKHR", P(gl::GetDebugMessageLogKHR)},
+    {"glGetDebugMessageLogKHRContextANGLE", P(gl::GetDebugMessageLogKHRContextANGLE)},
     {"glGetError", P(gl::GetError)},
+    {"glGetErrorContextANGLE", P(gl::GetErrorContextANGLE)},
     {"glGetFenceivNV", P(gl::GetFenceivNV)},
+    {"glGetFenceivNVContextANGLE", P(gl::GetFenceivNVContextANGLE)},
     {"glGetFixedv", P(gl::GetFixedv)},
+    {"glGetFixedvContextANGLE", P(gl::GetFixedvContextANGLE)},
     {"glGetFloatv", P(gl::GetFloatv)},
+    {"glGetFloatvContextANGLE", P(gl::GetFloatvContextANGLE)},
     {"glGetFloatvRobustANGLE", P(gl::GetFloatvRobustANGLE)},
+    {"glGetFloatvRobustANGLEContextANGLE", P(gl::GetFloatvRobustANGLEContextANGLE)},
     {"glGetFragDataLocation", P(gl::GetFragDataLocation)},
+    {"glGetFragDataLocationContextANGLE", P(gl::GetFragDataLocationContextANGLE)},
     {"glGetFramebufferAttachmentParameteriv", P(gl::GetFramebufferAttachmentParameteriv)},
+    {"glGetFramebufferAttachmentParameterivContextANGLE",
+     P(gl::GetFramebufferAttachmentParameterivContextANGLE)},
     {"glGetFramebufferAttachmentParameterivRobustANGLE",
      P(gl::GetFramebufferAttachmentParameterivRobustANGLE)},
+    {"glGetFramebufferAttachmentParameterivRobustANGLEContextANGLE",
+     P(gl::GetFramebufferAttachmentParameterivRobustANGLEContextANGLE)},
     {"glGetFramebufferParameteriv", P(gl::GetFramebufferParameteriv)},
+    {"glGetFramebufferParameterivContextANGLE", P(gl::GetFramebufferParameterivContextANGLE)},
     {"glGetFramebufferParameterivRobustANGLE", P(gl::GetFramebufferParameterivRobustANGLE)},
+    {"glGetFramebufferParameterivRobustANGLEContextANGLE",
+     P(gl::GetFramebufferParameterivRobustANGLEContextANGLE)},
     {"glGetGraphicsResetStatusEXT", P(gl::GetGraphicsResetStatusEXT)},
+    {"glGetGraphicsResetStatusEXTContextANGLE", P(gl::GetGraphicsResetStatusEXTContextANGLE)},
     {"glGetInteger64i_v", P(gl::GetInteger64i_v)},
+    {"glGetInteger64i_vContextANGLE", P(gl::GetInteger64i_vContextANGLE)},
     {"glGetInteger64i_vRobustANGLE", P(gl::GetInteger64i_vRobustANGLE)},
+    {"glGetInteger64i_vRobustANGLEContextANGLE", P(gl::GetInteger64i_vRobustANGLEContextANGLE)},
     {"glGetInteger64v", P(gl::GetInteger64v)},
+    {"glGetInteger64vContextANGLE", P(gl::GetInteger64vContextANGLE)},
     {"glGetInteger64vRobustANGLE", P(gl::GetInteger64vRobustANGLE)},
+    {"glGetInteger64vRobustANGLEContextANGLE", P(gl::GetInteger64vRobustANGLEContextANGLE)},
     {"glGetIntegeri_v", P(gl::GetIntegeri_v)},
+    {"glGetIntegeri_vContextANGLE", P(gl::GetIntegeri_vContextANGLE)},
     {"glGetIntegeri_vRobustANGLE", P(gl::GetIntegeri_vRobustANGLE)},
+    {"glGetIntegeri_vRobustANGLEContextANGLE", P(gl::GetIntegeri_vRobustANGLEContextANGLE)},
     {"glGetIntegerv", P(gl::GetIntegerv)},
+    {"glGetIntegervContextANGLE", P(gl::GetIntegervContextANGLE)},
     {"glGetIntegervRobustANGLE", P(gl::GetIntegervRobustANGLE)},
+    {"glGetIntegervRobustANGLEContextANGLE", P(gl::GetIntegervRobustANGLEContextANGLE)},
     {"glGetInternalformativ", P(gl::GetInternalformativ)},
+    {"glGetInternalformativContextANGLE", P(gl::GetInternalformativContextANGLE)},
     {"glGetInternalformativRobustANGLE", P(gl::GetInternalformativRobustANGLE)},
+    {"glGetInternalformativRobustANGLEContextANGLE",
+     P(gl::GetInternalformativRobustANGLEContextANGLE)},
     {"glGetLightfv", P(gl::GetLightfv)},
+    {"glGetLightfvContextANGLE", P(gl::GetLightfvContextANGLE)},
     {"glGetLightxv", P(gl::GetLightxv)},
+    {"glGetLightxvContextANGLE", P(gl::GetLightxvContextANGLE)},
     {"glGetMaterialfv", P(gl::GetMaterialfv)},
+    {"glGetMaterialfvContextANGLE", P(gl::GetMaterialfvContextANGLE)},
     {"glGetMaterialxv", P(gl::GetMaterialxv)},
+    {"glGetMaterialxvContextANGLE", P(gl::GetMaterialxvContextANGLE)},
     {"glGetMultisamplefv", P(gl::GetMultisamplefv)},
+    {"glGetMultisamplefvContextANGLE", P(gl::GetMultisamplefvContextANGLE)},
     {"glGetMultisamplefvRobustANGLE", P(gl::GetMultisamplefvRobustANGLE)},
+    {"glGetMultisamplefvRobustANGLEContextANGLE", P(gl::GetMultisamplefvRobustANGLEContextANGLE)},
     {"glGetObjectLabelKHR", P(gl::GetObjectLabelKHR)},
+    {"glGetObjectLabelKHRContextANGLE", P(gl::GetObjectLabelKHRContextANGLE)},
     {"glGetObjectPtrLabelKHR", P(gl::GetObjectPtrLabelKHR)},
+    {"glGetObjectPtrLabelKHRContextANGLE", P(gl::GetObjectPtrLabelKHRContextANGLE)},
     {"glGetPointerv", P(gl::GetPointerv)},
+    {"glGetPointervContextANGLE", P(gl::GetPointervContextANGLE)},
     {"glGetPointervKHR", P(gl::GetPointervKHR)},
+    {"glGetPointervKHRContextANGLE", P(gl::GetPointervKHRContextANGLE)},
     {"glGetPointervRobustANGLERobustANGLE", P(gl::GetPointervRobustANGLERobustANGLE)},
+    {"glGetPointervRobustANGLERobustANGLEContextANGLE",
+     P(gl::GetPointervRobustANGLERobustANGLEContextANGLE)},
     {"glGetProgramBinary", P(gl::GetProgramBinary)},
+    {"glGetProgramBinaryContextANGLE", P(gl::GetProgramBinaryContextANGLE)},
     {"glGetProgramBinaryOES", P(gl::GetProgramBinaryOES)},
+    {"glGetProgramBinaryOESContextANGLE", P(gl::GetProgramBinaryOESContextANGLE)},
     {"glGetProgramInfoLog", P(gl::GetProgramInfoLog)},
+    {"glGetProgramInfoLogContextANGLE", P(gl::GetProgramInfoLogContextANGLE)},
     {"glGetProgramInterfaceiv", P(gl::GetProgramInterfaceiv)},
+    {"glGetProgramInterfaceivContextANGLE", P(gl::GetProgramInterfaceivContextANGLE)},
     {"glGetProgramInterfaceivRobustANGLE", P(gl::GetProgramInterfaceivRobustANGLE)},
+    {"glGetProgramInterfaceivRobustANGLEContextANGLE",
+     P(gl::GetProgramInterfaceivRobustANGLEContextANGLE)},
     {"glGetProgramPipelineInfoLog", P(gl::GetProgramPipelineInfoLog)},
+    {"glGetProgramPipelineInfoLogContextANGLE", P(gl::GetProgramPipelineInfoLogContextANGLE)},
     {"glGetProgramPipelineiv", P(gl::GetProgramPipelineiv)},
+    {"glGetProgramPipelineivContextANGLE", P(gl::GetProgramPipelineivContextANGLE)},
     {"glGetProgramResourceIndex", P(gl::GetProgramResourceIndex)},
+    {"glGetProgramResourceIndexContextANGLE", P(gl::GetProgramResourceIndexContextANGLE)},
     {"glGetProgramResourceLocation", P(gl::GetProgramResourceLocation)},
+    {"glGetProgramResourceLocationContextANGLE", P(gl::GetProgramResourceLocationContextANGLE)},
     {"glGetProgramResourceName", P(gl::GetProgramResourceName)},
+    {"glGetProgramResourceNameContextANGLE", P(gl::GetProgramResourceNameContextANGLE)},
     {"glGetProgramResourceiv", P(gl::GetProgramResourceiv)},
+    {"glGetProgramResourceivContextANGLE", P(gl::GetProgramResourceivContextANGLE)},
     {"glGetProgramiv", P(gl::GetProgramiv)},
+    {"glGetProgramivContextANGLE", P(gl::GetProgramivContextANGLE)},
     {"glGetProgramivRobustANGLE", P(gl::GetProgramivRobustANGLE)},
+    {"glGetProgramivRobustANGLEContextANGLE", P(gl::GetProgramivRobustANGLEContextANGLE)},
     {"glGetQueryObjecti64vEXT", P(gl::GetQueryObjecti64vEXT)},
+    {"glGetQueryObjecti64vEXTContextANGLE", P(gl::GetQueryObjecti64vEXTContextANGLE)},
     {"glGetQueryObjecti64vRobustANGLE", P(gl::GetQueryObjecti64vRobustANGLE)},
+    {"glGetQueryObjecti64vRobustANGLEContextANGLE",
+     P(gl::GetQueryObjecti64vRobustANGLEContextANGLE)},
     {"glGetQueryObjectivEXT", P(gl::GetQueryObjectivEXT)},
+    {"glGetQueryObjectivEXTContextANGLE", P(gl::GetQueryObjectivEXTContextANGLE)},
     {"glGetQueryObjectivRobustANGLE", P(gl::GetQueryObjectivRobustANGLE)},
+    {"glGetQueryObjectivRobustANGLEContextANGLE", P(gl::GetQueryObjectivRobustANGLEContextANGLE)},
     {"glGetQueryObjectui64vEXT", P(gl::GetQueryObjectui64vEXT)},
+    {"glGetQueryObjectui64vEXTContextANGLE", P(gl::GetQueryObjectui64vEXTContextANGLE)},
     {"glGetQueryObjectui64vRobustANGLE", P(gl::GetQueryObjectui64vRobustANGLE)},
+    {"glGetQueryObjectui64vRobustANGLEContextANGLE",
+     P(gl::GetQueryObjectui64vRobustANGLEContextANGLE)},
     {"glGetQueryObjectuiv", P(gl::GetQueryObjectuiv)},
+    {"glGetQueryObjectuivContextANGLE", P(gl::GetQueryObjectuivContextANGLE)},
     {"glGetQueryObjectuivEXT", P(gl::GetQueryObjectuivEXT)},
+    {"glGetQueryObjectuivEXTContextANGLE", P(gl::GetQueryObjectuivEXTContextANGLE)},
     {"glGetQueryObjectuivRobustANGLE", P(gl::GetQueryObjectuivRobustANGLE)},
+    {"glGetQueryObjectuivRobustANGLEContextANGLE", P(gl::GetQueryObjectuivRobustANGLEContextANGLE)},
     {"glGetQueryiv", P(gl::GetQueryiv)},
+    {"glGetQueryivContextANGLE", P(gl::GetQueryivContextANGLE)},
     {"glGetQueryivEXT", P(gl::GetQueryivEXT)},
+    {"glGetQueryivEXTContextANGLE", P(gl::GetQueryivEXTContextANGLE)},
     {"glGetQueryivRobustANGLE", P(gl::GetQueryivRobustANGLE)},
+    {"glGetQueryivRobustANGLEContextANGLE", P(gl::GetQueryivRobustANGLEContextANGLE)},
     {"glGetRenderbufferParameteriv", P(gl::GetRenderbufferParameteriv)},
+    {"glGetRenderbufferParameterivContextANGLE", P(gl::GetRenderbufferParameterivContextANGLE)},
     {"glGetRenderbufferParameterivRobustANGLE", P(gl::GetRenderbufferParameterivRobustANGLE)},
+    {"glGetRenderbufferParameterivRobustANGLEContextANGLE",
+     P(gl::GetRenderbufferParameterivRobustANGLEContextANGLE)},
     {"glGetSamplerParameterIivRobustANGLE", P(gl::GetSamplerParameterIivRobustANGLE)},
+    {"glGetSamplerParameterIivRobustANGLEContextANGLE",
+     P(gl::GetSamplerParameterIivRobustANGLEContextANGLE)},
     {"glGetSamplerParameterIuivRobustANGLE", P(gl::GetSamplerParameterIuivRobustANGLE)},
+    {"glGetSamplerParameterIuivRobustANGLEContextANGLE",
+     P(gl::GetSamplerParameterIuivRobustANGLEContextANGLE)},
     {"glGetSamplerParameterfv", P(gl::GetSamplerParameterfv)},
+    {"glGetSamplerParameterfvContextANGLE", P(gl::GetSamplerParameterfvContextANGLE)},
     {"glGetSamplerParameterfvRobustANGLE", P(gl::GetSamplerParameterfvRobustANGLE)},
+    {"glGetSamplerParameterfvRobustANGLEContextANGLE",
+     P(gl::GetSamplerParameterfvRobustANGLEContextANGLE)},
     {"glGetSamplerParameteriv", P(gl::GetSamplerParameteriv)},
+    {"glGetSamplerParameterivContextANGLE", P(gl::GetSamplerParameterivContextANGLE)},
     {"glGetSamplerParameterivRobustANGLE", P(gl::GetSamplerParameterivRobustANGLE)},
+    {"glGetSamplerParameterivRobustANGLEContextANGLE",
+     P(gl::GetSamplerParameterivRobustANGLEContextANGLE)},
     {"glGetShaderInfoLog", P(gl::GetShaderInfoLog)},
+    {"glGetShaderInfoLogContextANGLE", P(gl::GetShaderInfoLogContextANGLE)},
     {"glGetShaderPrecisionFormat", P(gl::GetShaderPrecisionFormat)},
+    {"glGetShaderPrecisionFormatContextANGLE", P(gl::GetShaderPrecisionFormatContextANGLE)},
     {"glGetShaderSource", P(gl::GetShaderSource)},
+    {"glGetShaderSourceContextANGLE", P(gl::GetShaderSourceContextANGLE)},
     {"glGetShaderiv", P(gl::GetShaderiv)},
+    {"glGetShaderivContextANGLE", P(gl::GetShaderivContextANGLE)},
     {"glGetShaderivRobustANGLE", P(gl::GetShaderivRobustANGLE)},
+    {"glGetShaderivRobustANGLEContextANGLE", P(gl::GetShaderivRobustANGLEContextANGLE)},
     {"glGetString", P(gl::GetString)},
+    {"glGetStringContextANGLE", P(gl::GetStringContextANGLE)},
     {"glGetStringi", P(gl::GetStringi)},
+    {"glGetStringiContextANGLE", P(gl::GetStringiContextANGLE)},
     {"glGetSynciv", P(gl::GetSynciv)},
+    {"glGetSyncivContextANGLE", P(gl::GetSyncivContextANGLE)},
     {"glGetTexEnvfv", P(gl::GetTexEnvfv)},
+    {"glGetTexEnvfvContextANGLE", P(gl::GetTexEnvfvContextANGLE)},
     {"glGetTexEnviv", P(gl::GetTexEnviv)},
+    {"glGetTexEnvivContextANGLE", P(gl::GetTexEnvivContextANGLE)},
     {"glGetTexEnvxv", P(gl::GetTexEnvxv)},
+    {"glGetTexEnvxvContextANGLE", P(gl::GetTexEnvxvContextANGLE)},
     {"glGetTexLevelParameterfv", P(gl::GetTexLevelParameterfv)},
+    {"glGetTexLevelParameterfvContextANGLE", P(gl::GetTexLevelParameterfvContextANGLE)},
     {"glGetTexLevelParameterfvRobustANGLE", P(gl::GetTexLevelParameterfvRobustANGLE)},
+    {"glGetTexLevelParameterfvRobustANGLEContextANGLE",
+     P(gl::GetTexLevelParameterfvRobustANGLEContextANGLE)},
     {"glGetTexLevelParameteriv", P(gl::GetTexLevelParameteriv)},
+    {"glGetTexLevelParameterivContextANGLE", P(gl::GetTexLevelParameterivContextANGLE)},
     {"glGetTexLevelParameterivRobustANGLE", P(gl::GetTexLevelParameterivRobustANGLE)},
+    {"glGetTexLevelParameterivRobustANGLEContextANGLE",
+     P(gl::GetTexLevelParameterivRobustANGLEContextANGLE)},
     {"glGetTexParameterIivRobustANGLE", P(gl::GetTexParameterIivRobustANGLE)},
+    {"glGetTexParameterIivRobustANGLEContextANGLE",
+     P(gl::GetTexParameterIivRobustANGLEContextANGLE)},
     {"glGetTexParameterIuivRobustANGLE", P(gl::GetTexParameterIuivRobustANGLE)},
+    {"glGetTexParameterIuivRobustANGLEContextANGLE",
+     P(gl::GetTexParameterIuivRobustANGLEContextANGLE)},
     {"glGetTexParameterfv", P(gl::GetTexParameterfv)},
+    {"glGetTexParameterfvContextANGLE", P(gl::GetTexParameterfvContextANGLE)},
     {"glGetTexParameterfvRobustANGLE", P(gl::GetTexParameterfvRobustANGLE)},
+    {"glGetTexParameterfvRobustANGLEContextANGLE", P(gl::GetTexParameterfvRobustANGLEContextANGLE)},
     {"glGetTexParameteriv", P(gl::GetTexParameteriv)},
+    {"glGetTexParameterivContextANGLE", P(gl::GetTexParameterivContextANGLE)},
     {"glGetTexParameterivRobustANGLE", P(gl::GetTexParameterivRobustANGLE)},
+    {"glGetTexParameterivRobustANGLEContextANGLE", P(gl::GetTexParameterivRobustANGLEContextANGLE)},
     {"glGetTexParameterxv", P(gl::GetTexParameterxv)},
+    {"glGetTexParameterxvContextANGLE", P(gl::GetTexParameterxvContextANGLE)},
     {"glGetTransformFeedbackVarying", P(gl::GetTransformFeedbackVarying)},
+    {"glGetTransformFeedbackVaryingContextANGLE", P(gl::GetTransformFeedbackVaryingContextANGLE)},
     {"glGetTranslatedShaderSourceANGLE", P(gl::GetTranslatedShaderSourceANGLE)},
+    {"glGetTranslatedShaderSourceANGLEContextANGLE",
+     P(gl::GetTranslatedShaderSourceANGLEContextANGLE)},
     {"glGetUniformBlockIndex", P(gl::GetUniformBlockIndex)},
+    {"glGetUniformBlockIndexContextANGLE", P(gl::GetUniformBlockIndexContextANGLE)},
     {"glGetUniformIndices", P(gl::GetUniformIndices)},
+    {"glGetUniformIndicesContextANGLE", P(gl::GetUniformIndicesContextANGLE)},
     {"glGetUniformLocation", P(gl::GetUniformLocation)},
+    {"glGetUniformLocationContextANGLE", P(gl::GetUniformLocationContextANGLE)},
     {"glGetUniformfv", P(gl::GetUniformfv)},
+    {"glGetUniformfvContextANGLE", P(gl::GetUniformfvContextANGLE)},
     {"glGetUniformfvRobustANGLE", P(gl::GetUniformfvRobustANGLE)},
+    {"glGetUniformfvRobustANGLEContextANGLE", P(gl::GetUniformfvRobustANGLEContextANGLE)},
     {"glGetUniformiv", P(gl::GetUniformiv)},
+    {"glGetUniformivContextANGLE", P(gl::GetUniformivContextANGLE)},
     {"glGetUniformivRobustANGLE", P(gl::GetUniformivRobustANGLE)},
+    {"glGetUniformivRobustANGLEContextANGLE", P(gl::GetUniformivRobustANGLEContextANGLE)},
     {"glGetUniformuiv", P(gl::GetUniformuiv)},
+    {"glGetUniformuivContextANGLE", P(gl::GetUniformuivContextANGLE)},
     {"glGetUniformuivRobustANGLE", P(gl::GetUniformuivRobustANGLE)},
+    {"glGetUniformuivRobustANGLEContextANGLE", P(gl::GetUniformuivRobustANGLEContextANGLE)},
     {"glGetVertexAttribIiv", P(gl::GetVertexAttribIiv)},
+    {"glGetVertexAttribIivContextANGLE", P(gl::GetVertexAttribIivContextANGLE)},
     {"glGetVertexAttribIivRobustANGLE", P(gl::GetVertexAttribIivRobustANGLE)},
+    {"glGetVertexAttribIivRobustANGLEContextANGLE",
+     P(gl::GetVertexAttribIivRobustANGLEContextANGLE)},
     {"glGetVertexAttribIuiv", P(gl::GetVertexAttribIuiv)},
+    {"glGetVertexAttribIuivContextANGLE", P(gl::GetVertexAttribIuivContextANGLE)},
     {"glGetVertexAttribIuivRobustANGLE", P(gl::GetVertexAttribIuivRobustANGLE)},
+    {"glGetVertexAttribIuivRobustANGLEContextANGLE",
+     P(gl::GetVertexAttribIuivRobustANGLEContextANGLE)},
     {"glGetVertexAttribPointerv", P(gl::GetVertexAttribPointerv)},
+    {"glGetVertexAttribPointervContextANGLE", P(gl::GetVertexAttribPointervContextANGLE)},
     {"glGetVertexAttribPointervRobustANGLE", P(gl::GetVertexAttribPointervRobustANGLE)},
+    {"glGetVertexAttribPointervRobustANGLEContextANGLE",
+     P(gl::GetVertexAttribPointervRobustANGLEContextANGLE)},
     {"glGetVertexAttribfv", P(gl::GetVertexAttribfv)},
+    {"glGetVertexAttribfvContextANGLE", P(gl::GetVertexAttribfvContextANGLE)},
     {"glGetVertexAttribfvRobustANGLE", P(gl::GetVertexAttribfvRobustANGLE)},
+    {"glGetVertexAttribfvRobustANGLEContextANGLE", P(gl::GetVertexAttribfvRobustANGLEContextANGLE)},
     {"glGetVertexAttribiv", P(gl::GetVertexAttribiv)},
+    {"glGetVertexAttribivContextANGLE", P(gl::GetVertexAttribivContextANGLE)},
     {"glGetVertexAttribivRobustANGLE", P(gl::GetVertexAttribivRobustANGLE)},
+    {"glGetVertexAttribivRobustANGLEContextANGLE", P(gl::GetVertexAttribivRobustANGLEContextANGLE)},
     {"glGetnUniformfvEXT", P(gl::GetnUniformfvEXT)},
+    {"glGetnUniformfvEXTContextANGLE", P(gl::GetnUniformfvEXTContextANGLE)},
     {"glGetnUniformfvRobustANGLE", P(gl::GetnUniformfvRobustANGLE)},
+    {"glGetnUniformfvRobustANGLEContextANGLE", P(gl::GetnUniformfvRobustANGLEContextANGLE)},
     {"glGetnUniformivEXT", P(gl::GetnUniformivEXT)},
+    {"glGetnUniformivEXTContextANGLE", P(gl::GetnUniformivEXTContextANGLE)},
     {"glGetnUniformivRobustANGLE", P(gl::GetnUniformivRobustANGLE)},
+    {"glGetnUniformivRobustANGLEContextANGLE", P(gl::GetnUniformivRobustANGLEContextANGLE)},
     {"glGetnUniformuivRobustANGLE", P(gl::GetnUniformuivRobustANGLE)},
+    {"glGetnUniformuivRobustANGLEContextANGLE", P(gl::GetnUniformuivRobustANGLEContextANGLE)},
     {"glHint", P(gl::Hint)},
+    {"glHintContextANGLE", P(gl::HintContextANGLE)},
     {"glInsertEventMarkerEXT", P(gl::InsertEventMarkerEXT)},
+    {"glInsertEventMarkerEXTContextANGLE", P(gl::InsertEventMarkerEXTContextANGLE)},
     {"glInvalidateFramebuffer", P(gl::InvalidateFramebuffer)},
+    {"glInvalidateFramebufferContextANGLE", P(gl::InvalidateFramebufferContextANGLE)},
     {"glInvalidateSubFramebuffer", P(gl::InvalidateSubFramebuffer)},
+    {"glInvalidateSubFramebufferContextANGLE", P(gl::InvalidateSubFramebufferContextANGLE)},
     {"glIsBuffer", P(gl::IsBuffer)},
+    {"glIsBufferContextANGLE", P(gl::IsBufferContextANGLE)},
     {"glIsEnabled", P(gl::IsEnabled)},
+    {"glIsEnabledContextANGLE", P(gl::IsEnabledContextANGLE)},
     {"glIsFenceNV", P(gl::IsFenceNV)},
+    {"glIsFenceNVContextANGLE", P(gl::IsFenceNVContextANGLE)},
     {"glIsFramebuffer", P(gl::IsFramebuffer)},
+    {"glIsFramebufferContextANGLE", P(gl::IsFramebufferContextANGLE)},
     {"glIsProgram", P(gl::IsProgram)},
+    {"glIsProgramContextANGLE", P(gl::IsProgramContextANGLE)},
     {"glIsProgramPipeline", P(gl::IsProgramPipeline)},
+    {"glIsProgramPipelineContextANGLE", P(gl::IsProgramPipelineContextANGLE)},
     {"glIsQuery", P(gl::IsQuery)},
+    {"glIsQueryContextANGLE", P(gl::IsQueryContextANGLE)},
     {"glIsQueryEXT", P(gl::IsQueryEXT)},
+    {"glIsQueryEXTContextANGLE", P(gl::IsQueryEXTContextANGLE)},
     {"glIsRenderbuffer", P(gl::IsRenderbuffer)},
+    {"glIsRenderbufferContextANGLE", P(gl::IsRenderbufferContextANGLE)},
     {"glIsSampler", P(gl::IsSampler)},
+    {"glIsSamplerContextANGLE", P(gl::IsSamplerContextANGLE)},
     {"glIsShader", P(gl::IsShader)},
+    {"glIsShaderContextANGLE", P(gl::IsShaderContextANGLE)},
     {"glIsSync", P(gl::IsSync)},
+    {"glIsSyncContextANGLE", P(gl::IsSyncContextANGLE)},
     {"glIsTexture", P(gl::IsTexture)},
+    {"glIsTextureContextANGLE", P(gl::IsTextureContextANGLE)},
     {"glIsTransformFeedback", P(gl::IsTransformFeedback)},
+    {"glIsTransformFeedbackContextANGLE", P(gl::IsTransformFeedbackContextANGLE)},
     {"glIsVertexArray", P(gl::IsVertexArray)},
+    {"glIsVertexArrayContextANGLE", P(gl::IsVertexArrayContextANGLE)},
     {"glIsVertexArrayOES", P(gl::IsVertexArrayOES)},
+    {"glIsVertexArrayOESContextANGLE", P(gl::IsVertexArrayOESContextANGLE)},
     {"glLightModelf", P(gl::LightModelf)},
+    {"glLightModelfContextANGLE", P(gl::LightModelfContextANGLE)},
     {"glLightModelfv", P(gl::LightModelfv)},
+    {"glLightModelfvContextANGLE", P(gl::LightModelfvContextANGLE)},
     {"glLightModelx", P(gl::LightModelx)},
+    {"glLightModelxContextANGLE", P(gl::LightModelxContextANGLE)},
     {"glLightModelxv", P(gl::LightModelxv)},
+    {"glLightModelxvContextANGLE", P(gl::LightModelxvContextANGLE)},
     {"glLightf", P(gl::Lightf)},
+    {"glLightfContextANGLE", P(gl::LightfContextANGLE)},
     {"glLightfv", P(gl::Lightfv)},
+    {"glLightfvContextANGLE", P(gl::LightfvContextANGLE)},
     {"glLightx", P(gl::Lightx)},
+    {"glLightxContextANGLE", P(gl::LightxContextANGLE)},
     {"glLightxv", P(gl::Lightxv)},
+    {"glLightxvContextANGLE", P(gl::LightxvContextANGLE)},
     {"glLineWidth", P(gl::LineWidth)},
+    {"glLineWidthContextANGLE", P(gl::LineWidthContextANGLE)},
     {"glLineWidthx", P(gl::LineWidthx)},
+    {"glLineWidthxContextANGLE", P(gl::LineWidthxContextANGLE)},
     {"glLinkProgram", P(gl::LinkProgram)},
+    {"glLinkProgramContextANGLE", P(gl::LinkProgramContextANGLE)},
     {"glLoadIdentity", P(gl::LoadIdentity)},
+    {"glLoadIdentityContextANGLE", P(gl::LoadIdentityContextANGLE)},
     {"glLoadMatrixf", P(gl::LoadMatrixf)},
+    {"glLoadMatrixfContextANGLE", P(gl::LoadMatrixfContextANGLE)},
     {"glLoadMatrixx", P(gl::LoadMatrixx)},
+    {"glLoadMatrixxContextANGLE", P(gl::LoadMatrixxContextANGLE)},
     {"glLoadPaletteFromModelViewMatrixOES", P(gl::LoadPaletteFromModelViewMatrixOES)},
+    {"glLoadPaletteFromModelViewMatrixOESContextANGLE",
+     P(gl::LoadPaletteFromModelViewMatrixOESContextANGLE)},
     {"glLogicOp", P(gl::LogicOp)},
+    {"glLogicOpContextANGLE", P(gl::LogicOpContextANGLE)},
     {"glMapBufferOES", P(gl::MapBufferOES)},
+    {"glMapBufferOESContextANGLE", P(gl::MapBufferOESContextANGLE)},
     {"glMapBufferRange", P(gl::MapBufferRange)},
+    {"glMapBufferRangeContextANGLE", P(gl::MapBufferRangeContextANGLE)},
     {"glMapBufferRangeEXT", P(gl::MapBufferRangeEXT)},
+    {"glMapBufferRangeEXTContextANGLE", P(gl::MapBufferRangeEXTContextANGLE)},
     {"glMaterialf", P(gl::Materialf)},
+    {"glMaterialfContextANGLE", P(gl::MaterialfContextANGLE)},
     {"glMaterialfv", P(gl::Materialfv)},
+    {"glMaterialfvContextANGLE", P(gl::MaterialfvContextANGLE)},
     {"glMaterialx", P(gl::Materialx)},
+    {"glMaterialxContextANGLE", P(gl::MaterialxContextANGLE)},
     {"glMaterialxv", P(gl::Materialxv)},
+    {"glMaterialxvContextANGLE", P(gl::MaterialxvContextANGLE)},
     {"glMatrixIndexPointerOES", P(gl::MatrixIndexPointerOES)},
+    {"glMatrixIndexPointerOESContextANGLE", P(gl::MatrixIndexPointerOESContextANGLE)},
     {"glMatrixMode", P(gl::MatrixMode)},
+    {"glMatrixModeContextANGLE", P(gl::MatrixModeContextANGLE)},
     {"glMemoryBarrier", P(gl::MemoryBarrier)},
     {"glMemoryBarrierByRegion", P(gl::MemoryBarrierByRegion)},
+    {"glMemoryBarrierByRegionContextANGLE", P(gl::MemoryBarrierByRegionContextANGLE)},
+    {"glMemoryBarrierContextANGLE", P(gl::MemoryBarrierContextANGLE)},
     {"glMultMatrixf", P(gl::MultMatrixf)},
+    {"glMultMatrixfContextANGLE", P(gl::MultMatrixfContextANGLE)},
     {"glMultMatrixx", P(gl::MultMatrixx)},
+    {"glMultMatrixxContextANGLE", P(gl::MultMatrixxContextANGLE)},
     {"glMultiTexCoord4f", P(gl::MultiTexCoord4f)},
+    {"glMultiTexCoord4fContextANGLE", P(gl::MultiTexCoord4fContextANGLE)},
     {"glMultiTexCoord4x", P(gl::MultiTexCoord4x)},
+    {"glMultiTexCoord4xContextANGLE", P(gl::MultiTexCoord4xContextANGLE)},
     {"glNormal3f", P(gl::Normal3f)},
+    {"glNormal3fContextANGLE", P(gl::Normal3fContextANGLE)},
     {"glNormal3x", P(gl::Normal3x)},
+    {"glNormal3xContextANGLE", P(gl::Normal3xContextANGLE)},
     {"glNormalPointer", P(gl::NormalPointer)},
+    {"glNormalPointerContextANGLE", P(gl::NormalPointerContextANGLE)},
     {"glObjectLabelKHR", P(gl::ObjectLabelKHR)},
+    {"glObjectLabelKHRContextANGLE", P(gl::ObjectLabelKHRContextANGLE)},
     {"glObjectPtrLabelKHR", P(gl::ObjectPtrLabelKHR)},
+    {"glObjectPtrLabelKHRContextANGLE", P(gl::ObjectPtrLabelKHRContextANGLE)},
     {"glOrthof", P(gl::Orthof)},
+    {"glOrthofContextANGLE", P(gl::OrthofContextANGLE)},
     {"glOrthox", P(gl::Orthox)},
+    {"glOrthoxContextANGLE", P(gl::OrthoxContextANGLE)},
     {"glPauseTransformFeedback", P(gl::PauseTransformFeedback)},
+    {"glPauseTransformFeedbackContextANGLE", P(gl::PauseTransformFeedbackContextANGLE)},
     {"glPixelStorei", P(gl::PixelStorei)},
+    {"glPixelStoreiContextANGLE", P(gl::PixelStoreiContextANGLE)},
     {"glPointParameterf", P(gl::PointParameterf)},
+    {"glPointParameterfContextANGLE", P(gl::PointParameterfContextANGLE)},
     {"glPointParameterfv", P(gl::PointParameterfv)},
+    {"glPointParameterfvContextANGLE", P(gl::PointParameterfvContextANGLE)},
     {"glPointParameterx", P(gl::PointParameterx)},
+    {"glPointParameterxContextANGLE", P(gl::PointParameterxContextANGLE)},
     {"glPointParameterxv", P(gl::PointParameterxv)},
+    {"glPointParameterxvContextANGLE", P(gl::PointParameterxvContextANGLE)},
     {"glPointSize", P(gl::PointSize)},
+    {"glPointSizeContextANGLE", P(gl::PointSizeContextANGLE)},
     {"glPointSizePointerOES", P(gl::PointSizePointerOES)},
+    {"glPointSizePointerOESContextANGLE", P(gl::PointSizePointerOESContextANGLE)},
     {"glPointSizex", P(gl::PointSizex)},
+    {"glPointSizexContextANGLE", P(gl::PointSizexContextANGLE)},
     {"glPolygonOffset", P(gl::PolygonOffset)},
+    {"glPolygonOffsetContextANGLE", P(gl::PolygonOffsetContextANGLE)},
     {"glPolygonOffsetx", P(gl::PolygonOffsetx)},
+    {"glPolygonOffsetxContextANGLE", P(gl::PolygonOffsetxContextANGLE)},
     {"glPopDebugGroupKHR", P(gl::PopDebugGroupKHR)},
+    {"glPopDebugGroupKHRContextANGLE", P(gl::PopDebugGroupKHRContextANGLE)},
     {"glPopGroupMarkerEXT", P(gl::PopGroupMarkerEXT)},
+    {"glPopGroupMarkerEXTContextANGLE", P(gl::PopGroupMarkerEXTContextANGLE)},
     {"glPopMatrix", P(gl::PopMatrix)},
+    {"glPopMatrixContextANGLE", P(gl::PopMatrixContextANGLE)},
     {"glProgramBinary", P(gl::ProgramBinary)},
+    {"glProgramBinaryContextANGLE", P(gl::ProgramBinaryContextANGLE)},
     {"glProgramBinaryOES", P(gl::ProgramBinaryOES)},
+    {"glProgramBinaryOESContextANGLE", P(gl::ProgramBinaryOESContextANGLE)},
     {"glProgramParameteri", P(gl::ProgramParameteri)},
+    {"glProgramParameteriContextANGLE", P(gl::ProgramParameteriContextANGLE)},
     {"glProgramUniform1f", P(gl::ProgramUniform1f)},
+    {"glProgramUniform1fContextANGLE", P(gl::ProgramUniform1fContextANGLE)},
     {"glProgramUniform1fv", P(gl::ProgramUniform1fv)},
+    {"glProgramUniform1fvContextANGLE", P(gl::ProgramUniform1fvContextANGLE)},
     {"glProgramUniform1i", P(gl::ProgramUniform1i)},
+    {"glProgramUniform1iContextANGLE", P(gl::ProgramUniform1iContextANGLE)},
     {"glProgramUniform1iv", P(gl::ProgramUniform1iv)},
+    {"glProgramUniform1ivContextANGLE", P(gl::ProgramUniform1ivContextANGLE)},
     {"glProgramUniform1ui", P(gl::ProgramUniform1ui)},
+    {"glProgramUniform1uiContextANGLE", P(gl::ProgramUniform1uiContextANGLE)},
     {"glProgramUniform1uiv", P(gl::ProgramUniform1uiv)},
+    {"glProgramUniform1uivContextANGLE", P(gl::ProgramUniform1uivContextANGLE)},
     {"glProgramUniform2f", P(gl::ProgramUniform2f)},
+    {"glProgramUniform2fContextANGLE", P(gl::ProgramUniform2fContextANGLE)},
     {"glProgramUniform2fv", P(gl::ProgramUniform2fv)},
+    {"glProgramUniform2fvContextANGLE", P(gl::ProgramUniform2fvContextANGLE)},
     {"glProgramUniform2i", P(gl::ProgramUniform2i)},
+    {"glProgramUniform2iContextANGLE", P(gl::ProgramUniform2iContextANGLE)},
     {"glProgramUniform2iv", P(gl::ProgramUniform2iv)},
+    {"glProgramUniform2ivContextANGLE", P(gl::ProgramUniform2ivContextANGLE)},
     {"glProgramUniform2ui", P(gl::ProgramUniform2ui)},
+    {"glProgramUniform2uiContextANGLE", P(gl::ProgramUniform2uiContextANGLE)},
     {"glProgramUniform2uiv", P(gl::ProgramUniform2uiv)},
+    {"glProgramUniform2uivContextANGLE", P(gl::ProgramUniform2uivContextANGLE)},
     {"glProgramUniform3f", P(gl::ProgramUniform3f)},
+    {"glProgramUniform3fContextANGLE", P(gl::ProgramUniform3fContextANGLE)},
     {"glProgramUniform3fv", P(gl::ProgramUniform3fv)},
+    {"glProgramUniform3fvContextANGLE", P(gl::ProgramUniform3fvContextANGLE)},
     {"glProgramUniform3i", P(gl::ProgramUniform3i)},
+    {"glProgramUniform3iContextANGLE", P(gl::ProgramUniform3iContextANGLE)},
     {"glProgramUniform3iv", P(gl::ProgramUniform3iv)},
+    {"glProgramUniform3ivContextANGLE", P(gl::ProgramUniform3ivContextANGLE)},
     {"glProgramUniform3ui", P(gl::ProgramUniform3ui)},
+    {"glProgramUniform3uiContextANGLE", P(gl::ProgramUniform3uiContextANGLE)},
     {"glProgramUniform3uiv", P(gl::ProgramUniform3uiv)},
+    {"glProgramUniform3uivContextANGLE", P(gl::ProgramUniform3uivContextANGLE)},
     {"glProgramUniform4f", P(gl::ProgramUniform4f)},
+    {"glProgramUniform4fContextANGLE", P(gl::ProgramUniform4fContextANGLE)},
     {"glProgramUniform4fv", P(gl::ProgramUniform4fv)},
+    {"glProgramUniform4fvContextANGLE", P(gl::ProgramUniform4fvContextANGLE)},
     {"glProgramUniform4i", P(gl::ProgramUniform4i)},
+    {"glProgramUniform4iContextANGLE", P(gl::ProgramUniform4iContextANGLE)},
     {"glProgramUniform4iv", P(gl::ProgramUniform4iv)},
+    {"glProgramUniform4ivContextANGLE", P(gl::ProgramUniform4ivContextANGLE)},
     {"glProgramUniform4ui", P(gl::ProgramUniform4ui)},
+    {"glProgramUniform4uiContextANGLE", P(gl::ProgramUniform4uiContextANGLE)},
     {"glProgramUniform4uiv", P(gl::ProgramUniform4uiv)},
+    {"glProgramUniform4uivContextANGLE", P(gl::ProgramUniform4uivContextANGLE)},
     {"glProgramUniformMatrix2fv", P(gl::ProgramUniformMatrix2fv)},
+    {"glProgramUniformMatrix2fvContextANGLE", P(gl::ProgramUniformMatrix2fvContextANGLE)},
     {"glProgramUniformMatrix2x3fv", P(gl::ProgramUniformMatrix2x3fv)},
+    {"glProgramUniformMatrix2x3fvContextANGLE", P(gl::ProgramUniformMatrix2x3fvContextANGLE)},
     {"glProgramUniformMatrix2x4fv", P(gl::ProgramUniformMatrix2x4fv)},
+    {"glProgramUniformMatrix2x4fvContextANGLE", P(gl::ProgramUniformMatrix2x4fvContextANGLE)},
     {"glProgramUniformMatrix3fv", P(gl::ProgramUniformMatrix3fv)},
+    {"glProgramUniformMatrix3fvContextANGLE", P(gl::ProgramUniformMatrix3fvContextANGLE)},
     {"glProgramUniformMatrix3x2fv", P(gl::ProgramUniformMatrix3x2fv)},
+    {"glProgramUniformMatrix3x2fvContextANGLE", P(gl::ProgramUniformMatrix3x2fvContextANGLE)},
     {"glProgramUniformMatrix3x4fv", P(gl::ProgramUniformMatrix3x4fv)},
+    {"glProgramUniformMatrix3x4fvContextANGLE", P(gl::ProgramUniformMatrix3x4fvContextANGLE)},
     {"glProgramUniformMatrix4fv", P(gl::ProgramUniformMatrix4fv)},
+    {"glProgramUniformMatrix4fvContextANGLE", P(gl::ProgramUniformMatrix4fvContextANGLE)},
     {"glProgramUniformMatrix4x2fv", P(gl::ProgramUniformMatrix4x2fv)},
+    {"glProgramUniformMatrix4x2fvContextANGLE", P(gl::ProgramUniformMatrix4x2fvContextANGLE)},
     {"glProgramUniformMatrix4x3fv", P(gl::ProgramUniformMatrix4x3fv)},
+    {"glProgramUniformMatrix4x3fvContextANGLE", P(gl::ProgramUniformMatrix4x3fvContextANGLE)},
     {"glPushDebugGroupKHR", P(gl::PushDebugGroupKHR)},
+    {"glPushDebugGroupKHRContextANGLE", P(gl::PushDebugGroupKHRContextANGLE)},
     {"glPushGroupMarkerEXT", P(gl::PushGroupMarkerEXT)},
+    {"glPushGroupMarkerEXTContextANGLE", P(gl::PushGroupMarkerEXTContextANGLE)},
     {"glPushMatrix", P(gl::PushMatrix)},
+    {"glPushMatrixContextANGLE", P(gl::PushMatrixContextANGLE)},
     {"glQueryCounterEXT", P(gl::QueryCounterEXT)},
+    {"glQueryCounterEXTContextANGLE", P(gl::QueryCounterEXTContextANGLE)},
     {"glQueryMatrixxOES", P(gl::QueryMatrixxOES)},
+    {"glQueryMatrixxOESContextANGLE", P(gl::QueryMatrixxOESContextANGLE)},
     {"glReadBuffer", P(gl::ReadBuffer)},
+    {"glReadBufferContextANGLE", P(gl::ReadBufferContextANGLE)},
     {"glReadPixels", P(gl::ReadPixels)},
+    {"glReadPixelsContextANGLE", P(gl::ReadPixelsContextANGLE)},
     {"glReadPixelsRobustANGLE", P(gl::ReadPixelsRobustANGLE)},
+    {"glReadPixelsRobustANGLEContextANGLE", P(gl::ReadPixelsRobustANGLEContextANGLE)},
     {"glReadnPixelsEXT", P(gl::ReadnPixelsEXT)},
+    {"glReadnPixelsEXTContextANGLE", P(gl::ReadnPixelsEXTContextANGLE)},
     {"glReadnPixelsRobustANGLE", P(gl::ReadnPixelsRobustANGLE)},
+    {"glReadnPixelsRobustANGLEContextANGLE", P(gl::ReadnPixelsRobustANGLEContextANGLE)},
     {"glReleaseShaderCompiler", P(gl::ReleaseShaderCompiler)},
+    {"glReleaseShaderCompilerContextANGLE", P(gl::ReleaseShaderCompilerContextANGLE)},
     {"glRenderbufferStorage", P(gl::RenderbufferStorage)},
+    {"glRenderbufferStorageContextANGLE", P(gl::RenderbufferStorageContextANGLE)},
     {"glRenderbufferStorageMultisample", P(gl::RenderbufferStorageMultisample)},
     {"glRenderbufferStorageMultisampleANGLE", P(gl::RenderbufferStorageMultisampleANGLE)},
+    {"glRenderbufferStorageMultisampleANGLEContextANGLE",
+     P(gl::RenderbufferStorageMultisampleANGLEContextANGLE)},
+    {"glRenderbufferStorageMultisampleContextANGLE",
+     P(gl::RenderbufferStorageMultisampleContextANGLE)},
     {"glRequestExtensionANGLE", P(gl::RequestExtensionANGLE)},
+    {"glRequestExtensionANGLEContextANGLE", P(gl::RequestExtensionANGLEContextANGLE)},
     {"glResumeTransformFeedback", P(gl::ResumeTransformFeedback)},
+    {"glResumeTransformFeedbackContextANGLE", P(gl::ResumeTransformFeedbackContextANGLE)},
     {"glRotatef", P(gl::Rotatef)},
+    {"glRotatefContextANGLE", P(gl::RotatefContextANGLE)},
     {"glRotatex", P(gl::Rotatex)},
+    {"glRotatexContextANGLE", P(gl::RotatexContextANGLE)},
     {"glSampleCoverage", P(gl::SampleCoverage)},
+    {"glSampleCoverageContextANGLE", P(gl::SampleCoverageContextANGLE)},
     {"glSampleCoveragex", P(gl::SampleCoveragex)},
+    {"glSampleCoveragexContextANGLE", P(gl::SampleCoveragexContextANGLE)},
     {"glSampleMaski", P(gl::SampleMaski)},
+    {"glSampleMaskiContextANGLE", P(gl::SampleMaskiContextANGLE)},
     {"glSamplerParameterIivRobustANGLE", P(gl::SamplerParameterIivRobustANGLE)},
+    {"glSamplerParameterIivRobustANGLEContextANGLE",
+     P(gl::SamplerParameterIivRobustANGLEContextANGLE)},
     {"glSamplerParameterIuivRobustANGLE", P(gl::SamplerParameterIuivRobustANGLE)},
+    {"glSamplerParameterIuivRobustANGLEContextANGLE",
+     P(gl::SamplerParameterIuivRobustANGLEContextANGLE)},
     {"glSamplerParameterf", P(gl::SamplerParameterf)},
+    {"glSamplerParameterfContextANGLE", P(gl::SamplerParameterfContextANGLE)},
     {"glSamplerParameterfv", P(gl::SamplerParameterfv)},
+    {"glSamplerParameterfvContextANGLE", P(gl::SamplerParameterfvContextANGLE)},
     {"glSamplerParameterfvRobustANGLE", P(gl::SamplerParameterfvRobustANGLE)},
+    {"glSamplerParameterfvRobustANGLEContextANGLE",
+     P(gl::SamplerParameterfvRobustANGLEContextANGLE)},
     {"glSamplerParameteri", P(gl::SamplerParameteri)},
+    {"glSamplerParameteriContextANGLE", P(gl::SamplerParameteriContextANGLE)},
     {"glSamplerParameteriv", P(gl::SamplerParameteriv)},
+    {"glSamplerParameterivContextANGLE", P(gl::SamplerParameterivContextANGLE)},
     {"glSamplerParameterivRobustANGLE", P(gl::SamplerParameterivRobustANGLE)},
+    {"glSamplerParameterivRobustANGLEContextANGLE",
+     P(gl::SamplerParameterivRobustANGLEContextANGLE)},
     {"glScalef", P(gl::Scalef)},
+    {"glScalefContextANGLE", P(gl::ScalefContextANGLE)},
     {"glScalex", P(gl::Scalex)},
+    {"glScalexContextANGLE", P(gl::ScalexContextANGLE)},
     {"glScissor", P(gl::Scissor)},
+    {"glScissorContextANGLE", P(gl::ScissorContextANGLE)},
     {"glSetFenceNV", P(gl::SetFenceNV)},
+    {"glSetFenceNVContextANGLE", P(gl::SetFenceNVContextANGLE)},
     {"glShadeModel", P(gl::ShadeModel)},
+    {"glShadeModelContextANGLE", P(gl::ShadeModelContextANGLE)},
     {"glShaderBinary", P(gl::ShaderBinary)},
+    {"glShaderBinaryContextANGLE", P(gl::ShaderBinaryContextANGLE)},
     {"glShaderSource", P(gl::ShaderSource)},
+    {"glShaderSourceContextANGLE", P(gl::ShaderSourceContextANGLE)},
     {"glStencilFunc", P(gl::StencilFunc)},
+    {"glStencilFuncContextANGLE", P(gl::StencilFuncContextANGLE)},
     {"glStencilFuncSeparate", P(gl::StencilFuncSeparate)},
+    {"glStencilFuncSeparateContextANGLE", P(gl::StencilFuncSeparateContextANGLE)},
     {"glStencilMask", P(gl::StencilMask)},
+    {"glStencilMaskContextANGLE", P(gl::StencilMaskContextANGLE)},
     {"glStencilMaskSeparate", P(gl::StencilMaskSeparate)},
+    {"glStencilMaskSeparateContextANGLE", P(gl::StencilMaskSeparateContextANGLE)},
     {"glStencilOp", P(gl::StencilOp)},
+    {"glStencilOpContextANGLE", P(gl::StencilOpContextANGLE)},
     {"glStencilOpSeparate", P(gl::StencilOpSeparate)},
+    {"glStencilOpSeparateContextANGLE", P(gl::StencilOpSeparateContextANGLE)},
     {"glTestFenceNV", P(gl::TestFenceNV)},
+    {"glTestFenceNVContextANGLE", P(gl::TestFenceNVContextANGLE)},
     {"glTexCoordPointer", P(gl::TexCoordPointer)},
+    {"glTexCoordPointerContextANGLE", P(gl::TexCoordPointerContextANGLE)},
     {"glTexEnvf", P(gl::TexEnvf)},
+    {"glTexEnvfContextANGLE", P(gl::TexEnvfContextANGLE)},
     {"glTexEnvfv", P(gl::TexEnvfv)},
+    {"glTexEnvfvContextANGLE", P(gl::TexEnvfvContextANGLE)},
     {"glTexEnvi", P(gl::TexEnvi)},
+    {"glTexEnviContextANGLE", P(gl::TexEnviContextANGLE)},
     {"glTexEnviv", P(gl::TexEnviv)},
+    {"glTexEnvivContextANGLE", P(gl::TexEnvivContextANGLE)},
     {"glTexEnvx", P(gl::TexEnvx)},
+    {"glTexEnvxContextANGLE", P(gl::TexEnvxContextANGLE)},
     {"glTexEnvxv", P(gl::TexEnvxv)},
+    {"glTexEnvxvContextANGLE", P(gl::TexEnvxvContextANGLE)},
     {"glTexImage2D", P(gl::TexImage2D)},
+    {"glTexImage2DContextANGLE", P(gl::TexImage2DContextANGLE)},
     {"glTexImage2DRobustANGLE", P(gl::TexImage2DRobustANGLE)},
+    {"glTexImage2DRobustANGLEContextANGLE", P(gl::TexImage2DRobustANGLEContextANGLE)},
     {"glTexImage3D", P(gl::TexImage3D)},
+    {"glTexImage3DContextANGLE", P(gl::TexImage3DContextANGLE)},
     {"glTexImage3DRobustANGLE", P(gl::TexImage3DRobustANGLE)},
+    {"glTexImage3DRobustANGLEContextANGLE", P(gl::TexImage3DRobustANGLEContextANGLE)},
     {"glTexParameterIivRobustANGLE", P(gl::TexParameterIivRobustANGLE)},
+    {"glTexParameterIivRobustANGLEContextANGLE", P(gl::TexParameterIivRobustANGLEContextANGLE)},
     {"glTexParameterIuivRobustANGLE", P(gl::TexParameterIuivRobustANGLE)},
+    {"glTexParameterIuivRobustANGLEContextANGLE", P(gl::TexParameterIuivRobustANGLEContextANGLE)},
     {"glTexParameterf", P(gl::TexParameterf)},
+    {"glTexParameterfContextANGLE", P(gl::TexParameterfContextANGLE)},
     {"glTexParameterfv", P(gl::TexParameterfv)},
+    {"glTexParameterfvContextANGLE", P(gl::TexParameterfvContextANGLE)},
     {"glTexParameterfvRobustANGLE", P(gl::TexParameterfvRobustANGLE)},
+    {"glTexParameterfvRobustANGLEContextANGLE", P(gl::TexParameterfvRobustANGLEContextANGLE)},
     {"glTexParameteri", P(gl::TexParameteri)},
+    {"glTexParameteriContextANGLE", P(gl::TexParameteriContextANGLE)},
     {"glTexParameteriv", P(gl::TexParameteriv)},
+    {"glTexParameterivContextANGLE", P(gl::TexParameterivContextANGLE)},
     {"glTexParameterivRobustANGLE", P(gl::TexParameterivRobustANGLE)},
+    {"glTexParameterivRobustANGLEContextANGLE", P(gl::TexParameterivRobustANGLEContextANGLE)},
     {"glTexParameterx", P(gl::TexParameterx)},
+    {"glTexParameterxContextANGLE", P(gl::TexParameterxContextANGLE)},
     {"glTexParameterxv", P(gl::TexParameterxv)},
+    {"glTexParameterxvContextANGLE", P(gl::TexParameterxvContextANGLE)},
     {"glTexStorage2D", P(gl::TexStorage2D)},
+    {"glTexStorage2DContextANGLE", P(gl::TexStorage2DContextANGLE)},
     {"glTexStorage2DEXT", P(gl::TexStorage2DEXT)},
+    {"glTexStorage2DEXTContextANGLE", P(gl::TexStorage2DEXTContextANGLE)},
     {"glTexStorage2DMultisample", P(gl::TexStorage2DMultisample)},
+    {"glTexStorage2DMultisampleContextANGLE", P(gl::TexStorage2DMultisampleContextANGLE)},
     {"glTexStorage3D", P(gl::TexStorage3D)},
+    {"glTexStorage3DContextANGLE", P(gl::TexStorage3DContextANGLE)},
     {"glTexStorage3DEXT", P(gl::TexStorage3DEXT)},
+    {"glTexStorage3DEXTContextANGLE", P(gl::TexStorage3DEXTContextANGLE)},
     {"glTexSubImage2D", P(gl::TexSubImage2D)},
+    {"glTexSubImage2DContextANGLE", P(gl::TexSubImage2DContextANGLE)},
     {"glTexSubImage2DRobustANGLE", P(gl::TexSubImage2DRobustANGLE)},
+    {"glTexSubImage2DRobustANGLEContextANGLE", P(gl::TexSubImage2DRobustANGLEContextANGLE)},
     {"glTexSubImage3D", P(gl::TexSubImage3D)},
+    {"glTexSubImage3DContextANGLE", P(gl::TexSubImage3DContextANGLE)},
     {"glTexSubImage3DRobustANGLE", P(gl::TexSubImage3DRobustANGLE)},
+    {"glTexSubImage3DRobustANGLEContextANGLE", P(gl::TexSubImage3DRobustANGLEContextANGLE)},
     {"glTransformFeedbackVaryings", P(gl::TransformFeedbackVaryings)},
+    {"glTransformFeedbackVaryingsContextANGLE", P(gl::TransformFeedbackVaryingsContextANGLE)},
     {"glTranslatef", P(gl::Translatef)},
+    {"glTranslatefContextANGLE", P(gl::TranslatefContextANGLE)},
     {"glTranslatex", P(gl::Translatex)},
+    {"glTranslatexContextANGLE", P(gl::TranslatexContextANGLE)},
     {"glUniform1f", P(gl::Uniform1f)},
+    {"glUniform1fContextANGLE", P(gl::Uniform1fContextANGLE)},
     {"glUniform1fv", P(gl::Uniform1fv)},
+    {"glUniform1fvContextANGLE", P(gl::Uniform1fvContextANGLE)},
     {"glUniform1i", P(gl::Uniform1i)},
+    {"glUniform1iContextANGLE", P(gl::Uniform1iContextANGLE)},
     {"glUniform1iv", P(gl::Uniform1iv)},
+    {"glUniform1ivContextANGLE", P(gl::Uniform1ivContextANGLE)},
     {"glUniform1ui", P(gl::Uniform1ui)},
+    {"glUniform1uiContextANGLE", P(gl::Uniform1uiContextANGLE)},
     {"glUniform1uiv", P(gl::Uniform1uiv)},
+    {"glUniform1uivContextANGLE", P(gl::Uniform1uivContextANGLE)},
     {"glUniform2f", P(gl::Uniform2f)},
+    {"glUniform2fContextANGLE", P(gl::Uniform2fContextANGLE)},
     {"glUniform2fv", P(gl::Uniform2fv)},
+    {"glUniform2fvContextANGLE", P(gl::Uniform2fvContextANGLE)},
     {"glUniform2i", P(gl::Uniform2i)},
+    {"glUniform2iContextANGLE", P(gl::Uniform2iContextANGLE)},
     {"glUniform2iv", P(gl::Uniform2iv)},
+    {"glUniform2ivContextANGLE", P(gl::Uniform2ivContextANGLE)},
     {"glUniform2ui", P(gl::Uniform2ui)},
+    {"glUniform2uiContextANGLE", P(gl::Uniform2uiContextANGLE)},
     {"glUniform2uiv", P(gl::Uniform2uiv)},
+    {"glUniform2uivContextANGLE", P(gl::Uniform2uivContextANGLE)},
     {"glUniform3f", P(gl::Uniform3f)},
+    {"glUniform3fContextANGLE", P(gl::Uniform3fContextANGLE)},
     {"glUniform3fv", P(gl::Uniform3fv)},
+    {"glUniform3fvContextANGLE", P(gl::Uniform3fvContextANGLE)},
     {"glUniform3i", P(gl::Uniform3i)},
+    {"glUniform3iContextANGLE", P(gl::Uniform3iContextANGLE)},
     {"glUniform3iv", P(gl::Uniform3iv)},
+    {"glUniform3ivContextANGLE", P(gl::Uniform3ivContextANGLE)},
     {"glUniform3ui", P(gl::Uniform3ui)},
+    {"glUniform3uiContextANGLE", P(gl::Uniform3uiContextANGLE)},
     {"glUniform3uiv", P(gl::Uniform3uiv)},
+    {"glUniform3uivContextANGLE", P(gl::Uniform3uivContextANGLE)},
     {"glUniform4f", P(gl::Uniform4f)},
+    {"glUniform4fContextANGLE", P(gl::Uniform4fContextANGLE)},
     {"glUniform4fv", P(gl::Uniform4fv)},
+    {"glUniform4fvContextANGLE", P(gl::Uniform4fvContextANGLE)},
     {"glUniform4i", P(gl::Uniform4i)},
+    {"glUniform4iContextANGLE", P(gl::Uniform4iContextANGLE)},
     {"glUniform4iv", P(gl::Uniform4iv)},
+    {"glUniform4ivContextANGLE", P(gl::Uniform4ivContextANGLE)},
     {"glUniform4ui", P(gl::Uniform4ui)},
+    {"glUniform4uiContextANGLE", P(gl::Uniform4uiContextANGLE)},
     {"glUniform4uiv", P(gl::Uniform4uiv)},
+    {"glUniform4uivContextANGLE", P(gl::Uniform4uivContextANGLE)},
     {"glUniformBlockBinding", P(gl::UniformBlockBinding)},
+    {"glUniformBlockBindingContextANGLE", P(gl::UniformBlockBindingContextANGLE)},
     {"glUniformMatrix2fv", P(gl::UniformMatrix2fv)},
+    {"glUniformMatrix2fvContextANGLE", P(gl::UniformMatrix2fvContextANGLE)},
     {"glUniformMatrix2x3fv", P(gl::UniformMatrix2x3fv)},
+    {"glUniformMatrix2x3fvContextANGLE", P(gl::UniformMatrix2x3fvContextANGLE)},
     {"glUniformMatrix2x4fv", P(gl::UniformMatrix2x4fv)},
+    {"glUniformMatrix2x4fvContextANGLE", P(gl::UniformMatrix2x4fvContextANGLE)},
     {"glUniformMatrix3fv", P(gl::UniformMatrix3fv)},
+    {"glUniformMatrix3fvContextANGLE", P(gl::UniformMatrix3fvContextANGLE)},
     {"glUniformMatrix3x2fv", P(gl::UniformMatrix3x2fv)},
+    {"glUniformMatrix3x2fvContextANGLE", P(gl::UniformMatrix3x2fvContextANGLE)},
     {"glUniformMatrix3x4fv", P(gl::UniformMatrix3x4fv)},
+    {"glUniformMatrix3x4fvContextANGLE", P(gl::UniformMatrix3x4fvContextANGLE)},
     {"glUniformMatrix4fv", P(gl::UniformMatrix4fv)},
+    {"glUniformMatrix4fvContextANGLE", P(gl::UniformMatrix4fvContextANGLE)},
     {"glUniformMatrix4x2fv", P(gl::UniformMatrix4x2fv)},
+    {"glUniformMatrix4x2fvContextANGLE", P(gl::UniformMatrix4x2fvContextANGLE)},
     {"glUniformMatrix4x3fv", P(gl::UniformMatrix4x3fv)},
+    {"glUniformMatrix4x3fvContextANGLE", P(gl::UniformMatrix4x3fvContextANGLE)},
     {"glUnmapBuffer", P(gl::UnmapBuffer)},
+    {"glUnmapBufferContextANGLE", P(gl::UnmapBufferContextANGLE)},
     {"glUnmapBufferOES", P(gl::UnmapBufferOES)},
+    {"glUnmapBufferOESContextANGLE", P(gl::UnmapBufferOESContextANGLE)},
     {"glUseProgram", P(gl::UseProgram)},
+    {"glUseProgramContextANGLE", P(gl::UseProgramContextANGLE)},
     {"glUseProgramStages", P(gl::UseProgramStages)},
+    {"glUseProgramStagesContextANGLE", P(gl::UseProgramStagesContextANGLE)},
     {"glValidateProgram", P(gl::ValidateProgram)},
+    {"glValidateProgramContextANGLE", P(gl::ValidateProgramContextANGLE)},
     {"glValidateProgramPipeline", P(gl::ValidateProgramPipeline)},
+    {"glValidateProgramPipelineContextANGLE", P(gl::ValidateProgramPipelineContextANGLE)},
     {"glVertexAttrib1f", P(gl::VertexAttrib1f)},
+    {"glVertexAttrib1fContextANGLE", P(gl::VertexAttrib1fContextANGLE)},
     {"glVertexAttrib1fv", P(gl::VertexAttrib1fv)},
+    {"glVertexAttrib1fvContextANGLE", P(gl::VertexAttrib1fvContextANGLE)},
     {"glVertexAttrib2f", P(gl::VertexAttrib2f)},
+    {"glVertexAttrib2fContextANGLE", P(gl::VertexAttrib2fContextANGLE)},
     {"glVertexAttrib2fv", P(gl::VertexAttrib2fv)},
+    {"glVertexAttrib2fvContextANGLE", P(gl::VertexAttrib2fvContextANGLE)},
     {"glVertexAttrib3f", P(gl::VertexAttrib3f)},
+    {"glVertexAttrib3fContextANGLE", P(gl::VertexAttrib3fContextANGLE)},
     {"glVertexAttrib3fv", P(gl::VertexAttrib3fv)},
+    {"glVertexAttrib3fvContextANGLE", P(gl::VertexAttrib3fvContextANGLE)},
     {"glVertexAttrib4f", P(gl::VertexAttrib4f)},
+    {"glVertexAttrib4fContextANGLE", P(gl::VertexAttrib4fContextANGLE)},
     {"glVertexAttrib4fv", P(gl::VertexAttrib4fv)},
+    {"glVertexAttrib4fvContextANGLE", P(gl::VertexAttrib4fvContextANGLE)},
     {"glVertexAttribBinding", P(gl::VertexAttribBinding)},
+    {"glVertexAttribBindingContextANGLE", P(gl::VertexAttribBindingContextANGLE)},
     {"glVertexAttribDivisor", P(gl::VertexAttribDivisor)},
     {"glVertexAttribDivisorANGLE", P(gl::VertexAttribDivisorANGLE)},
+    {"glVertexAttribDivisorANGLEContextANGLE", P(gl::VertexAttribDivisorANGLEContextANGLE)},
+    {"glVertexAttribDivisorContextANGLE", P(gl::VertexAttribDivisorContextANGLE)},
     {"glVertexAttribFormat", P(gl::VertexAttribFormat)},
+    {"glVertexAttribFormatContextANGLE", P(gl::VertexAttribFormatContextANGLE)},
     {"glVertexAttribI4i", P(gl::VertexAttribI4i)},
+    {"glVertexAttribI4iContextANGLE", P(gl::VertexAttribI4iContextANGLE)},
     {"glVertexAttribI4iv", P(gl::VertexAttribI4iv)},
+    {"glVertexAttribI4ivContextANGLE", P(gl::VertexAttribI4ivContextANGLE)},
     {"glVertexAttribI4ui", P(gl::VertexAttribI4ui)},
+    {"glVertexAttribI4uiContextANGLE", P(gl::VertexAttribI4uiContextANGLE)},
     {"glVertexAttribI4uiv", P(gl::VertexAttribI4uiv)},
+    {"glVertexAttribI4uivContextANGLE", P(gl::VertexAttribI4uivContextANGLE)},
     {"glVertexAttribIFormat", P(gl::VertexAttribIFormat)},
+    {"glVertexAttribIFormatContextANGLE", P(gl::VertexAttribIFormatContextANGLE)},
     {"glVertexAttribIPointer", P(gl::VertexAttribIPointer)},
+    {"glVertexAttribIPointerContextANGLE", P(gl::VertexAttribIPointerContextANGLE)},
     {"glVertexAttribPointer", P(gl::VertexAttribPointer)},
+    {"glVertexAttribPointerContextANGLE", P(gl::VertexAttribPointerContextANGLE)},
     {"glVertexBindingDivisor", P(gl::VertexBindingDivisor)},
+    {"glVertexBindingDivisorContextANGLE", P(gl::VertexBindingDivisorContextANGLE)},
     {"glVertexPointer", P(gl::VertexPointer)},
+    {"glVertexPointerContextANGLE", P(gl::VertexPointerContextANGLE)},
     {"glViewport", P(gl::Viewport)},
+    {"glViewportContextANGLE", P(gl::ViewportContextANGLE)},
     {"glWaitSync", P(gl::WaitSync)},
-    {"glWeightPointerOES", P(gl::WeightPointerOES)}};
+    {"glWaitSyncContextANGLE", P(gl::WaitSyncContextANGLE)},
+    {"glWeightPointerOES", P(gl::WeightPointerOES)},
+    {"glWeightPointerOESContextANGLE", P(gl::WeightPointerOESContextANGLE)}};
 
-size_t g_numProcs = 617;
+size_t g_numProcs = 1161;
 }  // namespace egl
--- a/gfx/angle/cherry_picks.txt
+++ b/gfx/angle/cherry_picks.txt
@@ -1,67 +1,44 @@
-commit 595ccab4acc3d818e98a82a3a6bb9849aa1e7cca
+commit fc96a1a98357cfa17510bcf701e99a59ab474ce0
+Author: Jeff Gilbert <jgilbert@mozilla.com>
+Date:   Fri Jun 29 19:06:56 2018 -0700
+
+    More includes missing from sources.
+    
+    Bug: angleproject:2699
+
+commit e30a1e0b967b42a5e17c4335361762ec1153e900
 Author: Jeff Gilbert <jgilbert@mozilla.com>
 Date:   Tue May 29 19:19:54 2018 -0700
 
     Use stringstream with locale override.
     
     Add test for compiling float literals in locales with comma decimal separators.
     
     Handle inexplicable test setlocale failure on Android,Linux. (Require success on other platforms)
     
     Skip setting the locale on Android, which is always C locale in C++, but for some
     reason std::locale::classic isn't implemented as a no-op.
     
     Bug: angleproject:2607
     Test: angle_unittests
     Change-Id: I7c97cb56c01335db46f532fb8af3f9a4f2a30564
 
-commit 2426b097472f19c907b3c734d6186d444f9be9ad
-Author: Jeff Gilbert <jgilbert@mozilla.com>
-Date:   Fri May 18 18:32:16 2018 -0700
-
-    Add `formatType` arg to computeSkipBytes.
-    
-    Fix texture upload format tests:
-    - Format tests should definitely run on ES3 also.
-    - Also set filters to NEAREST since some formats aren't filterable.
-    - Fix RGB9_E5 test reference encoding and add a test for it.
-    - True int/uint textures require i/usamplers.
-    
-    Bug: angleproject:2576
-    Change-Id: Ia5bac34cdee6554a88db339de443689a71a0cf70
-
-commit 1c428b64f565ca0305ef875bc1a7d5643c7fb856
-Author: Jeff Gilbert <jgilbert@mozilla.com>
-Date:   Mon May 7 17:23:57 2018 -0700
-
-    Add headers to build file lists.
-    
-    Bug: angleproject:2535
-    Change-Id: If4d3037e43b403683554a710e89a76befd9b354a
-
 Cherries picked
 ================================================================================
-Merge base from: origin/chromium/3396
+Merge base from: origin/chromium/3440
 
-commit 702006f4a07e4f0069f189679f5c84ebda7c5772
-Author: Jamie Madill <jmadill@chromium.org>
-Date:   Fri May 11 16:54:17 2018 -0400
+commit ba16270867793da817417c722abe3a5d98d50fc0
+Author: Brandon Jones <brandon1.jones@intel.com>
+Date:   Thu May 24 12:47:50 2018 -0700
 
-    D3D11: Fix out-of-range access with robust access.
+    Fix entry point generation on non-Windows
     
-    When using a vertex buffer with DYNAMIC usage, with robust buffer
-    access enabled, we would sometimes read out-of-bounds when using very
-    large values for the index range. An unchecked signed addition would
-    overflow and lead to reading a negative offset.
-    
-    Fix this problem by keeping the value size_t whenever possible. Also do
-    clamped casts when converting to a smaller values.
+    In "Implement EGL_ANGLE_explicit_context", backslashes were introduced in
+    a file path, which broke generation on non-Windows machines. This fixes
+    the issue.
     
-    Also adds a regression test.
-    
-    Also combined with 26b0bfb46: Fix warnings from size_t conversions.
-    
-    Bug: chromium:842028
-    Change-Id: Ie1a8f476f3e97149362eb9855f08450c067ff807
-    Reviewed-on: https://chromium-review.googlesource.com/1064721
-    Reviewed-by: Jamie Madill <jmadill@chromium.org>
+    Bug:angleproject:1395
+    Change-Id: I188c42c2a92afec37d7cb7dac5bffd7e855a0d2b
+    Reviewed-on: https://chromium-review.googlesource.com/1072509
+    Reviewed-by: Geoff Lang <geofflang@chromium.org>
+    Commit-Queue: Geoff Lang <geofflang@chromium.org>
--- a/gfx/angle/targets/angle_common/moz.build
+++ b/gfx/angle/targets/angle_common/moz.build
@@ -9,44 +9,43 @@ DEFINES['ANGLE_ENABLE_DEBUG_ANNOTATIONS'
 #DEFINES['COMPONENT_BUILD'] = True
 DEFINES['DYNAMIC_ANNOTATIONS_ENABLED'] = '1'
 DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FIELDTRIAL_TESTING_ENABLED'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
     '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
--- a/gfx/angle/targets/angle_gpu_info_util/moz.build
+++ b/gfx/angle/targets/angle_gpu_info_util/moz.build
@@ -9,44 +9,43 @@ include('../../moz.build.common')
 DEFINES['DYNAMIC_ANNOTATIONS_ENABLED'] = '1'
 DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FIELDTRIAL_TESTING_ENABLED'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['GPU_INFO_USE_SETUPAPI'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
     '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
--- a/gfx/angle/targets/angle_image_util/moz.build
+++ b/gfx/angle/targets/angle_image_util/moz.build
@@ -8,44 +8,43 @@ include('../../moz.build.common')
 #DEFINES['COMPONENT_BUILD'] = True
 DEFINES['DYNAMIC_ANNOTATIONS_ENABLED'] = '1'
 DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FIELDTRIAL_TESTING_ENABLED'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
     '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
--- a/gfx/angle/targets/libANGLE/moz.build
+++ b/gfx/angle/targets/libANGLE/moz.build
@@ -14,44 +14,43 @@ DEFINES['ANGLE_GENERATE_SHADER_DEBUG_INF
 DEFINES['DYNAMIC_ANNOTATIONS_ENABLED'] = '1'
 DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FIELDTRIAL_TESTING_ENABLED'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['LIBANGLE_IMPLEMENTATION'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
     '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
@@ -123,26 +122,28 @@ SOURCES += [
     '../../checkout/src/libANGLE/Display.cpp',
     '../../checkout/src/libANGLE/Error.cpp',
     '../../checkout/src/libANGLE/es3_copy_conversion_table_autogen.cpp',
     '../../checkout/src/libANGLE/Fence.cpp',
     '../../checkout/src/libANGLE/format_map_autogen.cpp',
     '../../checkout/src/libANGLE/formatutils.cpp',
     '../../checkout/src/libANGLE/Framebuffer.cpp',
     '../../checkout/src/libANGLE/FramebufferAttachment.cpp',
+    '../../checkout/src/libANGLE/GLES1Renderer.cpp',
     '../../checkout/src/libANGLE/GLES1State.cpp',
     '../../checkout/src/libANGLE/HandleAllocator.cpp',
     '../../checkout/src/libANGLE/HandleRangeAllocator.cpp',
     '../../checkout/src/libANGLE/Image.cpp',
     '../../checkout/src/libANGLE/ImageIndex.cpp',
     '../../checkout/src/libANGLE/IndexRangeCache.cpp',
     '../../checkout/src/libANGLE/LoggingAnnotator.cpp',
     '../../checkout/src/libANGLE/MemoryProgramCache.cpp',
     '../../checkout/src/libANGLE/Observer.cpp',
-    '../../checkout/src/libANGLE/PackedGLEnums.cpp',
+    '../../checkout/src/libANGLE/PackedEGLEnums_autogen.cpp',
+    '../../checkout/src/libANGLE/PackedEnums.cpp',
     '../../checkout/src/libANGLE/PackedGLEnums_autogen.cpp',
     '../../checkout/src/libANGLE/params.cpp',
     '../../checkout/src/libANGLE/Path.cpp',
     '../../checkout/src/libANGLE/Platform.cpp',
     '../../checkout/src/libANGLE/Program.cpp',
     '../../checkout/src/libANGLE/ProgramLinkedResources.cpp',
     '../../checkout/src/libANGLE/ProgramPipeline.cpp',
     '../../checkout/src/libANGLE/Query.cpp',
--- a/gfx/angle/targets/libEGL/moz.build
+++ b/gfx/angle/targets/libEGL/moz.build
@@ -11,47 +11,45 @@ DEFINES['DYNAMIC_ANNOTATIONS_ENABLED'] =
 DEFINES['EGLAPI'] = ''
 DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FIELDTRIAL_TESTING_ENABLED'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['LIBEGL_IMPLEMENTATION'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
-    '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
 #    '/D__DATE__=',
 #    '/D__TIME__=',
 #    '/D__TIMESTAMP__=',
@@ -138,17 +136,17 @@ OS_LIBS += [
     'wininet',
     'winmm',
     'winspool',
     'ws2_32',
 ]
 
 #LDFLAGS += [
 #    '/DEBUG',
-#    '/DYNAMICBASE:NO',
+#    '/DYNAMICBASE',
 #    '/fastfail',
 #    '/FIXED:NO',
 #    '/ignore:4199',
 #    '/ignore:4221',
 #    '/INCREMENTAL',
 #    '/MACHINE:X64',
 #    '/NXCOMPAT',
 #    '/SUBSYSTEM:CONSOLE,5.02',
--- a/gfx/angle/targets/libGLESv2/moz.build
+++ b/gfx/angle/targets/libGLESv2/moz.build
@@ -15,44 +15,43 @@ DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_API'] = ''
 DEFINES['GL_APICALL'] = ''
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['LIBANGLE_IMPLEMENTATION'] = True
 DEFINES['LIBGLESV2_IMPLEMENTATION'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
     '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
@@ -108,22 +107,21 @@ LOCAL_INCLUDES += [
 #    '/Zi',
 #]
 
 SOURCES += [
     '../../checkout/src/libGLESv2/entry_points_egl.cpp',
     '../../checkout/src/libGLESv2/entry_points_egl_ext.cpp',
     '../../checkout/src/libGLESv2/entry_points_gles_1_0_autogen.cpp',
     '../../checkout/src/libGLESv2/entry_points_gles_2_0_autogen.cpp',
-    '../../checkout/src/libGLESv2/entry_points_gles_2_0_ext.cpp',
     '../../checkout/src/libGLESv2/entry_points_gles_3_0_autogen.cpp',
     '../../checkout/src/libGLESv2/entry_points_gles_3_1_autogen.cpp',
     '../../checkout/src/libGLESv2/entry_points_gles_ext_autogen.cpp',
     '../../checkout/src/libGLESv2/global_state.cpp',
-    '../../checkout/src/libGLESv2/libGLESv2.cpp',
+    '../../checkout/src/libGLESv2/libGLESv2_autogen.cpp',
     '../../checkout/src/libGLESv2/proc_table_autogen.cpp',
 ]
 
 USE_LIBS += [
     'libANGLE',
 ]
 
 DIRS += [
@@ -156,23 +154,23 @@ OS_LIBS += [
     'wininet',
     'winmm',
     'winspool',
     'ws2_32',
 ]
 
 #LDFLAGS += [
 #    '/DEBUG',
-#    '/DYNAMICBASE:NO',
+#    '/DYNAMICBASE',
 #    '/fastfail',
 #    '/FIXED:NO',
 #    '/ignore:4199',
 #    '/ignore:4221',
 #    '/INCREMENTAL',
 #    '/MACHINE:X64',
 #    '/NXCOMPAT',
 #    '/SUBSYSTEM:CONSOLE,5.02',
 #    '/WX',
 #]
 
-DEFFILE = SRCDIR + '/../../checkout/src/libGLESv2/libGLESv2.def'
+DEFFILE = SRCDIR + '/../../checkout/src/libGLESv2/libGLESv2_autogen.def'
 RCFILE = '../../checkout/src/libGLESv2/libGLESv2.rc'
 GeckoSharedLibrary('libGLESv2', linkage=None)
--- a/gfx/angle/targets/preprocessor/moz.build
+++ b/gfx/angle/targets/preprocessor/moz.build
@@ -8,44 +8,43 @@ include('../../moz.build.common')
 #DEFINES['COMPONENT_BUILD'] = True
 DEFINES['DYNAMIC_ANNOTATIONS_ENABLED'] = '1'
 DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FIELDTRIAL_TESTING_ENABLED'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
     '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
--- a/gfx/angle/targets/translator/moz.build
+++ b/gfx/angle/targets/translator/moz.build
@@ -11,44 +11,43 @@ DEFINES['ANGLE_ENABLE_HLSL'] = True
 #DEFINES['COMPONENT_BUILD'] = True
 DEFINES['DYNAMIC_ANNOTATIONS_ENABLED'] = '1'
 DEFINES['EGL_EGLEXT_PROTOTYPES'] = True
 #DEFINES['FIELDTRIAL_TESTING_ENABLED'] = True
 #DEFINES['FULL_SAFE_BROWSING'] = True
 DEFINES['GL_GLEXT_PROTOTYPES'] = True
 DEFINES['NOMINMAX'] = True
 #DEFINES['NO_TCMALLOC'] = True
-DEFINES['NTDDI_VERSION'] = '0x0A000000'
+DEFINES['NTDDI_VERSION'] = '0x0A000002'
 #DEFINES['PSAPI_VERSION'] = '1'
 #DEFINES['SAFE_BROWSING_CSD'] = True
 #DEFINES['SAFE_BROWSING_DB_LOCAL'] = True
 DEFINES['UNICODE'] = True
 #DEFINES['USE_AURA'] = '1'
 #DEFINES['V8_DEPRECATION_WARNINGS'] = True
 #DEFINES['WIN32'] = True
 #DEFINES['WIN32_LEAN_AND_MEAN'] = True
+#DEFINES['WINAPI_FAMILY'] = 'WINAPI_FAMILY_DESKTOP_APP'
 #DEFINES['WINVER'] = '0x0A00'
 #DEFINES['WTF_USE_DYNAMIC_ANNOTATIONS'] = '1'
 DEFINES['_ATL_NO_OPENGL'] = True
 DEFINES['_CRT_RAND_S'] = True
 DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
 #DEFINES['_DEBUG'] = True
 DEFINES['_HAS_EXCEPTIONS'] = '0'
 DEFINES['_SCL_SECURE_NO_DEPRECATE'] = True
 DEFINES['_SECURE_ATL'] = True
 DEFINES['_UNICODE'] = True
 #DEFINES['_USING_V110_SDK71_'] = True
 #DEFINES['_WIN32_WINNT'] = '0x0A00'
 #DEFINES['_WINDOWS'] = True
 #DEFINES['__STD_C'] = True
 
 LOCAL_INCLUDES += [
-    '../../checkout/',
     '../../checkout/include/',
-    '../../checkout/out/gen/',
     '../../checkout/out/gen/angle/',
     '../../checkout/src/',
     '../../checkout/src/common/third_party/base/',
 ]
 
 #CXXFLAGS += [
 #    '/bigobj',
 #    '/d2FastFail',
@@ -175,16 +174,17 @@ SOURCES += [
     '../../checkout/src/compiler/translator/tree_ops/RemoveArrayLengthMethod.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RemoveDynamicIndexing.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RemoveInvariantDeclaration.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RemovePow.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RemoveSwitchFallThrough.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RemoveUnreferencedVariables.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RewriteDoWhile.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RewriteElseBlocks.cpp',
+    '../../checkout/src/compiler/translator/tree_ops/RewriteRepeatedAssignToSwizzled.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RewriteTexelFetchOffset.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RewriteUnaryMinusOperatorFloat.cpp',
     '../../checkout/src/compiler/translator/tree_ops/RewriteUnaryMinusOperatorInt.cpp',
     '../../checkout/src/compiler/translator/tree_ops/ScalarizeVecAndMatConstructorArgs.cpp',
     '../../checkout/src/compiler/translator/tree_ops/SeparateArrayConstructorStatements.cpp',
     '../../checkout/src/compiler/translator/tree_ops/SeparateArrayInitialization.cpp',
     '../../checkout/src/compiler/translator/tree_ops/SeparateDeclarations.cpp',
     '../../checkout/src/compiler/translator/tree_ops/SeparateExpressionsReturningArrays.cpp',