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