chromium/third_party/angle/src/libANGLE/Context.cpp

//
// Copyright 2002 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.
//

// Context.cpp: Implements the gl::Context class, managing all GL state and performing
// rendering operations. It is the GLES2 specific implementation of EGLContext.
#include "libANGLE/Context.inl.h"

#include <stdarg.h>
#include <stdio.h>
#include <string.h>

#include <iterator>
#include <sstream>
#include <vector>

#include "common/PackedEnums.h"
#include "common/angle_version_info.h"
#include "common/hash_utils.h"
#include "common/matrix_utils.h"
#include "common/platform.h"
#include "common/string_utils.h"
#include "common/system_utils.h"
#include "common/tls.h"
#include "common/utilities.h"
#include "image_util/loadimage.h"
#include "libANGLE/Buffer.h"
#include "libANGLE/Compiler.h"
#include "libANGLE/Display.h"
#include "libANGLE/Fence.h"
#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/MemoryObject.h"
#include "libANGLE/PixelLocalStorage.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/Semaphore.h"
#include "libANGLE/Surface.h"
#include "libANGLE/Texture.h"
#include "libANGLE/TransformFeedback.h"
#include "libANGLE/VertexArray.h"
#include "libANGLE/capture/FrameCapture.h"
#include "libANGLE/capture/serialize.h"
#include "libANGLE/context_private_call_gles_autogen.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/queryconversions.h"
#include "libANGLE/queryutils.h"
#include "libANGLE/renderer/DisplayImpl.h"
#include "libANGLE/renderer/Format.h"
#include "libANGLE/trace.h"
#include "libANGLE/validationES.h"

#if defined(ANGLE_PLATFORM_APPLE)
#    include <dispatch/dispatch.h>
#    include "common/tls.h"
#endif

namespace gl
{
namespace
{
constexpr state::DirtyObjects kDrawDirtyObjectsBase{};

// TexImage uses the unpack state
constexpr state::DirtyBits kTexImageDirtyBits{};
constexpr state::ExtendedDirtyBits kTexImageExtendedDirtyBits{};
constexpr state::DirtyObjects kTexImageDirtyObjects{};

// Readpixels uses the pack state and read FBO
constexpr state::DirtyBits kReadPixelsDirtyBits{};
constexpr state::ExtendedDirtyBits kReadPixelsExtendedDirtyBits{};
constexpr state::DirtyObjects kReadPixelsDirtyObjectsBase{};

// We sync the draw Framebuffer manually in prepareForClear to allow the clear calls to do
// more custom handling for robust resource init.
constexpr state::DirtyBits kClearDirtyBits{};
constexpr state::ExtendedDirtyBits kClearExtendedDirtyBits{};
constexpr state::DirtyObjects kClearDirtyObjects{};

constexpr state::DirtyBits kBlitDirtyBits{};
constexpr state::ExtendedDirtyBits kBlitExtendedDirtyBits{};
constexpr state::DirtyObjects kBlitDirtyObjectsBase{};

constexpr state::DirtyBits kComputeDirtyBits{};
constexpr state::ExtendedDirtyBits kComputeExtendedDirtyBits{};
constexpr state::DirtyObjects kComputeDirtyObjectsBase{};

constexpr state::DirtyBits kCopyImageDirtyBitsBase{};
constexpr state::ExtendedDirtyBits kCopyImageExtendedDirtyBits{};
constexpr state::DirtyObjects kCopyImageDirtyObjectsBase{};

constexpr state::DirtyBits kReadInvalidateDirtyBits{};
constexpr state::ExtendedDirtyBits kReadInvalidateExtendedDirtyBits{};

constexpr state::DirtyBits kDrawInvalidateDirtyBits{};
constexpr state::ExtendedDirtyBits kDrawInvalidateExtendedDirtyBits{};

// The implementation's internal load/store programs for EXT_shader_pixel_pixel_local_storage
// only need the draw framebuffer to be synced. The remaining state is managed internally.
constexpr state::DirtyBits kPixelLocalStorageEXTEnableDisableDirtyBits{};
constexpr state::ExtendedDirtyBits kPixelLocalStorageEXTEnableDisableExtendedDirtyBits{};
constexpr state::DirtyObjects kPixelLocalStorageEXTEnableDisableDirtyObjects{};

constexpr state::DirtyBits kTilingDirtyBits{};
constexpr state::ExtendedDirtyBits kTilingExtendedDirtyBits{};
constexpr state::DirtyObjects kTilingDirtyObjects{};

egl::ShareGroup *AllocateOrGetShareGroup(egl::Display *display, const gl::Context *shareContext)
{}

egl::ContextMutex *AllocateOrUseContextMutex(egl::ContextMutex *sharedContextMutex)
{}

template <typename T>
angle::Result GetQueryObjectParameter(const Context *context, Query *query, GLenum pname, T *params)
{}

// Attribute map queries.
EGLint GetClientMajorVersion(const egl::AttributeMap &attribs)
{}

EGLint GetClientMinorVersion(const egl::AttributeMap &attribs)
{}

bool GetBackwardCompatibleContext(const egl::AttributeMap &attribs)
{}

bool GetWebGLContext(const egl::AttributeMap &attribs)
{}

Version GetClientVersion(egl::Display *display,
                         const egl::AttributeMap &attribs,
                         const EGLenum clientType)
{}

EGLint GetProfileMask(const egl::AttributeMap &attribs)
{}

GLenum GetResetStrategy(const egl::AttributeMap &attribs)
{}

bool GetRobustAccess(const egl::AttributeMap &attribs)
{}

bool GetDebug(const egl::AttributeMap &attribs)
{}

bool GetNoError(const egl::AttributeMap &attribs)
{}

bool GetExtensionsEnabled(const egl::AttributeMap &attribs, bool webGLContext)
{}

bool GetBindGeneratesResource(const egl::AttributeMap &attribs)
{}

bool GetClientArraysEnabled(const egl::AttributeMap &attribs)
{}

bool GetRobustResourceInit(egl::Display *display, const egl::AttributeMap &attribs)
{}

EGLenum GetContextPriority(const egl::AttributeMap &attribs)
{}

bool GetProtectedContent(const egl::AttributeMap &attribs)
{}

std::string GetObjectLabelFromPointer(GLsizei length, const GLchar *label)
{}

void GetObjectLabelBase(const std::string &objectLabel,
                        GLsizei bufSize,
                        GLsizei *length,
                        GLchar *label)
{}

enum SubjectIndexes : angle::SubjectIndex
{};

bool IsClearBufferEnabled(const FramebufferState &fbState, GLenum buffer, GLint drawbuffer)
{}

bool IsColorMaskedOut(const BlendStateExt &blendStateExt, const GLint drawbuffer)
{}

bool GetIsExternal(const egl::AttributeMap &attribs)
{}

void GetPerfMonitorString(const std::string &name,
                          GLsizei bufSize,
                          GLsizei *length,
                          GLchar *stringOut)
{}

bool CanSupportAEP(const gl::Version &version, const gl::Extensions &extensions)
{}
}  // anonymous namespace

#if defined(ANGLE_PLATFORM_APPLE)
// TODO(angleproject:6479): Due to a bug in Apple's dyld loader, `thread_local` will cause
// excessive memory use. Temporarily avoid it by using pthread's thread
// local storage instead.
static angle::TLSIndex GetCurrentValidContextTLSIndex()
{
    static angle::TLSIndex CurrentValidContextIndex = TLS_INVALID_INDEX;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
      ASSERT(CurrentValidContextIndex == TLS_INVALID_INDEX);
      CurrentValidContextIndex = angle::CreateTLSIndex(nullptr);
    });
    return CurrentValidContextIndex;
}
Context *GetCurrentValidContextTLS()
{
    angle::TLSIndex CurrentValidContextIndex = GetCurrentValidContextTLSIndex();
    ASSERT(CurrentValidContextIndex != TLS_INVALID_INDEX);
    return static_cast<Context *>(angle::GetTLSValue(CurrentValidContextIndex));
}
void SetCurrentValidContextTLS(Context *context)
{
    angle::TLSIndex CurrentValidContextIndex = GetCurrentValidContextTLSIndex();
    ASSERT(CurrentValidContextIndex != TLS_INVALID_INDEX);
    angle::SetTLSValue(CurrentValidContextIndex, context);
}
#elif defined(ANGLE_USE_STATIC_THREAD_LOCAL_VARIABLES)
static thread_local Context *gCurrentValidContext = nullptr;
Context *GetCurrentValidContextTLS()
{
    return gCurrentValidContext;
}
void SetCurrentValidContextTLS(Context *context)
{
    gCurrentValidContext = context;
}
#else
thread_local Context *gCurrentValidContext =;
#endif

// Handle setting the current context in TLS on different platforms
extern void SetCurrentValidContext(Context *context)
{}

Context::Context(egl::Display *display,
                 const egl::Config *config,
                 const Context *shareContext,
                 TextureManager *shareTextures,
                 SemaphoreManager *shareSemaphores,
                 egl::ContextMutex *sharedContextMutex,
                 MemoryProgramCache *memoryProgramCache,
                 MemoryShaderCache *memoryShaderCache,
                 const EGLenum clientType,
                 const egl::AttributeMap &attribs,
                 const egl::DisplayExtensions &displayExtensions,
                 const egl::ClientExtensions &clientExtensions)
    :{}

egl::Error Context::initialize()
{}

void Context::initializeDefaultResources()
{}

egl::Error Context::onDestroy(const egl::Display *display)
{}

void Context::releaseSharedObjects()
{}

Context::~Context() {}

void Context::setLabel(EGLLabelKHR label)
{}

EGLLabelKHR Context::getLabel() const
{}

egl::Error Context::makeCurrent(egl::Display *display,
                                egl::Surface *drawSurface,
                                egl::Surface *readSurface)
{}

egl::Error Context::unMakeCurrent(const egl::Display *display)
{}

BufferID Context::createBuffer()
{}

GLuint Context::createProgram()
{}

GLuint Context::createShader(ShaderType type)
{}

TextureID Context::createTexture()
{}

RenderbufferID Context::createRenderbuffer()
{}

// Returns an unused framebuffer name
FramebufferID Context::createFramebuffer()
{}

void Context::genFencesNV(GLsizei n, FenceNVID *fences)
{}

ProgramPipelineID Context::createProgramPipeline()
{}

GLuint Context::createShaderProgramv(ShaderType type, GLsizei count, const GLchar *const *strings)
{}

MemoryObjectID Context::createMemoryObject()
{}

SemaphoreID Context::createSemaphore()
{}

void Context::deleteBuffer(BufferID bufferName)
{}

void Context::deleteShader(ShaderProgramID shader)
{}

void Context::deleteProgram(ShaderProgramID program)
{}

void Context::deleteTexture(TextureID textureID)
{}

void Context::deleteRenderbuffer(RenderbufferID renderbuffer)
{}

void Context::deleteSync(SyncID syncPacked)
{}

void Context::deleteProgramPipeline(ProgramPipelineID pipelineID)
{}

void Context::deleteMemoryObject(MemoryObjectID memoryObject)
{}

void Context::deleteSemaphore(SemaphoreID semaphore)
{}

// GL_CHROMIUM_lose_context
void Context::loseContext(GraphicsResetStatus current, GraphicsResetStatus other)
{}

void Context::deleteFramebuffer(FramebufferID framebufferID)
{}

void Context::deleteFencesNV(GLsizei n, const FenceNVID *fences)
{}

Buffer *Context::getBuffer(BufferID handle) const
{}

Renderbuffer *Context::getRenderbuffer(RenderbufferID handle) const
{}

EGLenum Context::getContextPriority() const
{}

Sync *Context::getSync(SyncID syncPacked) const
{}

VertexArray *Context::getVertexArray(VertexArrayID handle) const
{}

Sampler *Context::getSampler(SamplerID handle) const
{}

TransformFeedback *Context::getTransformFeedback(TransformFeedbackID handle) const
{}

ProgramPipeline *Context::getProgramPipeline(ProgramPipelineID handle) const
{}

gl::LabeledObject *Context::getLabeledObject(GLenum identifier, GLuint name) const
{}

gl::LabeledObject *Context::getLabeledObjectFromPtr(const void *ptr) const
{}

void Context::objectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar *label)
{}

void Context::labelObject(GLenum type, GLuint object, GLsizei length, const GLchar *label)
{}

void Context::objectPtrLabel(const void *ptr, GLsizei length, const GLchar *label)
{}

void Context::getObjectLabel(GLenum identifier,
                             GLuint name,
                             GLsizei bufSize,
                             GLsizei *length,
                             GLchar *label)
{}

void Context::getObjectPtrLabel(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label)
{}

GLboolean Context::isSampler(SamplerID samplerName) const
{}

void Context::bindTexture(TextureType target, TextureID handle)
{}

void Context::bindReadFramebuffer(FramebufferID framebufferHandle)
{}

void Context::bindDrawFramebuffer(FramebufferID framebufferHandle)
{}

void Context::bindVertexArray(VertexArrayID vertexArrayHandle)
{}

void Context::bindVertexBuffer(GLuint bindingIndex,
                               BufferID bufferHandle,
                               GLintptr offset,
                               GLsizei stride)
{}

void Context::bindSampler(GLuint textureUnit, SamplerID samplerHandle)
{}

void Context::bindImageTexture(GLuint unit,
                               TextureID texture,
                               GLint level,
                               GLboolean layered,
                               GLint layer,
                               GLenum access,
                               GLenum format)
{}

void Context::useProgram(ShaderProgramID program)
{}

void Context::useProgramStages(ProgramPipelineID pipeline,
                               GLbitfield stages,
                               ShaderProgramID program)
{}

void Context::bindTransformFeedback(GLenum target, TransformFeedbackID transformFeedbackHandle)
{}

void Context::bindProgramPipeline(ProgramPipelineID pipelineHandle)
{}

void Context::beginQuery(QueryType target, QueryID query)
{}

void Context::endQuery(QueryType target)
{}

void Context::queryCounter(QueryID id, QueryType target)
{}

void Context::getQueryiv(QueryType target, GLenum pname, GLint *params)
{}

void Context::getQueryivRobust(QueryType target,
                               GLenum pname,
                               GLsizei bufSize,
                               GLsizei *length,
                               GLint *params)
{}

void Context::getUnsignedBytev(GLenum pname, GLubyte *data)
{}

void Context::getUnsignedBytei_v(GLenum target, GLuint index, GLubyte *data)
{}

void Context::getQueryObjectiv(QueryID id, GLenum pname, GLint *params)
{}

void Context::getQueryObjectivRobust(QueryID id,
                                     GLenum pname,
                                     GLsizei bufSize,
                                     GLsizei *length,
                                     GLint *params)
{}

void Context::getQueryObjectuiv(QueryID id, GLenum pname, GLuint *params)
{}

void Context::getQueryObjectuivRobust(QueryID id,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei *length,
                                      GLuint *params)
{}

void Context::getQueryObjecti64v(QueryID id, GLenum pname, GLint64 *params)
{}

void Context::getQueryObjecti64vRobust(QueryID id,
                                       GLenum pname,
                                       GLsizei bufSize,
                                       GLsizei *length,
                                       GLint64 *params)
{}

void Context::getQueryObjectui64v(QueryID id, GLenum pname, GLuint64 *params)
{}

void Context::getQueryObjectui64vRobust(QueryID id,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        GLsizei *length,
                                        GLuint64 *params)
{}

Framebuffer *Context::getFramebuffer(FramebufferID handle) const
{}

FenceNV *Context::getFenceNV(FenceNVID handle) const
{}

Query *Context::getOrCreateQuery(QueryID handle, QueryType type)
{}

Query *Context::getQuery(QueryID handle) const
{}

Texture *Context::getTextureByType(TextureType type) const
{}

Texture *Context::getTextureByTarget(TextureTarget target) const
{}

Texture *Context::getSamplerTexture(unsigned int sampler, TextureType type) const
{}

Compiler *Context::getCompiler() const
{}

void Context::getBooleanvImpl(GLenum pname, GLboolean *params) const
{}

void Context::getFloatvImpl(GLenum pname, GLfloat *params) const
{}

void Context::getIntegervImpl(GLenum pname, GLint *params) const
{}

void Context::getIntegerVertexAttribImpl(GLenum pname, GLenum attribpname, GLint *params) const
{}

void Context::getInteger64vImpl(GLenum pname, GLint64 *params) const
{}

void Context::getPointerv(GLenum pname, void **params)
{}

void Context::getPointervRobustANGLERobust(GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei *length,
                                           void **params)
{}

void Context::getIntegeri_v(GLenum target, GLuint index, GLint *data)
{}

void Context::getIntegeri_vRobust(GLenum target,
                                  GLuint index,
                                  GLsizei bufSize,
                                  GLsizei *length,
                                  GLint *data)
{}

void Context::getInteger64i_v(GLenum target, GLuint index, GLint64 *data)
{}

void Context::getInteger64i_vRobust(GLenum target,
                                    GLuint index,
                                    GLsizei bufSize,
                                    GLsizei *length,
                                    GLint64 *data)
{}

void Context::getBooleani_v(GLenum target, GLuint index, GLboolean *data)
{}

void Context::getBooleani_vRobust(GLenum target,
                                  GLuint index,
                                  GLsizei bufSize,
                                  GLsizei *length,
                                  GLboolean *data)
{}

void Context::getBufferParameteriv(BufferBinding target, GLenum pname, GLint *params)
{}

void Context::getBufferParameterivRobust(BufferBinding target,
                                         GLenum pname,
                                         GLsizei bufSize,
                                         GLsizei *length,
                                         GLint *params)
{}

void Context::getFramebufferAttachmentParameteriv(GLenum target,
                                                  GLenum attachment,
                                                  GLenum pname,
                                                  GLint *params)
{}

void Context::getFramebufferAttachmentParameterivRobust(GLenum target,
                                                        GLenum attachment,
                                                        GLenum pname,
                                                        GLsizei bufSize,
                                                        GLsizei *length,
                                                        GLint *params)
{}

void Context::getRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
{}

void Context::getRenderbufferParameterivRobust(GLenum target,
                                               GLenum pname,
                                               GLsizei bufSize,
                                               GLsizei *length,
                                               GLint *params)
{}

void Context::texBuffer(TextureType target, GLenum internalformat, BufferID buffer)
{}

void Context::texBufferRange(TextureType target,
                             GLenum internalformat,
                             BufferID buffer,
                             GLintptr offset,
                             GLsizeiptr size)
{}

void Context::getTexParameterfv(TextureType target, GLenum pname, GLfloat *params)
{}

void Context::getTexParameterfvRobust(TextureType target,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei *length,
                                      GLfloat *params)
{}

void Context::getTexParameteriv(TextureType target, GLenum pname, GLint *params)
{}

void Context::getTexParameterIiv(TextureType target, GLenum pname, GLint *params)
{}

void Context::getTexParameterIuiv(TextureType target, GLenum pname, GLuint *params)
{}

void Context::getTexParameterivRobust(TextureType target,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei *length,
                                      GLint *params)
{}

void Context::getTexParameterIivRobust(TextureType target,
                                       GLenum pname,
                                       GLsizei bufSize,
                                       GLsizei *length,
                                       GLint *params)
{}

void Context::getTexParameterIuivRobust(TextureType target,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        GLsizei *length,
                                        GLuint *params)
{}

void Context::getTexLevelParameteriv(TextureTarget target, GLint level, GLenum pname, GLint *params)
{}

void Context::getTexLevelParameterivRobust(TextureTarget target,
                                           GLint level,
                                           GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei *length,
                                           GLint *params)
{}

void Context::getTexLevelParameterfv(TextureTarget target,
                                     GLint level,
                                     GLenum pname,
                                     GLfloat *params)
{}

void Context::getTexLevelParameterfvRobust(TextureTarget target,
                                           GLint level,
                                           GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei *length,
                                           GLfloat *params)
{}

void Context::texParameterf(TextureType target, GLenum pname, GLfloat param)
{}

void Context::texParameterfv(TextureType target, GLenum pname, const GLfloat *params)
{}

void Context::texParameterfvRobust(TextureType target,
                                   GLenum pname,
                                   GLsizei bufSize,
                                   const GLfloat *params)
{}

void Context::texParameteri(TextureType target, GLenum pname, GLint param)
{}

void Context::texParameteriv(TextureType target, GLenum pname, const GLint *params)
{}

void Context::texParameterIiv(TextureType target, GLenum pname, const GLint *params)
{}

void Context::texParameterIuiv(TextureType target, GLenum pname, const GLuint *params)
{}

void Context::texParameterivRobust(TextureType target,
                                   GLenum pname,
                                   GLsizei bufSize,
                                   const GLint *params)
{}

void Context::texParameterIivRobust(TextureType target,
                                    GLenum pname,
                                    GLsizei bufSize,
                                    const GLint *params)
{}

void Context::texParameterIuivRobust(TextureType target,
                                     GLenum pname,
                                     GLsizei bufSize,
                                     const GLuint *params)
{}

void Context::drawArraysInstanced(PrimitiveMode mode,
                                  GLint first,
                                  GLsizei count,
                                  GLsizei instanceCount)
{}

void Context::drawElementsInstanced(PrimitiveMode mode,
                                    GLsizei count,
                                    DrawElementsType type,
                                    const void *indices,
                                    GLsizei instances)
{}

void Context::drawElementsBaseVertex(PrimitiveMode mode,
                                     GLsizei count,
                                     DrawElementsType type,
                                     const void *indices,
                                     GLint basevertex)
{}

void Context::drawElementsInstancedBaseVertex(PrimitiveMode mode,
                                              GLsizei count,
                                              DrawElementsType type,
                                              const void *indices,
                                              GLsizei instancecount,
                                              GLint basevertex)
{}

void Context::drawRangeElements(PrimitiveMode mode,
                                GLuint start,
                                GLuint end,
                                GLsizei count,
                                DrawElementsType type,
                                const void *indices)
{}

void Context::drawRangeElementsBaseVertex(PrimitiveMode mode,
                                          GLuint start,
                                          GLuint end,
                                          GLsizei count,
                                          DrawElementsType type,
                                          const void *indices,
                                          GLint basevertex)
{}

void Context::drawArraysIndirect(PrimitiveMode mode, const void *indirect)
{}

void Context::drawElementsIndirect(PrimitiveMode mode, DrawElementsType type, const void *indirect)
{}

void Context::flush()
{}

void Context::finish()
{}

void Context::insertEventMarker(GLsizei length, const char *marker)
{}

void Context::pushGroupMarker(GLsizei length, const char *marker)
{}

void Context::popGroupMarker()
{}

void Context::bindUniformLocation(ShaderProgramID program,
                                  UniformLocation location,
                                  const GLchar *name)
{}

GLuint Context::getProgramResourceIndex(ShaderProgramID program,
                                        GLenum programInterface,
                                        const GLchar *name)
{}

void Context::getProgramResourceName(ShaderProgramID program,
                                     GLenum programInterface,
                                     GLuint index,
                                     GLsizei bufSize,
                                     GLsizei *length,
                                     GLchar *name)
{}

GLint Context::getProgramResourceLocation(ShaderProgramID program,
                                          GLenum programInterface,
                                          const GLchar *name)
{}

void Context::getProgramResourceiv(ShaderProgramID program,
                                   GLenum programInterface,
                                   GLuint index,
                                   GLsizei propCount,
                                   const GLenum *props,
                                   GLsizei bufSize,
                                   GLsizei *length,
                                   GLint *params)
{}

void Context::getProgramInterfaceiv(ShaderProgramID program,
                                    GLenum programInterface,
                                    GLenum pname,
                                    GLint *params)
{}

void Context::getProgramInterfaceivRobust(ShaderProgramID program,
                                          GLenum programInterface,
                                          GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei *length,
                                          GLint *params)
{}

void Context::handleError(GLenum errorCode,
                          const char *message,
                          const char *file,
                          const char *function,
                          unsigned int line)
{}

// Get one of the recorded errors and clear its flag, if any.
// [OpenGL ES 2.0.24] section 2.5 page 13.
GLenum Context::getError()
{}

GLenum Context::getGraphicsResetStatus()
{}

bool Context::isResetNotificationEnabled() const
{}

EGLenum Context::getRenderBuffer() const
{}

VertexArray *Context::checkVertexArrayAllocation(VertexArrayID vertexArrayHandle)
{}

TransformFeedback *Context::checkTransformFeedbackAllocation(
    TransformFeedbackID transformFeedbackHandle)
{}

bool Context::isVertexArrayGenerated(VertexArrayID vertexArray) const
{}

bool Context::isTransformFeedbackGenerated(TransformFeedbackID transformFeedback) const
{}

void Context::detachTexture(TextureID texture)
{}

void Context::detachBuffer(Buffer *buffer)
{}

void Context::detachFramebuffer(FramebufferID framebuffer)
{}

void Context::detachRenderbuffer(RenderbufferID renderbuffer)
{}

void Context::detachVertexArray(VertexArrayID vertexArray)
{}

void Context::detachTransformFeedback(TransformFeedbackID transformFeedback)
{}

void Context::detachSampler(SamplerID sampler)
{}

void Context::detachProgramPipeline(ProgramPipelineID pipeline)
{}

void Context::vertexAttribDivisor(GLuint index, GLuint divisor)
{}

void Context::samplerParameteri(SamplerID sampler, GLenum pname, GLint param)
{}

void Context::samplerParameteriv(SamplerID sampler, GLenum pname, const GLint *param)
{}

void Context::samplerParameterIiv(SamplerID sampler, GLenum pname, const GLint *param)
{}

void Context::samplerParameterIuiv(SamplerID sampler, GLenum pname, const GLuint *param)
{}

void Context::samplerParameterivRobust(SamplerID sampler,
                                       GLenum pname,
                                       GLsizei bufSize,
                                       const GLint *param)
{}

void Context::samplerParameterIivRobust(SamplerID sampler,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        const GLint *param)
{}

void Context::samplerParameterIuivRobust(SamplerID sampler,
                                         GLenum pname,
                                         GLsizei bufSize,
                                         const GLuint *param)
{}

void Context::samplerParameterf(SamplerID sampler, GLenum pname, GLfloat param)
{}

void Context::samplerParameterfv(SamplerID sampler, GLenum pname, const GLfloat *param)
{}

void Context::samplerParameterfvRobust(SamplerID sampler,
                                       GLenum pname,
                                       GLsizei bufSize,
                                       const GLfloat *param)
{}

void Context::getSamplerParameteriv(SamplerID sampler, GLenum pname, GLint *params)
{}

void Context::getSamplerParameterIiv(SamplerID sampler, GLenum pname, GLint *params)
{}

void Context::getSamplerParameterIuiv(SamplerID sampler, GLenum pname, GLuint *params)
{}

void Context::getSamplerParameterivRobust(SamplerID sampler,
                                          GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei *length,
                                          GLint *params)
{}

void Context::getSamplerParameterIivRobust(SamplerID sampler,
                                           GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei *length,
                                           GLint *params)
{}

void Context::getSamplerParameterIuivRobust(SamplerID sampler,
                                            GLenum pname,
                                            GLsizei bufSize,
                                            GLsizei *length,
                                            GLuint *params)
{}

void Context::getSamplerParameterfv(SamplerID sampler, GLenum pname, GLfloat *params)
{}

void Context::getSamplerParameterfvRobust(SamplerID sampler,
                                          GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei *length,
                                          GLfloat *params)
{}

void Context::programParameteri(ShaderProgramID program, GLenum pname, GLint value)
{}

void Context::initRendererString()
{}

void Context::initVersionStrings()
{}

void Context::initExtensionStrings()
{}

const GLubyte *Context::getString(GLenum name)
{}

const GLubyte *Context::getStringi(GLenum name, GLuint index)
{}

const GLubyte *Context::getString(GLenum name) const
{}

const GLubyte *Context::getStringi(GLenum name, GLuint index) const
{}

size_t Context::getExtensionStringCount() const
{}

bool Context::isExtensionRequestable(const char *name) const
{}

bool Context::isExtensionDisablable(const char *name) const
{}

void Context::requestExtension(const char *name)
{}
void Context::disableExtension(const char *name)
{}

void Context::setExtensionEnabled(const char *name, bool enabled)
{}

void Context::reinitializeAfterExtensionsChanged()
{}

size_t Context::getRequestableExtensionStringCount() const
{}

void Context::beginTransformFeedback(PrimitiveMode primitiveMode)
{}

bool Context::hasActiveTransformFeedback(ShaderProgramID program) const
{}

Extensions Context::generateSupportedExtensions() const
{}

void Context::initCaps()
{}

void Context::updateCaps()
{}

bool Context::noopDrawInstanced(PrimitiveMode mode, GLsizei count, GLsizei instanceCount) const
{}

angle::Result Context::prepareForClear(GLbitfield mask)
{}

angle::Result Context::prepareForClearBuffer(GLenum buffer, GLint drawbuffer)
{}

ANGLE_INLINE angle::Result Context::prepareForCopyImage()
{}

ANGLE_INLINE angle::Result Context::prepareForDispatch()
{}

angle::Result Context::prepareForInvalidate(GLenum target)
{}

angle::Result Context::syncState(const state::DirtyBits bitMask,
                                 const state::ExtendedDirtyBits extendedBitMask,
                                 const state::DirtyObjects &objectMask,
                                 Command command)
{}

void Context::blitFramebuffer(GLint srcX0,
                              GLint srcY0,
                              GLint srcX1,
                              GLint srcY1,
                              GLint dstX0,
                              GLint dstY0,
                              GLint dstX1,
                              GLint dstY1,
                              GLbitfield mask,
                              GLenum filter)
{}

void Context::blitFramebufferNV(GLint srcX0,
                                GLint srcY0,
                                GLint srcX1,
                                GLint srcY1,
                                GLint dstX0,
                                GLint dstY0,
                                GLint dstX1,
                                GLint dstY1,
                                GLbitfield mask,
                                GLenum filter)
{}

void Context::clear(GLbitfield mask)
{}

bool Context::isClearBufferMaskedOut(GLenum buffer, GLint drawbuffer) const
{}

bool Context::noopClearBuffer(GLenum buffer, GLint drawbuffer) const
{}

void Context::clearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *values)
{}

void Context::clearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *values)
{}

void Context::clearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *values)
{}

void Context::clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
{}

void Context::readPixels(GLint x,
                         GLint y,
                         GLsizei width,
                         GLsizei height,
                         GLenum format,
                         GLenum type,
                         void *pixels)
{}

void Context::readPixelsRobust(GLint x,
                               GLint y,
                               GLsizei width,
                               GLsizei height,
                               GLenum format,
                               GLenum type,
                               GLsizei bufSize,
                               GLsizei *length,
                               GLsizei *columns,
                               GLsizei *rows,
                               void *pixels)
{}

void Context::readnPixelsRobust(GLint x,
                                GLint y,
                                GLsizei width,
                                GLsizei height,
                                GLenum format,
                                GLenum type,
                                GLsizei bufSize,
                                GLsizei *length,
                                GLsizei *columns,
                                GLsizei *rows,
                                void *data)
{}

void Context::copyTexImage2D(TextureTarget target,
                             GLint level,
                             GLenum internalformat,
                             GLint x,
                             GLint y,
                             GLsizei width,
                             GLsizei height,
                             GLint border)
{}

void Context::copyTexSubImage2D(TextureTarget target,
                                GLint level,
                                GLint xoffset,
                                GLint yoffset,
                                GLint x,
                                GLint y,
                                GLsizei width,
                                GLsizei height)
{}

void Context::copyTexSubImage3D(TextureTarget target,
                                GLint level,
                                GLint xoffset,
                                GLint yoffset,
                                GLint zoffset,
                                GLint x,
                                GLint y,
                                GLsizei width,
                                GLsizei height)
{}

void Context::copyImageSubData(GLuint srcName,
                               GLenum srcTarget,
                               GLint srcLevel,
                               GLint srcX,
                               GLint srcY,
                               GLint srcZ,
                               GLuint dstName,
                               GLenum dstTarget,
                               GLint dstLevel,
                               GLint dstX,
                               GLint dstY,
                               GLint dstZ,
                               GLsizei srcWidth,
                               GLsizei srcHeight,
                               GLsizei srcDepth)
{}

void Context::framebufferTexture2D(GLenum target,
                                   GLenum attachment,
                                   TextureTarget textarget,
                                   TextureID texture,
                                   GLint level)
{}

void Context::framebufferTexture3D(GLenum target,
                                   GLenum attachment,
                                   TextureTarget textargetPacked,
                                   TextureID texture,
                                   GLint level,
                                   GLint zoffset)
{}

void Context::framebufferRenderbuffer(GLenum target,
                                      GLenum attachment,
                                      GLenum renderbuffertarget,
                                      RenderbufferID renderbuffer)
{}

void Context::framebufferTextureLayer(GLenum target,
                                      GLenum attachment,
                                      TextureID texture,
                                      GLint level,
                                      GLint layer)
{}

void Context::framebufferTextureMultiview(GLenum target,
                                          GLenum attachment,
                                          TextureID texture,
                                          GLint level,
                                          GLint baseViewIndex,
                                          GLsizei numViews)
{}

void Context::framebufferTexture(GLenum target, GLenum attachment, TextureID texture, GLint level)
{}

void Context::drawBuffers(GLsizei n, const GLenum *bufs)
{}

void Context::readBuffer(GLenum mode)
{}

void Context::discardFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)
{}

void Context::invalidateFramebuffer(GLenum target,
                                    GLsizei numAttachments,
                                    const GLenum *attachments)
{}

void Context::invalidateSubFramebuffer(GLenum target,
                                       GLsizei numAttachments,
                                       const GLenum *attachments,
                                       GLint x,
                                       GLint y,
                                       GLsizei width,
                                       GLsizei height)
{}

void Context::texImage2D(TextureTarget target,
                         GLint level,
                         GLint internalformat,
                         GLsizei width,
                         GLsizei height,
                         GLint border,
                         GLenum format,
                         GLenum type,
                         const void *pixels)
{}

void Context::texImage2DRobust(TextureTarget target,
                               GLint level,
                               GLint internalformat,
                               GLsizei width,
                               GLsizei height,
                               GLint border,
                               GLenum format,
                               GLenum type,
                               GLsizei bufSize,
                               const void *pixels)
{}

void Context::texImage3D(TextureTarget target,
                         GLint level,
                         GLint internalformat,
                         GLsizei width,
                         GLsizei height,
                         GLsizei depth,
                         GLint border,
                         GLenum format,
                         GLenum type,
                         const void *pixels)
{}

void Context::texImage3DRobust(TextureTarget target,
                               GLint level,
                               GLint internalformat,
                               GLsizei width,
                               GLsizei height,
                               GLsizei depth,
                               GLint border,
                               GLenum format,
                               GLenum type,
                               GLsizei bufSize,
                               const void *pixels)
{}

void Context::texSubImage2D(TextureTarget target,
                            GLint level,
                            GLint xoffset,
                            GLint yoffset,
                            GLsizei width,
                            GLsizei height,
                            GLenum format,
                            GLenum type,
                            const void *pixels)
{}

void Context::texSubImage2DRobust(TextureTarget target,
                                  GLint level,
                                  GLint xoffset,
                                  GLint yoffset,
                                  GLsizei width,
                                  GLsizei height,
                                  GLenum format,
                                  GLenum type,
                                  GLsizei bufSize,
                                  const void *pixels)
{}

void Context::texSubImage3D(TextureTarget target,
                            GLint level,
                            GLint xoffset,
                            GLint yoffset,
                            GLint zoffset,
                            GLsizei width,
                            GLsizei height,
                            GLsizei depth,
                            GLenum format,
                            GLenum type,
                            const void *pixels)
{}

void Context::texSubImage3DRobust(TextureTarget target,
                                  GLint level,
                                  GLint xoffset,
                                  GLint yoffset,
                                  GLint zoffset,
                                  GLsizei width,
                                  GLsizei height,
                                  GLsizei depth,
                                  GLenum format,
                                  GLenum type,
                                  GLsizei bufSize,
                                  const void *pixels)
{}

void Context::compressedTexImage2D(TextureTarget target,
                                   GLint level,
                                   GLenum internalformat,
                                   GLsizei width,
                                   GLsizei height,
                                   GLint border,
                                   GLsizei imageSize,
                                   const void *data)
{}

void Context::compressedTexImage2DRobust(TextureTarget target,
                                         GLint level,
                                         GLenum internalformat,
                                         GLsizei width,
                                         GLsizei height,
                                         GLint border,
                                         GLsizei imageSize,
                                         GLsizei dataSize,
                                         const GLvoid *data)
{}

void Context::compressedTexImage3D(TextureTarget target,
                                   GLint level,
                                   GLenum internalformat,
                                   GLsizei width,
                                   GLsizei height,
                                   GLsizei depth,
                                   GLint border,
                                   GLsizei imageSize,
                                   const void *data)
{}

void Context::compressedTexImage3DRobust(TextureTarget target,
                                         GLint level,
                                         GLenum internalformat,
                                         GLsizei width,
                                         GLsizei height,
                                         GLsizei depth,
                                         GLint border,
                                         GLsizei imageSize,
                                         GLsizei dataSize,
                                         const GLvoid *data)
{}

void Context::compressedTexSubImage2D(TextureTarget target,
                                      GLint level,
                                      GLint xoffset,
                                      GLint yoffset,
                                      GLsizei width,
                                      GLsizei height,
                                      GLenum format,
                                      GLsizei imageSize,
                                      const void *data)
{}

void Context::compressedTexSubImage2DRobust(TextureTarget target,
                                            GLint level,
                                            GLint xoffset,
                                            GLint yoffset,
                                            GLsizei width,
                                            GLsizei height,
                                            GLenum format,
                                            GLsizei imageSize,
                                            GLsizei dataSize,
                                            const GLvoid *data)
{}

void Context::compressedTexSubImage3D(TextureTarget target,
                                      GLint level,
                                      GLint xoffset,
                                      GLint yoffset,
                                      GLint zoffset,
                                      GLsizei width,
                                      GLsizei height,
                                      GLsizei depth,
                                      GLenum format,
                                      GLsizei imageSize,
                                      const void *data)
{}

void Context::compressedTexSubImage3DRobust(TextureTarget target,
                                            GLint level,
                                            GLint xoffset,
                                            GLint yoffset,
                                            GLint zoffset,
                                            GLsizei width,
                                            GLsizei height,
                                            GLsizei depth,
                                            GLenum format,
                                            GLsizei imageSize,
                                            GLsizei dataSize,
                                            const GLvoid *data)
{}

void Context::generateMipmap(TextureType target)
{}

void Context::copyTexture(TextureID sourceId,
                          GLint sourceLevel,
                          TextureTarget destTarget,
                          TextureID destId,
                          GLint destLevel,
                          GLint internalFormat,
                          GLenum destType,
                          GLboolean unpackFlipY,
                          GLboolean unpackPremultiplyAlpha,
                          GLboolean unpackUnmultiplyAlpha)
{}

void Context::copySubTexture(TextureID sourceId,
                             GLint sourceLevel,
                             TextureTarget destTarget,
                             TextureID destId,
                             GLint destLevel,
                             GLint xoffset,
                             GLint yoffset,
                             GLint x,
                             GLint y,
                             GLsizei width,
                             GLsizei height,
                             GLboolean unpackFlipY,
                             GLboolean unpackPremultiplyAlpha,
                             GLboolean unpackUnmultiplyAlpha)
{}

void Context::copyTexture3D(TextureID sourceId,
                            GLint sourceLevel,
                            TextureTarget destTarget,
                            TextureID destId,
                            GLint destLevel,
                            GLint internalFormat,
                            GLenum destType,
                            GLboolean unpackFlipY,
                            GLboolean unpackPremultiplyAlpha,
                            GLboolean unpackUnmultiplyAlpha)
{}

void Context::copySubTexture3D(TextureID sourceId,
                               GLint sourceLevel,
                               TextureTarget destTarget,
                               TextureID destId,
                               GLint destLevel,
                               GLint xoffset,
                               GLint yoffset,
                               GLint zoffset,
                               GLint x,
                               GLint y,
                               GLint z,
                               GLsizei width,
                               GLsizei height,
                               GLsizei depth,
                               GLboolean unpackFlipY,
                               GLboolean unpackPremultiplyAlpha,
                               GLboolean unpackUnmultiplyAlpha)
{}

void Context::compressedCopyTexture(TextureID sourceId, TextureID destId)
{}

void Context::getBufferPointerv(BufferBinding target, GLenum pname, void **params)
{}

void Context::getBufferPointervRobust(BufferBinding target,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei *length,
                                      void **params)
{}

void *Context::mapBuffer(BufferBinding target, GLenum access)
{}

GLboolean Context::unmapBuffer(BufferBinding target)
{}

void *Context::mapBufferRange(BufferBinding target,
                              GLintptr offset,
                              GLsizeiptr length,
                              GLbitfield access)
{}

void Context::flushMappedBufferRange(BufferBinding /*target*/,
                                     GLintptr /*offset*/,
                                     GLsizeiptr /*length*/)
{}

angle::Result Context::syncStateForReadPixels()
{}

angle::Result Context::syncStateForTexImage()
{}

angle::Result Context::syncStateForBlit(GLbitfield mask)
{}

angle::Result Context::syncStateForClear()
{}

angle::Result Context::syncTextureForCopy(Texture *texture)
{}

void Context::activeShaderProgram(ProgramPipelineID pipeline, ShaderProgramID program)
{}

void Context::blendBarrier()
{}

void Context::disableVertexAttribArray(GLuint index)
{}

void Context::enableVertexAttribArray(GLuint index)
{}

void Context::vertexAttribPointer(GLuint index,
                                  GLint size,
                                  VertexAttribType type,
                                  GLboolean normalized,
                                  GLsizei stride,
                                  const void *ptr)
{}

void Context::vertexAttribFormat(GLuint attribIndex,
                                 GLint size,
                                 VertexAttribType type,
                                 GLboolean normalized,
                                 GLuint relativeOffset)
{}

void Context::vertexAttribIFormat(GLuint attribIndex,
                                  GLint size,
                                  VertexAttribType type,
                                  GLuint relativeOffset)
{}

void Context::vertexAttribBinding(GLuint attribIndex, GLuint bindingIndex)
{}

void Context::vertexBindingDivisor(GLuint bindingIndex, GLuint divisor)
{}

void Context::vertexAttribIPointer(GLuint index,
                                   GLint size,
                                   VertexAttribType type,
                                   GLsizei stride,
                                   const void *pointer)
{}

void Context::getVertexAttribivImpl(GLuint index, GLenum pname, GLint *params) const
{}

void Context::getVertexAttribiv(GLuint index, GLenum pname, GLint *params)
{}

void Context::getVertexAttribivRobust(GLuint index,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei *length,
                                      GLint *params)
{}

void Context::getVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
{}

void Context::getVertexAttribfvRobust(GLuint index,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei *length,
                                      GLfloat *params)
{}

void Context::getVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
{}

void Context::getVertexAttribIivRobust(GLuint index,
                                       GLenum pname,
                                       GLsizei bufSize,
                                       GLsizei *length,
                                       GLint *params)
{}

void Context::getVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
{}

void Context::getVertexAttribIuivRobust(GLuint index,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        GLsizei *length,
                                        GLuint *params)
{}

void Context::getVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)
{}

void Context::getVertexAttribPointervRobust(GLuint index,
                                            GLenum pname,
                                            GLsizei bufSize,
                                            GLsizei *length,
                                            void **pointer)
{}

void Context::debugMessageControl(GLenum source,
                                  GLenum type,
                                  GLenum severity,
                                  GLsizei count,
                                  const GLuint *ids,
                                  GLboolean enabled)
{}

void Context::debugMessageInsert(GLenum source,
                                 GLenum type,
                                 GLuint id,
                                 GLenum severity,
                                 GLsizei length,
                                 const GLchar *buf)
{}

void Context::debugMessageCallback(GLDEBUGPROCKHR callback, const void *userParam)
{}

GLuint Context::getDebugMessageLog(GLuint count,
                                   GLsizei bufSize,
                                   GLenum *sources,
                                   GLenum *types,
                                   GLuint *ids,
                                   GLenum *severities,
                                   GLsizei *lengths,
                                   GLchar *messageLog)
{}

void Context::pushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message)
{}

angle::Result Context::handleNoopDrawEvent()
{}

void Context::popDebugGroup()
{}

void Context::bufferStorage(BufferBinding target,
                            GLsizeiptr size,
                            const void *data,
                            GLbitfield flags)
{}

void Context::bufferStorageExternal(BufferBinding target,
                                    GLintptr offset,
                                    GLsizeiptr size,
                                    GLeglClientBufferEXT clientBuffer,
                                    GLbitfield flags)
{}

void Context::namedBufferStorageExternal(GLuint buffer,
                                         GLintptr offset,
                                         GLsizeiptr size,
                                         GLeglClientBufferEXT clientBuffer,
                                         GLbitfield flags)
{}

void Context::bufferData(BufferBinding target, GLsizeiptr size, const void *data, BufferUsage usage)
{}

void Context::bufferSubData(BufferBinding target,
                            GLintptr offset,
                            GLsizeiptr size,
                            const void *data)
{}

void Context::attachShader(ShaderProgramID program, ShaderProgramID shader)
{}

void Context::copyBufferSubData(BufferBinding readTarget,
                                BufferBinding writeTarget,
                                GLintptr readOffset,
                                GLintptr writeOffset,
                                GLsizeiptr size)
{}

void Context::bindAttribLocation(ShaderProgramID program, GLuint index, const GLchar *name)
{}

void Context::bindBufferBase(BufferBinding target, GLuint index, BufferID buffer)
{}

void Context::bindBufferRange(BufferBinding target,
                              GLuint index,
                              BufferID buffer,
                              GLintptr offset,
                              GLsizeiptr size)
{}

void Context::bindFramebuffer(GLenum target, FramebufferID framebuffer)
{}

void Context::bindRenderbuffer(GLenum target, RenderbufferID renderbuffer)
{}

void Context::texStorage2DMultisample(TextureType target,
                                      GLsizei samples,
                                      GLenum internalformat,
                                      GLsizei width,
                                      GLsizei height,
                                      GLboolean fixedsamplelocations)
{}

void Context::texStorage3DMultisample(TextureType target,
                                      GLsizei samples,
                                      GLenum internalformat,
                                      GLsizei width,
                                      GLsizei height,
                                      GLsizei depth,
                                      GLboolean fixedsamplelocations)
{}

void Context::texImage2DExternal(TextureTarget target,
                                 GLint level,
                                 GLint internalformat,
                                 GLsizei width,
                                 GLsizei height,
                                 GLint border,
                                 GLenum format,
                                 GLenum type)
{}

void Context::invalidateTexture(TextureType target)
{}

void Context::getMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
{}

void Context::getMultisamplefvRobust(GLenum pname,
                                     GLuint index,
                                     GLsizei bufSize,
                                     GLsizei *length,
                                     GLfloat *val)
{}

void Context::renderbufferStorage(GLenum target,
                                  GLenum internalformat,
                                  GLsizei width,
                                  GLsizei height)
{}

void Context::renderbufferStorageMultisample(GLenum target,
                                             GLsizei samples,
                                             GLenum internalformat,
                                             GLsizei width,
                                             GLsizei height)
{}

void Context::renderbufferStorageMultisampleEXT(GLenum target,
                                                GLsizei samples,
                                                GLenum internalformat,
                                                GLsizei width,
                                                GLsizei height)
{}

void Context::renderbufferStorageMultisampleImpl(GLenum target,
                                                 GLsizei samples,
                                                 GLenum internalformat,
                                                 GLsizei width,
                                                 GLsizei height,
                                                 MultisamplingMode mode)
{}

void Context::framebufferTexture2DMultisample(GLenum target,
                                              GLenum attachment,
                                              TextureTarget textarget,
                                              TextureID texture,
                                              GLint level,
                                              GLsizei samples)
{}

void Context::getSynciv(SyncID syncPacked,
                        GLenum pname,
                        GLsizei bufSize,
                        GLsizei *length,
                        GLint *values)
{}

void Context::getFramebufferParameteriv(GLenum target, GLenum pname, GLint *params)
{}

void Context::getFramebufferParameterivRobust(GLenum target,
                                              GLenum pname,
                                              GLsizei bufSize,
                                              GLsizei *length,
                                              GLint *params)
{}

void Context::framebufferParameteri(GLenum target, GLenum pname, GLint param)
{}

bool Context::getScratchBuffer(size_t requstedSizeBytes,
                               angle::MemoryBuffer **scratchBufferOut) const
{}

angle::ScratchBuffer *Context::getScratchBuffer() const
{}

bool Context::getZeroFilledBuffer(size_t requstedSizeBytes,
                                  angle::MemoryBuffer **zeroBufferOut) const
{}

void Context::dispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ)
{}

void Context::dispatchComputeIndirect(GLintptr indirect)
{}

void Context::texStorage2D(TextureType target,
                           GLsizei levels,
                           GLenum internalFormat,
                           GLsizei width,
                           GLsizei height)
{}

void Context::texStorage3D(TextureType target,
                           GLsizei levels,
                           GLenum internalFormat,
                           GLsizei width,
                           GLsizei height,
                           GLsizei depth)
{}

void Context::memoryBarrier(GLbitfield barriers)
{}

void Context::memoryBarrierByRegion(GLbitfield barriers)
{}

void Context::multiDrawArrays(PrimitiveMode mode,
                              const GLint *firsts,
                              const GLsizei *counts,
                              GLsizei drawcount)
{}

void Context::multiDrawArraysInstanced(PrimitiveMode mode,
                                       const GLint *firsts,
                                       const GLsizei *counts,
                                       const GLsizei *instanceCounts,
                                       GLsizei drawcount)
{}

void Context::multiDrawArraysIndirect(PrimitiveMode mode,
                                      const void *indirect,
                                      GLsizei drawcount,
                                      GLsizei stride)
{}

void Context::multiDrawElements(PrimitiveMode mode,
                                const GLsizei *counts,
                                DrawElementsType type,
                                const GLvoid *const *indices,
                                GLsizei drawcount)
{}

void Context::multiDrawElementsInstanced(PrimitiveMode mode,
                                         const GLsizei *counts,
                                         DrawElementsType type,
                                         const GLvoid *const *indices,
                                         const GLsizei *instanceCounts,
                                         GLsizei drawcount)
{}

void Context::multiDrawElementsIndirect(PrimitiveMode mode,
                                        DrawElementsType type,
                                        const void *indirect,
                                        GLsizei drawcount,
                                        GLsizei stride)
{}

void Context::drawArraysInstancedBaseInstance(PrimitiveMode mode,
                                              GLint first,
                                              GLsizei count,
                                              GLsizei instanceCount,
                                              GLuint baseInstance)
{}

void Context::drawArraysInstancedBaseInstanceANGLE(PrimitiveMode mode,
                                                   GLint first,
                                                   GLsizei count,
                                                   GLsizei instanceCount,
                                                   GLuint baseInstance)
{}

void Context::drawElementsInstancedBaseInstance(PrimitiveMode mode,
                                                GLsizei count,
                                                DrawElementsType type,
                                                const void *indices,
                                                GLsizei instanceCount,
                                                GLuint baseInstance)
{}

void Context::drawElementsInstancedBaseVertexBaseInstance(PrimitiveMode mode,
                                                          GLsizei count,
                                                          DrawElementsType type,
                                                          const GLvoid *indices,
                                                          GLsizei instanceCount,
                                                          GLint baseVertex,
                                                          GLuint baseInstance)
{}

void Context::drawElementsInstancedBaseVertexBaseInstanceANGLE(PrimitiveMode mode,
                                                               GLsizei count,
                                                               DrawElementsType type,
                                                               const GLvoid *indices,
                                                               GLsizei instanceCount,
                                                               GLint baseVertex,
                                                               GLuint baseInstance)
{}

void Context::multiDrawArraysInstancedBaseInstance(PrimitiveMode mode,
                                                   const GLint *firsts,
                                                   const GLsizei *counts,
                                                   const GLsizei *instanceCounts,
                                                   const GLuint *baseInstances,
                                                   GLsizei drawcount)
{}

void Context::multiDrawElementsBaseVertex(PrimitiveMode mode,
                                          const GLsizei *count,
                                          DrawElementsType type,
                                          const void *const *indices,
                                          GLsizei drawcount,
                                          const GLint *basevertex)
{}

void Context::multiDrawElementsInstancedBaseVertexBaseInstance(PrimitiveMode mode,
                                                               const GLsizei *counts,
                                                               DrawElementsType type,
                                                               const GLvoid *const *indices,
                                                               const GLsizei *instanceCounts,
                                                               const GLint *baseVertices,
                                                               const GLuint *baseInstances,
                                                               GLsizei drawcount)
{}

GLenum Context::checkFramebufferStatus(GLenum target)
{}

void Context::compileShader(ShaderProgramID shader)
{}

void Context::deleteBuffers(GLsizei n, const BufferID *buffers)
{}

void Context::deleteFramebuffers(GLsizei n, const FramebufferID *framebuffers)
{}

void Context::deleteRenderbuffers(GLsizei n, const RenderbufferID *renderbuffers)
{}

void Context::deleteTextures(GLsizei n, const TextureID *textures)
{}

void Context::detachShader(ShaderProgramID program, ShaderProgramID shader)
{}

void Context::genBuffers(GLsizei n, BufferID *buffers)
{}

void Context::genFramebuffers(GLsizei n, FramebufferID *framebuffers)
{}

void Context::genRenderbuffers(GLsizei n, RenderbufferID *renderbuffers)
{}

void Context::genTextures(GLsizei n, TextureID *textures)
{}

void Context::getActiveAttrib(ShaderProgramID program,
                              GLuint index,
                              GLsizei bufsize,
                              GLsizei *length,
                              GLint *size,
                              GLenum *type,
                              GLchar *name)
{}

void Context::getActiveUniform(ShaderProgramID program,
                               GLuint index,
                               GLsizei bufsize,
                               GLsizei *length,
                               GLint *size,
                               GLenum *type,
                               GLchar *name)
{}

void Context::getAttachedShaders(ShaderProgramID program,
                                 GLsizei maxcount,
                                 GLsizei *count,
                                 ShaderProgramID *shaders)
{}

GLint Context::getAttribLocation(ShaderProgramID program, const GLchar *name)
{}

void Context::getBooleanv(GLenum pname, GLboolean *params)
{}

void Context::getBooleanvRobust(GLenum pname, GLsizei bufSize, GLsizei *length, GLboolean *params)
{}

void Context::getFloatv(GLenum pname, GLfloat *params)
{}

void Context::getFloatvRobust(GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params)
{}

void Context::getIntegerv(GLenum pname, GLint *params)
{}

void Context::getIntegervRobust(GLenum pname, GLsizei bufSize, GLsizei *length, GLint *data)
{}

void Context::getProgramiv(ShaderProgramID program, GLenum pname, GLint *params)
{}

void Context::getProgramivRobust(ShaderProgramID program,
                                 GLenum pname,
                                 GLsizei bufSize,
                                 GLsizei *length,
                                 GLint *params)
{}

void Context::getProgramPipelineiv(ProgramPipelineID pipeline, GLenum pname, GLint *params)
{}

MemoryObject *Context::getMemoryObject(MemoryObjectID handle) const
{}

Semaphore *Context::getSemaphore(SemaphoreID handle) const
{}

void Context::getProgramInfoLog(ShaderProgramID program,
                                GLsizei bufsize,
                                GLsizei *length,
                                GLchar *infolog)
{}

void Context::getProgramPipelineInfoLog(ProgramPipelineID pipeline,
                                        GLsizei bufSize,
                                        GLsizei *length,
                                        GLchar *infoLog)
{}

void Context::getShaderiv(ShaderProgramID shader, GLenum pname, GLint *params)
{}

void Context::getShaderivRobust(ShaderProgramID shader,
                                GLenum pname,
                                GLsizei bufSize,
                                GLsizei *length,
                                GLint *params)
{}

void Context::getShaderInfoLog(ShaderProgramID shader,
                               GLsizei bufsize,
                               GLsizei *length,
                               GLchar *infolog)
{}

void Context::getShaderPrecisionFormat(GLenum shadertype,
                                       GLenum precisiontype,
                                       GLint *range,
                                       GLint *precision)
{}

void Context::getShaderSource(ShaderProgramID shader,
                              GLsizei bufsize,
                              GLsizei *length,
                              GLchar *source)
{}

void Context::getUniformfv(ShaderProgramID program, UniformLocation location, GLfloat *params)
{}

void Context::getUniformfvRobust(ShaderProgramID program,
                                 UniformLocation location,
                                 GLsizei bufSize,
                                 GLsizei *length,
                                 GLfloat *params)
{}

void Context::getUniformiv(ShaderProgramID program, UniformLocation location, GLint *params)
{}

void Context::getUniformivRobust(ShaderProgramID program,
                                 UniformLocation location,
                                 GLsizei bufSize,
                                 GLsizei *length,
                                 GLint *params)
{}

GLint Context::getUniformLocation(ShaderProgramID program, const GLchar *name)
{}

GLboolean Context::isBuffer(BufferID buffer) const
{}

GLboolean Context::isFramebuffer(FramebufferID framebuffer) const
{}

GLboolean Context::isProgram(ShaderProgramID program) const
{}

GLboolean Context::isRenderbuffer(RenderbufferID renderbuffer) const
{}

GLboolean Context::isShader(ShaderProgramID shader) const
{}

GLboolean Context::isTexture(TextureID texture) const
{}

void Context::linkProgram(ShaderProgramID program)
{}

void Context::releaseShaderCompiler()
{}

void Context::shaderBinary(GLsizei n,
                           const ShaderProgramID *shaders,
                           GLenum binaryformat,
                           const void *binary,
                           GLsizei length)
{}

void Context::bindFragDataLocationIndexed(ShaderProgramID program,
                                          GLuint colorNumber,
                                          GLuint index,
                                          const char *name)
{}

void Context::bindFragDataLocation(ShaderProgramID program, GLuint colorNumber, const char *name)
{}

int Context::getFragDataIndex(ShaderProgramID program, const char *name)
{}

int Context::getProgramResourceLocationIndex(ShaderProgramID program,
                                             GLenum programInterface,
                                             const char *name)
{}

void Context::shaderSource(ShaderProgramID shader,
                           GLsizei count,
                           const GLchar *const *string,
                           const GLint *length)
{}

Program *Context::getActiveLinkedProgram() const
{}

void Context::uniform1f(UniformLocation location, GLfloat x)
{}

void Context::uniform1fv(UniformLocation location, GLsizei count, const GLfloat *v)
{}

void Context::setUniform1iImpl(Program *program,
                               UniformLocation location,
                               GLsizei count,
                               const GLint *v)
{}

void Context::onSamplerUniformChange(size_t textureUnitIndex)
{}

void Context::uniform1i(UniformLocation location, GLint x)
{}

void Context::uniform1iv(UniformLocation location, GLsizei count, const GLint *v)
{}

void Context::uniform2f(UniformLocation location, GLfloat x, GLfloat y)
{}

void Context::uniform2fv(UniformLocation location, GLsizei count, const GLfloat *v)
{}

void Context::uniform2i(UniformLocation location, GLint x, GLint y)
{}

void Context::uniform2iv(UniformLocation location, GLsizei count, const GLint *v)
{}

void Context::uniform3f(UniformLocation location, GLfloat x, GLfloat y, GLfloat z)
{}

void Context::uniform3fv(UniformLocation location, GLsizei count, const GLfloat *v)
{}

void Context::uniform3i(UniformLocation location, GLint x, GLint y, GLint z)
{}

void Context::uniform3iv(UniformLocation location, GLsizei count, const GLint *v)
{}

void Context::uniform4f(UniformLocation location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{}

void Context::uniform4fv(UniformLocation location, GLsizei count, const GLfloat *v)
{}

void Context::uniform4i(UniformLocation location, GLint x, GLint y, GLint z, GLint w)
{}

void Context::uniform4iv(UniformLocation location, GLsizei count, const GLint *v)
{}

void Context::uniformMatrix2fv(UniformLocation location,
                               GLsizei count,
                               GLboolean transpose,
                               const GLfloat *value)
{}

void Context::uniformMatrix3fv(UniformLocation location,
                               GLsizei count,
                               GLboolean transpose,
                               const GLfloat *value)
{}

void Context::uniformMatrix4fv(UniformLocation location,
                               GLsizei count,
                               GLboolean transpose,
                               const GLfloat *value)
{}

void Context::validateProgram(ShaderProgramID program)
{}

void Context::validateProgramPipeline(ProgramPipelineID pipeline)
{}

void Context::getProgramBinary(ShaderProgramID program,
                               GLsizei bufSize,
                               GLsizei *length,
                               GLenum *binaryFormat,
                               void *binary)
{}

void Context::programBinary(ShaderProgramID program,
                            GLenum binaryFormat,
                            const void *binary,
                            GLsizei length)
{}

void Context::uniform1ui(UniformLocation location, GLuint v0)
{}

void Context::uniform2ui(UniformLocation location, GLuint v0, GLuint v1)
{}

void Context::uniform3ui(UniformLocation location, GLuint v0, GLuint v1, GLuint v2)
{}

void Context::uniform4ui(UniformLocation location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
{}

void Context::uniform1uiv(UniformLocation location, GLsizei count, const GLuint *value)
{}
void Context::uniform2uiv(UniformLocation location, GLsizei count, const GLuint *value)
{}

void Context::uniform3uiv(UniformLocation location, GLsizei count, const GLuint *value)
{}

void Context::uniform4uiv(UniformLocation location, GLsizei count, const GLuint *value)
{}

void Context::genQueries(GLsizei n, QueryID *ids)
{}

void Context::deleteQueries(GLsizei n, const QueryID *ids)
{}

bool Context::isQueryGenerated(QueryID query) const
{}

GLboolean Context::isQuery(QueryID id) const
{}

void Context::uniformMatrix2x3fv(UniformLocation location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat *value)
{}

void Context::uniformMatrix3x2fv(UniformLocation location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat *value)
{}

void Context::uniformMatrix2x4fv(UniformLocation location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat *value)
{}

void Context::uniformMatrix4x2fv(UniformLocation location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat *value)
{}

void Context::uniformMatrix3x4fv(UniformLocation location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat *value)
{}

void Context::uniformMatrix4x3fv(UniformLocation location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat *value)
{}

void Context::deleteVertexArrays(GLsizei n, const VertexArrayID *arrays)
{}

void Context::genVertexArrays(GLsizei n, VertexArrayID *arrays)
{}

GLboolean Context::isVertexArray(VertexArrayID array) const
{}

void Context::endTransformFeedback()
{}

void Context::transformFeedbackVaryings(ShaderProgramID program,
                                        GLsizei count,
                                        const GLchar *const *varyings,
                                        GLenum bufferMode)
{}

void Context::getTransformFeedbackVarying(ShaderProgramID program,
                                          GLuint index,
                                          GLsizei bufSize,
                                          GLsizei *length,
                                          GLsizei *size,
                                          GLenum *type,
                                          GLchar *name)
{}

void Context::deleteTransformFeedbacks(GLsizei n, const TransformFeedbackID *ids)
{}

void Context::genTransformFeedbacks(GLsizei n, TransformFeedbackID *ids)
{}

GLboolean Context::isTransformFeedback(TransformFeedbackID id) const
{}

void Context::pauseTransformFeedback()
{}

void Context::resumeTransformFeedback()
{}

void Context::getUniformuiv(ShaderProgramID program, UniformLocation location, GLuint *params)
{}

void Context::getUniformuivRobust(ShaderProgramID program,
                                  UniformLocation location,
                                  GLsizei bufSize,
                                  GLsizei *length,
                                  GLuint *params)
{}

GLint Context::getFragDataLocation(ShaderProgramID program, const GLchar *name)
{}

void Context::getUniformIndices(ShaderProgramID program,
                                GLsizei uniformCount,
                                const GLchar *const *uniformNames,
                                GLuint *uniformIndices)
{}

void Context::getActiveUniformsiv(ShaderProgramID program,
                                  GLsizei uniformCount,
                                  const GLuint *uniformIndices,
                                  GLenum pname,
                                  GLint *params)
{}

GLuint Context::getUniformBlockIndex(ShaderProgramID program, const GLchar *uniformBlockName)
{}

void Context::getActiveUniformBlockiv(ShaderProgramID program,
                                      UniformBlockIndex uniformBlockIndex,
                                      GLenum pname,
                                      GLint *params)
{}

void Context::getActiveUniformBlockivRobust(ShaderProgramID program,
                                            UniformBlockIndex uniformBlockIndex,
                                            GLenum pname,
                                            GLsizei bufSize,
                                            GLsizei *length,
                                            GLint *params)
{}

void Context::getActiveUniformBlockName(ShaderProgramID program,
                                        UniformBlockIndex uniformBlockIndex,
                                        GLsizei bufSize,
                                        GLsizei *length,
                                        GLchar *uniformBlockName)
{}

void Context::uniformBlockBinding(ShaderProgramID program,
                                  UniformBlockIndex uniformBlockIndex,
                                  GLuint uniformBlockBinding)
{}

GLsync Context::fenceSync(GLenum condition, GLbitfield flags)
{}

GLboolean Context::isSync(SyncID syncPacked) const
{}

GLenum Context::clientWaitSync(SyncID syncPacked, GLbitfield flags, GLuint64 timeout)
{}

void Context::waitSync(SyncID syncPacked, GLbitfield flags, GLuint64 timeout)
{}

void Context::getInteger64v(GLenum pname, GLint64 *params)
{}

void Context::getInteger64vRobust(GLenum pname, GLsizei bufSize, GLsizei *length, GLint64 *data)
{}

void Context::getBufferParameteri64v(BufferBinding target, GLenum pname, GLint64 *params)
{}

void Context::getBufferParameteri64vRobust(BufferBinding target,
                                           GLenum pname,
                                           GLsizei bufSize,
                                           GLsizei *length,
                                           GLint64 *params)
{}

void Context::genSamplers(GLsizei count, SamplerID *samplers)
{}

void Context::deleteSamplers(GLsizei count, const SamplerID *samplers)
{}

void Context::getInternalformativ(GLenum target,
                                  GLenum internalformat,
                                  GLenum pname,
                                  GLsizei bufSize,
                                  GLint *params)
{}

void Context::getInternalformativRobust(GLenum target,
                                        GLenum internalformat,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        GLsizei *length,
                                        GLint *params)
{}

void Context::programUniform1i(ShaderProgramID program, UniformLocation location, GLint v0)
{}

void Context::programUniform2i(ShaderProgramID program,
                               UniformLocation location,
                               GLint v0,
                               GLint v1)
{}

void Context::programUniform3i(ShaderProgramID program,
                               UniformLocation location,
                               GLint v0,
                               GLint v1,
                               GLint v2)
{}

void Context::programUniform4i(ShaderProgramID program,
                               UniformLocation location,
                               GLint v0,
                               GLint v1,
                               GLint v2,
                               GLint v3)
{}

void Context::programUniform1ui(ShaderProgramID program, UniformLocation location, GLuint v0)
{}

void Context::programUniform2ui(ShaderProgramID program,
                                UniformLocation location,
                                GLuint v0,
                                GLuint v1)
{}

void Context::programUniform3ui(ShaderProgramID program,
                                UniformLocation location,
                                GLuint v0,
                                GLuint v1,
                                GLuint v2)
{}

void Context::programUniform4ui(ShaderProgramID program,
                                UniformLocation location,
                                GLuint v0,
                                GLuint v1,
                                GLuint v2,
                                GLuint v3)
{}

void Context::programUniform1f(ShaderProgramID program, UniformLocation location, GLfloat v0)
{}

void Context::programUniform2f(ShaderProgramID program,
                               UniformLocation location,
                               GLfloat v0,
                               GLfloat v1)
{}

void Context::programUniform3f(ShaderProgramID program,
                               UniformLocation location,
                               GLfloat v0,
                               GLfloat v1,
                               GLfloat v2)
{}

void Context::programUniform4f(ShaderProgramID program,
                               UniformLocation location,
                               GLfloat v0,
                               GLfloat v1,
                               GLfloat v2,
                               GLfloat v3)
{}

void Context::programUniform1iv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLint *value)
{}

void Context::programUniform2iv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLint *value)
{}

void Context::programUniform3iv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLint *value)
{}

void Context::programUniform4iv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLint *value)
{}

void Context::programUniform1uiv(ShaderProgramID program,
                                 UniformLocation location,
                                 GLsizei count,
                                 const GLuint *value)
{}

void Context::programUniform2uiv(ShaderProgramID program,
                                 UniformLocation location,
                                 GLsizei count,
                                 const GLuint *value)
{}

void Context::programUniform3uiv(ShaderProgramID program,
                                 UniformLocation location,
                                 GLsizei count,
                                 const GLuint *value)
{}

void Context::programUniform4uiv(ShaderProgramID program,
                                 UniformLocation location,
                                 GLsizei count,
                                 const GLuint *value)
{}

void Context::programUniform1fv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLfloat *value)
{}

void Context::programUniform2fv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLfloat *value)
{}

void Context::programUniform3fv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLfloat *value)
{}

void Context::programUniform4fv(ShaderProgramID program,
                                UniformLocation location,
                                GLsizei count,
                                const GLfloat *value)
{}

void Context::programUniformMatrix2fv(ShaderProgramID program,
                                      UniformLocation location,
                                      GLsizei count,
                                      GLboolean transpose,
                                      const GLfloat *value)
{}

void Context::programUniformMatrix3fv(ShaderProgramID program,
                                      UniformLocation location,
                                      GLsizei count,
                                      GLboolean transpose,
                                      const GLfloat *value)
{}

void Context::programUniformMatrix4fv(ShaderProgramID program,
                                      UniformLocation location,
                                      GLsizei count,
                                      GLboolean transpose,
                                      const GLfloat *value)
{}

void Context::programUniformMatrix2x3fv(ShaderProgramID program,
                                        UniformLocation location,
                                        GLsizei count,
                                        GLboolean transpose,
                                        const GLfloat *value)
{}

void Context::programUniformMatrix3x2fv(ShaderProgramID program,
                                        UniformLocation location,
                                        GLsizei count,
                                        GLboolean transpose,
                                        const GLfloat *value)
{}

void Context::programUniformMatrix2x4fv(ShaderProgramID program,
                                        UniformLocation location,
                                        GLsizei count,
                                        GLboolean transpose,
                                        const GLfloat *value)
{}

void Context::programUniformMatrix4x2fv(ShaderProgramID program,
                                        UniformLocation location,
                                        GLsizei count,
                                        GLboolean transpose,
                                        const GLfloat *value)
{}

void Context::programUniformMatrix3x4fv(ShaderProgramID program,
                                        UniformLocation location,
                                        GLsizei count,
                                        GLboolean transpose,
                                        const GLfloat *value)
{}

void Context::programUniformMatrix4x3fv(ShaderProgramID program,
                                        UniformLocation location,
                                        GLsizei count,
                                        GLboolean transpose,
                                        const GLfloat *value)
{}

bool Context::isCurrentTransformFeedback(const TransformFeedback *tf) const
{}

void Context::genProgramPipelines(GLsizei count, ProgramPipelineID *pipelines)
{}

void Context::deleteProgramPipelines(GLsizei count, const ProgramPipelineID *pipelines)
{}

GLboolean Context::isProgramPipeline(ProgramPipelineID pipeline) const
{}

void Context::finishFenceNV(FenceNVID fence)
{}

void Context::getFenceivNV(FenceNVID fence, GLenum pname, GLint *params)
{}

void Context::getTranslatedShaderSource(ShaderProgramID shader,
                                        GLsizei bufsize,
                                        GLsizei *length,
                                        GLchar *source)
{}

void Context::getnUniformfv(ShaderProgramID program,
                            UniformLocation location,
                            GLsizei bufSize,
                            GLfloat *params)
{}

void Context::getnUniformfvRobust(ShaderProgramID program,
                                  UniformLocation location,
                                  GLsizei bufSize,
                                  GLsizei *length,
                                  GLfloat *params)
{}

void Context::getnUniformiv(ShaderProgramID program,
                            UniformLocation location,
                            GLsizei bufSize,
                            GLint *params)
{}

void Context::getnUniformuiv(ShaderProgramID program,
                             UniformLocation location,
                             GLsizei bufSize,
                             GLuint *params)
{}

void Context::getnUniformivRobust(ShaderProgramID program,
                                  UniformLocation location,
                                  GLsizei bufSize,
                                  GLsizei *length,
                                  GLint *params)
{}

void Context::getnUniformuivRobust(ShaderProgramID program,
                                   UniformLocation location,
                                   GLsizei bufSize,
                                   GLsizei *length,
                                   GLuint *params)
{}

GLboolean Context::isFenceNV(FenceNVID fence) const
{}

void Context::readnPixels(GLint x,
                          GLint y,
                          GLsizei width,
                          GLsizei height,
                          GLenum format,
                          GLenum type,
                          GLsizei bufSize,
                          void *data)
{}

void Context::setFenceNV(FenceNVID fence, GLenum condition)
{}

GLboolean Context::testFenceNV(FenceNVID fence)
{}

void Context::deleteMemoryObjects(GLsizei n, const MemoryObjectID *memoryObjects)
{}

GLboolean Context::isMemoryObject(MemoryObjectID memoryObject) const
{}

void Context::createMemoryObjects(GLsizei n, MemoryObjectID *memoryObjects)
{}

void Context::memoryObjectParameteriv(MemoryObjectID memory, GLenum pname, const GLint *params)
{}

void Context::getMemoryObjectParameteriv(MemoryObjectID memory, GLenum pname, GLint *params)
{}

void Context::texStorageMem2D(TextureType target,
                              GLsizei levels,
                              GLenum internalFormat,
                              GLsizei width,
                              GLsizei height,
                              MemoryObjectID memory,
                              GLuint64 offset)
{}

void Context::texStorageMem2DMultisample(TextureType target,
                                         GLsizei samples,
                                         GLenum internalFormat,
                                         GLsizei width,
                                         GLsizei height,
                                         GLboolean fixedSampleLocations,
                                         MemoryObjectID memory,
                                         GLuint64 offset)
{}

void Context::texStorageMem3D(TextureType target,
                              GLsizei levels,
                              GLenum internalFormat,
                              GLsizei width,
                              GLsizei height,
                              GLsizei depth,
                              MemoryObjectID memory,
                              GLuint64 offset)
{}

void Context::texStorageMem3DMultisample(TextureType target,
                                         GLsizei samples,
                                         GLenum internalFormat,
                                         GLsizei width,
                                         GLsizei height,
                                         GLsizei depth,
                                         GLboolean fixedSampleLocations,
                                         MemoryObjectID memory,
                                         GLuint64 offset)
{}

void Context::bufferStorageMem(TextureType target,
                               GLsizeiptr size,
                               MemoryObjectID memory,
                               GLuint64 offset)
{}

void Context::importMemoryFd(MemoryObjectID memory, GLuint64 size, HandleType handleType, GLint fd)
{}

void Context::texStorageMemFlags2D(TextureType target,
                                   GLsizei levels,
                                   GLenum internalFormat,
                                   GLsizei width,
                                   GLsizei height,
                                   MemoryObjectID memory,
                                   GLuint64 offset,
                                   GLbitfield createFlags,
                                   GLbitfield usageFlags,
                                   const void *imageCreateInfoPNext)
{}

void Context::texStorageMemFlags2DMultisample(TextureType target,
                                              GLsizei samples,
                                              GLenum internalFormat,
                                              GLsizei width,
                                              GLsizei height,
                                              GLboolean fixedSampleLocations,
                                              MemoryObjectID memory,
                                              GLuint64 offset,
                                              GLbitfield createFlags,
                                              GLbitfield usageFlags,
                                              const void *imageCreateInfoPNext)
{}

void Context::texStorageMemFlags3D(TextureType target,
                                   GLsizei levels,
                                   GLenum internalFormat,
                                   GLsizei width,
                                   GLsizei height,
                                   GLsizei depth,
                                   MemoryObjectID memory,
                                   GLuint64 offset,
                                   GLbitfield createFlags,
                                   GLbitfield usageFlags,
                                   const void *imageCreateInfoPNext)
{}

void Context::texStorageMemFlags3DMultisample(TextureType target,
                                              GLsizei samples,
                                              GLenum internalFormat,
                                              GLsizei width,
                                              GLsizei height,
                                              GLsizei depth,
                                              GLboolean fixedSampleLocations,
                                              MemoryObjectID memory,
                                              GLuint64 offset,
                                              GLbitfield createFlags,
                                              GLbitfield usageFlags,
                                              const void *imageCreateInfoPNext)
{}

void Context::importMemoryZirconHandle(MemoryObjectID memory,
                                       GLuint64 size,
                                       HandleType handleType,
                                       GLuint handle)
{}

void Context::genSemaphores(GLsizei n, SemaphoreID *semaphores)
{}

void Context::deleteSemaphores(GLsizei n, const SemaphoreID *semaphores)
{}

GLboolean Context::isSemaphore(SemaphoreID semaphore) const
{}

void Context::semaphoreParameterui64v(SemaphoreID semaphore, GLenum pname, const GLuint64 *params)
{}

void Context::getSemaphoreParameterui64v(SemaphoreID semaphore, GLenum pname, GLuint64 *params)
{}

void Context::acquireTextures(GLuint numTextures,
                              const TextureID *textureIds,
                              const GLenum *layouts)
{}

void Context::releaseTextures(GLuint numTextures, const TextureID *textureIds, GLenum *layouts)
{}

void Context::waitSemaphore(SemaphoreID semaphoreHandle,
                            GLuint numBufferBarriers,
                            const BufferID *buffers,
                            GLuint numTextureBarriers,
                            const TextureID *textures,
                            const GLenum *srcLayouts)
{}

void Context::signalSemaphore(SemaphoreID semaphoreHandle,
                              GLuint numBufferBarriers,
                              const BufferID *buffers,
                              GLuint numTextureBarriers,
                              const TextureID *textures,
                              const GLenum *dstLayouts)
{}

void Context::importSemaphoreFd(SemaphoreID semaphore, HandleType handleType, GLint fd)
{}

void Context::importSemaphoreZirconHandle(SemaphoreID semaphore,
                                          HandleType handleType,
                                          GLuint handle)
{}

void Context::framebufferMemorylessPixelLocalStorage(GLint plane, GLenum internalformat)
{}

void Context::framebufferTexturePixelLocalStorage(GLint plane,
                                                  TextureID backingtexture,
                                                  GLint level,
                                                  GLint layer)
{}

void Context::framebufferPixelLocalClearValuefv(GLint plane, const GLfloat value[])
{}

void Context::framebufferPixelLocalClearValueiv(GLint plane, const GLint value[])
{}

void Context::framebufferPixelLocalClearValueuiv(GLint plane, const GLuint value[])
{}

void Context::beginPixelLocalStorage(GLsizei n, const GLenum loadops[])
{}

void Context::endPixelLocalStorage(GLsizei n, const GLenum storeops[])
{}

void Context::endPixelLocalStorageWithStoreOpsStore()
{}

void Context::pixelLocalStorageBarrier()
{}

void Context::framebufferPixelLocalStorageInterrupt()
{}

void Context::framebufferPixelLocalStorageRestore()
{}

void Context::getFramebufferPixelLocalStorageParameterfv(GLint plane, GLenum pname, GLfloat *params)
{}

void Context::getFramebufferPixelLocalStorageParameteriv(GLint plane, GLenum pname, GLint *params)
{}

void Context::getFramebufferPixelLocalStorageParameterfvRobust(GLint plane,
                                                               GLenum pname,
                                                               GLsizei bufSize,
                                                               GLsizei *length,
                                                               GLfloat *params)
{}

void Context::getFramebufferPixelLocalStorageParameterivRobust(GLint plane,
                                                               GLenum pname,
                                                               GLsizei bufSize,
                                                               GLsizei *length,
                                                               GLint *params)
{}

void Context::eGLImageTargetTexStorage(GLenum target, egl::ImageID image, const GLint *attrib_list)
{}

void Context::eGLImageTargetTextureStorage(GLuint texture,
                                           egl::ImageID image,
                                           const GLint *attrib_list)
{}

void Context::eGLImageTargetTexture2D(TextureType target, egl::ImageID image)
{}

void Context::eGLImageTargetRenderbufferStorage(GLenum target, egl::ImageID image)
{}

void Context::framebufferFetchBarrier()
{}

void Context::texStorage1D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width)
{}

bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams) const
{}

bool Context::getIndexedQueryParameterInfo(GLenum target,
                                           GLenum *type,
                                           unsigned int *numParams) const
{}

Program *Context::getProgramNoResolveLink(ShaderProgramID handle) const
{}

Shader *Context::getShaderResolveCompile(ShaderProgramID handle) const
{}

Shader *Context::getShaderNoResolveCompile(ShaderProgramID handle) const
{}

const angle::FrontendFeatures &Context::getFrontendFeatures() const
{}

bool Context::isRenderbufferGenerated(RenderbufferID renderbuffer) const
{}

bool Context::isFramebufferGenerated(FramebufferID framebuffer) const
{}

bool Context::isProgramPipelineGenerated(ProgramPipelineID pipeline) const
{}

bool Context::usingDisplayTextureShareGroup() const
{}

bool Context::usingDisplaySemaphoreShareGroup() const
{}

GLenum Context::getConvertedRenderbufferFormat(GLenum internalformat) const
{}

void Context::maxShaderCompilerThreads(GLuint count)
{}

void Context::framebufferParameteriMESA(GLenum target, GLenum pname, GLint param)
{}

void Context::getFramebufferParameterivMESA(GLenum target, GLenum pname, GLint *params)
{}

bool Context::isGLES1() const
{}

std::shared_ptr<angle::WorkerThreadPool> Context::getShaderCompileThreadPool() const
{}

std::shared_ptr<angle::WorkerThreadPool> Context::getLinkSubTaskThreadPool() const
{}

std::shared_ptr<angle::WaitableEvent> Context::postCompileLinkTask(
    const std::shared_ptr<angle::Closure> &task,
    angle::JobThreadSafety safety,
    angle::JobResultExpectancy resultExpectancy) const
{}

std::shared_ptr<angle::WorkerThreadPool> Context::getSingleThreadPool() const
{}

std::shared_ptr<angle::WorkerThreadPool> Context::getWorkerThreadPool() const
{}

void Context::onUniformBlockBindingUpdated(GLuint uniformBlockIndex)
{}

void Context::endTilingImplicit()
{}

void Context::onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message)
{}

egl::Error Context::setDefaultFramebuffer(egl::Surface *drawSurface, egl::Surface *readSurface)
{}

egl::Error Context::unsetDefaultFramebuffer()
{}

void Context::onPreSwap()
{}

void Context::getTexImage(TextureTarget target,
                          GLint level,
                          GLenum format,
                          GLenum type,
                          void *pixels)
{}

void Context::getCompressedTexImage(TextureTarget target, GLint level, void *pixels)
{}

void Context::getRenderbufferImage(GLenum target, GLenum format, GLenum type, void *pixels)
{}

void Context::setLogicOpEnabledForGLES1(bool enabled)
{}

egl::Error Context::releaseHighPowerGPU()
{}

egl::Error Context::reacquireHighPowerGPU()
{}

void Context::onGPUSwitch()
{}

egl::Error Context::acquireExternalContext(egl::Surface *drawAndReadSurface)
{}

egl::Error Context::releaseExternalContext()
{}

angle::SimpleMutex &Context::getProgramCacheMutex() const
{}

bool Context::supportsGeometryOrTesselation() const
{}

void Context::dirtyAllState()
{}

void Context::finishImmutable() const
{}

void Context::beginPerfMonitor(GLuint monitor)
{}

void Context::deletePerfMonitors(GLsizei n, GLuint *monitors) {}

void Context::endPerfMonitor(GLuint monitor)
{}

void Context::genPerfMonitors(GLsizei n, GLuint *monitors)
{}

void Context::getPerfMonitorCounterData(GLuint monitor,
                                        GLenum pname,
                                        GLsizei dataSize,
                                        GLuint *data,
                                        GLint *bytesWritten)
{}

void Context::getPerfMonitorCounterInfo(GLuint group, GLuint counter, GLenum pname, void *data)
{}

void Context::getPerfMonitorCounterString(GLuint group,
                                          GLuint counter,
                                          GLsizei bufSize,
                                          GLsizei *length,
                                          GLchar *counterString)
{}

void Context::getPerfMonitorCounters(GLuint group,
                                     GLint *numCounters,
                                     GLint *maxActiveCounters,
                                     GLsizei counterSize,
                                     GLuint *counters)
{}

void Context::getPerfMonitorGroupString(GLuint group,
                                        GLsizei bufSize,
                                        GLsizei *length,
                                        GLchar *groupString)
{}

void Context::getPerfMonitorGroups(GLint *numGroups, GLsizei groupsSize, GLuint *groups)
{}

void Context::selectPerfMonitorCounters(GLuint monitor,
                                        GLboolean enable,
                                        GLuint group,
                                        GLint numCounters,
                                        GLuint *counterList)
{}

const angle::PerfMonitorCounterGroups &Context::getPerfMonitorCounterGroups() const
{}

void Context::drawPixelLocalStorageEXTEnable(GLsizei n,
                                             const PixelLocalStoragePlane planes[],
                                             const GLenum loadops[])
{}

void Context::drawPixelLocalStorageEXTDisable(const PixelLocalStoragePlane planes[],
                                              const GLenum storeops[])
{}

void Context::framebufferFoveationConfig(FramebufferID framebufferPacked,
                                         GLuint numLayers,
                                         GLuint focalPointsPerLayer,
                                         GLuint requestedFeatures,
                                         GLuint *providedFeatures)
{}

void Context::framebufferFoveationParameters(FramebufferID framebufferPacked,
                                             GLuint layer,
                                             GLuint focalPoint,
                                             GLfloat focalX,
                                             GLfloat focalY,
                                             GLfloat gainX,
                                             GLfloat gainY,
                                             GLfloat foveaArea)
{}

void Context::textureFoveationParameters(TextureID texturePacked,
                                         GLuint layer,
                                         GLuint focalPoint,
                                         GLfloat focalX,
                                         GLfloat focalY,
                                         GLfloat gainX,
                                         GLfloat gainY,
                                         GLfloat foveaArea)
{}

void Context::endTiling(GLbitfield preserveMask)
{}

void Context::startTiling(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
{}

void Context::clearTexImage(TextureID texturePacked,
                            GLint level,
                            GLenum format,
                            GLenum type,
                            const void *data)
{}

void Context::clearTexSubImage(TextureID texturePacked,
                               GLint level,
                               GLint xoffset,
                               GLint yoffset,
                               GLint zoffset,
                               GLsizei width,
                               GLsizei height,
                               GLsizei depth,
                               GLenum format,
                               GLenum type,
                               const void *data)
{}

// ErrorSet implementation.
ErrorSet::ErrorSet(Debug *debug,
                   const angle::FrontendFeatures &frontendFeatures,
                   const egl::AttributeMap &attribs)
    :{}

ErrorSet::~ErrorSet() = default;

void ErrorSet::handleError(GLenum errorCode,
                           const char *message,
                           const char *file,
                           const char *function,
                           unsigned int line)
{}

void ErrorSet::validationError(angle::EntryPoint entryPoint, GLenum errorCode, const char *message)
{}

void ErrorSet::validationErrorF(angle::EntryPoint entryPoint,
                                GLenum errorCode,
                                const char *format,
                                ...)
{}

std::unique_lock<std::mutex> ErrorSet::getLockIfNotAlready()
{}

void ErrorSet::pushError(GLenum errorCode)
{}

GLenum ErrorSet::popError()
{}

// NOTE: this function should not assume that this context is current!
void ErrorSet::markContextLost(GraphicsResetStatus status)
{}

void ErrorSet::setContextLost()
{}

GLenum ErrorSet::getGraphicsResetStatus(rx::ContextImpl *contextImpl)
{}

GLenum ErrorSet::getErrorForCapture() const
{}

// StateCache implementation.
StateCache::StateCache()
    :{}

StateCache::~StateCache() = default;

ANGLE_INLINE void StateCache::updateVertexElementLimits(Context *context)
{}

void StateCache::initialize(Context *context)
{}

void StateCache::updateActiveAttribsMask(Context *context)
{}

void StateCache::updateVertexElementLimitsImpl(Context *context)
{}

void StateCache::updateBasicDrawStatesError()
{}

void StateCache::updateProgramPipelineError()
{}

void StateCache::updateBasicDrawElementsError()
{}

intptr_t StateCache::getBasicDrawStatesErrorImpl(const Context *context,
                                                 const PrivateStateCache *privateStateCache) const
{}

intptr_t StateCache::getProgramPipelineErrorImpl(const Context *context) const
{}

intptr_t StateCache::getBasicDrawElementsErrorImpl(const Context *context) const
{}

void StateCache::onVertexArrayBindingChange(Context *context)
{}

void StateCache::onProgramExecutableChange(Context *context)
{}

void StateCache::onVertexArrayFormatChange(Context *context)
{}

void StateCache::onVertexArrayBufferContentsChange(Context *context)
{}

void StateCache::onVertexArrayStateChange(Context *context)
{}

void StateCache::onVertexArrayBufferStateChange(Context *context)
{}

void StateCache::onGLES1ClientStateChange(Context *context)
{}

void StateCache::onGLES1TextureStateChange(Context *context)
{}

void StateCache::onDrawFramebufferChange(Context *context)
{}

void StateCache::onActiveTextureChange(Context *context)
{}

void StateCache::onQueryChange(Context *context)
{}

void StateCache::onActiveTransformFeedbackChange(Context *context)
{}

void StateCache::onUniformBufferStateChange(Context *context)
{}

void StateCache::onAtomicCounterBufferStateChange(Context *context)
{}

void StateCache::onShaderStorageBufferStateChange(Context *context)
{}

void StateCache::setValidDrawModes(bool pointsOK,
                                   bool linesOK,
                                   bool trisOK,
                                   bool lineAdjOK,
                                   bool triAdjOK,
                                   bool patchOK)
{}

void StateCache::updateValidDrawModes(Context *context)
{}

void StateCache::updateValidBindTextureTypes(Context *context)
{}

void StateCache::updateValidDrawElementsTypes(Context *context)
{}

void StateCache::updateTransformFeedbackActiveUnpaused(Context *context)
{}

void StateCache::updateVertexAttribTypesValidation(Context *context)
{}

void StateCache::updateActiveShaderStorageBufferIndices(Context *context)
{}

void StateCache::updateActiveImageUnitIndices(Context *context)
{}

void StateCache::updateCanDraw(Context *context)
{}

bool StateCache::isCurrentContext(const Context *context,
                                  const PrivateStateCache *privateStateCache) const
{}

PrivateStateCache::PrivateStateCache() :{}

PrivateStateCache::~PrivateStateCache() = default;
}  // namespace gl