1/*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES 3.1 Module 3 * ------------------------------------------------- 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief Negative Texture API tests. 22 *//*--------------------------------------------------------------------*/ 23 24#include "es31fNegativeTextureApiTests.hpp" 25#include "es31fNegativeTestShared.hpp" 26 27#include "gluCallLogWrapper.hpp" 28#include "gluContextInfo.hpp" 29#include "gluRenderContext.hpp" 30 31#include "glwDefs.hpp" 32#include "glwEnums.hpp" 33 34namespace deqp 35{ 36namespace gles31 37{ 38namespace Functional 39{ 40namespace NegativeTestShared 41{ 42 43using tcu::TestLog; 44using glu::CallLogWrapper; 45using namespace glw; 46 47static inline int divRoundUp (int a, int b) 48{ 49 return a/b + (a%b != 0 ? 1 : 0); 50} 51 52static inline int etc2DataSize (int width, int height) 53{ 54 return (int)(divRoundUp(width, 4) * divRoundUp(height, 4) * sizeof(deUint64)); 55} 56 57static inline int etc2EacDataSize (int width, int height) 58{ 59 return 2 * etc2DataSize(width, height); 60} 61 62static deUint32 cubeFaceToGLFace (tcu::CubeFace face) 63{ 64 switch (face) 65 { 66 case tcu::CUBEFACE_NEGATIVE_X: return GL_TEXTURE_CUBE_MAP_NEGATIVE_X; 67 case tcu::CUBEFACE_POSITIVE_X: return GL_TEXTURE_CUBE_MAP_POSITIVE_X; 68 case tcu::CUBEFACE_NEGATIVE_Y: return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y; 69 case tcu::CUBEFACE_POSITIVE_Y: return GL_TEXTURE_CUBE_MAP_POSITIVE_Y; 70 case tcu::CUBEFACE_NEGATIVE_Z: return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; 71 case tcu::CUBEFACE_POSITIVE_Z: return GL_TEXTURE_CUBE_MAP_POSITIVE_Z; 72 default: 73 DE_ASSERT(DE_FALSE); 74 return GL_NONE; 75 } 76} 77 78static bool supportsES32orGL45(NegativeTestContext& ctx) 79{ 80 return contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || 81 contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5)); 82} 83 84#define FOR_CUBE_FACES(FACE_GL_VAR, BODY) \ 85 do \ 86 { \ 87 for (int faceIterTcu = 0; faceIterTcu < tcu::CUBEFACE_LAST; faceIterTcu++) \ 88 { \ 89 const GLenum FACE_GL_VAR = cubeFaceToGLFace((tcu::CubeFace)faceIterTcu); \ 90 BODY \ 91 } \ 92 } while (false) 93 94 95// glActiveTexture 96 97void activetexture (NegativeTestContext& ctx) 98{ 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(); 106} 107 108// glBindTexture 109 110void bindtexture (NegativeTestContext& ctx) 111{ 112 GLuint texture[5]; 113 ctx.glGenTextures(5, texture); 114 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(); 121 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); 131 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); 140 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); 149 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); 158 159 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 160 { 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); 179 } 180 ctx.endSection(); 181 182 ctx.glDeleteTextures(5, texture); 183} 184 185// glCompressedTexImage2D 186 187void compressedteximage2d_invalid_target (NegativeTestContext& ctx) 188{ 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(); 195} 196 197void compressedteximage2d_invalid_format (NegativeTestContext& ctx) 198{ 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(); 219} 220 221void compressedteximage2d_neg_level (NegativeTestContext& ctx) 222{ 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(); 239} 240 241void compressedteximage2d_max_level (NegativeTestContext& ctx) 242{ 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(); 248 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(); 264} 265 266void compressedteximage2d_neg_width_height (NegativeTestContext& ctx) 267{ 268 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 269 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(); 278 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(); 287 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(); 296 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(); 305 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(); 314 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(); 323 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(); 332 333 ctx.endSection(); 334} 335 336void compressedteximage2d_max_width_height (NegativeTestContext& ctx) 337{ 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."); 341 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(); 350 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(); 359 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(); 368 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(); 377 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(); 386 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(); 395 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(); 404 405 ctx.endSection(); 406} 407 408void compressedteximage2d_invalid_border (NegativeTestContext& ctx) 409{ 410 bool isES = glu::isContextTypeES(ctx.getRenderContext().getType()); 411 GLenum error = isES ? GL_INVALID_VALUE : GL_INVALID_OPERATION; 412 413 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0."); 414 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(); 421 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(); 428 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(); 435 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(); 442 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(); 449 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(); 456 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(); 463 464 ctx.endSection(); 465} 466 467void compressedteximage2d_invalid_size (NegativeTestContext& ctx) 468{ 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."); 470 // Subtracting 1 to the imageSize field to deviate from the expected size. Removing the -1 would cause the imageSize to be correct. 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); 491 492 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || 493 ctx.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_ldr")) 494 { 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); 551 } 552 ctx.endSection(); 553} 554 555void compressedteximage2d_neg_size (NegativeTestContext& ctx) 556{ 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(); 561} 562 563void compressedteximage2d_invalid_width_height (NegativeTestContext& ctx) 564{ 565 ctx.beginSection("GL_INVALID_VALUE is generated if target is a cube map face and width and height are not equal."); 566 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(); 571 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(); 576 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(); 581 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(); 586 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(); 591 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(); 596 597 ctx.endSection(); 598} 599 600void compressedteximage2d_invalid_buffer_target (NegativeTestContext& ctx) 601{ 602 deUint32 buf = 1234; 603 std::vector<GLubyte> data(64); 604 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); 609 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(); 616 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(); 621 622 ctx.glDeleteBuffers (1, &buf); 623} 624 625// glCopyTexImage2D 626 627void copyteximage2d_invalid_target (NegativeTestContext& ctx) 628{ 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(); 633} 634 635void copyteximage2d_invalid_format (NegativeTestContext& ctx) 636{ 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(); 653} 654 655void copyteximage2d_inequal_width_height_cube (NegativeTestContext& ctx) 656{ 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(); 671} 672 673void copyteximage2d_neg_level (NegativeTestContext& ctx) 674{ 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(); 691} 692 693void copyteximage2d_max_level (NegativeTestContext& ctx) 694{ 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(); 700 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(); 716} 717 718void copyteximage2d_neg_width_height (NegativeTestContext& ctx) 719{ 720 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 721 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(); 730 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(); 739 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(); 748 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(); 757 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(); 766 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(); 775 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(); 784 785 ctx.endSection(); 786} 787 788void copyteximage2d_max_width_height (NegativeTestContext& ctx) 789{ 790 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 791 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1; 792 793 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE."); 794 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(); 803 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(); 812 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(); 821 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(); 830 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(); 839 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(); 848 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(); 857 858 ctx.endSection(); 859} 860 861void copyteximage2d_invalid_border (NegativeTestContext& ctx) 862{ 863 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0."); 864 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(); 871 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(); 878 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(); 885 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(); 892 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(); 899 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(); 906 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(); 913 914 ctx.endSection(); 915} 916 917void copyteximage2d_incomplete_framebuffer (NegativeTestContext& ctx) 918{ 919 GLuint fbo = 0x1234; 920 ctx.glGenFramebuffers (1, &fbo); 921 ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 922 ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 923 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(); 940 941 ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 942 ctx.glDeleteFramebuffers(1, &fbo); 943} 944 945void copytexsubimage2d_invalid_target (NegativeTestContext& ctx) 946{ 947 GLuint texture = 0x1234; 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); 951 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(); 956 957 ctx.glDeleteTextures(1, &texture); 958} 959void copytexsubimage2d_read_buffer_is_none (NegativeTestContext& ctx) 960{ 961 GLuint texture = 0x1234; 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); 965 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(); 971 972 ctx.glDeleteTextures(1, &texture); 973} 974 975void copytexsubimage2d_texture_internalformat (NegativeTestContext& ctx) 976{ 977 if (!glu::isContextTypeES(ctx.getRenderContext().getType())) 978 return; 979 980 GLuint texture = 0x1234; 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); 984 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(); 989 990 ctx.glDeleteTextures(1, &texture); 991} 992 993void copytexsubimage2d_neg_level (NegativeTestContext& ctx) 994{ 995 GLuint textures[2]; 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);); 1001 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); 1005 FOR_CUBE_FACES(faceGL, 1006 { 1007 ctx.glCopyTexSubImage2D(faceGL, -1, 0, 0, 0, 0, 4, 4); 1008 ctx.expectError(GL_INVALID_VALUE); 1009 }); 1010 ctx.endSection(); 1011 1012 ctx.glDeleteTextures(2, &textures[0]); 1013} 1014 1015void copytexsubimage2d_max_level (NegativeTestContext& ctx) 1016{ 1017 GLuint textures[2]; 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);); 1023 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(); 1029 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; 1032 FOR_CUBE_FACES(faceGL, 1033 { 1034 ctx.glCopyTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, 4, 4); 1035 ctx.expectError(GL_INVALID_VALUE); 1036 }); 1037 ctx.endSection(); 1038 1039 ctx.glDeleteTextures(2, &textures[0]); 1040} 1041 1042void copytexsubimage2d_neg_offset (NegativeTestContext& ctx) 1043{ 1044 GLuint texture = 0x1234; 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); 1048 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(); 1057 1058 ctx.glDeleteTextures(1, &texture); 1059} 1060 1061void copytexsubimage2d_invalid_offset (NegativeTestContext& ctx) 1062{ 1063 GLuint texture = 0x1234; 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); 1067 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(); 1076 1077 ctx.glDeleteTextures(1, &texture); 1078} 1079 1080void copytexsubimage2d_neg_width_height (NegativeTestContext& ctx) 1081{ 1082 GLuint texture = 0x1234; 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); 1086 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(); 1095 1096 ctx.glDeleteTextures(1, &texture); 1097} 1098 1099void copytexsubimage2d_incomplete_framebuffer (NegativeTestContext& ctx) 1100{ 1101 ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete."); 1102 1103 GLuint texture[2]; 1104 GLuint fbo = 0x1234; 1105 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); 1117 1118 ctx.glGenFramebuffers(1, &fbo); 1119 ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 1120 ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 1121 ctx.expectError(GL_NO_ERROR); 1122 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); 1137 1138 ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0); 1139 ctx.glDeleteFramebuffers(1, &fbo); 1140 ctx.glDeleteTextures(2, texture); 1141 1142 ctx.endSection(); 1143} 1144 1145// glDeleteTextures 1146 1147void deletetextures (NegativeTestContext& ctx) 1148{ 1149 GLuint texture = 0x1234; 1150 ctx.glGenTextures(1, &texture); 1151 1152 ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 1153 ctx.glDeleteTextures(-1, 0); 1154 ctx.expectError(GL_INVALID_VALUE); 1155 1156 ctx.glBindTexture(GL_TEXTURE_2D, texture); 1157 ctx.glDeleteTextures(-1, 0); 1158 ctx.expectError(GL_INVALID_VALUE); 1159 ctx.endSection(); 1160 1161 ctx.glDeleteTextures(1, &texture); 1162} 1163 1164// glGenerateMipmap 1165 1166void generatemipmap (NegativeTestContext& ctx) 1167{ 1168 GLuint texture[2]; 1169 ctx.glGenTextures(2, texture); 1170 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(); 1175 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); 1182 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(); 1193 1194 if (glu::isContextTypeES(ctx.getRenderContext().getType())) 1195 { 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(); 1202 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); 1210 1211 if (!(ctx.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_float") && ctx.getContextInfo().isExtensionSupported("GL_OES_texture_float_linear"))) 1212 { 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); 1216 } 1217 1218 ctx.endSection(); 1219 } 1220 1221 ctx.glDeleteTextures(2, texture); 1222} 1223 1224// glGenTextures 1225 1226void gentextures (NegativeTestContext& ctx) 1227{ 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(); 1232} 1233 1234// glPixelStorei 1235 1236void pixelstorei (NegativeTestContext& ctx) 1237{ 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(); 1242 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(); 1269} 1270 1271// glTexImage2D 1272 1273void teximage2d (NegativeTestContext& ctx) 1274{ 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(); 1279 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(); 1284 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())) 1293 { 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); 1298 } 1299 ctx.endSection(); 1300} 1301 1302void teximage2d_inequal_width_height_cube (NegativeTestContext& ctx) 1303{ 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(); 1318} 1319 1320void teximage2d_neg_level (NegativeTestContext& ctx) 1321{ 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(); 1326 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(); 1341} 1342 1343void teximage2d_max_level (NegativeTestContext& ctx) 1344{ 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(); 1350 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(); 1366} 1367 1368void teximage2d_neg_width_height (NegativeTestContext& ctx) 1369{ 1370 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 1371 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(); 1380 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(); 1389 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(); 1398 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(); 1407 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(); 1416 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(); 1425 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(); 1434 1435 ctx.endSection(); 1436} 1437 1438void teximage2d_max_width_height (NegativeTestContext& ctx) 1439{ 1440 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 1441 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1; 1442 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(); 1451 1452 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE."); 1453 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(); 1462 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(); 1471 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(); 1480 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(); 1489 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(); 1498 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(); 1507 1508 ctx.endSection(); 1509} 1510 1511void teximage2d_invalid_border (NegativeTestContext& ctx) 1512{ 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(); 1531} 1532 1533void teximage2d_invalid_buffer_target (NegativeTestContext& ctx) 1534{ 1535 deUint32 buf = 0x1234; 1536 deUint32 texture = 0x1234; 1537 std::vector<GLubyte> data(64); 1538 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); 1545 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(); 1553 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(); 1558 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(); 1565 1566 ctx.glDeleteBuffers (1, &buf); 1567 ctx.glDeleteTextures (1, &texture); 1568} 1569 1570// glTexSubImage2D 1571 1572void texsubimage2d (NegativeTestContext& ctx) 1573{ 1574 deUint32 texture = 0x1234; 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); 1579 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(); 1584 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(); 1589 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(); 1594 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())) 1607 { 1608 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_FLOAT, 0); 1609 ctx.expectError(GL_INVALID_OPERATION); 1610 } 1611 ctx.endSection(); 1612 1613 ctx.glDeleteTextures (1, &texture); 1614} 1615 1616void texsubimage2d_neg_level (NegativeTestContext& ctx) 1617{ 1618 deUint32 textures[2]; 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); 1625 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(); 1630 1631 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 1632 FOR_CUBE_FACES(faceGL, 1633 { 1634 ctx.glTexSubImage2D(faceGL, -1, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1635 ctx.expectError(GL_INVALID_VALUE); 1636 }); 1637 ctx.endSection(); 1638 1639 ctx.glDeleteTextures(2, &textures[0]); 1640} 1641 1642void texsubimage2d_max_level (NegativeTestContext& ctx) 1643{ 1644 deUint32 textures[2]; 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); 1651 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(); 1657 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; 1660 FOR_CUBE_FACES(faceGL, 1661 { 1662 ctx.glTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1663 ctx.expectError(GL_INVALID_VALUE); 1664 }); 1665 ctx.endSection(); 1666 1667 ctx.glDeleteTextures(2, &textures[0]); 1668} 1669 1670void texsubimage2d_neg_offset (NegativeTestContext& ctx) 1671{ 1672 deUint32 texture = 0x1234; 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); 1677 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(); 1686 1687 ctx.glDeleteTextures(1, &texture); 1688} 1689 1690void texsubimage2d_invalid_offset (NegativeTestContext& ctx) 1691{ 1692 deUint32 texture = 0x1234; 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); 1697 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(); 1706 1707 ctx.glDeleteTextures (1, &texture); 1708} 1709 1710void texsubimage2d_neg_width_height (NegativeTestContext& ctx) 1711{ 1712 deUint32 texture = 0x1234; 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); 1717 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(); 1726 1727 ctx.glDeleteTextures (1, &texture); 1728} 1729 1730void texsubimage2d_invalid_buffer_target (NegativeTestContext& ctx) 1731{ 1732 deUint32 buf = 0x1234; 1733 deUint32 texture = 0x1234; 1734 std::vector<GLubyte> data(64); 1735 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); 1743 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(); 1751 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(); 1756 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(); 1767 1768 ctx.glDeleteBuffers (1, &buf); 1769 ctx.glDeleteTextures (1, &texture); 1770} 1771 1772// glTexParameteri 1773 1774void texparameteri (NegativeTestContext& ctx) 1775{ 1776 GLuint texture = 0x1234; 1777 GLint textureMode = -1; 1778 1779 ctx.glGenTextures(1, &texture); 1780 ctx.glBindTexture(GL_TEXTURE_2D, texture); 1781 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(); 1790 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(); 1817 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(); 1824 1825 if (supportsES32orGL45(ctx)) 1826 { 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(); 1831 } 1832 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); 1854 1855 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 1856 { 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); 1877 } 1878 ctx.endSection(); 1879 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); 1883 1884 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 1885 { 1886 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1); 1887 ctx.expectError(GL_INVALID_OPERATION); 1888 } 1889 ctx.endSection(); 1890 1891 ctx.glDeleteTextures(1, &texture); 1892} 1893 1894// glTexParameterf 1895 1896void texparameterf (NegativeTestContext& ctx) 1897{ 1898 GLuint texture = 0x1234; 1899 GLfloat textureMode = -1.0f; 1900 ctx.glGenTextures(1, &texture); 1901 ctx.glBindTexture(GL_TEXTURE_2D, texture); 1902 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(); 1911 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(); 1938 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(); 1945 1946 if (supportsES32orGL45(ctx)) 1947 { 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(); 1952 } 1953 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); 1975 1976 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 1977 { 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); 1998 } 1999 ctx.endSection(); 2000 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); 2004 2005 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2006 { 2007 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1.0f); 2008 ctx.expectError(GL_INVALID_OPERATION); 2009 } 2010 ctx.endSection(); 2011 2012 ctx.glDeleteTextures(1, &texture); 2013} 2014 2015// glTexParameteriv 2016 2017void texparameteriv (NegativeTestContext& ctx) 2018{ 2019 GLint params[4] = { GL_LINEAR, GL_INVALID_ENUM, GL_INVALID_ENUM, GL_INVALID_ENUM }; 2020 2021 GLuint texture = 0x1234; 2022 ctx.glGenTextures(1, &texture); 2023 ctx.glBindTexture(GL_TEXTURE_2D, texture); 2024 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, ¶ms[0]); 2027 ctx.expectError(GL_INVALID_ENUM); 2028 ctx.glTexParameteriv(GL_TEXTURE_2D, 0, ¶ms[0]); 2029 ctx.expectError(GL_INVALID_ENUM); 2030 ctx.glTexParameteriv(0, 0, ¶ms[0]); 2031 ctx.expectError(GL_INVALID_ENUM); 2032 ctx.endSection(); 2033 2034 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2035 params[0] = -1; 2036 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, ¶ms[0]); 2037 ctx.expectError(GL_INVALID_ENUM); 2038 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2039 ctx.expectError(GL_INVALID_ENUM); 2040 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2041 ctx.expectError(GL_INVALID_ENUM); 2042 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2043 ctx.expectError(GL_INVALID_ENUM); 2044 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2045 ctx.expectError(GL_INVALID_ENUM); 2046 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, ¶ms[0]); 2047 ctx.expectError(GL_INVALID_ENUM); 2048 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, ¶ms[0]); 2049 ctx.expectError(GL_INVALID_ENUM); 2050 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, ¶ms[0]); 2051 ctx.expectError(GL_INVALID_ENUM); 2052 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, ¶ms[0]); 2053 ctx.expectError(GL_INVALID_ENUM); 2054 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]); 2055 ctx.expectError(GL_INVALID_ENUM); 2056 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]); 2057 ctx.expectError(GL_INVALID_ENUM); 2058 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, ¶ms[0]); 2059 ctx.expectError(GL_INVALID_ENUM); 2060 ctx.endSection(); 2061 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, ¶ms[0]); 2064 ctx.expectError(GL_INVALID_VALUE); 2065 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, ¶ms[0]); 2066 ctx.expectError(GL_INVALID_VALUE); 2067 ctx.endSection(); 2068 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, ¶ms[0]); 2071 ctx.expectError(GL_INVALID_ENUM); 2072 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2073 ctx.expectError(GL_INVALID_ENUM); 2074 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2075 ctx.expectError(GL_INVALID_ENUM); 2076 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, ¶ms[0]); 2077 ctx.expectError(GL_INVALID_ENUM); 2078 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, ¶ms[0]); 2079 ctx.expectError(GL_INVALID_ENUM); 2080 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, ¶ms[0]); 2081 ctx.expectError(GL_INVALID_ENUM); 2082 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2083 ctx.expectError(GL_INVALID_ENUM); 2084 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2085 ctx.expectError(GL_INVALID_ENUM); 2086 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2087 ctx.expectError(GL_INVALID_ENUM); 2088 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2089 ctx.expectError(GL_INVALID_ENUM); 2090 2091 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2092 { 2093 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, ¶ms[0]); 2094 ctx.expectError(GL_INVALID_ENUM); 2095 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2096 ctx.expectError(GL_INVALID_ENUM); 2097 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2098 ctx.expectError(GL_INVALID_ENUM); 2099 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, ¶ms[0]); 2100 ctx.expectError(GL_INVALID_ENUM); 2101 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, ¶ms[0]); 2102 ctx.expectError(GL_INVALID_ENUM); 2103 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, ¶ms[0]); 2104 ctx.expectError(GL_INVALID_ENUM); 2105 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2106 ctx.expectError(GL_INVALID_ENUM); 2107 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2108 ctx.expectError(GL_INVALID_ENUM); 2109 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2110 ctx.expectError(GL_INVALID_ENUM); 2111 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2112 ctx.expectError(GL_INVALID_ENUM); 2113 } 2114 ctx.endSection(); 2115 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."); 2117 params[0] = 1; 2118 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2119 ctx.expectError(GL_INVALID_OPERATION); 2120 2121 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2122 { 2123 params[0] = 1; 2124 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2125 ctx.expectError(GL_INVALID_OPERATION); 2126 } 2127 ctx.endSection(); 2128 2129 ctx.glDeleteTextures(1, &texture); 2130} 2131 2132// glTexParameterfv 2133 2134void texparameterfv (NegativeTestContext& ctx) 2135{ 2136 GLfloat params[4] = { GL_LINEAR, GL_INVALID_ENUM, GL_INVALID_ENUM, GL_INVALID_ENUM }; 2137 GLuint texture = 0x1234; 2138 ctx.glGenTextures(1, &texture); 2139 ctx.glBindTexture(GL_TEXTURE_2D, texture); 2140 2141 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values."); 2142 params[0] = GL_LINEAR; 2143 ctx.glTexParameterfv(0, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2144 ctx.expectError(GL_INVALID_ENUM); 2145 ctx.glTexParameterfv(GL_TEXTURE_2D, 0, ¶ms[0]); 2146 ctx.expectError(GL_INVALID_ENUM); 2147 ctx.glTexParameterfv(0, 0, ¶ms[0]); 2148 ctx.expectError(GL_INVALID_ENUM); 2149 ctx.endSection(); 2150 2151 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2152 params[0] = -1.0f; 2153 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, ¶ms[0]); 2154 ctx.expectError(GL_INVALID_ENUM); 2155 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2156 ctx.expectError(GL_INVALID_ENUM); 2157 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2158 ctx.expectError(GL_INVALID_ENUM); 2159 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2160 ctx.expectError(GL_INVALID_ENUM); 2161 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2162 ctx.expectError(GL_INVALID_ENUM); 2163 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, ¶ms[0]); 2164 ctx.expectError(GL_INVALID_ENUM); 2165 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, ¶ms[0]); 2166 ctx.expectError(GL_INVALID_ENUM); 2167 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, ¶ms[0]); 2168 ctx.expectError(GL_INVALID_ENUM); 2169 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, ¶ms[0]); 2170 ctx.expectError(GL_INVALID_ENUM); 2171 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]); 2172 ctx.expectError(GL_INVALID_ENUM); 2173 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]); 2174 ctx.expectError(GL_INVALID_ENUM); 2175 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, ¶ms[0]); 2176 ctx.expectError(GL_INVALID_ENUM); 2177 ctx.endSection(); 2178 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, ¶ms[0]); 2181 ctx.expectError(GL_INVALID_VALUE); 2182 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, ¶ms[0]); 2183 ctx.expectError(GL_INVALID_VALUE); 2184 ctx.endSection(); 2185 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, ¶ms[0]); 2188 ctx.expectError(GL_INVALID_ENUM); 2189 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2190 ctx.expectError(GL_INVALID_ENUM); 2191 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2192 ctx.expectError(GL_INVALID_ENUM); 2193 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, ¶ms[0]); 2194 ctx.expectError(GL_INVALID_ENUM); 2195 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, ¶ms[0]); 2196 ctx.expectError(GL_INVALID_ENUM); 2197 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, ¶ms[0]); 2198 ctx.expectError(GL_INVALID_ENUM); 2199 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2200 ctx.expectError(GL_INVALID_ENUM); 2201 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2202 ctx.expectError(GL_INVALID_ENUM); 2203 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2204 ctx.expectError(GL_INVALID_ENUM); 2205 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2206 ctx.expectError(GL_INVALID_ENUM); 2207 2208 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2209 { 2210 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, ¶ms[0]); 2211 ctx.expectError(GL_INVALID_ENUM); 2212 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2213 ctx.expectError(GL_INVALID_ENUM); 2214 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2215 ctx.expectError(GL_INVALID_ENUM); 2216 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, ¶ms[0]); 2217 ctx.expectError(GL_INVALID_ENUM); 2218 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, ¶ms[0]); 2219 ctx.expectError(GL_INVALID_ENUM); 2220 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, ¶ms[0]); 2221 ctx.expectError(GL_INVALID_ENUM); 2222 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2223 ctx.expectError(GL_INVALID_ENUM); 2224 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2225 ctx.expectError(GL_INVALID_ENUM); 2226 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2227 ctx.expectError(GL_INVALID_ENUM); 2228 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2229 ctx.expectError(GL_INVALID_ENUM); 2230 } 2231 ctx.endSection(); 2232 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."); 2234 params[0] = 1.0f; 2235 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2236 ctx.expectError(GL_INVALID_OPERATION); 2237 2238 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2239 { 2240 params[0] = 1.0f; 2241 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2242 ctx.expectError(GL_INVALID_OPERATION); 2243 } 2244 ctx.endSection(); 2245 2246 ctx.glDeleteTextures(1, &texture); 2247} 2248 2249// glTexParameterIiv 2250 2251void texparameterIiv (NegativeTestContext& ctx) 2252{ 2253 if (!supportsES32orGL45(ctx)) 2254 throw tcu::NotSupportedError("glTexParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__); 2255 2256 GLint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_INVALID_ENUM, GL_INVALID_ENUM }; 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(); 2261 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(); 2266 2267 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2268 textureMode[0] = -1; 2269 textureMode[1] = -1; 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(); 2295 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(); 2302 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."); 2304 textureMode[0] = 0; 2305 textureMode[1] = 0; 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); 2326 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(); 2348 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."); 2350 textureMode[0] = 1; 2351 textureMode[1] = 1; 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(); 2357} 2358 2359// glTexParameterIuiv 2360 2361void texparameterIuiv (NegativeTestContext& ctx) 2362{ 2363 if (!supportsES32orGL45(ctx)) 2364 throw tcu::NotSupportedError("glTexParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__); 2365 2366 GLuint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_INVALID_ENUM, GL_INVALID_ENUM }; 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(); 2371 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(); 2376 2377 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2378 textureMode[0] = GL_DONT_CARE; 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(); 2404 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."); 2406 textureMode[0] = 0; 2407 textureMode[1] = 0; 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); 2428 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(); 2450 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."); 2452 textureMode[0] = 1; 2453 textureMode[1] = 1; 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(); 2459} 2460 2461// glCompressedTexSubImage2D 2462 2463void compressedtexsubimage2d (NegativeTestContext& ctx) 2464{ 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(); 2469 2470 deUint32 texture = 0x1234; 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); 2475 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(); 2480 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(); 2485 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(); 2490 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(); 2499 2500 ctx.glDeleteTextures (1, &texture); 2501} 2502 2503void compressedtexsubimage2d_neg_level (NegativeTestContext& ctx) 2504{ 2505 deUint32 textures[2]; 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); 2512 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(); 2517 2518 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 2519 FOR_CUBE_FACES(faceGL, 2520 { 2521 ctx.glCompressedTexSubImage2D(faceGL, -1, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2522 ctx.expectError(GL_INVALID_VALUE); 2523 }); 2524 ctx.endSection(); 2525 2526 ctx.glDeleteTextures(2, &textures[0]); 2527} 2528 2529void compressedtexsubimage2d_max_level (NegativeTestContext& ctx) 2530{ 2531 deUint32 textures[2]; 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); 2538 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(); 2544 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; 2547 FOR_CUBE_FACES(faceGL, 2548 { 2549 ctx.glCompressedTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2550 ctx.expectError(GL_INVALID_VALUE); 2551 }); 2552 ctx.endSection(); 2553 2554 ctx.glDeleteTextures(2, &textures[0]); 2555} 2556 2557void compressedtexsubimage2d_neg_offset (NegativeTestContext& ctx) 2558{ 2559 GLuint texture = 0x1234; 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); 2563 2564 // \note Both GL_INVALID_VALUE and GL_INVALID_OPERATION are valid here since implementation may 2565 // first check if offsets are valid for certain format and only after that check that they 2566 // are not negative. 2567 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset or yoffset are negative."); 2568 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); 2575 2576 ctx.endSection(); 2577 2578 ctx.glDeleteTextures(1, &texture); 2579} 2580 2581void compressedtexsubimage2d_invalid_offset (NegativeTestContext& ctx) 2582{ 2583 deUint32 texture = 0x1234; 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); 2588 2589 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset + width > texture_width or yoffset + height > texture_height."); 2590 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(); 2598 2599 ctx.glDeleteTextures (1, &texture); 2600} 2601 2602void compressedtexsubimage2d_neg_width_height (NegativeTestContext& ctx) 2603{ 2604 deUint32 texture = 0x1234; 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); 2609 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(); 2618 2619 ctx.glDeleteTextures(1, &texture); 2620} 2621 2622void compressedtexsubimage2d_invalid_size (NegativeTestContext& ctx) 2623{ 2624 deUint32 texture = 0x1234; 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); 2629 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); 2633 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(); 2637 2638 ctx.glDeleteTextures (1, &texture); 2639} 2640 2641void compressedtexsubimage2d_invalid_buffer_target (NegativeTestContext& ctx) 2642{ 2643 deUint32 buf = 0x1234; 2644 deUint32 texture = 0x1234; 2645 std::vector<GLubyte> data(128); 2646 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); 2654 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(); 2662 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(); 2668 2669 ctx.glDeleteBuffers (1, &buf); 2670 ctx.glDeleteTextures (1, &texture); 2671} 2672 2673// glTexImage3D 2674 2675void teximage3d (NegativeTestContext& ctx) 2676{ 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(); 2683 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(); 2688 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(); 2693 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(); 2698 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(); 2705 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); 2713 2714 if (glu::isContextTypeES(ctx.getRenderContext().getType())) 2715 { 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); 2720 } 2721 ctx.endSection(); 2722 2723 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2724 { 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(); 2729 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(); 2734 } 2735} 2736 2737void teximage3d_neg_level (NegativeTestContext& ctx) 2738{ 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); 2744 2745 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2746 { 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); 2749 } 2750 2751 ctx.endSection(); 2752 2753} 2754 2755void teximage3d_max_level (NegativeTestContext& ctx) 2756{ 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(); 2762 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(); 2768} 2769 2770void teximage3d_neg_width_height_depth (NegativeTestContext& ctx) 2771{ 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); 2781 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); 2790 2791 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2792 { 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); 2801 } 2802 ctx.endSection(); 2803} 2804 2805void teximage3d_max_width_height_depth (NegativeTestContext& ctx) 2806{ 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; 2810 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(); 2821 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(); 2832} 2833 2834void teximage3d_invalid_border (NegativeTestContext& ctx) 2835{ 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); 2845 2846 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2847 { 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); 2852 } 2853 2854 ctx.endSection(); 2855} 2856 2857void teximage3d_invalid_buffer_target (NegativeTestContext& ctx) 2858{ 2859 deUint32 buf = 0x1234; 2860 deUint32 texture = 0x1234; 2861 std::vector<GLubyte> data(512); 2862 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); 2869 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..."); 2871 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(); 2878 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(); 2883 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(); 2889 2890 ctx.endSection(); 2891 2892 ctx.glDeleteBuffers (1, &buf); 2893 ctx.glDeleteTextures (1, &texture); 2894} 2895 2896// glTexSubImage3D 2897 2898void texsubimage3d (NegativeTestContext& ctx) 2899{ 2900 deUint32 texture = 0x1234; 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); 2905 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(); 2912 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(); 2917 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(); 2922 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())) 2933 { 2934 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_FLOAT, 0); 2935 ctx.expectError(GL_INVALID_OPERATION); 2936 } 2937 ctx.endSection(); 2938 2939 ctx.glDeleteTextures (1, &texture); 2940} 2941 2942void texsubimage3d_neg_level (NegativeTestContext& ctx) 2943{ 2944 deUint32 textures[3]; 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); 2951 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); 2957 2958 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2959 { 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); 2963 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); 2966 } 2967 2968 ctx.endSection(); 2969 2970 ctx.glDeleteTextures (3, &textures[0]); 2971} 2972 2973void texsubimage3d_max_level (NegativeTestContext& ctx) 2974{ 2975 deUint32 textures[2]; 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); 2982 2983 deUint32 log2Max3DTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1; 2984 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 2985 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(); 2990 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(); 2995 2996 ctx.glDeleteTextures (2, &textures[0]); 2997} 2998 2999void texsubimage3d_neg_offset (NegativeTestContext& ctx) 3000{ 3001 deUint32 textures[3]; 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); 3008 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); 3026 3027 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3028 { 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); 3032 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); 3041 } 3042 3043 ctx.endSection(); 3044 3045 ctx.glDeleteTextures (3, &textures[0]); 3046} 3047 3048void texsubimage3d_invalid_offset (NegativeTestContext& ctx) 3049{ 3050 deUint32 texture = 0x1234; 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); 3055 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(); 3060 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(); 3065 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(); 3070 3071 ctx.glDeleteTextures (1, &texture); 3072} 3073 3074void texsubimage3d_neg_width_height (NegativeTestContext& ctx) 3075{ 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); 3085 3086 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3087 { 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); 3096 } 3097 3098 ctx.endSection(); 3099} 3100 3101void texsubimage3d_invalid_buffer_target (NegativeTestContext& ctx) 3102{ 3103 deUint32 buf = 0x1234; 3104 deUint32 texture = 0x1234; 3105 std::vector<GLubyte> data(512); 3106 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); 3114 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..."); 3116 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(); 3123 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(); 3128 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(); 3138 3139 ctx.endSection(); 3140 3141 ctx.glDeleteBuffers (1, &buf); 3142 ctx.glDeleteTextures (1, &texture); 3143} 3144 3145// glCopyTexSubImage3D 3146 3147void copytexsubimage3d (NegativeTestContext& ctx) 3148{ 3149 GLuint texture = 0x1234; 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); 3153 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(); 3158 3159 ctx.glDeleteTextures(1, &texture); 3160} 3161 3162void copytexsubimage3d_neg_level (NegativeTestContext& ctx) 3163{ 3164 deUint32 textures[3]; 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); 3171 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); 3177 3178 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3179 { 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); 3185 } 3186 3187 ctx.endSection(); 3188 3189 ctx.glDeleteTextures(3, &textures[0]); 3190} 3191 3192void copytexsubimage3d_max_level (NegativeTestContext& ctx) 3193{ 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; 3197 3198 deUint32 textures[3]; 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); 3205 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(); 3210 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(); 3215 3216 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3217 { 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(); 3225 } 3226 3227 ctx.glDeleteTextures(3, &textures[0]); 3228} 3229 3230void copytexsubimage3d_neg_offset (NegativeTestContext& ctx) 3231{ 3232 GLuint texture = 0x1234; 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); 3236 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(); 3247 3248 ctx.glDeleteTextures(1, &texture); 3249} 3250 3251void copytexsubimage3d_invalid_offset (NegativeTestContext& ctx) 3252{ 3253 GLuint texture = 0x1234; 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); 3257 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(); 3262 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(); 3267 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(); 3272 3273 ctx.glDeleteTextures(1, &texture); 3274} 3275 3276void copytexsubimage3d_neg_width_height (NegativeTestContext& ctx) 3277{ 3278 GLuint texture = 0x1234; 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); 3282 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(); 3287 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(); 3292 3293 ctx.glDeleteTextures(1, &texture); 3294} 3295 3296void copytexsubimage3d_incomplete_framebuffer (NegativeTestContext& ctx) 3297{ 3298 GLuint fbo = 0x1234; 3299 GLuint texture[2]; 3300 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); 3309 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(); 3316 3317 ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0); 3318 ctx.glDeleteFramebuffers(1, &fbo); 3319 ctx.glDeleteTextures(2, texture); 3320} 3321 3322// glCompressedTexImage3D 3323 3324void compressedteximage3d (NegativeTestContext& ctx) 3325{ 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(); 3332 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(); 3339} 3340 3341void compressedteximage3d_neg_level (NegativeTestContext& ctx) 3342{ 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(); 3347} 3348 3349void compressedteximage3d_max_level (NegativeTestContext& ctx) 3350{ 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(); 3356} 3357 3358void compressedteximage3d_neg_width_height_depth (NegativeTestContext& ctx) 3359{ 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(); 3370} 3371 3372void compressedteximage3d_max_width_height_depth (NegativeTestContext& ctx) 3373{ 3374 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 3375 int maxTextureLayers = ctx.getInteger(GL_MAX_ARRAY_TEXTURE_LAYERS) + 1; 3376 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())) 3385 { 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); 3388 } 3389 ctx.endSection(); 3390} 3391 3392void compressedteximage3d_invalid_border (NegativeTestContext& ctx) 3393{ 3394 bool isES = glu::isContextTypeES(ctx.getRenderContext().getType()); 3395 GLenum error = isES ? GL_INVALID_VALUE : GL_INVALID_OPERATION; 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(); 3402} 3403 3404void compressedteximage3d_invalid_size (NegativeTestContext& ctx) 3405{ 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(); 3416} 3417 3418void compressedteximage3d_invalid_width_height (NegativeTestContext& ctx) 3419{ 3420 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3421 { 3422 const int width = 4; 3423 const int height = 6; 3424 const int depth = 6; 3425 const int blockSize = 16; 3426 const int imageSize = divRoundUp(width, 4) * divRoundUp(height, 4) * depth * blockSize; 3427 std::vector<GLubyte> data (imageSize); 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(); 3432 } 3433} 3434 3435void compressedteximage3d_invalid_buffer_target (NegativeTestContext& ctx) 3436{ 3437 deUint32 buf = 0x1234; 3438 std::vector<GLubyte> data(512); 3439 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); 3444 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(); 3451 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(); 3456 3457 ctx.glDeleteBuffers (1, &buf); 3458} 3459 3460// glCompressedTexSubImage3D 3461 3462void compressedtexsubimage3d (NegativeTestContext& ctx) 3463{ 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(); 3468 3469 deUint32 texture = 0x1234; 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); 3474 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(); 3479 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(); 3484 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(); 3489 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(); 3494 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(); 3503 3504 ctx.glDeleteTextures (1, &texture); 3505} 3506 3507void compressedtexsubimage3d_neg_level (NegativeTestContext& ctx) 3508{ 3509 deUint32 texture = 0x1234; 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); 3514 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(); 3519 3520 ctx.glDeleteTextures (1, &texture); 3521} 3522 3523void compressedtexsubimage3d_max_level (NegativeTestContext& ctx) 3524{ 3525 deUint32 texture = 0x1234; 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); 3530 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(); 3536 3537 ctx.glDeleteTextures (1, &texture); 3538} 3539 3540void compressedtexsubimage3d_neg_offset (NegativeTestContext& ctx) 3541{ 3542 deUint32 texture = 0x1234; 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); 3547 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(); 3558 3559 ctx.glDeleteTextures (1, &texture); 3560} 3561 3562void compressedtexsubimage3d_invalid_offset (NegativeTestContext& ctx) 3563{ 3564 deUint32 texture = 0x1234; 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); 3569 3570 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset + width > texture_width or yoffset + height > texture_height."); 3571 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(); 3581 3582 ctx.glDeleteTextures (1, &texture); 3583} 3584 3585void compressedtexsubimage3d_neg_width_height_depth (NegativeTestContext& ctx) 3586{ 3587 deUint32 texture = 0x1234; 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); 3592 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(); 3603 3604 ctx.glDeleteTextures (1, &texture); 3605} 3606 3607void compressedtexsubimage3d_invalid_size (NegativeTestContext& ctx) 3608{ 3609 deUint32 texture = 0x1234; 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); 3614 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); 3618 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(); 3622 3623 ctx.glDeleteTextures (1, &texture); 3624} 3625 3626void compressedtexsubimage3d_invalid_buffer_target (NegativeTestContext& ctx) 3627{ 3628 deUint32 buf = 0x1234; 3629 deUint32 texture = 0x1234; 3630 GLsizei bufferSize = etc2EacDataSize(4, 4); 3631 std::vector<GLubyte> data(bufferSize); 3632 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); 3640 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(); 3648 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(); 3654 3655 ctx.glDeleteBuffers (1, &buf); 3656 ctx.glDeleteTextures (1, &texture); 3657} 3658 3659// glTexStorage2D 3660 3661void texstorage2d (NegativeTestContext& ctx) 3662{ 3663 deUint32 textures[] = {0x1234, 0x1234}; 3664 3665 ctx.glGenTextures(2, textures); 3666 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]); 3667 ctx.expectError(GL_NO_ERROR); 3668 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(); 3675 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(); 3684 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); 3692 3693 if (supportsES32orGL45(ctx)) 3694 { 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); 3703 } 3704 ctx.endSection(); 3705 3706 ctx.glDeleteTextures(2, textures); 3707} 3708 3709void texstorage2d_invalid_binding (NegativeTestContext& ctx) 3710{ 3711 deUint32 textures[] = {0x1234, 0x1234}; 3712 deInt32 immutable = 0x1234; 3713 const bool isES32orGL45 = supportsES32orGL45(ctx); 3714 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); 3719 3720 if (isES32orGL45) 3721 { 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); 3725 } 3726 ctx.endSection(); 3727 3728 ctx.glGenTextures(2, textures); 3729 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); 3740 3741 if (isES32orGL45) 3742 { 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); 3752 } 3753 ctx.endSection(); 3754 3755 ctx.glDeleteTextures(2, textures); 3756} 3757 3758void texstorage2d_invalid_levels (NegativeTestContext& ctx) 3759{ 3760 deUint32 textures[] = {0x1234, 0x1234}; 3761 deUint32 log2MaxSize = deLog2Floor32(deMax32(16, 16)) + 1 + 1; 3762 const bool isES32orGL45 = supportsES32orGL45(ctx); 3763 3764 ctx.glGenTextures(2, textures); 3765 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]); 3766 3767 if (isES32orGL45) 3768 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]); 3769 3770 ctx.expectError(GL_NO_ERROR); 3771 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); 3777 3778 if (isES32orGL45) 3779 { 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); 3784 } 3785 ctx.endSection(); 3786 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); 3790 3791 if (isES32orGL45) 3792 { 3793 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, log2MaxSize, GL_RGBA8, 16, 16); 3794 ctx.expectError(GL_INVALID_OPERATION); 3795 } 3796 ctx.endSection(); 3797 3798 ctx.glDeleteTextures(2, textures); 3799} 3800 3801// glTexStorage3D 3802 3803void texstorage3d (NegativeTestContext& ctx) 3804{ 3805 deUint32 textures[] = {0x1234, 0x1234}; 3806 3807 ctx.glGenTextures(2, textures); 3808 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]); 3809 ctx.expectError(GL_NO_ERROR); 3810 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(); 3817 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(); 3826 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); 3836 3837 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3838 { 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); 3849 } 3850 ctx.endSection(); 3851 3852 ctx.glDeleteTextures(2, textures); 3853} 3854 3855void texstorage3d_invalid_binding (NegativeTestContext& ctx) 3856{ 3857 deUint32 textures[] = {0x1234, 0x1234}; 3858 deInt32 immutable = 0x1234; 3859 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); 3864 3865 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3866 { 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); 3870 } 3871 ctx.endSection(); 3872 3873 ctx.glGenTextures (2, textures); 3874 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); 3885 3886 if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3887 { 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); 3897 } 3898 ctx.endSection(); 3899 3900 ctx.glDeleteTextures(2, textures); 3901} 3902 3903void texstorage3d_invalid_levels (NegativeTestContext& ctx) 3904{ 3905 deUint32 textures[] = {0x1234, 0x1234}; 3906 deUint32 log2MaxSize = deLog2Floor32(8) + 1 + 1; 3907 const bool isES32orGL45 = supportsES32orGL45(ctx); 3908 ctx.glGenTextures(2, textures); 3909 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]); 3910 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); 3916 3917 if (isES32orGL45 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3918 { 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); 3924 } 3925 ctx.endSection(); 3926 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); 3936 3937 if (isES32orGL45 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3938 { 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); 3943 } 3944 ctx.endSection(); 3945 3946 ctx.glDeleteTextures(2, textures); 3947} 3948 3949void srgb_decode_texparameteri (NegativeTestContext& ctx) 3950{ 3951 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3952 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3953 3954 GLuint texture = 0x1234; 3955 GLint textureMode = -1; 3956 3957 ctx.glGenTextures(1, &texture); 3958 ctx.glBindTexture(GL_TEXTURE_2D, texture); 3959 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(); 3964 3965 ctx.glDeleteTextures(1, &texture); 3966} 3967 3968void srgb_decode_texparameterf (NegativeTestContext& ctx) 3969{ 3970 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3971 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3972 3973 GLuint texture = 0x1234; 3974 GLfloat textureMode = -1.0f; 3975 3976 ctx.glGenTextures(1, &texture); 3977 ctx.glBindTexture(GL_TEXTURE_2D, texture); 3978 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(); 3983 3984 ctx.glDeleteTextures(1, &texture); 3985} 3986 3987void srgb_decode_texparameteriv (NegativeTestContext& ctx) 3988{ 3989 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3990 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3991 3992 GLint params[1] = {GL_LINEAR}; 3993 GLuint texture = 0x1234; 3994 3995 ctx.glGenTextures(1, &texture); 3996 ctx.glBindTexture(GL_TEXTURE_2D, texture); 3997 3998 params[0] = -1; 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, ¶ms[0]); 4001 ctx.expectError(GL_INVALID_ENUM); 4002 ctx.endSection(); 4003 4004 ctx.glDeleteTextures(1, &texture); 4005} 4006 4007void srgb_decode_texparameterfv (NegativeTestContext& ctx) 4008{ 4009 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 4010 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 4011 4012 GLfloat params[1] = {GL_LINEAR}; 4013 GLuint texture = 0x1234; 4014 4015 ctx.glGenTextures(1, &texture); 4016 ctx.glBindTexture(GL_TEXTURE_2D, texture); 4017 4018 params[0] = -1.0f; 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, ¶ms[0]); 4021 ctx.expectError(GL_INVALID_ENUM); 4022 ctx.endSection(); 4023 4024 ctx.glDeleteTextures(1, &texture); 4025} 4026 4027void srgb_decode_texparameterIiv (NegativeTestContext& ctx) 4028{ 4029 if (!supportsES32orGL45(ctx)) 4030 TCU_THROW(NotSupportedError,"glTexParameterIiv is not supported."); 4031 4032 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 4033 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 4034 4035 GLint textureMode[] = {GL_DEPTH_COMPONENT, GL_STENCIL_INDEX}; 4036 GLuint texture = 0x1234; 4037 4038 ctx.glGenTextures(1, &texture); 4039 ctx.glBindTexture(GL_TEXTURE_2D, texture); 4040 4041 textureMode[0] = -1; 4042 textureMode[1] = -1; 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(); 4047 4048 ctx.glDeleteTextures(1, &texture); 4049} 4050 4051void srgb_decode_texparameterIuiv (NegativeTestContext& ctx) 4052{ 4053 if (!supportsES32orGL45(ctx)) 4054 TCU_THROW(NotSupportedError,"glTexParameterIuiv is not supported."); 4055 4056 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 4057 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 4058 4059 GLuint textureMode[] = {GL_DEPTH_COMPONENT, GL_STENCIL_INDEX}; 4060 GLuint texture = 0x1234; 4061 4062 ctx.glGenTextures(1, &texture); 4063 ctx.glBindTexture(GL_TEXTURE_2D, texture); 4064 4065 textureMode[0] = GL_DONT_CARE; 4066 textureMode[1] = GL_DONT_CARE; 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(); 4071 4072 ctx.glDeleteTextures(1, &texture); 4073} 4074 4075std::vector<FunctionContainer> getNegativeTextureApiTestFunctions() 4076{ 4077 FunctionContainer funcs[] = 4078 { 4079 {activetexture, "activetexture", "Invalid glActiveTexture() usage" }, 4080 {bindtexture, "bindtexture", "Invalid glBindTexture() usage" }, 4081 {compressedteximage2d_invalid_target, "compressedteximage2d_invalid_target", "Invalid glCompressedTexImage2D() usage" }, 4082 {compressedteximage2d_invalid_format, "compressedteximage2d_invalid_format", "Invalid glCompressedTexImage2D() usage" }, 4083 {compressedteximage2d_neg_level, "compressedteximage2d_neg_level", "Invalid glCompressedTexImage2D() usage" }, 4084 {compressedteximage2d_max_level, "compressedteximage2d_max_level", "Invalid glCompressedTexImage2D() usage" }, 4085 {compressedteximage2d_neg_width_height, "compressedteximage2d_neg_width_height", "Invalid glCompressedTexImage2D() usage" }, 4086 {compressedteximage2d_max_width_height, "compressedteximage2d_max_width_height", "Invalid glCompressedTexImage2D() usage" }, 4087 {compressedteximage2d_invalid_border, "compressedteximage2d_invalid_border", "Invalid glCompressedTexImage2D() usage" }, 4088 {compressedteximage2d_invalid_size, "compressedteximage2d_invalid_size", "Invalid glCompressedTexImage2D() usage" }, 4089 {compressedteximage2d_neg_size, "compressedteximage2d_neg_size", "Invalid glCompressedTexImage2D() usage" }, 4090 {compressedteximage2d_invalid_width_height, "compressedteximage2d_invalid_width_height", "Invalid glCompressedTexImage2D() usage" }, 4091 {compressedteximage2d_invalid_buffer_target, "compressedteximage2d_invalid_buffer_target", "Invalid glCompressedTexImage2D() usage" }, 4092 {copyteximage2d_invalid_target, "copyteximage2d_invalid_target", "Invalid glCopyTexImage2D() usage" }, 4093 {copyteximage2d_invalid_format, "copyteximage2d_invalid_format", "Invalid glCopyTexImage2D() usage" }, 4094 {copyteximage2d_inequal_width_height_cube, "copyteximage2d_inequal_width_height_cube", "Invalid glCopyTexImage2D() usage" }, 4095 {copyteximage2d_neg_level, "copyteximage2d_neg_level", "Invalid glCopyTexImage2D() usage" }, 4096 {copyteximage2d_max_level, "copyteximage2d_max_level", "Invalid glCopyTexImage2D() usage" }, 4097 {copyteximage2d_neg_width_height, "copyteximage2d_neg_width_height", "Invalid glCopyTexImage2D() usage" }, 4098 {copyteximage2d_max_width_height, "copyteximage2d_max_width_height", "Invalid glCopyTexImage2D() usage" }, 4099 {copyteximage2d_invalid_border, "copyteximage2d_invalid_border", "Invalid glCopyTexImage2D() usage" }, 4100 {copyteximage2d_incomplete_framebuffer, "copyteximage2d_incomplete_framebuffer", "Invalid glCopyTexImage2D() usage" }, 4101 {copytexsubimage2d_invalid_target, "copytexsubimage2d_invalid_target", "Invalid glCopyTexSubImage2D() usage" }, 4102 {copytexsubimage2d_read_buffer_is_none, "copytexsubimage2d_read_buffer_is_none", "Invalid glCopyTexSubImage2D() usage" }, 4103 {copytexsubimage2d_texture_internalformat, "copytexsubimage2d_texture_internalformat", "Invalid glCopyTexSubImage2D() usage" }, 4104 {copytexsubimage2d_neg_level, "copytexsubimage2d_neg_level", "Invalid glCopyTexSubImage2D() usage" }, 4105 {copytexsubimage2d_max_level, "copytexsubimage2d_max_level", "Invalid glCopyTexSubImage2D() usage" }, 4106 {copytexsubimage2d_neg_offset, "copytexsubimage2d_neg_offset", "Invalid glCopyTexSubImage2D() usage" }, 4107 {copytexsubimage2d_invalid_offset, "copytexsubimage2d_invalid_offset", "Invalid glCopyTexSubImage2D() usage" }, 4108 {copytexsubimage2d_neg_width_height, "copytexsubimage2d_neg_width_height", "Invalid glCopyTexSubImage2D() usage" }, 4109 {copytexsubimage2d_incomplete_framebuffer, "copytexsubimage2d_incomplete_framebuffer", "Invalid glCopyTexSubImage2D() usage" }, 4110 {deletetextures, "deletetextures", "Invalid glDeleteTextures() usage" }, 4111 {generatemipmap, "generatemipmap", "Invalid glGenerateMipmap() usage" }, 4112 {gentextures, "gentextures", "Invalid glGenTextures() usage" }, 4113 {pixelstorei, "pixelstorei", "Invalid glPixelStorei() usage" }, 4114 {teximage2d, "teximage2d", "Invalid glTexImage2D() usage" }, 4115 {teximage2d_inequal_width_height_cube, "teximage2d_inequal_width_height_cube", "Invalid glTexImage2D() usage" }, 4116 {teximage2d_neg_level, "teximage2d_neg_level", "Invalid glTexImage2D() usage" }, 4117 {teximage2d_max_level, "teximage2d_max_level", "Invalid glTexImage2D() usage" }, 4118 {teximage2d_neg_width_height, "teximage2d_neg_width_height", "Invalid glTexImage2D() usage" }, 4119 {teximage2d_max_width_height, "teximage2d_max_width_height", "Invalid glTexImage2D() usage" }, 4120 {teximage2d_invalid_border, "teximage2d_invalid_border", "Invalid glTexImage2D() usage" }, 4121 {teximage2d_invalid_buffer_target, "teximage2d_invalid_buffer_target", "Invalid glTexImage2D() usage" }, 4122 {texsubimage2d, "texsubimage2d", "Invalid glTexSubImage2D() usage" }, 4123 {texsubimage2d_neg_level, "texsubimage2d_neg_level", "Invalid glTexSubImage2D() usage" }, 4124 {texsubimage2d_max_level, "texsubimage2d_max_level", "Invalid glTexSubImage2D() usage" }, 4125 {texsubimage2d_neg_offset, "texsubimage2d_neg_offset", "Invalid glTexSubImage2D() usage" }, 4126 {texsubimage2d_invalid_offset, "texsubimage2d_invalid_offset", "Invalid glTexSubImage2D() usage" }, 4127 {texsubimage2d_neg_width_height, "texsubimage2d_neg_width_height", "Invalid glTexSubImage2D() usage" }, 4128 {texsubimage2d_invalid_buffer_target, "texsubimage2d_invalid_buffer_target", "Invalid glTexSubImage2D() usage" }, 4129 {texparameteri, "texparameteri", "Invalid glTexParameteri() usage" }, 4130 {texparameterf, "texparameterf", "Invalid glTexParameterf() usage" }, 4131 {texparameteriv, "texparameteriv", "Invalid glTexParameteriv() usage" }, 4132 {texparameterfv, "texparameterfv", "Invalid glTexParameterfv() usage" }, 4133 {texparameterIiv, "texparameterIiv", "Invalid glTexParameterIiv() usage" }, 4134 {texparameterIuiv, "texparameterIuiv", "Invalid glTexParameterIuiv() usage" }, 4135 {compressedtexsubimage2d, "compressedtexsubimage2d", "Invalid glCompressedTexSubImage2D() usage"}, 4136 {compressedtexsubimage2d_neg_level, "compressedtexsubimage2d_neg_level", "Invalid glCompressedTexSubImage2D() usage"}, 4137 {compressedtexsubimage2d_max_level, "compressedtexsubimage2d_max_level", "Invalid glCompressedTexSubImage2D() usage"}, 4138 {compressedtexsubimage2d_neg_offset, "compressedtexsubimage2d_neg_offset", "Invalid glCompressedTexSubImage2D() usage"}, 4139 {compressedtexsubimage2d_invalid_offset, "compressedtexsubimage2d_invalid_offset", "Invalid glCompressedTexSubImage2D() usage"}, 4140 {compressedtexsubimage2d_neg_width_height, "compressedtexsubimage2d_neg_width_height", "Invalid glCompressedTexSubImage2D() usage"}, 4141 {compressedtexsubimage2d_invalid_size, "compressedtexsubimage2d_invalid_size", "Invalid glCompressedTexImage2D() usage" }, 4142 {compressedtexsubimage2d_invalid_buffer_target, "compressedtexsubimage2d_invalid_buffer_target", "Invalid glCompressedTexSubImage2D() usage"}, 4143 {teximage3d, "teximage3d", "Invalid glTexImage3D() usage" }, 4144 {teximage3d_neg_level, "teximage3d_neg_level", "Invalid glTexImage3D() usage" }, 4145 {teximage3d_max_level, "teximage3d_max_level", "Invalid glTexImage3D() usage" }, 4146 {teximage3d_neg_width_height_depth, "teximage3d_neg_width_height_depth", "Invalid glTexImage3D() usage" }, 4147 {teximage3d_max_width_height_depth, "teximage3d_max_width_height_depth", "Invalid glTexImage3D() usage" }, 4148 {teximage3d_invalid_border, "teximage3d_invalid_border", "Invalid glTexImage3D() usage" }, 4149 {teximage3d_invalid_buffer_target, "teximage3d_invalid_buffer_target", "Invalid glTexImage3D() usage" }, 4150 {texsubimage3d, "texsubimage3d", "Invalid glTexSubImage3D() usage" }, 4151 {texsubimage3d_neg_level, "texsubimage3d_neg_level", "Invalid glTexSubImage3D() usage" }, 4152 {texsubimage3d_max_level, "texsubimage3d_max_level", "Invalid glTexSubImage3D() usage" }, 4153 {texsubimage3d_neg_offset, "texsubimage3d_neg_offset", "Invalid glTexSubImage3D() usage" }, 4154 {texsubimage3d_invalid_offset, "texsubimage3d_invalid_offset", "Invalid glTexSubImage3D() usage" }, 4155 {texsubimage3d_neg_width_height, "texsubimage3d_neg_width_height", "Invalid glTexSubImage3D() usage" }, 4156 {texsubimage3d_invalid_buffer_target, "texsubimage3d_invalid_buffer_target", "Invalid glTexSubImage3D() usage" }, 4157 {copytexsubimage3d, "copytexsubimage3d", "Invalid glCopyTexSubImage3D() usage" }, 4158 {copytexsubimage3d_neg_level, "copytexsubimage3d_neg_level", "Invalid glCopyTexSubImage3D() usage" }, 4159 {copytexsubimage3d_max_level, "copytexsubimage3d_max_level", "Invalid glCopyTexSubImage3D() usage" }, 4160 {copytexsubimage3d_neg_offset, "copytexsubimage3d_neg_offset", "Invalid glCopyTexSubImage3D() usage" }, 4161 {copytexsubimage3d_invalid_offset, "copytexsubimage3d_invalid_offset", "Invalid glCopyTexSubImage3D() usage" }, 4162 {copytexsubimage3d_neg_width_height, "copytexsubimage3d_neg_width_height", "Invalid glCopyTexSubImage3D() usage" }, 4163 {copytexsubimage3d_incomplete_framebuffer, "copytexsubimage3d_incomplete_framebuffer", "Invalid glCopyTexSubImage3D() usage" }, 4164 {compressedteximage3d, "compressedteximage3d", "Invalid glCompressedTexImage3D() usage" }, 4165 {compressedteximage3d_neg_level, "compressedteximage3d_neg_level", "Invalid glCompressedTexImage3D() usage" }, 4166 {compressedteximage3d_max_level, "compressedteximage3d_max_level", "Invalid glCompressedTexImage3D() usage" }, 4167 {compressedteximage3d_neg_width_height_depth, "compressedteximage3d_neg_width_height_depth", "Invalid glCompressedTexImage3D() usage" }, 4168 {compressedteximage3d_max_width_height_depth, "compressedteximage3d_max_width_height_depth", "Invalid glCompressedTexImage3D() usage" }, 4169 {compressedteximage3d_invalid_border, "compressedteximage3d_invalid_border", "Invalid glCompressedTexImage3D() usage" }, 4170 {compressedteximage3d_invalid_size, "compressedteximage3d_invalid_size", "Invalid glCompressedTexImage3D() usage" }, 4171 {compressedteximage3d_invalid_width_height, "compressedteximage3d_invalid_width_height", "Invalid glCompressedTexImage3D() usage" }, 4172 {compressedteximage3d_invalid_buffer_target, "compressedteximage3d_invalid_buffer_target", "Invalid glCompressedTexImage3D() usage" }, 4173 {compressedtexsubimage3d, "compressedtexsubimage3d", "Invalid glCompressedTexSubImage3D() usage"}, 4174 {compressedtexsubimage3d_neg_level, "compressedtexsubimage3d_neg_level", "Invalid glCompressedTexSubImage3D() usage"}, 4175 {compressedtexsubimage3d_max_level, "compressedtexsubimage3d_max_level", "Invalid glCompressedTexSubImage3D() usage"}, 4176 {compressedtexsubimage3d_neg_offset, "compressedtexsubimage3d_neg_offset", "Invalid glCompressedTexSubImage3D() usage"}, 4177 {compressedtexsubimage3d_invalid_offset, "compressedtexsubimage3d_invalid_offset", "Invalid glCompressedTexSubImage3D() usage"}, 4178 {compressedtexsubimage3d_neg_width_height_depth,"compressedtexsubimage3d_neg_width_height_depth", "Invalid glCompressedTexSubImage3D() usage"}, 4179 {compressedtexsubimage3d_invalid_size, "compressedtexsubimage3d_invalid_size", "Invalid glCompressedTexSubImage3D() usage"}, 4180 {compressedtexsubimage3d_invalid_buffer_target, "compressedtexsubimage3d_invalid_buffer_target", "Invalid glCompressedTexSubImage3D() usage"}, 4181 {texstorage2d, "texstorage2d", "Invalid glTexStorage2D() usage" }, 4182 {texstorage2d_invalid_binding, "texstorage2d_invalid_binding", "Invalid glTexStorage2D() usage" }, 4183 {texstorage2d_invalid_levels, "texstorage2d_invalid_levels", "Invalid glTexStorage2D() usage" }, 4184 {texstorage3d, "texstorage3d", "Invalid glTexStorage3D() usage" }, 4185 {texstorage3d_invalid_binding, "texstorage3d_invalid_binding", "Invalid glTexStorage3D() usage" }, 4186 {texstorage3d_invalid_levels, "texstorage3d_invalid_levels", "Invalid glTexStorage3D() usage" }, 4187 {srgb_decode_texparameteri, "srgb_decode_texparameteri", "Invalid texparameteri() usage srgb" }, 4188 {srgb_decode_texparameterf, "srgb_decode_texparameterf", "Invalid texparameterf() usage srgb" }, 4189 {srgb_decode_texparameteriv, "srgb_decode_texparameteriv", "Invalid texparameteriv() usage srgb" }, 4190 {srgb_decode_texparameterfv, "srgb_decode_texparameterfv", "Invalid texparameterfv() usage srgb" }, 4191 {srgb_decode_texparameterIiv, "srgb_decode_texparameterIiv", "Invalid texparameterIiv() usage srgb" }, 4192 {srgb_decode_texparameterIuiv, "srgb_decode_texparameterIuiv", "Invalid texparameterIuiv() usage srgb" }, 4193 }; 4194 4195 return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs)); 4196} 4197 4198} // NegativeTestShared 4199} // Functional 4200} // gles31 4201} // deqp 4202