Home | History | Annotate | Download | only in functional
      1 /*-------------------------------------------------------------------------
      2  * drawElements Quality Program OpenGL ES 2.0 Module
      3  * -------------------------------------------------
      4  *
      5  * Copyright 2014 The Android Open Source Project
      6  *
      7  * Licensed under the Apache License, Version 2.0 (the "License");
      8  * you may not use this file except in compliance with the License.
      9  * You may obtain a copy of the License at
     10  *
     11  *      http://www.apache.org/licenses/LICENSE-2.0
     12  *
     13  * Unless required by applicable law or agreed to in writing, software
     14  * distributed under the License is distributed on an "AS IS" BASIS,
     15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16  * See the License for the specific language governing permissions and
     17  * limitations under the License.
     18  *
     19  *//*!
     20  * \file
     21  * \brief Negative Texture API tests.
     22  *//*--------------------------------------------------------------------*/
     23 
     24 #include "es2fNegativeTextureApiTests.hpp"
     25 #include "es2fApiCase.hpp"
     26 #include "tcuFormatUtil.hpp"
     27 #include "tcuCompressedTexture.hpp"
     28 #include "gluTextureUtil.hpp"
     29 #include "gluContextInfo.hpp"
     30 
     31 #include <vector>
     32 #include <algorithm>
     33 
     34 #include "glwEnums.hpp"
     35 #include "glwDefs.hpp"
     36 
     37 using namespace glw; // GL types
     38 
     39 namespace deqp
     40 {
     41 namespace gles2
     42 {
     43 namespace Functional
     44 {
     45 
     46 using tcu::TestLog;
     47 using std::vector;
     48 
     49 static deUint32 cubeFaceToGLFace (tcu::CubeFace face)
     50 {
     51 	switch (face)
     52 	{
     53 		case tcu::CUBEFACE_NEGATIVE_X: return GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
     54 		case tcu::CUBEFACE_POSITIVE_X: return GL_TEXTURE_CUBE_MAP_POSITIVE_X;
     55 		case tcu::CUBEFACE_NEGATIVE_Y: return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
     56 		case tcu::CUBEFACE_POSITIVE_Y: return GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
     57 		case tcu::CUBEFACE_NEGATIVE_Z: return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
     58 		case tcu::CUBEFACE_POSITIVE_Z: return GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
     59 		default:
     60 			DE_ASSERT(DE_FALSE);
     61 			return GL_NONE;
     62 	}
     63 }
     64 
     65 #define FOR_CUBE_FACES(FACE_GL_VAR, BODY)												\
     66 	do																					\
     67 	{																					\
     68 		for (int faceIterTcu = 0; faceIterTcu < tcu::CUBEFACE_LAST; faceIterTcu++)		\
     69 		{																				\
     70 			const GLenum FACE_GL_VAR = cubeFaceToGLFace((tcu::CubeFace)faceIterTcu);	\
     71 			BODY																		\
     72 		}																				\
     73 	} while (false)
     74 
     75 static void getCompressedTexSubImage2DFormat(const vector<deInt32>& supported, vector<deInt32>& accepted)
     76 {
     77 	// Find a supported compressed texture format that is accepted by compressedTexSubImage2D()
     78 
     79 	static const GLuint compressedTexSubImage2DFormats[] =
     80 	{
     81 		0x83F0,	// GL_COMPRESSED_RGB_S3TC_DXT1_EXT
     82 		0x83F1,	// GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
     83 		0x8C00,	// GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
     84 		0x8C01,	// GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG
     85 		0x8C02,	// GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
     86 		0x8C03	// GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
     87 	};
     88 
     89 	for (int i = 0; i < (int)supported.size(); i++)
     90 	{
     91 		vector<deInt32>::const_iterator fmt = std::find(supported.begin(), supported.end(), compressedTexSubImage2DFormats[i]);
     92 		if (fmt != supported.end())
     93 			accepted.push_back(*fmt);
     94 	}
     95 }
     96 
     97 NegativeTextureApiTests::NegativeTextureApiTests (Context& context)
     98 	: TestCaseGroup(context, "texture", "Negative Texture API Cases")
     99 {
    100 }
    101 
    102 NegativeTextureApiTests::~NegativeTextureApiTests (void)
    103 {
    104 }
    105 
    106 void NegativeTextureApiTests::init (void)
    107 {
    108 	// glActiveTexture
    109 
    110 	ES2F_ADD_API_CASE(activetexture_invalid_texture, "Invalid glActiveTexture() usage",
    111 		{
    112 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if texture is not one of GL_TEXTUREi, where i ranges from 0 to (GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1).");
    113 			glActiveTexture(-1);
    114 			expectError(GL_INVALID_ENUM);
    115 			int numMaxTextureUnits = m_context.getContextInfo().getInt(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
    116 			glActiveTexture(GL_TEXTURE0 + numMaxTextureUnits);
    117 			expectError(GL_INVALID_ENUM);
    118 			m_log << TestLog::EndSection;
    119 		});
    120 
    121 	// glBindTexture
    122 
    123 	ES2F_ADD_API_CASE(bindtexture_invalid_target, "Invalid glBindTexture() usage",
    124 		{
    125 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not one of the allowable values.");
    126 			glBindTexture(0, 1);
    127 			expectError(GL_INVALID_ENUM);
    128 			m_log << TestLog::EndSection;
    129 		});
    130 	ES2F_ADD_API_CASE(bindtexture_type_mismatch, "Invalid glBindTexture() usage",
    131 		{
    132 			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if texture was previously created with a target that doesn't match that of target.");
    133 			GLuint texture;
    134 			glGenTextures(1, &texture);
    135 			glBindTexture(GL_TEXTURE_2D, texture);
    136 			glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
    137 			expectError(GL_INVALID_OPERATION);
    138 			glDeleteTextures(1, &texture);
    139 			m_log << TestLog::EndSection;
    140 		});
    141 
    142 	// glCompressedTexImage2D
    143 
    144 	ES2F_ADD_API_CASE(compressedteximage_2d_invalid_target, "Invalid glCompressedTexImage2D() usage",
    145 		{
    146 			vector<deInt32> compressedFormats;
    147 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    148 			if (!compressedFormats.empty())
    149 			{
    150 				m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is invalid.");
    151 				glCompressedTexImage2D(0, 0, compressedFormats[0], 0, 0, 0, 0, 0);
    152 				expectError(GL_INVALID_ENUM);
    153 				m_log << TestLog::EndSection;
    154 			}
    155 		});
    156 	ES2F_ADD_API_CASE(compressedteximage_2d_invalid_format_tex2d, "Invalid glCompressedTexImage2D() usage",
    157 		{
    158 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if internalformat is not a supported format returned in GL_COMPRESSED_TEXTURE_FORMATS.");
    159 			glCompressedTexImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0);
    160 			expectError(GL_INVALID_ENUM);
    161 			m_log << TestLog::EndSection;
    162 		});
    163 	ES2F_ADD_API_CASE(compressedteximage_2d_invalid_format_cube, "Invalid glCompressedTexImage2D() usage",
    164 		{
    165 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if internalformat is not a supported format returned in GL_COMPRESSED_TEXTURE_FORMATS.");
    166 			glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 0, 0, 0);
    167 			expectError(GL_INVALID_ENUM);
    168 			glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 0, 0, 0);
    169 			expectError(GL_INVALID_ENUM);
    170 			glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 0, 0, 0);
    171 			expectError(GL_INVALID_ENUM);
    172 			glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 0, 0, 0);
    173 			expectError(GL_INVALID_ENUM);
    174 			glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 0, 0, 0);
    175 			expectError(GL_INVALID_ENUM);
    176 			glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 0, 0, 0);
    177 			expectError(GL_INVALID_ENUM);
    178 			m_log << TestLog::EndSection;
    179 		});
    180 	ES2F_ADD_API_CASE(compressedteximage2d_neg_level_tex2d, "Invalid glCompressedTexImage2D() usage",
    181 		{
    182 			vector<deInt32> compressedFormats;
    183 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    184 			if (!compressedFormats.empty())
    185 			{
    186 				size_t firstNonPalettedFormatNdx = 0;
    187 				// Negtive values are valid for palette formats
    188 				if (m_context.getContextInfo().isExtensionSupported("GL_OES_compressed_paletted_texture"))
    189 				{
    190 					while (GL_PALETTE4_RGB8_OES <= compressedFormats[firstNonPalettedFormatNdx] &&
    191 						   GL_PALETTE8_RGB5_A1_OES >= compressedFormats[firstNonPalettedFormatNdx])
    192 					{
    193 						++firstNonPalettedFormatNdx;
    194 					}
    195 				}
    196 				if (firstNonPalettedFormatNdx < compressedFormats.size())
    197 				{
    198 					m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
    199 					glCompressedTexImage2D(GL_TEXTURE_2D, -1, compressedFormats[firstNonPalettedFormatNdx], 0, 0, 0, 0, 0);
    200 					expectError(GL_INVALID_VALUE);
    201 					m_log << TestLog::EndSection;
    202 				}
    203 			}
    204 		});
    205 	ES2F_ADD_API_CASE(compressedteximage2d_neg_level_cube, "Invalid glCompressedTexImage2D() usage",
    206 		{
    207 			vector<deInt32> compressedFormats;
    208 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    209 			if (!compressedFormats.empty())
    210 			{
    211 				size_t firstNonPalettedFormatNdx = 0;
    212 				// Negtive values are valid for palette formats
    213 				if (m_context.getContextInfo().isExtensionSupported("GL_OES_compressed_paletted_texture"))
    214 				{
    215 					while (GL_PALETTE4_RGB8_OES <= compressedFormats[firstNonPalettedFormatNdx] &&
    216 						   GL_PALETTE8_RGB5_A1_OES >= compressedFormats[firstNonPalettedFormatNdx])
    217 					{
    218 						++firstNonPalettedFormatNdx;
    219 					}
    220 				}
    221 				if (firstNonPalettedFormatNdx < compressedFormats.size())
    222 				{
    223 					m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
    224 					glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, compressedFormats[firstNonPalettedFormatNdx], 0, 0, 0, 0, 0);
    225 					expectError(GL_INVALID_VALUE);
    226 					glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, compressedFormats[firstNonPalettedFormatNdx], 0, 0, 0, 0, 0);
    227 					expectError(GL_INVALID_VALUE);
    228 					glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, compressedFormats[firstNonPalettedFormatNdx], 0, 0, 0, 0, 0);
    229 					expectError(GL_INVALID_VALUE);
    230 					glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, compressedFormats[firstNonPalettedFormatNdx], 0, 0, 0, 0, 0);
    231 					expectError(GL_INVALID_VALUE);
    232 					glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, compressedFormats[firstNonPalettedFormatNdx], 0, 0, 0, 0, 0);
    233 					expectError(GL_INVALID_VALUE);
    234 					glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, compressedFormats[firstNonPalettedFormatNdx], 0, 0, 0, 0, 0);
    235 					expectError(GL_INVALID_VALUE);
    236 					m_log << TestLog::EndSection;
    237 				}
    238 			}
    239 		});
    240 	ES2F_ADD_API_CASE(compressedteximage2d_level_max_tex2d, "Invalid glCompressedTexImage2D() usage",
    241 		{
    242 			vector<deInt32> compressedFormats;
    243 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    244 			if (!compressedFormats.empty())
    245 			{
    246 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
    247 				deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE)) + 1;
    248 				glCompressedTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, compressedFormats[0], 0, 0, 0, 0, 0);
    249 				expectError(GL_INVALID_VALUE);
    250 				m_log << TestLog::EndSection;
    251 			}
    252 		});
    253 	ES2F_ADD_API_CASE(compressedteximage2d_level_max_cube_pos, "Invalid glCompressedTexImage2D() usage",
    254 		{
    255 			vector<deInt32> compressedFormats;
    256 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    257 			if (!compressedFormats.empty())
    258 			{
    259 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
    260 				deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
    261 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxTextureSize, compressedFormats[0], 0, 0, 0, 0, 0);
    262 				expectError(GL_INVALID_VALUE);
    263 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxTextureSize, compressedFormats[0], 0, 0, 0, 0, 0);
    264 				expectError(GL_INVALID_VALUE);
    265 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxTextureSize, compressedFormats[0], 0, 0, 0, 0, 0);
    266 				expectError(GL_INVALID_VALUE);
    267 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxTextureSize, compressedFormats[0], 0, 0, 0, 0, 0);
    268 				expectError(GL_INVALID_VALUE);
    269 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxTextureSize, compressedFormats[0], 0, 0, 0, 0, 0);
    270 				expectError(GL_INVALID_VALUE);
    271 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxTextureSize, compressedFormats[0], 0, 0, 0, 0, 0);
    272 				expectError(GL_INVALID_VALUE);
    273 				m_log << TestLog::EndSection;
    274 			}
    275 		});
    276 	ES2F_ADD_API_CASE(compressedteximage2d_neg_width_height_tex2d, "Invalid glCompressedTexImage2D() usage",
    277 		{
    278 			vector<deInt32> compressedFormats;
    279 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    280 			if (!compressedFormats.empty())
    281 			{
    282 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    283 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], -1, 0, 0, 0, 0);
    284 				expectError(GL_INVALID_VALUE);
    285 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], 0, -1, 0, 0, 0);
    286 				expectError(GL_INVALID_VALUE);
    287 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], -1, -1, 0, 0, 0);
    288 				expectError(GL_INVALID_VALUE);
    289 				m_log << TestLog::EndSection;
    290 			}
    291 		});
    292 	ES2F_ADD_API_CASE(compressedteximage2d_neg_width_height_cube_pos_x, "Invalid glCompressedTexImage2D() usage",
    293 		{
    294 			vector<deInt32> compressedFormats;
    295 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    296 			if (!compressedFormats.empty())
    297 			{
    298 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    299 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], -1, 0, 0, 0, 0);
    300 				expectError(GL_INVALID_VALUE);
    301 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], 0, -1, 0, 0, 0);
    302 				expectError(GL_INVALID_VALUE);
    303 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], -1, -1, 0, 0, 0);
    304 				expectError(GL_INVALID_VALUE);
    305 				m_log << TestLog::EndSection;
    306 			}
    307 		});
    308 	ES2F_ADD_API_CASE(compressedteximage2d_neg_width_height_cube_pos_y, "Invalid glCompressedTexImage2D() usage",
    309 		{
    310 			vector<deInt32> compressedFormats;
    311 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    312 			if (!compressedFormats.empty())
    313 			{
    314 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    315 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], -1, 0, 0, 0, 0);
    316 				expectError(GL_INVALID_VALUE);
    317 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], 0, -1, 0, 0, 0);
    318 				expectError(GL_INVALID_VALUE);
    319 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], -1, -1, 0, 0, 0);
    320 				expectError(GL_INVALID_VALUE);
    321 				m_log << TestLog::EndSection;
    322 			}
    323 		});
    324 	ES2F_ADD_API_CASE(compressedteximage2d_neg_width_height_cube_pos_z, "Invalid glCompressedTexImage2D() usage",
    325 		{
    326 			vector<deInt32> compressedFormats;
    327 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    328 			if (!compressedFormats.empty())
    329 			{
    330 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    331 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], -1, 0, 0, 0, 0);
    332 				expectError(GL_INVALID_VALUE);
    333 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], 0, -1, 0, 0, 0);
    334 				expectError(GL_INVALID_VALUE);
    335 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], -1, -1, 0, 0, 0);
    336 				expectError(GL_INVALID_VALUE);
    337 				m_log << TestLog::EndSection;
    338 			}
    339 		});
    340 	ES2F_ADD_API_CASE(compressedteximage2d_neg_width_height_cube_neg_x, "Invalid glCompressedTexImage2D() usage",
    341 		{
    342 			vector<deInt32> compressedFormats;
    343 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    344 			if (!compressedFormats.empty())
    345 			{
    346 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    347 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], -1, 0, 0, 0, 0);
    348 				expectError(GL_INVALID_VALUE);
    349 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], 0, -1, 0, 0, 0);
    350 				expectError(GL_INVALID_VALUE);
    351 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], -1, -1, 0, 0, 0);
    352 				expectError(GL_INVALID_VALUE);
    353 				m_log << TestLog::EndSection;
    354 			}
    355 		});
    356 	ES2F_ADD_API_CASE(compressedteximage2d_neg_width_height_cube_neg_y, "Invalid glCompressedTexImage2D() usage",
    357 		{
    358 			vector<deInt32> compressedFormats;
    359 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    360 			if (!compressedFormats.empty())
    361 			{
    362 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    363 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], -1, 0, 0, 0, 0);
    364 				expectError(GL_INVALID_VALUE);
    365 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], 0, -1, 0, 0, 0);
    366 				expectError(GL_INVALID_VALUE);
    367 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], -1, -1, 0, 0, 0);
    368 				expectError(GL_INVALID_VALUE);
    369 				m_log << TestLog::EndSection;
    370 			}
    371 		});
    372 	ES2F_ADD_API_CASE(compressedteximage2d_neg_width_height_cube_neg_z, "Invalid glCompressedTexImage2D() usage",
    373 		{
    374 			vector<deInt32> compressedFormats;
    375 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    376 			if (!compressedFormats.empty())
    377 			{
    378 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    379 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], -1, 0, 0, 0, 0);
    380 				expectError(GL_INVALID_VALUE);
    381 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], 0, -1, 0, 0, 0);
    382 				expectError(GL_INVALID_VALUE);
    383 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], -1, -1, 0, 0, 0);
    384 				expectError(GL_INVALID_VALUE);
    385 				m_log << TestLog::EndSection;
    386 			}
    387 		});
    388 	ES2F_ADD_API_CASE(compressedteximage2d_width_height_max_tex2d, "Invalid glCompressedTexImage2D() usage",
    389 		{
    390 			vector<deInt32> compressedFormats;
    391 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    392 			if (!compressedFormats.empty())
    393 			{
    394 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE.");
    395 				int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE) + 1;
    396 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], maxTextureSize, 0, 0, 0, 0);
    397 				expectError(GL_INVALID_VALUE);
    398 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], 0, maxTextureSize, 0, 0, 0);
    399 				expectError(GL_INVALID_VALUE);
    400 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], maxTextureSize, maxTextureSize, 0, 0, 0);
    401 				expectError(GL_INVALID_VALUE);
    402 				m_log << TestLog::EndSection;
    403 			}
    404 		});
    405 	ES2F_ADD_API_CASE(compressedteximage2d_width_height_max_cube_pos_x, "Invalid glCompressedTexImage2D() usage",
    406 		{
    407 			vector<deInt32> compressedFormats;
    408 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    409 			if (!compressedFormats.empty())
    410 			{
    411 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    412 				int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    413 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], maxTextureSize, 0, 0, 0, 0);
    414 				expectError(GL_INVALID_VALUE);
    415 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], 0, maxTextureSize, 0, 0, 0);
    416 				expectError(GL_INVALID_VALUE);
    417 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], maxTextureSize, maxTextureSize, 0, 0, 0);
    418 				expectError(GL_INVALID_VALUE);
    419 				m_log << TestLog::EndSection;
    420 			}
    421 		});
    422 	ES2F_ADD_API_CASE(compressedteximage2d_width_height_max_cube_pos_y, "Invalid glCompressedTexImage2D() usage",
    423 		{
    424 			vector<deInt32> compressedFormats;
    425 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    426 			if (!compressedFormats.empty())
    427 			{
    428 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    429 				int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    430 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], maxTextureSize, 0, 0, 0, 0);
    431 				expectError(GL_INVALID_VALUE);
    432 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], 0, maxTextureSize, 0, 0, 0);
    433 				expectError(GL_INVALID_VALUE);
    434 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], maxTextureSize, maxTextureSize, 0, 0, 0);
    435 				expectError(GL_INVALID_VALUE);
    436 				m_log << TestLog::EndSection;
    437 			}
    438 		});
    439 	ES2F_ADD_API_CASE(compressedteximage2d_width_height_max_cube_pos_z, "Invalid glCompressedTexImage2D() usage",
    440 		{
    441 			vector<deInt32> compressedFormats;
    442 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    443 			if (!compressedFormats.empty())
    444 			{
    445 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    446 				int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    447 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], maxTextureSize, 0, 0, 0, 0);
    448 				expectError(GL_INVALID_VALUE);
    449 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], 0, maxTextureSize, 0, 0, 0);
    450 				expectError(GL_INVALID_VALUE);
    451 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], maxTextureSize, maxTextureSize, 0, 0, 0);
    452 				expectError(GL_INVALID_VALUE);
    453 				m_log << TestLog::EndSection;
    454 			}
    455 		});
    456 	ES2F_ADD_API_CASE(compressedteximage2d_width_height_max_cube_neg_x, "Invalid glCompressedTexImage2D() usage",
    457 		{
    458 			vector<deInt32> compressedFormats;
    459 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    460 			if (!compressedFormats.empty())
    461 			{
    462 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    463 				int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    464 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], maxTextureSize, 0, 0, 0, 0);
    465 				expectError(GL_INVALID_VALUE);
    466 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], 0, maxTextureSize, 0, 0, 0);
    467 				expectError(GL_INVALID_VALUE);
    468 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], maxTextureSize, maxTextureSize, 0, 0, 0);
    469 				expectError(GL_INVALID_VALUE);
    470 				m_log << TestLog::EndSection;
    471 			}
    472 		});
    473 	ES2F_ADD_API_CASE(compressedteximage2d_width_height_max_cube_neg_y, "Invalid glCompressedTexImage2D() usage",
    474 		{
    475 			vector<deInt32> compressedFormats;
    476 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    477 			if (!compressedFormats.empty())
    478 			{
    479 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    480 				int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    481 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], maxTextureSize, 0, 0, 0, 0);
    482 				expectError(GL_INVALID_VALUE);
    483 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], 0, maxTextureSize, 0, 0, 0);
    484 				expectError(GL_INVALID_VALUE);
    485 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], maxTextureSize, maxTextureSize, 0, 0, 0);
    486 				expectError(GL_INVALID_VALUE);
    487 				m_log << TestLog::EndSection;
    488 			}
    489 		});
    490 	ES2F_ADD_API_CASE(compressedteximage2d_width_height_max_cube_neg_z, "Invalid glCompressedTexImage2D() usage",
    491 		{
    492 			vector<deInt32> compressedFormats;
    493 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    494 			if (!compressedFormats.empty())
    495 			{
    496 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    497 				int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    498 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], maxTextureSize, 0, 0, 0, 0);
    499 				expectError(GL_INVALID_VALUE);
    500 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], 0, maxTextureSize, 0, 0, 0);
    501 				expectError(GL_INVALID_VALUE);
    502 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], maxTextureSize, maxTextureSize, 0, 0, 0);
    503 				expectError(GL_INVALID_VALUE);
    504 				m_log << TestLog::EndSection;
    505 			}
    506 		});
    507 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_border, "Invalid glCompressedTexImage2D() usage",
    508 		{
    509 			vector<deInt32> compressedFormats;
    510 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    511 			if (!compressedFormats.empty())
    512 			{
    513 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    514 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], 0, 0, 1, 0, 0);
    515 				expectError(GL_INVALID_VALUE);
    516 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], 0, 0, -1, 0, 0);
    517 				expectError(GL_INVALID_VALUE);
    518 				m_log << TestLog::EndSection;
    519 			}
    520 		});
    521 
    522 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_border_cube_pos_x, "Invalid glCompressedTexImage2D() usage",
    523 		{
    524 			vector<deInt32> compressedFormats;
    525 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    526 			if (!compressedFormats.empty())
    527 			{
    528 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    529 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], 0, 0, 1, 0, 0);
    530 				expectError(GL_INVALID_VALUE);
    531 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, compressedFormats[0], 0, 0, -1, 0, 0);
    532 				expectError(GL_INVALID_VALUE);
    533 				m_log << TestLog::EndSection;
    534 			}
    535 		});
    536 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_border_cube_pos_y, "Invalid glCompressedTexImage2D() usage",
    537 		{
    538 			vector<deInt32> compressedFormats;
    539 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    540 			if (!compressedFormats.empty())
    541 			{
    542 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    543 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], 0, 0, 1, 0, 0);
    544 				expectError(GL_INVALID_VALUE);
    545 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, compressedFormats[0], 0, 0, -1, 0, 0);
    546 				expectError(GL_INVALID_VALUE);
    547 				m_log << TestLog::EndSection;
    548 			}
    549 		});
    550 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_border_cube_pos_z, "Invalid glCompressedTexImage2D() usage",
    551 		{
    552 			vector<deInt32> compressedFormats;
    553 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    554 			if (!compressedFormats.empty())
    555 			{
    556 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    557 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], 0, 0, 1, 0, 0);
    558 				expectError(GL_INVALID_VALUE);
    559 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, compressedFormats[0], 0, 0, -1, 0, 0);
    560 				expectError(GL_INVALID_VALUE);
    561 				m_log << TestLog::EndSection;
    562 			}
    563 		});
    564 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_border_cube_neg_x, "Invalid glCompressedTexImage2D() usage",
    565 		{
    566 			vector<deInt32> compressedFormats;
    567 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    568 			if (!compressedFormats.empty())
    569 			{
    570 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    571 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], 0, 0, 1, 0, 0);
    572 				expectError(GL_INVALID_VALUE);
    573 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, compressedFormats[0], 0, 0, -1, 0, 0);
    574 				expectError(GL_INVALID_VALUE);
    575 				m_log << TestLog::EndSection;
    576 			}
    577 		});
    578 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_border_cube_neg_y, "Invalid glCompressedTexImage2D() usage",
    579 		{
    580 			vector<deInt32> compressedFormats;
    581 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    582 			if (!compressedFormats.empty())
    583 			{
    584 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    585 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], 0, 0, 1, 0, 0);
    586 				expectError(GL_INVALID_VALUE);
    587 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, compressedFormats[0], 0, 0, -1, 0, 0);
    588 				expectError(GL_INVALID_VALUE);
    589 				m_log << TestLog::EndSection;
    590 			}
    591 		});
    592 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_border_cube_neg_z, "Invalid glCompressedTexImage2D() usage",
    593 		{
    594 			vector<deInt32> compressedFormats;
    595 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    596 			if (!compressedFormats.empty())
    597 			{
    598 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    599 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], 0, 0, 1, 0, 0);
    600 				expectError(GL_INVALID_VALUE);
    601 				glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, compressedFormats[0], 0, 0, -1, 0, 0);
    602 				expectError(GL_INVALID_VALUE);
    603 				m_log << TestLog::EndSection;
    604 			}
    605 		});
    606 	ES2F_ADD_API_CASE(compressedteximage2d_invalid_size, "Invalid glCompressedTexImage2D() usage",
    607 		{
    608 			vector<deInt32> compressedFormats;
    609 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
    610 			if (!compressedFormats.empty())
    611 			{
    612 				m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data.");
    613 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], 0, 0, 0, -1, 0);
    614 				expectError(GL_INVALID_VALUE);
    615 				m_log << TestLog::EndSection;
    616 			}
    617 		});
    618 
    619 	// glCopyTexImage2D
    620 
    621 	ES2F_ADD_API_CASE(copyteximage2d_invalid_target, "Invalid glCopyTexImage2D() usage",
    622 		{
    623 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is invalid.");
    624 			glCopyTexImage2D(0, 0, GL_RGB, 0, 0, 64, 64, 0);
    625 			expectError(GL_INVALID_ENUM);
    626 			m_log << TestLog::EndSection;
    627 		});
    628 	ES2F_ADD_API_CASE(copyteximage2d_invalid_format_tex2d, "Invalid glCopyTexImage2D() usage",
    629 		{
    630 			m_log << TestLog::Section("", "GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not an accepted format.");
    631 			glCopyTexImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 64, 64, 0);
    632 			expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
    633 			m_log << TestLog::EndSection;
    634 		});
    635 	ES2F_ADD_API_CASE(copyteximage2d_invalid_format_cube, "Invalid glCopyTexImage2D() usage",
    636 		{
    637 			m_log << TestLog::Section("", "GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not an accepted format.");
    638 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 16, 16, 0);
    639 			expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
    640 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 16, 16, 0);
    641 			expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
    642 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 16, 16, 0);
    643 			expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
    644 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 16, 16, 0);
    645 			expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
    646 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 16, 16, 0);
    647 			expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
    648 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 16, 16, 0);
    649 			expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
    650 			m_log << TestLog::EndSection;
    651 		});
    652 	ES2F_ADD_API_CASE(copyteximage2d_inequal_width_height_cube, "Invalid glCopyTexImage2D() usage",
    653 		{
    654 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if target is one of the six cube map 2D image targets and the width and height parameters are not equal.");
    655 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 16, 17, 0);
    656 			expectError(GL_INVALID_VALUE);
    657 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 16, 17, 0);
    658 			expectError(GL_INVALID_VALUE);
    659 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 16, 17, 0);
    660 			expectError(GL_INVALID_VALUE);
    661 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 16, 17, 0);
    662 			expectError(GL_INVALID_VALUE);
    663 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 16, 17, 0);
    664 			expectError(GL_INVALID_VALUE);
    665 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 16, 17, 0);
    666 			expectError(GL_INVALID_VALUE);
    667 			m_log << TestLog::EndSection;
    668 		});
    669 	ES2F_ADD_API_CASE(copyteximage2d_neg_level_tex2d, "Invalid glCopyTexImage2D() usage",
    670 		{
    671 			m_log << TestLog::Section("", "");
    672 			glCopyTexImage2D(GL_TEXTURE_2D, -1, GL_RGB, 0, 0, 64, 64, 0);
    673 			expectError(GL_INVALID_VALUE);
    674 			m_log << TestLog::EndSection;
    675 		});
    676 	ES2F_ADD_API_CASE(copyteximage2d_neg_level_cube, "Invalid glCopyTexImage2D() usage",
    677 		{
    678 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
    679 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_RGB, 0, 0, 16, 16, 0);
    680 			expectError(GL_INVALID_VALUE);
    681 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_RGB, 0, 0, 16, 16, 0);
    682 			expectError(GL_INVALID_VALUE);
    683 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_RGB, 0, 0, 16, 16, 0);
    684 			expectError(GL_INVALID_VALUE);
    685 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, GL_RGB, 0, 0, 16, 16, 0);
    686 			expectError(GL_INVALID_VALUE);
    687 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, GL_RGB, 0, 0, 16, 16, 0);
    688 			expectError(GL_INVALID_VALUE);
    689 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, GL_RGB, 0, 0, 16, 16, 0);
    690 			expectError(GL_INVALID_VALUE);
    691 			m_log << TestLog::EndSection;
    692 		});
    693 	ES2F_ADD_API_CASE(copyteximage2d_level_max_tex2d, "Invalid glCopyTexImage2D() usage",
    694 		{
    695 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
    696 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE)) + 1;
    697 			glCopyTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_RGB, 0, 0, 64, 64, 0);
    698 			expectError(GL_INVALID_VALUE);
    699 			m_log << TestLog::EndSection;
    700 		});
    701 	ES2F_ADD_API_CASE(copyteximage2d_level_max_cube, "Invalid glCopyTexImage2D() usage",
    702 		{
    703 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
    704 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
    705 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxTextureSize, GL_RGB, 0, 0, 16, 16, 0);
    706 			expectError(GL_INVALID_VALUE);
    707 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxTextureSize, GL_RGB, 0, 0, 16, 16, 0);
    708 			expectError(GL_INVALID_VALUE);
    709 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxTextureSize, GL_RGB, 0, 0, 16, 16, 0);
    710 			expectError(GL_INVALID_VALUE);
    711 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxTextureSize, GL_RGB, 0, 0, 16, 16, 0);
    712 			expectError(GL_INVALID_VALUE);
    713 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxTextureSize, GL_RGB, 0, 0, 16, 16, 0);
    714 			expectError(GL_INVALID_VALUE);
    715 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxTextureSize, GL_RGB, 0, 0, 16, 16, 0);
    716 			expectError(GL_INVALID_VALUE);
    717 			m_log << TestLog::EndSection;
    718 		});
    719 	ES2F_ADD_API_CASE(copyteximage2d_invalid_width_height_tex2d, "Invalid glCopyTexImage2D() usage",
    720 		{
    721 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    722 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, -1, 1, 0);
    723 			expectError(GL_INVALID_VALUE);
    724 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, -1, 0);
    725 			expectError(GL_INVALID_VALUE);
    726 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, -1, -1, 0);
    727 			expectError(GL_INVALID_VALUE);
    728 			m_log << TestLog::EndSection;
    729 		});
    730 	ES2F_ADD_API_CASE(copyteximage2d_invalid_width_height_cube_pos_x, "Invalid glCopyTexImage2D() usage",
    731 		{
    732 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    733 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, -1, 1, 0);
    734 			expectError(GL_INVALID_VALUE);
    735 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 1, -1, 0);
    736 			expectError(GL_INVALID_VALUE);
    737 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, -1, -1, 0);
    738 			expectError(GL_INVALID_VALUE);
    739 			m_log << TestLog::EndSection;
    740 		});
    741 	ES2F_ADD_API_CASE(copyteximage2d_invalid_width_height_cube_pos_y, "Invalid glCopyTexImage2D() usage",
    742 		{
    743 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    744 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, -1, 1, 0);
    745 			expectError(GL_INVALID_VALUE);
    746 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 1, -1, 0);
    747 			expectError(GL_INVALID_VALUE);
    748 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, -1, -1, 0);
    749 			expectError(GL_INVALID_VALUE);
    750 			m_log << TestLog::EndSection;
    751 		});
    752 	ES2F_ADD_API_CASE(copyteximage2d_invalid_width_height_cube_pos_z, "Invalid glCopyTexImage2D() usage",
    753 		{
    754 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    755 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, -1, 1, 0);
    756 			expectError(GL_INVALID_VALUE);
    757 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 1, -1, 0);
    758 			expectError(GL_INVALID_VALUE);
    759 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, -1, -1, 0);
    760 			expectError(GL_INVALID_VALUE);
    761 			m_log << TestLog::EndSection;
    762 		});
    763 	ES2F_ADD_API_CASE(copyteximage2d_invalid_width_height_cube_neg_x, "Invalid glCopyTexImage2D() usage",
    764 		{
    765 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    766 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, -1, 1, 0);
    767 			expectError(GL_INVALID_VALUE);
    768 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 1, -1, 0);
    769 			expectError(GL_INVALID_VALUE);
    770 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, -1, -1, 0);
    771 			expectError(GL_INVALID_VALUE);
    772 			m_log << TestLog::EndSection;
    773 		});
    774 	ES2F_ADD_API_CASE(copyteximage2d_invalid_width_height_cube_neg_y, "Invalid glCopyTexImage2D() usage",
    775 		{
    776 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    777 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, -1, 1, 0);
    778 			expectError(GL_INVALID_VALUE);
    779 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 1, -1, 0);
    780 			expectError(GL_INVALID_VALUE);
    781 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, -1, -1, 0);
    782 			expectError(GL_INVALID_VALUE);
    783 			m_log << TestLog::EndSection;
    784 		});
    785 	ES2F_ADD_API_CASE(copyteximage2d_invalid_width_height_cube_neg_z, "Invalid glCopyTexImage2D() usage",
    786 		{
    787 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
    788 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, -1, 1, 0);
    789 			expectError(GL_INVALID_VALUE);
    790 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 1, -1, 0);
    791 			expectError(GL_INVALID_VALUE);
    792 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, -1, -1, 0);
    793 			expectError(GL_INVALID_VALUE);
    794 			m_log << TestLog::EndSection;
    795 		});
    796 	ES2F_ADD_API_CASE(copyteximage2d_width_height_max_tex2d, "Invalid glCopyTexImage2D() usage",
    797 		{
    798 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE.");
    799 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE) + 1;
    800 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
    801 			expectError(GL_INVALID_VALUE);
    802 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
    803 			expectError(GL_INVALID_VALUE);
    804 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
    805 			expectError(GL_INVALID_VALUE);
    806 			m_log << TestLog::EndSection;
    807 		});
    808 	ES2F_ADD_API_CASE(copyteximage2d_width_height_max_cube_pos_x, "Invalid glCopyTexImage2D() usage",
    809 		{
    810 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    811 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    812 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
    813 			expectError(GL_INVALID_VALUE);
    814 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
    815 			expectError(GL_INVALID_VALUE);
    816 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
    817 			expectError(GL_INVALID_VALUE);
    818 			m_log << TestLog::EndSection;
    819 		});
    820 	ES2F_ADD_API_CASE(copyteximage2d_width_height_max_cube_pos_y, "Invalid glCopyTexImage2D() usage",
    821 		{
    822 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    823 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    824 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
    825 			expectError(GL_INVALID_VALUE);
    826 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
    827 			expectError(GL_INVALID_VALUE);
    828 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
    829 			expectError(GL_INVALID_VALUE);
    830 			m_log << TestLog::EndSection;
    831 		});
    832 	ES2F_ADD_API_CASE(copyteximage2d_width_height_max_cube_pos_z, "Invalid glCopyTexImage2D() usage",
    833 		{
    834 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    835 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    836 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
    837 			expectError(GL_INVALID_VALUE);
    838 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
    839 			expectError(GL_INVALID_VALUE);
    840 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
    841 			expectError(GL_INVALID_VALUE);
    842 			m_log << TestLog::EndSection;
    843 		});
    844 	ES2F_ADD_API_CASE(copyteximage2d_width_height_max_cube_neg_x, "Invalid glCopyTexImage2D() usage",
    845 		{
    846 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    847 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    848 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
    849 			expectError(GL_INVALID_VALUE);
    850 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
    851 			expectError(GL_INVALID_VALUE);
    852 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
    853 			expectError(GL_INVALID_VALUE);
    854 			m_log << TestLog::EndSection;
    855 		});
    856 	ES2F_ADD_API_CASE(copyteximage2d_width_height_max_cube_neg_y, "Invalid glCopyTexImage2D() usage",
    857 		{
    858 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    859 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    860 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
    861 			expectError(GL_INVALID_VALUE);
    862 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
    863 			expectError(GL_INVALID_VALUE);
    864 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
    865 			expectError(GL_INVALID_VALUE);
    866 			m_log << TestLog::EndSection;
    867 		});
    868 	ES2F_ADD_API_CASE(copyteximage2d_width_height_max_cube_neg_z, "Invalid glCopyTexImage2D() usage",
    869 		{
    870 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
    871 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
    872 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
    873 			expectError(GL_INVALID_VALUE);
    874 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
    875 			expectError(GL_INVALID_VALUE);
    876 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
    877 			expectError(GL_INVALID_VALUE);
    878 			m_log << TestLog::EndSection;
    879 		});
    880 	ES2F_ADD_API_CASE(copyteximage2d_invalid_border_tex2d, "Invalid glCopyTexImage2D() usage",
    881 		{
    882 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    883 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 64, 64, -1);
    884 			expectError(GL_INVALID_VALUE);
    885 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 64, 64, 1);
    886 			expectError(GL_INVALID_VALUE);
    887 			m_log << TestLog::EndSection;
    888 		});
    889 	ES2F_ADD_API_CASE(copyteximage2d_invalid_border_cube_pos_x, "Invalid glCopyTexImage2D() usage",
    890 		{
    891 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    892 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 16, 16, -1);
    893 			expectError(GL_INVALID_VALUE);
    894 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 16, 16, 1);
    895 			expectError(GL_INVALID_VALUE);
    896 			m_log << TestLog::EndSection;
    897 		});
    898 	ES2F_ADD_API_CASE(copyteximage2d_invalid_border_cube_pos_y, "Invalid glCopyTexImage2D() usage",
    899 		{
    900 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    901 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 16, 16, -1);
    902 			expectError(GL_INVALID_VALUE);
    903 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 16, 16, 1);
    904 			expectError(GL_INVALID_VALUE);
    905 			m_log << TestLog::EndSection;
    906 		});
    907 	ES2F_ADD_API_CASE(copyteximage2d_invalid_border_cube_pos_z, "Invalid glCopyTexImage2D() usage",
    908 		{
    909 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    910 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 16, 16, -1);
    911 			expectError(GL_INVALID_VALUE);
    912 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 16, 16, 1);
    913 			expectError(GL_INVALID_VALUE);
    914 			m_log << TestLog::EndSection;
    915 		});
    916 	ES2F_ADD_API_CASE(copyteximage2d_invalid_border_cube_neg_x, "Invalid glCopyTexImage2D() usage",
    917 		{
    918 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    919 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 16, 16, -1);
    920 			expectError(GL_INVALID_VALUE);
    921 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 16, 16, 1);
    922 			expectError(GL_INVALID_VALUE);
    923 			m_log << TestLog::EndSection;
    924 		});
    925 	ES2F_ADD_API_CASE(copyteximage2d_invalid_border_cube_neg_y, "Invalid glCopyTexImage2D() usage",
    926 		{
    927 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    928 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 16, 16, -1);
    929 			expectError(GL_INVALID_VALUE);
    930 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 16, 16, 1);
    931 			expectError(GL_INVALID_VALUE);
    932 			m_log << TestLog::EndSection;
    933 		});
    934 	ES2F_ADD_API_CASE(copyteximage2d_invalid_border_cube_neg_z, "Invalid glCopyTexImage2D() usage",
    935 		{
    936 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
    937 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 16, 16, -1);
    938 			expectError(GL_INVALID_VALUE);
    939 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 16, 16, 1);
    940 			expectError(GL_INVALID_VALUE);
    941 			m_log << TestLog::EndSection;
    942 		});
    943 
    944 	ES2F_ADD_API_CASE(copyteximage2d_incomplete_framebuffer, "Invalid glCopyTexImage2D() usage",
    945 		{
    946 			m_log << tcu::TestLog::Section("", "GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
    947 			GLuint fbo;
    948 			glGenFramebuffers(1, &fbo);
    949 			glBindFramebuffer(GL_FRAMEBUFFER, fbo);
    950 			glCheckFramebufferStatus(GL_FRAMEBUFFER);
    951 
    952 			glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 64, 64, 0);
    953 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
    954 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 16, 16, 0);
    955 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
    956 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 16, 16, 0);
    957 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
    958 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 16, 16, 0);
    959 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
    960 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 16, 16, 0);
    961 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
    962 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 16, 16, 0);
    963 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
    964 			glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 16, 16, 0);
    965 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
    966 
    967 			glBindFramebuffer(GL_FRAMEBUFFER, 0);
    968 			glDeleteFramebuffers(1, &fbo);
    969 			m_log << tcu::TestLog::EndSection;
    970 		});
    971 
    972 	// glCopyTexSubImage2D
    973 
    974 	ES2F_ADD_API_CASE(copytexsubimage2d_invalid_target, "Invalid glCopyTexSubImage2D() usage",
    975 		{
    976 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is invalid.");
    977 			glCopyTexSubImage2D(0, 0, 0, 0, 0, 0, 0, 0);
    978 			expectError(GL_INVALID_ENUM);
    979 			m_log << TestLog::EndSection;
    980 		});
    981 	ES2F_ADD_API_CASE(copytexsubimage2d_neg_level_tex2d, "Invalid glCopyTexSubImage2D() usage",
    982 		{
    983 			GLuint texture;
    984 			glGenTextures(1, &texture);
    985 			glBindTexture(GL_TEXTURE_2D, texture);
    986 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
    987 
    988 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
    989 			glCopyTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, 0, 0);
    990 			expectError(GL_INVALID_VALUE);
    991 			m_log << TestLog::EndSection;
    992 
    993 			glDeleteTextures(1, &texture);
    994 		});
    995 	ES2F_ADD_API_CASE(copytexsubimage2d_neg_level_cube, "Invalid glCopyTexSubImage2D() usage",
    996 		{
    997 			GLuint texture;
    998 			glGenTextures(1, &texture);
    999 			glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
   1000 			FOR_CUBE_FACES(faceGL, glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL););
   1001 
   1002 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
   1003 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, 0, 0, 0, 0, 0, 0);
   1004 			expectError(GL_INVALID_VALUE);
   1005 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, 0, 0, 0, 0, 0, 0);
   1006 			expectError(GL_INVALID_VALUE);
   1007 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, 0, 0, 0, 0, 0, 0);
   1008 			expectError(GL_INVALID_VALUE);
   1009 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, 0, 0, 0, 0, 0, 0);
   1010 			expectError(GL_INVALID_VALUE);
   1011 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, 0, 0, 0, 0, 0, 0);
   1012 			expectError(GL_INVALID_VALUE);
   1013 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, 0, 0, 0, 0, 0, 0);
   1014 			expectError(GL_INVALID_VALUE);
   1015 			m_log << TestLog::EndSection;
   1016 
   1017 			glDeleteTextures(1, &texture);
   1018 		});
   1019 	ES2F_ADD_API_CASE(copytexsubimage2d_level_max_tex2d, "Invalid glCopyTexSubImage2D() usage",
   1020 		{
   1021 			GLuint texture;
   1022 			glGenTextures(1, &texture);
   1023 			glBindTexture(GL_TEXTURE_2D, texture);
   1024 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1025 
   1026 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
   1027 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE)) + 1;
   1028 			glCopyTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, 0, 0);
   1029 			expectError(GL_INVALID_VALUE);
   1030 			m_log << TestLog::EndSection;
   1031 
   1032 			glDeleteTextures(1, &texture);
   1033 		});
   1034 	ES2F_ADD_API_CASE(copytexsubimage2d_level_max_cube_pos, "Invalid glCopyTexSubImage2D() usage",
   1035 		{
   1036 			GLuint texture;
   1037 			glGenTextures(1, &texture);
   1038 			glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
   1039 			FOR_CUBE_FACES(faceGL, glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL););
   1040 
   1041 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_SIZE).");
   1042 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
   1043 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxTextureSize, 0, 0, 0, 0, 0, 0);
   1044 			expectError(GL_INVALID_VALUE);
   1045 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxTextureSize, 0, 0, 0, 0, 0, 0);
   1046 			expectError(GL_INVALID_VALUE);
   1047 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxTextureSize, 0, 0, 0, 0, 0, 0);
   1048 			expectError(GL_INVALID_VALUE);
   1049 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxTextureSize, 0, 0, 0, 0, 0, 0);
   1050 			expectError(GL_INVALID_VALUE);
   1051 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxTextureSize, 0, 0, 0, 0, 0, 0);
   1052 			expectError(GL_INVALID_VALUE);
   1053 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxTextureSize, 0, 0, 0, 0, 0, 0);
   1054 			expectError(GL_INVALID_VALUE);
   1055 			m_log << TestLog::EndSection;
   1056 
   1057 			glDeleteTextures(1, &texture);
   1058 		});
   1059 	ES2F_ADD_API_CASE(copytexsubimage2d_neg_offset, "Invalid glCopyTexSubImage2D() usage",
   1060 		{
   1061 			GLuint texture;
   1062 			glGenTextures(1, &texture);
   1063 			glBindTexture(GL_TEXTURE_2D, texture);
   1064 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1065 
   1066 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if xoffset < 0 or yoffset < 0.");
   1067 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, -1, 0, 0, 0, 0, 0);
   1068 			expectError(GL_INVALID_VALUE);
   1069 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, -1, 0, 0, 0, 0);
   1070 			expectError(GL_INVALID_VALUE);
   1071 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, -1, -1, 0, 0, 0, 0);
   1072 			expectError(GL_INVALID_VALUE);
   1073 			m_log << TestLog::EndSection;
   1074 
   1075 			glDeleteTextures(1, &texture);
   1076 		});
   1077 	ES2F_ADD_API_CASE(copytexsubimage2d_offset_allowed, "Invalid glCopyTexSubImage2D() usage",
   1078 		{
   1079 			GLuint texture;
   1080 			glGenTextures(1, &texture);
   1081 			glBindTexture(GL_TEXTURE_2D, texture);
   1082 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1083 
   1084 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if xoffset + width > texture_width or yoffset + height > texture_height.");
   1085 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 8, 4, 0, 0, 10, 10);
   1086 			expectError(GL_INVALID_VALUE);
   1087 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 4, 8, 0, 0, 10, 10);
   1088 			expectError(GL_INVALID_VALUE);
   1089 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 8, 8, 0, 0, 10, 10);
   1090 			expectError(GL_INVALID_VALUE);
   1091 			m_log << TestLog::EndSection;
   1092 
   1093 			glDeleteTextures(1, &texture);
   1094 		});
   1095 	ES2F_ADD_API_CASE(copytexsubimage2d_neg_wdt_hgt, "Invalid glCopyTexSubImage2D() usage",
   1096 		{
   1097 			GLuint texture;
   1098 			glGenTextures(1, &texture);
   1099 			glBindTexture(GL_TEXTURE_2D, texture);
   1100 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1101 
   1102 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1103 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, -1, 0);
   1104 			expectError(GL_INVALID_VALUE);
   1105 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, -1);
   1106 			expectError(GL_INVALID_VALUE);
   1107 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, -1, -1);
   1108 			expectError(GL_INVALID_VALUE);
   1109 			m_log << TestLog::EndSection;
   1110 
   1111 			glDeleteTextures(1, &texture);
   1112 		});
   1113 	ES2F_ADD_API_CASE(copytexsubimage2d_incomplete_framebuffer, "Invalid glCopyTexSubImage2D() usage",
   1114 		{
   1115 			m_log << tcu::TestLog::Section("", "GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
   1116 
   1117 			GLuint texture[2];
   1118 			GLuint fbo;
   1119 
   1120 			glGenTextures			(2, texture);
   1121 			glBindTexture			(GL_TEXTURE_2D, texture[0]);
   1122 			glTexImage2D			(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1123 			glBindTexture			(GL_TEXTURE_CUBE_MAP, texture[1]);
   1124 			glTexImage2D			(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1125 			glTexImage2D			(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1126 			glTexImage2D			(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1127 			glTexImage2D			(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1128 			glTexImage2D			(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1129 			glTexImage2D			(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1130 			expectError(GL_NO_ERROR);
   1131 
   1132 			glGenFramebuffers(1, &fbo);
   1133 			glBindFramebuffer(GL_FRAMEBUFFER, fbo);
   1134 			glCheckFramebufferStatus(GL_FRAMEBUFFER);
   1135 			expectError(GL_NO_ERROR);
   1136 
   1137 			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0);
   1138 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
   1139 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 0, 0, 0);
   1140 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
   1141 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 0, 0, 0);
   1142 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
   1143 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 0, 0, 0);
   1144 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
   1145 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 0, 0, 0);
   1146 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
   1147 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 0, 0, 0);
   1148 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
   1149 			glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 0, 0, 0);
   1150 			expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
   1151 
   1152 			glBindFramebuffer(GL_FRAMEBUFFER, 0);
   1153 			glDeleteFramebuffers(1, &fbo);
   1154 			glDeleteTextures(2, texture);
   1155 
   1156 			m_log << tcu::TestLog::EndSection;
   1157 
   1158 		});
   1159 
   1160 	// glDeleteTextures
   1161 
   1162 	ES2F_ADD_API_CASE(deletetextures_invalid_number, "Invalid glDeleteTextures() usage",
   1163 		{
   1164 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
   1165 			glDeleteTextures(-1,0);
   1166 			expectError(GL_INVALID_VALUE);
   1167 			m_log << TestLog::EndSection;
   1168 		});
   1169 	ES2F_ADD_API_CASE(deletetextures_invalid_number_bind, "Invalid glDeleteTextures() usage",
   1170 		{
   1171 			GLuint texture;
   1172 			glGenTextures(1, &texture);
   1173 
   1174 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
   1175 			glBindTexture(GL_TEXTURE_2D, texture);
   1176 			glDeleteTextures(-1,0);
   1177 			expectError(GL_INVALID_VALUE);
   1178 			m_log << TestLog::EndSection;
   1179 
   1180 			glDeleteTextures(1, &texture);
   1181 		});
   1182 
   1183 	// glGenerateMipmap
   1184 
   1185 	ES2F_ADD_API_CASE(generatemipmap_invalid_target, "Invalid glGenerateMipmap() usage",
   1186 		{
   1187 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is not GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP.");
   1188 			glGenerateMipmap(0);
   1189 			expectError(GL_INVALID_ENUM);
   1190 			m_log << TestLog::EndSection;
   1191 		});
   1192 	ES2F_ADD_API_CASE(generatemipmap_npot_wdt_hgt, "Invalid glGenerateMipmap() usage",
   1193 		{
   1194 			GLuint texture;
   1195 
   1196 			if (m_context.getContextInfo().isExtensionSupported("GL_OES_texture_npot"))
   1197 			{
   1198 				m_log	<< tcu::TestLog::Message
   1199 						<< "GL_OES_texture_npot extension removes error condition, skipping test"
   1200 						<< tcu::TestLog::EndMessage;
   1201 				return;
   1202 			}
   1203 
   1204 			glActiveTexture(GL_TEXTURE0);
   1205 			glGenTextures(1, &texture);
   1206 			glBindTexture(GL_TEXTURE_2D, texture);
   1207 
   1208 			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if either the width or height of the zero level array is not a power of two.");
   1209 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 257, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1210 			glGenerateMipmap(GL_TEXTURE_2D);
   1211 			expectError(GL_INVALID_OPERATION);
   1212 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 257, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1213 			glGenerateMipmap(GL_TEXTURE_2D);
   1214 			expectError(GL_INVALID_OPERATION);
   1215 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 257, 257, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1216 			glGenerateMipmap(GL_TEXTURE_2D);
   1217 			expectError(GL_INVALID_OPERATION);
   1218 			m_log << TestLog::EndSection;
   1219 
   1220 			glDeleteTextures(1, &texture);
   1221 		});
   1222 	ES2F_ADD_API_CASE(generatemipmap_zero_level_array_compressed, "Invalid glGenerateMipmap() usage",
   1223 		{
   1224 			vector<deInt32> compressedFormats;
   1225 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
   1226 			if (!compressedFormats.empty())
   1227 			{
   1228 				m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if the zero level array is stored in a compressed internal format.");
   1229 				glCompressedTexImage2D(GL_TEXTURE_2D, 0, compressedFormats[0], 0, 0, 0, 0, 0);
   1230 				glGenerateMipmap(GL_TEXTURE_2D);
   1231 				expectError(GL_INVALID_OPERATION);
   1232 				m_log << TestLog::EndSection;
   1233 			}
   1234 		});
   1235 	ES2F_ADD_API_CASE(generatemipmap_incomplete_cube, "Invalid glGenerateMipmap() usage",
   1236 		{
   1237 			GLuint texture;
   1238 			glGenTextures(1, &texture);
   1239 			glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
   1240 
   1241 			m_log << TestLog::Section("", "INVALID_OPERATION is generated if the texture bound to target is not cube complete.");
   1242 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1243 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1244 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1245 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1246 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1247 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1248 			glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
   1249 			expectError(GL_INVALID_OPERATION);
   1250 			m_log << TestLog::EndSection;
   1251 
   1252 			glDeleteTextures(1, &texture);
   1253 		});
   1254 
   1255 	// glGenTextures
   1256 
   1257 	ES2F_ADD_API_CASE(gentextures_invalid_size, "Invalid glGenTextures() usage",
   1258 		{
   1259 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if n is negative.");
   1260 			glGenTextures(-1, 0);
   1261 			expectError(GL_INVALID_VALUE);
   1262 			m_log << TestLog::EndSection;
   1263 		});
   1264 
   1265 	// glPixelStorei
   1266 
   1267 	ES2F_ADD_API_CASE(pixelstorei_invalid_pname, "Invalid glPixelStorei() usage",
   1268 		{
   1269 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if pname is not an accepted value.");
   1270 			glPixelStorei(0,1);
   1271 			expectError(GL_INVALID_ENUM);
   1272 			m_log << TestLog::EndSection;
   1273 		});
   1274 	ES2F_ADD_API_CASE(pixelstorei_invalid_param, "Invalid glPixelStorei() usage",
   1275 		{
   1276 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if alignment is specified as other than 1, 2, 4, or 8.");
   1277 			glPixelStorei(GL_PACK_ALIGNMENT, 0);
   1278 			expectError(GL_INVALID_VALUE);
   1279 			glPixelStorei(GL_UNPACK_ALIGNMENT, 0);
   1280 			expectError(GL_INVALID_VALUE);
   1281 			glPixelStorei(GL_PACK_ALIGNMENT, 16);
   1282 			expectError(GL_INVALID_VALUE);
   1283 			glPixelStorei(GL_UNPACK_ALIGNMENT, 16);
   1284 			expectError(GL_INVALID_VALUE);
   1285 			m_log << TestLog::EndSection;
   1286 		});
   1287 
   1288 	// glTexImage2D
   1289 
   1290 	ES2F_ADD_API_CASE(teximage2d_invalid_target, "Invalid glTexImage2D() usage",
   1291 		{
   1292 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is invalid.");
   1293 			glTexImage2D(0, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1294 			expectError(GL_INVALID_ENUM);
   1295 			m_log << TestLog::EndSection;
   1296 		});
   1297 	ES2F_ADD_API_CASE(teximage2d_invalid_format, "Invalid glTexImage2D() usage",
   1298 		{
   1299 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if format or type is not an accepted value.");
   1300 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, 0, GL_UNSIGNED_BYTE, 0);
   1301 			expectError(GL_INVALID_ENUM);
   1302 			m_log << TestLog::EndSection;
   1303 		});
   1304 	ES2F_ADD_API_CASE(teximage2d_invalid_type, "Invalid glTexImage2D() usage",
   1305 		{
   1306 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if format or type is not an accepted value.");
   1307 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, 0, 0);
   1308 			expectError(GL_INVALID_ENUM);
   1309 			m_log << TestLog::EndSection;
   1310 		});
   1311 	ES2F_ADD_API_CASE(teximage2d_inequal_width_height_cube, "Invalid glTexImage2D() usage",
   1312 		{
   1313 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if target is one of the six cube map 2D image targets and the width and height parameters are not equal.");
   1314 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1315 			expectError(GL_INVALID_VALUE);
   1316 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1317 			expectError(GL_INVALID_VALUE);
   1318 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1319 			expectError(GL_INVALID_VALUE);
   1320 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1321 			expectError(GL_INVALID_VALUE);
   1322 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1323 			expectError(GL_INVALID_VALUE);
   1324 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1325 			expectError(GL_INVALID_VALUE);
   1326 			m_log << TestLog::EndSection;
   1327 		});
   1328 	ES2F_ADD_API_CASE(teximage2d_neg_level_tex2d, "Invalid glTexImage2D() usage",
   1329 		{
   1330 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
   1331 			glTexImage2D(GL_TEXTURE_2D, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1332 			expectError(GL_INVALID_VALUE);
   1333 			m_log << TestLog::EndSection;
   1334 		});
   1335 	ES2F_ADD_API_CASE(teximage2d_neg_level_cube, "Invalid glTexImage2D() usage",
   1336 		{
   1337 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
   1338 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1339 			expectError(GL_INVALID_VALUE);
   1340 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1341 			expectError(GL_INVALID_VALUE);
   1342 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1343 			expectError(GL_INVALID_VALUE);
   1344 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1345 			expectError(GL_INVALID_VALUE);
   1346 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1347 			expectError(GL_INVALID_VALUE);
   1348 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1349 			expectError(GL_INVALID_VALUE);
   1350 			m_log << TestLog::EndSection;
   1351 		});
   1352 	ES2F_ADD_API_CASE(teximage2d_level_max_tex2d, "Invalid glTexImage2D() usage",
   1353 		{
   1354 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
   1355 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE)) + 1;
   1356 			glTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1357 			expectError(GL_INVALID_VALUE);
   1358 			m_log << TestLog::EndSection;
   1359 		});
   1360 	ES2F_ADD_API_CASE(teximage2d_level_max_cube, "Invalid glTexImage2D() usage",
   1361 		{
   1362 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
   1363 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
   1364 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1365 			expectError(GL_INVALID_VALUE);
   1366 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1367 			expectError(GL_INVALID_VALUE);
   1368 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1369 			expectError(GL_INVALID_VALUE);
   1370 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1371 			expectError(GL_INVALID_VALUE);
   1372 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1373 			expectError(GL_INVALID_VALUE);
   1374 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1375 			expectError(GL_INVALID_VALUE);
   1376 			m_log << TestLog::EndSection;
   1377 		});
   1378 	ES2F_ADD_API_CASE(teximage2d_invalid_internalformat, "Invalid glTexImage2D() usage",
   1379 		{
   1380 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if internalformat is not an accepted format.");
   1381 			glTexImage2D(GL_TEXTURE_2D, 0, 0, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1382 			expectError(GL_INVALID_VALUE);
   1383 			m_log << TestLog::EndSection;
   1384 		});
   1385 	ES2F_ADD_API_CASE(teximage2d_neg_width_height_tex2d, "Invalid glTexImage2D() usage",
   1386 		{
   1387 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1388 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1389 			expectError(GL_INVALID_VALUE);
   1390 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1391 			expectError(GL_INVALID_VALUE);
   1392 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1393 			expectError(GL_INVALID_VALUE);
   1394 			m_log << TestLog::EndSection;
   1395 		});
   1396 	ES2F_ADD_API_CASE(teximage2d_neg_width_height_cube_pos_x, "Invalid glTexImage2D() usage",
   1397 		{
   1398 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1399 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1400 			expectError(GL_INVALID_VALUE);
   1401 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1402 			expectError(GL_INVALID_VALUE);
   1403 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1404 			expectError(GL_INVALID_VALUE);
   1405 			m_log << TestLog::EndSection;
   1406 		});
   1407 	ES2F_ADD_API_CASE(teximage2d_neg_width_height_cube_pos_y, "Invalid glTexImage2D() usage",
   1408 		{
   1409 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1410 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1411 			expectError(GL_INVALID_VALUE);
   1412 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1413 			expectError(GL_INVALID_VALUE);
   1414 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1415 			expectError(GL_INVALID_VALUE);
   1416 			m_log << TestLog::EndSection;
   1417 		});
   1418 	ES2F_ADD_API_CASE(teximage2d_neg_width_height_cube_pos_z, "Invalid glTexImage2D() usage",
   1419 		{
   1420 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1421 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1422 			expectError(GL_INVALID_VALUE);
   1423 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1424 			expectError(GL_INVALID_VALUE);
   1425 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1426 			expectError(GL_INVALID_VALUE);
   1427 			m_log << TestLog::EndSection;
   1428 		});
   1429 	ES2F_ADD_API_CASE(teximage2d_neg_width_height_cube_neg_x, "Invalid glTexImage2D() usage",
   1430 		{
   1431 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1432 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1433 			expectError(GL_INVALID_VALUE);
   1434 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1435 			expectError(GL_INVALID_VALUE);
   1436 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1437 			expectError(GL_INVALID_VALUE);
   1438 			m_log << TestLog::EndSection;
   1439 		});
   1440 	ES2F_ADD_API_CASE(teximage2d_neg_width_height_cube_neg_y, "Invalid glTexImage2D() usage",
   1441 		{
   1442 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1443 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1444 			expectError(GL_INVALID_VALUE);
   1445 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1446 			expectError(GL_INVALID_VALUE);
   1447 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1448 			expectError(GL_INVALID_VALUE);
   1449 			m_log << TestLog::EndSection;
   1450 		});
   1451 	ES2F_ADD_API_CASE(teximage2d_neg_width_height_cube_neg_z, "Invalid glTexImage2D() usage",
   1452 		{
   1453 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1454 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1455 			expectError(GL_INVALID_VALUE);
   1456 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1457 			expectError(GL_INVALID_VALUE);
   1458 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1459 			expectError(GL_INVALID_VALUE);
   1460 			m_log << TestLog::EndSection;
   1461 		});
   1462 	ES2F_ADD_API_CASE(teximage2d_width_height_max_tex2d, "Invalid glTexImage2D() usage",
   1463 		{
   1464 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE.");
   1465 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE) + 1;
   1466 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1467 			expectError(GL_INVALID_VALUE);
   1468 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1469 			expectError(GL_INVALID_VALUE);
   1470 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1471 			expectError(GL_INVALID_VALUE);
   1472 			m_log << TestLog::EndSection;
   1473 		});
   1474 	ES2F_ADD_API_CASE(teximage2d_width_height_max_cube_pos_x, "Invalid glTexImage2D() usage",
   1475 		{
   1476 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
   1477 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
   1478 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1479 			expectError(GL_INVALID_VALUE);
   1480 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1481 			expectError(GL_INVALID_VALUE);
   1482 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1483 			expectError(GL_INVALID_VALUE);
   1484 			m_log << TestLog::EndSection;
   1485 		});
   1486 	ES2F_ADD_API_CASE(teximage2d_width_height_max_cube_pos_y, "Invalid glTexImage2D() usage",
   1487 		{
   1488 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
   1489 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
   1490 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1491 			expectError(GL_INVALID_VALUE);
   1492 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1493 			expectError(GL_INVALID_VALUE);
   1494 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1495 			expectError(GL_INVALID_VALUE);
   1496 			m_log << TestLog::EndSection;
   1497 		});
   1498 	ES2F_ADD_API_CASE(teximage2d_width_height_max_cube_pos_z, "Invalid glTexImage2D() usage",
   1499 		{
   1500 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
   1501 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
   1502 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1503 			expectError(GL_INVALID_VALUE);
   1504 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1505 			expectError(GL_INVALID_VALUE);
   1506 			glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1507 			expectError(GL_INVALID_VALUE);
   1508 			m_log << TestLog::EndSection;
   1509 		});
   1510 	ES2F_ADD_API_CASE(teximage2d_width_height_max_cube_neg_x, "Invalid glTexImage2D() usage",
   1511 		{
   1512 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
   1513 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
   1514 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1515 			expectError(GL_INVALID_VALUE);
   1516 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1517 			expectError(GL_INVALID_VALUE);
   1518 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1519 			expectError(GL_INVALID_VALUE);
   1520 			m_log << TestLog::EndSection;
   1521 		});
   1522 	ES2F_ADD_API_CASE(teximage2d_width_height_max_cube_neg_y, "Invalid glTexImage2D() usage",
   1523 		{
   1524 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
   1525 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
   1526 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1527 			expectError(GL_INVALID_VALUE);
   1528 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1529 			expectError(GL_INVALID_VALUE);
   1530 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1531 			expectError(GL_INVALID_VALUE);
   1532 			m_log << TestLog::EndSection;
   1533 		});
   1534 	ES2F_ADD_API_CASE(teximage2d_width_height_max_cube_neg_z, "Invalid glTexImage2D() usage",
   1535 		{
   1536 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
   1537 			int maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
   1538 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1539 			expectError(GL_INVALID_VALUE);
   1540 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1541 			expectError(GL_INVALID_VALUE);
   1542 			glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1543 			expectError(GL_INVALID_VALUE);
   1544 			m_log << TestLog::EndSection;
   1545 		});
   1546 	ES2F_ADD_API_CASE(teximage2d_invalid_border, "Invalid glTexImage2D() usage",
   1547 		{
   1548 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if border is not 0.");
   1549 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1550 			expectError(GL_INVALID_VALUE);
   1551 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1552 			expectError(GL_INVALID_VALUE);
   1553 			m_log << TestLog::EndSection;
   1554 		});
   1555 	ES2F_ADD_API_CASE(teximage2d_format_mismatch, "Invalid glTexImage2D() usage",
   1556 		{
   1557 			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if format does not match internalformat.");
   1558 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1559 			expectError(GL_INVALID_OPERATION);
   1560 			m_log << TestLog::EndSection;
   1561 		});
   1562 	ES2F_ADD_API_CASE(teximage2d_type_format_mismatch, "Invalid glTexImage2D() usage",
   1563 		{
   1564 			m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_4_4_4_4 or GL_UNSIGNED_SHORT_5_5_5_1 and format is not GL_RGBA.");
   1565 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
   1566 			expectError(GL_INVALID_OPERATION);
   1567 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
   1568 			expectError(GL_INVALID_OPERATION);
   1569 			m_log << TestLog::EndSection;
   1570 		});
   1571 
   1572 	// glTexSubImage2D
   1573 
   1574 	ES2F_ADD_API_CASE(texsubimage2d_invalid_target, "Invalid glTexSubImage2D() usage",
   1575 		{
   1576 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is invalid.");
   1577 			glTexSubImage2D(0, 0, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
   1578 			expectError(GL_INVALID_ENUM);
   1579 			m_log << TestLog::EndSection;
   1580 		});
   1581 	ES2F_ADD_API_CASE(texsubimage2d_invalid_format, "Invalid glTexSubImage2D() usage",
   1582 		{
   1583 			GLuint texture;
   1584 			glGenTextures(1, &texture);
   1585 			glBindTexture(GL_TEXTURE_2D, texture);
   1586 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1587 
   1588 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if format or type is not an accepted value.");
   1589 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, GL_UNSIGNED_BYTE, 0);
   1590 			expectError(GL_INVALID_ENUM);
   1591 			m_log << TestLog::EndSection;
   1592 
   1593 			glDeleteTextures(1, &texture);
   1594 		});
   1595 	ES2F_ADD_API_CASE(texsubimage2d_invalid_type, "Invalid glTexSubImage2D() usage",
   1596 		{
   1597 			GLuint texture;
   1598 			glGenTextures(1, &texture);
   1599 			glBindTexture(GL_TEXTURE_2D, texture);
   1600 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1601 
   1602 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if format or type is not an accepted value.");
   1603 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_RGB, 0, 0);
   1604 			expectError(GL_INVALID_ENUM);
   1605 			m_log << TestLog::EndSection;
   1606 
   1607 			glDeleteTextures(1, &texture);
   1608 		});
   1609 	ES2F_ADD_API_CASE(texsubimage2d_neg_level_tex2d, "Invalid glTexSubImage2D() usage",
   1610 		{
   1611 			GLuint texture;
   1612 			glGenTextures(1, &texture);
   1613 			glBindTexture(GL_TEXTURE_2D, texture);
   1614 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1615 
   1616 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
   1617 			glTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1618 			expectError(GL_INVALID_VALUE);
   1619 			m_log << TestLog::EndSection;
   1620 
   1621 			glDeleteTextures(1, &texture);
   1622 		});
   1623 	ES2F_ADD_API_CASE(texsubimage2d_neg_level_cube, "Invalid glTexSubImage2D() usage",
   1624 		{
   1625 			GLuint texture;
   1626 			glGenTextures(1, &texture);
   1627 			glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
   1628 			FOR_CUBE_FACES(faceGL, glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL););
   1629 
   1630 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
   1631 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1632 			expectError(GL_INVALID_VALUE);
   1633 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1634 			expectError(GL_INVALID_VALUE);
   1635 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1636 			expectError(GL_INVALID_VALUE);
   1637 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1638 			expectError(GL_INVALID_VALUE);
   1639 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1640 			expectError(GL_INVALID_VALUE);
   1641 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1642 			expectError(GL_INVALID_VALUE);
   1643 			m_log << TestLog::EndSection;
   1644 
   1645 			glDeleteTextures(1, &texture);
   1646 		});
   1647 	ES2F_ADD_API_CASE(texsubimage2d_level_max_tex2d, "Invalid glTexSubImage2D() usage",
   1648 		{
   1649 			GLuint texture;
   1650 			glGenTextures(1, &texture);
   1651 			glBindTexture(GL_TEXTURE_2D, texture);
   1652 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1653 
   1654 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
   1655 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE)) + 1;
   1656 			glTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1657 			expectError(GL_INVALID_VALUE);
   1658 			m_log << TestLog::EndSection;
   1659 
   1660 			glDeleteTextures(1, &texture);
   1661 		});
   1662 	ES2F_ADD_API_CASE(texsubimage2d_level_max_cube, "Invalid glTexSubImage2D() usage",
   1663 		{
   1664 			GLuint texture;
   1665 			glGenTextures(1, &texture);
   1666 			glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
   1667 			FOR_CUBE_FACES(faceGL, glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL););
   1668 
   1669 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
   1670 			deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
   1671 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxTextureSize, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1672 			expectError(GL_INVALID_VALUE);
   1673 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxTextureSize, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1674 			expectError(GL_INVALID_VALUE);
   1675 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxTextureSize, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1676 			expectError(GL_INVALID_VALUE);
   1677 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxTextureSize, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1678 			expectError(GL_INVALID_VALUE);
   1679 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxTextureSize, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1680 			expectError(GL_INVALID_VALUE);
   1681 			glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxTextureSize, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1682 			expectError(GL_INVALID_VALUE);
   1683 			m_log << TestLog::EndSection;
   1684 
   1685 			glDeleteTextures(1, &texture);
   1686 		});
   1687 	ES2F_ADD_API_CASE(texsubimage2d_neg_offset, "Invalid glTexSubImage2D() usage",
   1688 		{
   1689 			GLuint texture;
   1690 			glGenTextures(1, &texture);
   1691 			glBindTexture(GL_TEXTURE_2D, texture);
   1692 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1693 
   1694 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if xoffset or yoffset are negative.");
   1695 			glTexSubImage2D(GL_TEXTURE_2D, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1696 			expectError(GL_INVALID_VALUE);
   1697 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1698 			expectError(GL_INVALID_VALUE);
   1699 			glTexSubImage2D(GL_TEXTURE_2D, 0, -1, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1700 			expectError(GL_INVALID_VALUE);
   1701 			m_log << TestLog::EndSection;
   1702 
   1703 			glDeleteTextures(1, &texture);
   1704 		});
   1705 	ES2F_ADD_API_CASE(texsubimage2d_offset_allowed, "Invalid glTexSubImage2D() usage",
   1706 		{
   1707 			GLuint texture;
   1708 			glGenTextures(1, &texture);
   1709 			glBindTexture(GL_TEXTURE_2D, texture);
   1710 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1711 
   1712 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if xoffset + width > texture_width or yoffset + height > texture_height.");
   1713 			glTexSubImage2D(GL_TEXTURE_2D, 0, 8, 4, 10, 10, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1714 			expectError(GL_INVALID_VALUE);
   1715 			glTexSubImage2D(GL_TEXTURE_2D, 0, 4, 8, 10, 10, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1716 			expectError(GL_INVALID_VALUE);
   1717 			glTexSubImage2D(GL_TEXTURE_2D, 0, 8, 8, 10, 10, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1718 			expectError(GL_INVALID_VALUE);
   1719 			m_log << TestLog::EndSection;
   1720 
   1721 			glDeleteTextures(1, &texture);
   1722 		});
   1723 	ES2F_ADD_API_CASE(texsubimage2d_neg_wdt_hgt, "Invalid glTexSubImage2D() usage",
   1724 		{
   1725 			GLuint texture;
   1726 			glGenTextures(1, &texture);
   1727 			glBindTexture(GL_TEXTURE_2D, texture);
   1728 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1729 
   1730 			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   1731 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1732 			expectError(GL_INVALID_VALUE);
   1733 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1734 			expectError(GL_INVALID_VALUE);
   1735 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, -1, -GL_RGBA, GL_UNSIGNED_BYTE, 0);
   1736 			expectError(GL_INVALID_VALUE);
   1737 			m_log << TestLog::EndSection;
   1738 
   1739 			glDeleteTextures(1, &texture);
   1740 		});
   1741 	ES2F_ADD_API_CASE(texsubimage2d_type_format_mismatch, "Invalid glTexSubImage2D() usage",
   1742 		{
   1743 			GLuint texture;
   1744 			glGenTextures(1, &texture);
   1745 			glBindTexture(GL_TEXTURE_2D, texture);
   1746 			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
   1747 
   1748 			m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_5_6_5 and format is not GL_RGB");
   1749 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, 0);
   1750 			expectError(GL_INVALID_OPERATION);
   1751 			m_log << tcu::TestLog::EndSection;
   1752 
   1753 			m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_4_4_4_4 or GL_UNSIGNED_SHORT_5_5_5_1 and format is not GL_RGBA.");
   1754 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
   1755 			expectError(GL_INVALID_OPERATION);
   1756 			glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
   1757 			expectError(GL_INVALID_OPERATION);
   1758 			m_log << tcu::TestLog::EndSection;
   1759 
   1760 			glDeleteTextures(1, &texture);
   1761 		});
   1762 
   1763 	// glTexParameteri
   1764 
   1765 	ES2F_ADD_API_CASE(texparameteri, "Invalid glTexParameteri() usage",
   1766 		{
   1767 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1768 			glTexParameteri(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   1769 			expectError(GL_INVALID_ENUM);
   1770 			glTexParameteri(GL_TEXTURE_2D, 0, GL_LINEAR);
   1771 			expectError(GL_INVALID_ENUM);
   1772 			glTexParameteri(0, 0, GL_LINEAR);
   1773 			expectError(GL_INVALID_ENUM);
   1774 			m_log << TestLog::EndSection;
   1775 
   1776 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1777 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
   1778 			expectError(GL_INVALID_ENUM);
   1779 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
   1780 			expectError(GL_INVALID_ENUM);
   1781 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
   1782 			expectError(GL_INVALID_ENUM);
   1783 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
   1784 			expectError(GL_INVALID_ENUM);
   1785 			m_log << TestLog::EndSection;
   1786 		});
   1787 	ES2F_ADD_API_CASE(texparameteri_bind, "Invalid glTexParameteri() usage",
   1788 		{
   1789 			GLuint texture;
   1790 			glGenTextures(1, &texture);
   1791 			glBindTexture(GL_TEXTURE_2D, texture);
   1792 
   1793 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1794 			glTexParameteri(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   1795 			expectError(GL_INVALID_ENUM);
   1796 			glTexParameteri(GL_TEXTURE_2D, 0, GL_LINEAR);
   1797 			expectError(GL_INVALID_ENUM);
   1798 			glTexParameteri(0, 0, GL_LINEAR);
   1799 			expectError(GL_INVALID_ENUM);
   1800 			m_log << TestLog::EndSection;
   1801 
   1802 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1803 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
   1804 			expectError(GL_INVALID_ENUM);
   1805 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
   1806 			expectError(GL_INVALID_ENUM);
   1807 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
   1808 			expectError(GL_INVALID_ENUM);
   1809 			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
   1810 			expectError(GL_INVALID_ENUM);
   1811 			m_log << TestLog::EndSection;
   1812 
   1813 			glDeleteTextures(1, &texture);
   1814 		});
   1815 
   1816 	// glTexParameterf
   1817 
   1818 	ES2F_ADD_API_CASE(texparameterf, "Invalid glTexParameterf() usage",
   1819 		{
   1820 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1821 			glTexParameterf(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   1822 			expectError(GL_INVALID_ENUM);
   1823 			glTexParameterf(GL_TEXTURE_2D, 0, GL_LINEAR);
   1824 			expectError(GL_INVALID_ENUM);
   1825 			glTexParameterf(0, 0, GL_LINEAR);
   1826 			expectError(GL_INVALID_ENUM);
   1827 			m_log << TestLog::EndSection;
   1828 
   1829 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1830 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
   1831 			expectError(GL_INVALID_ENUM);
   1832 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
   1833 			expectError(GL_INVALID_ENUM);
   1834 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
   1835 			expectError(GL_INVALID_ENUM);
   1836 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
   1837 			expectError(GL_INVALID_ENUM);
   1838 			m_log << TestLog::EndSection;
   1839 		});
   1840 	ES2F_ADD_API_CASE(texparameterf_bind, "Invalid glTexParameterf() usage",
   1841 		{
   1842 			GLuint texture;
   1843 			glGenTextures(1, &texture);
   1844 			glBindTexture(GL_TEXTURE_2D, texture);
   1845 
   1846 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1847 			glTexParameterf(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   1848 			expectError(GL_INVALID_ENUM);
   1849 			glTexParameterf(GL_TEXTURE_2D, 0, GL_LINEAR);
   1850 			expectError(GL_INVALID_ENUM);
   1851 			glTexParameterf(0, 0, GL_LINEAR);
   1852 			expectError(GL_INVALID_ENUM);
   1853 			m_log << TestLog::EndSection;
   1854 
   1855 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1856 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
   1857 			expectError(GL_INVALID_ENUM);
   1858 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
   1859 			expectError(GL_INVALID_ENUM);
   1860 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
   1861 			expectError(GL_INVALID_ENUM);
   1862 			glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
   1863 			expectError(GL_INVALID_ENUM);
   1864 			m_log << TestLog::EndSection;
   1865 
   1866 			glDeleteTextures(1, &texture);
   1867 		});
   1868 
   1869 	// glTexParameteriv
   1870 
   1871 	ES2F_ADD_API_CASE(texparameteriv, "Invalid glTexParameteriv() usage",
   1872 		{
   1873 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1874 			GLint params[1] = {GL_LINEAR};
   1875 			glTexParameteriv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
   1876 			expectError(GL_INVALID_ENUM);
   1877 			glTexParameteriv(GL_TEXTURE_2D, 0, &params[0]);
   1878 			expectError(GL_INVALID_ENUM);
   1879 			glTexParameteriv(0, 0, &params[0]);
   1880 			expectError(GL_INVALID_ENUM);
   1881 			m_log << TestLog::EndSection;
   1882 
   1883 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1884 			params[0] = 0;
   1885 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
   1886 			expectError(GL_INVALID_ENUM);
   1887 			params[0] = GL_REPEAT;
   1888 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
   1889 			expectError(GL_INVALID_ENUM);
   1890 			params[0] = 0;
   1891 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
   1892 			expectError(GL_INVALID_ENUM);
   1893 			params[0] = GL_NEAREST;
   1894 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
   1895 			expectError(GL_INVALID_ENUM);
   1896 			m_log << TestLog::EndSection;
   1897 		});
   1898 	ES2F_ADD_API_CASE(texparameteriv_bind, "Invalid glTexParameteriv() usage",
   1899 		{
   1900 			GLuint texture;
   1901 			glGenTextures(1, &texture);
   1902 			glBindTexture(GL_TEXTURE_2D, texture);
   1903 
   1904 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1905 			GLint params[1] = {GL_LINEAR};
   1906 			glTexParameteriv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
   1907 			expectError(GL_INVALID_ENUM);
   1908 			glTexParameteriv(GL_TEXTURE_2D, 0, &params[0]);
   1909 			expectError(GL_INVALID_ENUM);
   1910 			glTexParameteriv(0, 0, &params[0]);
   1911 			expectError(GL_INVALID_ENUM);
   1912 			m_log << TestLog::EndSection;
   1913 
   1914 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1915 			params[0] = 0;
   1916 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
   1917 			expectError(GL_INVALID_ENUM);
   1918 			params[0] = GL_REPEAT;
   1919 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
   1920 			expectError(GL_INVALID_ENUM);
   1921 			params[0] = 0;
   1922 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
   1923 			expectError(GL_INVALID_ENUM);
   1924 			params[0] = GL_NEAREST;
   1925 			glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
   1926 			expectError(GL_INVALID_ENUM);
   1927 			m_log << TestLog::EndSection;
   1928 
   1929 			glDeleteTextures(1, &texture);
   1930 		});
   1931 
   1932 	// glTexParameterfv
   1933 
   1934 	ES2F_ADD_API_CASE(texparameterfv, "Invalid glTexParameterfv() usage",
   1935 		{
   1936 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1937 			GLfloat params[1] = {GL_LINEAR};
   1938 			glTexParameterfv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
   1939 			expectError(GL_INVALID_ENUM);
   1940 			glTexParameterfv(GL_TEXTURE_2D, 0, &params[0]);
   1941 			expectError(GL_INVALID_ENUM);
   1942 			glTexParameterfv(0, 0, &params[0]);
   1943 			expectError(GL_INVALID_ENUM);
   1944 			m_log << TestLog::EndSection;
   1945 
   1946 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1947 			params[0] = 0.0f;
   1948 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
   1949 			expectError(GL_INVALID_ENUM);
   1950 			params[0] = GL_REPEAT;
   1951 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
   1952 			expectError(GL_INVALID_ENUM);
   1953 			params[0] = 0.0f;
   1954 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
   1955 			expectError(GL_INVALID_ENUM);
   1956 			params[0] = GL_NEAREST;
   1957 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
   1958 			expectError(GL_INVALID_ENUM);
   1959 			m_log << TestLog::EndSection;
   1960 		});
   1961 	ES2F_ADD_API_CASE(texparameterfv_bind, "Invalid glTexParameterfv() usage",
   1962 		{
   1963 			GLuint texture;
   1964 			glGenTextures(1, &texture);
   1965 			glBindTexture(GL_TEXTURE_2D, texture);
   1966 
   1967 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
   1968 			GLfloat params[1] = {GL_LINEAR};
   1969 			glTexParameterfv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
   1970 			expectError(GL_INVALID_ENUM);
   1971 			glTexParameterfv(GL_TEXTURE_2D, 0, &params[0]);
   1972 			expectError(GL_INVALID_ENUM);
   1973 			glTexParameterfv(0, 0, &params[0]);
   1974 			expectError(GL_INVALID_ENUM);
   1975 			m_log << TestLog::EndSection;
   1976 
   1977 			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
   1978 			params[0] = 0.0f;
   1979 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
   1980 			expectError(GL_INVALID_ENUM);
   1981 			params[0] = GL_REPEAT;
   1982 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
   1983 			expectError(GL_INVALID_ENUM);
   1984 			params[0] = 0.0f;
   1985 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
   1986 			expectError(GL_INVALID_ENUM);
   1987 			params[0] = GL_NEAREST;
   1988 			glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
   1989 			expectError(GL_INVALID_ENUM);
   1990 			m_log << TestLog::EndSection;
   1991 
   1992 			glDeleteTextures(1, &texture);
   1993 		});
   1994 
   1995 	// glCompressedTexSubImage2D
   1996 
   1997 	ES2F_ADD_API_CASE(compressedtexsubimage2d_invalid_target, "Invalid glCompressedTexSubImage2D() usage",
   1998 		{
   1999 			vector<deInt32> supported;
   2000 			vector<deInt32> accepted;
   2001 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2002 			getCompressedTexSubImage2DFormat(supported, accepted);
   2003 
   2004 			if (accepted.empty())
   2005 			{
   2006 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2007 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2008 			}
   2009 			else
   2010 			{
   2011 				for (int i = 0; i < (int)accepted.size(); i++)
   2012 				{
   2013 					const deInt32	glFormat	= accepted[i];
   2014 
   2015 					try
   2016 					{
   2017 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2018 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2019 						const int						blockSize		= tcu::getBlockSize(format);
   2020 						const std::vector<deUint8>		data			(blockSize, 0);
   2021 						GLuint							texture			= 0;
   2022 
   2023 						glGenTextures(1, &texture);
   2024 						glBindTexture(GL_TEXTURE_2D, texture);
   2025 						expectError(GL_NO_ERROR);
   2026 
   2027 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2028 						expectError(GL_NO_ERROR);
   2029 
   2030 						m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if target is invalid.");
   2031 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2032 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2033 						glCompressedTexSubImage2D(0, 0, 0, 0, 0, 0, accepted[i], 0, 0);
   2034 						expectError(GL_INVALID_ENUM);
   2035 						m_log << TestLog::EndSection;
   2036 
   2037 						glDeleteTextures(1, &texture);
   2038 						expectError(GL_NO_ERROR);
   2039 					}
   2040 					catch (const tcu::InternalError&)
   2041 					{
   2042 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2043 					}
   2044 				}
   2045 			}
   2046 		});
   2047 	ES2F_ADD_API_CASE(compressedtexsubimage2d_neg_level_tex2d, "Invalid glCompressedTexSubImage2D() usage",
   2048 		{
   2049 			vector<deInt32> supported;
   2050 			vector<deInt32> accepted;
   2051 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2052 			getCompressedTexSubImage2DFormat(supported, accepted);
   2053 
   2054 			if (accepted.empty())
   2055 			{
   2056 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2057 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2058 			}
   2059 			else
   2060 			{
   2061 				for (int i = 0; i < (int)accepted.size(); i++)
   2062 				{
   2063 					const deInt32	glFormat	= accepted[i];
   2064 
   2065 					try
   2066 					{
   2067 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2068 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2069 						const int						blockSize		= tcu::getBlockSize(format);
   2070 						const std::vector<deUint8>		data			(blockSize, 0);
   2071 						GLuint							texture			= 0;
   2072 
   2073 						glGenTextures(1, &texture);
   2074 						glBindTexture(GL_TEXTURE_2D, texture);
   2075 						expectError(GL_NO_ERROR);
   2076 
   2077 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2078 						expectError(GL_NO_ERROR);
   2079 
   2080 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
   2081 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2082 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2083 						//expectError(GL_NO_ERROR);
   2084 						glCompressedTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, accepted[i], 0, 0);
   2085 						expectError(GL_INVALID_VALUE);
   2086 						m_log << TestLog::EndSection;
   2087 
   2088 						glDeleteTextures(1, &texture);
   2089 						expectError(GL_NO_ERROR);
   2090 					}
   2091 					catch (const tcu::InternalError&)
   2092 					{
   2093 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2094 					}
   2095 				}
   2096 			}
   2097 		});
   2098 	ES2F_ADD_API_CASE(compressedtexsubimage2d_neg_level_cube, "Invalid glCompressedTexSubImage2D() usage",
   2099 		{
   2100 			vector<deInt32> supported;
   2101 			vector<deInt32> accepted;
   2102 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2103 			getCompressedTexSubImage2DFormat(supported, accepted);
   2104 
   2105 			if (accepted.empty())
   2106 			{
   2107 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2108 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2109 			}
   2110 			else
   2111 			{
   2112 				for (int i = 0; i < (int)accepted.size(); i++)
   2113 				{
   2114 					const deInt32	glFormat	= accepted[i];
   2115 
   2116 					try
   2117 					{
   2118 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2119 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2120 						const int						blockSize		= tcu::getBlockSize(format);
   2121 						const std::vector<deUint8>		data			(blockSize, 0);
   2122 						GLuint							texture			= 0;
   2123 
   2124 						glGenTextures(1, &texture);
   2125 						glBindTexture(GL_TEXTURE_2D, texture);
   2126 						expectError(GL_NO_ERROR);
   2127 
   2128 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2129 						expectError(GL_NO_ERROR);
   2130 
   2131 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is less than 0.");
   2132 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2133 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, accepted[i], 0, 0, 0, 0, 0);
   2134 						//expectError(GL_NO_ERROR);
   2135 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, 0, 0, 0, 0, accepted[i], 0, 0);
   2136 						expectError(GL_INVALID_VALUE);
   2137 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, accepted[i], 0, 0, 0, 0, 0);
   2138 						//expectError(GL_NO_ERROR);
   2139 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, 0, 0, 0, 0, accepted[i], 0, 0);
   2140 						expectError(GL_INVALID_VALUE);
   2141 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, accepted[i], 0, 0, 0, 0, 0);
   2142 						//expectError(GL_NO_ERROR);
   2143 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, 0, 0, 0, 0, accepted[i], 0, 0);
   2144 						expectError(GL_INVALID_VALUE);
   2145 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, accepted[i], 0, 0, 0, 0, 0);
   2146 						//expectError(GL_NO_ERROR);
   2147 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, 0, 0, 0, 0, accepted[i], 0, 0);
   2148 						expectError(GL_INVALID_VALUE);
   2149 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, accepted[i], 0, 0, 0, 0, 0);
   2150 						//expectError(GL_NO_ERROR);
   2151 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, 0, 0, 0, 0, accepted[i], 0, 0);
   2152 						expectError(GL_INVALID_VALUE);
   2153 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, accepted[i], 0, 0, 0, 0, 0);
   2154 						//expectError(GL_NO_ERROR);
   2155 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, 0, 0, 0, 0, accepted[i], 0, 0);
   2156 						expectError(GL_INVALID_VALUE);
   2157 						m_log << TestLog::EndSection;
   2158 
   2159 						glDeleteTextures(1, &texture);
   2160 						expectError(GL_NO_ERROR);
   2161 					}
   2162 					catch (const tcu::InternalError&)
   2163 					{
   2164 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2165 					}
   2166 				}
   2167 			}
   2168 		});
   2169 	ES2F_ADD_API_CASE(compressedtexsubimage2d_level_max_tex2d, "Invalid glCompressedTexSubImage2D() usage",
   2170 		{
   2171 			vector<deInt32> supported;
   2172 			vector<deInt32> accepted;
   2173 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2174 			getCompressedTexSubImage2DFormat(supported, accepted);
   2175 
   2176 			if (accepted.empty())
   2177 			{
   2178 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2179 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2180 			}
   2181 			else
   2182 			{
   2183 				for (int i = 0; i < (int)accepted.size(); i++)
   2184 				{
   2185 					const deInt32	glFormat	= accepted[i];
   2186 
   2187 					try
   2188 					{
   2189 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2190 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2191 						const int						blockSize		= tcu::getBlockSize(format);
   2192 						const std::vector<deUint8>		data			(blockSize, 0);
   2193 						GLuint							texture			= 0;
   2194 
   2195 						glGenTextures(1, &texture);
   2196 						glBindTexture(GL_TEXTURE_2D, texture);
   2197 						expectError(GL_NO_ERROR);
   2198 
   2199 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2200 						expectError(GL_NO_ERROR);
   2201 
   2202 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
   2203 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2204 						deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_TEXTURE_SIZE)) + 1;
   2205 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2206 						//expectError(GL_NO_ERROR);
   2207 						glCompressedTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2208 						expectError(GL_INVALID_VALUE);
   2209 						m_log << TestLog::EndSection;
   2210 
   2211 						glDeleteTextures(1, &texture);
   2212 						expectError(GL_NO_ERROR);
   2213 					}
   2214 					catch (const tcu::InternalError&)
   2215 					{
   2216 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2217 					}
   2218 				}
   2219 			}
   2220 		});
   2221 	ES2F_ADD_API_CASE(compressedtexsubimage2d_level_max_cube, "Invalid glCompressedTexSubImage2D() usage",
   2222 		{
   2223 			vector<deInt32> supported;
   2224 			vector<deInt32> accepted;
   2225 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2226 			getCompressedTexSubImage2DFormat(supported, accepted);
   2227 
   2228 			if (accepted.empty())
   2229 			{
   2230 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2231 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2232 			}
   2233 			else
   2234 			{
   2235 				for (int i = 0; i < (int)accepted.size(); i++)
   2236 				{
   2237 					const deInt32	glFormat	= accepted[i];
   2238 
   2239 					try
   2240 					{
   2241 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2242 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2243 						const int						blockSize		= tcu::getBlockSize(format);
   2244 						const std::vector<deUint8>		data			(blockSize, 0);
   2245 						GLuint							texture			= 0;
   2246 
   2247 						glGenTextures(1, &texture);
   2248 						glBindTexture(GL_TEXTURE_2D, texture);
   2249 						expectError(GL_NO_ERROR);
   2250 
   2251 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2252 						expectError(GL_NO_ERROR);
   2253 
   2254 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
   2255 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2256 						deUint32 log2MaxTextureSize = deLog2Floor32(m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
   2257 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2258 						//expectError(GL_NO_ERROR);
   2259 						glCompressedTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2260 						expectError(GL_INVALID_VALUE);
   2261 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, accepted[i], 0, 0, 0, 0, 0);
   2262 						//expectError(GL_NO_ERROR);
   2263 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2264 						expectError(GL_INVALID_VALUE);
   2265 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, accepted[i], 0, 0, 0, 0, 0);
   2266 						//expectError(GL_NO_ERROR);
   2267 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2268 						expectError(GL_INVALID_VALUE);
   2269 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, accepted[i], 0, 0, 0, 0, 0);
   2270 						//expectError(GL_NO_ERROR);
   2271 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2272 						expectError(GL_INVALID_VALUE);
   2273 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, accepted[i], 0, 0, 0, 0, 0);
   2274 						//expectError(GL_NO_ERROR);
   2275 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2276 						expectError(GL_INVALID_VALUE);
   2277 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, accepted[i], 0, 0, 0, 0, 0);
   2278 						//expectError(GL_NO_ERROR);
   2279 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2280 						expectError(GL_INVALID_VALUE);
   2281 						//glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, accepted[i], 0, 0, 0, 0, 0);
   2282 						//expectError(GL_NO_ERROR);
   2283 						glCompressedTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxTextureSize, 0, 0, 0, 0, accepted[i], 0, 0);
   2284 						expectError(GL_INVALID_VALUE);
   2285 						m_log << TestLog::EndSection;
   2286 
   2287 						glDeleteTextures(1, &texture);
   2288 						expectError(GL_NO_ERROR);
   2289 					}
   2290 					catch (const tcu::InternalError&)
   2291 					{
   2292 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2293 					}
   2294 				}
   2295 			}
   2296 		});
   2297 		ES2F_ADD_API_CASE(compressedtexsubimage2d_neg_offset, "Invalid glCompressedTexSubImage2D() usage",
   2298 		{
   2299 			vector<deInt32> supported;
   2300 			vector<deInt32> accepted;
   2301 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2302 			getCompressedTexSubImage2DFormat(supported, accepted);
   2303 
   2304 			if (accepted.empty())
   2305 			{
   2306 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2307 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2308 			}
   2309 			else
   2310 			{
   2311 				for (int i = 0; i < (int)accepted.size(); i++)
   2312 				{
   2313 					const deInt32	glFormat	= accepted[i];
   2314 
   2315 					try
   2316 					{
   2317 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2318 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2319 						const int						blockSize		= tcu::getBlockSize(format);
   2320 						const std::vector<deUint8>		data			(blockSize, 0);
   2321 						GLuint							texture			= 0;
   2322 
   2323 						glGenTextures(1, &texture);
   2324 						glBindTexture(GL_TEXTURE_2D, texture);
   2325 						expectError(GL_NO_ERROR);
   2326 
   2327 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2328 						expectError(GL_NO_ERROR);
   2329 
   2330 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if xoffset or yoffset are negative.");
   2331 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2332 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2333 						//expectError(GL_NO_ERROR);
   2334 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, -1, 0, 0, 0, accepted[i], 0, 0);
   2335 						expectError(GL_INVALID_VALUE);
   2336 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2337 						//expectError(GL_NO_ERROR);
   2338 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, -1, 0, 0, accepted[i], 0, 0);
   2339 						expectError(GL_INVALID_VALUE);
   2340 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2341 						//expectError(GL_NO_ERROR);
   2342 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, -1, -1, 0, 0, accepted[i], 0, 0);
   2343 						expectError(GL_INVALID_VALUE);
   2344 						m_log << TestLog::EndSection;
   2345 
   2346 						glDeleteTextures(1, &texture);
   2347 						expectError(GL_NO_ERROR);
   2348 					}
   2349 					catch (const tcu::InternalError&)
   2350 					{
   2351 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2352 					}
   2353 				}
   2354 			}
   2355 		});
   2356 	ES2F_ADD_API_CASE(compressedtexsubimage2d_offset_allowed, "Invalid glCompressedTexSubImage2D() usage",
   2357 		{
   2358 			vector<deInt32> supported;
   2359 			vector<deInt32> accepted;
   2360 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2361 			getCompressedTexSubImage2DFormat(supported, accepted);
   2362 
   2363 			if (accepted.empty())
   2364 			{
   2365 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2366 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2367 			}
   2368 			else
   2369 			{
   2370 				for (int i = 0; i < (int)accepted.size(); i++)
   2371 				{
   2372 					const deInt32	glFormat	= accepted[i];
   2373 
   2374 					try
   2375 					{
   2376 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2377 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2378 						const int						blockSize		= tcu::getBlockSize(format);
   2379 						const std::vector<deUint8>		data			(blockSize, 0);
   2380 						GLuint							texture			= 0;
   2381 
   2382 						glGenTextures(1, &texture);
   2383 						glBindTexture(GL_TEXTURE_2D, texture);
   2384 						expectError(GL_NO_ERROR);
   2385 
   2386 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2387 						expectError(GL_NO_ERROR);
   2388 
   2389 						deUint32 maxTextureSize = m_context.getContextInfo().getInt(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
   2390 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if xoffset + width > texture_width or yoffset + height > texture_height.");
   2391 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2392 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2393 						//expectError(GL_NO_ERROR);
   2394 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, maxTextureSize, 0, 0, 0, accepted[i], 0, 0);
   2395 						expectError(GL_INVALID_VALUE);
   2396 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2397 						//expectError(GL_NO_ERROR);
   2398 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, maxTextureSize, 0, 0, accepted[i], 0, 0);
   2399 						expectError(GL_INVALID_VALUE);
   2400 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2401 						//expectError(GL_NO_ERROR);
   2402 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, maxTextureSize, maxTextureSize, 0, 0, accepted[i], 0, 0);
   2403 						expectError(GL_INVALID_VALUE);
   2404 						m_log << TestLog::EndSection;
   2405 
   2406 						glDeleteTextures(1, &texture);
   2407 						expectError(GL_NO_ERROR);
   2408 					}
   2409 					catch (const tcu::InternalError&)
   2410 					{
   2411 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2412 					}
   2413 				}
   2414 			}
   2415 		});
   2416 	ES2F_ADD_API_CASE(compressedtexsubimage2d_neg_wdt_hgt, "Invalid glCompressedTexSubImage2D() usage",
   2417 		{
   2418 			vector<deInt32> supported;
   2419 			vector<deInt32> accepted;
   2420 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2421 			getCompressedTexSubImage2DFormat(supported, accepted);
   2422 
   2423 			if (accepted.empty())
   2424 			{
   2425 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2426 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2427 			}
   2428 			else
   2429 			{
   2430 				for (int i = 0; i < (int)accepted.size(); i++)
   2431 				{
   2432 					const deInt32	glFormat	= accepted[i];
   2433 
   2434 					try
   2435 					{
   2436 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2437 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2438 						const int						blockSize		= tcu::getBlockSize(format);
   2439 						const std::vector<deUint8>		data			(blockSize, 0);
   2440 						GLuint							texture			= 0;
   2441 
   2442 						glGenTextures(1, &texture);
   2443 						glBindTexture(GL_TEXTURE_2D, texture);
   2444 						expectError(GL_NO_ERROR);
   2445 
   2446 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2447 						expectError(GL_NO_ERROR);
   2448 
   2449 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width or height is less than 0.");
   2450 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(accepted[i]) << TestLog::EndMessage;
   2451 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2452 						//expectError(GL_NO_ERROR);
   2453 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, 0, accepted[i], 0, 0);
   2454 						expectError(GL_INVALID_VALUE);
   2455 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2456 						//expectError(GL_NO_ERROR);
   2457 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, -1, accepted[i], 0, 0);
   2458 						expectError(GL_INVALID_VALUE);
   2459 						//glCompressedTexImage2D(GL_TEXTURE_2D, 0, accepted[i], 0, 0, 0, 0, 0);
   2460 						//expectError(GL_NO_ERROR);
   2461 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, -1, accepted[i], 0, 0);
   2462 						expectError(GL_INVALID_VALUE);
   2463 						m_log << TestLog::EndSection;
   2464 
   2465 						glDeleteTextures(1, &texture);
   2466 						expectError(GL_NO_ERROR);
   2467 					}
   2468 					catch (const tcu::InternalError&)
   2469 					{
   2470 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2471 					}
   2472 				}
   2473 			}
   2474 		});
   2475 	ES2F_ADD_API_CASE(compressedtexsubimage2d_invalid_size, "Invalid glCompressedTexImage2D() usage",
   2476 		{
   2477 			vector<deInt32> supported;
   2478 			vector<deInt32> accepted;
   2479 			getSupportedExtensions(GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_COMPRESSED_TEXTURE_FORMATS, supported);
   2480 			getCompressedTexSubImage2DFormat(supported, accepted);
   2481 
   2482 			if (accepted.empty())
   2483 			{
   2484 				m_log << TestLog::Message << "// No suitable compressed formats found, cannot evaluate test." << TestLog::EndMessage;
   2485 				m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No suitable compressed formats found");
   2486 			}
   2487 			else
   2488 			{
   2489 				for (int i = 0; i < (int)accepted.size(); i++)
   2490 				{
   2491 					const deInt32	glFormat	= accepted[i];
   2492 
   2493 					try
   2494 					{
   2495 						const tcu::CompressedTexFormat	format			= glu::mapGLCompressedTexFormat(glFormat);
   2496 						const tcu::IVec3				blockPixelSize	= tcu::getBlockPixelSize(format);
   2497 						const int						blockSize		= tcu::getBlockSize(format);
   2498 						const std::vector<deUint8>		data			(blockSize, 0);
   2499 						GLuint							texture			= 0;
   2500 
   2501 						glGenTextures(1, &texture);
   2502 						glBindTexture(GL_TEXTURE_2D, texture);
   2503 						expectError(GL_NO_ERROR);
   2504 
   2505 						glCompressedTexImage2D(GL_TEXTURE_2D, 0, glFormat, blockPixelSize.x(), blockPixelSize.y(), 0, blockSize, DE_NULL);
   2506 						expectError(GL_NO_ERROR);
   2507 
   2508 						m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data.");
   2509 						m_log << TestLog::Message << "// Using texture format " << tcu::toHex(glFormat) << TestLog::EndMessage;
   2510 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, blockPixelSize.x(), blockPixelSize.y(), glFormat, -1, &data[0]);
   2511 						expectError(GL_INVALID_VALUE);
   2512 
   2513 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, blockPixelSize.x(), blockPixelSize.y(), glFormat, blockSize / 2, &data[0]);
   2514 						expectError(GL_INVALID_VALUE);
   2515 
   2516 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, blockPixelSize.x(), blockPixelSize.y(), glFormat, blockSize * 2, &data[0]);
   2517 						expectError(GL_INVALID_VALUE);
   2518 
   2519 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, blockPixelSize.x(), blockPixelSize.y() * 2, glFormat, blockSize, &data[0]);
   2520 						expectError(GL_INVALID_VALUE);
   2521 
   2522 						glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, blockPixelSize.x() * 2, blockPixelSize.y(), glFormat, blockSize, &data[0]);
   2523 						expectError(GL_INVALID_VALUE);
   2524 
   2525 						m_log << TestLog::EndSection;
   2526 
   2527 						glDeleteTextures(1, &texture);
   2528 						expectError(GL_NO_ERROR);
   2529 					}
   2530 					catch (const tcu::InternalError&)
   2531 					{
   2532 						m_log << TestLog::Message << "Skipping unknown format: " << glFormat << TestLog::EndMessage;
   2533 					}
   2534 				}
   2535 			}
   2536 		});
   2537 }
   2538 
   2539 } // Functional
   2540 } // gles2
   2541 } // deqp
   2542