1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*------------------------------------------------------------------------- 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * drawElements Quality Program OpenGL ES 2.0 Module 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ------------------------------------------------- 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2014 The Android Open Source Project 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Licensed under the Apache License, Version 2.0 (the "License"); 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * you may not use this file except in compliance with the License. 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * You may obtain a copy of the License at 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * http://www.apache.org/licenses/LICENSE-2.0 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unless required by applicable law or agreed to in writing, software 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distributed under the License is distributed on an "AS IS" BASIS, 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See the License for the specific language governing permissions and 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * limitations under the License. 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *//*! 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \brief Negative GL State API tests. 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *//*--------------------------------------------------------------------*/ 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "es2fNegativeStateApiTests.hpp" 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "es2fApiCase.hpp" 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "gluShaderProgram.hpp" 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "deMemory.h" 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glwEnums.hpp" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glwDefs.hpp" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgusing namespace glw; // GL types 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace deqp 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace gles2 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace Functional 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgusing tcu::TestLog; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char* uniformTestVertSource = "uniform mediump vec4 vTest;\n" 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "void main (void)\n" 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "{\n" 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org " gl_Position = vTest;\n" 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "}\n\0"; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char* uniformTestFragSource = "uniform mediump ivec4 fTest;\n" 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "void main (void)\n" 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "{\n" 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org " gl_FragColor = vec4(fTest);\n" 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "}\n\0"; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgNegativeStateApiTests::NegativeStateApiTests (Context& context) 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org : TestCaseGroup(context, "state", "Negative GL State API Cases") 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgNegativeStateApiTests::~NegativeStateApiTests (void) 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid NegativeStateApiTests::init (void) 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org // Enabling & disabling states 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(enable, "Invalid glEnable() usage", 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values."); 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glEnable(-1); 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_ENUM); 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(disable, "Invalid glDisable() usage", 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not one of the allowed values."); 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glDisable(-1); 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_ENUM); 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org // Simple state queries 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_booleanv, "Invalid glGetBooleanv() usage", 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values."); 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean params[1] = { GL_FALSE }; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetBooleanv(-1, ¶ms[0]); 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_ENUM); 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_floatv, "Invalid glGetFloatv() usage", 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values."); 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat params[1] = { 0.0f }; 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetFloatv(-1, ¶ms[0]); 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_ENUM); 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_integerv, "Invalid glGetIntegerv() usage", 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values."); 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint params[1] = { 0 }; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetIntegerv(-1, ¶ms[0]); 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_ENUM); 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_string, "Invalid glGetString() usage", 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if name is not an accepted value."); 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetString(0); 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_ENUM); 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org // Enumerated state queries: Shaders 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_attached_shaders, "Invalid glGetAttachedShaders() usage", 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint shaders[1] = { 0 }; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint shaderObject = glCreateShader(GL_VERTEX_SHADER); 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint program = glCreateProgram(); 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei count[1] = { -1 }; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL."); 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetAttachedShaders(-1, 1, &count[0], &shaders[0]); 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_VALUE); 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object."); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetAttachedShaders(shaderObject, 1, &count[0], &shaders[0]); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_OPERATION); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxCount is less than 0."); 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetAttachedShaders(program, -1, &count[0], &shaders[0]); 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_VALUE); 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glDeleteShader(shaderObject); 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glDeleteProgram(program); 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_shaderiv, "Invalid glGetShaderiv() usage", 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean shaderCompilerSupported; 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported); 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!shaderCompilerSupported) 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Message << "// Shader compiler not supported, always expect GL_INVALID_OPERATION" << TestLog::EndMessage; 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Message << "// Shader compiler supported" << TestLog::EndMessage; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint shader = glCreateShader(GL_VERTEX_SHADER); 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint program = glCreateProgram(); 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint param[1] = { -1 }; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value."); 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderiv(shader, -1, ¶m[0]); 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_ENUM); 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL."); 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderiv(-1, GL_SHADER_TYPE, ¶m[0]); 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_VALUE); 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if pname is GL_COMPILE_STATUS, GL_INFO_LOG_LENGTH, or GL_SHADER_SOURCE_LENGTH but a shader compiler is not supported."); 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderiv(shader, GL_COMPILE_STATUS, ¶m[0]); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderiv(shader, GL_INFO_LOG_LENGTH, ¶m[0]); 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION); 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, ¶m[0]); 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION); 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader does not refer to a shader object."); 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderiv(program, GL_SHADER_TYPE, ¶m[0]); 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_OPERATION); 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glDeleteShader(shader); 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glDeleteProgram(program); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_shader_info_log, "Invalid glGetShaderInfoLog() usage", 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint shader = glCreateShader(GL_VERTEX_SHADER); 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint program = glCreateProgram(); 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLsizei length[1] = { -1 }; 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char infoLog[128]; 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org deMemset(&infoLog[0], 0, sizeof(infoLog)); 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL."); 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderInfoLog(-1, 128, &length[0], &infoLog[0]); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_VALUE); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object."); 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderInfoLog(program, 128, &length[0], &infoLog[0]); 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_OPERATION); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxLength is less than 0."); 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderInfoLog(shader, -1, &length[0], &infoLog[0]); 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(GL_INVALID_VALUE); 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glDeleteShader(shader); 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glDeleteProgram(program); 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ES2F_ADD_API_CASE(get_shader_precision_format, "Invalid glGetShaderPrecisionFormat() usage", 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean shaderCompilerSupported; 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!shaderCompilerSupported) 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Message << "// Shader compiler not supported, always expect GL_INVALID_OPERATION" << TestLog::EndMessage; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Message << "// Shader compiler supported" << TestLog::EndMessage; 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint range[2]; 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range[0] = -1; 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org range[1] = -1; 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint precision[1] = { -1 }; 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if shaderType or precisionType is not an accepted value."); 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderPrecisionFormat (-1, GL_MEDIUM_FLOAT, &range[0], &precision[0]); 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(shaderCompilerSupported ? GL_INVALID_ENUM : GL_INVALID_OPERATION); 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderPrecisionFormat (GL_VERTEX_SHADER, -1, &range[0], &precision[0]); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(shaderCompilerSupported ? GL_INVALID_ENUM : GL_INVALID_OPERATION); 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glGetShaderPrecisionFormat (-1, -1, &range[0], &precision[0]); 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org expectError(shaderCompilerSupported ? GL_INVALID_ENUM : GL_INVALID_OPERATION); 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::EndSection; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if a shader compiler is not supported."); 234 glGetShaderPrecisionFormat (GL_VERTEX_SHADER, GL_MEDIUM_FLOAT, &range[0], &precision[0]); 235 expectError(shaderCompilerSupported ? GL_NO_ERROR : GL_INVALID_OPERATION); 236 m_log << TestLog::EndSection; 237 }); 238 ES2F_ADD_API_CASE(get_shader_source, "Invalid glGetShaderSource() usage", 239 { 240 GLsizei length[1] = { -1 }; 241 char source[1] = { 0 }; 242 GLuint program = glCreateProgram(); 243 GLuint shader = glCreateShader(GL_VERTEX_SHADER); 244 245 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL."); 246 glGetShaderSource(-1, 1, &length[0], &source[0]); 247 expectError(GL_INVALID_VALUE); 248 m_log << TestLog::EndSection; 249 250 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if shader is not a shader object."); 251 glGetShaderSource(program, 1, &length[0], &source[0]); 252 expectError(GL_INVALID_OPERATION); 253 m_log << TestLog::EndSection; 254 255 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if bufSize is less than 0."); 256 glGetShaderSource(shader, -1, &length[0], &source[0]); 257 expectError(GL_INVALID_VALUE); 258 m_log << TestLog::EndSection; 259 260 glDeleteProgram(program); 261 glDeleteShader(shader); 262 }); 263 264 // Enumerated state queries: Programs 265 266 ES2F_ADD_API_CASE(get_programiv, "Invalid glGetProgramiv() usage", 267 { 268 GLuint program = glCreateProgram(); 269 GLuint shader = glCreateShader(GL_VERTEX_SHADER); 270 GLint params[1] = { -1 }; 271 272 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value."); 273 glGetProgramiv(program, -1, ¶ms[0]); 274 expectError(GL_INVALID_ENUM); 275 m_log << TestLog::EndSection; 276 277 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL."); 278 glGetProgramiv(-1, GL_LINK_STATUS, ¶ms[0]); 279 expectError(GL_INVALID_VALUE); 280 m_log << TestLog::EndSection; 281 282 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program does not refer to a program object."); 283 glGetProgramiv(shader, GL_LINK_STATUS, ¶ms[0]); 284 expectError(GL_INVALID_OPERATION); 285 m_log << TestLog::EndSection; 286 287 glDeleteProgram(program); 288 glDeleteShader(shader); 289 }); 290 ES2F_ADD_API_CASE(get_program_info_log, "Invalid glGetProgramInfoLog() usage", 291 { 292 GLuint program = glCreateProgram(); 293 GLuint shader = glCreateShader(GL_VERTEX_SHADER); 294 GLsizei length[1] = { -1 }; 295 char infoLog[1] = { 0 }; 296 297 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL."); 298 glGetProgramInfoLog (-1, 1, &length[0], &infoLog[0]); 299 expectError(GL_INVALID_VALUE); 300 m_log << TestLog::EndSection; 301 302 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object."); 303 glGetProgramInfoLog (shader, 1, &length[0], &infoLog[0]); 304 expectError(GL_INVALID_OPERATION); 305 m_log << TestLog::EndSection; 306 307 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if maxLength is less than 0."); 308 glGetProgramInfoLog (program, -1, &length[0], &infoLog[0]); 309 expectError(GL_INVALID_VALUE); 310 m_log << TestLog::EndSection; 311 312 glDeleteProgram(program); 313 glDeleteShader(shader); 314 }); 315 316 // Enumerated state queries: Shader variables 317 318 ES2F_ADD_API_CASE(get_tex_parameterfv, "Invalid glGetTexParameterfv() usage", 319 { 320 GLfloat params[1] = { 0.0f }; 321 322 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value."); 323 glGetTexParameterfv (-1, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 324 expectError(GL_INVALID_ENUM); 325 glGetTexParameterfv (GL_TEXTURE_2D, -1, ¶ms[0]); 326 expectError(GL_INVALID_ENUM); 327 glGetTexParameterfv (-1, -1, ¶ms[0]); 328 expectError(GL_INVALID_ENUM); 329 m_log << TestLog::EndSection; 330 }); 331 ES2F_ADD_API_CASE(get_tex_parameteriv, "Invalid glGetTexParameteriv() usage", 332 { 333 GLint params[1] = { -1 }; 334 335 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not an accepted value."); 336 glGetTexParameteriv (-1, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 337 expectError(GL_INVALID_ENUM); 338 glGetTexParameteriv (GL_TEXTURE_2D, -1, ¶ms[0]); 339 expectError(GL_INVALID_ENUM); 340 glGetTexParameteriv (-1, -1, ¶ms[0]); 341 expectError(GL_INVALID_ENUM); 342 m_log << TestLog::EndSection; 343 }); 344 ES2F_ADD_API_CASE(get_uniformfv, "Invalid glGetUniformfv() usage", 345 { 346 glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource)); 347 glUseProgram(program.getProgram()); 348 349 GLint vUnif = glGetUniformLocation(program.getProgram(), "vTest"); // vec4 350 GLint fUnif = glGetUniformLocation(program.getProgram(), "fTest"); // ivec4 351 if (vUnif == -1 || fUnif) 352 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location"); 353 354 GLuint shader = glCreateShader(GL_VERTEX_SHADER); 355 GLuint programEmpty = glCreateProgram(); 356 GLfloat params[4]; 357 358 deMemset(¶ms[0], 0, sizeof(params)); 359 360 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL."); 361 glGetUniformfv (-1, vUnif, ¶ms[0]); 362 expectError(GL_INVALID_VALUE); 363 m_log << TestLog::EndSection; 364 365 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object."); 366 glGetUniformfv (shader, vUnif, ¶ms[0]); 367 expectError(GL_INVALID_OPERATION); 368 m_log << TestLog::EndSection; 369 370 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked."); 371 glGetUniformfv (programEmpty, vUnif, ¶ms[0]); 372 expectError(GL_INVALID_OPERATION); 373 m_log << TestLog::EndSection; 374 375 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."); 376 glGetUniformfv (program.getProgram(), de::max(vUnif, fUnif)+1, ¶ms[0]); 377 expectError(GL_INVALID_OPERATION); 378 m_log << TestLog::EndSection; 379 380 glDeleteShader(shader); 381 glDeleteProgram(programEmpty); 382 }); 383 ES2F_ADD_API_CASE(get_uniformiv, "Invalid glGetUniformiv() usage", 384 { 385 glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource)); 386 glUseProgram(program.getProgram()); 387 388 GLint vUnif = glGetUniformLocation(program.getProgram(), "vTest"); // vec4 389 GLint fUnif = glGetUniformLocation(program.getProgram(), "fTest"); // ivec4 390 if (vUnif == -1 || fUnif == -1) 391 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to retrieve uniform location"); 392 393 GLuint shader = glCreateShader(GL_VERTEX_SHADER); 394 GLuint programEmpty = glCreateProgram(); 395 GLint params[4]; 396 397 deMemset(¶ms[0], 0, sizeof(params)); 398 399 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL."); 400 glGetUniformiv (-1, vUnif, ¶ms[0]); 401 expectError(GL_INVALID_VALUE); 402 m_log << TestLog::EndSection; 403 404 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not a program object."); 405 glGetUniformiv (shader, vUnif, ¶ms[0]); 406 expectError(GL_INVALID_OPERATION); 407 m_log << TestLog::EndSection; 408 409 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program has not been successfully linked."); 410 glGetUniformiv (programEmpty, vUnif, ¶ms[0]); 411 expectError(GL_INVALID_OPERATION); 412 m_log << TestLog::EndSection; 413 414 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."); 415 glGetUniformiv (program.getProgram(), de::max(vUnif, fUnif)+1, ¶ms[0]); 416 expectError(GL_INVALID_OPERATION); 417 m_log << TestLog::EndSection; 418 419 glDeleteShader(shader); 420 glDeleteProgram(programEmpty); 421 }); 422 ES2F_ADD_API_CASE(get_vertex_attribfv, "Invalid glGetVertexAttribfv() usage", 423 { 424 GLfloat params[1]; 425 426 deMemset(¶ms[0], 0, sizeof(params)); 427 428 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value."); 429 glGetVertexAttribfv(0, -1, ¶ms[0]); 430 expectError(GL_INVALID_ENUM); 431 m_log << TestLog::EndSection; 432 433 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS."); 434 GLint maxVertexAttribs; 435 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs); 436 glGetVertexAttribfv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, ¶ms[0]); 437 expectError(GL_INVALID_VALUE); 438 m_log << TestLog::EndSection; 439 }); 440 ES2F_ADD_API_CASE(get_vertex_attribiv, "Invalid glGetVertexAttribiv() usage", 441 { 442 GLint params[1]; 443 444 deMemset(¶ms[0], 0, sizeof(params)); 445 446 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value."); 447 glGetVertexAttribiv(0, -1, ¶ms[0]); 448 expectError(GL_INVALID_ENUM); 449 m_log << TestLog::EndSection; 450 451 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS."); 452 GLint maxVertexAttribs; 453 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs); 454 glGetVertexAttribiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, ¶ms[0]); 455 expectError(GL_INVALID_VALUE); 456 m_log << TestLog::EndSection; 457 }); 458 ES2F_ADD_API_CASE(get_vertex_attrib_pointerv, "Invalid glGetVertexAttribPointerv() usage", 459 { 460 GLvoid* ptr[1] = { DE_NULL }; 461 462 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value."); 463 glGetVertexAttribPointerv(0, -1, &ptr[0]); 464 expectError(GL_INVALID_ENUM); 465 m_log << TestLog::EndSection; 466 467 m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS."); 468 GLint maxVertexAttribs; 469 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs); 470 glGetVertexAttribPointerv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_POINTER, &ptr[0]); 471 expectError(GL_INVALID_VALUE); 472 m_log << TestLog::EndSection; 473 }); 474 475 // Enumerated state queries: Buffers 476 477 ES2F_ADD_API_CASE(get_buffer_parameteriv, "Invalid glGetBufferParameteriv() usage", 478 { 479 GLint params[1]; 480 GLuint buf; 481 glGenBuffers(1, &buf); 482 glBindBuffer(GL_ARRAY_BUFFER, buf); 483 484 deMemset(¶ms[0], 0, sizeof(params)); 485 486 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or value is not an accepted value."); 487 glGetBufferParameteriv(-1, GL_BUFFER_SIZE, ¶ms[0]); 488 expectError(GL_INVALID_ENUM); 489 glGetBufferParameteriv(GL_ARRAY_BUFFER , -1, ¶ms[0]); 490 expectError(GL_INVALID_ENUM); 491 glGetBufferParameteriv(-1, -1, ¶ms[0]); 492 expectError(GL_INVALID_ENUM); 493 m_log << TestLog::EndSection; 494 495 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target."); 496 glBindBuffer(GL_ARRAY_BUFFER, 0); 497 glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, ¶ms[0]); 498 expectError(GL_INVALID_OPERATION); 499 m_log << TestLog::EndSection; 500 501 glDeleteBuffers(1, &buf); 502 }); 503 ES2F_ADD_API_CASE(get_framebuffer_attachment_parameteriv, "Invalid glGetFramebufferAttachmentParameteriv() usage", 504 { 505 GLint params[1] = { -1 }; 506 GLuint fbo; 507 glGenFramebuffers(1, &fbo); 508 glBindFramebuffer(GL_FRAMEBUFFER, fbo); 509 510 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_FRAMEBUFFER."); 511 glGetFramebufferAttachmentParameteriv(-1, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, ¶ms[0]); 512 expectError(GL_INVALID_ENUM); 513 m_log << TestLog::EndSection; 514 515 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if there is no attached object at the named attachment point and pname is not GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE."); 516 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, ¶ms[0]); 517 expectError(GL_INVALID_ENUM); 518 m_log << TestLog::EndSection; 519 520 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if the attached object at the named attachment point is incompatible with pname."); 521 GLint attachmentObjectType = -1; 522 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &attachmentObjectType); 523 expectError(GL_NO_ERROR); 524 525 if (attachmentObjectType == GL_RENDERBUFFER) 526 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, ¶ms[0]); 527 else if (attachmentObjectType == GL_TEXTURE) 528 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, -1, ¶ms[0]); 529 else if (attachmentObjectType == GL_NONE) 530 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, ¶ms[0]); 531 else 532 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid return value from glGetFramebufferAttachmentParameteriv()"); 533 534 expectError(GL_INVALID_ENUM); 535 m_log << TestLog::EndSection; 536 537 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the default framebuffer object name 0 is bound."); 538 glBindFramebuffer(GL_FRAMEBUFFER, 0); 539 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, ¶ms[0]); 540 expectError(GL_INVALID_OPERATION); 541 m_log << TestLog::EndSection; 542 543 glDeleteFramebuffers(1, &fbo); 544 }); 545 ES2F_ADD_API_CASE(get_renderbuffer_parameteriv, "Invalid glGetRenderbufferParameteriv() usage", 546 { 547 GLint params[1]; 548 GLuint rbo; 549 glGenRenderbuffers(1, &rbo); 550 glBindRenderbuffer(GL_RENDERBUFFER, rbo); 551 552 deMemset(¶ms[0], 0, sizeof(params)); 553 554 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER."); 555 glGetRenderbufferParameteriv(-1, GL_RENDERBUFFER_WIDTH, ¶ms[0]); 556 expectError(GL_INVALID_ENUM); 557 m_log << TestLog::EndSection; 558 559 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not one of the allowed values."); 560 glGetRenderbufferParameteriv(GL_RENDERBUFFER, -1, ¶ms[0]); 561 expectError(GL_INVALID_ENUM); 562 m_log << TestLog::EndSection; 563 564 m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the reserved renderbuffer object name 0 is bound."); 565 glBindRenderbuffer(GL_RENDERBUFFER, 0); 566 glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, ¶ms[0]); 567 expectError(GL_INVALID_OPERATION); 568 m_log << TestLog::EndSection; 569 570 glDeleteRenderbuffers(1, &rbo); 571 }); 572 573 // Enumerated boolean state queries 574 575 ES2F_ADD_API_CASE(get_is_enabled, "Invalid glIsEnabled() usage", 576 { 577 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if cap is not an accepted value."); 578 glIsEnabled(-1); 579 expectError(GL_INVALID_ENUM); 580 glIsEnabled(GL_TRIANGLES); 581 expectError(GL_INVALID_ENUM); 582 m_log << TestLog::EndSection; 583 }); 584 585 // Hints 586 587 ES2F_ADD_API_CASE(hint, "Invalid glHint() usage", 588 { 589 m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if either target or mode is not an accepted value."); 590 glHint(GL_GENERATE_MIPMAP_HINT, -1); 591 expectError(GL_INVALID_ENUM); 592 glHint(-1, GL_FASTEST); 593 expectError(GL_INVALID_ENUM); 594 glHint(-1, -1); 595 expectError(GL_INVALID_ENUM); 596 m_log << TestLog::EndSection; 597 }); 598 599 // Named object usage 600 601 ES2F_ADD_API_CASE(is_buffer, "Invalid glIsBuffer() usage", 602 { 603 GLuint buffer = 0; 604 GLboolean isBuffer; 605 606 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."); 607 isBuffer = glIsBuffer(buffer); 608 checkBooleans (isBuffer, GL_FALSE); 609 610 glGenBuffers (1, &buffer); 611 isBuffer = glIsBuffer(buffer); 612 checkBooleans (isBuffer, GL_FALSE); 613 614 glBindBuffer (GL_ARRAY_BUFFER, buffer); 615 isBuffer = glIsBuffer(buffer); 616 checkBooleans (isBuffer, GL_TRUE); 617 618 glBindBuffer (GL_ARRAY_BUFFER, 0); 619 glDeleteBuffers (1, &buffer); 620 isBuffer = glIsBuffer(buffer); 621 checkBooleans (isBuffer, GL_FALSE); 622 m_log << TestLog::EndSection; 623 624 expectError (GL_NO_ERROR); 625 }); 626 ES2F_ADD_API_CASE(is_framebuffer, "Invalid glIsFramebuffer() usage", 627 { 628 GLuint fbo = 0; 629 GLboolean isFbo; 630 631 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."); 632 isFbo = glIsFramebuffer(fbo); 633 checkBooleans (isFbo, GL_FALSE); 634 635 glGenFramebuffers (1, &fbo); 636 isFbo = glIsFramebuffer(fbo); 637 checkBooleans (isFbo, GL_FALSE); 638 639 glBindFramebuffer (GL_FRAMEBUFFER, fbo); 640 isFbo = glIsFramebuffer(fbo); 641 checkBooleans (isFbo, GL_TRUE); 642 643 glBindFramebuffer (GL_FRAMEBUFFER, 0); 644 glDeleteFramebuffers(1, &fbo); 645 isFbo = glIsFramebuffer(fbo); 646 checkBooleans (isFbo, GL_FALSE); 647 m_log << TestLog::EndSection; 648 649 expectError (GL_NO_ERROR); 650 }); 651 ES2F_ADD_API_CASE(is_program, "Invalid glIsProgram() usage", 652 { 653 GLuint program = 0; 654 GLboolean isProgram; 655 656 m_log << TestLog::Section("", "A name created with glCreateProgram, and not yet deleted with glDeleteProgram is a name of a program object."); 657 isProgram = glIsProgram(program); 658 checkBooleans (isProgram, GL_FALSE); 659 660 program = glCreateProgram(); 661 isProgram = glIsProgram(program); 662 checkBooleans (isProgram, GL_TRUE); 663 664 glDeleteProgram (program); 665 isProgram = glIsProgram(program); 666 checkBooleans (isProgram, GL_FALSE); 667 m_log << TestLog::EndSection; 668 669 expectError (GL_NO_ERROR); 670 }); 671 ES2F_ADD_API_CASE(is_renderbuffer, "Invalid glIsRenderbuffer() usage", 672 { 673 GLuint rbo = 0; 674 GLboolean isRbo; 675 676 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."); 677 isRbo = glIsRenderbuffer(rbo); 678 checkBooleans (isRbo, GL_FALSE); 679 680 glGenRenderbuffers (1, &rbo); 681 isRbo = glIsRenderbuffer(rbo); 682 checkBooleans (isRbo, GL_FALSE); 683 684 glBindRenderbuffer (GL_RENDERBUFFER, rbo); 685 isRbo = glIsRenderbuffer(rbo); 686 checkBooleans (isRbo, GL_TRUE); 687 688 glBindRenderbuffer (GL_RENDERBUFFER, 0); 689 glDeleteRenderbuffers (1, &rbo); 690 isRbo = glIsRenderbuffer(rbo); 691 checkBooleans (isRbo, GL_FALSE); 692 m_log << TestLog::EndSection; 693 694 expectError (GL_NO_ERROR); 695 }); 696 ES2F_ADD_API_CASE(is_shader, "Invalid glIsShader() usage", 697 { 698 GLuint shader = 0; 699 GLboolean isShader; 700 701 m_log << TestLog::Section("", "A name created with glCreateShader, and not yet deleted with glDeleteShader is a name of a shader object."); 702 isShader = glIsProgram(shader); 703 checkBooleans (isShader, GL_FALSE); 704 705 shader = glCreateShader(GL_VERTEX_SHADER); 706 isShader = glIsShader(shader); 707 checkBooleans (isShader, GL_TRUE); 708 709 glDeleteShader (shader); 710 isShader = glIsShader(shader); 711 checkBooleans (isShader, GL_FALSE); 712 m_log << TestLog::EndSection; 713 714 expectError (GL_NO_ERROR); 715 }); 716 ES2F_ADD_API_CASE(is_texture, "Invalid glIsTexture() usage", 717 { 718 GLuint texture = 0; 719 GLboolean isTexture; 720 721 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."); 722 isTexture = glIsTexture(texture); 723 checkBooleans (isTexture, GL_FALSE); 724 725 glGenTextures (1, &texture); 726 isTexture = glIsTexture(texture); 727 checkBooleans (isTexture, GL_FALSE); 728 729 glBindTexture (GL_TEXTURE_2D, texture); 730 isTexture = glIsTexture(texture); 731 checkBooleans (isTexture, GL_TRUE); 732 733 glBindTexture (GL_TEXTURE_2D, 0); 734 glDeleteTextures (1, &texture); 735 isTexture = glIsTexture(texture); 736 checkBooleans (isTexture, GL_FALSE); 737 m_log << TestLog::EndSection; 738 739 expectError (GL_NO_ERROR); 740 }); 741} 742 743} // Functional 744} // gles2 745} // deqp 746