-------------------------------------------------------------------------
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);