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