-------------------------------------------------------------------------
drawElements Quality Program Documentation
-----------------------------------------------

Copyright 2014 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------

    OpenGL ES 2.0 Negative API tests - Function listing

Legend:
	o = Tests done
	- = Test not done
	x = Will not generate errors, no negative test

-----------------------------------------------
 Special functions
-----------------------------------------------

x glFinish	(void);
x glFlush	(void);
o glHint	(GLenum target, GLenum mode);

-----------------------------------------------
 State functions
-----------------------------------------------

o glDisable								(GLenum cap);
o glEnable								(GLenum cap);
o glGetAttachedShaders					(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
o glGetBufferParameteriv				(GLenum target, GLenum pname, GLint* params);
o glGetBooleanv							(GLenum pname, GLboolean* params);
x glGetError							(void);
o glGetFloatv							(GLenum pname, GLfloat* params);
o glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params);
o glGetIntegerv							(GLenum pname, GLint* params);
o glGetProgramiv						(GLuint program, GLenum pname, GLint* params);
o glGetProgramInfoLog					(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
o glGetRenderbufferParameteriv			(GLenum target, GLenum pname, GLint* params);
o glGetShaderiv							(GLuint shader, GLenum pname, GLint* params);
o glGetShaderInfoLog					(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
o glGetShaderPrecisionFormat			(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
o glGetShaderSource						(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
o glGetString							(GLenum name);
o glGetTexParameterfv					(GLenum target, GLenum pname, GLfloat* params);
o glGetTexParameteriv					(GLenum target, GLenum pname, GLint* params);
o glGetUniformfv						(GLuint program, GLint location, GLfloat* params);
o glGetUniformiv						(GLuint program, GLint location, GLint* params);
o glGetVertexAttribfv					(GLuint index, GLenum pname, GLfloat* params);
o glGetVertexAttribiv					(GLuint index, GLenum pname, GLint* params);
o glGetVertexAttribPointerv				(GLuint index, GLenum pname, GLvoid** pointer);
o glIsEnabled							(GLenum cap);

-----------------------------------------------
 Transforms & Fragment API functions
-----------------------------------------------

x glBlendColor				(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
o glBlendEquation			(GLenum mode);
o glBlendEquationSeparate	(GLenum modeRGB, GLenum modeAlpha);
o glBlendFunc				(GLenum sfactor, GLenum dfactor);
o glBlendFuncSeparate		(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
x glColorMask				(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
o glDepthFunc				(GLenum func);
x glDepthMask				(GLboolean flag);
x glDepthRangef				(GLclampf zNear, GLclampf zFar);
x glSampleCoverage			(GLclampf value, GLboolean invert);
o glScissor					(GLint x, GLint y, GLsizei width, GLsizei height);
o glStencilFunc				(GLenum func, GLint ref, GLuint mask);
o glStencilFuncSeparate		(GLenum face, GLenum func, GLint ref, GLuint mask);
x glStencilMask				(GLuint mask);
o glStencilMaskSeparate		(GLenum face, GLuint mask);
o glStencilOp				(GLenum fail, GLenum zfail, GLenum zpass);
o glStencilOpSeparate		(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
o glViewport				(GLint x, GLint y, GLsizei width, GLsizei height);

-----------------------------------------------
 FBO API functions
-----------------------------------------------

o glBindFramebuffer			(GLenum target, GLuint framebuffer);
o glBindRenderbuffer		(GLenum target, GLuint renderbuffer);
o glCheckFramebufferStatus	(GLenum target);
o glDeleteFramebuffers		(GLsizei n, const GLuint* framebuffers);
o glDeleteRenderbuffers		(GLsizei n, const GLuint* renderbuffers);
o glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
o glFramebufferTexture2D	(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
o glGenFramebuffers			(GLsizei n, GLuint* framebuffers);
o glGenRenderbuffers		(GLsizei n, GLuint* renderbuffers);
o glRenderbufferStorage		(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);

-----------------------------------------------
 Buffer and Buffer Object API functions
-----------------------------------------------

o glBindBuffer		(GLenum target, GLuint buffer);
o glBufferData		(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
o glBufferSubData	(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
o glClear			(GLbitfield mask);
x glClearColor		(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
x glClearDepthf		(GLclampf depth);
x glClearStencil	(GLint s);
o glDeleteBuffers	(GLsizei n, const GLuint* buffers);
o glGenBuffers		(GLsizei n, GLuint* buffers);
o glReadPixels		(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);

-----------------------------------------------
 Shader API functions
-----------------------------------------------

o glBindAttribLocation		(GLuint program, GLuint index, const GLchar* name);
o glAttachShader			(GLuint program, GLuint shader);
o glCreateShader			(GLenum type);
o glCompileShader			(GLuint shader);
x glCreateProgram			(void);
o glDeleteProgram			(GLuint program);
o glDeleteShader			(GLuint shader);
o glDetachShader			(GLuint program, GLuint shader);
o glGetActiveAttrib			(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
o glGetActiveUniform		(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
o glGetAttribLocation		(GLuint program, const GLchar* name);
o glGetUniformLocation		(GLuint program, const GLchar* name);
o glLinkProgram				(GLuint program);
o glReleaseShaderCompiler	(void);
o glShaderBinary			(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
o glShaderSource			(GLuint shader, GLsizei count, const GLchar** string, const GLint* length);
o glUniform1f				(GLint location, GLfloat x);
o glUniform1fv				(GLint location, GLsizei count, const GLfloat* v);
o glUniform1i				(GLint location, GLint x);
o glUniform1iv				(GLint location, GLsizei count, const GLint* v);
o glUniform2f				(GLint location, GLfloat x, GLfloat y);
o glUniform2fv				(GLint location, GLsizei count, const GLfloat* v);
o glUniform2i				(GLint location, GLint x, GLint y);
o glUniform2iv				(GLint location, GLsizei count, const GLint* v);
o glUniform3f				(GLint location, GLfloat x, GLfloat y, GLfloat z);
o glUniform3fv				(GLint location, GLsizei count, const GLfloat* v);
o glUniform3i				(GLint location, GLint x, GLint y, GLint z);
o glUniform3iv				(GLint location, GLsizei count, const GLint* v);
o glUniform4f				(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
o glUniform4fv				(GLint location, GLsizei count, const GLfloat* v);
o glUniform4i				(GLint location, GLint x, GLint y, GLint z, GLint w);
o glUniform4iv				(GLint location, GLsizei count, const GLint* v);
o glUniformMatrix2fv		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUniformMatrix3fv		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUniformMatrix4fv		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUseProgram				(GLuint program);
o glValidateProgram			(GLuint program);

-----------------------------------------------
 Texture API functions
-----------------------------------------------

o glActiveTexture			(GLenum texture);
o glBindTexture				(GLenum target, GLuint texture);
o glCompressedTexImage2D	(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);
o glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
o glCopyTexImage2D			(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
o glCopyTexSubImage2D		(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
o glDeleteTextures			(GLsizei n, const GLuint* textures);
o glGenerateMipmap			(GLenum target);
o glGenTextures				(GLsizei n, GLuint* textures);
o glPixelStorei				(GLenum pname, GLint param);
o glTexImage2D				(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
o glTexParameterf			(GLenum target, GLenum pname, GLfloat param);
o glTexParameterfv			(GLenum target, GLenum pname, const GLfloat* params);
o glTexParameteri			(GLenum target, GLenum pname, GLint param);
o glTexParameteriv			(GLenum target, GLenum pname, const GLint* params);
o glTexSubImage2D			(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels);

-----------------------------------------------
 Vertex Array API functions
-----------------------------------------------

o glDisableVertexAttribArray	(GLuint index);
o glDrawArrays					(GLenum mode, GLint first, GLsizei count);
o glDrawElements				(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
o glEnableVertexAttribArray		(GLuint index);
o glVertexAttrib1f				(GLuint indx, GLfloat x);
o glVertexAttrib1fv				(GLuint indx, const GLfloat* values);
o glVertexAttrib2f				(GLuint indx, GLfloat x, GLfloat y);
o glVertexAttrib2fv				(GLuint indx, const GLfloat* values);
o glVertexAttrib3f				(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
o glVertexAttrib3fv				(GLuint indx, const GLfloat* values);
o glVertexAttrib4f				(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
o glVertexAttrib4fv				(GLuint indx, const GLfloat* values);
o glVertexAttribPointer			(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);

-----------------------------------------------
 Rasterization API functions
-----------------------------------------------

o glCullFace		(GLenum mode);
o glFrontFace		(GLenum mode);
o glLineWidth		(GLfloat width);
x glPolygonOffset	(GLfloat factor, GLfloat units);

-----------------------------------------------
 Named object usage
-----------------------------------------------

o glIsBuffer			(GLuint buffer);
o glIsFramebuffer		(GLuint framebuffer);
o glIsProgram			(GLuint program);
o glIsRenderbuffer		(GLuint renderbuffer);
o glIsShader			(GLuint shader);
o glIsTexture			(GLuint texture);
