-------------------------------------------------------------------------
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 3.0 Negative API tests - Function listing

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

-----------------------------------------------
 Transform feedback
-----------------------------------------------

ES3
o glBindTransformFeedback 		(GLenum target, GLuint id);
o glDeleteTransformFeedbacks 	(GLsizei n, const GLuint* ids);
o glGenTransformFeedbacks 		(GLsizei n, GLuint* ids);
o glPauseTransformFeedback 		(void);
o glResumeTransformFeedback 	(void);
o glBeginTransformFeedback		(GLenum primitiveMode);
o glEndTransformFeedback 		(void);
o glTransformFeedbackVaryings 	(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode);
o glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name);

-----------------------------------------------
 Asynchronous queries
-----------------------------------------------

ES3
o glBeginQuery 		(GLenum target, GLuint id);
o glDeleteQueries 	(GLsizei n, const GLuint* ids);
o glEndQuery 		(GLenum target);
o glGenQueries 		(GLsizei n, GLuint* ids);

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

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

ES3
o glClientWaitSync 	(GLsync sync, GLbitfield flags, GLuint64 timeout);
o glDeleteSync 		(GLsync sync);
o glFenceSync 		(GLenum condition, GLbitfield flags);
o glWaitSync 		(GLsync sync, GLbitfield flags, GLuint64 timeout);

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

ES2
o glDisable 							(GLenum cap);
o glEnable 								(GLenum cap);
o glGetActiveAttrib 					(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
o glGetAttachedShaders 					(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
o glGetBufferParameteriv 				(GLenum target, GLenum pname, GLint* params);
o glGetBooleanv							(GLenum pname, GLboolean* params);
o 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);

ES3
o glGetActiveUniformsiv					(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params);
o glGetActiveUniformBlockiv				(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params);
o glGetActiveUniformBlockName			(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName);
o glGetBufferParameteri64v 				(GLenum target, GLenum pname, GLint64* params);
o glGetBufferPointerv 					(GLenum target, GLenum pname, GLvoid** params);
o glGetFragDataLocation 				(GLuint program, const GLchar *name);
o glGetIntegeri_v 						(GLenum target, GLuint index, GLint* data);
o glGetInteger64i_v 					(GLenum target, GLuint index, GLint64* data);
o glGetInternalformativ 				(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params);
o glGetInteger64v 						(GLenum pname, GLint64* params);
o glGetQueryiv 							(GLenum target, GLenum pname, GLint* params);
o glGetQueryObjectuiv 					(GLuint id, GLenum pname, GLuint* params);
o glGetStringi 							(GLenum name, GLuint index);
o glGetSynciv 							(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);
o glGetUniformuiv 						(GLuint program, GLint location, GLuint* params);
o glGetUniformBlockIndex 				(GLuint program, const GLchar* uniformBlockName);
o glGetUniformIndices 					(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices);
o glGetVertexAttribIiv 					(GLuint index, GLenum pname, GLint* params);
o glGetVertexAttribIuiv 				(GLuint index, GLenum pname, GLuint* params);

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

ES2
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
-----------------------------------------------

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

ES3
o glBlitFramebuffer 				(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
o glFramebufferTextureLayer 		(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
o glInvalidateFramebuffer 			(GLenum target, GLsizei numAttachments, const GLenum* attachments);
o glInvalidateSubFramebuffer 		(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height);
o glRenderbufferStorageMultisample 	(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);

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

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

ES3
o glBindBufferRange 		(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
o glBindBufferBase 			(GLenum target, GLuint index, GLuint buffer);
o glClearBufferiv 			(GLenum buffer, GLint drawbuffer, const GLint* value);
o glClearBufferuiv 			(GLenum buffer, GLint drawbuffer, const GLuint* value);
o glClearBufferfv 			(GLenum buffer, GLint drawbuffer, const GLfloat* value);
o glClearBufferfi 			(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
o glCopyBufferSubData 		(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
o glDrawBuffers 			(GLsizei n, const GLenum* bufs);
o glFlushMappedBufferRange 	(GLenum target, GLintptr offset, GLsizeiptr length);
o glMapBufferRange 			(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
o glReadBuffer 				(GLenum mode);
o glUnmapBuffer 			(GLenum target);

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

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

ES3
o glBindSampler 			(GLuint unit, GLuint sampler);
o glDeleteSamplers 			(GLsizei count, const GLuint* samplers);
o glGenSamplers 			(GLsizei count, GLuint* samplers);
o glGetProgramBinary 		(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary);
o glGetSamplerParameteriv 	(GLuint sampler, GLenum pname, GLint* params);
o glGetSamplerParameterfv 	(GLuint sampler, GLenum pname, GLfloat* params);
o glProgramBinary 			(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length);
o glProgramParameteri 		(GLuint program, GLenum pname, GLint value);
o glSamplerParameteri 		(GLuint sampler, GLenum pname, GLint param);
o glSamplerParameteriv 		(GLuint sampler, GLenum pname, const GLint* param);
o glSamplerParameterf 		(GLuint sampler, GLenum pname, GLfloat param);
o glSamplerParameterfv 		(GLuint sampler, GLenum pname, const GLfloat* param);
o glUniform1ui 				(GLint location, GLuint v0);
o glUniform2ui 				(GLint location, GLuint v0, GLuint v1);
o glUniform3ui 				(GLint location, GLuint v0, GLuint v1, GLuint v2);
o glUniform4ui 				(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
o glUniform1uiv 			(GLint location, GLsizei count, const GLuint* value);
o glUniform2uiv 			(GLint location, GLsizei count, const GLuint* value);
o glUniform3uiv 			(GLint location, GLsizei count, const GLuint* value);
o glUniform4uiv 			(GLint location, GLsizei count, const GLuint* value);
o glUniformBlockBinding 	(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
o glUniformMatrix2x3fv 		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUniformMatrix3x2fv 		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUniformMatrix2x4fv 		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUniformMatrix4x2fv 		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUniformMatrix3x4fv 		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
o glUniformMatrix4x3fv 		(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);

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

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

ES3
o glCopyTexSubImage3D 		(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
o glCompressedTexImage3D 	(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
o glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
o glTexImage3D 				(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
o glTexStorage2D 			(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
o glTexStorage3D 			(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
o glTexSubImage3D 			(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);

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

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

ES3
o glBindVertexArray 			(GLuint array);
o glDeleteVertexArrays 			(GLsizei n, const GLuint* arrays);
o glDrawArraysInstanced 		(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
o glDrawElementsInstanced 		(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount);
o glDrawRangeElements 			(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices);
o glGenVertexArrays 			(GLsizei n, GLuint* arrays);
o glVertexAttribIPointer 		(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);
o glVertexAttribI4i 			(GLuint index, GLint x, GLint y, GLint z, GLint w);
o glVertexAttribI4ui 			(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
o glVertexAttribI4iv 			(GLuint index, const GLint* v);
o glVertexAttribI4uiv 			(GLuint index, const GLuint* v);
o glVertexAttribDivisor 		(GLuint index, GLuint divisor);

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

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

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

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

ES3
o glIsQuery 			(GLuint id);
o glIsSampler 			(GLuint sampler);
o glIsSync 				(GLsync sync);
o glIsTransformFeedback (GLuint id);
o glIsVertexArray		(GLuint array);
