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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶m[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, ¶m[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, ¶m[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[0]); 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetTexParameterfv (GL_TEXTURE_2D, -1, ¶ms[0]); 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetTexParameterfv (-1, -1, ¶ms[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, ¶ms[0]); 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetTexParameteriv (GL_TEXTURE_2D, -1, ¶ms[0]); 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetTexParameteriv (-1, -1, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBufferParameteriv(GL_ARRAY_BUFFER, -1, ¶ms); 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBufferParameteriv(-1, -1, ¶ms); 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, ¶ms); 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, ¶ms); 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBufferParameteri64v(GL_ARRAY_BUFFER , -1, ¶ms); 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBufferParameteri64v(-1, -1, ¶ms); 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, ¶ms); 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, ¶ms); 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_INVALID_ENUM); 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetBufferPointerv(-1, GL_BUFFER_MAP_POINTER, ¶ms); 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, ¶ms); 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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[0]); // TYPE is GL_NONE 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError(GL_NO_ERROR); 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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(¶ms[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, ¶ms[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, ¶ms[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, ¶ms[0]); 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError (GL_INVALID_ENUM); 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInternalformativ (GL_RENDERBUFFER, GL_COMPRESSED_RGB8_ETC2, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[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, ¶ms[0]); 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError (GL_INVALID_ENUM); 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInternalformativ (GL_FRAMEBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[0]); 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError (GL_INVALID_ENUM); 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetInternalformativ (GL_TEXTURE_2D, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, ¶ms[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, ¶ms); 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError (GL_INVALID_ENUM); 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetQueryiv (-1, GL_CURRENT_QUERY, ¶ms); 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expectError (GL_INVALID_ENUM); 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glGetQueryiv (-1, -1, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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, ¶ms); 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