Lines Matching refs:ctx

78 static bool supportsES32orGL45(NegativeTestContext& ctx)
80 return contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
81 contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5));
97 void activetexture (NegativeTestContext& ctx)
99 ctx.beginSection("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).");
100 ctx.glActiveTexture(-1);
101 ctx.expectError(GL_INVALID_ENUM);
102 int numMaxTextureUnits = ctx.getInteger(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
103 ctx.glActiveTexture(GL_TEXTURE0 + numMaxTextureUnits);
104 ctx.expectError(GL_INVALID_ENUM);
105 ctx.endSection();
110 void bindtexture (NegativeTestContext& ctx)
113 ctx.glGenTextures(5, texture);
115 ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the allowable values.");
116 ctx.glBindTexture(0, 1);
117 ctx.expectError(GL_INVALID_ENUM);
118 ctx.glBindTexture(GL_FRAMEBUFFER, 1);
119 ctx.expectError(GL_INVALID_ENUM);
120 ctx.endSection();
122 ctx.beginSection("GL_INVALID_OPERATION is generated if texture was previously created with a target that doesn't match that of target.");
123 ctx.glBindTexture(GL_TEXTURE_2D, texture[0]);
124 ctx.expectError(GL_NO_ERROR);
125 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[0]);
126 ctx.expectError(GL_INVALID_OPERATION);
127 ctx.glBindTexture(GL_TEXTURE_3D, texture[0]);
128 ctx.expectError(GL_INVALID_OPERATION);
129 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[0]);
130 ctx.expectError(GL_INVALID_OPERATION);
132 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[1]);
133 ctx.expectError(GL_NO_ERROR);
134 ctx.glBindTexture(GL_TEXTURE_2D, texture[1]);
135 ctx.expectError(GL_INVALID_OPERATION);
136 ctx.glBindTexture(GL_TEXTURE_3D, texture[1]);
137 ctx.expectError(GL_INVALID_OPERATION);
138 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[1]);
139 ctx.expectError(GL_INVALID_OPERATION);
141 ctx.glBindTexture(GL_TEXTURE_3D, texture[2]);
142 ctx.expectError(GL_NO_ERROR);
143 ctx.glBindTexture(GL_TEXTURE_2D, texture[2]);
144 ctx.expectError(GL_INVALID_OPERATION);
145 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[2]);
146 ctx.expectError(GL_INVALID_OPERATION);
147 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[2]);
148 ctx.expectError(GL_INVALID_OPERATION);
150 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[3]);
151 ctx.expectError(GL_NO_ERROR);
152 ctx.glBindTexture(GL_TEXTURE_2D, texture[3]);
153 ctx.expectError(GL_INVALID_OPERATION);
154 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[3]);
155 ctx.expectError(GL_INVALID_OPERATION);
156 ctx.glBindTexture(GL_TEXTURE_3D, texture[3]);
157 ctx.expectError(GL_INVALID_OPERATION);
159 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
161 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[0]);
162 ctx.expectError(GL_INVALID_OPERATION);
163 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[1]);
164 ctx.expectError(GL_INVALID_OPERATION);
165 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[2]);
166 ctx.expectError(GL_INVALID_OPERATION);
167 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[3]);
168 ctx.expectError(GL_INVALID_OPERATION);
169 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[4]);
170 ctx.expectError(GL_NO_ERROR);
171 ctx.glBindTexture(GL_TEXTURE_2D, texture[4]);
172 ctx.expectError(GL_INVALID_OPERATION);
173 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[4]);
174 ctx.expectError(GL_INVALID_OPERATION);
175 ctx.glBindTexture(GL_TEXTURE_3D, texture[4]);
176 ctx.expectError(GL_INVALID_OPERATION);
177 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[4]);
178 ctx.expectError(GL_INVALID_OPERATION);
180 ctx.endSection();
182 ctx.glDeleteTextures(5, texture);
187 void compressedteximage2d_invalid_target (NegativeTestContext& ctx)
189 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
190 ctx.glCompressedTexImage2D(0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
191 ctx.expectError(GL_INVALID_ENUM);
192 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
193 ctx.expectError(GL_INVALID_ENUM);
194 ctx.endSection();
197 void compressedteximage2d_invalid_format (NegativeTestContext& ctx)
199 ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not a supported format returned in GL_COMPRESSED_TEXTURE_FORMATS.");
200 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0);
201 ctx.expectError(GL_INVALID_ENUM);
202 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 0, 0, 0);
203 ctx.expectError(GL_INVALID_ENUM);
204 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 0, 0, 0, 0, 0);
205 ctx.expectError(GL_INVALID_ENUM);
206 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 0, 0, 0);
207 ctx.expectError(GL_INVALID_ENUM);
208 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 0, 0, 0);
209 ctx.expectError(GL_INVALID_ENUM);
210 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 0, 0, 0);
211 ctx.expectError(GL_INVALID_ENUM);
212 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 0, 0, 0);
213 ctx.expectError(GL_INVALID_ENUM);
214 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 0, 0, 0);
215 ctx.expectError(GL_INVALID_ENUM);
216 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 0, 0, 0);
217 ctx.expectError(GL_INVALID_ENUM);
218 ctx.endSection();
221 void compressedteximage2d_neg_level (NegativeTestContext& ctx)
223 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
224 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
225 ctx.expectError(GL_INVALID_VALUE);
226 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
227 ctx.expectError(GL_INVALID_VALUE);
228 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
229 ctx.expectError(GL_INVALID_VALUE);
230 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
231 ctx.expectError(GL_INVALID_VALUE);
232 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
233 ctx.expectError(GL_INVALID_VALUE);
234 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
235 ctx.expectError(GL_INVALID_VALUE);
236 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
237 ctx.expectError(GL_INVALID_VALUE);
238 ctx.endSection();
241 void compressedteximage2d_max_level (NegativeTestContext& ctx)
243 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE) for a 2d texture target.");
244 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
245 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_COMPRESSED_RGB8_ETC2, 16, 16, 0, etc2DataSize(16, 16), 0);
246 ctx.expectError(GL_INVALID_VALUE);
247 ctx.endSection();
249 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE) for a cubemap target.");
250 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
251 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
252 ctx.expectError(GL_INVALID_VALUE);
253 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
254 ctx.expectError(GL_INVALID_VALUE);
255 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
256 ctx.expectError(GL_INVALID_VALUE);
257 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
258 ctx.expectError(GL_INVALID_VALUE);
259 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
260 ctx.expectError(GL_INVALID_VALUE);
261 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
262 ctx.expectError(GL_INVALID_VALUE);
263 ctx.endSection();
266 void compressedteximage2d_neg_width_height (NegativeTestContext& ctx)
268 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0.");
270 ctx.beginSection("GL_TEXTURE_2D target");
271 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0);
272 ctx.expectError(GL_INVALID_VALUE);
273 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0);
274 ctx.expectError(GL_INVALID_VALUE);
275 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0);
276 ctx.expectError(GL_INVALID_VALUE);
277 ctx.endSection();
279 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
280 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0);
281 ctx.expectError(GL_INVALID_VALUE);
282 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0);
283 ctx.expectError(GL_INVALID_VALUE);
284 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0);
285 ctx.expectError(GL_INVALID_VALUE);
286 ctx.endSection();
288 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
289 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0);
290 ctx.expectError(GL_INVALID_VALUE);
291 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0);
292 ctx.expectError(GL_INVALID_VALUE);
293 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0);
294 ctx.expectError(GL_INVALID_VALUE);
295 ctx.endSection();
297 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
298 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0);
299 ctx.expectError(GL_INVALID_VALUE);
300 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0);
301 ctx.expectError(GL_INVALID_VALUE);
302 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0);
303 ctx.expectError(GL_INVALID_VALUE);
304 ctx.endSection();
306 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
307 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0);
308 ctx.expectError(GL_INVALID_VALUE);
309 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0);
310 ctx.expectError(GL_INVALID_VALUE);
311 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0);
312 ctx.expectError(GL_INVALID_VALUE);
313 ctx.endSection();
315 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
316 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0);
317 ctx.expectError(GL_INVALID_VALUE);
318 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0);
319 ctx.expectError(GL_INVALID_VALUE);
320 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0);
321 ctx.expectError(GL_INVALID_VALUE);
322 ctx.endSection();
324 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
325 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0);
326 ctx.expectError(GL_INVALID_VALUE);
327 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0);
328 ctx.expectError(GL_INVALID_VALUE);
329 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0);
330 ctx.expectError(GL_INVALID_VALUE);
331 ctx.endSection();
333 ctx.endSection();
336 void compressedteximage2d_max_width_height (NegativeTestContext& ctx)
338 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1;
339 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
340 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE.");
342 ctx.beginSection("GL_TEXTURE_2D target");
343 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, 1, 0, etc2EacDataSize(maxTextureSize, 1), 0);
344 ctx.expectError(GL_INVALID_VALUE);
345 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxTextureSize, 0, etc2EacDataSize(1, maxTextureSize), 0);
346 ctx.expectError(GL_INVALID_VALUE);
347 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, maxTextureSize, 0, etc2EacDataSize(maxTextureSize, maxTextureSize), 0);
348 ctx.expectError(GL_INVALID_VALUE);
349 ctx.endSection();
351 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
352 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0);
353 ctx.expectError(GL_INVALID_VALUE);
354 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0);
355 ctx.expectError(GL_INVALID_VALUE);
356 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0);
357 ctx.expectError(GL_INVALID_VALUE);
358 ctx.endSection();
360 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
361 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0);
362 ctx.expectError(GL_INVALID_VALUE);
363 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0);
364 ctx.expectError(GL_INVALID_VALUE);
365 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0);
366 ctx.expectError(GL_INVALID_VALUE);
367 ctx.endSection();
369 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
370 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0);
371 ctx.expectError(GL_INVALID_VALUE);
372 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0);
373 ctx.expectError(GL_INVALID_VALUE);
374 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0);
375 ctx.expectError(GL_INVALID_VALUE);
376 ctx.endSection();
378 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
379 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0);
380 ctx.expectError(GL_INVALID_VALUE);
381 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0);
382 ctx.expectError(GL_INVALID_VALUE);
383 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0);
384 ctx.expectError(GL_INVALID_VALUE);
385 ctx.endSection();
387 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
388 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0);
389 ctx.expectError(GL_INVALID_VALUE);
390 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0);
391 ctx.expectError(GL_INVALID_VALUE);
392 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0);
393 ctx.expectError(GL_INVALID_VALUE);
394 ctx.endSection();
396 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
397 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0);
398 ctx.expectError(GL_INVALID_VALUE);
399 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0);
400 ctx.expectError(GL_INVALID_VALUE);
401 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0);
402 ctx.expectError(GL_INVALID_VALUE);
403 ctx.endSection();
405 ctx.endSection();
408 void compressedteximage2d_invalid_border (NegativeTestContext& ctx)
410 bool isES = glu::isContextTypeES(ctx.getRenderContext().getType());
413 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0.");
415 ctx.beginSection("GL_TEXTURE_2D target");
416 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
417 ctx.expectError(error);
418 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
419 ctx.expectError(error);
420 ctx.endSection();
422 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
423 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
424 ctx.expectError(error);
425 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
426 ctx.expectError(error);
427 ctx.endSection();
429 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
430 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
431 ctx.expectError(error);
432 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
433 ctx.expectError(error);
434 ctx.endSection();
436 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
437 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
438 ctx.expectError(error);
439 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
440 ctx.expectError(error);
441 ctx.endSection();
443 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
444 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
445 ctx.expectError(error);
446 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
447 ctx.expectError(error);
448 ctx.endSection();
450 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
451 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
452 ctx.expectError(error);
453 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
454 ctx.expectError(error);
455 ctx.endSection();
457 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
458 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
459 ctx.expectError(error);
460 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
461 ctx.expectError(error);
462 ctx.endSection();
464 ctx.endSection();
467 void compressedteximage2d_invalid_size (NegativeTestContext& ctx)
469 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data.");
471 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_R11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
472 ctx.expectError(GL_INVALID_VALUE);
473 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SIGNED_R11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
474 ctx.expectError(GL_INVALID_VALUE);
475 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RG11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
476 ctx.expectError(GL_INVALID_VALUE);
477 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SIGNED_RG11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
478 ctx.expectError(GL_INVALID_VALUE);
479 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
480 ctx.expectError(GL_INVALID_VALUE);
481 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
482 ctx.expectError(GL_INVALID_VALUE);
483 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
484 ctx.expectError(GL_INVALID_VALUE);
485 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
486 ctx.expectError(GL_INVALID_VALUE);
487 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
488 ctx.expectError(GL_INVALID_VALUE);
489 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
490 ctx.expectError(GL_INVALID_VALUE);
492 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
493 ctx.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
495 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_4x4, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
496 ctx.expectError(GL_INVALID_VALUE);
497 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_5x4, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 4) * 16 - 1, 0);
498 ctx.expectError(GL_INVALID_VALUE);
499 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_5x5, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 5) * 16 - 1, 0);
500 ctx.expectError(GL_INVALID_VALUE);
501 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_6x5, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 5) * 16 - 1, 0);
502 ctx.expectError(GL_INVALID_VALUE);
503 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_6x6, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 6) * 16 - 1, 0);
504 ctx.expectError(GL_INVALID_VALUE);
505 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x5, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 5) * 16 - 1, 0);
506 ctx.expectError(GL_INVALID_VALUE);
507 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x6, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 6) * 16 - 1, 0);
508 ctx.expectError(GL_INVALID_VALUE);
509 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x8, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 8) * 16 - 1, 0);
510 ctx.expectError(GL_INVALID_VALUE);
511 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x5, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 5) * 16 - 1, 0);
512 ctx.expectError(GL_INVALID_VALUE);
513 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x6, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 6) * 16 - 1, 0);
514 ctx.expectError(GL_INVALID_VALUE);
515 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x8, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 8) * 16 - 1, 0);
516 ctx.expectError(GL_INVALID_VALUE);
517 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x10, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 10) * 16 - 1, 0);
518 ctx.expectError(GL_INVALID_VALUE);
519 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_12x10, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 10) * 16 - 1, 0);
520 ctx.expectError(GL_INVALID_VALUE);
521 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_12x12, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 12) * 16 - 1, 0);
522 ctx.expectError(GL_INVALID_VALUE);
523 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
524 ctx.expectError(GL_INVALID_VALUE);
525 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 4) * 16 - 1, 0);
526 ctx.expectError(GL_INVALID_VALUE);
527 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 5) * 16 - 1, 0);
528 ctx.expectError(GL_INVALID_VALUE);
529 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 5) * 16 - 1, 0);
530 ctx.expectError(GL_INVALID_VALUE);
531 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 6) * 16 - 1, 0);
532 ctx.expectError(GL_INVALID_VALUE);
533 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 5) * 16 - 1, 0);
534 ctx.expectError(GL_INVALID_VALUE);
535 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 6) * 16 - 1, 0);
536 ctx.expectError(GL_INVALID_VALUE);
537 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 8) * 16 - 1, 0);
538 ctx.expectError(GL_INVALID_VALUE);
539 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 5) * 16 - 1, 0);
540 ctx.expectError(GL_INVALID_VALUE);
541 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 6) * 16 - 1, 0);
542 ctx.expectError(GL_INVALID_VALUE);
543 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 8) * 16 - 1, 0);
544 ctx.expectError(GL_INVALID_VALUE);
545 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 10) * 16 - 1, 0);
546 ctx.expectError(GL_INVALID_VALUE);
547 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 10) * 16 - 1, 0);
548 ctx.expectError(GL_INVALID_VALUE);
549 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 12) * 16 - 1, 0);
550 ctx.expectError(GL_INVALID_VALUE);
552 ctx.endSection();
555 void compressedteximage2d_neg_size (NegativeTestContext& ctx)
557 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is negative.");
558 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_R11_EAC, 0, 0, 0, -1, 0);
559 ctx.expectError(GL_INVALID_VALUE);
560 ctx.endSection();
563 void compressedteximage2d_invalid_width_height (NegativeTestContext& ctx)
565 ctx.beginSection("GL_INVALID_VALUE is generated if target is a cube map face and width and height are not equal.");
567 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
568 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
569 ctx.expectError(GL_INVALID_VALUE);
570 ctx.endSection();
572 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
573 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
574 ctx.expectError(GL_INVALID_VALUE);
575 ctx.endSection();
577 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
578 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
579 ctx.expectError(GL_INVALID_VALUE);
580 ctx.endSection();
582 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
583 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
584 ctx.expectError(GL_INVALID_VALUE);
585 ctx.endSection();
587 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
588 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
589 ctx.expectError(GL_INVALID_VALUE);
590 ctx.endSection();
592 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
593 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
594 ctx.expectError(GL_INVALID_VALUE);
595 ctx.endSection();
597 ctx.endSection();
600 void compressedteximage2d_invalid_buffer_target (NegativeTestContext& ctx)
605 ctx.glGenBuffers (1, &buf);
606 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
607 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY);
608 ctx.expectError (GL_NO_ERROR);
610 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and the buffer object's data store is currently mapped.");
611 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 32, GL_MAP_WRITE_BIT);
612 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 4, 4, 0, etc2DataSize(4, 4), 0);
613 ctx.expectError (GL_INVALID_OPERATION);
614 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
615 ctx.endSection();
617 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
618 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 16, 16, 0, etc2DataSize(16, 16), 0);
619 ctx.expectError (GL_INVALID_OPERATION);
620 ctx.endSection();
622 ctx.glDeleteBuffers (1, &buf);
627 void copyteximage2d_invalid_target (NegativeTestContext& ctx)
629 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
630 ctx.glCopyTexImage2D(0, 0, GL_RGB, 0, 0, 64, 64, 0);
631 ctx.expectError(GL_INVALID_ENUM);
632 ctx.endSection();
635 void copyteximage2d_invalid_format (NegativeTestContext& ctx)
637 ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not an accepted format.");
638 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 64, 64, 0);
639 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
640 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 16, 16, 0);
641 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
642 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 16, 16, 0);
643 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
644 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 16, 16, 0);
645 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
646 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 16, 16, 0);
647 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
648 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 16, 16, 0);
649 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
650 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 16, 16, 0);
651 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
652 ctx.endSection();
655 void copyteximage2d_inequal_width_height_cube (NegativeTestContext& ctx)
657 ctx.beginSection("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.");
658 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 16, 17, 0);
659 ctx.expectError(GL_INVALID_VALUE);
660 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 16, 17, 0);
661 ctx.expectError(GL_INVALID_VALUE);
662 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 16, 17, 0);
663 ctx.expectError(GL_INVALID_VALUE);
664 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 16, 17, 0);
665 ctx.expectError(GL_INVALID_VALUE);
666 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 16, 17, 0);
667 ctx.expectError(GL_INVALID_VALUE);
668 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 16, 17, 0);
669 ctx.expectError(GL_INVALID_VALUE);
670 ctx.endSection();
673 void copyteximage2d_neg_level (NegativeTestContext& ctx)
675 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
676 ctx.glCopyTexImage2D(GL_TEXTURE_2D, -1, GL_RGB, 0, 0, 64, 64, 0);
677 ctx.expectError(GL_INVALID_VALUE);
678 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_RGB, 0, 0, 16, 16, 0);
679 ctx.expectError(GL_INVALID_VALUE);
680 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_RGB, 0, 0, 16, 16, 0);
681 ctx.expectError(GL_INVALID_VALUE);
682 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_RGB, 0, 0, 16, 16, 0);
683 ctx.expectError(GL_INVALID_VALUE);
684 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, GL_RGB, 0, 0, 16, 16, 0);
685 ctx.expectError(GL_INVALID_VALUE);
686 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, GL_RGB, 0, 0, 16, 16, 0);
687 ctx.expectError(GL_INVALID_VALUE);
688 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, GL_RGB, 0, 0, 16, 16, 0);
689 ctx.expectError(GL_INVALID_VALUE);
690 ctx.endSection();
693 void copyteximage2d_max_level (NegativeTestContext& ctx)
695 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
696 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
697 ctx.glCopyTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_RGB, 0, 0, 64, 64, 0);
698 ctx.expectError(GL_INVALID_VALUE);
699 ctx.endSection();
701 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
702 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
703 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0);
704 ctx.expectError(GL_INVALID_VALUE);
705 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0);
706 ctx.expectError(GL_INVALID_VALUE);
707 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0);
708 ctx.expectError(GL_INVALID_VALUE);
709 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0);
710 ctx.expectError(GL_INVALID_VALUE);
711 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0);
712 ctx.expectError(GL_INVALID_VALUE);
713 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0);
714 ctx.expectError(GL_INVALID_VALUE);
715 ctx.endSection();
718 void copyteximage2d_neg_width_height (NegativeTestContext& ctx)
720 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0.");
722 ctx.beginSection("GL_TEXTURE_2D target");
723 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, -1, 1, 0);
724 ctx.expectError(GL_INVALID_VALUE);
725 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, -1, 0);
726 ctx.expectError(GL_INVALID_VALUE);
727 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, -1, -1, 0);
728 ctx.expectError(GL_INVALID_VALUE);
729 ctx.endSection();
731 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
732 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, -1, 1, 0);
733 ctx.expectError(GL_INVALID_VALUE);
734 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 1, -1, 0);
735 ctx.expectError(GL_INVALID_VALUE);
736 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, -1, -1, 0);
737 ctx.expectError(GL_INVALID_VALUE);
738 ctx.endSection();
740 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
741 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, -1, 1, 0);
742 ctx.expectError(GL_INVALID_VALUE);
743 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 1, -1, 0);
744 ctx.expectError(GL_INVALID_VALUE);
745 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, -1, -1, 0);
746 ctx.expectError(GL_INVALID_VALUE);
747 ctx.endSection();
749 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
750 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, -1, 1, 0);
751 ctx.expectError(GL_INVALID_VALUE);
752 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 1, -1, 0);
753 ctx.expectError(GL_INVALID_VALUE);
754 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, -1, -1, 0);
755 ctx.expectError(GL_INVALID_VALUE);
756 ctx.endSection();
758 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
759 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, -1, 1, 0);
760 ctx.expectError(GL_INVALID_VALUE);
761 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 1, -1, 0);
762 ctx.expectError(GL_INVALID_VALUE);
763 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, -1, -1, 0);
764 ctx.expectError(GL_INVALID_VALUE);
765 ctx.endSection();
767 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
768 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, -1, 1, 0);
769 ctx.expectError(GL_INVALID_VALUE);
770 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 1, -1, 0);
771 ctx.expectError(GL_INVALID_VALUE);
772 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, -1, -1, 0);
773 ctx.expectError(GL_INVALID_VALUE);
774 ctx.endSection();
776 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
777 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, -1, 1, 0);
778 ctx.expectError(GL_INVALID_VALUE);
779 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 1, -1, 0);
780 ctx.expectError(GL_INVALID_VALUE);
781 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, -1, -1, 0);
782 ctx.expectError(GL_INVALID_VALUE);
783 ctx.endSection();
785 ctx.endSection();
788 void copyteximage2d_max_width_height (NegativeTestContext& ctx)
790 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1;
791 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
793 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE.");
795 ctx.beginSection("GL_TEXTURE_2D target");
796 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0);
797 ctx.expectError(GL_INVALID_VALUE);
798 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0);
799 ctx.expectError(GL_INVALID_VALUE);
800 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0);
801 ctx.expectError(GL_INVALID_VALUE);
802 ctx.endSection();
804 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
805 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0);
806 ctx.expectError(GL_INVALID_VALUE);
807 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0);
808 ctx.expectError(GL_INVALID_VALUE);
809 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0);
810 ctx.expectError(GL_INVALID_VALUE);
811 ctx.endSection();
813 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
814 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0);
815 ctx.expectError(GL_INVALID_VALUE);
816 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0);
817 ctx.expectError(GL_INVALID_VALUE);
818 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0);
819 ctx.expectError(GL_INVALID_VALUE);
820 ctx.endSection();
822 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
823 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0);
824 ctx.expectError(GL_INVALID_VALUE);
825 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0);
826 ctx.expectError(GL_INVALID_VALUE);
827 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0);
828 ctx.expectError(GL_INVALID_VALUE);
829 ctx.endSection();
831 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
832 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0);
833 ctx.expectError(GL_INVALID_VALUE);
834 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0);
835 ctx.expectError(GL_INVALID_VALUE);
836 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0);
837 ctx.expectError(GL_INVALID_VALUE);
838 ctx.endSection();
840 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
841 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0);
842 ctx.expectError(GL_INVALID_VALUE);
843 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0);
844 ctx.expectError(GL_INVALID_VALUE);
845 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0);
846 ctx.expectError(GL_INVALID_VALUE);
847 ctx.endSection();
849 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
850 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0);
851 ctx.expectError(GL_INVALID_VALUE);
852 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0);
853 ctx.expectError(GL_INVALID_VALUE);
854 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0);
855 ctx.expectError(GL_INVALID_VALUE);
856 ctx.endSection();
858 ctx.endSection();
861 void copyteximage2d_invalid_border (NegativeTestContext& ctx)
863 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0.");
865 ctx.beginSection("GL_TEXTURE_2D target");
866 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 0, 0, -1);
867 ctx.expectError(GL_INVALID_VALUE);
868 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 0, 0, 1);
869 ctx.expectError(GL_INVALID_VALUE);
870 ctx.endSection();
872 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
873 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 0, 0, -1);
874 ctx.expectError(GL_INVALID_VALUE);
875 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 0, 0, 1);
876 ctx.expectError(GL_INVALID_VALUE);
877 ctx.endSection();
879 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
880 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 0, 0, -1);
881 ctx.expectError(GL_INVALID_VALUE);
882 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 0, 0, 1);
883 ctx.expectError(GL_INVALID_VALUE);
884 ctx.endSection();
886 ctx.beginSection("GL_TEXTURE_2D target");
887 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 0, 0, -1);
888 ctx.expectError(GL_INVALID_VALUE);
889 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 0, 0, 1);
890 ctx.expectError(GL_INVALID_VALUE);
891 ctx.endSection();
893 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
894 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 0, 0, -1);
895 ctx.expectError(GL_INVALID_VALUE);
896 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 0, 0, 1);
897 ctx.expectError(GL_INVALID_VALUE);
898 ctx.endSection();
900 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
901 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 0, 0, -1);
902 ctx.expectError(GL_INVALID_VALUE);
903 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 0, 0, 1);
904 ctx.expectError(GL_INVALID_VALUE);
905 ctx.endSection();
907 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
908 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 0, 0, -1);
909 ctx.expectError(GL_INVALID_VALUE);
910 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 0, 0, 1);
911 ctx.expectError(GL_INVALID_VALUE);
912 ctx.endSection();
914 ctx.endSection();
917 void copyteximage2d_incomplete_framebuffer (NegativeTestContext& ctx)
920 ctx.glGenFramebuffers (1, &fbo);
921 ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo);
922 ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
924 ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
925 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, 0, 0, 0);
926 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
927 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA8, 0, 0, 0, 0, 0);
928 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
929 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA8, 0, 0, 0, 0, 0);
930 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
931 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA8, 0, 0, 0, 0, 0);
932 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
933 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA8, 0, 0, 0, 0, 0);
934 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
935 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA8, 0, 0, 0, 0, 0);
936 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
937 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA8, 0, 0, 0, 0, 0);
938 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
939 ctx.endSection();
941 ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0);
942 ctx.glDeleteFramebuffers(1, &fbo);
945 void copytexsubimage2d_invalid_target (NegativeTestContext& ctx)
948 ctx.glGenTextures (1, &texture);
949 ctx.glBindTexture (GL_TEXTURE_2D, texture);
950 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
952 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
953 ctx.glCopyTexSubImage2D(0, 0, 0, 0, 0, 0, 4, 4);
954 ctx.expectError(GL_INVALID_ENUM);
955 ctx.endSection();
957 ctx.glDeleteTextures(1, &texture);
959 void copytexsubimage2d_read_buffer_is_none (NegativeTestContext& ctx)
962 ctx.glGenTextures (1, &texture);
963 ctx.glBindTexture (GL_TEXTURE_2D, texture);
964 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
966 ctx.beginSection("GL_INVALID_OPERATION is generated if the read buffer is NONE");
967 ctx.glReadBuffer(GL_NONE);
968 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
969 ctx.expectError(GL_INVALID_OPERATION);
970 ctx.endSection();
972 ctx.glDeleteTextures(1, &texture);
975 void copytexsubimage2d_texture_internalformat (NegativeTestContext& ctx)
977 if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
981 ctx.glGenTextures (1, &texture);
982 ctx.glBindTexture (GL_TEXTURE_2D, texture);
983 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB9_E5, 16, 16, 0, GL_RGB, GL_FLOAT, 0);
985 ctx.beginSection("GL_INVALID_OPERATION is generated if internal format of the texture is GL_RGB9_E5");
986 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
987 ctx.expectError(GL_INVALID_OPERATION);
988 ctx.endSection();
990 ctx.glDeleteTextures(1, &texture);
993 void copytexsubimage2d_neg_level (NegativeTestContext& ctx)
996 ctx.glGenTextures (2, &textures[0]);
997 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]);
998 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
999 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]);
1000 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0););
1002 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
1003 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, 4, 4);
1004 ctx.expectError(GL_INVALID_VALUE);
1007 ctx.glCopyTexSubImage2D(faceGL, -1, 0, 0, 0, 0, 4, 4);
1008 ctx.expectError(GL_INVALID_VALUE);
1010 ctx.endSection();
1012 ctx.glDeleteTextures(2, &textures[0]);
1015 void copytexsubimage2d_max_level (NegativeTestContext& ctx)
1018 ctx.glGenTextures (2, &textures[0]);
1019 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]);
1020 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1021 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]);
1022 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0););
1024 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE) for 2D texture targets.");
1025 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
1026 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, 4, 4);
1027 ctx.expectError(GL_INVALID_VALUE);
1028 ctx.endSection();
1030 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_SIZE) for cubemap targets.");
1031 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
1034 ctx.glCopyTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, 4, 4);
1035 ctx.expectError(GL_INVALID_VALUE);
1037 ctx.endSection();
1039 ctx.glDeleteTextures(2, &textures[0]);
1042 void copytexsubimage2d_neg_offset (NegativeTestContext& ctx)
1045 ctx.glGenTextures (1, &texture);
1046 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1047 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1049 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset < 0 or yoffset < 0.");
1050 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, -1, 0, 0, 0, 4, 4);
1051 ctx.expectError(GL_INVALID_VALUE);
1052 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, -1, 0, 0, 4, 4);
1053 ctx.expectError(GL_INVALID_VALUE);
1054 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, -1, -1, 0, 0, 4, 4);
1055 ctx.expectError(GL_INVALID_VALUE);
1056 ctx.endSection();
1058 ctx.glDeleteTextures(1, &texture);
1061 void copytexsubimage2d_invalid_offset (NegativeTestContext& ctx)
1064 ctx.glGenTextures (1, &texture);
1065 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1066 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1068 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width or yoffset + height > texture_height.");
1069 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 14, 0, 0, 0, 4, 4);
1070 ctx.expectError(GL_INVALID_VALUE);
1071 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 14, 0, 0, 4, 4);
1072 ctx.expectError(GL_INVALID_VALUE);
1073 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 14, 14, 0, 0, 4, 4);
1074 ctx.expectError(GL_INVALID_VALUE);
1075 ctx.endSection();
1077 ctx.glDeleteTextures(1, &texture);
1080 void copytexsubimage2d_neg_width_height (NegativeTestContext& ctx)
1083 ctx.glGenTextures (1, &texture);
1084 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1085 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1087 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0.");
1088 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, -1, 0);
1089 ctx.expectError(GL_INVALID_VALUE);
1090 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, -1);
1091 ctx.expectError(GL_INVALID_VALUE);
1092 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, -1, -1);
1093 ctx.expectError(GL_INVALID_VALUE);
1094 ctx.endSection();
1096 ctx.glDeleteTextures(1, &texture);
1099 void copytexsubimage2d_incomplete_framebuffer (NegativeTestContext& ctx)
1101 ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
1106 ctx.glGenTextures (2, texture);
1107 ctx.glBindTexture (GL_TEXTURE_2D, texture[0]);
1108 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1109 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, texture[1]);
1110 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1111 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1112 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1113 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1114 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1115 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1116 ctx.expectError(GL_NO_ERROR);
1118 ctx.glGenFramebuffers(1, &fbo);
1119 ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
1120 ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
1121 ctx.expectError(GL_NO_ERROR);
1123 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0);
1124 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
1125 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 0, 0, 0);
1126 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
1127 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 0, 0, 0);
1128 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
1129 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 0, 0, 0);
1130 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
1131 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 0, 0, 0);
1132 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
1133 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 0, 0, 0);
1134 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
1135 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 0, 0, 0);
1136 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
1138 ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0);
1139 ctx.glDeleteFramebuffers(1, &fbo);
1140 ctx.glDeleteTextures(2, texture);
1142 ctx.endSection();
1147 void deletetextures (NegativeTestContext& ctx)
1150 ctx.glGenTextures(1, &texture);
1152 ctx.beginSection("GL_INVALID_VALUE is generated if n is negative.");
1153 ctx.glDeleteTextures(-1, 0);
1154 ctx.expectError(GL_INVALID_VALUE);
1156 ctx.glBindTexture(GL_TEXTURE_2D, texture);
1157 ctx.glDeleteTextures(-1, 0);
1158 ctx.expectError(GL_INVALID_VALUE);
1159 ctx.endSection();
1161 ctx.glDeleteTextures(1, &texture);
1166 void generatemipmap (NegativeTestContext& ctx)
1169 ctx.glGenTextures(2, texture);
1171 ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP.");
1172 ctx.glGenerateMipmap(0);
1173 ctx.expectError(GL_INVALID_ENUM);
1174 ctx.endSection();
1176 ctx.beginSection("INVALID_OPERATION is generated if the texture bound to target is not cube complete.");
1177 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[0]);
1178 ctx.glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_REPEAT);
1179 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1180 ctx.glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
1181 ctx.expectError(GL_INVALID_OPERATION);
1183 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[0]);
1184 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1185 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1186 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1187 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1188 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1189 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1190 ctx.glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
1191 ctx.expectError(GL_INVALID_OPERATION);
1192 ctx.endSection();
1194 if (glu::isContextTypeES(ctx.getRenderContext().getType()))
1196 ctx.beginSection("GL_INVALID_OPERATION is generated if the zero level array is stored in a compressed internal format.");
1197 ctx.glBindTexture(GL_TEXTURE_2D, texture[1]);
1198 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
1199 ctx.glGenerateMipmap(GL_TEXTURE_2D);
1200 ctx.expectError(GL_INVALID_OPERATION);
1201 ctx.endSection();
1203 ctx.beginSection("GL_INVALID_OPERATION is generated if the level base array was not specified with an unsized internal format or a sized internal format that is both color-renderable and texture-filterable.");
1204 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8_SNORM, 0, 0, 0, GL_RGB, GL_BYTE, 0);
1205 ctx.glGenerateMipmap(GL_TEXTURE_2D);
1206 ctx.expectError(GL_INVALID_OPERATION);
1207 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_R8I, 0, 0, 0, GL_RED_INTEGER, GL_BYTE, 0);
1208 ctx.glGenerateMipmap(GL_TEXTURE_2D);
1209 ctx.expectError(GL_INVALID_OPERATION);
1211 if (!(ctx.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_float") && ctx.getContextInfo().isExtensionSupported("GL_OES_texture_float_linear")))
1213 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 0, 0, 0, GL_RGBA, GL_FLOAT, 0);
1214 ctx.glGenerateMipmap(GL_TEXTURE_2D);
1215 ctx.expectError(GL_INVALID_OPERATION);
1218 ctx.endSection();
1221 ctx.glDeleteTextures(2, texture);
1226 void gentextures (NegativeTestContext& ctx)
1228 ctx.beginSection("GL_INVALID_VALUE is generated if n is negative.");
1229 ctx.glGenTextures(-1, 0);
1230 ctx.expectError(GL_INVALID_VALUE);
1231 ctx.endSection();
1236 void pixelstorei (NegativeTestContext& ctx)
1238 ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
1239 ctx.glPixelStorei(0,1);
1240 ctx.expectError(GL_INVALID_ENUM);
1241 ctx.endSection();
1243 ctx.beginSection("GL_INVALID_VALUE is generated if a negative row length, pixel skip, or row skip value is specified, or if alignment is specified as other than 1, 2, 4, or 8.");
1244 ctx.glPixelStorei(GL_PACK_ROW_LENGTH, -1);
1245 ctx.expectError(GL_INVALID_VALUE);
1246 ctx.glPixelStorei(GL_PACK_SKIP_ROWS, -1);
1247 ctx.expectError(GL_INVALID_VALUE);
1248 ctx.glPixelStorei(GL_PACK_SKIP_PIXELS, -1);
1249 ctx.expectError(GL_INVALID_VALUE);
1250 ctx.glPixelStorei(GL_UNPACK_ROW_LENGTH, -1);
1251 ctx.expectError(GL_INVALID_VALUE);
1252 ctx.glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, -1);
1253 ctx.expectError(GL_INVALID_VALUE);
1254 ctx.glPixelStorei(GL_UNPACK_SKIP_ROWS, -1);
1255 ctx.expectError(GL_INVALID_VALUE);
1256 ctx.glPixelStorei(GL_UNPACK_SKIP_PIXELS, -1);
1257 ctx.expectError(GL_INVALID_VALUE);
1258 ctx.glPixelStorei(GL_UNPACK_SKIP_IMAGES, -1);
1259 ctx.expectError(GL_INVALID_VALUE);
1260 ctx.glPixelStorei(GL_PACK_ALIGNMENT, 0);
1261 ctx.expectError(GL_INVALID_VALUE);
1262 ctx.glPixelStorei(GL_UNPACK_ALIGNMENT, 0);
1263 ctx.expectError(GL_INVALID_VALUE);
1264 ctx.glPixelStorei(GL_PACK_ALIGNMENT, 16);
1265 ctx.expectError(GL_INVALID_VALUE);
1266 ctx.glPixelStorei(GL_UNPACK_ALIGNMENT, 16);
1267 ctx.expectError(GL_INVALID_VALUE);
1268 ctx.endSection();
1273 void teximage2d (NegativeTestContext& ctx)
1275 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
1276 ctx.glTexImage2D(0, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1277 ctx.expectError(GL_INVALID_ENUM);
1278 ctx.endSection();
1280 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant.");
1281 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, 0, 0);
1282 ctx.expectError(GL_INVALID_ENUM);
1283 ctx.endSection();
1285 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat, format and type is invalid.");
1286 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
1287 ctx.expectError(GL_INVALID_OPERATION);
1288 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5_A1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
1289 ctx.expectError(GL_INVALID_OPERATION);
1290 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, 1, 1, 0, GL_RGB, GL_UNSIGNED_INT_2_10_10_10_REV, 0);
1291 ctx.expectError(GL_INVALID_OPERATION);
1292 if (glu::isContextTypeES(ctx.getRenderContext().getType()))
1294 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1295 ctx.expectError(GL_INVALID_OPERATION);
1296 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32UI, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0);
1297 ctx.expectError(GL_INVALID_OPERATION);
1299 ctx.endSection();
1302 void teximage2d_inequal_width_height_cube (NegativeTestContext& ctx)
1304 ctx.beginSection("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.");
1305 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1306 ctx.expectError(GL_INVALID_VALUE);
1307 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1308 ctx.expectError(GL_INVALID_VALUE);
1309 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1310 ctx.expectError(GL_INVALID_VALUE);
1311 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1312 ctx.expectError(GL_INVALID_VALUE);
1313 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1314 ctx.expectError(GL_INVALID_VALUE);
1315 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1316 ctx.expectError(GL_INVALID_VALUE);
1317 ctx.endSection();
1320 void teximage2d_neg_level (NegativeTestContext& ctx)
1322 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
1323 ctx.glTexImage2D(GL_TEXTURE_2D, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1324 ctx.expectError(GL_INVALID_VALUE);
1325 ctx.endSection();
1327 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
1328 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1329 ctx.expectError(GL_INVALID_VALUE);
1330 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1331 ctx.expectError(GL_INVALID_VALUE);
1332 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1333 ctx.expectError(GL_INVALID_VALUE);
1334 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1335 ctx.expectError(GL_INVALID_VALUE);
1336 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1337 ctx.expectError(GL_INVALID_VALUE);
1338 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1339 ctx.expectError(GL_INVALID_VALUE);
1340 ctx.endSection();
1343 void teximage2d_max_level (NegativeTestContext& ctx)
1345 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
1346 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
1347 ctx.glTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1348 ctx.expectError(GL_INVALID_VALUE);
1349 ctx.endSection();
1351 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
1352 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
1353 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1354 ctx.expectError(GL_INVALID_VALUE);
1355 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1356 ctx.expectError(GL_INVALID_VALUE);
1357 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1358 ctx.expectError(GL_INVALID_VALUE);
1359 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1360 ctx.expectError(GL_INVALID_VALUE);
1361 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1362 ctx.expectError(GL_INVALID_VALUE);
1363 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1364 ctx.expectError(GL_INVALID_VALUE);
1365 ctx.endSection();
1368 void teximage2d_neg_width_height (NegativeTestContext& ctx)
1370 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0.");
1372 ctx.beginSection("GL_TEXTURE_2D target");
1373 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1374 ctx.expectError(GL_INVALID_VALUE);
1375 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1376 ctx.expectError(GL_INVALID_VALUE);
1377 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1378 ctx.expectError(GL_INVALID_VALUE);
1379 ctx.endSection();
1381 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
1382 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1383 ctx.expectError(GL_INVALID_VALUE);
1384 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1385 ctx.expectError(GL_INVALID_VALUE);
1386 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1387 ctx.expectError(GL_INVALID_VALUE);
1388 ctx.endSection();
1390 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
1391 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1392 ctx.expectError(GL_INVALID_VALUE);
1393 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1394 ctx.expectError(GL_INVALID_VALUE);
1395 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1396 ctx.expectError(GL_INVALID_VALUE);
1397 ctx.endSection();
1399 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
1400 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1401 ctx.expectError(GL_INVALID_VALUE);
1402 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1403 ctx.expectError(GL_INVALID_VALUE);
1404 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1405 ctx.expectError(GL_INVALID_VALUE);
1406 ctx.endSection();
1408 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
1409 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1410 ctx.expectError(GL_INVALID_VALUE);
1411 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1412 ctx.expectError(GL_INVALID_VALUE);
1413 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1414 ctx.expectError(GL_INVALID_VALUE);
1415 ctx.endSection();
1417 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
1418 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1419 ctx.expectError(GL_INVALID_VALUE);
1420 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1421 ctx.expectError(GL_INVALID_VALUE);
1422 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1423 ctx.expectError(GL_INVALID_VALUE);
1424 ctx.endSection();
1426 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
1427 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1428 ctx.expectError(GL_INVALID_VALUE);
1429 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1430 ctx.expectError(GL_INVALID_VALUE);
1431 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1432 ctx.expectError(GL_INVALID_VALUE);
1433 ctx.endSection();
1435 ctx.endSection();
1438 void teximage2d_max_width_height (NegativeTestContext& ctx)
1440 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1;
1441 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1;
1443 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE.");
1444 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1445 ctx.expectError(GL_INVALID_VALUE);
1446 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1447 ctx.expectError(GL_INVALID_VALUE);
1448 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1449 ctx.expectError(GL_INVALID_VALUE);
1450 ctx.endSection();
1452 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE.");
1454 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
1455 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1456 ctx.expectError(GL_INVALID_VALUE);
1457 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1458 ctx.expectError(GL_INVALID_VALUE);
1459 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1460 ctx.expectError(GL_INVALID_VALUE);
1461 ctx.endSection();
1463 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
1464 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1465 ctx.expectError(GL_INVALID_VALUE);
1466 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1467 ctx.expectError(GL_INVALID_VALUE);
1468 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1469 ctx.expectError(GL_INVALID_VALUE);
1470 ctx.endSection();
1472 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
1473 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1474 ctx.expectError(GL_INVALID_VALUE);
1475 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1476 ctx.expectError(GL_INVALID_VALUE);
1477 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1478 ctx.expectError(GL_INVALID_VALUE);
1479 ctx.endSection();
1481 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
1482 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1483 ctx.expectError(GL_INVALID_VALUE);
1484 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1485 ctx.expectError(GL_INVALID_VALUE);
1486 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1487 ctx.expectError(GL_INVALID_VALUE);
1488 ctx.endSection();
1490 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
1491 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1492 ctx.expectError(GL_INVALID_VALUE);
1493 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1494 ctx.expectError(GL_INVALID_VALUE);
1495 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1496 ctx.expectError(GL_INVALID_VALUE);
1497 ctx.endSection();
1499 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
1500 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1501 ctx.expectError(GL_INVALID_VALUE);
1502 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1503 ctx.expectError(GL_INVALID_VALUE);
1504 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1505 ctx.expectError(GL_INVALID_VALUE);
1506 ctx.endSection();
1508 ctx.endSection();
1511 void teximage2d_invalid_border (NegativeTestContext& ctx)
1513 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0.");
1514 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1515 ctx.expectError(GL_INVALID_VALUE);
1516 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1517 ctx.expectError(GL_INVALID_VALUE);
1518 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1519 ctx.expectError(GL_INVALID_VALUE);
1520 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1521 ctx.expectError(GL_INVALID_VALUE);
1522 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1523 ctx.expectError(GL_INVALID_VALUE);
1524 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1525 ctx.expectError(GL_INVALID_VALUE);
1526 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1527 ctx.expectError(GL_INVALID_VALUE);
1528 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0);
1529 ctx.expectError(GL_INVALID_VALUE);
1530 ctx.endSection();
1533 void teximage2d_invalid_buffer_target (NegativeTestContext& ctx)
1539 ctx.glGenBuffers (1, &buf);
1540 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
1541 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY);
1542 ctx.glGenTextures (1, &texture);
1543 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1544 ctx.expectError (GL_NO_ERROR);
1546 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and...");
1547 ctx.beginSection("...the buffer object's data store is currently mapped.");
1548 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 32, GL_MAP_WRITE_BIT);
1549 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1550 ctx.expectError (GL_INVALID_OPERATION);
1551 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
1552 ctx.endSection();
1554 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
1555 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1556 ctx.expectError (GL_INVALID_OPERATION);
1557 ctx.endSection();
1559 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type.");
1560 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage;
1561 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB5_A1, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, (const GLvoid*)3);
1562 ctx.expectError (GL_INVALID_OPERATION);
1563 ctx.endSection();
1564 ctx.endSection();
1566 ctx.glDeleteBuffers (1, &buf);
1567 ctx.glDeleteTextures (1, &texture);
1572 void texsubimage2d (NegativeTestContext& ctx)
1575 ctx.glGenTextures (1, &texture);
1576 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1577 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1578 ctx.expectError (GL_NO_ERROR);
1580 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
1581 ctx.glTexSubImage2D(0, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1582 ctx.expectError(GL_INVALID_ENUM);
1583 ctx.endSection();
1585 ctx.beginSection("GL_INVALID_ENUM is generated if format is not an accepted format constant.");
1586 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 4, 4, GL_UNSIGNED_BYTE, 0);
1587 ctx.expectError(GL_INVALID_ENUM);
1588 ctx.endSection();
1590 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant.");
1591 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, 0, 0);
1592 ctx.expectError(GL_INVALID_ENUM);
1593 ctx.endSection();
1595 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat of the previously specified texture array, format and type is not valid.");
1596 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, 0);
1597 ctx.expectError(GL_INVALID_OPERATION);
1598 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
1599 ctx.expectError(GL_INVALID_OPERATION);
1600 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
1601 ctx.expectError(GL_INVALID_OPERATION);
1602 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
1603 ctx.expectError(GL_INVALID_OPERATION);
1604 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA_INTEGER, GL_UNSIGNED_INT, 0);
1605 ctx.expectError(GL_INVALID_OPERATION);
1606 if (glu::isContextTypeES(ctx.getRenderContext().getType()))
1608 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_FLOAT, 0);
1609 ctx.expectError(GL_INVALID_OPERATION);
1611 ctx.endSection();
1613 ctx.glDeleteTextures (1, &texture);
1616 void texsubimage2d_neg_level (NegativeTestContext& ctx)
1619 ctx.glGenTextures (2, &textures[0]);
1620 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]);
1621 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1622 ctx.glBindTexture (GL_TEXTURE_2D, textures[1]);
1623 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0););
1624 ctx.expectError (GL_NO_ERROR);
1626 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
1627 ctx.glTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1628 ctx.expectError(GL_INVALID_VALUE);
1629 ctx.endSection();
1631 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
1634 ctx.glTexSubImage2D(faceGL, -1, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1635 ctx.expectError(GL_INVALID_VALUE);
1637 ctx.endSection();
1639 ctx.glDeleteTextures(2, &textures[0]);
1642 void texsubimage2d_max_level (NegativeTestContext& ctx)
1645 ctx.glGenTextures (2, &textures[0]);
1646 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]);
1647 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1648 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]);
1649 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0););
1650 ctx.expectError (GL_NO_ERROR);
1652 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
1653 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
1654 ctx.glTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1655 ctx.expectError(GL_INVALID_VALUE);
1656 ctx.endSection();
1658 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
1659 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
1662 ctx.glTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1663 ctx.expectError(GL_INVALID_VALUE);
1665 ctx.endSection();
1667 ctx.glDeleteTextures(2, &textures[0]);
1670 void texsubimage2d_neg_offset (NegativeTestContext& ctx)
1673 ctx.glGenTextures(1, &texture);
1674 ctx.glBindTexture(GL_TEXTURE_2D, texture);
1675 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1676 ctx.expectError(GL_NO_ERROR);
1678 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset or yoffset are negative.");
1679 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, -1, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1680 ctx.expectError(GL_INVALID_VALUE);
1681 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, -1, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1682 ctx.expectError(GL_INVALID_VALUE);
1683 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, -1, -1, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
1684 ctx.expectError(GL_INVALID_VALUE);
1685 ctx.endSection();
1687 ctx.glDeleteTextures(1, &texture);
1690 void texsubimage2d_invalid_offset (NegativeTestContext& ctx)
1693 ctx.glGenTextures (1, &texture);
1694 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1695 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1696 ctx.expectError (GL_NO_ERROR);
1698 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width or yoffset + height > texture_height.");
1699 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 30, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1700 ctx.expectError(GL_INVALID_VALUE);
1701 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 30, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1702 ctx.expectError(GL_INVALID_VALUE);
1703 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 30, 30, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1704 ctx.expectError(GL_INVALID_VALUE);
1705 ctx.endSection();
1707 ctx.glDeleteTextures (1, &texture);
1710 void texsubimage2d_neg_width_height (NegativeTestContext& ctx)
1713 ctx.glGenTextures (1, &texture);
1714 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1715 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1716 ctx.expectError (GL_NO_ERROR);
1718 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0.");
1719 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1720 ctx.expectError(GL_INVALID_VALUE);
1721 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1722 ctx.expectError(GL_INVALID_VALUE);
1723 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1724 ctx.expectError(GL_INVALID_VALUE);
1725 ctx.endSection();
1727 ctx.glDeleteTextures (1, &texture);
1730 void texsubimage2d_invalid_buffer_target (NegativeTestContext& ctx)
1736 ctx.glGenTextures (1, &texture);
1737 ctx.glBindTexture (GL_TEXTURE_2D, texture);
1738 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1739 ctx.glGenBuffers (1, &buf);
1740 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
1741 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY);
1742 ctx.expectError (GL_NO_ERROR);
1744 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and...");
1745 ctx.beginSection("...the buffer object's data store is currently mapped.");
1746 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 32, GL_MAP_WRITE_BIT);
1747 ctx.glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1748 ctx.expectError (GL_INVALID_OPERATION);
1749 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
1750 ctx.endSection();
1752 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
1753 ctx.glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 32, 32, GL_RGBA, GL_UNSIGNED_BYTE, 0);
1754 ctx.expectError (GL_INVALID_OPERATION);
1755 ctx.endSection();
1757 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type.");
1758 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage;
1759 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
1760 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 0);
1761 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
1762 ctx.expectError (GL_NO_ERROR);
1763 ctx.glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, (const GLvoid*)3);
1764 ctx.expectError (GL_INVALID_OPERATION);
1765 ctx.endSection();
1766 ctx.endSection();
1768 ctx.glDeleteBuffers (1, &buf);
1769 ctx.glDeleteTextures (1, &texture);
1774 void texparameteri (NegativeTestContext& ctx)
1779 ctx.glGenTextures(1, &texture);
1780 ctx.glBindTexture(GL_TEXTURE_2D, texture);
1782 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
1783 ctx.glTexParameteri(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1784 ctx.expectError(GL_INVALID_ENUM);
1785 ctx.glTexParameteri(GL_TEXTURE_2D, 0, GL_LINEAR);
1786 ctx.expectError(GL_INVALID_ENUM);
1787 ctx.glTexParameteri(0, 0, GL_LINEAR);
1788 ctx.expectError(GL_INVALID_ENUM);
1789 ctx.endSection();
1791 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
1792 ctx.glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
1793 ctx.expectError(GL_INVALID_ENUM);
1794 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
1795 ctx.expectError(GL_INVALID_ENUM);
1796 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
1797 ctx.expectError(GL_INVALID_ENUM);
1798 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
1799 ctx.expectError(GL_INVALID_ENUM);
1800 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
1801 ctx.expectError(GL_INVALID_ENUM);
1802 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
1803 ctx.expectError(GL_INVALID_ENUM);
1804 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
1805 ctx.expectError(GL_INVALID_ENUM);
1806 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
1807 ctx.expectError(GL_INVALID_ENUM);
1808 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
1809 ctx.expectError(GL_INVALID_ENUM);
1810 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
1811 ctx.expectError(GL_INVALID_ENUM);
1812 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
1813 ctx.expectError(GL_INVALID_ENUM);
1814 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
1815 ctx.expectError(GL_INVALID_ENUM);
1816 ctx.endSection();
1818 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
1819 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, -1);
1820 ctx.expectError(GL_INVALID_VALUE);
1821 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, -1);
1822 ctx.expectError(GL_INVALID_VALUE);
1823 ctx.endSection();
1825 if (supportsES32orGL45(ctx))
1827 ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter.");
1828 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0);
1829 ctx.expectError(GL_INVALID_ENUM);
1830 ctx.endSection();
1833 ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
1834 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
1835 ctx.expectError(GL_INVALID_ENUM);
1836 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
1837 ctx.expectError(GL_INVALID_ENUM);
1838 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
1839 ctx.expectError(GL_INVALID_ENUM);
1840 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
1841 ctx.expectError(GL_INVALID_ENUM);
1842 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
1843 ctx.expectError(GL_INVALID_ENUM);
1844 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
1845 ctx.expectError(GL_INVALID_ENUM);
1846 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
1847 ctx.expectError(GL_INVALID_ENUM);
1848 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
1849 ctx.expectError(GL_INVALID_ENUM);
1850 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
1851 ctx.expectError(GL_INVALID_ENUM);
1852 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
1853 ctx.expectError(GL_INVALID_ENUM);
1855 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
1857 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
1858 ctx.expectError(GL_INVALID_ENUM);
1859 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
1860 ctx.expectError(GL_INVALID_ENUM);
1861 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
1862 ctx.expectError(GL_INVALID_ENUM);
1863 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
1864 ctx.expectError(GL_INVALID_ENUM);
1865 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
1866 ctx.expectError(GL_INVALID_ENUM);
1867 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
1868 ctx.expectError(GL_INVALID_ENUM);
1869 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
1870 ctx.expectError(GL_INVALID_ENUM);
1871 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
1872 ctx.expectError(GL_INVALID_ENUM);
1873 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
1874 ctx.expectError(GL_INVALID_ENUM);
1875 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
1876 ctx.expectError(GL_INVALID_ENUM);
1878 ctx.endSection();
1880 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
1881 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1);
1882 ctx.expectError(GL_INVALID_OPERATION);
1884 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
1886 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1);
1887 ctx.expectError(GL_INVALID_OPERATION);
1889 ctx.endSection();
1891 ctx.glDeleteTextures(1, &texture);
1896 void texparameterf (NegativeTestContext& ctx)
1900 ctx.glGenTextures(1, &texture);
1901 ctx.glBindTexture(GL_TEXTURE_2D, texture);
1903 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
1904 ctx.glTexParameterf(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1905 ctx.expectError(GL_INVALID_ENUM);
1906 ctx.glTexParameterf(GL_TEXTURE_2D, 0, GL_LINEAR);
1907 ctx.expectError(GL_INVALID_ENUM);
1908 ctx.glTexParameterf(0, 0, GL_LINEAR);
1909 ctx.expectError(GL_INVALID_ENUM);
1910 ctx.endSection();
1912 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
1913 ctx.glTexParameterf(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
1914 ctx.expectError(GL_INVALID_ENUM);
1915 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
1916 ctx.expectError(GL_INVALID_ENUM);
1917 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
1918 ctx.expectError(GL_INVALID_ENUM);
1919 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
1920 ctx.expectError(GL_INVALID_ENUM);
1921 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
1922 ctx.expectError(GL_INVALID_ENUM);
1923 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
1924 ctx.expectError(GL_INVALID_ENUM);
1925 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
1926 ctx.expectError(GL_INVALID_ENUM);
1927 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
1928 ctx.expectError(GL_INVALID_ENUM);
1929 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
1930 ctx.expectError(GL_INVALID_ENUM);
1931 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
1932 ctx.expectError(GL_INVALID_ENUM);
1933 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
1934 ctx.expectError(GL_INVALID_ENUM);
1935 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
1936 ctx.expectError(GL_INVALID_ENUM);
1937 ctx.endSection();
1939 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
1940 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, -1.0f);
1941 ctx.expectError(GL_INVALID_VALUE);
1942 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, -1.0f);
1943 ctx.expectError(GL_INVALID_VALUE);
1944 ctx.endSection();
1946 if (supportsES32orGL45(ctx))
1948 ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter.");
1949 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0.0f);
1950 ctx.expectError(GL_INVALID_ENUM);
1951 ctx.endSection();
1954 ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
1955 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
1956 ctx.expectError(GL_INVALID_ENUM);
1957 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
1958 ctx.expectError(GL_INVALID_ENUM);
1959 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
1960 ctx.expectError(GL_INVALID_ENUM);
1961 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
1962 ctx.expectError(GL_INVALID_ENUM);
1963 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
1964 ctx.expectError(GL_INVALID_ENUM);
1965 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
1966 ctx.expectError(GL_INVALID_ENUM);
1967 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
1968 ctx.expectError(GL_INVALID_ENUM);
1969 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
1970 ctx.expectError(GL_INVALID_ENUM);
1971 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
1972 ctx.expectError(GL_INVALID_ENUM);
1973 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
1974 ctx.expectError(GL_INVALID_ENUM);
1976 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
1978 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
1979 ctx.expectError(GL_INVALID_ENUM);
1980 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
1981 ctx.expectError(GL_INVALID_ENUM);
1982 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
1983 ctx.expectError(GL_INVALID_ENUM);
1984 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
1985 ctx.expectError(GL_INVALID_ENUM);
1986 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
1987 ctx.expectError(GL_INVALID_ENUM);
1988 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
1989 ctx.expectError(GL_INVALID_ENUM);
1990 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
1991 ctx.expectError(GL_INVALID_ENUM);
1992 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
1993 ctx.expectError(GL_INVALID_ENUM);
1994 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
1995 ctx.expectError(GL_INVALID_ENUM);
1996 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
1997 ctx.expectError(GL_INVALID_ENUM);
1999 ctx.endSection();
2001 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
2002 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1.0f);
2003 ctx.expectError(GL_INVALID_OPERATION);
2005 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
2007 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1.0f);
2008 ctx.expectError(GL_INVALID_OPERATION);
2010 ctx.endSection();
2012 ctx.glDeleteTextures(1, &texture);
2017 void texparameteriv (NegativeTestContext& ctx)
2022 ctx.glGenTextures(1, &texture);
2023 ctx.glBindTexture(GL_TEXTURE_2D, texture);
2025 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
2026 ctx.glTexParameteriv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
2027 ctx.expectError(GL_INVALID_ENUM);
2028 ctx.glTexParameteriv(GL_TEXTURE_2D, 0, &params[0]);
2029 ctx.expectError(GL_INVALID_ENUM);
2030 ctx.glTexParameteriv(0, 0, &params[0]);
2031 ctx.expectError(GL_INVALID_ENUM);
2032 ctx.endSection();
2034 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
2036 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, &params[0]);
2037 ctx.expectError(GL_INVALID_ENUM);
2038 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, &params[0]);
2039 ctx.expectError(GL_INVALID_ENUM);
2040 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, &params[0]);
2041 ctx.expectError(GL_INVALID_ENUM);
2042 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
2043 ctx.expectError(GL_INVALID_ENUM);
2044 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
2045 ctx.expectError(GL_INVALID_ENUM);
2046 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, &params[0]);
2047 ctx.expectError(GL_INVALID_ENUM);
2048 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, &params[0]);
2049 ctx.expectError(GL_INVALID_ENUM);
2050 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, &params[0]);
2051 ctx.expectError(GL_INVALID_ENUM);
2052 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, &params[0]);
2053 ctx.expectError(GL_INVALID_ENUM);
2054 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
2055 ctx.expectError(GL_INVALID_ENUM);
2056 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
2057 ctx.expectError(GL_INVALID_ENUM);
2058 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, &params[0]);
2059 ctx.expectError(GL_INVALID_ENUM);
2060 ctx.endSection();
2062 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
2063 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, &params[0]);
2064 ctx.expectError(GL_INVALID_VALUE);
2065 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, &params[0]);
2066 ctx.expectError(GL_INVALID_VALUE);
2067 ctx.endSection();
2069 ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
2070 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, &params[0]);
2071 ctx.expectError(GL_INVALID_ENUM);
2072 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, &params[0]);
2073 ctx.expectError(GL_INVALID_ENUM);
2074 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, &params[0]);
2075 ctx.expectError(GL_INVALID_ENUM);
2076 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, &params[0]);
2077 ctx.expectError(GL_INVALID_ENUM);
2078 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, &params[0]);
2079 ctx.expectError(GL_INVALID_ENUM);
2080 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, &params[0]);
2081 ctx.expectError(GL_INVALID_ENUM);
2082 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, &params[0]);
2083 ctx.expectError(GL_INVALID_ENUM);
2084 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, &params[0]);
2085 ctx.expectError(GL_INVALID_ENUM);
2086 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, &params[0]);
2087 ctx.expectError(GL_INVALID_ENUM);
2088 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, &params[0]);
2089 ctx.expectError(GL_INVALID_ENUM);
2091 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
2093 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, &params[0]);
2094 ctx.expectError(GL_INVALID_ENUM);
2095 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, &params[0]);
2096 ctx.expectError(GL_INVALID_ENUM);
2097 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, &params[0]);
2098 ctx.expectError(GL_INVALID_ENUM);
2099 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, &params[0]);
2100 ctx.expectError(GL_INVALID_ENUM);
2101 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, &params[0]);
2102 ctx.expectError(GL_INVALID_ENUM);
2103 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, &params[0]);
2104 ctx.expectError(GL_INVALID_ENUM);
2105 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, &params[0]);
2106 ctx.expectError(GL_INVALID_ENUM);
2107 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, &params[0]);
2108 ctx.expectError(GL_INVALID_ENUM);
2109 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, &params[0]);
2110 ctx.expectError(GL_INVALID_ENUM);
2111 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, &params[0]);
2112 ctx.expectError(GL_INVALID_ENUM);
2114 ctx.endSection();
2116 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
2118 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
2119 ctx.expectError(GL_INVALID_OPERATION);
2121 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
2124 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
2125 ctx.expectError(GL_INVALID_OPERATION);
2127 ctx.endSection();
2129 ctx.glDeleteTextures(1, &texture);
2134 void texparameterfv (NegativeTestContext& ctx)
2138 ctx.glGenTextures(1, &texture);
2139 ctx.glBindTexture(GL_TEXTURE_2D, texture);
2141 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
2143 ctx.glTexParameterfv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
2144 ctx.expectError(GL_INVALID_ENUM);
2145 ctx.glTexParameterfv(GL_TEXTURE_2D, 0, &params[0]);
2146 ctx.expectError(GL_INVALID_ENUM);
2147 ctx.glTexParameterfv(0, 0, &params[0]);
2148 ctx.expectError(GL_INVALID_ENUM);
2149 ctx.endSection();
2151 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
2153 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, &params[0]);
2154 ctx.expectError(GL_INVALID_ENUM);
2155 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, &params[0]);
2156 ctx.expectError(GL_INVALID_ENUM);
2157 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, &params[0]);
2158 ctx.expectError(GL_INVALID_ENUM);
2159 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
2160 ctx.expectError(GL_INVALID_ENUM);
2161 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
2162 ctx.expectError(GL_INVALID_ENUM);
2163 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, &params[0]);
2164 ctx.expectError(GL_INVALID_ENUM);
2165 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, &params[0]);
2166 ctx.expectError(GL_INVALID_ENUM);
2167 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, &params[0]);
2168 ctx.expectError(GL_INVALID_ENUM);
2169 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, &params[0]);
2170 ctx.expectError(GL_INVALID_ENUM);
2171 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
2172 ctx.expectError(GL_INVALID_ENUM);
2173 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
2174 ctx.expectError(GL_INVALID_ENUM);
2175 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, &params[0]);
2176 ctx.expectError(GL_INVALID_ENUM);
2177 ctx.endSection();
2179 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
2180 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, &params[0]);
2181 ctx.expectError(GL_INVALID_VALUE);
2182 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, &params[0]);
2183 ctx.expectError(GL_INVALID_VALUE);
2184 ctx.endSection();
2186 ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
2187 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, &params[0]);
2188 ctx.expectError(GL_INVALID_ENUM);
2189 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, &params[0]);
2190 ctx.expectError(GL_INVALID_ENUM);
2191 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, &params[0]);
2192 ctx.expectError(GL_INVALID_ENUM);
2193 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, &params[0]);
2194 ctx.expectError(GL_INVALID_ENUM);
2195 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, &params[0]);
2196 ctx.expectError(GL_INVALID_ENUM);
2197 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, &params[0]);
2198 ctx.expectError(GL_INVALID_ENUM);
2199 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, &params[0]);
2200 ctx.expectError(GL_INVALID_ENUM);
2201 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, &params[0]);
2202 ctx.expectError(GL_INVALID_ENUM);
2203 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, &params[0]);
2204 ctx.expectError(GL_INVALID_ENUM);
2205 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, &params[0]);
2206 ctx.expectError(GL_INVALID_ENUM);
2208 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
2210 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, &params[0]);
2211 ctx.expectError(GL_INVALID_ENUM);
2212 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, &params[0]);
2213 ctx.expectError(GL_INVALID_ENUM);
2214 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, &params[0]);
2215 ctx.expectError(GL_INVALID_ENUM);
2216 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, &params[0]);
2217 ctx.expectError(GL_INVALID_ENUM);
2218 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, &params[0]);
2219 ctx.expectError(GL_INVALID_ENUM);
2220 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, &params[0]);
2221 ctx.expectError(GL_INVALID_ENUM);
2222 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, &params[0]);
2223 ctx.expectError(GL_INVALID_ENUM);
2224 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, &params[0]);
2225 ctx.expectError(GL_INVALID_ENUM);
2226 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, &params[0]);
2227 ctx.expectError(GL_INVALID_ENUM);
2228 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, &params[0]);
2229 ctx.expectError(GL_INVALID_ENUM);
2231 ctx.endSection();
2233 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
2235 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
2236 ctx.expectError(GL_INVALID_OPERATION);
2238 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
2241 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
2242 ctx.expectError(GL_INVALID_OPERATION);
2244 ctx.endSection();
2246 ctx.glDeleteTextures(1, &texture);
2251 void texparameterIiv (NegativeTestContext& ctx)
2253 if (!supportsES32orGL45(ctx))
2257 ctx.beginSection("GL_INVALID_ENUM is generated if target is not a valid target.");
2258 ctx.glTexParameterIiv(0, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
2259 ctx.expectError(GL_INVALID_ENUM);
2260 ctx.endSection();
2262 ctx.beginSection("GL_INVALID_ENUM is generated if pname is not a valid parameter.");
2263 ctx.glTexParameterIiv(GL_TEXTURE_2D, 0, textureMode);
2264 ctx.expectError(GL_INVALID_ENUM);
2265 ctx.endSection();
2267 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
2270 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
2271 ctx.expectError(GL_INVALID_ENUM);
2272 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
2273 ctx.expectError(GL_INVALID_ENUM);
2274 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
2275 ctx.expectError(GL_INVALID_ENUM);
2276 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
2277 ctx.expectError(GL_INVALID_ENUM);
2278 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
2279 ctx.expectError(GL_INVALID_ENUM);
2280 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
2281 ctx.expectError(GL_INVALID_ENUM);
2282 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
2283 ctx.expectError(GL_INVALID_ENUM);
2284 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
2285 ctx.expectError(GL_INVALID_ENUM);
2286 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
2287 ctx.expectError(GL_INVALID_ENUM);
2288 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
2289 ctx.expectError(GL_INVALID_ENUM);
2290 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
2291 ctx.expectError(GL_INVALID_ENUM);
2292 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
2293 ctx.expectError(GL_INVALID_ENUM);
2294 ctx.endSection();
2296 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
2297 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, textureMode);
2298 ctx.expectError(GL_INVALID_VALUE);
2299 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, textureMode);
2300 ctx.expectError(GL_INVALID_VALUE);
2301 ctx.endSection();
2303 ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
2306 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
2307 ctx.expectError(GL_INVALID_ENUM);
2308 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
2309 ctx.expectError(GL_INVALID_ENUM);
2310 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
2311 ctx.expectError(GL_INVALID_ENUM);
2312 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
2313 ctx.expectError(GL_INVALID_ENUM);
2314 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
2315 ctx.expectError(GL_INVALID_ENUM);
2316 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
2317 ctx.expectError(GL_INVALID_ENUM);
2318 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
2319 ctx.expectError(GL_INVALID_ENUM);
2320 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
2321 ctx.expectError(GL_INVALID_ENUM);
2322 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
2323 ctx.expectError(GL_INVALID_ENUM);
2324 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
2325 ctx.expectError(GL_INVALID_ENUM);
2327 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
2328 ctx.expectError(GL_INVALID_ENUM);
2329 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
2330 ctx.expectError(GL_INVALID_ENUM);
2331 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
2332 ctx.expectError(GL_INVALID_ENUM);
2333 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
2334 ctx.expectError(GL_INVALID_ENUM);
2335 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
2336 ctx.expectError(GL_INVALID_ENUM);
2337 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
2338 ctx.expectError(GL_INVALID_ENUM);
2339 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
2340 ctx.expectError(GL_INVALID_ENUM);
2341 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
2342 ctx.expectError(GL_INVALID_ENUM);
2343 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
2344 ctx.expectError(GL_INVALID_ENUM);
2345 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
2346 ctx.expectError(GL_INVALID_ENUM);
2347 ctx.endSection();
2349 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
2352 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, textureMode);
2353 ctx.expectError(GL_INVALID_OPERATION);
2354 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, textureMode);
2355 ctx.expectError(GL_INVALID_OPERATION);
2356 ctx.endSection();
2361 void texparameterIuiv (NegativeTestContext& ctx)
2363 if (!supportsES32orGL45(ctx))
2367 ctx.beginSection("GL_INVALID_ENUM is generated if target is not a valid target.");
2368 ctx.glTexParameterIuiv(0, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
2369 ctx.expectError(GL_INVALID_ENUM);
2370 ctx.endSection();
2372 ctx.beginSection("GL_INVALID_ENUM is generated if pname is not a valid parameter.");
2373 ctx.glTexParameterIuiv(GL_TEXTURE_2D, 0, textureMode);
2374 ctx.expectError(GL_INVALID_ENUM);
2375 ctx.endSection();
2377 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
2379 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
2380 ctx.expectError(GL_INVALID_ENUM);
2381 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
2382 ctx.expectError(GL_INVALID_ENUM);
2383 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
2384 ctx.expectError(GL_INVALID_ENUM);
2385 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
2386 ctx.expectError(GL_INVALID_ENUM);
2387 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
2388 ctx.expectError(GL_INVALID_ENUM);
2389 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
2390 ctx.expectError(GL_INVALID_ENUM);
2391 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
2392 ctx.expectError(GL_INVALID_ENUM);
2393 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
2394 ctx.expectError(GL_INVALID_ENUM);
2395 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
2396 ctx.expectError(GL_INVALID_ENUM);
2397 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
2398 ctx.expectError(GL_INVALID_ENUM);
2399 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
2400 ctx.expectError(GL_INVALID_ENUM);
2401 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
2402 ctx.expectError(GL_INVALID_ENUM);
2403 ctx.endSection();
2405 ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
2408 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
2409 ctx.expectError(GL_INVALID_ENUM);
2410 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
2411 ctx.expectError(GL_INVALID_ENUM);
2412 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
2413 ctx.expectError(GL_INVALID_ENUM);
2414 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
2415 ctx.expectError(GL_INVALID_ENUM);
2416 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
2417 ctx.expectError(GL_INVALID_ENUM);
2418 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
2419 ctx.expectError(GL_INVALID_ENUM);
2420 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
2421 ctx.expectError(GL_INVALID_ENUM);
2422 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
2423 ctx.expectError(GL_INVALID_ENUM);
2424 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
2425 ctx.expectError(GL_INVALID_ENUM);
2426 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
2427 ctx.expectError(GL_INVALID_ENUM);
2429 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
2430 ctx.expectError(GL_INVALID_ENUM);
2431 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
2432 ctx.expectError(GL_INVALID_ENUM);
2433 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
2434 ctx.expectError(GL_INVALID_ENUM);
2435 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
2436 ctx.expectError(GL_INVALID_ENUM);
2437 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
2438 ctx.expectError(GL_INVALID_ENUM);
2439 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
2440 ctx.expectError(GL_INVALID_ENUM);
2441 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
2442 ctx.expectError(GL_INVALID_ENUM);
2443 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
2444 ctx.expectError(GL_INVALID_ENUM);
2445 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
2446 ctx.expectError(GL_INVALID_ENUM);
2447 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
2448 ctx.expectError(GL_INVALID_ENUM);
2449 ctx.endSection();
2451 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
2454 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, textureMode);
2455 ctx.expectError(GL_INVALID_OPERATION);
2456 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, textureMode);
2457 ctx.expectError(GL_INVALID_OPERATION);
2458 ctx.endSection();
2463 void compressedtexsubimage2d (NegativeTestContext& ctx)
2465 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
2466 ctx.glCompressedTexSubImage2D(0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGB8_ETC2, 0, 0);
2467 ctx.expectError(GL_INVALID_ENUM);
2468 ctx.endSection();
2471 ctx.glGenTextures (1, &texture);
2472 ctx.glBindTexture (GL_TEXTURE_2D, texture);
2473 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0);
2474 ctx.expectError (GL_NO_ERROR);
2476 ctx.beginSection("GL_INVALID_OPERATION is generated if format does not match the internal format of the texture image being modified.");
2477 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_COMPRESSED_RGB8_ETC2, 0, 0);
2478 ctx.expectError(GL_INVALID_OPERATION);
2479 ctx.endSection();
2481 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if width is not a multiple of four, and width + xoffset is not equal to the width of the texture level.");
2482 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 4, 0, 10, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(10, 4), 0);
2483 ctx.expectError(GL_INVALID_OPERATION);
2484 ctx.endSection();
2486 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if height is not a multiple of four, and height + yoffset is not equal to the height of the texture level.");
2487 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 4, 4, 10, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 10), 0);
2488 ctx.expectError(GL_INVALID_OPERATION);
2489 ctx.endSection();
2491 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if xoffset or yoffset is not a multiple of four.");
2492 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 1, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
2493 ctx.expectError(GL_INVALID_OPERATION);
2494 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 1, 0, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
2495 ctx.expectError(GL_INVALID_OPERATION);
2496 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 1, 1, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
2497 ctx.expectError(GL_INVALID_OPERATION);
2498 ctx.endSection();
2500 ctx.glDeleteTextures (1, &texture);
2503 void compressedtexsubimage2d_neg_level (NegativeTestContext& ctx)
2506 ctx.glGenTextures (2, &textures[0]);
2507 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]);
2508 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0);
2509 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]);
2510 FOR_CUBE_FACES(faceGL, ctx.glCompressedTexImage2D(faceGL, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0););
2511 ctx.expectError (GL_NO_ERROR);
2513 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
2514 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2515 ctx.expectError(GL_INVALID_VALUE);
2516 ctx.endSection();
2518 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
2521 ctx.glCompressedTexSubImage2D(faceGL, -1, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2522 ctx.expectError(GL_INVALID_VALUE);
2524 ctx.endSection();
2526 ctx.glDeleteTextures(2, &textures[0]);
2529 void compressedtexsubimage2d_max_level (NegativeTestContext& ctx)
2532 ctx.glGenTextures (2, &textures[0]);
2533 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]);
2534 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0);
2535 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]);
2536 FOR_CUBE_FACES(faceGL, ctx.glCompressedTexImage2D(faceGL, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0););
2537 ctx.expectError (GL_NO_ERROR);
2539 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
2540 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
2541 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2542 ctx.expectError(GL_INVALID_VALUE);
2543 ctx.endSection();
2545 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
2546 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
2549 ctx.glCompressedTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2550 ctx.expectError(GL_INVALID_VALUE);
2552 ctx.endSection();
2554 ctx.glDeleteTextures(2, &textures[0]);
2557 void compressedtexsubimage2d_neg_offset (NegativeTestContext& ctx)
2560 ctx.glGenTextures(1, &texture);
2561 ctx.glBindTexture(GL_TEXTURE_2D, texture);
2562 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 8, 8, 0, etc2EacDataSize(8, 8), 0);
2567 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset or yoffset are negative.");
2569 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, -4, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2570 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2571 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, -4, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2572 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2573 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, -4, -4, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2574 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2576 ctx.endSection();
2578 ctx.glDeleteTextures(1, &texture);
2581 void compressedtexsubimage2d_invalid_offset (NegativeTestContext& ctx)
2584 ctx.glGenTextures (1, &texture);
2585 ctx.glBindTexture (GL_TEXTURE_2D, texture);
2586 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
2587 ctx.expectError (GL_NO_ERROR);
2589 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset + width > texture_width or yoffset + height > texture_height.");
2591 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 12, 0, 8, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 4), 0);
2592 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2593 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 12, 4, 8, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 8), 0);
2594 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2595 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 12, 12, 8, 8, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 8), 0);
2596 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2597 ctx.endSection();
2599 ctx.glDeleteTextures (1, &texture);
2602 void compressedtexsubimage2d_neg_width_height (NegativeTestContext& ctx)
2605 ctx.glGenTextures (1, &texture);
2606 ctx.glBindTexture (GL_TEXTURE_2D, texture);
2607 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
2608 ctx.expectError (GL_NO_ERROR);
2610 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if width or height is less than 0.");
2611 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -4, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2612 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2613 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2614 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2615 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -4, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
2616 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
2617 ctx.endSection();
2619 ctx.glDeleteTextures(1, &texture);
2622 void compressedtexsubimage2d_invalid_size (NegativeTestContext& ctx)
2625 ctx.glGenTextures (1, &texture);
2626 ctx.glBindTexture (GL_TEXTURE_2D, texture);
2627 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
2628 ctx.expectError (GL_NO_ERROR);
2630 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data.");
2631 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0);
2632 ctx.expectError(GL_INVALID_VALUE);
2634 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 16, 16, GL_COMPRESSED_RGBA8_ETC2_EAC, 4*4*16-1, 0);
2635 ctx.expectError(GL_INVALID_VALUE);
2636 ctx.endSection();
2638 ctx.glDeleteTextures (1, &texture);
2641 void compressedtexsubimage2d_invalid_buffer_target (NegativeTestContext& ctx)
2647 ctx.glGenTextures (1, &texture);
2648 ctx.glBindTexture (GL_TEXTURE_2D, texture);
2649 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0);
2650 ctx.glGenBuffers (1, &buf);
2651 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
2652 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 128, &data[0], GL_DYNAMIC_COPY);
2653 ctx.expectError (GL_NO_ERROR);
2655 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and...");
2656 ctx.beginSection("...the buffer object's data store is currently mapped.");
2657 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 128, GL_MAP_WRITE_BIT);
2658 ctx.glCompressedTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
2659 ctx.expectError (GL_INVALID_OPERATION);
2660 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
2661 ctx.endSection();
2663 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
2664 ctx.glCompressedTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 16, 16, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(16, 16), 0);
2665 ctx.expectError (GL_INVALID_OPERATION);
2666 ctx.endSection();
2667 ctx.endSection();
2669 ctx.glDeleteBuffers (1, &buf);
2670 ctx.glDeleteTextures (1, &texture);
2675 void teximage3d (NegativeTestContext& ctx)
2677 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
2678 ctx.glTexImage3D(0, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2679 ctx.expectError(GL_INVALID_ENUM);
2680 ctx.glTexImage3D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2681 ctx.expectError(GL_INVALID_ENUM);
2682 ctx.endSection();
2684 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant.");
2685 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, 0, 0);
2686 ctx.expectError(GL_INVALID_ENUM);
2687 ctx.endSection();
2689 ctx.beginSection("GL_INVALID_ENUM is generated if format is not an accepted format constant.");
2690 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, 1, 0, 0, GL_UNSIGNED_BYTE, 0);
2691 ctx.expectError(GL_INVALID_ENUM);
2692 ctx.endSection();
2694 ctx.beginSection("GL_INVALID_VALUE is generated if internalFormat is not one of the accepted resolution and format symbolic constants.");
2695 ctx.glTexImage3D(GL_TEXTURE_3D, 0, 0, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2696 ctx.expectError(GL_INVALID_VALUE);
2697 ctx.endSection();
2699 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_3D and format is GL_DEPTH_COMPONENT, or GL_DEPTH_STENCIL.");
2700 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_DEPTH_STENCIL, 1, 1, 1, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0);
2701 ctx.expectError(GL_INVALID_OPERATION);
2702 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_DEPTH_COMPONENT, 1, 1, 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
2703 ctx.expectError(GL_INVALID_OPERATION);
2704 ctx.endSection();
2706 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat, format and type is invalid.");
2707 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
2708 ctx.expectError(GL_INVALID_OPERATION);
2709 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB5_A1, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
2710 ctx.expectError(GL_INVALID_OPERATION);
2711 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB10_A2, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_INT_2_10_10_10_REV, 0);
2712 ctx.expectError(GL_INVALID_OPERATION);
2714 if (glu::isContextTypeES(ctx.getRenderContext().getType()))
2716 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2717 ctx.expectError(GL_INVALID_OPERATION);
2718 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32UI, 1, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0);
2719 ctx.expectError(GL_INVALID_OPERATION);
2721 ctx.endSection();
2723 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
2725 ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and width and height are not equal.");
2726 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 2, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2727 ctx.expectError(GL_INVALID_VALUE);
2728 ctx.endSection();
2730 ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and depth is not a multiple of six.");
2731 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2732 ctx.expectError(GL_INVALID_VALUE);
2733 ctx.endSection();
2737 void teximage3d_neg_level (NegativeTestContext& ctx)
2739 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
2740 ctx.glTexImage3D(GL_TEXTURE_3D, -1, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
2741 ctx.expectError(GL_INVALID_VALUE);
2742 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, -1, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
2743 ctx.expectError(GL_INVALID_VALUE);
2745 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
2747 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, GL_RGBA, 1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2748 ctx.expectError(GL_INVALID_VALUE);
2751 ctx.endSection();
2755 void teximage3d_max_level (NegativeTestContext& ctx)
2757 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_3D_TEXTURE_SIZE).");
2758 deUint32 log2Max3DTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1;
2759 ctx.glTexImage3D(GL_TEXTURE_3D, log2Max3DTextureSize, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
2760 ctx.expectError(GL_INVALID_VALUE);
2761 ctx.endSection();
2763 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
2764 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
2765 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
2766 ctx.expectError(GL_INVALID_VALUE);
2767 ctx.endSection();
2770 void teximage3d_neg_width_height_depth (NegativeTestContext& ctx)
2772 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0.");
2773 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, -1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2774 ctx.expectError(GL_INVALID_VALUE);
2775 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, -1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2776 ctx.expectError(GL_INVALID_VALUE);
2777 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2778 ctx.expectError(GL_INVALID_VALUE);
2779 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, -1, -1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2780 ctx.expectError(GL_INVALID_VALUE);
2782 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, -1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2783 ctx.expectError(GL_INVALID_VALUE);
2784 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, -1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2785 ctx.expectError(GL_INVALID_VALUE);
2786 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, 1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2787 ctx.expectError(GL_INVALID_VALUE);
2788 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, -1, -1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2789 ctx.expectError(GL_INVALID_VALUE);
2791 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
2793 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, -1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2794 ctx.expectError(GL_INVALID_VALUE);
2795 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, -1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2796 ctx.expectError(GL_INVALID_VALUE);
2797 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, 1, -6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2798 ctx.expectError(GL_INVALID_VALUE);
2799 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, -1, -1, -6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2800 ctx.expectError(GL_INVALID_VALUE);
2802 ctx.endSection();
2805 void teximage3d_max_width_height_depth (NegativeTestContext& ctx)
2807 int max3DTextureSize = ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE) + 1;
2808 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1;
2809 int maxTextureLayers = ctx.getInteger(GL_MAX_ARRAY_TEXTURE_LAYERS) + 1;
2811 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is greater than GL_MAX_3D_TEXTURE_SIZE.");
2812 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, max3DTextureSize, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2813 ctx.expectError(GL_INVALID_VALUE);
2814 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, max3DTextureSize, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2815 ctx.expectError(GL_INVALID_VALUE);
2816 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, max3DTextureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2817 ctx.expectError(GL_INVALID_VALUE);
2818 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, max3DTextureSize, max3DTextureSize, max3DTextureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2819 ctx.expectError(GL_INVALID_VALUE);
2820 ctx.endSection();
2822 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is greater than GL_MAX_TEXTURE_SIZE.");
2823 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, maxTextureSize, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2824 ctx.expectError(GL_INVALID_VALUE);
2825 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, maxTextureSize, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2826 ctx.expectError(GL_INVALID_VALUE);
2827 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, 1, maxTextureLayers, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2828 ctx.expectError(GL_INVALID_VALUE);
2829 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, maxTextureSize, maxTextureSize, maxTextureLayers, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2830 ctx.expectError(GL_INVALID_VALUE);
2831 ctx.endSection();
2834 void teximage3d_invalid_border (NegativeTestContext& ctx)
2836 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0 or 1.");
2837 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 0);
2838 ctx.expectError(GL_INVALID_VALUE);
2839 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, 2, GL_RGB, GL_UNSIGNED_BYTE, 0);
2840 ctx.expectError(GL_INVALID_VALUE);
2841 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, 1, 1, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 0);
2842 ctx.expectError(GL_INVALID_VALUE);
2843 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, 1, 1, 1, 2, GL_RGB, GL_UNSIGNED_BYTE, 0);
2844 ctx.expectError(GL_INVALID_VALUE);
2846 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
2848 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA, 1, 1, 6, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2849 ctx.expectError(GL_INVALID_VALUE);
2850 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA, 1, 1, 6, 1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2851 ctx.expectError(GL_INVALID_VALUE);
2854 ctx.endSection();
2857 void teximage3d_invalid_buffer_target (NegativeTestContext& ctx)
2863 ctx.glGenBuffers (1, &buf);
2864 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
2865 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 512, &data[0], GL_DYNAMIC_COPY);
2866 ctx.glGenTextures (1, &texture);
2867 ctx.glBindTexture (GL_TEXTURE_3D, texture);
2868 ctx.expectError (GL_NO_ERROR);
2870 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and...");
2872 ctx.beginSection("...the buffer object's data store is currently mapped.");
2873 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 128, GL_MAP_WRITE_BIT);
2874 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2875 ctx.expectError (GL_INVALID_OPERATION);
2876 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
2877 ctx.endSection();
2879 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
2880 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 64, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2881 ctx.expectError (GL_INVALID_OPERATION);
2882 ctx.endSection();
2884 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type.");
2885 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage;
2886 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGB5_A1, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, (const GLvoid*)3);
2887 ctx.expectError (GL_INVALID_OPERATION);
2888 ctx.endSection();
2890 ctx.endSection();
2892 ctx.glDeleteBuffers (1, &buf);
2893 ctx.glDeleteTextures (1, &texture);
2898 void texsubimage3d (NegativeTestContext& ctx)
2901 ctx.glGenTextures (1, &texture);
2902 ctx.glBindTexture (GL_TEXTURE_3D, texture);
2903 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2904 ctx.expectError (GL_NO_ERROR);
2906 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
2907 ctx.glTexSubImage3D(0, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2908 ctx.expectError(GL_INVALID_ENUM);
2909 ctx.glTexSubImage3D(GL_TEXTURE_2D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2910 ctx.expectError(GL_INVALID_ENUM);
2911 ctx.endSection();
2913 ctx.beginSection("GL_INVALID_ENUM is generated if format is not an accepted format constant.");
2914 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 4, 4, 4, GL_UNSIGNED_BYTE, 0);
2915 ctx.expectError(GL_INVALID_ENUM);
2916 ctx.endSection();
2918 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant.");
2919 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, 0, 0);
2920 ctx.expectError(GL_INVALID_ENUM);
2921 ctx.endSection();
2923 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat of the previously specified texture array, format and type is not valid.");
2924 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
2925 ctx.expectError(GL_INVALID_OPERATION);
2926 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
2927 ctx.expectError(GL_INVALID_OPERATION);
2928 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
2929 ctx.expectError(GL_INVALID_OPERATION);
2930 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA_INTEGER, GL_UNSIGNED_INT, 0);
2931 ctx.expectError(GL_INVALID_OPERATION);
2932 if (glu::isContextTypeES(ctx.getRenderContext().getType()))
2934 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_FLOAT, 0);
2935 ctx.expectError(GL_INVALID_OPERATION);
2937 ctx.endSection();
2939 ctx.glDeleteTextures (1, &texture);
2942 void texsubimage3d_neg_level (NegativeTestContext& ctx)
2945 ctx.glGenTextures (3, &textures[0]);
2946 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]);
2947 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2948 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, textures[1]);
2949 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2950 ctx.expectError (GL_NO_ERROR);
2952 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
2953 ctx.glTexSubImage3D(GL_TEXTURE_3D, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2954 ctx.expectError(GL_INVALID_VALUE);
2955 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2956 ctx.expectError(GL_INVALID_VALUE);
2958 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
2960 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
2961 ctx.glTexImage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2962 ctx.expectError (GL_NO_ERROR);
2964 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2965 ctx.expectError(GL_INVALID_VALUE);
2968 ctx.endSection();
2970 ctx.glDeleteTextures (3, &textures[0]);
2973 void texsubimage3d_max_level (NegativeTestContext& ctx)
2976 ctx.glGenTextures (2, &textures[0]);
2977 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]);
2978 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2979 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, textures[1]);
2980 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2981 ctx.expectError (GL_NO_ERROR);
2983 deUint32 log2Max3DTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1;
2984 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
2986 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_3D_TEXTURE_SIZE).");
2987 ctx.glTexSubImage3D(GL_TEXTURE_3D, log2Max3DTextureSize, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2988 ctx.expectError(GL_INVALID_VALUE);
2989 ctx.endSection();
2991 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
2992 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
2993 ctx.expectError(GL_INVALID_VALUE);
2994 ctx.endSection();
2996 ctx.glDeleteTextures (2, &textures[0]);
2999 void texsubimage3d_neg_offset (NegativeTestContext& ctx)
3002 ctx.glGenTextures (3, &textures[0]);
3003 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]);
3004 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3005 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, textures[1]);
3006 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3007 ctx.expectError (GL_NO_ERROR);
3009 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset, yoffset or zoffset are negative.");
3010 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, -1, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3011 ctx.expectError(GL_INVALID_VALUE);
3012 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3013 ctx.expectError(GL_INVALID_VALUE);
3014 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3015 ctx.expectError(GL_INVALID_VALUE);
3016 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3017 ctx.expectError(GL_INVALID_VALUE);
3018 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -1, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3019 ctx.expectError(GL_INVALID_VALUE);
3020 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3021 ctx.expectError(GL_INVALID_VALUE);
3022 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3023 ctx.expectError(GL_INVALID_VALUE);
3024 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3025 ctx.expectError(GL_INVALID_VALUE);
3027 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3029 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
3030 ctx.glTexImage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3031 ctx.expectError (GL_NO_ERROR);
3033 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, -1, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3034 ctx.expectError(GL_INVALID_VALUE);
3035 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3036 ctx.expectError(GL_INVALID_VALUE);
3037 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3038 ctx.expectError(GL_INVALID_VALUE);
3039 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3040 ctx.expectError(GL_INVALID_VALUE);
3043 ctx.endSection();
3045 ctx.glDeleteTextures (3, &textures[0]);
3048 void texsubimage3d_invalid_offset (NegativeTestContext& ctx)
3051 ctx.glGenTextures (1, &texture);
3052 ctx.glBindTexture (GL_TEXTURE_3D, texture);
3053 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3054 ctx.expectError (GL_NO_ERROR);
3056 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width.");
3057 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 2, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3058 ctx.expectError(GL_INVALID_VALUE);
3059 ctx.endSection();
3061 ctx.beginSection("GL_INVALID_VALUE is generated if yoffset + height > texture_height.");
3062 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 2, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3063 ctx.expectError(GL_INVALID_VALUE);
3064 ctx.endSection();
3066 ctx.beginSection("GL_INVALID_VALUE is generated if zoffset + depth > texture_depth.");
3067 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 2, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3068 ctx.expectError(GL_INVALID_VALUE);
3069 ctx.endSection();
3071 ctx.glDeleteTextures (1, &texture);
3074 void texsubimage3d_neg_width_height (NegativeTestContext& ctx)
3076 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is less than 0.");
3077 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3078 ctx.expectError(GL_INVALID_VALUE);
3079 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3080 ctx.expectError(GL_INVALID_VALUE);
3081 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3082 ctx.expectError(GL_INVALID_VALUE);
3083 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, -1, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3084 ctx.expectError(GL_INVALID_VALUE);
3086 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3088 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3089 ctx.expectError(GL_INVALID_VALUE);
3090 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3091 ctx.expectError(GL_INVALID_VALUE);
3092 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3093 ctx.expectError(GL_INVALID_VALUE);
3094 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, -1, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3095 ctx.expectError(GL_INVALID_VALUE);
3098 ctx.endSection();
3101 void texsubimage3d_invalid_buffer_target (NegativeTestContext& ctx)
3107 ctx.glGenTextures (1, &texture);
3108 ctx.glBindTexture (GL_TEXTURE_3D, texture);
3109 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 16, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3110 ctx.glGenBuffers (1, &buf);
3111 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
3112 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 512, &data[0], GL_DYNAMIC_COPY);
3113 ctx.expectError (GL_NO_ERROR);
3115 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and...");
3117 ctx.beginSection("...the buffer object's data store is currently mapped.");
3118 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 512, GL_MAP_WRITE_BIT);
3119 ctx.glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3120 ctx.expectError (GL_INVALID_OPERATION);
3121 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
3122 ctx.endSection();
3124 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
3125 ctx.glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, 16, 16, 16, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3126 ctx.expectError (GL_INVALID_OPERATION);
3127 ctx.endSection();
3129 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type.");
3130 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage;
3131 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
3132 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA4, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 0);
3133 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
3134 ctx.expectError (GL_NO_ERROR);
3135 ctx.glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, (const GLvoid*)3);
3136 ctx.expectError (GL_INVALID_OPERATION);
3137 ctx.endSection();
3139 ctx.endSection();
3141 ctx.glDeleteBuffers (1, &buf);
3142 ctx.glDeleteTextures (1, &texture);
3147 void copytexsubimage3d (NegativeTestContext& ctx)
3150 ctx.glGenTextures (1, &texture);
3151 ctx.glBindTexture (GL_TEXTURE_3D, texture);
3152 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3154 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
3155 ctx.glCopyTexSubImage3D(0, 0, 0, 0, 0, 0, 0, 4, 4);
3156 ctx.expectError(GL_INVALID_ENUM);
3157 ctx.endSection();
3159 ctx.glDeleteTextures(1, &texture);
3162 void copytexsubimage3d_neg_level (NegativeTestContext& ctx)
3165 ctx.glGenTextures(3, &textures[0]);
3166 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
3167 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3168 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, textures[1]);
3169 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3170 ctx.expectError(GL_NO_ERROR);
3172 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
3173 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, -1, 0, 0, 0, 0, 0, 4, 4);
3174 ctx.expectError(GL_INVALID_VALUE);
3175 ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 4, 4);
3176 ctx.expectError(GL_INVALID_VALUE);
3178 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3180 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
3181 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3182 ctx.expectError(GL_NO_ERROR);
3183 ctx.glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, 0, 0, 0, 0, 0, 4, 4);
3184 ctx.expectError(GL_INVALID_VALUE);
3187 ctx.endSection();
3189 ctx.glDeleteTextures(3, &textures[0]);
3192 void copytexsubimage3d_max_level (NegativeTestContext& ctx)
3194 deUint32 log2Max3DTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1;
3195 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
3196 deUint32 log2MaxCubeMapTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
3199 ctx.glGenTextures(3, &textures[0]);
3200 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
3201 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3202 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, textures[1]);
3203 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3204 ctx.expectError(GL_NO_ERROR);
3206 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_3D_TEXTURE_SIZE).");
3207 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, log2Max3DTextureSize, 0, 0, 0, 0, 0, 4, 4);
3208 ctx.expectError(GL_INVALID_VALUE);
3209 ctx.endSection();
3211 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
3212 ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 4, 4);
3213 ctx.expectError(GL_INVALID_VALUE);
3214 ctx.endSection();
3216 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3218 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
3219 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3220 ctx.expectError(GL_NO_ERROR);
3221 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
3222 ctx.glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxCubeMapTextureSize, 0, 0, 0, 0, 0, 4, 4);
3223 ctx.expectError(GL_INVALID_VALUE);
3224 ctx.endSection();
3227 ctx.glDeleteTextures(3, &textures[0]);
3230 void copytexsubimage3d_neg_offset (NegativeTestContext& ctx)
3233 ctx.glGenTextures (1, &texture);
3234 ctx.glBindTexture (GL_TEXTURE_3D, texture);
3235 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3237 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset, yoffset or zoffset is negative.");
3238 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, -1, 0, 0, 0, 0, 4, 4);
3239 ctx.expectError(GL_INVALID_VALUE);
3240 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, -1, 0, 0, 0, 4, 4);
3241 ctx.expectError(GL_INVALID_VALUE);
3242 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, -1, 0, 0, 4, 4);
3243 ctx.expectError(GL_INVALID_VALUE);
3244 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, -1, -1, -1, 0, 0, 4, 4);
3245 ctx.expectError(GL_INVALID_VALUE);
3246 ctx.endSection();
3248 ctx.glDeleteTextures(1, &texture);
3251 void copytexsubimage3d_invalid_offset (NegativeTestContext& ctx)
3254 ctx.glGenTextures (1, &texture);
3255 ctx.glBindTexture (GL_TEXTURE_3D, texture);
3256 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3258 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width.");
3259 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 1, 0, 0, 0, 0, 4, 4);
3260 ctx.expectError(GL_INVALID_VALUE);
3261 ctx.endSection();
3263 ctx.beginSection("GL_INVALID_VALUE is generated if yoffset + height > texture_height.");
3264 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 1, 0, 0, 0, 4, 4);
3265 ctx.expectError(GL_INVALID_VALUE);
3266 ctx.endSection();
3268 ctx.beginSection("GL_INVALID_VALUE is generated if zoffset + 1 > texture_depth.");
3269 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 4, 0, 0, 4, 4);
3270 ctx.expectError(GL_INVALID_VALUE);
3271 ctx.endSection();
3273 ctx.glDeleteTextures(1, &texture);
3276 void copytexsubimage3d_neg_width_height (NegativeTestContext& ctx)
3279 ctx.glGenTextures (1, &texture);
3280 ctx.glBindTexture (GL_TEXTURE_3D, texture);
3281 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3283 ctx.beginSection("GL_INVALID_VALUE is generated if width < 0.");
3284 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, -4, 4);
3285 ctx.expectError(GL_INVALID_VALUE);
3286 ctx.endSection();
3288 ctx.beginSection("GL_INVALID_VALUE is generated if height < 0.");
3289 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, 4, -4);
3290 ctx.expectError(GL_INVALID_VALUE);
3291 ctx.endSection();
3293 ctx.glDeleteTextures(1, &texture);
3296 void copytexsubimage3d_incomplete_framebuffer (NegativeTestContext& ctx)
3301 ctx.glGenTextures (2, texture);
3302 ctx.glBindTexture (GL_TEXTURE_3D, texture[0]);
3303 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3304 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture[1]);
3305 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
3306 ctx.glGenFramebuffers (1, &fbo);
3307 ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo);
3308 ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER);
3310 ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
3311 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, 4, 4);
3312 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
3313 ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, 4, 4);
3314 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
3315 ctx.endSection();
3317 ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0);
3318 ctx.glDeleteFramebuffers(1, &fbo);
3319 ctx.glDeleteTextures(2, texture);
3324 void compressedteximage3d (NegativeTestContext& ctx)
3326 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
3327 ctx.glCompressedTexImage3D(0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0);
3328 ctx.expectError(GL_INVALID_ENUM);
3329 ctx.glCompressedTexImage3D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0);
3330 ctx.expectError(GL_INVALID_ENUM);
3331 ctx.endSection();
3333 ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not one of the specific compressed internal formats.");
3334 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, 0, 0);
3335 ctx.expectError(GL_INVALID_ENUM);
3336 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA8, 0, 0, 0, 0, 0, 0);
3337 ctx.expectError(GL_INVALID_ENUM);
3338 ctx.endSection();
3341 void compressedteximage3d_neg_level (NegativeTestContext& ctx)
3343 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
3344 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0);
3345 ctx.expectError(GL_INVALID_VALUE);
3346 ctx.endSection();
3349 void compressedteximage3d_max_level (NegativeTestContext& ctx)
3351 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
3352 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
3353 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0);
3354 ctx.expectError(GL_INVALID_VALUE);
3355 ctx.endSection();
3358 void compressedteximage3d_neg_width_height_depth (NegativeTestContext& ctx)
3360 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is less than 0.");
3361 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0, 0);
3362 ctx.expectError(GL_INVALID_VALUE);
3363 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0, 0);
3364 ctx.expectError(GL_INVALID_VALUE);
3365 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0, 0);
3366 ctx.expectError(GL_INVALID_VALUE);
3367 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, -1, 0, 0, 0);
3368 ctx.expectError(GL_INVALID_VALUE);
3369 ctx.endSection();
3372 void compressedteximage3d_max_width_height_depth (NegativeTestContext& ctx)
3374 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1;
3375 int maxTextureLayers = ctx.getInteger(GL_MAX_ARRAY_TEXTURE_LAYERS) + 1;
3377 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is greater than GL_MAX_TEXTURE_SIZE.");
3378 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, 0, 0, 0, 0, 0);
3379 ctx.expectError(GL_INVALID_VALUE);
3380 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, maxTextureSize, 0, 0, 0, 0);
3381 ctx.expectError(GL_INVALID_VALUE);
3382 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, maxTextureSize, maxTextureLayers, 0, 0, 0);
3383 ctx.expectError(GL_INVALID_VALUE);
3384 if (glu::isContextTypeES(ctx.getRenderContext().getType()))
3386 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, maxTextureLayers, 0, 0, 0);
3387 ctx.expectError(GL_INVALID_VALUE);
3389 ctx.endSection();
3392 void compressedteximage3d_invalid_border (NegativeTestContext& ctx)
3394 bool isES = glu::isContextTypeES(ctx.getRenderContext().getType());
3396 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0.");
3397 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, -1, 0, 0);
3398 ctx.expectError(error);
3399 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 1, 0, 0);
3400 ctx.expectError(error);
3401 ctx.endSection();
3404 void compressedteximage3d_invalid_size (NegativeTestContext& ctx)
3406 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data.");
3407 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, -1, 0);
3408 ctx.expectError(GL_INVALID_VALUE);
3409 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, 4*4*8, 0);
3410 ctx.expectError(GL_INVALID_VALUE);
3411 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, 16, 16, 1, 0, 4*4*16, 0);
3412 ctx.expectError(GL_INVALID_VALUE);
3413 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_SIGNED_R11_EAC, 16, 16, 1, 0, 4*4*16, 0);
3414 ctx.expectError(GL_INVALID_VALUE);
3415 ctx.endSection();
3418 void compressedteximage3d_invalid_width_height (NegativeTestContext& ctx)
3420 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3428 ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and width and height are not equal.");
3429 ctx.glCompressedTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, width, height, depth, 0, imageSize, &data[0]);
3430 ctx.expectError(GL_INVALID_VALUE);
3431 ctx.endSection();
3435 void compressedteximage3d_invalid_buffer_target (NegativeTestContext& ctx)
3440 ctx.glGenBuffers (1, &buf);
3441 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
3442 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY);
3443 ctx.expectError (GL_NO_ERROR);
3445 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and the buffer object's data store is currently mapped.");
3446 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 64, GL_MAP_WRITE_BIT);
3447 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, 4, 4, 1, 0, etc2DataSize(4, 4), 0);
3448 ctx.expectError (GL_INVALID_OPERATION);
3449 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
3450 ctx.endSection();
3452 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
3453 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, 16, 16, 1, 0, etc2DataSize(16, 16), 0);
3454 ctx.expectError (GL_INVALID_OPERATION);
3455 ctx.endSection();
3457 ctx.glDeleteBuffers (1, &buf);
3462 void compressedtexsubimage3d (NegativeTestContext& ctx)
3464 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid.");
3465 ctx.glCompressedTexSubImage3D(0, 0, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3466 ctx.expectError(GL_INVALID_ENUM);
3467 ctx.endSection();
3470 ctx.glGenTextures (1, &texture);
3471 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3472 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 1, 0, etc2EacDataSize(18, 18), 0);
3473 ctx.expectError (GL_NO_ERROR);
3475 ctx.beginSection("GL_INVALID_OPERATION is generated if format does not match the internal format of the texture image being modified.");
3476 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGB8_ETC2, 0, 0);
3477 ctx.expectError(GL_INVALID_OPERATION);
3478 ctx.endSection();
3480 ctx.beginSection("GL_INVALID_OPERATION is generated if internalformat is an ETC2/EAC format and target is not GL_TEXTURE_2D_ARRAY.");
3481 ctx.glCompressedTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 18, 18, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(18, 18), 0);
3482 ctx.expectError(GL_INVALID_OPERATION);
3483 ctx.endSection();
3485 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if width is not a multiple of four, and width + xoffset is not equal to the width of the texture level.");
3486 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 4, 0, 0, 10, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(10, 4), 0);
3487 ctx.expectError(GL_INVALID_OPERATION);
3488 ctx.endSection();
3490 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if height is not a multiple of four, and height + yoffset is not equal to the height of the texture level.");
3491 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 4, 0, 4, 10, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 10), 0);
3492 ctx.expectError(GL_INVALID_OPERATION);
3493 ctx.endSection();
3495 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if xoffset or yoffset is not a multiple of four.");
3496 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 1, 0, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
3497 ctx.expectError(GL_INVALID_OPERATION);
3498 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 1, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
3499 ctx.expectError(GL_INVALID_OPERATION);
3500 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 1, 1, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
3501 ctx.expectError(GL_INVALID_OPERATION);
3502 ctx.endSection();
3504 ctx.glDeleteTextures (1, &texture);
3507 void compressedtexsubimage3d_neg_level (NegativeTestContext& ctx)
3510 ctx.glGenTextures (1, &texture);
3511 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3512 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0);
3513 ctx.expectError (GL_NO_ERROR);
3515 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
3516 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3517 ctx.expectError(GL_INVALID_VALUE);
3518 ctx.endSection();
3520 ctx.glDeleteTextures (1, &texture);
3523 void compressedtexsubimage3d_max_level (NegativeTestContext& ctx)
3526 ctx.glGenTextures (1, &texture);
3527 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3528 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0);
3529 ctx.expectError (GL_NO_ERROR);
3531 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE).");
3532 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
3533 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3534 ctx.expectError(GL_INVALID_VALUE);
3535 ctx.endSection();
3537 ctx.glDeleteTextures (1, &texture);
3540 void compressedtexsubimage3d_neg_offset (NegativeTestContext& ctx)
3543 ctx.glGenTextures (1, &texture);
3544 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3545 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0);
3546 ctx.expectError (GL_NO_ERROR);
3548 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset, yoffset or zoffset are negative.");
3549 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -4, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3550 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3551 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, -4, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3552 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3553 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, -4, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3554 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3555 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -4, -4, -4, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3556 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3557 ctx.endSection();
3559 ctx.glDeleteTextures (1, &texture);
3562 void compressedtexsubimage3d_invalid_offset (NegativeTestContext& ctx)
3565 ctx.glGenTextures (1, &texture);
3566 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3567 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 4, 4, 1, 0, etc2EacDataSize(4, 4), 0);
3568 ctx.expectError (GL_NO_ERROR);
3570 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset + width > texture_width or yoffset + height > texture_height.");
3572 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 12, 0, 0, 8, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 4), 0);
3573 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3574 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 12, 0, 4, 8, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 8), 0);
3575 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3576 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 12, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
3577 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3578 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 12, 12, 12, 8, 8, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 8), 0);
3579 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3580 ctx.endSection();
3582 ctx.glDeleteTextures (1, &texture);
3585 void compressedtexsubimage3d_neg_width_height_depth (NegativeTestContext& ctx)
3588 ctx.glGenTextures (1, &texture);
3589 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3590 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0);
3591 ctx.expectError (GL_NO_ERROR);
3593 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if width, height or depth are negative.");
3594 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, -4, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3595 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3596 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, -4, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3597 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3598 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3599 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3600 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, -4, -4, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0);
3601 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION);
3602 ctx.endSection();
3604 ctx.glDeleteTextures (1, &texture);
3607 void compressedtexsubimage3d_invalid_size (NegativeTestContext& ctx)
3610 ctx.glGenTextures (1, &texture);
3611 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3612 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, 4*4*16, 0);
3613 ctx.expectError (GL_NO_ERROR);
3615 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data.");
3616 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 16, 16, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0);
3617 ctx.expectError(GL_INVALID_VALUE);
3619 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 16, 16, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, 4*4*16-1, 0);
3620 ctx.expectError(GL_INVALID_VALUE);
3621 ctx.endSection();
3623 ctx.glDeleteTextures (1, &texture);
3626 void compressedtexsubimage3d_invalid_buffer_target (NegativeTestContext& ctx)
3633 ctx.glGenTextures (1, &texture);
3634 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture);
3635 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0);
3636 ctx.glGenBuffers (1, &buf);
3637 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf);
3638 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, bufferSize, &data[0], GL_DYNAMIC_COPY);
3639 ctx.expectError (GL_NO_ERROR);
3641 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and...");
3642 ctx.beginSection("...the buffer object's data store is currently mapped.");
3643 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, bufferSize, GL_MAP_WRITE_BIT);
3644 ctx.glCompressedTexSubImage3D (GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0);
3645 ctx.expectError (GL_INVALID_OPERATION);
3646 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
3647 ctx.endSection();
3649 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size.");
3650 ctx.glCompressedTexSubImage3D (GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 16, 16, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(16, 16), 0);
3651 ctx.expectError (GL_INVALID_OPERATION);
3652 ctx.endSection();
3653 ctx.endSection();
3655 ctx.glDeleteBuffers (1, &buf);
3656 ctx.glDeleteTextures (1, &texture);
3661 void texstorage2d (NegativeTestContext& ctx)
3665 ctx.glGenTextures(2, textures);
3666 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]);
3667 ctx.expectError(GL_NO_ERROR);
3669 ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not a valid sized internal format.");
3670 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, 0, 16, 16);
3671 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
3672 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA_INTEGER, 16, 16);
3673 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
3674 ctx.endSection();
3676 ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted target enumerants.");
3677 ctx.glTexStorage2D(0, 1, GL_RGBA8, 16, 16);
3678 ctx.expectError(GL_INVALID_ENUM);
3679 ctx.glTexStorage2D(GL_TEXTURE_3D, 1, GL_RGBA8, 16, 16);
3680 ctx.expectError(GL_INVALID_ENUM);
3681 ctx.glTexStorage2D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 16, 16);
3682 ctx.expectError(GL_INVALID_ENUM);
3683 ctx.endSection();
3685 ctx.beginSection("GL_INVALID_VALUE is generated if width or height are less than 1.");
3686 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 16);
3687 ctx.expectError(GL_INVALID_VALUE);
3688 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 0);
3689 ctx.expectError(GL_INVALID_VALUE);
3690 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 0);
3691 ctx.expectError(GL_INVALID_VALUE);
3693 if (supportsES32orGL45(ctx))
3695 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
3696 ctx.expectError(GL_NO_ERROR);
3697 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 0, 16);
3698 ctx.expectError(GL_INVALID_VALUE);
3699 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 0);
3700 ctx.expectError(GL_INVALID_VALUE);
3701 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 0, 0);
3702 ctx.expectError(GL_INVALID_VALUE);
3704 ctx.endSection();
3706 ctx.glDeleteTextures(2, textures);
3709 void texstorage2d_invalid_binding (NegativeTestContext& ctx)
3713 const bool isES32orGL45 = supportsES32orGL45(ctx);
3715 ctx.beginSection("GL_INVALID_OPERATION is generated if the default texture object is curently bound to target.");
3716 ctx.glBindTexture(GL_TEXTURE_2D, 0);
3717 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
3718 ctx.expectError(GL_INVALID_OPERATION);
3722 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
3723 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16);
3724 ctx.expectError(GL_INVALID_OPERATION);
3726 ctx.endSection();
3728 ctx.glGenTextures(2, textures);
3730 ctx.beginSection("GL_INVALID_OPERATION is generated if the texture object currently bound to target already has GL_TEXTURE_IMMUTABLE_FORMAT set to GL_TRUE.");
3731 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]);
3732 ctx.glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3733 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3734 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
3735 ctx.expectError(GL_NO_ERROR);
3736 ctx.glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3737 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3738 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
3739 ctx.expectError(GL_INVALID_OPERATION);
3743 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
3744 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3745 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3746 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16);
3747 ctx.expectError(GL_NO_ERROR);
3748 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3749 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3750 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16);
3751 ctx.expectError(GL_INVALID_OPERATION);
3753 ctx.endSection();
3755 ctx.glDeleteTextures(2, textures);
3758 void texstorage2d_invalid_levels (NegativeTestContext& ctx)
3762 const bool isES32orGL45 = supportsES32orGL45(ctx);
3764 ctx.glGenTextures(2, textures);
3765 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]);
3768 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
3770 ctx.expectError(GL_NO_ERROR);
3772 ctx.beginSection("GL_INVALID_VALUE is generated if levels is less than 1.");
3773 ctx.glTexStorage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16);
3774 ctx.expectError(GL_INVALID_VALUE);
3775 ctx.glTexStorage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0);
3776 ctx.expectError(GL_INVALID_VALUE);
3780 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 0, GL_RGBA8, 16, 16);
3781 ctx.expectError(GL_INVALID_VALUE);
3782 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 0, GL_RGBA8, 0, 0);
3783 ctx.expectError(GL_INVALID_VALUE);
3785 ctx.endSection();
3787 ctx.beginSection("GL_INVALID_OPERATION is generated if levels is greater than floor(log_2(max(width, height))) + 1");
3788 ctx.glTexStorage2D(GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 16, 16);
3789 ctx.expectError(GL_INVALID_OPERATION);
3793 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, log2MaxSize, GL_RGBA8, 16, 16);
3794 ctx.expectError(GL_INVALID_OPERATION);
3796 ctx.endSection();
3798 ctx.glDeleteTextures(2, textures);
3803 void texstorage3d (NegativeTestContext& ctx)
3807 ctx.glGenTextures(2, textures);
3808 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
3809 ctx.expectError(GL_NO_ERROR);
3811 ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not a valid sized internal format.");
3812 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, 0, 4, 4, 4);
3813 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
3814 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA_INTEGER, 4, 4, 4);
3815 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
3816 ctx.endSection();
3818 ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted target enumerants.");
3819 ctx.glTexStorage3D(0, 1, GL_RGBA8, 4, 4, 4);
3820 ctx.expectError(GL_INVALID_ENUM);
3821 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 4, 4, 4);
3822 ctx.expectError(GL_INVALID_ENUM);
3823 ctx.glTexStorage3D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 4, 4);
3824 ctx.expectError(GL_INVALID_ENUM);
3825 ctx.endSection();
3827 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth are less than 1.");
3828 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 0, 4, 4);
3829 ctx.expectError(GL_INVALID_VALUE);
3830 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 0, 4);
3831 ctx.expectError(GL_INVALID_VALUE);
3832 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 0);
3833 ctx.expectError(GL_INVALID_VALUE);
3834 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 0, 0, 0);
3835 ctx.expectError(GL_INVALID_VALUE);
3837 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3839 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
3840 ctx.expectError(GL_NO_ERROR);
3841 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 0, 4, 4);
3842 ctx.expectError(GL_INVALID_VALUE);
3843 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 0, 4);
3844 ctx.expectError(GL_INVALID_VALUE);
3845 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 0);
3846 ctx.expectError(GL_INVALID_VALUE);
3847 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 0, 0, 0);
3848 ctx.expectError(GL_INVALID_VALUE);
3850 ctx.endSection();
3852 ctx.glDeleteTextures(2, textures);
3855 void texstorage3d_invalid_binding (NegativeTestContext& ctx)
3860 ctx.beginSection("GL_INVALID_OPERATION is generated if the default texture object is curently bound to target.");
3861 ctx.glBindTexture (GL_TEXTURE_3D, 0);
3862 ctx.glTexStorage3D (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
3863 ctx.expectError (GL_INVALID_OPERATION);
3865 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3867 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, 0);
3868 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6);
3869 ctx.expectError (GL_INVALID_OPERATION);
3871 ctx.endSection();
3873 ctx.glGenTextures (2, textures);
3875 ctx.beginSection("GL_INVALID_OPERATION is generated if the texture object currently bound to target already has GL_TEXTURE_IMMUTABLE_FORMAT set to GL_TRUE.");
3876 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]);
3877 ctx.glGetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3878 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3879 ctx.glTexStorage3D (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
3880 ctx.expectError (GL_NO_ERROR);
3881 ctx.glGetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3882 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3883 ctx.glTexStorage3D (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
3884 ctx.expectError (GL_INVALID_OPERATION);
3886 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3888 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
3889 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3890 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3891 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6);
3892 ctx.expectError (GL_NO_ERROR);
3893 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
3894 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
3895 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6);
3896 ctx.expectError (GL_INVALID_OPERATION);
3898 ctx.endSection();
3900 ctx.glDeleteTextures(2, textures);
3903 void texstorage3d_invalid_levels (NegativeTestContext& ctx)
3907 const bool isES32orGL45 = supportsES32orGL45(ctx);
3908 ctx.glGenTextures(2, textures);
3909 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
3911 ctx.beginSection("GL_INVALID_VALUE is generated if levels is less than 1.");
3912 ctx.glTexStorage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 4, 4, 4);
3913 ctx.expectError(GL_INVALID_VALUE);
3914 ctx.glTexStorage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 0, 0, 0);
3915 ctx.expectError(GL_INVALID_VALUE);
3917 if (isES32orGL45 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3919 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
3920 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA8, 4, 4, 6);
3921 ctx.expectError(GL_INVALID_VALUE);
3922 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA8, 0, 0, 6);
3923 ctx.expectError(GL_INVALID_VALUE);
3925 ctx.endSection();
3927 ctx.beginSection("GL_INVALID_OPERATION is generated if levels is greater than floor(log_2(max(width, height, depth))) + 1");
3928 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 8, 2, 2);
3929 ctx.expectError (GL_INVALID_OPERATION);
3930 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 2, 8, 2);
3931 ctx.expectError (GL_INVALID_OPERATION);
3932 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 2, 2, 8);
3933 ctx.expectError (GL_INVALID_OPERATION);
3934 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 8, 8, 8);
3935 ctx.expectError (GL_INVALID_OPERATION);
3937 if (isES32orGL45 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
3939 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 2, 2, 6);
3940 ctx.expectError (GL_INVALID_OPERATION);
3941 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 8, 8, 6);
3942 ctx.expectError (GL_INVALID_OPERATION);
3944 ctx.endSection();
3946 ctx.glDeleteTextures(2, textures);
3949 void srgb_decode_texparameteri (NegativeTestContext& ctx)
3951 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
3957 ctx.glGenTextures(1, &texture);
3958 ctx.glBindTexture(GL_TEXTURE_2D, texture);
3960 ctx.beginSection("GL_INVALID_ENUM is generated if pname is GL_TEXTURE_SRGB_DECODE_EXT and the value of param(s) is not a valid value (one of DECODE_EXT, or SKIP_DECODE_EXT).");
3961 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode);
3962 ctx.expectError(GL_INVALID_ENUM);
3963 ctx.endSection();
3965 ctx.glDeleteTextures(1, &texture);
3968 void srgb_decode_texparameterf (NegativeTestContext& ctx)
3970 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
3976 ctx.glGenTextures(1, &texture);
3977 ctx.glBindTexture(GL_TEXTURE_2D, texture);
3979 ctx.beginSection("GL_INVALID_ENUM is generated if pname is GL_TEXTURE_SRGB_DECODE_EXT and the value of param(s) is not a valid value (one of DECODE_EXT, or SKIP_DECODE_EXT).");
3980 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode);
3981 ctx.expectError(GL_INVALID_ENUM);
3982 ctx.endSection();
3984 ctx.glDeleteTextures(1, &texture);
3987 void srgb_decode_texparameteriv (NegativeTestContext& ctx)
3989 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
3995 ctx.glGenTextures(1, &texture);
3996 ctx.glBindTexture(GL_TEXTURE_2D, texture);
3999 ctx.beginSection("GL_INVALID_ENUM is generated if pname is GL_TEXTURE_SRGB_DECODE_EXT and the value of param(s) is not a valid value (one of DECODE_EXT, or SKIP_DECODE_EXT).");
4000 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, &params[0]);
4001 ctx.expectError(GL_INVALID_ENUM);
4002 ctx.endSection();
4004 ctx.glDeleteTextures(1, &texture);
4007 void srgb_decode_texparameterfv (NegativeTestContext& ctx)
4009 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
4015 ctx.glGenTextures(1, &texture);
4016 ctx.glBindTexture(GL_TEXTURE_2D, texture);
4019 ctx.beginSection("GL_INVALID_ENUM is generated if pname is GL_TEXTURE_SRGB_DECODE_EXT and the value of param(s) is not a valid value (one of DECODE_EXT, or SKIP_DECODE_EXT).");
4020 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, &params[0]);
4021 ctx.expectError(GL_INVALID_ENUM);
4022 ctx.endSection();
4024 ctx.glDeleteTextures(1, &texture);
4027 void srgb_decode_texparameterIiv (NegativeTestContext& ctx)
4029 if (!supportsES32orGL45(ctx))
4032 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
4038 ctx.glGenTextures(1, &texture);
4039 ctx.glBindTexture(GL_TEXTURE_2D, texture);
4043 ctx.beginSection("GL_INVALID_ENUM is generated if pname is GL_TEXTURE_SRGB_DECODE_EXT and the value of param(s) is not a valid value (one of DECODE_EXT, or SKIP_DECODE_EXT).");
4044 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode);
4045 ctx.expectError(GL_INVALID_ENUM);
4046 ctx.endSection();
4048 ctx.glDeleteTextures(1, &texture);
4051 void srgb_decode_texparameterIuiv (NegativeTestContext& ctx)
4053 if (!supportsES32orGL45(ctx))
4056 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
4062 ctx.glGenTextures(1, &texture);
4063 ctx.glBindTexture(GL_TEXTURE_2D, texture);
4067 ctx.beginSection("GL_INVALID_ENUM is generated if pname is GL_TEXTURE_SRGB_DECODE_EXT and the value of param(s) is not a valid value (one of DECODE_EXT, or SKIP_DECODE_EXT).");
4068 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode);
4069 ctx.expectError(GL_INVALID_ENUM);
4070 ctx.endSection();
4072 ctx.glDeleteTextures(1, &texture);