// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
// It's formatted by clang-format using chromium coding style:
//    clang-format -i -style=chromium filename
// DO NOT EDIT!

// This file is included by gles2_implementation.h to declare the
// GL api functions.
#ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_

void ActiveTexture(GLenum texture) override;

void AttachShader(GLuint program, GLuint shader) override;

void BindAttribLocation(GLuint program,
                        GLuint index,
                        const char* name) override;

void BindBuffer(GLenum target, GLuint buffer) override;

void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override;

void BindBufferRange(GLenum target,
                     GLuint index,
                     GLuint buffer,
                     GLintptr offset,
                     GLsizeiptr size) override;

void BindFramebuffer(GLenum target, GLuint framebuffer) override;

void BindRenderbuffer(GLenum target, GLuint renderbuffer) override;

void BindSampler(GLuint unit, GLuint sampler) override;

void BindTexture(GLenum target, GLuint texture) override;

void BindTransformFeedback(GLenum target, GLuint transformfeedback) override;

void BlendColor(GLclampf red,
                GLclampf green,
                GLclampf blue,
                GLclampf alpha) override;

void BlendEquation(GLenum mode) override;

void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override;

void BlendFunc(GLenum sfactor, GLenum dfactor) override;

void BlendFuncSeparate(GLenum srcRGB,
                       GLenum dstRGB,
                       GLenum srcAlpha,
                       GLenum dstAlpha) override;

void BufferData(GLenum target,
                GLsizeiptr size,
                const void* data,
                GLenum usage) override;

void BufferSubData(GLenum target,
                   GLintptr offset,
                   GLsizeiptr size,
                   const void* data) override;

GLenum CheckFramebufferStatus(GLenum target) override;

void Clear(GLbitfield mask) override;

void ClearColor(GLclampf red,
                GLclampf green,
                GLclampf blue,
                GLclampf alpha) override;

void ClearDepthf(GLclampf depth) override;

void ClearStencil(GLint s) override;

void ColorMask(GLboolean red,
               GLboolean green,
               GLboolean blue,
               GLboolean alpha) override;

void CompileShader(GLuint shader) override;

void CompressedTexImage2D(GLenum target,
                          GLint level,
                          GLenum internalformat,
                          GLsizei width,
                          GLsizei height,
                          GLint border,
                          GLsizei imageSize,
                          const void* data) override;

void CompressedTexSubImage2D(GLenum target,
                             GLint level,
                             GLint xoffset,
                             GLint yoffset,
                             GLsizei width,
                             GLsizei height,
                             GLenum format,
                             GLsizei imageSize,
                             const void* data) override;

void CopyBufferSubData(GLenum readtarget,
                       GLenum writetarget,
                       GLintptr readoffset,
                       GLintptr writeoffset,
                       GLsizeiptr size) override;

void CopyTexImage2D(GLenum target,
                    GLint level,
                    GLenum internalformat,
                    GLint x,
                    GLint y,
                    GLsizei width,
                    GLsizei height,
                    GLint border) override;

void CopyTexSubImage2D(GLenum target,
                       GLint level,
                       GLint xoffset,
                       GLint yoffset,
                       GLint x,
                       GLint y,
                       GLsizei width,
                       GLsizei height) override;

GLuint CreateProgram() override;

GLuint CreateShader(GLenum type) override;

void CullFace(GLenum mode) override;

void DeleteBuffers(GLsizei n, const GLuint* buffers) override;

void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override;

void DeleteProgram(GLuint program) override;

void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) override;

void DeleteSamplers(GLsizei n, const GLuint* samplers) override;

void DeleteShader(GLuint shader) override;

void DeleteTextures(GLsizei n, const GLuint* textures) override;

void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids) override;

void DepthFunc(GLenum func) override;

void DepthMask(GLboolean flag) override;

void DepthRangef(GLclampf zNear, GLclampf zFar) override;

void DetachShader(GLuint program, GLuint shader) override;

void Disable(GLenum cap) override;

void DrawArrays(GLenum mode, GLint first, GLsizei count) override;

void DrawElements(GLenum mode,
                  GLsizei count,
                  GLenum type,
                  const void* indices) override;

void Enable(GLenum cap) override;

void Finish() override;

void Flush() override;

void FramebufferRenderbuffer(GLenum target,
                             GLenum attachment,
                             GLenum renderbuffertarget,
                             GLuint renderbuffer) override;

void FramebufferTexture2D(GLenum target,
                          GLenum attachment,
                          GLenum textarget,
                          GLuint texture,
                          GLint level) override;

void FramebufferTextureLayer(GLenum target,
                             GLenum attachment,
                             GLuint texture,
                             GLint level,
                             GLint layer) override;

void FrontFace(GLenum mode) override;

void GenBuffers(GLsizei n, GLuint* buffers) override;

void GenerateMipmap(GLenum target) override;

void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;

void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;

void GenSamplers(GLsizei n, GLuint* samplers) override;

void GenTextures(GLsizei n, GLuint* textures) override;

void GenTransformFeedbacks(GLsizei n, GLuint* ids) override;

void GetActiveAttrib(GLuint program,
                     GLuint index,
                     GLsizei bufsize,
                     GLsizei* length,
                     GLint* size,
                     GLenum* type,
                     char* name) override;

void GetActiveUniform(GLuint program,
                      GLuint index,
                      GLsizei bufsize,
                      GLsizei* length,
                      GLint* size,
                      GLenum* type,
                      char* name) override;

void GetAttachedShaders(GLuint program,
                        GLsizei maxcount,
                        GLsizei* count,
                        GLuint* shaders) override;

GLint GetAttribLocation(GLuint program, const char* name) override;

void GetBooleanv(GLenum pname, GLboolean* params) override;

void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) override;

GLenum GetError() override;

void GetFloatv(GLenum pname, GLfloat* params) override;

void GetFramebufferAttachmentParameteriv(GLenum target,
                                         GLenum attachment,
                                         GLenum pname,
                                         GLint* params) override;

void GetIntegerv(GLenum pname, GLint* params) override;

void GetInternalformativ(GLenum target,
                         GLenum format,
                         GLenum pname,
                         GLsizei bufSize,
                         GLint* params) override;

void GetProgramiv(GLuint program, GLenum pname, GLint* params) override;

void GetProgramInfoLog(GLuint program,
                       GLsizei bufsize,
                       GLsizei* length,
                       char* infolog) override;

void GetRenderbufferParameteriv(GLenum target,
                                GLenum pname,
                                GLint* params) override;

void GetSamplerParameterfv(GLuint sampler,
                           GLenum pname,
                           GLfloat* params) override;

void GetSamplerParameteriv(GLuint sampler,
                           GLenum pname,
                           GLint* params) override;

void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;

void GetShaderInfoLog(GLuint shader,
                      GLsizei bufsize,
                      GLsizei* length,
                      char* infolog) override;

void GetShaderPrecisionFormat(GLenum shadertype,
                              GLenum precisiontype,
                              GLint* range,
                              GLint* precision) override;

void GetShaderSource(GLuint shader,
                     GLsizei bufsize,
                     GLsizei* length,
                     char* source) override;

const GLubyte* GetString(GLenum name) override;

void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) override;

void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) override;

void GetUniformfv(GLuint program, GLint location, GLfloat* params) override;

void GetUniformiv(GLuint program, GLint location, GLint* params) override;

GLint GetUniformLocation(GLuint program, const char* name) override;

void GetVertexAttribPointerv(GLuint index,
                             GLenum pname,
                             void** pointer) override;

void Hint(GLenum target, GLenum mode) override;

void InvalidateFramebuffer(GLenum target,
                           GLsizei count,
                           const GLenum* attachments) override;

void InvalidateSubFramebuffer(GLenum target,
                              GLsizei count,
                              const GLenum* attachments,
                              GLint x,
                              GLint y,
                              GLsizei width,
                              GLsizei height) override;

GLboolean IsBuffer(GLuint buffer) override;

GLboolean IsEnabled(GLenum cap) override;

GLboolean IsFramebuffer(GLuint framebuffer) override;

GLboolean IsProgram(GLuint program) override;

GLboolean IsRenderbuffer(GLuint renderbuffer) override;

GLboolean IsSampler(GLuint sampler) override;

GLboolean IsShader(GLuint shader) override;

GLboolean IsTexture(GLuint texture) override;

GLboolean IsTransformFeedback(GLuint transformfeedback) override;

void LineWidth(GLfloat width) override;

void LinkProgram(GLuint program) override;

void PauseTransformFeedback() override;

void PixelStorei(GLenum pname, GLint param) override;

void PolygonOffset(GLfloat factor, GLfloat units) override;

void ReadBuffer(GLenum src) override;

void ReadPixels(GLint x,
                GLint y,
                GLsizei width,
                GLsizei height,
                GLenum format,
                GLenum type,
                void* pixels) override;

void ReleaseShaderCompiler() override;

void RenderbufferStorage(GLenum target,
                         GLenum internalformat,
                         GLsizei width,
                         GLsizei height) override;

void ResumeTransformFeedback() override;

void SampleCoverage(GLclampf value, GLboolean invert) override;

void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) override;

void SamplerParameterfv(GLuint sampler,
                        GLenum pname,
                        const GLfloat* params) override;

void SamplerParameteri(GLuint sampler, GLenum pname, GLint param) override;

void SamplerParameteriv(GLuint sampler,
                        GLenum pname,
                        const GLint* params) override;

void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override;

void ShaderBinary(GLsizei n,
                  const GLuint* shaders,
                  GLenum binaryformat,
                  const void* binary,
                  GLsizei length) override;

void ShaderSource(GLuint shader,
                  GLsizei count,
                  const GLchar* const* str,
                  const GLint* length) override;

void ShallowFinishCHROMIUM() override;

void ShallowFlushCHROMIUM() override;

void StencilFunc(GLenum func, GLint ref, GLuint mask) override;

void StencilFuncSeparate(GLenum face,
                         GLenum func,
                         GLint ref,
                         GLuint mask) override;

void StencilMask(GLuint mask) override;

void StencilMaskSeparate(GLenum face, GLuint mask) override;

void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override;

void StencilOpSeparate(GLenum face,
                       GLenum fail,
                       GLenum zfail,
                       GLenum zpass) override;

void TexImage2D(GLenum target,
                GLint level,
                GLint internalformat,
                GLsizei width,
                GLsizei height,
                GLint border,
                GLenum format,
                GLenum type,
                const void* pixels) override;

void TexImage3D(GLenum target,
                GLint level,
                GLint internalformat,
                GLsizei width,
                GLsizei height,
                GLsizei depth,
                GLint border,
                GLenum format,
                GLenum type,
                const void* pixels) override;

void TexParameterf(GLenum target, GLenum pname, GLfloat param) override;

void TexParameterfv(GLenum target,
                    GLenum pname,
                    const GLfloat* params) override;

void TexParameteri(GLenum target, GLenum pname, GLint param) override;

void TexParameteriv(GLenum target, GLenum pname, const GLint* params) override;

void TexStorage3D(GLenum target,
                  GLsizei levels,
                  GLenum internalFormat,
                  GLsizei width,
                  GLsizei height,
                  GLsizei depth) override;

void TexSubImage2D(GLenum target,
                   GLint level,
                   GLint xoffset,
                   GLint yoffset,
                   GLsizei width,
                   GLsizei height,
                   GLenum format,
                   GLenum type,
                   const void* pixels) override;

void TexSubImage3D(GLenum target,
                   GLint level,
                   GLint xoffset,
                   GLint yoffset,
                   GLint zoffset,
                   GLsizei width,
                   GLsizei height,
                   GLsizei depth,
                   GLenum format,
                   GLenum type,
                   const void* pixels) override;

void Uniform1f(GLint location, GLfloat x) override;

void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override;

void Uniform1i(GLint location, GLint x) override;

void Uniform1iv(GLint location, GLsizei count, const GLint* v) override;

void Uniform1ui(GLint location, GLuint x) override;

void Uniform1uiv(GLint location, GLsizei count, const GLuint* v) override;

void Uniform2f(GLint location, GLfloat x, GLfloat y) override;

void Uniform2fv(GLint location, GLsizei count, const GLfloat* v) override;

void Uniform2i(GLint location, GLint x, GLint y) override;

void Uniform2iv(GLint location, GLsizei count, const GLint* v) override;

void Uniform2ui(GLint location, GLuint x, GLuint y) override;

void Uniform2uiv(GLint location, GLsizei count, const GLuint* v) override;

void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) override;

void Uniform3fv(GLint location, GLsizei count, const GLfloat* v) override;

void Uniform3i(GLint location, GLint x, GLint y, GLint z) override;

void Uniform3iv(GLint location, GLsizei count, const GLint* v) override;

void Uniform3ui(GLint location, GLuint x, GLuint y, GLuint z) override;

void Uniform3uiv(GLint location, GLsizei count, const GLuint* v) override;

void Uniform4f(GLint location,
               GLfloat x,
               GLfloat y,
               GLfloat z,
               GLfloat w) override;

void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) override;

void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) override;

void Uniform4iv(GLint location, GLsizei count, const GLint* v) override;

void Uniform4ui(GLint location,
                GLuint x,
                GLuint y,
                GLuint z,
                GLuint w) override;

void Uniform4uiv(GLint location, GLsizei count, const GLuint* v) override;

void UniformMatrix2fv(GLint location,
                      GLsizei count,
                      GLboolean transpose,
                      const GLfloat* value) override;

void UniformMatrix2x3fv(GLint location,
                        GLsizei count,
                        GLboolean transpose,
                        const GLfloat* value) override;

void UniformMatrix2x4fv(GLint location,
                        GLsizei count,
                        GLboolean transpose,
                        const GLfloat* value) override;

void UniformMatrix3fv(GLint location,
                      GLsizei count,
                      GLboolean transpose,
                      const GLfloat* value) override;

void UniformMatrix3x2fv(GLint location,
                        GLsizei count,
                        GLboolean transpose,
                        const GLfloat* value) override;

void UniformMatrix3x4fv(GLint location,
                        GLsizei count,
                        GLboolean transpose,
                        const GLfloat* value) override;

void UniformMatrix4fv(GLint location,
                      GLsizei count,
                      GLboolean transpose,
                      const GLfloat* value) override;

void UniformMatrix4x2fv(GLint location,
                        GLsizei count,
                        GLboolean transpose,
                        const GLfloat* value) override;

void UniformMatrix4x3fv(GLint location,
                        GLsizei count,
                        GLboolean transpose,
                        const GLfloat* value) override;

void UseProgram(GLuint program) override;

void ValidateProgram(GLuint program) override;

void VertexAttrib1f(GLuint indx, GLfloat x) override;

void VertexAttrib1fv(GLuint indx, const GLfloat* values) override;

void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override;

void VertexAttrib2fv(GLuint indx, const GLfloat* values) override;

void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) override;

void VertexAttrib3fv(GLuint indx, const GLfloat* values) override;

void VertexAttrib4f(GLuint indx,
                    GLfloat x,
                    GLfloat y,
                    GLfloat z,
                    GLfloat w) override;

void VertexAttrib4fv(GLuint indx, const GLfloat* values) override;

void VertexAttribI4i(GLuint indx, GLint x, GLint y, GLint z, GLint w) override;

void VertexAttribI4iv(GLuint indx, const GLint* values) override;

void VertexAttribI4ui(GLuint indx,
                      GLuint x,
                      GLuint y,
                      GLuint z,
                      GLuint w) override;

void VertexAttribI4uiv(GLuint indx, const GLuint* values) override;

void VertexAttribIPointer(GLuint indx,
                          GLint size,
                          GLenum type,
                          GLsizei stride,
                          const void* ptr) override;

void VertexAttribPointer(GLuint indx,
                         GLint size,
                         GLenum type,
                         GLboolean normalized,
                         GLsizei stride,
                         const void* ptr) override;

void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override;

void BlitFramebufferCHROMIUM(GLint srcX0,
                             GLint srcY0,
                             GLint srcX1,
                             GLint srcY1,
                             GLint dstX0,
                             GLint dstY0,
                             GLint dstX1,
                             GLint dstY1,
                             GLbitfield mask,
                             GLenum filter) override;

void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
                                            GLsizei samples,
                                            GLenum internalformat,
                                            GLsizei width,
                                            GLsizei height) override;

void RenderbufferStorageMultisampleEXT(GLenum target,
                                       GLsizei samples,
                                       GLenum internalformat,
                                       GLsizei width,
                                       GLsizei height) override;

void FramebufferTexture2DMultisampleEXT(GLenum target,
                                        GLenum attachment,
                                        GLenum textarget,
                                        GLuint texture,
                                        GLint level,
                                        GLsizei samples) override;

void TexStorage2DEXT(GLenum target,
                     GLsizei levels,
                     GLenum internalFormat,
                     GLsizei width,
                     GLsizei height) override;

void GenQueriesEXT(GLsizei n, GLuint* queries) override;

void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;

GLboolean IsQueryEXT(GLuint id) override;

void BeginQueryEXT(GLenum target, GLuint id) override;

void BeginTransformFeedback(GLenum primitivemode) override;

void EndQueryEXT(GLenum target) override;

void EndTransformFeedback() override;

void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;

void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;

void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;

void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;

void PopGroupMarkerEXT() override;

void GenVertexArraysOES(GLsizei n, GLuint* arrays) override;

void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;

GLboolean IsVertexArrayOES(GLuint array) override;

void BindVertexArrayOES(GLuint array) override;

void SwapBuffers() override;

GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
                                   GLsizei count,
                                   GLenum type,
                                   GLuint offset) override;

GLboolean EnableFeatureCHROMIUM(const char* feature) override;

void* MapBufferCHROMIUM(GLuint target, GLenum access) override;

GLboolean UnmapBufferCHROMIUM(GLuint target) override;

void* MapBufferSubDataCHROMIUM(GLuint target,
                               GLintptr offset,
                               GLsizeiptr size,
                               GLenum access) override;

void UnmapBufferSubDataCHROMIUM(const void* mem) override;

void* MapTexSubImage2DCHROMIUM(GLenum target,
                               GLint level,
                               GLint xoffset,
                               GLint yoffset,
                               GLsizei width,
                               GLsizei height,
                               GLenum format,
                               GLenum type,
                               GLenum access) override;

void UnmapTexSubImage2DCHROMIUM(const void* mem) override;

void ResizeCHROMIUM(GLuint width, GLuint height, GLfloat scale_factor) override;

const GLchar* GetRequestableExtensionsCHROMIUM() override;

void RequestExtensionCHROMIUM(const char* extension) override;

void RateLimitOffscreenContextCHROMIUM() override;

void GetProgramInfoCHROMIUM(GLuint program,
                            GLsizei bufsize,
                            GLsizei* size,
                            void* info) override;

GLuint CreateStreamTextureCHROMIUM(GLuint texture) override;

GLuint CreateImageCHROMIUM(ClientBuffer buffer,
                           GLsizei width,
                           GLsizei height,
                           GLenum internalformat) override;

void DestroyImageCHROMIUM(GLuint image_id) override;

GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
                                          GLsizei height,
                                          GLenum internalformat,
                                          GLenum usage) override;

void GetTranslatedShaderSourceANGLE(GLuint shader,
                                    GLsizei bufsize,
                                    GLsizei* length,
                                    char* source) override;

void PostSubBufferCHROMIUM(GLint x,
                           GLint y,
                           GLint width,
                           GLint height) override;

void TexImageIOSurface2DCHROMIUM(GLenum target,
                                 GLsizei width,
                                 GLsizei height,
                                 GLuint ioSurfaceId,
                                 GLuint plane) override;

void CopyTextureCHROMIUM(GLenum target,
                         GLenum source_id,
                         GLenum dest_id,
                         GLint level,
                         GLint internalformat,
                         GLenum dest_type) override;

void DrawArraysInstancedANGLE(GLenum mode,
                              GLint first,
                              GLsizei count,
                              GLsizei primcount) override;

void DrawElementsInstancedANGLE(GLenum mode,
                                GLsizei count,
                                GLenum type,
                                const void* indices,
                                GLsizei primcount) override;

void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) override;

void GenMailboxCHROMIUM(GLbyte* mailbox) override;

void ProduceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;

void ProduceTextureDirectCHROMIUM(GLuint texture,
                                  GLenum target,
                                  const GLbyte* mailbox) override;

void ConsumeTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override;

GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
                                       const GLbyte* mailbox) override;

void BindUniformLocationCHROMIUM(GLuint program,
                                 GLint location,
                                 const char* name) override;

void GenValuebuffersCHROMIUM(GLsizei n, GLuint* buffers) override;

void DeleteValuebuffersCHROMIUM(GLsizei n, const GLuint* valuebuffers) override;

GLboolean IsValuebufferCHROMIUM(GLuint valuebuffer) override;

void BindValuebufferCHROMIUM(GLenum target, GLuint valuebuffer) override;

void SubscribeValueCHROMIUM(GLenum target, GLenum subscription) override;

void PopulateSubscribedValuesCHROMIUM(GLenum target) override;

void UniformValuebufferCHROMIUM(GLint location,
                                GLenum target,
                                GLenum subscription) override;

void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) override;

void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) override;

void TraceBeginCHROMIUM(const char* category_name,
                        const char* trace_name) override;

void TraceEndCHROMIUM() override;

void AsyncTexSubImage2DCHROMIUM(GLenum target,
                                GLint level,
                                GLint xoffset,
                                GLint yoffset,
                                GLsizei width,
                                GLsizei height,
                                GLenum format,
                                GLenum type,
                                const void* data) override;

void AsyncTexImage2DCHROMIUM(GLenum target,
                             GLint level,
                             GLenum internalformat,
                             GLsizei width,
                             GLsizei height,
                             GLint border,
                             GLenum format,
                             GLenum type,
                             const void* pixels) override;

void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;

void WaitAllAsyncTexImage2DCHROMIUM() override;

void DiscardFramebufferEXT(GLenum target,
                           GLsizei count,
                           const GLenum* attachments) override;

void LoseContextCHROMIUM(GLenum current, GLenum other) override;

GLuint InsertSyncPointCHROMIUM() override;

void WaitSyncPointCHROMIUM(GLuint sync_point) override;

void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override;

void DiscardBackbufferCHROMIUM() override;

void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
                                  GLenum plane_transform,
                                  GLuint overlay_texture_id,
                                  GLint bounds_x,
                                  GLint bounds_y,
                                  GLint bounds_width,
                                  GLint bounds_height,
                                  GLfloat uv_x,
                                  GLfloat uv_y,
                                  GLfloat uv_width,
                                  GLfloat uv_height) override;

void SwapInterval(GLint interval) override;

void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;

void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;

void BlendBarrierKHR() override;

#endif  // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
