// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// validationES3_autogen.h:
//   Validation functions for the OpenGL ES 3.0 entry points.

#ifndef LIBANGLE_VALIDATION_ES3_AUTOGEN_H_
#define LIBANGLE_VALIDATION_ES3_AUTOGEN_H_

#include "common/PackedEnums.h"

namespace gl
{
class Context;

bool ValidateBeginQuery(Context *context, QueryType targetPacked, QueryID idPacked);
bool ValidateBeginTransformFeedback(Context *context, PrimitiveMode primitiveModePacked);
bool ValidateBindBufferBase(Context *context,
                            BufferBinding targetPacked,
                            GLuint index,
                            BufferID bufferPacked);
bool ValidateBindBufferRange(Context *context,
                             BufferBinding targetPacked,
                             GLuint index,
                             BufferID bufferPacked,
                             GLintptr offset,
                             GLsizeiptr size);
bool ValidateBindSampler(Context *context, GLuint unit, SamplerID samplerPacked);
bool ValidateBindTransformFeedback(Context *context, GLenum target, TransformFeedbackID idPacked);
bool ValidateBindVertexArray(Context *context, VertexArrayID arrayPacked);
bool ValidateBlitFramebuffer(Context *context,
                             GLint srcX0,
                             GLint srcY0,
                             GLint srcX1,
                             GLint srcY1,
                             GLint dstX0,
                             GLint dstY0,
                             GLint dstX1,
                             GLint dstY1,
                             GLbitfield mask,
                             GLenum filter);
bool ValidateClearBufferfi(Context *context,
                           GLenum buffer,
                           GLint drawbuffer,
                           GLfloat depth,
                           GLint stencil);
bool ValidateClearBufferfv(Context *context, GLenum buffer, GLint drawbuffer, const GLfloat *value);
bool ValidateClearBufferiv(Context *context, GLenum buffer, GLint drawbuffer, const GLint *value);
bool ValidateClearBufferuiv(Context *context, GLenum buffer, GLint drawbuffer, const GLuint *value);
bool ValidateClientWaitSync(Context *context, GLsync sync, GLbitfield flags, GLuint64 timeout);
bool ValidateCompressedTexImage3D(Context *context,
                                  TextureTarget targetPacked,
                                  GLint level,
                                  GLenum internalformat,
                                  GLsizei width,
                                  GLsizei height,
                                  GLsizei depth,
                                  GLint border,
                                  GLsizei imageSize,
                                  const void *data);
bool ValidateCompressedTexSubImage3D(Context *context,
                                     TextureTarget targetPacked,
                                     GLint level,
                                     GLint xoffset,
                                     GLint yoffset,
                                     GLint zoffset,
                                     GLsizei width,
                                     GLsizei height,
                                     GLsizei depth,
                                     GLenum format,
                                     GLsizei imageSize,
                                     const void *data);
bool ValidateCopyBufferSubData(Context *context,
                               BufferBinding readTargetPacked,
                               BufferBinding writeTargetPacked,
                               GLintptr readOffset,
                               GLintptr writeOffset,
                               GLsizeiptr size);
bool ValidateCopyTexSubImage3D(Context *context,
                               TextureTarget targetPacked,
                               GLint level,
                               GLint xoffset,
                               GLint yoffset,
                               GLint zoffset,
                               GLint x,
                               GLint y,
                               GLsizei width,
                               GLsizei height);
bool ValidateDeleteQueries(Context *context, GLsizei n, const QueryID *idsPacked);
bool ValidateDeleteSamplers(Context *context, GLsizei count, const SamplerID *samplersPacked);
bool ValidateDeleteSync(Context *context, GLsync sync);
bool ValidateDeleteTransformFeedbacks(Context *context,
                                      GLsizei n,
                                      const TransformFeedbackID *idsPacked);
bool ValidateDeleteVertexArrays(Context *context, GLsizei n, const VertexArrayID *arraysPacked);
bool ValidateDrawArraysInstanced(Context *context,
                                 PrimitiveMode modePacked,
                                 GLint first,
                                 GLsizei count,
                                 GLsizei instancecount);
bool ValidateDrawBuffers(Context *context, GLsizei n, const GLenum *bufs);
bool ValidateDrawElementsInstanced(Context *context,
                                   PrimitiveMode modePacked,
                                   GLsizei count,
                                   DrawElementsType typePacked,
                                   const void *indices,
                                   GLsizei instancecount);
bool ValidateDrawRangeElements(Context *context,
                               PrimitiveMode modePacked,
                               GLuint start,
                               GLuint end,
                               GLsizei count,
                               DrawElementsType typePacked,
                               const void *indices);
bool ValidateEndQuery(Context *context, QueryType targetPacked);
bool ValidateEndTransformFeedback(Context *context);
bool ValidateFenceSync(Context *context, GLenum condition, GLbitfield flags);
bool ValidateFlushMappedBufferRange(Context *context,
                                    BufferBinding targetPacked,
                                    GLintptr offset,
                                    GLsizeiptr length);
bool ValidateFramebufferTextureLayer(Context *context,
                                     GLenum target,
                                     GLenum attachment,
                                     TextureID texturePacked,
                                     GLint level,
                                     GLint layer);
bool ValidateGenQueries(Context *context, GLsizei n, QueryID *idsPacked);
bool ValidateGenSamplers(Context *context, GLsizei count, SamplerID *samplersPacked);
bool ValidateGenTransformFeedbacks(Context *context, GLsizei n, TransformFeedbackID *idsPacked);
bool ValidateGenVertexArrays(Context *context, GLsizei n, VertexArrayID *arraysPacked);
bool ValidateGetActiveUniformBlockName(Context *context,
                                       ShaderProgramID programPacked,
                                       GLuint uniformBlockIndex,
                                       GLsizei bufSize,
                                       GLsizei *length,
                                       GLchar *uniformBlockName);
bool ValidateGetActiveUniformBlockiv(Context *context,
                                     ShaderProgramID programPacked,
                                     GLuint uniformBlockIndex,
                                     GLenum pname,
                                     GLint *params);
bool ValidateGetActiveUniformsiv(Context *context,
                                 ShaderProgramID programPacked,
                                 GLsizei uniformCount,
                                 const GLuint *uniformIndices,
                                 GLenum pname,
                                 GLint *params);
bool ValidateGetBufferParameteri64v(Context *context,
                                    BufferBinding targetPacked,
                                    GLenum pname,
                                    GLint64 *params);
bool ValidateGetBufferPointerv(Context *context,
                               BufferBinding targetPacked,
                               GLenum pname,
                               void **params);
bool ValidateGetFragDataLocation(Context *context,
                                 ShaderProgramID programPacked,
                                 const GLchar *name);
bool ValidateGetInteger64i_v(Context *context, GLenum target, GLuint index, GLint64 *data);
bool ValidateGetInteger64v(Context *context, GLenum pname, GLint64 *data);
bool ValidateGetIntegeri_v(Context *context, GLenum target, GLuint index, GLint *data);
bool ValidateGetInternalformativ(Context *context,
                                 GLenum target,
                                 GLenum internalformat,
                                 GLenum pname,
                                 GLsizei bufSize,
                                 GLint *params);
bool ValidateGetProgramBinary(Context *context,
                              ShaderProgramID programPacked,
                              GLsizei bufSize,
                              GLsizei *length,
                              GLenum *binaryFormat,
                              void *binary);
bool ValidateGetQueryObjectuiv(Context *context, QueryID idPacked, GLenum pname, GLuint *params);
bool ValidateGetQueryiv(Context *context, QueryType targetPacked, GLenum pname, GLint *params);
bool ValidateGetSamplerParameterfv(Context *context,
                                   SamplerID samplerPacked,
                                   GLenum pname,
                                   GLfloat *params);
bool ValidateGetSamplerParameteriv(Context *context,
                                   SamplerID samplerPacked,
                                   GLenum pname,
                                   GLint *params);
bool ValidateGetStringi(Context *context, GLenum name, GLuint index);
bool ValidateGetSynciv(Context *context,
                       GLsync sync,
                       GLenum pname,
                       GLsizei bufSize,
                       GLsizei *length,
                       GLint *values);
bool ValidateGetTransformFeedbackVarying(Context *context,
                                         ShaderProgramID programPacked,
                                         GLuint index,
                                         GLsizei bufSize,
                                         GLsizei *length,
                                         GLsizei *size,
                                         GLenum *type,
                                         GLchar *name);
bool ValidateGetUniformBlockIndex(Context *context,
                                  ShaderProgramID programPacked,
                                  const GLchar *uniformBlockName);
bool ValidateGetUniformIndices(Context *context,
                               ShaderProgramID programPacked,
                               GLsizei uniformCount,
                               const GLchar *const *uniformNames,
                               GLuint *uniformIndices);
bool ValidateGetUniformuiv(Context *context,
                           ShaderProgramID programPacked,
                           GLint location,
                           GLuint *params);
bool ValidateGetVertexAttribIiv(Context *context, GLuint index, GLenum pname, GLint *params);
bool ValidateGetVertexAttribIuiv(Context *context, GLuint index, GLenum pname, GLuint *params);
bool ValidateInvalidateFramebuffer(Context *context,
                                   GLenum target,
                                   GLsizei numAttachments,
                                   const GLenum *attachments);
bool ValidateInvalidateSubFramebuffer(Context *context,
                                      GLenum target,
                                      GLsizei numAttachments,
                                      const GLenum *attachments,
                                      GLint x,
                                      GLint y,
                                      GLsizei width,
                                      GLsizei height);
bool ValidateIsQuery(Context *context, QueryID idPacked);
bool ValidateIsSampler(Context *context, SamplerID samplerPacked);
bool ValidateIsSync(Context *context, GLsync sync);
bool ValidateIsTransformFeedback(Context *context, TransformFeedbackID idPacked);
bool ValidateIsVertexArray(Context *context, VertexArrayID arrayPacked);
bool ValidateMapBufferRange(Context *context,
                            BufferBinding targetPacked,
                            GLintptr offset,
                            GLsizeiptr length,
                            GLbitfield access);
bool ValidatePauseTransformFeedback(Context *context);
bool ValidateProgramBinary(Context *context,
                           ShaderProgramID programPacked,
                           GLenum binaryFormat,
                           const void *binary,
                           GLsizei length);
bool ValidateProgramParameteri(Context *context,
                               ShaderProgramID programPacked,
                               GLenum pname,
                               GLint value);
bool ValidateReadBuffer(Context *context, GLenum src);
bool ValidateRenderbufferStorageMultisample(Context *context,
                                            GLenum target,
                                            GLsizei samples,
                                            GLenum internalformat,
                                            GLsizei width,
                                            GLsizei height);
bool ValidateResumeTransformFeedback(Context *context);
bool ValidateSamplerParameterf(Context *context,
                               SamplerID samplerPacked,
                               GLenum pname,
                               GLfloat param);
bool ValidateSamplerParameterfv(Context *context,
                                SamplerID samplerPacked,
                                GLenum pname,
                                const GLfloat *param);
bool ValidateSamplerParameteri(Context *context,
                               SamplerID samplerPacked,
                               GLenum pname,
                               GLint param);
bool ValidateSamplerParameteriv(Context *context,
                                SamplerID samplerPacked,
                                GLenum pname,
                                const GLint *param);
bool ValidateTexImage3D(Context *context,
                        TextureTarget targetPacked,
                        GLint level,
                        GLint internalformat,
                        GLsizei width,
                        GLsizei height,
                        GLsizei depth,
                        GLint border,
                        GLenum format,
                        GLenum type,
                        const void *pixels);
bool ValidateTexStorage2D(Context *context,
                          TextureType targetPacked,
                          GLsizei levels,
                          GLenum internalformat,
                          GLsizei width,
                          GLsizei height);
bool ValidateTexStorage3D(Context *context,
                          TextureType targetPacked,
                          GLsizei levels,
                          GLenum internalformat,
                          GLsizei width,
                          GLsizei height,
                          GLsizei depth);
bool ValidateTexSubImage3D(Context *context,
                           TextureTarget targetPacked,
                           GLint level,
                           GLint xoffset,
                           GLint yoffset,
                           GLint zoffset,
                           GLsizei width,
                           GLsizei height,
                           GLsizei depth,
                           GLenum format,
                           GLenum type,
                           const void *pixels);
bool ValidateTransformFeedbackVaryings(Context *context,
                                       ShaderProgramID programPacked,
                                       GLsizei count,
                                       const GLchar *const *varyings,
                                       GLenum bufferMode);
bool ValidateUniform1ui(Context *context, GLint location, GLuint v0);
bool ValidateUniform1uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniform2ui(Context *context, GLint location, GLuint v0, GLuint v1);
bool ValidateUniform2uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniform3ui(Context *context, GLint location, GLuint v0, GLuint v1, GLuint v2);
bool ValidateUniform3uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniform4ui(Context *context,
                        GLint location,
                        GLuint v0,
                        GLuint v1,
                        GLuint v2,
                        GLuint v3);
bool ValidateUniform4uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniformBlockBinding(Context *context,
                                 ShaderProgramID programPacked,
                                 GLuint uniformBlockIndex,
                                 GLuint uniformBlockBinding);
bool ValidateUniformMatrix2x3fv(Context *context,
                                GLint location,
                                GLsizei count,
                                GLboolean transpose,
                                const GLfloat *value);
bool ValidateUniformMatrix2x4fv(Context *context,
                                GLint location,
                                GLsizei count,
                                GLboolean transpose,
                                const GLfloat *value);
bool ValidateUniformMatrix3x2fv(Context *context,
                                GLint location,
                                GLsizei count,
                                GLboolean transpose,
                                const GLfloat *value);
bool ValidateUniformMatrix3x4fv(Context *context,
                                GLint location,
                                GLsizei count,
                                GLboolean transpose,
                                const GLfloat *value);
bool ValidateUniformMatrix4x2fv(Context *context,
                                GLint location,
                                GLsizei count,
                                GLboolean transpose,
                                const GLfloat *value);
bool ValidateUniformMatrix4x3fv(Context *context,
                                GLint location,
                                GLsizei count,
                                GLboolean transpose,
                                const GLfloat *value);
bool ValidateUnmapBuffer(Context *context, BufferBinding targetPacked);
bool ValidateVertexAttribDivisor(Context *context, GLuint index, GLuint divisor);
bool ValidateVertexAttribI4i(Context *context, GLuint index, GLint x, GLint y, GLint z, GLint w);
bool ValidateVertexAttribI4iv(Context *context, GLuint index, const GLint *v);
bool ValidateVertexAttribI4ui(Context *context,
                              GLuint index,
                              GLuint x,
                              GLuint y,
                              GLuint z,
                              GLuint w);
bool ValidateVertexAttribI4uiv(Context *context, GLuint index, const GLuint *v);
bool ValidateVertexAttribIPointer(Context *context,
                                  GLuint index,
                                  GLint size,
                                  VertexAttribType typePacked,
                                  GLsizei stride,
                                  const void *pointer);
bool ValidateWaitSync(Context *context, GLsync sync, GLbitfield flags, GLuint64 timeout);
}  // namespace gl

#endif  // LIBANGLE_VALIDATION_ES3_AUTOGEN_H_
