13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.0 Module
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * -------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Negative GL State API tests.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es3fNegativeStateApiTests.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es3fApiCase.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderProgram.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deMemory.h"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwDefs.hpp"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace glw; // GL types
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles3
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog;
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* uniformTestVertSource	=	"#version 300 es\n"
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"uniform mediump vec4 vUnif_vec4;\n"
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"in mediump vec4 attr;"
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"layout(shared) uniform Block { mediump vec4 blockVar; };\n"
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"void main (void)\n"
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"{\n"
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"	gl_Position = vUnif_vec4 + blockVar + attr;\n"
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"}\n\0";
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic const char* uniformTestFragSource	=	"#version 300 es\n"
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"uniform mediump ivec4 fUnif_ivec4;\n"
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"uniform mediump uvec4 fUnif_uvec4;\n"
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"layout(location = 0) out mediump vec4 fragColor;"
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"void main (void)\n"
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"{\n"
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"	fragColor = vec4(vec4(fUnif_ivec4) + vec4(fUnif_uvec4));\n"
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry												"}\n\0";
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
603c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNegativeStateApiTests::NegativeStateApiTests (Context& context)
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: TestCaseGroup(context, "state", "Negative GL State API Cases")
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
653c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNegativeStateApiTests::~NegativeStateApiTests (void)
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid NegativeStateApiTests::init (void)
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Enabling & disabling states
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(enable, "Invalid glEnable() usage",
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glEnable(-1);
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(disable, "Invalid glDisable() usage",
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDisable(-1);
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Simple state queries
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_booleanv, "Invalid glGetBooleanv() usage",
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean params = GL_FALSE;
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBooleanv(-1, &params);
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_floatv, "Invalid glGetFloatv() usage",
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLfloat params = 0.0f;
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFloatv(-1, &params);
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_integerv, "Invalid glGetIntegerv() usage",
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params = -1;
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(-1, &params);
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_integer64v, "Invalid glGetInteger64v() usage",
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint64 params = -1;
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInteger64v(-1, &params);
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_integeri_v, "Invalid glGetIntegeri_v() usage",
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint data = -1;
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint maxUniformBufferBindings;
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegeri_v(-1, 0, &data);
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is outside of the valid range for the indexed state target.");
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_NO_ERROR);
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, maxUniformBufferBindings, &data);
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_integer64i_v, "Invalid glGetInteger64i_v() usage",
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint64 data = (GLint64)-1;;
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint maxUniformBufferBindings;
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInteger64i_v(-1, 0, &data);
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is outside of the valid range for the indexed state target.");
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_NO_ERROR);
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInteger64i_v(GL_UNIFORM_BUFFER_START, maxUniformBufferBindings, &data);
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_string, "Invalid glGetString() usage",
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetString(-1);
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_stringi, "Invalid glGetStringi() usage",
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint numExtensions;
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value.");
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetStringi(-1, 0);
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is outside the valid range for indexed state name.");
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetStringi(GL_EXTENSIONS, numExtensions);
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Enumerated state queries: Shaders
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_attached_shaders, "Invalid glGetAttachedShaders() usage",
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shaders[1];
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shaderObject = glCreateShader(GL_VERTEX_SHADER);
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint program		= glCreateProgram();
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsizei count[1];
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetAttachedShaders(-1, 1, &count[0], &shaders[0]);
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetAttachedShaders(shaderObject, 1, &count[0], &shaders[0]);
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxCount is less than 0.");
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetAttachedShaders(program, -1, &count[0], &shaders[0]);
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shaderObject);
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(program);
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_shaderiv, "Invalid glGetShaderiv() usage",
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean shaderCompilerSupported;
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_SHADER_COMPILER = " << (shaderCompilerSupported ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader	= glCreateShader(GL_VERTEX_SHADER);
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint program	= glCreateProgram();
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint param[1]	= { -1 };
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderiv(shader, -1, &param[0]);
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderiv(-1, GL_SHADER_TYPE, &param[0]);
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader does not refer to a shader object.");
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderiv(program, GL_SHADER_TYPE, &param[0]);
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(program);
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_shader_info_log, "Invalid glGetShaderInfoLog() usage",
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader	= glCreateShader(GL_VERTEX_SHADER);
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint program	= glCreateProgram();
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsizei length[1];
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			char infoLog[128];
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderInfoLog(-1, 128, &length[0], &infoLog[0]);
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object.");
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderInfoLog(program, 128, &length[0], &infoLog[0]);
2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxLength is less than 0.");
2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderInfoLog(shader, -1, &length[0], &infoLog[0]);
2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(program);
2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_shader_precision_format, "Invalid glGetShaderPrecisionFormat() usage",
2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean shaderCompilerSupported;
2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_SHADER_COMPILER = " << (shaderCompilerSupported ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint range[2];
2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint precision[1];
2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			deMemset(&range[0], 0xcd, sizeof(range));
2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			deMemset(&precision[0], 0xcd, sizeof(precision));
2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if shaderType or precisionType is not an accepted value.");
2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderPrecisionFormat (-1, GL_MEDIUM_FLOAT, &range[0], &precision[0]);
2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderPrecisionFormat (GL_VERTEX_SHADER, -1, &range[0], &precision[0]);
2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderPrecisionFormat (-1, -1, &range[0], &precision[0]);
2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_shader_source, "Invalid glGetShaderSource() usage",
2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsizei length[1];
2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			char source[1];
2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint program	= glCreateProgram();
2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader	= glCreateShader(GL_VERTEX_SHADER);
2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderSource(-1, 1, &length[0], &source[0]);
2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object.");
2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderSource(program, 1, &length[0], &source[0]);
2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0.");
2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetShaderSource(shader, -1, &length[0], &source[0]);
2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(program);
3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Enumerated state queries: Programs
3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_programiv, "Invalid glGetProgramiv() usage",
3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint program	= glCreateProgram();
3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader	= glCreateShader(GL_VERTEX_SHADER);
3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params[1]	= { -1 };
3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv(program, -1, &params[0]);
3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv(-1, GL_LINK_STATUS, &params[0]);
3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program does not refer to a program object.");
3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv(shader, GL_LINK_STATUS, &params[0]);
3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(program);
3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_program_info_log, "Invalid glGetProgramInfoLog() usage",
3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint program	= glCreateProgram();
3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader	= glCreateShader(GL_VERTEX_SHADER);
3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsizei length[1];
3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			char infoLog[1];
3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramInfoLog (-1, 1, &length[0], &infoLog[0]);
3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramInfoLog (shader, 1, &length[0], &infoLog[0]);
3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxLength is less than 0.");
3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramInfoLog (program, -1, &length[0], &infoLog[0]);
3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(program);
3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Enumerated state queries: Shader variables
3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_tex_parameterfv, "Invalid glGetTexParameterfv() usage",
3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLfloat params[1];
3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetTexParameterfv (-1, GL_TEXTURE_MAG_FILTER, &params[0]);
3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetTexParameterfv (GL_TEXTURE_2D, -1, &params[0]);
3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetTexParameterfv (-1, -1, &params[0]);
3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_tex_parameteriv, "Invalid glGetTexParameteriv() usage",
3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params[1];
3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetTexParameteriv (-1, GL_TEXTURE_MAG_FILTER, &params[0]);
3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetTexParameteriv (GL_TEXTURE_2D, -1, &params[0]);
3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetTexParameteriv (-1, -1, &params[0]);
3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_uniformfv, "Invalid glGetUniformfv() usage",
3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint unif = glGetUniformLocation(program.getProgram(), "vUnif_vec4");	// vec4
3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (unif == -1)
3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location");
3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader		= glCreateShader(GL_VERTEX_SHADER);
3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint programEmpty = glCreateProgram();
3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLfloat params[4];
3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformfv (-1, unif, &params[0]);
4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformfv (shader, unif, &params[0]);
4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformfv (programEmpty, unif, &params[0]);
4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid uniform variable location for the specified program object.");
4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformfv (program.getProgram(), -1, &params[0]);
4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(programEmpty);
4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_uniformiv, "Invalid glGetUniformiv() usage",
4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint unif = glGetUniformLocation(program.getProgram(), "fUnif_ivec4");	// ivec4
4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (unif == -1)
4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location");
4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader		= glCreateShader(GL_VERTEX_SHADER);
4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint programEmpty = glCreateProgram();
4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params[4];
4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformiv (-1, unif, &params[0]);
4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformiv (shader, unif, &params[0]);
4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformiv (programEmpty, unif, &params[0]);
4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid uniform variable location for the specified program object.");
4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformiv (program.getProgram(), -1, &params[0]);
4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(programEmpty);
4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_uniformuiv, "Invalid glGetUniformuiv() usage",
4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint unif = glGetUniformLocation(program.getProgram(), "fUnif_uvec4");	// uvec4
4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (unif == -1)
4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location");
4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader		= glCreateShader(GL_VERTEX_SHADER);
4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint programEmpty = glCreateProgram();
4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint params[4];
4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformuiv (-1, unif, &params[0]);
4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformuiv (shader, unif, &params[0]);
4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked.");
4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformuiv (programEmpty, unif, &params[0]);
4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if location does not correspond to a valid uniform variable location for the specified program object.");
4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformuiv (program.getProgram(), -1, &params[0]);
4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(programEmpty);
4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_active_uniform, "Invalid glGetActiveUniform() usage",
4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint				shader				= glCreateShader(GL_VERTEX_SHADER);
4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram	program				(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint				numActiveUniforms	= -1;
4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv	(program.getProgram(), GL_ACTIVE_UNIFORMS,	&numActiveUniforms);
5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_ACTIVE_UNIFORMS = " << numActiveUniforms << " (expected 4)." << TestLog::EndMessage;
5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniform(-1, 0, 0, 0, 0, 0, 0);
5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniform(shader, 0, 0, 0, 0, 0, 0);
5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to the number of active uniform variables in program.");
5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniform(program.getProgram(), numActiveUniforms, 0, 0, 0, 0, 0);
5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0.");
5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniform(program.getProgram(), 0, -1, 0, 0, 0, 0);
5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(0);
5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_active_uniformsiv, "Invalid glGetActiveUniformsiv() usage",
5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint					shader				= glCreateShader(GL_VERTEX_SHADER);
5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram		program				(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint					dummyUniformIndex	= 1;
5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint					dummyParamDst		= -1;
5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint					numActiveUniforms	= -1;
5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv	(program.getProgram(), GL_ACTIVE_UNIFORMS, &numActiveUniforms);
5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_ACTIVE_UNIFORMS = " << numActiveUniforms << " (expected 4)." << TestLog::EndMessage;
5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniformsiv(-1, 1, &dummyUniformIndex, GL_UNIFORM_TYPE, &dummyParamDst);
5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniformsiv(shader, 1, &dummyUniformIndex, GL_UNIFORM_TYPE, &dummyParamDst);
5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if any value in uniformIndices is greater than or equal to the value of GL_ACTIVE_UNIFORMS for program.");
5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			for (int excess = 0; excess <= 2; excess++)
5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				std::vector<GLuint> invalidUniformIndices;
5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				invalidUniformIndices.push_back(1);
5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				invalidUniformIndices.push_back(numActiveUniforms-1+excess);
5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				invalidUniformIndices.push_back(1);
5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				std::vector<GLint> dummyParamsDst(invalidUniformIndices.size());
5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				glGetActiveUniformsiv(program.getProgram(), (GLsizei)invalidUniformIndices.size(), &invalidUniformIndices[0], GL_UNIFORM_TYPE, &dummyParamsDst[0]);
5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				expectError(excess == 0 ? GL_NO_ERROR : GL_INVALID_VALUE);
5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted token.");
5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniformsiv(program.getProgram(), 1, &dummyUniformIndex, -1, &dummyParamDst);
5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(0);
5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_active_uniform_blockiv, "Invalid glGetActiveUniformBlockiv() usage",
5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram	program			(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint				params			= -1;
5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint				numActiveBlocks	= -1;
5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv	(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,	&numActiveBlocks);
5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = " << numActiveBlocks << " (expected 1)." << TestLog::EndMessage;
5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError		(GL_NO_ERROR);
5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if uniformBlockIndex is greater than or equal to the value of GL_ACTIVE_UNIFORM_BLOCKS or is not the index of an active uniform block in program.");
5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_NO_ERROR);
5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniformBlockiv(program.getProgram(), numActiveBlocks, GL_UNIFORM_BLOCK_BINDING, &params);
5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the accepted tokens.");
5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniformBlockiv(program.getProgram(), 0, -1, &params);
5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(0);
5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_active_uniform_block_name, "Invalid glGetActiveUniformBlockName() usage",
5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram	program			(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsizei				length			= -1;
6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint				numActiveBlocks	= -1;
6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLchar				uniformBlockName[128];
6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			deMemset(&uniformBlockName[0], 0, sizeof(uniformBlockName));
6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv	(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,	&numActiveBlocks);
6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = " << numActiveBlocks << " (expected 1)." << TestLog::EndMessage;
6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError		(GL_NO_ERROR);
6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if uniformBlockIndex is greater than or equal to the value of GL_ACTIVE_UNIFORM_BLOCKS or is not the index of an active uniform block in program.");
6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_NO_ERROR);
6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveUniformBlockName(program.getProgram(), numActiveBlocks, (int)sizeof(uniformBlockName), &length, &uniformBlockName[0]);
6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(0);
6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_active_attrib, "Invalid glGetActiveAttrib() usage",
6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint				shader				= glCreateShader(GL_VERTEX_SHADER);
6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram	program				(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint				numActiveAttributes	= -1;
6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsizei				length				= -1;
6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint				size				= -1;
6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLenum				type				= -1;
6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLchar				name[32];
6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			deMemset(&name[0], 0, sizeof(name));
6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv	(program.getProgram(), GL_ACTIVE_ATTRIBUTES,	&numActiveAttributes);
6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_ACTIVE_ATTRIBUTES = " << numActiveAttributes << " (expected 1)." << TestLog::EndMessage;
6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(program.getProgram());
6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveAttrib(-1, 0, 32, &length, &size, &type, &name[0]);
6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object.");
6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveAttrib(shader, 0, 32, &length, &size, &type, &name[0]);
6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_ACTIVE_ATTRIBUTES.");
6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveAttrib(program.getProgram(), numActiveAttributes, (int)sizeof(name), &length, &size, &type, &name[0]);
6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0.");
6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetActiveAttrib(program.getProgram(), 0, -1, &length, &size, &type, &name[0]);
6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(0);
6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_uniform_indices, "Invalid glGetUniformIndices() usage",
6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader			= glCreateShader(GL_VERTEX_SHADER);
6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint numActiveBlocks = -1;
6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			const GLchar* uniformName =  "Block.blockVar";
6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint uniformIndices = -1;
6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetProgramiv	(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,	&numActiveBlocks);
6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = "		<< numActiveBlocks			<< TestLog::EndMessage;
6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError		(GL_NO_ERROR);
6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is a name of shader object.");
6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformIndices(shader, 1, &uniformName, &uniformIndices);
6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not name of program or shader object.");
6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint invalid = -1;
6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetUniformIndices(invalid, 1, &uniformName, &uniformIndices);
6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glUseProgram(0);
6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_vertex_attribfv, "Invalid glGetVertexAttribfv() usage",
6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLfloat params = 0.0f;
6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribfv(0, -1, &params);
6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint maxVertexAttribs;
6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribfv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_vertex_attribiv, "Invalid glGetVertexAttribiv() usage",
7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params = -1;
7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribiv(0, -1, &params);
7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint maxVertexAttribs;
7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_vertex_attribi_iv, "Invalid glGetVertexAttribIiv() usage",
7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params = -1;
7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribIiv(0, -1, &params);
7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint maxVertexAttribs;
7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribIiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_vertex_attribi_uiv, "Invalid glGetVertexAttribIuiv() usage",
7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint params = (GLuint)-1;
7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribIuiv(0, -1, &params);
7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint maxVertexAttribs;
7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribIuiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_vertex_attrib_pointerv, "Invalid glGetVertexAttribPointerv() usage",
7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLvoid* ptr[1] = { DE_NULL };
7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribPointerv(0, -1, &ptr[0]);
7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint maxVertexAttribs;
7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetVertexAttribPointerv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_POINTER, &ptr[0]);
7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_VALUE);
7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_frag_data_location, "Invalid glGetFragDataLocation() usage",
7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint shader	= glCreateShader(GL_VERTEX_SHADER);
7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint program	= glCreateProgram();
7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is the name of a shader object.");
7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFragDataLocation(shader, "gl_FragColor");
7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been linked.");
7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFragDataLocation(program, "gl_FragColor");
7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram(program);
7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader(shader);
7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Enumerated state queries: Buffers
7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_buffer_parameteriv, "Invalid glGetBufferParameteriv() usage",
7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params = -1;
7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint buf;
7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenBuffers(1, &buf);
7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer(GL_ARRAY_BUFFER, buf);
7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or value is not an accepted value.");
7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteriv(-1, GL_BUFFER_SIZE, &params);
7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteriv(GL_ARRAY_BUFFER, -1, &params);
7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteriv(-1, -1, &params);
7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer(GL_ARRAY_BUFFER, 0);
8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &params);
8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteBuffers(1, &buf);
8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_buffer_parameteri64v, "Invalid glGetBufferParameteri64v() usage",
8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint64 params = -1;
8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint buf;
8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenBuffers(1, &buf);
8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer(GL_ARRAY_BUFFER, buf);
8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or value is not an accepted value.");
8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteri64v(-1, GL_BUFFER_SIZE, &params);
8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteri64v(GL_ARRAY_BUFFER , -1, &params);
8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteri64v(-1, -1, &params);
8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer(GL_ARRAY_BUFFER, 0);
8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferParameteri64v(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &params);
8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteBuffers(1, &buf);
8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_buffer_pointerv, "Invalid glGetBufferPointerv() usage",
8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLvoid* params = DE_NULL;
8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint buf;
8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenBuffers(1, &buf);
8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer(GL_ARRAY_BUFFER, buf);
8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferPointerv(GL_ARRAY_BUFFER, -1, &params);
8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferPointerv(-1, GL_BUFFER_MAP_POINTER, &params);
8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.");
8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer(GL_ARRAY_BUFFER, 0);
8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetBufferPointerv(GL_ARRAY_BUFFER, GL_BUFFER_MAP_POINTER, &params);
8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteBuffers(1, &buf);
8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_framebuffer_attachment_parameteriv, "Invalid glGetFramebufferAttachmentParameteriv() usage",
8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params[1] = { -1 };
8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint fbo;
8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint rbo[2];
8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenFramebuffers			(1, &fbo);
8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenRenderbuffers			(2, rbo);
8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindFramebuffer			(GL_FRAMEBUFFER,	fbo);
8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindRenderbuffer			(GL_RENDERBUFFER,	rbo[0]);
8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glRenderbufferStorage		(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 16, 16);
8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glFramebufferRenderbuffer	(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo[0]);
8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindRenderbuffer			(GL_RENDERBUFFER,	rbo[1]);
8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glRenderbufferStorage		(GL_RENDERBUFFER, GL_STENCIL_INDEX8, 16, 16);
8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glFramebufferRenderbuffer	(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo[1]);
8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glCheckFramebufferStatus	(GL_FRAMEBUFFER);
8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError					(GL_NO_ERROR);
8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not one of the accepted tokens.");
8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(-1, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &params[0]);					// TYPE is GL_RENDERBUFFER
8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not valid for the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE.");
8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &params[0]);	// TYPE is GL_RENDERBUFFER
8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindFramebuffer(GL_FRAMEBUFFER, 0);
8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);					// TYPE is GL_FRAMEBUFFER_DEFAULT
8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindFramebuffer(GL_FRAMEBUFFER, fbo);
8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if attachment is GL_DEPTH_STENCIL_ATTACHMENT and different objects are bound to the depth and stencil attachment points of target.");
8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);
8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE is GL_NONE and pname is not GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME.");
8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);		// TYPE is GL_NONE
8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_NO_ERROR);
8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE, &params[0]);	// TYPE is GL_NONE
8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION);
8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION or GL_INVALID_ENUM is generated if attachment is not one of the accepted values for the current binding of target.");
9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);					// A FBO is bound so GL_BACK is invalid
9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION, GL_INVALID_ENUM);
9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindFramebuffer(GL_FRAMEBUFFER, 0);
9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);		// Default framebuffer is bound so GL_COLOR_ATTACHMENT0 is invalid
9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_OPERATION, GL_INVALID_ENUM);
9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteFramebuffers(1, &fbo);
9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_renderbuffer_parameteriv, "Invalid glGetRenderbufferParameteriv() usage",
9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params[1] = { -1 };
9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint rbo;
9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenRenderbuffers(1, &rbo);
9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindRenderbuffer(GL_RENDERBUFFER, rbo);
9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetRenderbufferParameteriv(-1, GL_RENDERBUFFER_WIDTH, &params[0]);
9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the accepted tokens.");
9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetRenderbufferParameteriv(GL_RENDERBUFFER, -1, &params[0]);
9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteRenderbuffers(1, &rbo);
9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindRenderbuffer(GL_RENDERBUFFER, 0);
9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_internalformativ, "Invalid glGetInternalformativ() usage",
9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params[16];
9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			deMemset(&params[0], 0xcd, sizeof(params));
9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is negative.");
9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInternalformativ	(GL_RENDERBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, -1, &params[0]);
9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError				(GL_INVALID_VALUE);
9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not GL_SAMPLES or GL_NUM_SAMPLE_COUNTS.");
9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInternalformativ	(GL_RENDERBUFFER, GL_RGBA8, -1, 16, &params[0]);
9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError				(GL_INVALID_ENUM);
9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if internalformat is not color-, depth-, or stencil-renderable.");
9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInternalformativ	(GL_RENDERBUFFER, GL_RG8_SNORM, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError				(GL_INVALID_ENUM);
9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInternalformativ	(GL_RENDERBUFFER, GL_COMPRESSED_RGB8_ETC2, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError				(GL_INVALID_ENUM);
9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInternalformativ	(-1, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError				(GL_INVALID_ENUM);
9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInternalformativ	(GL_FRAMEBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError				(GL_INVALID_ENUM);
9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetInternalformativ	(GL_TEXTURE_2D, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError				(GL_INVALID_ENUM);
9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Query object queries
9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_queryiv, "Invalid glGetQueryiv() usage",
9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint params = -1;
9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetQueryiv	(GL_ANY_SAMPLES_PASSED, -1, &params);
9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError		(GL_INVALID_ENUM);
9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetQueryiv	(-1, GL_CURRENT_QUERY, &params);
9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError		(GL_INVALID_ENUM);
9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetQueryiv	(-1, -1, &params);
9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError		(GL_INVALID_ENUM);
9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_query_objectuiv, "Invalid glGetQueryObjectuiv() usage",
9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint params	= -1;
9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint id;
9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenQueries		(1, &id);
9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if id is not the name of a query object.");
9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetQueryObjectuiv	(-1, GL_QUERY_RESULT_AVAILABLE, &params);
9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_INVALID_OPERATION);
9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Message << "// Note: " << id << " is not a query object yet, since it hasn't been used by glBeginQuery" << TestLog::EndMessage;
9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetQueryObjectuiv	(id, GL_QUERY_RESULT_AVAILABLE, &params);
9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_INVALID_OPERATION);
9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBeginQuery		(GL_ANY_SAMPLES_PASSED, id);
9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glEndQuery			(GL_ANY_SAMPLES_PASSED);
9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetQueryObjectuiv	(id, -1, &params);
9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_INVALID_ENUM);
9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if id is the name of a currently active query object.");
10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBeginQuery		(GL_ANY_SAMPLES_PASSED, id);
10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetQueryObjectuiv	(id, GL_QUERY_RESULT_AVAILABLE, &params);
10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_INVALID_OPERATION);
10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glEndQuery			(GL_ANY_SAMPLES_PASSED);
10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteQueries		(1, &id);
10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Sync object queries
10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(get_synciv, "Invalid glGetSynciv() usage",
10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsizei length	= -1;
10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint	values[32];
10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsync	sync;
10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			deMemset(&values[0], 0xcd, sizeof(values));
10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if sync is not the name of a sync object.");
10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetSynciv	(0, GL_OBJECT_TYPE, 32, &length, &values[0]);
10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError	(GL_INVALID_VALUE);
10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the accepted tokens.");
10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError	(GL_NO_ERROR);
10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGetSynciv	(sync, -1, 32, &length, &values[0]);
10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError	(GL_INVALID_ENUM);
10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Enumerated boolean state queries
10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_enabled, "Invalid glIsEnabled() usage",
10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not an accepted value.");
10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glIsEnabled(-1);
10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glIsEnabled(GL_TRIANGLES);
10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Hints
10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(hint, "Invalid glHint() usage",
10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if either target or mode is not an accepted value.");
10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glHint(GL_GENERATE_MIPMAP_HINT, -1);
10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glHint(-1, GL_FASTEST);
10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glHint(-1, -1);
10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError(GL_INVALID_ENUM);
10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Named Object Usage
10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_buffer, "Invalid glIsBuffer() usage",
10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		buffer = 0;
10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isBuffer;
10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenBuffers, but not yet associated with a buffer object by calling glBindBuffer, is not the name of a buffer object.");
10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isBuffer		= glIsBuffer(buffer);
10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans	(isBuffer, GL_FALSE);
10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenBuffers	(1, &buffer);
10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isBuffer		= glIsBuffer(buffer);
10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans	(isBuffer, GL_FALSE);
10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer	(GL_ARRAY_BUFFER, buffer);
10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isBuffer		= glIsBuffer(buffer);
10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans	(isBuffer, GL_TRUE);
10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindBuffer	(GL_ARRAY_BUFFER, 0);
10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteBuffers	(1, &buffer);
10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isBuffer		= glIsBuffer(buffer);
10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans	(isBuffer, GL_FALSE);
10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_framebuffer, "Invalid glIsFramebuffer() usage",
10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		fbo = 0;
10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isFbo;
10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenFramebuffers, but not yet bound through a call to glBindFramebuffer is not the name of a framebuffer object.");
10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isFbo				= glIsFramebuffer(fbo);
10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isFbo, GL_FALSE);
10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenFramebuffers	(1, &fbo);
10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isFbo				= glIsFramebuffer(fbo);
11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isFbo, GL_FALSE);
11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindFramebuffer	(GL_FRAMEBUFFER, fbo);
11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isFbo				= glIsFramebuffer(fbo);
11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isFbo, GL_TRUE);
11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindFramebuffer	(GL_FRAMEBUFFER, 0);
11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteFramebuffers(1, &fbo);
11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isFbo				= glIsFramebuffer(fbo);
11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isFbo, GL_FALSE);
11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_program, "Invalid glIsProgram() usage",
11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		program = 0;
11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isProgram;
11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name created with glCreateProgram, and not yet deleted with glDeleteProgram is a name of a program object.");
11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isProgram			= glIsProgram(program);
11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isProgram, GL_FALSE);
11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			program				= glCreateProgram();
11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isProgram			= glIsProgram(program);
11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isProgram, GL_TRUE);
11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteProgram		(program);
11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isProgram			= glIsProgram(program);
11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isProgram, GL_FALSE);
11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_renderbuffer, "Invalid glIsRenderbuffer() usage",
11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		rbo = 0;
11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isRbo;
11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenRenderbuffers, but not yet bound through a call to glBindRenderbuffer or glFramebufferRenderbuffer is not the name of a renderbuffer object.");
11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isRbo					= glIsRenderbuffer(rbo);
11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isRbo, GL_FALSE);
11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenRenderbuffers		(1, &rbo);
11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isRbo					= glIsRenderbuffer(rbo);
11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isRbo, GL_FALSE);
11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindRenderbuffer		(GL_RENDERBUFFER, rbo);
11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isRbo					= glIsRenderbuffer(rbo);
11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isRbo, GL_TRUE);
11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindRenderbuffer		(GL_RENDERBUFFER, 0);
11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteRenderbuffers	(1, &rbo);
11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isRbo					= glIsRenderbuffer(rbo);
11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isRbo, GL_FALSE);
11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_shader, "Invalid glIsShader() usage",
11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		shader = 0;
11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isShader;
11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name created with glCreateShader, and not yet deleted with glDeleteShader is a name of a shader object.");
11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isShader			= glIsProgram(shader);
11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isShader, GL_FALSE);
11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			shader				= glCreateShader(GL_VERTEX_SHADER);
11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isShader			= glIsShader(shader);
11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isShader, GL_TRUE);
11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteShader		(shader);
11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isShader			= glIsShader(shader);
11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isShader, GL_FALSE);
11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_texture, "Invalid glIsTexture() usage",
11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		texture = 0;
11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isTexture;
11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenTextures, but not yet bound through a call to glBindTexture is not the name of a texture.");
11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTexture			= glIsTexture(texture);
11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isTexture, GL_FALSE);
11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenTextures		(1, &texture);
11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTexture			= glIsTexture(texture);
11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isTexture, GL_FALSE);
11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindTexture		(GL_TEXTURE_2D, texture);
11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTexture			= glIsTexture(texture);
11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isTexture, GL_TRUE);
11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindTexture		(GL_TEXTURE_2D, 0);
11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteTextures	(1, &texture);
11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTexture			= glIsTexture(texture);
11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isTexture, GL_FALSE);
12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_query, "Invalid glIsQuery() usage",
12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		query = 0;
12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isQuery;
12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenQueries, but not yet associated with a query object by calling glBeginQuery, is not the name of a query object.");
12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isQuery				= glIsQuery(query);
12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isQuery, GL_FALSE);
12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenQueries		(1, &query);
12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isQuery				= glIsQuery(query);
12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isQuery, GL_FALSE);
12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBeginQuery		(GL_ANY_SAMPLES_PASSED, query);
12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isQuery				= glIsQuery(query);
12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isQuery, GL_TRUE);
12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glEndQuery			(GL_ANY_SAMPLES_PASSED);
12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteQueries		(1, &query);
12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isQuery				= glIsQuery(query);
12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isQuery, GL_FALSE);
12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_sampler, "Invalid glIsSampler() usage",
12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		sampler = 0;
12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isSampler;
12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenSamplers is the name of a sampler object.");
12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isSampler			= glIsSampler(sampler);
12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isSampler, GL_FALSE);
12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenSamplers		(1, &sampler);
12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isSampler			= glIsSampler(sampler);
12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isSampler, GL_TRUE);
12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindSampler		(0, sampler);
12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isSampler			= glIsSampler(sampler);
12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isSampler, GL_TRUE);
12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteSamplers	(1, &sampler);
12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isSampler			= glIsSampler(sampler);
12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans		(isSampler, GL_FALSE);
12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_sync, "Invalid glIsSync() usage",
12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLsync		sync = 0;
12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isSync;
12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glFenceSync is the name of a sync object.");
12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isSync			= glIsSync(sync);
12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans	(isSync, GL_FALSE);
12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			sync			= glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isSync			= glIsSync(sync);
12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans	(isSync, GL_TRUE);
12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteSync	(sync);
12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isSync			= glIsSync(sync);
12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans	(isSync, GL_FALSE);
12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_transform_feedback, "Invalid glIsTransformFeedback() usage",
12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		tf = 0;
12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isTF;
12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenTransformFeedbacks, but not yet bound using glBindTransformFeedback, is not the name of a transform feedback object.");
12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTF						= glIsTransformFeedback(tf);
12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans				(isTF, GL_FALSE);
12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenTransformFeedbacks		(1, &tf);
12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTF						= glIsTransformFeedback(tf);
12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans				(isTF, GL_FALSE);
12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindTransformFeedback		(GL_TRANSFORM_FEEDBACK, tf);
12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTF						= glIsTransformFeedback(tf);
12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans				(isTF, GL_TRUE);
12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindTransformFeedback		(GL_TRANSFORM_FEEDBACK, 0);
12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteTransformFeedbacks	(1, &tf);
12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isTF						= glIsTransformFeedback(tf);
12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans				(isTF, GL_FALSE);
12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ES3F_ADD_API_CASE(is_vertex_array, "Invalid glIsVertexArray() usage",
12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLuint		vao = 0;
13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLboolean	isVao;
13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::Section("", "A name returned by glGenVertexArrays, but not yet bound using glBindVertexArray, is not the name of a vertex array object.");
13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isVao					= glIsVertexArray(vao);
13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isVao, GL_FALSE);
13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glGenVertexArrays			(1, &vao);
13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isVao					= glIsVertexArray(vao);
13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isVao, GL_FALSE);
13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindVertexArray			(vao);
13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isVao					= glIsVertexArray(vao);
13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isVao, GL_TRUE);
13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glBindVertexArray		(0);
13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			glDeleteVertexArrays	(1, &vao);
13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isVao					= glIsVertexArray(vao);
13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			checkBooleans			(isVao, GL_FALSE);
13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_log << TestLog::EndSection;
13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			expectError			(GL_NO_ERROR);
13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		});
13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional
13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles3
13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp
1328