// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from gl.xml and wgl.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.
//
// validationGL2_autogen.h:
//   Validation functions for the OpenGL 2.0 entry points.

#ifndef LIBANGLE_VALIDATION_GL2_AUTOGEN_H_
#define LIBANGLE_VALIDATION_GL2_AUTOGEN_H_

#include "common/PackedEnums.h"

namespace gl
{
class Context;

bool ValidateGetVertexAttribdv(Context *context, GLuint index, GLenum pname, GLdouble *params);
bool ValidateVertexAttrib1d(Context *context, GLuint index, GLdouble x);
bool ValidateVertexAttrib1dv(Context *context, GLuint index, const GLdouble *v);
bool ValidateVertexAttrib1s(Context *context, GLuint index, GLshort x);
bool ValidateVertexAttrib1sv(Context *context, GLuint index, const GLshort *v);
bool ValidateVertexAttrib2d(Context *context, GLuint index, GLdouble x, GLdouble y);
bool ValidateVertexAttrib2dv(Context *context, GLuint index, const GLdouble *v);
bool ValidateVertexAttrib2s(Context *context, GLuint index, GLshort x, GLshort y);
bool ValidateVertexAttrib2sv(Context *context, GLuint index, const GLshort *v);
bool ValidateVertexAttrib3d(Context *context, GLuint index, GLdouble x, GLdouble y, GLdouble z);
bool ValidateVertexAttrib3dv(Context *context, GLuint index, const GLdouble *v);
bool ValidateVertexAttrib3s(Context *context, GLuint index, GLshort x, GLshort y, GLshort z);
bool ValidateVertexAttrib3sv(Context *context, GLuint index, const GLshort *v);
bool ValidateVertexAttrib4Nbv(Context *context, GLuint index, const GLbyte *v);
bool ValidateVertexAttrib4Niv(Context *context, GLuint index, const GLint *v);
bool ValidateVertexAttrib4Nsv(Context *context, GLuint index, const GLshort *v);
bool ValidateVertexAttrib4Nub(Context *context,
                              GLuint index,
                              GLubyte x,
                              GLubyte y,
                              GLubyte z,
                              GLubyte w);
bool ValidateVertexAttrib4Nubv(Context *context, GLuint index, const GLubyte *v);
bool ValidateVertexAttrib4Nuiv(Context *context, GLuint index, const GLuint *v);
bool ValidateVertexAttrib4Nusv(Context *context, GLuint index, const GLushort *v);
bool ValidateVertexAttrib4bv(Context *context, GLuint index, const GLbyte *v);
bool ValidateVertexAttrib4d(Context *context,
                            GLuint index,
                            GLdouble x,
                            GLdouble y,
                            GLdouble z,
                            GLdouble w);
bool ValidateVertexAttrib4dv(Context *context, GLuint index, const GLdouble *v);
bool ValidateVertexAttrib4iv(Context *context, GLuint index, const GLint *v);
bool ValidateVertexAttrib4s(Context *context,
                            GLuint index,
                            GLshort x,
                            GLshort y,
                            GLshort z,
                            GLshort w);
bool ValidateVertexAttrib4sv(Context *context, GLuint index, const GLshort *v);
bool ValidateVertexAttrib4ubv(Context *context, GLuint index, const GLubyte *v);
bool ValidateVertexAttrib4uiv(Context *context, GLuint index, const GLuint *v);
bool ValidateVertexAttrib4usv(Context *context, GLuint index, const GLushort *v);
}  // namespace gl

#endif  // LIBANGLE_VALIDATION_GL2_AUTOGEN_H_
