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 34 namespace deqp 35 { 36 namespace gles31 37 { 38 namespace Functional 39 { 40 namespace NegativeTestShared 41 { 42 43 using tcu::TestLog; 44 using glu::CallLogWrapper; 45 using namespace glw; 46 47 static inline int divRoundUp (int a, int b) 48 { 49 return a/b + (a%b != 0 ? 1 : 0); 50 } 51 52 static inline int etc2DataSize (int width, int height) 53 { 54 return (int)(divRoundUp(width, 4) * divRoundUp(height, 4) * sizeof(deUint64)); 55 } 56 57 static inline int etc2EacDataSize (int width, int height) 58 { 59 return 2 * etc2DataSize(width, height); 60 } 61 62 static 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 78 #define FOR_CUBE_FACES(FACE_GL_VAR, BODY) \ 79 do \ 80 { \ 81 for (int faceIterTcu = 0; faceIterTcu < tcu::CUBEFACE_LAST; faceIterTcu++) \ 82 { \ 83 const GLenum FACE_GL_VAR = cubeFaceToGLFace((tcu::CubeFace)faceIterTcu); \ 84 BODY \ 85 } \ 86 } while (false) 87 88 89 // glActiveTexture 90 91 void activetexture (NegativeTestContext& ctx) 92 { 93 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)."); 94 ctx.glActiveTexture(-1); 95 ctx.expectError(GL_INVALID_ENUM); 96 int numMaxTextureUnits = ctx.getInteger(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS); 97 ctx.glActiveTexture(GL_TEXTURE0 + numMaxTextureUnits); 98 ctx.expectError(GL_INVALID_ENUM); 99 ctx.endSection(); 100 } 101 102 // glBindTexture 103 104 void bindtexture (NegativeTestContext& ctx) 105 { 106 GLuint texture[5]; 107 ctx.glGenTextures(5, texture); 108 109 ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the allowable values."); 110 ctx.glBindTexture(0, 1); 111 ctx.expectError(GL_INVALID_ENUM); 112 ctx.glBindTexture(GL_FRAMEBUFFER, 1); 113 ctx.expectError(GL_INVALID_ENUM); 114 ctx.endSection(); 115 116 ctx.beginSection("GL_INVALID_OPERATION is generated if texture was previously created with a target that doesn't match that of target."); 117 ctx.glBindTexture(GL_TEXTURE_2D, texture[0]); 118 ctx.expectError(GL_NO_ERROR); 119 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[0]); 120 ctx.expectError(GL_INVALID_OPERATION); 121 ctx.glBindTexture(GL_TEXTURE_3D, texture[0]); 122 ctx.expectError(GL_INVALID_OPERATION); 123 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[0]); 124 ctx.expectError(GL_INVALID_OPERATION); 125 126 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[1]); 127 ctx.expectError(GL_NO_ERROR); 128 ctx.glBindTexture(GL_TEXTURE_2D, texture[1]); 129 ctx.expectError(GL_INVALID_OPERATION); 130 ctx.glBindTexture(GL_TEXTURE_3D, texture[1]); 131 ctx.expectError(GL_INVALID_OPERATION); 132 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[1]); 133 ctx.expectError(GL_INVALID_OPERATION); 134 135 ctx.glBindTexture(GL_TEXTURE_3D, texture[2]); 136 ctx.expectError(GL_NO_ERROR); 137 ctx.glBindTexture(GL_TEXTURE_2D, texture[2]); 138 ctx.expectError(GL_INVALID_OPERATION); 139 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[2]); 140 ctx.expectError(GL_INVALID_OPERATION); 141 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[2]); 142 ctx.expectError(GL_INVALID_OPERATION); 143 144 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[3]); 145 ctx.expectError(GL_NO_ERROR); 146 ctx.glBindTexture(GL_TEXTURE_2D, texture[3]); 147 ctx.expectError(GL_INVALID_OPERATION); 148 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[3]); 149 ctx.expectError(GL_INVALID_OPERATION); 150 ctx.glBindTexture(GL_TEXTURE_3D, texture[3]); 151 ctx.expectError(GL_INVALID_OPERATION); 152 153 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 154 { 155 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[0]); 156 ctx.expectError(GL_INVALID_OPERATION); 157 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[1]); 158 ctx.expectError(GL_INVALID_OPERATION); 159 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[2]); 160 ctx.expectError(GL_INVALID_OPERATION); 161 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[3]); 162 ctx.expectError(GL_INVALID_OPERATION); 163 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[4]); 164 ctx.expectError(GL_NO_ERROR); 165 ctx.glBindTexture(GL_TEXTURE_2D, texture[4]); 166 ctx.expectError(GL_INVALID_OPERATION); 167 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[4]); 168 ctx.expectError(GL_INVALID_OPERATION); 169 ctx.glBindTexture(GL_TEXTURE_3D, texture[4]); 170 ctx.expectError(GL_INVALID_OPERATION); 171 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[4]); 172 ctx.expectError(GL_INVALID_OPERATION); 173 } 174 ctx.endSection(); 175 176 ctx.glDeleteTextures(5, texture); 177 } 178 179 // glCompressedTexImage2D 180 181 void compressedteximage2d_invalid_target (NegativeTestContext& ctx) 182 { 183 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 184 ctx.glCompressedTexImage2D(0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 185 ctx.expectError(GL_INVALID_ENUM); 186 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 187 ctx.expectError(GL_INVALID_ENUM); 188 ctx.endSection(); 189 } 190 191 void compressedteximage2d_invalid_format (NegativeTestContext& ctx) 192 { 193 ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not a supported format returned in GL_COMPRESSED_TEXTURE_FORMATS."); 194 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0); 195 ctx.expectError(GL_INVALID_ENUM); 196 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 0, 0, 0); 197 ctx.expectError(GL_INVALID_ENUM); 198 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 0, 0, 0, 0, 0); 199 ctx.expectError(GL_INVALID_ENUM); 200 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 0, 0, 0); 201 ctx.expectError(GL_INVALID_ENUM); 202 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 0, 0, 0); 203 ctx.expectError(GL_INVALID_ENUM); 204 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 0, 0, 0); 205 ctx.expectError(GL_INVALID_ENUM); 206 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 0, 0, 0); 207 ctx.expectError(GL_INVALID_ENUM); 208 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 0, 0, 0); 209 ctx.expectError(GL_INVALID_ENUM); 210 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 0, 0, 0); 211 ctx.expectError(GL_INVALID_ENUM); 212 ctx.endSection(); 213 } 214 215 void compressedteximage2d_neg_level (NegativeTestContext& ctx) 216 { 217 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 218 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 219 ctx.expectError(GL_INVALID_VALUE); 220 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 221 ctx.expectError(GL_INVALID_VALUE); 222 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 223 ctx.expectError(GL_INVALID_VALUE); 224 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 225 ctx.expectError(GL_INVALID_VALUE); 226 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_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_NEGATIVE_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_NEGATIVE_Z, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 231 ctx.expectError(GL_INVALID_VALUE); 232 ctx.endSection(); 233 } 234 235 void compressedteximage2d_max_level (NegativeTestContext& ctx) 236 { 237 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE) for a 2d texture target."); 238 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 239 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_COMPRESSED_RGB8_ETC2, 16, 16, 0, etc2DataSize(16, 16), 0); 240 ctx.expectError(GL_INVALID_VALUE); 241 ctx.endSection(); 242 243 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE) for a cubemap target."); 244 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1; 245 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0); 246 ctx.expectError(GL_INVALID_VALUE); 247 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0); 248 ctx.expectError(GL_INVALID_VALUE); 249 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0); 250 ctx.expectError(GL_INVALID_VALUE); 251 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_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_NEGATIVE_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_NEGATIVE_Z, log2MaxCubemapSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0); 256 ctx.expectError(GL_INVALID_VALUE); 257 ctx.endSection(); 258 } 259 260 void compressedteximage2d_neg_width_height (NegativeTestContext& ctx) 261 { 262 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 263 264 ctx.beginSection("GL_TEXTURE_2D target"); 265 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0); 266 ctx.expectError(GL_INVALID_VALUE); 267 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0); 268 ctx.expectError(GL_INVALID_VALUE); 269 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0); 270 ctx.expectError(GL_INVALID_VALUE); 271 ctx.endSection(); 272 273 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 274 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0); 275 ctx.expectError(GL_INVALID_VALUE); 276 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0); 277 ctx.expectError(GL_INVALID_VALUE); 278 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0); 279 ctx.expectError(GL_INVALID_VALUE); 280 ctx.endSection(); 281 282 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 283 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0); 284 ctx.expectError(GL_INVALID_VALUE); 285 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0); 286 ctx.expectError(GL_INVALID_VALUE); 287 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0); 288 ctx.expectError(GL_INVALID_VALUE); 289 ctx.endSection(); 290 291 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 292 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0); 293 ctx.expectError(GL_INVALID_VALUE); 294 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0); 295 ctx.expectError(GL_INVALID_VALUE); 296 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0); 297 ctx.expectError(GL_INVALID_VALUE); 298 ctx.endSection(); 299 300 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 301 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0); 302 ctx.expectError(GL_INVALID_VALUE); 303 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0); 304 ctx.expectError(GL_INVALID_VALUE); 305 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0); 306 ctx.expectError(GL_INVALID_VALUE); 307 ctx.endSection(); 308 309 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 310 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0); 311 ctx.expectError(GL_INVALID_VALUE); 312 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0); 313 ctx.expectError(GL_INVALID_VALUE); 314 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0); 315 ctx.expectError(GL_INVALID_VALUE); 316 ctx.endSection(); 317 318 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 319 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0); 320 ctx.expectError(GL_INVALID_VALUE); 321 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0); 322 ctx.expectError(GL_INVALID_VALUE); 323 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, 0, 0, 0); 324 ctx.expectError(GL_INVALID_VALUE); 325 ctx.endSection(); 326 327 ctx.endSection(); 328 } 329 330 void compressedteximage2d_max_width_height (NegativeTestContext& ctx) 331 { 332 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 333 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1; 334 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE."); 335 336 ctx.beginSection("GL_TEXTURE_2D target"); 337 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, 1, 0, etc2EacDataSize(maxTextureSize, 1), 0); 338 ctx.expectError(GL_INVALID_VALUE); 339 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxTextureSize, 0, etc2EacDataSize(1, maxTextureSize), 0); 340 ctx.expectError(GL_INVALID_VALUE); 341 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, maxTextureSize, 0, etc2EacDataSize(maxTextureSize, maxTextureSize), 0); 342 ctx.expectError(GL_INVALID_VALUE); 343 ctx.endSection(); 344 345 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 346 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0); 347 ctx.expectError(GL_INVALID_VALUE); 348 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0); 349 ctx.expectError(GL_INVALID_VALUE); 350 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0); 351 ctx.expectError(GL_INVALID_VALUE); 352 ctx.endSection(); 353 354 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 355 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0); 356 ctx.expectError(GL_INVALID_VALUE); 357 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0); 358 ctx.expectError(GL_INVALID_VALUE); 359 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0); 360 ctx.expectError(GL_INVALID_VALUE); 361 ctx.endSection(); 362 363 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 364 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0); 365 ctx.expectError(GL_INVALID_VALUE); 366 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0); 367 ctx.expectError(GL_INVALID_VALUE); 368 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0); 369 ctx.expectError(GL_INVALID_VALUE); 370 ctx.endSection(); 371 372 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 373 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0); 374 ctx.expectError(GL_INVALID_VALUE); 375 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0); 376 ctx.expectError(GL_INVALID_VALUE); 377 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0); 378 ctx.expectError(GL_INVALID_VALUE); 379 ctx.endSection(); 380 381 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 382 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0); 383 ctx.expectError(GL_INVALID_VALUE); 384 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0); 385 ctx.expectError(GL_INVALID_VALUE); 386 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0); 387 ctx.expectError(GL_INVALID_VALUE); 388 ctx.endSection(); 389 390 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 391 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, 1, 0, etc2EacDataSize(maxCubemapSize, 1), 0); 392 ctx.expectError(GL_INVALID_VALUE); 393 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, maxCubemapSize, 0, etc2EacDataSize(1, maxCubemapSize), 0); 394 ctx.expectError(GL_INVALID_VALUE); 395 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxCubemapSize, maxCubemapSize, 0, etc2EacDataSize(maxCubemapSize, maxCubemapSize), 0); 396 ctx.expectError(GL_INVALID_VALUE); 397 ctx.endSection(); 398 399 ctx.endSection(); 400 } 401 402 void compressedteximage2d_invalid_border (NegativeTestContext& ctx) 403 { 404 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0."); 405 406 ctx.beginSection("GL_TEXTURE_2D target"); 407 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0); 408 ctx.expectError(GL_INVALID_VALUE); 409 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0); 410 ctx.expectError(GL_INVALID_VALUE); 411 ctx.endSection(); 412 413 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 414 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0); 415 ctx.expectError(GL_INVALID_VALUE); 416 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0); 417 ctx.expectError(GL_INVALID_VALUE); 418 ctx.endSection(); 419 420 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 421 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0); 422 ctx.expectError(GL_INVALID_VALUE); 423 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0); 424 ctx.expectError(GL_INVALID_VALUE); 425 ctx.endSection(); 426 427 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 428 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0); 429 ctx.expectError(GL_INVALID_VALUE); 430 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0); 431 ctx.expectError(GL_INVALID_VALUE); 432 ctx.endSection(); 433 434 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 435 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0); 436 ctx.expectError(GL_INVALID_VALUE); 437 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0); 438 ctx.expectError(GL_INVALID_VALUE); 439 ctx.endSection(); 440 441 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 442 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0); 443 ctx.expectError(GL_INVALID_VALUE); 444 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0); 445 ctx.expectError(GL_INVALID_VALUE); 446 ctx.endSection(); 447 448 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 449 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0); 450 ctx.expectError(GL_INVALID_VALUE); 451 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0); 452 ctx.expectError(GL_INVALID_VALUE); 453 ctx.endSection(); 454 455 ctx.endSection(); 456 } 457 458 void compressedteximage2d_invalid_size (NegativeTestContext& ctx) 459 { 460 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data."); 461 // Subtracting 1 to the imageSize field to deviate from the expected size. Removing the -1 would cause the imageSize to be correct. 462 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_R11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0); 463 ctx.expectError(GL_INVALID_VALUE); 464 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SIGNED_R11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0); 465 ctx.expectError(GL_INVALID_VALUE); 466 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RG11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0); 467 ctx.expectError(GL_INVALID_VALUE); 468 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SIGNED_RG11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0); 469 ctx.expectError(GL_INVALID_VALUE); 470 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0); 471 ctx.expectError(GL_INVALID_VALUE); 472 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0); 473 ctx.expectError(GL_INVALID_VALUE); 474 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0); 475 ctx.expectError(GL_INVALID_VALUE); 476 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0); 477 ctx.expectError(GL_INVALID_VALUE); 478 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0); 479 ctx.expectError(GL_INVALID_VALUE); 480 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0); 481 ctx.expectError(GL_INVALID_VALUE); 482 483 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 484 { 485 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_4x4, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0); 486 ctx.expectError(GL_INVALID_VALUE); 487 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_5x4, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 4) * 16 - 1, 0); 488 ctx.expectError(GL_INVALID_VALUE); 489 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_5x5, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 5) * 16 - 1, 0); 490 ctx.expectError(GL_INVALID_VALUE); 491 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_6x5, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 5) * 16 - 1, 0); 492 ctx.expectError(GL_INVALID_VALUE); 493 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_6x6, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 6) * 16 - 1, 0); 494 ctx.expectError(GL_INVALID_VALUE); 495 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x5, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 5) * 16 - 1, 0); 496 ctx.expectError(GL_INVALID_VALUE); 497 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x6, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 6) * 16 - 1, 0); 498 ctx.expectError(GL_INVALID_VALUE); 499 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x8, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 8) * 16 - 1, 0); 500 ctx.expectError(GL_INVALID_VALUE); 501 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x5, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 5) * 16 - 1, 0); 502 ctx.expectError(GL_INVALID_VALUE); 503 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x6, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 6) * 16 - 1, 0); 504 ctx.expectError(GL_INVALID_VALUE); 505 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x8, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 8) * 16 - 1, 0); 506 ctx.expectError(GL_INVALID_VALUE); 507 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x10, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 10) * 16 - 1, 0); 508 ctx.expectError(GL_INVALID_VALUE); 509 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_12x10, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 10) * 16 - 1, 0); 510 ctx.expectError(GL_INVALID_VALUE); 511 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_12x12, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 12) * 16 - 1, 0); 512 ctx.expectError(GL_INVALID_VALUE); 513 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0); 514 ctx.expectError(GL_INVALID_VALUE); 515 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 4) * 16 - 1, 0); 516 ctx.expectError(GL_INVALID_VALUE); 517 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 5) * 16 - 1, 0); 518 ctx.expectError(GL_INVALID_VALUE); 519 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 5) * 16 - 1, 0); 520 ctx.expectError(GL_INVALID_VALUE); 521 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 6) * 16 - 1, 0); 522 ctx.expectError(GL_INVALID_VALUE); 523 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 5) * 16 - 1, 0); 524 ctx.expectError(GL_INVALID_VALUE); 525 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 6) * 16 - 1, 0); 526 ctx.expectError(GL_INVALID_VALUE); 527 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 8) * 16 - 1, 0); 528 ctx.expectError(GL_INVALID_VALUE); 529 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 5) * 16 - 1, 0); 530 ctx.expectError(GL_INVALID_VALUE); 531 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 6) * 16 - 1, 0); 532 ctx.expectError(GL_INVALID_VALUE); 533 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 8) * 16 - 1, 0); 534 ctx.expectError(GL_INVALID_VALUE); 535 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 10) * 16 - 1, 0); 536 ctx.expectError(GL_INVALID_VALUE); 537 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 10) * 16 - 1, 0); 538 ctx.expectError(GL_INVALID_VALUE); 539 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 12) * 16 - 1, 0); 540 ctx.expectError(GL_INVALID_VALUE); 541 } 542 ctx.endSection(); 543 } 544 545 void compressedteximage2d_neg_size (NegativeTestContext& ctx) 546 { 547 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is negative."); 548 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_R11_EAC, 0, 0, 0, -1, 0); 549 ctx.expectError(GL_INVALID_VALUE); 550 ctx.endSection(); 551 } 552 553 void compressedteximage2d_invalid_width_height (NegativeTestContext& ctx) 554 { 555 ctx.beginSection("GL_INVALID_VALUE is generated if target is a cube map face and width and height are not equal."); 556 557 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 558 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0); 559 ctx.expectError(GL_INVALID_VALUE); 560 ctx.endSection(); 561 562 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 563 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0); 564 ctx.expectError(GL_INVALID_VALUE); 565 ctx.endSection(); 566 567 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 568 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 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_NEGATIVE_X target"); 573 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 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_NEGATIVE_Y target"); 578 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 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_Z target"); 583 ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 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.endSection(); 588 } 589 590 void compressedteximage2d_invalid_buffer_target (NegativeTestContext& ctx) 591 { 592 deUint32 buf = 1234; 593 std::vector<GLubyte> data(64); 594 595 ctx.glGenBuffers (1, &buf); 596 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 597 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY); 598 ctx.expectError (GL_NO_ERROR); 599 600 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."); 601 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 32, GL_MAP_WRITE_BIT); 602 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 4, 4, 0, etc2DataSize(4, 4), 0); 603 ctx.expectError (GL_INVALID_OPERATION); 604 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 605 ctx.endSection(); 606 607 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."); 608 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 16, 16, 0, etc2DataSize(16, 16), 0); 609 ctx.expectError (GL_INVALID_OPERATION); 610 ctx.endSection(); 611 612 ctx.glDeleteBuffers (1, &buf); 613 } 614 615 // glCopyTexImage2D 616 617 void copyteximage2d_invalid_target (NegativeTestContext& ctx) 618 { 619 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 620 ctx.glCopyTexImage2D(0, 0, GL_RGB, 0, 0, 64, 64, 0); 621 ctx.expectError(GL_INVALID_ENUM); 622 ctx.endSection(); 623 } 624 625 void copyteximage2d_invalid_format (NegativeTestContext& ctx) 626 { 627 ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not an accepted format."); 628 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 64, 64, 0); 629 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 630 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 16, 16, 0); 631 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 632 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 16, 16, 0); 633 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 634 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 16, 16, 0); 635 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 636 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 16, 16, 0); 637 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 638 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 16, 16, 0); 639 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 640 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 16, 16, 0); 641 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 642 ctx.endSection(); 643 } 644 645 void copyteximage2d_inequal_width_height_cube (NegativeTestContext& ctx) 646 { 647 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."); 648 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 16, 17, 0); 649 ctx.expectError(GL_INVALID_VALUE); 650 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 16, 17, 0); 651 ctx.expectError(GL_INVALID_VALUE); 652 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 16, 17, 0); 653 ctx.expectError(GL_INVALID_VALUE); 654 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 16, 17, 0); 655 ctx.expectError(GL_INVALID_VALUE); 656 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 16, 17, 0); 657 ctx.expectError(GL_INVALID_VALUE); 658 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 16, 17, 0); 659 ctx.expectError(GL_INVALID_VALUE); 660 ctx.endSection(); 661 } 662 663 void copyteximage2d_neg_level (NegativeTestContext& ctx) 664 { 665 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 666 ctx.glCopyTexImage2D(GL_TEXTURE_2D, -1, GL_RGB, 0, 0, 64, 64, 0); 667 ctx.expectError(GL_INVALID_VALUE); 668 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_RGB, 0, 0, 16, 16, 0); 669 ctx.expectError(GL_INVALID_VALUE); 670 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_RGB, 0, 0, 16, 16, 0); 671 ctx.expectError(GL_INVALID_VALUE); 672 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_RGB, 0, 0, 16, 16, 0); 673 ctx.expectError(GL_INVALID_VALUE); 674 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, GL_RGB, 0, 0, 16, 16, 0); 675 ctx.expectError(GL_INVALID_VALUE); 676 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, GL_RGB, 0, 0, 16, 16, 0); 677 ctx.expectError(GL_INVALID_VALUE); 678 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, GL_RGB, 0, 0, 16, 16, 0); 679 ctx.expectError(GL_INVALID_VALUE); 680 ctx.endSection(); 681 } 682 683 void copyteximage2d_max_level (NegativeTestContext& ctx) 684 { 685 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 686 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 687 ctx.glCopyTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_RGB, 0, 0, 64, 64, 0); 688 ctx.expectError(GL_INVALID_VALUE); 689 ctx.endSection(); 690 691 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE)."); 692 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1; 693 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0); 694 ctx.expectError(GL_INVALID_VALUE); 695 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0); 696 ctx.expectError(GL_INVALID_VALUE); 697 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0); 698 ctx.expectError(GL_INVALID_VALUE); 699 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0); 700 ctx.expectError(GL_INVALID_VALUE); 701 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0); 702 ctx.expectError(GL_INVALID_VALUE); 703 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxCubemapSize, GL_RGB, 0, 0, 16, 16, 0); 704 ctx.expectError(GL_INVALID_VALUE); 705 ctx.endSection(); 706 } 707 708 void copyteximage2d_neg_width_height (NegativeTestContext& ctx) 709 { 710 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 711 712 ctx.beginSection("GL_TEXTURE_2D target"); 713 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, -1, 1, 0); 714 ctx.expectError(GL_INVALID_VALUE); 715 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, -1, 0); 716 ctx.expectError(GL_INVALID_VALUE); 717 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, -1, -1, 0); 718 ctx.expectError(GL_INVALID_VALUE); 719 ctx.endSection(); 720 721 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 722 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, -1, 1, 0); 723 ctx.expectError(GL_INVALID_VALUE); 724 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 1, -1, 0); 725 ctx.expectError(GL_INVALID_VALUE); 726 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, -1, -1, 0); 727 ctx.expectError(GL_INVALID_VALUE); 728 ctx.endSection(); 729 730 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 731 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, -1, 1, 0); 732 ctx.expectError(GL_INVALID_VALUE); 733 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 1, -1, 0); 734 ctx.expectError(GL_INVALID_VALUE); 735 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, -1, -1, 0); 736 ctx.expectError(GL_INVALID_VALUE); 737 ctx.endSection(); 738 739 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 740 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, -1, 1, 0); 741 ctx.expectError(GL_INVALID_VALUE); 742 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 1, -1, 0); 743 ctx.expectError(GL_INVALID_VALUE); 744 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, -1, -1, 0); 745 ctx.expectError(GL_INVALID_VALUE); 746 ctx.endSection(); 747 748 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 749 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, -1, 1, 0); 750 ctx.expectError(GL_INVALID_VALUE); 751 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 1, -1, 0); 752 ctx.expectError(GL_INVALID_VALUE); 753 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, -1, -1, 0); 754 ctx.expectError(GL_INVALID_VALUE); 755 ctx.endSection(); 756 757 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 758 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, -1, 1, 0); 759 ctx.expectError(GL_INVALID_VALUE); 760 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 1, -1, 0); 761 ctx.expectError(GL_INVALID_VALUE); 762 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, -1, -1, 0); 763 ctx.expectError(GL_INVALID_VALUE); 764 ctx.endSection(); 765 766 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 767 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, -1, 1, 0); 768 ctx.expectError(GL_INVALID_VALUE); 769 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 1, -1, 0); 770 ctx.expectError(GL_INVALID_VALUE); 771 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, -1, -1, 0); 772 ctx.expectError(GL_INVALID_VALUE); 773 ctx.endSection(); 774 775 ctx.endSection(); 776 } 777 778 void copyteximage2d_max_width_height (NegativeTestContext& ctx) 779 { 780 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 781 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1; 782 783 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE."); 784 785 ctx.beginSection("GL_TEXTURE_2D target"); 786 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, maxTextureSize, 1, 0); 787 ctx.expectError(GL_INVALID_VALUE); 788 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, maxTextureSize, 0); 789 ctx.expectError(GL_INVALID_VALUE); 790 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, maxTextureSize, maxTextureSize, 0); 791 ctx.expectError(GL_INVALID_VALUE); 792 ctx.endSection(); 793 794 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 795 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0); 796 ctx.expectError(GL_INVALID_VALUE); 797 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0); 798 ctx.expectError(GL_INVALID_VALUE); 799 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0); 800 ctx.expectError(GL_INVALID_VALUE); 801 ctx.endSection(); 802 803 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 804 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0); 805 ctx.expectError(GL_INVALID_VALUE); 806 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0); 807 ctx.expectError(GL_INVALID_VALUE); 808 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0); 809 ctx.expectError(GL_INVALID_VALUE); 810 ctx.endSection(); 811 812 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 813 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0); 814 ctx.expectError(GL_INVALID_VALUE); 815 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0); 816 ctx.expectError(GL_INVALID_VALUE); 817 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0); 818 ctx.expectError(GL_INVALID_VALUE); 819 ctx.endSection(); 820 821 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 822 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0); 823 ctx.expectError(GL_INVALID_VALUE); 824 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0); 825 ctx.expectError(GL_INVALID_VALUE); 826 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0); 827 ctx.expectError(GL_INVALID_VALUE); 828 ctx.endSection(); 829 830 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 831 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0); 832 ctx.expectError(GL_INVALID_VALUE); 833 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0); 834 ctx.expectError(GL_INVALID_VALUE); 835 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0); 836 ctx.expectError(GL_INVALID_VALUE); 837 ctx.endSection(); 838 839 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 840 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 1, maxCubemapSize, 0); 841 ctx.expectError(GL_INVALID_VALUE); 842 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, 1, 0); 843 ctx.expectError(GL_INVALID_VALUE); 844 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, maxCubemapSize, maxCubemapSize, 0); 845 ctx.expectError(GL_INVALID_VALUE); 846 ctx.endSection(); 847 848 ctx.endSection(); 849 } 850 851 void copyteximage2d_invalid_border (NegativeTestContext& ctx) 852 { 853 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0."); 854 855 ctx.beginSection("GL_TEXTURE_2D target"); 856 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 0, 0, -1); 857 ctx.expectError(GL_INVALID_VALUE); 858 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 0, 0, 1); 859 ctx.expectError(GL_INVALID_VALUE); 860 ctx.endSection(); 861 862 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 863 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 0, 0, -1); 864 ctx.expectError(GL_INVALID_VALUE); 865 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 0, 0, 1); 866 ctx.expectError(GL_INVALID_VALUE); 867 ctx.endSection(); 868 869 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 870 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 0, 0, -1); 871 ctx.expectError(GL_INVALID_VALUE); 872 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 0, 0, 0, 0, 1); 873 ctx.expectError(GL_INVALID_VALUE); 874 ctx.endSection(); 875 876 ctx.beginSection("GL_TEXTURE_2D target"); 877 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 0, 0, -1); 878 ctx.expectError(GL_INVALID_VALUE); 879 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 0, 0, 0, 0, 1); 880 ctx.expectError(GL_INVALID_VALUE); 881 ctx.endSection(); 882 883 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 884 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 0, 0, -1); 885 ctx.expectError(GL_INVALID_VALUE); 886 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 0, 0, 0, 0, 1); 887 ctx.expectError(GL_INVALID_VALUE); 888 ctx.endSection(); 889 890 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 891 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 0, 0, -1); 892 ctx.expectError(GL_INVALID_VALUE); 893 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 0, 0, 0, 0, 1); 894 ctx.expectError(GL_INVALID_VALUE); 895 ctx.endSection(); 896 897 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 898 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 0, 0, -1); 899 ctx.expectError(GL_INVALID_VALUE); 900 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 0, 0, 0, 0, 1); 901 ctx.expectError(GL_INVALID_VALUE); 902 ctx.endSection(); 903 904 ctx.endSection(); 905 } 906 907 void copyteximage2d_incomplete_framebuffer (NegativeTestContext& ctx) 908 { 909 GLuint fbo = 0x1234; 910 ctx.glGenFramebuffers (1, &fbo); 911 ctx.glBindFramebuffer (GL_FRAMEBUFFER, fbo); 912 ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 913 914 ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete."); 915 ctx.glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, 0, 0, 0); 916 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 917 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA8, 0, 0, 0, 0, 0); 918 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 919 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA8, 0, 0, 0, 0, 0); 920 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 921 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA8, 0, 0, 0, 0, 0); 922 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 923 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA8, 0, 0, 0, 0, 0); 924 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 925 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA8, 0, 0, 0, 0, 0); 926 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 927 ctx.glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA8, 0, 0, 0, 0, 0); 928 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 929 ctx.endSection(); 930 931 ctx.glBindFramebuffer (GL_FRAMEBUFFER, 0); 932 ctx.glDeleteFramebuffers(1, &fbo); 933 } 934 935 void copytexsubimage2d_invalid_target (NegativeTestContext& ctx) 936 { 937 GLuint texture = 0x1234; 938 ctx.glGenTextures (1, &texture); 939 ctx.glBindTexture (GL_TEXTURE_2D, texture); 940 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 941 942 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 943 ctx.glCopyTexSubImage2D(0, 0, 0, 0, 0, 0, 4, 4); 944 ctx.expectError(GL_INVALID_ENUM); 945 ctx.endSection(); 946 947 ctx.glDeleteTextures(1, &texture); 948 } 949 void copytexsubimage2d_read_buffer_is_none (NegativeTestContext& ctx) 950 { 951 GLuint texture = 0x1234; 952 ctx.glGenTextures (1, &texture); 953 ctx.glBindTexture (GL_TEXTURE_2D, texture); 954 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 955 956 ctx.beginSection("GL_INVALID_OPERATION is generated if the read buffer is NONE"); 957 ctx.glReadBuffer(GL_NONE); 958 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4); 959 ctx.expectError(GL_INVALID_OPERATION); 960 ctx.endSection(); 961 962 ctx.glDeleteTextures(1, &texture); 963 } 964 965 void copytexsubimage2d_texture_internalformat (NegativeTestContext& ctx) 966 { 967 GLuint texture = 0x1234; 968 ctx.glGenTextures (1, &texture); 969 ctx.glBindTexture (GL_TEXTURE_2D, texture); 970 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB9_E5, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 971 972 ctx.beginSection("GL_INVALID_OPERATION is generated if internal format of the texture is GL_RGB9_E5"); 973 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4); 974 ctx.expectError(GL_INVALID_OPERATION); 975 ctx.endSection(); 976 977 ctx.glDeleteTextures(1, &texture); 978 } 979 980 void copytexsubimage2d_neg_level (NegativeTestContext& ctx) 981 { 982 GLuint textures[2]; 983 ctx.glGenTextures (2, &textures[0]); 984 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]); 985 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 986 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]); 987 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);); 988 989 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 990 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, 4, 4); 991 ctx.expectError(GL_INVALID_VALUE); 992 FOR_CUBE_FACES(faceGL, 993 { 994 ctx.glCopyTexSubImage2D(faceGL, -1, 0, 0, 0, 0, 4, 4); 995 ctx.expectError(GL_INVALID_VALUE); 996 }); 997 ctx.endSection(); 998 999 ctx.glDeleteTextures(2, &textures[0]); 1000 } 1001 1002 void copytexsubimage2d_max_level (NegativeTestContext& ctx) 1003 { 1004 GLuint textures[2]; 1005 ctx.glGenTextures (2, &textures[0]); 1006 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]); 1007 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1008 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]); 1009 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);); 1010 1011 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE) for 2D texture targets."); 1012 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 1013 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, 4, 4); 1014 ctx.expectError(GL_INVALID_VALUE); 1015 ctx.endSection(); 1016 1017 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_SIZE) for cubemap targets."); 1018 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1; 1019 FOR_CUBE_FACES(faceGL, 1020 { 1021 ctx.glCopyTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, 4, 4); 1022 ctx.expectError(GL_INVALID_VALUE); 1023 }); 1024 ctx.endSection(); 1025 1026 ctx.glDeleteTextures(2, &textures[0]); 1027 } 1028 1029 void copytexsubimage2d_neg_offset (NegativeTestContext& ctx) 1030 { 1031 GLuint texture = 0x1234; 1032 ctx.glGenTextures (1, &texture); 1033 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1034 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1035 1036 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset < 0 or yoffset < 0."); 1037 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, -1, 0, 0, 0, 4, 4); 1038 ctx.expectError(GL_INVALID_VALUE); 1039 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, -1, 0, 0, 4, 4); 1040 ctx.expectError(GL_INVALID_VALUE); 1041 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, -1, -1, 0, 0, 4, 4); 1042 ctx.expectError(GL_INVALID_VALUE); 1043 ctx.endSection(); 1044 1045 ctx.glDeleteTextures(1, &texture); 1046 } 1047 1048 void copytexsubimage2d_invalid_offset (NegativeTestContext& ctx) 1049 { 1050 GLuint texture = 0x1234; 1051 ctx.glGenTextures (1, &texture); 1052 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1053 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1054 1055 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width or yoffset + height > texture_height."); 1056 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 14, 0, 0, 0, 4, 4); 1057 ctx.expectError(GL_INVALID_VALUE); 1058 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 14, 0, 0, 4, 4); 1059 ctx.expectError(GL_INVALID_VALUE); 1060 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 14, 14, 0, 0, 4, 4); 1061 ctx.expectError(GL_INVALID_VALUE); 1062 ctx.endSection(); 1063 1064 ctx.glDeleteTextures(1, &texture); 1065 } 1066 1067 void copytexsubimage2d_neg_width_height (NegativeTestContext& ctx) 1068 { 1069 GLuint texture = 0x1234; 1070 ctx.glGenTextures (1, &texture); 1071 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1072 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1073 1074 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 1075 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, -1, 0); 1076 ctx.expectError(GL_INVALID_VALUE); 1077 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, -1); 1078 ctx.expectError(GL_INVALID_VALUE); 1079 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, -1, -1); 1080 ctx.expectError(GL_INVALID_VALUE); 1081 ctx.endSection(); 1082 1083 ctx.glDeleteTextures(1, &texture); 1084 } 1085 1086 void copytexsubimage2d_incomplete_framebuffer (NegativeTestContext& ctx) 1087 { 1088 ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete."); 1089 1090 GLuint texture[2]; 1091 GLuint fbo = 0x1234; 1092 1093 ctx.glGenTextures (2, texture); 1094 ctx.glBindTexture (GL_TEXTURE_2D, texture[0]); 1095 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1096 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, texture[1]); 1097 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1098 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1099 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1100 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1101 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1102 ctx.glTexImage2D (GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1103 ctx.expectError(GL_NO_ERROR); 1104 1105 ctx.glGenFramebuffers(1, &fbo); 1106 ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo); 1107 ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER); 1108 ctx.expectError(GL_NO_ERROR); 1109 1110 ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0); 1111 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1112 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 0, 0, 0, 0); 1113 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1114 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 0, 0, 0, 0); 1115 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1116 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 0, 0, 0, 0); 1117 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1118 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 0, 0, 0, 0); 1119 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1120 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 0, 0, 0, 0); 1121 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1122 ctx.glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 0, 0, 0, 0); 1123 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 1124 1125 ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0); 1126 ctx.glDeleteFramebuffers(1, &fbo); 1127 ctx.glDeleteTextures(2, texture); 1128 1129 ctx.endSection(); 1130 } 1131 1132 // glDeleteTextures 1133 1134 void deletetextures (NegativeTestContext& ctx) 1135 { 1136 GLuint texture = 0x1234; 1137 ctx.glGenTextures(1, &texture); 1138 1139 ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 1140 ctx.glDeleteTextures(-1, 0); 1141 ctx.expectError(GL_INVALID_VALUE); 1142 1143 ctx.glBindTexture(GL_TEXTURE_2D, texture); 1144 ctx.glDeleteTextures(-1, 0); 1145 ctx.expectError(GL_INVALID_VALUE); 1146 ctx.endSection(); 1147 1148 ctx.glDeleteTextures(1, &texture); 1149 } 1150 1151 // glGenerateMipmap 1152 1153 void generatemipmap (NegativeTestContext& ctx) 1154 { 1155 GLuint texture[2]; 1156 ctx.glGenTextures(2, texture); 1157 1158 ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP."); 1159 ctx.glGenerateMipmap(0); 1160 ctx.expectError(GL_INVALID_ENUM); 1161 ctx.endSection(); 1162 1163 ctx.beginSection("INVALID_OPERATION is generated if the texture bound to target is not cube complete."); 1164 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[0]); 1165 ctx.glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_REPEAT); 1166 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1167 ctx.glGenerateMipmap(GL_TEXTURE_CUBE_MAP); 1168 ctx.expectError(GL_INVALID_OPERATION); 1169 1170 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[0]); 1171 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1172 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1173 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1174 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1175 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1176 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1177 ctx.glGenerateMipmap(GL_TEXTURE_CUBE_MAP); 1178 ctx.expectError(GL_INVALID_OPERATION); 1179 ctx.endSection(); 1180 1181 ctx.beginSection("GL_INVALID_OPERATION is generated if the zero level array is stored in a compressed internal format."); 1182 ctx.glBindTexture(GL_TEXTURE_2D, texture[1]); 1183 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0); 1184 ctx.glGenerateMipmap(GL_TEXTURE_2D); 1185 ctx.expectError(GL_INVALID_OPERATION); 1186 ctx.endSection(); 1187 1188 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."); 1189 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8_SNORM, 0, 0, 0, GL_RGB, GL_BYTE, 0); 1190 ctx.glGenerateMipmap(GL_TEXTURE_2D); 1191 ctx.expectError(GL_INVALID_OPERATION); 1192 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_R8I, 0, 0, 0, GL_RED_INTEGER, GL_BYTE, 0); 1193 ctx.glGenerateMipmap(GL_TEXTURE_2D); 1194 ctx.expectError(GL_INVALID_OPERATION); 1195 1196 if (!(ctx.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_float") && ctx.getContextInfo().isExtensionSupported("GL_OES_texture_float_linear"))) 1197 { 1198 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 0, 0, 0, GL_RGBA, GL_FLOAT, 0); 1199 ctx.glGenerateMipmap(GL_TEXTURE_2D); 1200 ctx.expectError(GL_INVALID_OPERATION); 1201 } 1202 1203 ctx.endSection(); 1204 1205 ctx.glDeleteTextures(2, texture); 1206 } 1207 1208 // glGenTextures 1209 1210 void gentextures (NegativeTestContext& ctx) 1211 { 1212 ctx.beginSection("GL_INVALID_VALUE is generated if n is negative."); 1213 ctx.glGenTextures(-1, 0); 1214 ctx.expectError(GL_INVALID_VALUE); 1215 ctx.endSection(); 1216 } 1217 1218 // glPixelStorei 1219 1220 void pixelstorei (NegativeTestContext& ctx) 1221 { 1222 ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value."); 1223 ctx.glPixelStorei(0,1); 1224 ctx.expectError(GL_INVALID_ENUM); 1225 ctx.endSection(); 1226 1227 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."); 1228 ctx.glPixelStorei(GL_PACK_ROW_LENGTH, -1); 1229 ctx.expectError(GL_INVALID_VALUE); 1230 ctx.glPixelStorei(GL_PACK_SKIP_ROWS, -1); 1231 ctx.expectError(GL_INVALID_VALUE); 1232 ctx.glPixelStorei(GL_PACK_SKIP_PIXELS, -1); 1233 ctx.expectError(GL_INVALID_VALUE); 1234 ctx.glPixelStorei(GL_UNPACK_ROW_LENGTH, -1); 1235 ctx.expectError(GL_INVALID_VALUE); 1236 ctx.glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, -1); 1237 ctx.expectError(GL_INVALID_VALUE); 1238 ctx.glPixelStorei(GL_UNPACK_SKIP_ROWS, -1); 1239 ctx.expectError(GL_INVALID_VALUE); 1240 ctx.glPixelStorei(GL_UNPACK_SKIP_PIXELS, -1); 1241 ctx.expectError(GL_INVALID_VALUE); 1242 ctx.glPixelStorei(GL_UNPACK_SKIP_IMAGES, -1); 1243 ctx.expectError(GL_INVALID_VALUE); 1244 ctx.glPixelStorei(GL_PACK_ALIGNMENT, 0); 1245 ctx.expectError(GL_INVALID_VALUE); 1246 ctx.glPixelStorei(GL_UNPACK_ALIGNMENT, 0); 1247 ctx.expectError(GL_INVALID_VALUE); 1248 ctx.glPixelStorei(GL_PACK_ALIGNMENT, 16); 1249 ctx.expectError(GL_INVALID_VALUE); 1250 ctx.glPixelStorei(GL_UNPACK_ALIGNMENT, 16); 1251 ctx.expectError(GL_INVALID_VALUE); 1252 ctx.endSection(); 1253 } 1254 1255 // glTexImage2D 1256 1257 void teximage2d (NegativeTestContext& ctx) 1258 { 1259 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 1260 ctx.glTexImage2D(0, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1261 ctx.expectError(GL_INVALID_ENUM); 1262 ctx.endSection(); 1263 1264 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant."); 1265 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, 0, 0); 1266 ctx.expectError(GL_INVALID_ENUM); 1267 ctx.endSection(); 1268 1269 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat, format and type is invalid."); 1270 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1271 ctx.expectError(GL_INVALID_OPERATION); 1272 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0); 1273 ctx.expectError(GL_INVALID_OPERATION); 1274 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5_A1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0); 1275 ctx.expectError(GL_INVALID_OPERATION); 1276 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, 1, 1, 0, GL_RGB, GL_UNSIGNED_INT_2_10_10_10_REV, 0); 1277 ctx.expectError(GL_INVALID_OPERATION); 1278 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32UI, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0); 1279 ctx.expectError(GL_INVALID_OPERATION); 1280 ctx.endSection(); 1281 } 1282 1283 void teximage2d_inequal_width_height_cube (NegativeTestContext& ctx) 1284 { 1285 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."); 1286 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1287 ctx.expectError(GL_INVALID_VALUE); 1288 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1289 ctx.expectError(GL_INVALID_VALUE); 1290 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1291 ctx.expectError(GL_INVALID_VALUE); 1292 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1293 ctx.expectError(GL_INVALID_VALUE); 1294 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1295 ctx.expectError(GL_INVALID_VALUE); 1296 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1297 ctx.expectError(GL_INVALID_VALUE); 1298 ctx.endSection(); 1299 } 1300 1301 void teximage2d_neg_level (NegativeTestContext& ctx) 1302 { 1303 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 1304 ctx.glTexImage2D(GL_TEXTURE_2D, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1305 ctx.expectError(GL_INVALID_VALUE); 1306 ctx.endSection(); 1307 1308 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 1309 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1310 ctx.expectError(GL_INVALID_VALUE); 1311 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1312 ctx.expectError(GL_INVALID_VALUE); 1313 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1314 ctx.expectError(GL_INVALID_VALUE); 1315 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1316 ctx.expectError(GL_INVALID_VALUE); 1317 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1318 ctx.expectError(GL_INVALID_VALUE); 1319 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, -1, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1320 ctx.expectError(GL_INVALID_VALUE); 1321 ctx.endSection(); 1322 } 1323 1324 void teximage2d_max_level (NegativeTestContext& ctx) 1325 { 1326 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 1327 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 1328 ctx.glTexImage2D(GL_TEXTURE_2D, log2MaxTextureSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1329 ctx.expectError(GL_INVALID_VALUE); 1330 ctx.endSection(); 1331 1332 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE)."); 1333 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1; 1334 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1335 ctx.expectError(GL_INVALID_VALUE); 1336 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1337 ctx.expectError(GL_INVALID_VALUE); 1338 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1339 ctx.expectError(GL_INVALID_VALUE); 1340 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1341 ctx.expectError(GL_INVALID_VALUE); 1342 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1343 ctx.expectError(GL_INVALID_VALUE); 1344 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, log2MaxCubemapSize, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1345 ctx.expectError(GL_INVALID_VALUE); 1346 ctx.endSection(); 1347 } 1348 1349 void teximage2d_neg_width_height (NegativeTestContext& ctx) 1350 { 1351 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 1352 1353 ctx.beginSection("GL_TEXTURE_2D target"); 1354 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1355 ctx.expectError(GL_INVALID_VALUE); 1356 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1357 ctx.expectError(GL_INVALID_VALUE); 1358 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1359 ctx.expectError(GL_INVALID_VALUE); 1360 ctx.endSection(); 1361 1362 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 1363 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1364 ctx.expectError(GL_INVALID_VALUE); 1365 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1366 ctx.expectError(GL_INVALID_VALUE); 1367 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1368 ctx.expectError(GL_INVALID_VALUE); 1369 ctx.endSection(); 1370 1371 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 1372 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1373 ctx.expectError(GL_INVALID_VALUE); 1374 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1375 ctx.expectError(GL_INVALID_VALUE); 1376 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1377 ctx.expectError(GL_INVALID_VALUE); 1378 ctx.endSection(); 1379 1380 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 1381 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1382 ctx.expectError(GL_INVALID_VALUE); 1383 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1384 ctx.expectError(GL_INVALID_VALUE); 1385 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1386 ctx.expectError(GL_INVALID_VALUE); 1387 ctx.endSection(); 1388 1389 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 1390 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1391 ctx.expectError(GL_INVALID_VALUE); 1392 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1393 ctx.expectError(GL_INVALID_VALUE); 1394 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1395 ctx.expectError(GL_INVALID_VALUE); 1396 ctx.endSection(); 1397 1398 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 1399 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1400 ctx.expectError(GL_INVALID_VALUE); 1401 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1402 ctx.expectError(GL_INVALID_VALUE); 1403 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1404 ctx.expectError(GL_INVALID_VALUE); 1405 ctx.endSection(); 1406 1407 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 1408 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, -1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1409 ctx.expectError(GL_INVALID_VALUE); 1410 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1411 ctx.expectError(GL_INVALID_VALUE); 1412 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, -1, -1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1413 ctx.expectError(GL_INVALID_VALUE); 1414 ctx.endSection(); 1415 1416 ctx.endSection(); 1417 } 1418 1419 void teximage2d_max_width_height (NegativeTestContext& ctx) 1420 { 1421 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 1422 int maxCubemapSize = ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE) + 1; 1423 1424 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_TEXTURE_SIZE."); 1425 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, maxTextureSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1426 ctx.expectError(GL_INVALID_VALUE); 1427 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1428 ctx.expectError(GL_INVALID_VALUE); 1429 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, maxTextureSize, maxTextureSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1430 ctx.expectError(GL_INVALID_VALUE); 1431 ctx.endSection(); 1432 1433 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE."); 1434 1435 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target"); 1436 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1437 ctx.expectError(GL_INVALID_VALUE); 1438 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1439 ctx.expectError(GL_INVALID_VALUE); 1440 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1441 ctx.expectError(GL_INVALID_VALUE); 1442 ctx.endSection(); 1443 1444 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target"); 1445 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1446 ctx.expectError(GL_INVALID_VALUE); 1447 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1448 ctx.expectError(GL_INVALID_VALUE); 1449 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1450 ctx.expectError(GL_INVALID_VALUE); 1451 ctx.endSection(); 1452 1453 ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target"); 1454 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1455 ctx.expectError(GL_INVALID_VALUE); 1456 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1457 ctx.expectError(GL_INVALID_VALUE); 1458 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1459 ctx.expectError(GL_INVALID_VALUE); 1460 ctx.endSection(); 1461 1462 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target"); 1463 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1464 ctx.expectError(GL_INVALID_VALUE); 1465 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1466 ctx.expectError(GL_INVALID_VALUE); 1467 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1468 ctx.expectError(GL_INVALID_VALUE); 1469 ctx.endSection(); 1470 1471 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target"); 1472 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1473 ctx.expectError(GL_INVALID_VALUE); 1474 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1475 ctx.expectError(GL_INVALID_VALUE); 1476 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1477 ctx.expectError(GL_INVALID_VALUE); 1478 ctx.endSection(); 1479 1480 ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target"); 1481 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, maxCubemapSize, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1482 ctx.expectError(GL_INVALID_VALUE); 1483 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1484 ctx.expectError(GL_INVALID_VALUE); 1485 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, maxCubemapSize, maxCubemapSize, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1486 ctx.expectError(GL_INVALID_VALUE); 1487 ctx.endSection(); 1488 1489 ctx.endSection(); 1490 } 1491 1492 void teximage2d_invalid_border (NegativeTestContext& ctx) 1493 { 1494 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0."); 1495 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1496 ctx.expectError(GL_INVALID_VALUE); 1497 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1498 ctx.expectError(GL_INVALID_VALUE); 1499 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1500 ctx.expectError(GL_INVALID_VALUE); 1501 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1502 ctx.expectError(GL_INVALID_VALUE); 1503 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1504 ctx.expectError(GL_INVALID_VALUE); 1505 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1506 ctx.expectError(GL_INVALID_VALUE); 1507 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1508 ctx.expectError(GL_INVALID_VALUE); 1509 ctx.glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 0); 1510 ctx.expectError(GL_INVALID_VALUE); 1511 ctx.endSection(); 1512 } 1513 1514 void teximage2d_invalid_buffer_target (NegativeTestContext& ctx) 1515 { 1516 deUint32 buf = 0x1234; 1517 deUint32 texture = 0x1234; 1518 std::vector<GLubyte> data(64); 1519 1520 ctx.glGenBuffers (1, &buf); 1521 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 1522 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY); 1523 ctx.glGenTextures (1, &texture); 1524 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1525 ctx.expectError (GL_NO_ERROR); 1526 1527 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and..."); 1528 ctx.beginSection("...the buffer object's data store is currently mapped."); 1529 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 32, GL_MAP_WRITE_BIT); 1530 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1531 ctx.expectError (GL_INVALID_OPERATION); 1532 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 1533 ctx.endSection(); 1534 1535 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size."); 1536 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1537 ctx.expectError (GL_INVALID_OPERATION); 1538 ctx.endSection(); 1539 1540 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type."); 1541 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage; 1542 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB5_A1, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, (const GLvoid*)3); 1543 ctx.expectError (GL_INVALID_OPERATION); 1544 ctx.endSection(); 1545 ctx.endSection(); 1546 1547 ctx.glDeleteBuffers (1, &buf); 1548 ctx.glDeleteTextures (1, &texture); 1549 } 1550 1551 // glTexSubImage2D 1552 1553 void texsubimage2d (NegativeTestContext& ctx) 1554 { 1555 deUint32 texture = 0x1234; 1556 ctx.glGenTextures (1, &texture); 1557 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1558 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1559 ctx.expectError (GL_NO_ERROR); 1560 1561 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 1562 ctx.glTexSubImage2D(0, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1563 ctx.expectError(GL_INVALID_ENUM); 1564 ctx.endSection(); 1565 1566 ctx.beginSection("GL_INVALID_ENUM is generated if format is not an accepted format constant."); 1567 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 4, 4, GL_UNSIGNED_BYTE, 0); 1568 ctx.expectError(GL_INVALID_ENUM); 1569 ctx.endSection(); 1570 1571 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant."); 1572 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, 0, 0); 1573 ctx.expectError(GL_INVALID_ENUM); 1574 ctx.endSection(); 1575 1576 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat of the previously specified texture array, format and type is not valid."); 1577 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, 0); 1578 ctx.expectError(GL_INVALID_OPERATION); 1579 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0); 1580 ctx.expectError(GL_INVALID_OPERATION); 1581 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0); 1582 ctx.expectError(GL_INVALID_OPERATION); 1583 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0); 1584 ctx.expectError(GL_INVALID_OPERATION); 1585 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA_INTEGER, GL_UNSIGNED_INT, 0); 1586 ctx.expectError(GL_INVALID_OPERATION); 1587 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_FLOAT, 0); 1588 ctx.expectError(GL_INVALID_OPERATION); 1589 ctx.endSection(); 1590 1591 ctx.glDeleteTextures (1, &texture); 1592 } 1593 1594 void texsubimage2d_neg_level (NegativeTestContext& ctx) 1595 { 1596 deUint32 textures[2]; 1597 ctx.glGenTextures (2, &textures[0]); 1598 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]); 1599 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1600 ctx.glBindTexture (GL_TEXTURE_2D, textures[1]); 1601 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);); 1602 ctx.expectError (GL_NO_ERROR); 1603 1604 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 1605 ctx.glTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1606 ctx.expectError(GL_INVALID_VALUE); 1607 ctx.endSection(); 1608 1609 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 1610 FOR_CUBE_FACES(faceGL, 1611 { 1612 ctx.glTexSubImage2D(faceGL, -1, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1613 ctx.expectError(GL_INVALID_VALUE); 1614 }); 1615 ctx.endSection(); 1616 1617 ctx.glDeleteTextures(2, &textures[0]); 1618 } 1619 1620 void texsubimage2d_max_level (NegativeTestContext& ctx) 1621 { 1622 deUint32 textures[2]; 1623 ctx.glGenTextures (2, &textures[0]); 1624 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]); 1625 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1626 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]); 1627 FOR_CUBE_FACES(faceGL, ctx.glTexImage2D(faceGL, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);); 1628 ctx.expectError (GL_NO_ERROR); 1629 1630 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 1631 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 1632 ctx.glTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1633 ctx.expectError(GL_INVALID_VALUE); 1634 ctx.endSection(); 1635 1636 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE)."); 1637 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1; 1638 FOR_CUBE_FACES(faceGL, 1639 { 1640 ctx.glTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1641 ctx.expectError(GL_INVALID_VALUE); 1642 }); 1643 ctx.endSection(); 1644 1645 ctx.glDeleteTextures(2, &textures[0]); 1646 } 1647 1648 void texsubimage2d_neg_offset (NegativeTestContext& ctx) 1649 { 1650 deUint32 texture = 0x1234; 1651 ctx.glGenTextures(1, &texture); 1652 ctx.glBindTexture(GL_TEXTURE_2D, texture); 1653 ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1654 ctx.expectError(GL_NO_ERROR); 1655 1656 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset or yoffset are negative."); 1657 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, -1, 0, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1658 ctx.expectError(GL_INVALID_VALUE); 1659 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, -1, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1660 ctx.expectError(GL_INVALID_VALUE); 1661 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, -1, -1, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 1662 ctx.expectError(GL_INVALID_VALUE); 1663 ctx.endSection(); 1664 1665 ctx.glDeleteTextures(1, &texture); 1666 } 1667 1668 void texsubimage2d_invalid_offset (NegativeTestContext& ctx) 1669 { 1670 deUint32 texture = 0x1234; 1671 ctx.glGenTextures (1, &texture); 1672 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1673 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1674 ctx.expectError (GL_NO_ERROR); 1675 1676 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width or yoffset + height > texture_height."); 1677 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 30, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1678 ctx.expectError(GL_INVALID_VALUE); 1679 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 30, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1680 ctx.expectError(GL_INVALID_VALUE); 1681 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 30, 30, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1682 ctx.expectError(GL_INVALID_VALUE); 1683 ctx.endSection(); 1684 1685 ctx.glDeleteTextures (1, &texture); 1686 } 1687 1688 void texsubimage2d_neg_width_height (NegativeTestContext& ctx) 1689 { 1690 deUint32 texture = 0x1234; 1691 ctx.glGenTextures (1, &texture); 1692 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1693 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1694 ctx.expectError (GL_NO_ERROR); 1695 1696 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 1697 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1698 ctx.expectError(GL_INVALID_VALUE); 1699 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1700 ctx.expectError(GL_INVALID_VALUE); 1701 ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1702 ctx.expectError(GL_INVALID_VALUE); 1703 ctx.endSection(); 1704 1705 ctx.glDeleteTextures (1, &texture); 1706 } 1707 1708 void texsubimage2d_invalid_buffer_target (NegativeTestContext& ctx) 1709 { 1710 deUint32 buf = 0x1234; 1711 deUint32 texture = 0x1234; 1712 std::vector<GLubyte> data(64); 1713 1714 ctx.glGenTextures (1, &texture); 1715 ctx.glBindTexture (GL_TEXTURE_2D, texture); 1716 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1717 ctx.glGenBuffers (1, &buf); 1718 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 1719 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY); 1720 ctx.expectError (GL_NO_ERROR); 1721 1722 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and..."); 1723 ctx.beginSection("...the buffer object's data store is currently mapped."); 1724 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 32, GL_MAP_WRITE_BIT); 1725 ctx.glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1726 ctx.expectError (GL_INVALID_OPERATION); 1727 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 1728 ctx.endSection(); 1729 1730 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size."); 1731 ctx.glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 32, 32, GL_RGBA, GL_UNSIGNED_BYTE, 0); 1732 ctx.expectError (GL_INVALID_OPERATION); 1733 ctx.endSection(); 1734 1735 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type."); 1736 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage; 1737 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, 0); 1738 ctx.glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 0); 1739 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 1740 ctx.expectError (GL_NO_ERROR); 1741 ctx.glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, (const GLvoid*)3); 1742 ctx.expectError (GL_INVALID_OPERATION); 1743 ctx.endSection(); 1744 ctx.endSection(); 1745 1746 ctx.glDeleteBuffers (1, &buf); 1747 ctx.glDeleteTextures (1, &texture); 1748 } 1749 1750 // glTexParameteri 1751 1752 void texparameteri (NegativeTestContext& ctx) 1753 { 1754 GLuint texture = 0x1234; 1755 GLint textureMode = -1; 1756 1757 ctx.glGenTextures(1, &texture); 1758 ctx.glBindTexture(GL_TEXTURE_2D, texture); 1759 1760 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values."); 1761 ctx.glTexParameteri(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 1762 ctx.expectError(GL_INVALID_ENUM); 1763 ctx.glTexParameteri(GL_TEXTURE_2D, 0, GL_LINEAR); 1764 ctx.expectError(GL_INVALID_ENUM); 1765 ctx.glTexParameteri(0, 0, GL_LINEAR); 1766 ctx.expectError(GL_INVALID_ENUM); 1767 ctx.endSection(); 1768 1769 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 1770 ctx.glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode); 1771 ctx.expectError(GL_INVALID_ENUM); 1772 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode); 1773 ctx.expectError(GL_INVALID_ENUM); 1774 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode); 1775 ctx.expectError(GL_INVALID_ENUM); 1776 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode); 1777 ctx.expectError(GL_INVALID_ENUM); 1778 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode); 1779 ctx.expectError(GL_INVALID_ENUM); 1780 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode); 1781 ctx.expectError(GL_INVALID_ENUM); 1782 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode); 1783 ctx.expectError(GL_INVALID_ENUM); 1784 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode); 1785 ctx.expectError(GL_INVALID_ENUM); 1786 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode); 1787 ctx.expectError(GL_INVALID_ENUM); 1788 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode); 1789 ctx.expectError(GL_INVALID_ENUM); 1790 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode); 1791 ctx.expectError(GL_INVALID_ENUM); 1792 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode); 1793 ctx.expectError(GL_INVALID_ENUM); 1794 ctx.endSection(); 1795 1796 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative."); 1797 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, -1); 1798 ctx.expectError(GL_INVALID_VALUE); 1799 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, -1); 1800 ctx.expectError(GL_INVALID_VALUE); 1801 ctx.endSection(); 1802 1803 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 1804 { 1805 ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter."); 1806 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0); 1807 ctx.expectError(GL_INVALID_ENUM); 1808 ctx.endSection(); 1809 } 1810 1811 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."); 1812 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode); 1813 ctx.expectError(GL_INVALID_ENUM); 1814 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode); 1815 ctx.expectError(GL_INVALID_ENUM); 1816 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode); 1817 ctx.expectError(GL_INVALID_ENUM); 1818 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode); 1819 ctx.expectError(GL_INVALID_ENUM); 1820 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode); 1821 ctx.expectError(GL_INVALID_ENUM); 1822 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode); 1823 ctx.expectError(GL_INVALID_ENUM); 1824 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode); 1825 ctx.expectError(GL_INVALID_ENUM); 1826 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode); 1827 ctx.expectError(GL_INVALID_ENUM); 1828 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode); 1829 ctx.expectError(GL_INVALID_ENUM); 1830 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode); 1831 ctx.expectError(GL_INVALID_ENUM); 1832 1833 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 1834 { 1835 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode); 1836 ctx.expectError(GL_INVALID_ENUM); 1837 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode); 1838 ctx.expectError(GL_INVALID_ENUM); 1839 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode); 1840 ctx.expectError(GL_INVALID_ENUM); 1841 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode); 1842 ctx.expectError(GL_INVALID_ENUM); 1843 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode); 1844 ctx.expectError(GL_INVALID_ENUM); 1845 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode); 1846 ctx.expectError(GL_INVALID_ENUM); 1847 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode); 1848 ctx.expectError(GL_INVALID_ENUM); 1849 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode); 1850 ctx.expectError(GL_INVALID_ENUM); 1851 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode); 1852 ctx.expectError(GL_INVALID_ENUM); 1853 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode); 1854 ctx.expectError(GL_INVALID_ENUM); 1855 } 1856 ctx.endSection(); 1857 1858 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."); 1859 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1); 1860 ctx.expectError(GL_INVALID_OPERATION); 1861 1862 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 1863 { 1864 ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1); 1865 ctx.expectError(GL_INVALID_OPERATION); 1866 } 1867 ctx.endSection(); 1868 1869 ctx.glDeleteTextures(1, &texture); 1870 } 1871 1872 // glTexParameterf 1873 1874 void texparameterf (NegativeTestContext& ctx) 1875 { 1876 GLuint texture = 0x1234; 1877 GLfloat textureMode = -1.0f; 1878 ctx.glGenTextures(1, &texture); 1879 ctx.glBindTexture(GL_TEXTURE_2D, texture); 1880 1881 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values."); 1882 ctx.glTexParameterf(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 1883 ctx.expectError(GL_INVALID_ENUM); 1884 ctx.glTexParameterf(GL_TEXTURE_2D, 0, GL_LINEAR); 1885 ctx.expectError(GL_INVALID_ENUM); 1886 ctx.glTexParameterf(0, 0, GL_LINEAR); 1887 ctx.expectError(GL_INVALID_ENUM); 1888 ctx.endSection(); 1889 1890 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 1891 ctx.glTexParameterf(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode); 1892 ctx.expectError(GL_INVALID_ENUM); 1893 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode); 1894 ctx.expectError(GL_INVALID_ENUM); 1895 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode); 1896 ctx.expectError(GL_INVALID_ENUM); 1897 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode); 1898 ctx.expectError(GL_INVALID_ENUM); 1899 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode); 1900 ctx.expectError(GL_INVALID_ENUM); 1901 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode); 1902 ctx.expectError(GL_INVALID_ENUM); 1903 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode); 1904 ctx.expectError(GL_INVALID_ENUM); 1905 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode); 1906 ctx.expectError(GL_INVALID_ENUM); 1907 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode); 1908 ctx.expectError(GL_INVALID_ENUM); 1909 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode); 1910 ctx.expectError(GL_INVALID_ENUM); 1911 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode); 1912 ctx.expectError(GL_INVALID_ENUM); 1913 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode); 1914 ctx.expectError(GL_INVALID_ENUM); 1915 ctx.endSection(); 1916 1917 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative."); 1918 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, -1.0f); 1919 ctx.expectError(GL_INVALID_VALUE); 1920 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, -1.0f); 1921 ctx.expectError(GL_INVALID_VALUE); 1922 ctx.endSection(); 1923 1924 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 1925 { 1926 ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter."); 1927 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0.0f); 1928 ctx.expectError(GL_INVALID_ENUM); 1929 ctx.endSection(); 1930 } 1931 1932 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."); 1933 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode); 1934 ctx.expectError(GL_INVALID_ENUM); 1935 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode); 1936 ctx.expectError(GL_INVALID_ENUM); 1937 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode); 1938 ctx.expectError(GL_INVALID_ENUM); 1939 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode); 1940 ctx.expectError(GL_INVALID_ENUM); 1941 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode); 1942 ctx.expectError(GL_INVALID_ENUM); 1943 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode); 1944 ctx.expectError(GL_INVALID_ENUM); 1945 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode); 1946 ctx.expectError(GL_INVALID_ENUM); 1947 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode); 1948 ctx.expectError(GL_INVALID_ENUM); 1949 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode); 1950 ctx.expectError(GL_INVALID_ENUM); 1951 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode); 1952 ctx.expectError(GL_INVALID_ENUM); 1953 1954 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 1955 { 1956 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode); 1957 ctx.expectError(GL_INVALID_ENUM); 1958 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode); 1959 ctx.expectError(GL_INVALID_ENUM); 1960 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode); 1961 ctx.expectError(GL_INVALID_ENUM); 1962 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode); 1963 ctx.expectError(GL_INVALID_ENUM); 1964 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode); 1965 ctx.expectError(GL_INVALID_ENUM); 1966 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode); 1967 ctx.expectError(GL_INVALID_ENUM); 1968 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode); 1969 ctx.expectError(GL_INVALID_ENUM); 1970 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode); 1971 ctx.expectError(GL_INVALID_ENUM); 1972 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode); 1973 ctx.expectError(GL_INVALID_ENUM); 1974 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode); 1975 ctx.expectError(GL_INVALID_ENUM); 1976 } 1977 ctx.endSection(); 1978 1979 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."); 1980 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1.0f); 1981 ctx.expectError(GL_INVALID_OPERATION); 1982 1983 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 1984 { 1985 ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1.0f); 1986 ctx.expectError(GL_INVALID_OPERATION); 1987 } 1988 ctx.endSection(); 1989 1990 ctx.glDeleteTextures(1, &texture); 1991 } 1992 1993 // glTexParameteriv 1994 1995 void texparameteriv (NegativeTestContext& ctx) 1996 { 1997 GLint params[1] = {GL_LINEAR}; 1998 1999 GLuint texture = 0x1234; 2000 ctx.glGenTextures(1, &texture); 2001 ctx.glBindTexture(GL_TEXTURE_2D, texture); 2002 2003 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values."); 2004 ctx.glTexParameteriv(0, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2005 ctx.expectError(GL_INVALID_ENUM); 2006 ctx.glTexParameteriv(GL_TEXTURE_2D, 0, ¶ms[0]); 2007 ctx.expectError(GL_INVALID_ENUM); 2008 ctx.glTexParameteriv(0, 0, ¶ms[0]); 2009 ctx.expectError(GL_INVALID_ENUM); 2010 ctx.endSection(); 2011 2012 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2013 params[0] = -1; 2014 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, ¶ms[0]); 2015 ctx.expectError(GL_INVALID_ENUM); 2016 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2017 ctx.expectError(GL_INVALID_ENUM); 2018 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2019 ctx.expectError(GL_INVALID_ENUM); 2020 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2021 ctx.expectError(GL_INVALID_ENUM); 2022 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2023 ctx.expectError(GL_INVALID_ENUM); 2024 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, ¶ms[0]); 2025 ctx.expectError(GL_INVALID_ENUM); 2026 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, ¶ms[0]); 2027 ctx.expectError(GL_INVALID_ENUM); 2028 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, ¶ms[0]); 2029 ctx.expectError(GL_INVALID_ENUM); 2030 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, ¶ms[0]); 2031 ctx.expectError(GL_INVALID_ENUM); 2032 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]); 2033 ctx.expectError(GL_INVALID_ENUM); 2034 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]); 2035 ctx.expectError(GL_INVALID_ENUM); 2036 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, ¶ms[0]); 2037 ctx.expectError(GL_INVALID_ENUM); 2038 ctx.endSection(); 2039 2040 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative."); 2041 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2042 ctx.expectError(GL_INVALID_VALUE); 2043 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, ¶ms[0]); 2044 ctx.expectError(GL_INVALID_VALUE); 2045 ctx.endSection(); 2046 2047 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."); 2048 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, ¶ms[0]); 2049 ctx.expectError(GL_INVALID_ENUM); 2050 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2051 ctx.expectError(GL_INVALID_ENUM); 2052 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2053 ctx.expectError(GL_INVALID_ENUM); 2054 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, ¶ms[0]); 2055 ctx.expectError(GL_INVALID_ENUM); 2056 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, ¶ms[0]); 2057 ctx.expectError(GL_INVALID_ENUM); 2058 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, ¶ms[0]); 2059 ctx.expectError(GL_INVALID_ENUM); 2060 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2061 ctx.expectError(GL_INVALID_ENUM); 2062 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2063 ctx.expectError(GL_INVALID_ENUM); 2064 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2065 ctx.expectError(GL_INVALID_ENUM); 2066 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2067 ctx.expectError(GL_INVALID_ENUM); 2068 2069 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2070 { 2071 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, ¶ms[0]); 2072 ctx.expectError(GL_INVALID_ENUM); 2073 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2074 ctx.expectError(GL_INVALID_ENUM); 2075 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2076 ctx.expectError(GL_INVALID_ENUM); 2077 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, ¶ms[0]); 2078 ctx.expectError(GL_INVALID_ENUM); 2079 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, ¶ms[0]); 2080 ctx.expectError(GL_INVALID_ENUM); 2081 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, ¶ms[0]); 2082 ctx.expectError(GL_INVALID_ENUM); 2083 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2084 ctx.expectError(GL_INVALID_ENUM); 2085 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2086 ctx.expectError(GL_INVALID_ENUM); 2087 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2088 ctx.expectError(GL_INVALID_ENUM); 2089 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2090 ctx.expectError(GL_INVALID_ENUM); 2091 } 2092 ctx.endSection(); 2093 2094 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."); 2095 params[0] = 1; 2096 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2097 ctx.expectError(GL_INVALID_OPERATION); 2098 2099 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2100 { 2101 params[0] = 1; 2102 ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2103 ctx.expectError(GL_INVALID_OPERATION); 2104 } 2105 ctx.endSection(); 2106 2107 ctx.glDeleteTextures(1, &texture); 2108 } 2109 2110 // glTexParameterfv 2111 2112 void texparameterfv (NegativeTestContext& ctx) 2113 { 2114 GLfloat params[1] = {GL_LINEAR}; 2115 GLuint texture = 0x1234; 2116 ctx.glGenTextures(1, &texture); 2117 ctx.glBindTexture(GL_TEXTURE_2D, texture); 2118 2119 ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values."); 2120 params[0] = GL_LINEAR; 2121 ctx.glTexParameterfv(0, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2122 ctx.expectError(GL_INVALID_ENUM); 2123 ctx.glTexParameterfv(GL_TEXTURE_2D, 0, ¶ms[0]); 2124 ctx.expectError(GL_INVALID_ENUM); 2125 ctx.glTexParameterfv(0, 0, ¶ms[0]); 2126 ctx.expectError(GL_INVALID_ENUM); 2127 ctx.endSection(); 2128 2129 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2130 params[0] = -1.0f; 2131 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, ¶ms[0]); 2132 ctx.expectError(GL_INVALID_ENUM); 2133 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2134 ctx.expectError(GL_INVALID_ENUM); 2135 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2136 ctx.expectError(GL_INVALID_ENUM); 2137 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2138 ctx.expectError(GL_INVALID_ENUM); 2139 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2140 ctx.expectError(GL_INVALID_ENUM); 2141 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, ¶ms[0]); 2142 ctx.expectError(GL_INVALID_ENUM); 2143 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, ¶ms[0]); 2144 ctx.expectError(GL_INVALID_ENUM); 2145 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, ¶ms[0]); 2146 ctx.expectError(GL_INVALID_ENUM); 2147 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, ¶ms[0]); 2148 ctx.expectError(GL_INVALID_ENUM); 2149 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]); 2150 ctx.expectError(GL_INVALID_ENUM); 2151 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]); 2152 ctx.expectError(GL_INVALID_ENUM); 2153 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, ¶ms[0]); 2154 ctx.expectError(GL_INVALID_ENUM); 2155 ctx.endSection(); 2156 2157 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative."); 2158 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2159 ctx.expectError(GL_INVALID_VALUE); 2160 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, ¶ms[0]); 2161 ctx.expectError(GL_INVALID_VALUE); 2162 ctx.endSection(); 2163 2164 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."); 2165 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, ¶ms[0]); 2166 ctx.expectError(GL_INVALID_ENUM); 2167 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2168 ctx.expectError(GL_INVALID_ENUM); 2169 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2170 ctx.expectError(GL_INVALID_ENUM); 2171 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, ¶ms[0]); 2172 ctx.expectError(GL_INVALID_ENUM); 2173 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, ¶ms[0]); 2174 ctx.expectError(GL_INVALID_ENUM); 2175 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, ¶ms[0]); 2176 ctx.expectError(GL_INVALID_ENUM); 2177 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2178 ctx.expectError(GL_INVALID_ENUM); 2179 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2180 ctx.expectError(GL_INVALID_ENUM); 2181 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2182 ctx.expectError(GL_INVALID_ENUM); 2183 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2184 ctx.expectError(GL_INVALID_ENUM); 2185 2186 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2187 { 2188 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, ¶ms[0]); 2189 ctx.expectError(GL_INVALID_ENUM); 2190 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, ¶ms[0]); 2191 ctx.expectError(GL_INVALID_ENUM); 2192 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, ¶ms[0]); 2193 ctx.expectError(GL_INVALID_ENUM); 2194 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, ¶ms[0]); 2195 ctx.expectError(GL_INVALID_ENUM); 2196 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, ¶ms[0]); 2197 ctx.expectError(GL_INVALID_ENUM); 2198 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, ¶ms[0]); 2199 ctx.expectError(GL_INVALID_ENUM); 2200 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, ¶ms[0]); 2201 ctx.expectError(GL_INVALID_ENUM); 2202 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, ¶ms[0]); 2203 ctx.expectError(GL_INVALID_ENUM); 2204 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, ¶ms[0]); 2205 ctx.expectError(GL_INVALID_ENUM); 2206 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]); 2207 ctx.expectError(GL_INVALID_ENUM); 2208 } 2209 ctx.endSection(); 2210 2211 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."); 2212 params[0] = 1.0f; 2213 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2214 ctx.expectError(GL_INVALID_OPERATION); 2215 2216 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array")) 2217 { 2218 params[0] = 1.0f; 2219 ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, ¶ms[0]); 2220 ctx.expectError(GL_INVALID_OPERATION); 2221 } 2222 ctx.endSection(); 2223 2224 ctx.glDeleteTextures(1, &texture); 2225 } 2226 2227 // glTexParameterIiv 2228 2229 void texparameterIiv (NegativeTestContext& ctx) 2230 { 2231 if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 2232 throw tcu::NotSupportedError("glTexParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__); 2233 2234 GLint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX }; 2235 ctx.beginSection("GL_INVALID_ENUM is generated if target is not a valid target."); 2236 ctx.glTexParameterIiv(0, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode); 2237 ctx.expectError(GL_INVALID_ENUM); 2238 ctx.endSection(); 2239 2240 ctx.beginSection("GL_INVALID_ENUM is generated if pname is not a valid parameter."); 2241 ctx.glTexParameterIiv(GL_TEXTURE_2D, 0, textureMode); 2242 ctx.expectError(GL_INVALID_ENUM); 2243 ctx.endSection(); 2244 2245 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2246 textureMode[0] = -1; 2247 textureMode[1] = -1; 2248 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode); 2249 ctx.expectError(GL_INVALID_ENUM); 2250 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode); 2251 ctx.expectError(GL_INVALID_ENUM); 2252 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode); 2253 ctx.expectError(GL_INVALID_ENUM); 2254 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode); 2255 ctx.expectError(GL_INVALID_ENUM); 2256 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode); 2257 ctx.expectError(GL_INVALID_ENUM); 2258 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode); 2259 ctx.expectError(GL_INVALID_ENUM); 2260 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode); 2261 ctx.expectError(GL_INVALID_ENUM); 2262 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode); 2263 ctx.expectError(GL_INVALID_ENUM); 2264 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode); 2265 ctx.expectError(GL_INVALID_ENUM); 2266 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode); 2267 ctx.expectError(GL_INVALID_ENUM); 2268 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode); 2269 ctx.expectError(GL_INVALID_ENUM); 2270 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode); 2271 ctx.expectError(GL_INVALID_ENUM); 2272 ctx.endSection(); 2273 2274 ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative."); 2275 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, textureMode); 2276 ctx.expectError(GL_INVALID_VALUE); 2277 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, textureMode); 2278 ctx.expectError(GL_INVALID_VALUE); 2279 ctx.endSection(); 2280 2281 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."); 2282 textureMode[0] = 0; 2283 textureMode[1] = 0; 2284 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode); 2285 ctx.expectError(GL_INVALID_ENUM); 2286 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode); 2287 ctx.expectError(GL_INVALID_ENUM); 2288 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode); 2289 ctx.expectError(GL_INVALID_ENUM); 2290 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode); 2291 ctx.expectError(GL_INVALID_ENUM); 2292 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode); 2293 ctx.expectError(GL_INVALID_ENUM); 2294 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode); 2295 ctx.expectError(GL_INVALID_ENUM); 2296 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode); 2297 ctx.expectError(GL_INVALID_ENUM); 2298 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode); 2299 ctx.expectError(GL_INVALID_ENUM); 2300 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode); 2301 ctx.expectError(GL_INVALID_ENUM); 2302 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode); 2303 ctx.expectError(GL_INVALID_ENUM); 2304 2305 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode); 2306 ctx.expectError(GL_INVALID_ENUM); 2307 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode); 2308 ctx.expectError(GL_INVALID_ENUM); 2309 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode); 2310 ctx.expectError(GL_INVALID_ENUM); 2311 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode); 2312 ctx.expectError(GL_INVALID_ENUM); 2313 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode); 2314 ctx.expectError(GL_INVALID_ENUM); 2315 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode); 2316 ctx.expectError(GL_INVALID_ENUM); 2317 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode); 2318 ctx.expectError(GL_INVALID_ENUM); 2319 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode); 2320 ctx.expectError(GL_INVALID_ENUM); 2321 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode); 2322 ctx.expectError(GL_INVALID_ENUM); 2323 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode); 2324 ctx.expectError(GL_INVALID_ENUM); 2325 ctx.endSection(); 2326 2327 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."); 2328 textureMode[0] = 1; 2329 textureMode[1] = 1; 2330 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, textureMode); 2331 ctx.expectError(GL_INVALID_OPERATION); 2332 ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, textureMode); 2333 ctx.expectError(GL_INVALID_OPERATION); 2334 ctx.endSection(); 2335 } 2336 2337 // glTexParameterIuiv 2338 2339 void texparameterIuiv (NegativeTestContext& ctx) 2340 { 2341 if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 2342 throw tcu::NotSupportedError("glTexParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__); 2343 2344 GLuint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX }; 2345 ctx.beginSection("GL_INVALID_ENUM is generated if target is not a valid target."); 2346 ctx.glTexParameterIuiv(0, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode); 2347 ctx.expectError(GL_INVALID_ENUM); 2348 ctx.endSection(); 2349 2350 ctx.beginSection("GL_INVALID_ENUM is generated if pname is not a valid parameter."); 2351 ctx.glTexParameterIuiv(GL_TEXTURE_2D, 0, textureMode); 2352 ctx.expectError(GL_INVALID_ENUM); 2353 ctx.endSection(); 2354 2355 ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value."); 2356 textureMode[0] = GL_DONT_CARE; 2357 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode); 2358 ctx.expectError(GL_INVALID_ENUM); 2359 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode); 2360 ctx.expectError(GL_INVALID_ENUM); 2361 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode); 2362 ctx.expectError(GL_INVALID_ENUM); 2363 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode); 2364 ctx.expectError(GL_INVALID_ENUM); 2365 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode); 2366 ctx.expectError(GL_INVALID_ENUM); 2367 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode); 2368 ctx.expectError(GL_INVALID_ENUM); 2369 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode); 2370 ctx.expectError(GL_INVALID_ENUM); 2371 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode); 2372 ctx.expectError(GL_INVALID_ENUM); 2373 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode); 2374 ctx.expectError(GL_INVALID_ENUM); 2375 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode); 2376 ctx.expectError(GL_INVALID_ENUM); 2377 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode); 2378 ctx.expectError(GL_INVALID_ENUM); 2379 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode); 2380 ctx.expectError(GL_INVALID_ENUM); 2381 ctx.endSection(); 2382 2383 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."); 2384 textureMode[0] = 0; 2385 textureMode[1] = 0; 2386 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode); 2387 ctx.expectError(GL_INVALID_ENUM); 2388 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode); 2389 ctx.expectError(GL_INVALID_ENUM); 2390 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode); 2391 ctx.expectError(GL_INVALID_ENUM); 2392 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode); 2393 ctx.expectError(GL_INVALID_ENUM); 2394 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode); 2395 ctx.expectError(GL_INVALID_ENUM); 2396 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode); 2397 ctx.expectError(GL_INVALID_ENUM); 2398 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode); 2399 ctx.expectError(GL_INVALID_ENUM); 2400 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode); 2401 ctx.expectError(GL_INVALID_ENUM); 2402 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode); 2403 ctx.expectError(GL_INVALID_ENUM); 2404 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode); 2405 ctx.expectError(GL_INVALID_ENUM); 2406 2407 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode); 2408 ctx.expectError(GL_INVALID_ENUM); 2409 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode); 2410 ctx.expectError(GL_INVALID_ENUM); 2411 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode); 2412 ctx.expectError(GL_INVALID_ENUM); 2413 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode); 2414 ctx.expectError(GL_INVALID_ENUM); 2415 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode); 2416 ctx.expectError(GL_INVALID_ENUM); 2417 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode); 2418 ctx.expectError(GL_INVALID_ENUM); 2419 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode); 2420 ctx.expectError(GL_INVALID_ENUM); 2421 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode); 2422 ctx.expectError(GL_INVALID_ENUM); 2423 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode); 2424 ctx.expectError(GL_INVALID_ENUM); 2425 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode); 2426 ctx.expectError(GL_INVALID_ENUM); 2427 ctx.endSection(); 2428 2429 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."); 2430 textureMode[0] = 1; 2431 textureMode[1] = 1; 2432 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, textureMode); 2433 ctx.expectError(GL_INVALID_OPERATION); 2434 ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, textureMode); 2435 ctx.expectError(GL_INVALID_OPERATION); 2436 ctx.endSection(); 2437 } 2438 2439 // glCompressedTexSubImage2D 2440 2441 void compressedtexsubimage2d (NegativeTestContext& ctx) 2442 { 2443 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 2444 ctx.glCompressedTexSubImage2D(0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGB8_ETC2, 0, 0); 2445 ctx.expectError(GL_INVALID_ENUM); 2446 ctx.endSection(); 2447 2448 deUint32 texture = 0x1234; 2449 ctx.glGenTextures (1, &texture); 2450 ctx.glBindTexture (GL_TEXTURE_2D, texture); 2451 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0); 2452 ctx.expectError (GL_NO_ERROR); 2453 2454 ctx.beginSection("GL_INVALID_OPERATION is generated if format does not match the internal format of the texture image being modified."); 2455 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_COMPRESSED_RGB8_ETC2, 0, 0); 2456 ctx.expectError(GL_INVALID_OPERATION); 2457 ctx.endSection(); 2458 2459 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."); 2460 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 4, 0, 10, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(10, 4), 0); 2461 ctx.expectError(GL_INVALID_OPERATION); 2462 ctx.endSection(); 2463 2464 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."); 2465 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 4, 4, 10, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 10), 0); 2466 ctx.expectError(GL_INVALID_OPERATION); 2467 ctx.endSection(); 2468 2469 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if xoffset or yoffset is not a multiple of four."); 2470 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 1, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 2471 ctx.expectError(GL_INVALID_OPERATION); 2472 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 1, 0, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 2473 ctx.expectError(GL_INVALID_OPERATION); 2474 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 1, 1, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 2475 ctx.expectError(GL_INVALID_OPERATION); 2476 ctx.endSection(); 2477 2478 ctx.glDeleteTextures (1, &texture); 2479 } 2480 2481 void compressedtexsubimage2d_neg_level (NegativeTestContext& ctx) 2482 { 2483 deUint32 textures[2]; 2484 ctx.glGenTextures (2, &textures[0]); 2485 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]); 2486 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0); 2487 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]); 2488 FOR_CUBE_FACES(faceGL, ctx.glCompressedTexImage2D(faceGL, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0);); 2489 ctx.expectError (GL_NO_ERROR); 2490 2491 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 2492 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, -1, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2493 ctx.expectError(GL_INVALID_VALUE); 2494 ctx.endSection(); 2495 2496 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 2497 FOR_CUBE_FACES(faceGL, 2498 { 2499 ctx.glCompressedTexSubImage2D(faceGL, -1, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2500 ctx.expectError(GL_INVALID_VALUE); 2501 }); 2502 ctx.endSection(); 2503 2504 ctx.glDeleteTextures(2, &textures[0]); 2505 } 2506 2507 void compressedtexsubimage2d_max_level (NegativeTestContext& ctx) 2508 { 2509 deUint32 textures[2]; 2510 ctx.glGenTextures (2, &textures[0]); 2511 ctx.glBindTexture (GL_TEXTURE_2D, textures[0]); 2512 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0); 2513 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP, textures[1]); 2514 FOR_CUBE_FACES(faceGL, ctx.glCompressedTexImage2D(faceGL, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 0, etc2EacDataSize(18, 18), 0);); 2515 ctx.expectError (GL_NO_ERROR); 2516 2517 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 2518 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 2519 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2520 ctx.expectError(GL_INVALID_VALUE); 2521 ctx.endSection(); 2522 2523 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE)."); 2524 deUint32 log2MaxCubemapSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1; 2525 FOR_CUBE_FACES(faceGL, 2526 { 2527 ctx.glCompressedTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2528 ctx.expectError(GL_INVALID_VALUE); 2529 }); 2530 ctx.endSection(); 2531 2532 ctx.glDeleteTextures(2, &textures[0]); 2533 } 2534 2535 void compressedtexsubimage2d_neg_offset (NegativeTestContext& ctx) 2536 { 2537 GLuint texture = 0x1234; 2538 ctx.glGenTextures(1, &texture); 2539 ctx.glBindTexture(GL_TEXTURE_2D, texture); 2540 ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 8, 8, 0, etc2EacDataSize(8, 8), 0); 2541 2542 // \note Both GL_INVALID_VALUE and GL_INVALID_OPERATION are valid here since implementation may 2543 // first check if offsets are valid for certain format and only after that check that they 2544 // are not negative. 2545 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset or yoffset are negative."); 2546 2547 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, -4, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2548 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2549 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, -4, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2550 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2551 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, -4, -4, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2552 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2553 2554 ctx.endSection(); 2555 2556 ctx.glDeleteTextures(1, &texture); 2557 } 2558 2559 void compressedtexsubimage2d_invalid_offset (NegativeTestContext& ctx) 2560 { 2561 deUint32 texture = 0x1234; 2562 ctx.glGenTextures (1, &texture); 2563 ctx.glBindTexture (GL_TEXTURE_2D, texture); 2564 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0); 2565 ctx.expectError (GL_NO_ERROR); 2566 2567 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset + width > texture_width or yoffset + height > texture_height."); 2568 2569 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 12, 0, 8, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 4), 0); 2570 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2571 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 12, 4, 8, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 8), 0); 2572 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2573 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 12, 12, 8, 8, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 8), 0); 2574 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2575 ctx.endSection(); 2576 2577 ctx.glDeleteTextures (1, &texture); 2578 } 2579 2580 void compressedtexsubimage2d_neg_width_height (NegativeTestContext& ctx) 2581 { 2582 deUint32 texture = 0x1234; 2583 ctx.glGenTextures (1, &texture); 2584 ctx.glBindTexture (GL_TEXTURE_2D, texture); 2585 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0); 2586 ctx.expectError (GL_NO_ERROR); 2587 2588 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if width or height is less than 0."); 2589 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -4, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2590 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2591 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2592 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2593 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -4, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 2594 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 2595 ctx.endSection(); 2596 2597 ctx.glDeleteTextures(1, &texture); 2598 } 2599 2600 void compressedtexsubimage2d_invalid_size (NegativeTestContext& ctx) 2601 { 2602 deUint32 texture = 0x1234; 2603 ctx.glGenTextures (1, &texture); 2604 ctx.glBindTexture (GL_TEXTURE_2D, texture); 2605 ctx.glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, etc2EacDataSize(16, 16), 0); 2606 ctx.expectError (GL_NO_ERROR); 2607 2608 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data."); 2609 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0); 2610 ctx.expectError(GL_INVALID_VALUE); 2611 2612 ctx.glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 16, 16, GL_COMPRESSED_RGBA8_ETC2_EAC, 4*4*16-1, 0); 2613 ctx.expectError(GL_INVALID_VALUE); 2614 ctx.endSection(); 2615 2616 ctx.glDeleteTextures (1, &texture); 2617 } 2618 2619 void compressedtexsubimage2d_invalid_buffer_target (NegativeTestContext& ctx) 2620 { 2621 deUint32 buf = 0x1234; 2622 deUint32 texture = 0x1234; 2623 std::vector<GLubyte> data(128); 2624 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.glGenBuffers (1, &buf); 2629 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 2630 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 128, &data[0], GL_DYNAMIC_COPY); 2631 ctx.expectError (GL_NO_ERROR); 2632 2633 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and..."); 2634 ctx.beginSection("...the buffer object's data store is currently mapped."); 2635 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 128, GL_MAP_WRITE_BIT); 2636 ctx.glCompressedTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 2637 ctx.expectError (GL_INVALID_OPERATION); 2638 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 2639 ctx.endSection(); 2640 2641 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size."); 2642 ctx.glCompressedTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 16, 16, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(16, 16), 0); 2643 ctx.expectError (GL_INVALID_OPERATION); 2644 ctx.endSection(); 2645 ctx.endSection(); 2646 2647 ctx.glDeleteBuffers (1, &buf); 2648 ctx.glDeleteTextures (1, &texture); 2649 } 2650 2651 // glTexImage3D 2652 2653 void teximage3d (NegativeTestContext& ctx) 2654 { 2655 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 2656 ctx.glTexImage3D(0, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2657 ctx.expectError(GL_INVALID_ENUM); 2658 ctx.glTexImage3D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2659 ctx.expectError(GL_INVALID_ENUM); 2660 ctx.endSection(); 2661 2662 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant."); 2663 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, 0, 0); 2664 ctx.expectError(GL_INVALID_ENUM); 2665 ctx.endSection(); 2666 2667 ctx.beginSection("GL_INVALID_ENUM is generated if format is not an accepted format constant."); 2668 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, 1, 0, 0, GL_UNSIGNED_BYTE, 0); 2669 ctx.expectError(GL_INVALID_ENUM); 2670 ctx.endSection(); 2671 2672 ctx.beginSection("GL_INVALID_VALUE is generated if internalFormat is not one of the accepted resolution and format symbolic constants."); 2673 ctx.glTexImage3D(GL_TEXTURE_3D, 0, 0, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2674 ctx.expectError(GL_INVALID_VALUE); 2675 ctx.endSection(); 2676 2677 ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_3D and format is GL_DEPTH_COMPONENT, or GL_DEPTH_STENCIL."); 2678 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_DEPTH_STENCIL, 1, 1, 1, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0); 2679 ctx.expectError(GL_INVALID_OPERATION); 2680 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_DEPTH_COMPONENT, 1, 1, 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); 2681 ctx.expectError(GL_INVALID_OPERATION); 2682 ctx.endSection(); 2683 2684 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat, format and type is invalid."); 2685 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2686 ctx.expectError(GL_INVALID_OPERATION); 2687 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0); 2688 ctx.expectError(GL_INVALID_OPERATION); 2689 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB5_A1, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0); 2690 ctx.expectError(GL_INVALID_OPERATION); 2691 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB10_A2, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_INT_2_10_10_10_REV, 0); 2692 ctx.expectError(GL_INVALID_OPERATION); 2693 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32UI, 1, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0); 2694 ctx.expectError(GL_INVALID_OPERATION); 2695 ctx.endSection(); 2696 2697 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2698 { 2699 ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and width and height are not equal."); 2700 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 2, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2701 ctx.expectError(GL_INVALID_VALUE); 2702 ctx.endSection(); 2703 2704 ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and depth is not a multiple of six."); 2705 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2706 ctx.expectError(GL_INVALID_VALUE); 2707 ctx.endSection(); 2708 } 2709 } 2710 2711 void teximage3d_neg_level (NegativeTestContext& ctx) 2712 { 2713 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 2714 ctx.glTexImage3D(GL_TEXTURE_3D, -1, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 2715 ctx.expectError(GL_INVALID_VALUE); 2716 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, -1, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 2717 ctx.expectError(GL_INVALID_VALUE); 2718 2719 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2720 { 2721 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, GL_RGBA, 1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2722 ctx.expectError(GL_INVALID_VALUE); 2723 } 2724 2725 ctx.endSection(); 2726 2727 } 2728 2729 void teximage3d_max_level (NegativeTestContext& ctx) 2730 { 2731 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_3D_TEXTURE_SIZE)."); 2732 deUint32 log2Max3DTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1; 2733 ctx.glTexImage3D(GL_TEXTURE_3D, log2Max3DTextureSize, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 2734 ctx.expectError(GL_INVALID_VALUE); 2735 ctx.endSection(); 2736 2737 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 2738 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 2739 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 2740 ctx.expectError(GL_INVALID_VALUE); 2741 ctx.endSection(); 2742 } 2743 2744 void teximage3d_neg_width_height_depth (NegativeTestContext& ctx) 2745 { 2746 ctx.beginSection("GL_INVALID_VALUE is generated if width or height is less than 0."); 2747 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, -1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2748 ctx.expectError(GL_INVALID_VALUE); 2749 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, -1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2750 ctx.expectError(GL_INVALID_VALUE); 2751 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2752 ctx.expectError(GL_INVALID_VALUE); 2753 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, -1, -1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2754 ctx.expectError(GL_INVALID_VALUE); 2755 2756 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, -1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2757 ctx.expectError(GL_INVALID_VALUE); 2758 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, -1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2759 ctx.expectError(GL_INVALID_VALUE); 2760 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, 1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2761 ctx.expectError(GL_INVALID_VALUE); 2762 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, -1, -1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2763 ctx.expectError(GL_INVALID_VALUE); 2764 2765 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2766 { 2767 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, -1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2768 ctx.expectError(GL_INVALID_VALUE); 2769 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, -1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2770 ctx.expectError(GL_INVALID_VALUE); 2771 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, 1, -6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2772 ctx.expectError(GL_INVALID_VALUE); 2773 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, -1, -1, -6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2774 ctx.expectError(GL_INVALID_VALUE); 2775 } 2776 ctx.endSection(); 2777 } 2778 2779 void teximage3d_max_width_height_depth (NegativeTestContext& ctx) 2780 { 2781 int max3DTextureSize = ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE) + 1; 2782 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 2783 2784 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is greater than GL_MAX_3D_TEXTURE_SIZE."); 2785 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, max3DTextureSize, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2786 ctx.expectError(GL_INVALID_VALUE); 2787 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, max3DTextureSize, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2788 ctx.expectError(GL_INVALID_VALUE); 2789 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, max3DTextureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2790 ctx.expectError(GL_INVALID_VALUE); 2791 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, max3DTextureSize, max3DTextureSize, max3DTextureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2792 ctx.expectError(GL_INVALID_VALUE); 2793 ctx.endSection(); 2794 2795 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is greater than GL_MAX_TEXTURE_SIZE."); 2796 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, maxTextureSize, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2797 ctx.expectError(GL_INVALID_VALUE); 2798 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, maxTextureSize, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2799 ctx.expectError(GL_INVALID_VALUE); 2800 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 1, 1, maxTextureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2801 ctx.expectError(GL_INVALID_VALUE); 2802 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, maxTextureSize, maxTextureSize, maxTextureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2803 ctx.expectError(GL_INVALID_VALUE); 2804 ctx.endSection(); 2805 } 2806 2807 void teximage3d_invalid_border (NegativeTestContext& ctx) 2808 { 2809 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0 or 1."); 2810 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 0); 2811 ctx.expectError(GL_INVALID_VALUE); 2812 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, 2, GL_RGB, GL_UNSIGNED_BYTE, 0); 2813 ctx.expectError(GL_INVALID_VALUE); 2814 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, 1, 1, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 0); 2815 ctx.expectError(GL_INVALID_VALUE); 2816 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, 1, 1, 1, 2, GL_RGB, GL_UNSIGNED_BYTE, 0); 2817 ctx.expectError(GL_INVALID_VALUE); 2818 2819 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2820 { 2821 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA, 1, 1, 6, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2822 ctx.expectError(GL_INVALID_VALUE); 2823 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA, 1, 1, 6, 1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2824 ctx.expectError(GL_INVALID_VALUE); 2825 } 2826 2827 ctx.endSection(); 2828 } 2829 2830 void teximage3d_invalid_buffer_target (NegativeTestContext& ctx) 2831 { 2832 deUint32 buf = 0x1234; 2833 deUint32 texture = 0x1234; 2834 std::vector<GLubyte> data(512); 2835 2836 ctx.glGenBuffers (1, &buf); 2837 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 2838 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 512, &data[0], GL_DYNAMIC_COPY); 2839 ctx.glGenTextures (1, &texture); 2840 ctx.glBindTexture (GL_TEXTURE_3D, texture); 2841 ctx.expectError (GL_NO_ERROR); 2842 2843 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and..."); 2844 2845 ctx.beginSection("...the buffer object's data store is currently mapped."); 2846 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 128, GL_MAP_WRITE_BIT); 2847 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2848 ctx.expectError (GL_INVALID_OPERATION); 2849 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 2850 ctx.endSection(); 2851 2852 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size."); 2853 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 64, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2854 ctx.expectError (GL_INVALID_OPERATION); 2855 ctx.endSection(); 2856 2857 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type."); 2858 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage; 2859 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); 2860 ctx.expectError (GL_INVALID_OPERATION); 2861 ctx.endSection(); 2862 2863 ctx.endSection(); 2864 2865 ctx.glDeleteBuffers (1, &buf); 2866 ctx.glDeleteTextures (1, &texture); 2867 } 2868 2869 // glTexSubImage3D 2870 2871 void texsubimage3d (NegativeTestContext& ctx) 2872 { 2873 deUint32 texture = 0x1234; 2874 ctx.glGenTextures (1, &texture); 2875 ctx.glBindTexture (GL_TEXTURE_3D, texture); 2876 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2877 ctx.expectError (GL_NO_ERROR); 2878 2879 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 2880 ctx.glTexSubImage3D(0, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2881 ctx.expectError(GL_INVALID_ENUM); 2882 ctx.glTexSubImage3D(GL_TEXTURE_2D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2883 ctx.expectError(GL_INVALID_ENUM); 2884 ctx.endSection(); 2885 2886 ctx.beginSection("GL_INVALID_ENUM is generated if format is not an accepted format constant."); 2887 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 4, 4, 4, GL_UNSIGNED_BYTE, 0); 2888 ctx.expectError(GL_INVALID_ENUM); 2889 ctx.endSection(); 2890 2891 ctx.beginSection("GL_INVALID_ENUM is generated if type is not a type constant."); 2892 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, 0, 0); 2893 ctx.expectError(GL_INVALID_ENUM); 2894 ctx.endSection(); 2895 2896 ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat of the previously specified texture array, format and type is not valid."); 2897 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0); 2898 ctx.expectError(GL_INVALID_OPERATION); 2899 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0); 2900 ctx.expectError(GL_INVALID_OPERATION); 2901 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0); 2902 ctx.expectError(GL_INVALID_OPERATION); 2903 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA_INTEGER, GL_UNSIGNED_INT, 0); 2904 ctx.expectError(GL_INVALID_OPERATION); 2905 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_FLOAT, 0); 2906 ctx.expectError(GL_INVALID_OPERATION); 2907 ctx.endSection(); 2908 2909 ctx.glDeleteTextures (1, &texture); 2910 } 2911 2912 void texsubimage3d_neg_level (NegativeTestContext& ctx) 2913 { 2914 deUint32 textures[3]; 2915 ctx.glGenTextures (3, &textures[0]); 2916 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]); 2917 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2918 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, textures[1]); 2919 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2920 ctx.expectError (GL_NO_ERROR); 2921 2922 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 2923 ctx.glTexSubImage3D(GL_TEXTURE_3D, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2924 ctx.expectError(GL_INVALID_VALUE); 2925 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2926 ctx.expectError(GL_INVALID_VALUE); 2927 2928 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2929 { 2930 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]); 2931 ctx.glTexImage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2932 ctx.expectError (GL_NO_ERROR); 2933 2934 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2935 ctx.expectError(GL_INVALID_VALUE); 2936 } 2937 2938 ctx.endSection(); 2939 2940 ctx.glDeleteTextures (3, &textures[0]); 2941 } 2942 2943 void texsubimage3d_max_level (NegativeTestContext& ctx) 2944 { 2945 deUint32 textures[2]; 2946 ctx.glGenTextures (2, &textures[0]); 2947 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]); 2948 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2949 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, textures[1]); 2950 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2951 ctx.expectError (GL_NO_ERROR); 2952 2953 deUint32 log2Max3DTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1; 2954 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 2955 2956 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_3D_TEXTURE_SIZE)."); 2957 ctx.glTexSubImage3D(GL_TEXTURE_3D, log2Max3DTextureSize, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2958 ctx.expectError(GL_INVALID_VALUE); 2959 ctx.endSection(); 2960 2961 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 2962 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2963 ctx.expectError(GL_INVALID_VALUE); 2964 ctx.endSection(); 2965 2966 ctx.glDeleteTextures (2, &textures[0]); 2967 } 2968 2969 void texsubimage3d_neg_offset (NegativeTestContext& ctx) 2970 { 2971 deUint32 textures[3]; 2972 ctx.glGenTextures (3, &textures[0]); 2973 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]); 2974 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2975 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, textures[1]); 2976 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2977 ctx.expectError (GL_NO_ERROR); 2978 2979 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset, yoffset or zoffset are negative."); 2980 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, -1, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2981 ctx.expectError(GL_INVALID_VALUE); 2982 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2983 ctx.expectError(GL_INVALID_VALUE); 2984 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2985 ctx.expectError(GL_INVALID_VALUE); 2986 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2987 ctx.expectError(GL_INVALID_VALUE); 2988 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -1, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2989 ctx.expectError(GL_INVALID_VALUE); 2990 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2991 ctx.expectError(GL_INVALID_VALUE); 2992 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2993 ctx.expectError(GL_INVALID_VALUE); 2994 ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 2995 ctx.expectError(GL_INVALID_VALUE); 2996 2997 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 2998 { 2999 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]); 3000 ctx.glTexImage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3001 ctx.expectError (GL_NO_ERROR); 3002 3003 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, -1, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3004 ctx.expectError(GL_INVALID_VALUE); 3005 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3006 ctx.expectError(GL_INVALID_VALUE); 3007 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3008 ctx.expectError(GL_INVALID_VALUE); 3009 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3010 ctx.expectError(GL_INVALID_VALUE); 3011 } 3012 3013 ctx.endSection(); 3014 3015 ctx.glDeleteTextures (3, &textures[0]); 3016 } 3017 3018 void texsubimage3d_invalid_offset (NegativeTestContext& ctx) 3019 { 3020 deUint32 texture = 0x1234; 3021 ctx.glGenTextures (1, &texture); 3022 ctx.glBindTexture (GL_TEXTURE_3D, texture); 3023 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3024 ctx.expectError (GL_NO_ERROR); 3025 3026 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width."); 3027 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 2, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3028 ctx.expectError(GL_INVALID_VALUE); 3029 ctx.endSection(); 3030 3031 ctx.beginSection("GL_INVALID_VALUE is generated if yoffset + height > texture_height."); 3032 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 2, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3033 ctx.expectError(GL_INVALID_VALUE); 3034 ctx.endSection(); 3035 3036 ctx.beginSection("GL_INVALID_VALUE is generated if zoffset + depth > texture_depth."); 3037 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 2, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3038 ctx.expectError(GL_INVALID_VALUE); 3039 ctx.endSection(); 3040 3041 ctx.glDeleteTextures (1, &texture); 3042 } 3043 3044 void texsubimage3d_neg_width_height (NegativeTestContext& ctx) 3045 { 3046 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is less than 0."); 3047 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3048 ctx.expectError(GL_INVALID_VALUE); 3049 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3050 ctx.expectError(GL_INVALID_VALUE); 3051 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3052 ctx.expectError(GL_INVALID_VALUE); 3053 ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, -1, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3054 ctx.expectError(GL_INVALID_VALUE); 3055 3056 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3057 { 3058 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3059 ctx.expectError(GL_INVALID_VALUE); 3060 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3061 ctx.expectError(GL_INVALID_VALUE); 3062 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3063 ctx.expectError(GL_INVALID_VALUE); 3064 ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, -1, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3065 ctx.expectError(GL_INVALID_VALUE); 3066 } 3067 3068 ctx.endSection(); 3069 } 3070 3071 void texsubimage3d_invalid_buffer_target (NegativeTestContext& ctx) 3072 { 3073 deUint32 buf = 0x1234; 3074 deUint32 texture = 0x1234; 3075 std::vector<GLubyte> data(512); 3076 3077 ctx.glGenTextures (1, &texture); 3078 ctx.glBindTexture (GL_TEXTURE_3D, texture); 3079 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 16, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3080 ctx.glGenBuffers (1, &buf); 3081 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 3082 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 512, &data[0], GL_DYNAMIC_COPY); 3083 ctx.expectError (GL_NO_ERROR); 3084 3085 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and..."); 3086 3087 ctx.beginSection("...the buffer object's data store is currently mapped."); 3088 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 512, GL_MAP_WRITE_BIT); 3089 ctx.glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3090 ctx.expectError (GL_INVALID_OPERATION); 3091 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 3092 ctx.endSection(); 3093 3094 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size."); 3095 ctx.glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, 16, 16, 16, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3096 ctx.expectError (GL_INVALID_OPERATION); 3097 ctx.endSection(); 3098 3099 ctx.beginSection("...data is not evenly divisible into the number of bytes needed to store in memory a datum indicated by type."); 3100 ctx.getLog() << TestLog::Message << "// Set byte offset = 3" << TestLog::EndMessage; 3101 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, 0); 3102 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA4, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 0); 3103 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 3104 ctx.expectError (GL_NO_ERROR); 3105 ctx.glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, (const GLvoid*)3); 3106 ctx.expectError (GL_INVALID_OPERATION); 3107 ctx.endSection(); 3108 3109 ctx.endSection(); 3110 3111 ctx.glDeleteBuffers (1, &buf); 3112 ctx.glDeleteTextures (1, &texture); 3113 } 3114 3115 // glCopyTexSubImage3D 3116 3117 void copytexsubimage3d (NegativeTestContext& ctx) 3118 { 3119 GLuint texture = 0x1234; 3120 ctx.glGenTextures (1, &texture); 3121 ctx.glBindTexture (GL_TEXTURE_3D, texture); 3122 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3123 3124 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 3125 ctx.glCopyTexSubImage3D(0, 0, 0, 0, 0, 0, 0, 4, 4); 3126 ctx.expectError(GL_INVALID_ENUM); 3127 ctx.endSection(); 3128 3129 ctx.glDeleteTextures(1, &texture); 3130 } 3131 3132 void copytexsubimage3d_neg_level (NegativeTestContext& ctx) 3133 { 3134 deUint32 textures[3]; 3135 ctx.glGenTextures(3, &textures[0]); 3136 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]); 3137 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3138 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, textures[1]); 3139 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3140 ctx.expectError(GL_NO_ERROR); 3141 3142 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 3143 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, -1, 0, 0, 0, 0, 0, 4, 4); 3144 ctx.expectError(GL_INVALID_VALUE); 3145 ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 4, 4); 3146 ctx.expectError(GL_INVALID_VALUE); 3147 3148 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3149 { 3150 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]); 3151 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3152 ctx.expectError(GL_NO_ERROR); 3153 ctx.glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, 0, 0, 0, 0, 0, 4, 4); 3154 ctx.expectError(GL_INVALID_VALUE); 3155 } 3156 3157 ctx.endSection(); 3158 3159 ctx.glDeleteTextures(3, &textures[0]); 3160 } 3161 3162 void copytexsubimage3d_max_level (NegativeTestContext& ctx) 3163 { 3164 deUint32 log2Max3DTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1; 3165 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 3166 deUint32 log2MaxCubeMapTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1; 3167 3168 deUint32 textures[3]; 3169 ctx.glGenTextures(3, &textures[0]); 3170 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]); 3171 ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3172 ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, textures[1]); 3173 ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3174 ctx.expectError(GL_NO_ERROR); 3175 3176 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_3D_TEXTURE_SIZE)."); 3177 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, log2Max3DTextureSize, 0, 0, 0, 0, 0, 4, 4); 3178 ctx.expectError(GL_INVALID_VALUE); 3179 ctx.endSection(); 3180 3181 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 3182 ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 4, 4); 3183 ctx.expectError(GL_INVALID_VALUE); 3184 ctx.endSection(); 3185 3186 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3187 { 3188 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]); 3189 ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3190 ctx.expectError(GL_NO_ERROR); 3191 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE)."); 3192 ctx.glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxCubeMapTextureSize, 0, 0, 0, 0, 0, 4, 4); 3193 ctx.expectError(GL_INVALID_VALUE); 3194 ctx.endSection(); 3195 } 3196 3197 ctx.glDeleteTextures(3, &textures[0]); 3198 } 3199 3200 void copytexsubimage3d_neg_offset (NegativeTestContext& ctx) 3201 { 3202 GLuint texture = 0x1234; 3203 ctx.glGenTextures (1, &texture); 3204 ctx.glBindTexture (GL_TEXTURE_3D, texture); 3205 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3206 3207 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset, yoffset or zoffset is negative."); 3208 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, -1, 0, 0, 0, 0, 4, 4); 3209 ctx.expectError(GL_INVALID_VALUE); 3210 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, -1, 0, 0, 0, 4, 4); 3211 ctx.expectError(GL_INVALID_VALUE); 3212 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, -1, 0, 0, 4, 4); 3213 ctx.expectError(GL_INVALID_VALUE); 3214 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, -1, -1, -1, 0, 0, 4, 4); 3215 ctx.expectError(GL_INVALID_VALUE); 3216 ctx.endSection(); 3217 3218 ctx.glDeleteTextures(1, &texture); 3219 } 3220 3221 void copytexsubimage3d_invalid_offset (NegativeTestContext& ctx) 3222 { 3223 GLuint texture = 0x1234; 3224 ctx.glGenTextures (1, &texture); 3225 ctx.glBindTexture (GL_TEXTURE_3D, texture); 3226 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3227 3228 ctx.beginSection("GL_INVALID_VALUE is generated if xoffset + width > texture_width."); 3229 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 1, 0, 0, 0, 0, 4, 4); 3230 ctx.expectError(GL_INVALID_VALUE); 3231 ctx.endSection(); 3232 3233 ctx.beginSection("GL_INVALID_VALUE is generated if yoffset + height > texture_height."); 3234 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 1, 0, 0, 0, 4, 4); 3235 ctx.expectError(GL_INVALID_VALUE); 3236 ctx.endSection(); 3237 3238 ctx.beginSection("GL_INVALID_VALUE is generated if zoffset + 1 > texture_depth."); 3239 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 4, 0, 0, 4, 4); 3240 ctx.expectError(GL_INVALID_VALUE); 3241 ctx.endSection(); 3242 3243 ctx.glDeleteTextures(1, &texture); 3244 } 3245 3246 void copytexsubimage3d_neg_width_height (NegativeTestContext& ctx) 3247 { 3248 GLuint texture = 0x1234; 3249 ctx.glGenTextures (1, &texture); 3250 ctx.glBindTexture (GL_TEXTURE_3D, texture); 3251 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3252 3253 ctx.beginSection("GL_INVALID_VALUE is generated if width < 0."); 3254 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, -4, 4); 3255 ctx.expectError(GL_INVALID_VALUE); 3256 ctx.endSection(); 3257 3258 ctx.beginSection("GL_INVALID_VALUE is generated if height < 0."); 3259 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, 4, -4); 3260 ctx.expectError(GL_INVALID_VALUE); 3261 ctx.endSection(); 3262 3263 ctx.glDeleteTextures(1, &texture); 3264 } 3265 3266 void copytexsubimage3d_incomplete_framebuffer (NegativeTestContext& ctx) 3267 { 3268 GLuint fbo = 0x1234; 3269 GLuint texture[2]; 3270 3271 ctx.glGenTextures (2, texture); 3272 ctx.glBindTexture (GL_TEXTURE_3D, texture[0]); 3273 ctx.glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3274 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture[1]); 3275 ctx.glTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 3276 ctx.glGenFramebuffers (1, &fbo); 3277 ctx.glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo); 3278 ctx.glCheckFramebufferStatus(GL_READ_FRAMEBUFFER); 3279 3280 ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete."); 3281 ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 0, 0, 4, 4); 3282 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 3283 ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, 4, 4); 3284 ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION); 3285 ctx.endSection(); 3286 3287 ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0); 3288 ctx.glDeleteFramebuffers(1, &fbo); 3289 ctx.glDeleteTextures(2, texture); 3290 } 3291 3292 // glCompressedTexImage3D 3293 3294 void compressedteximage3d (NegativeTestContext& ctx) 3295 { 3296 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 3297 ctx.glCompressedTexImage3D(0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0); 3298 ctx.expectError(GL_INVALID_ENUM); 3299 ctx.glCompressedTexImage3D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0); 3300 ctx.expectError(GL_INVALID_ENUM); 3301 ctx.endSection(); 3302 3303 ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not one of the specific compressed internal formats."); 3304 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, 0, 0); 3305 ctx.expectError(GL_INVALID_ENUM); 3306 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA8, 0, 0, 0, 0, 0, 0); 3307 ctx.expectError(GL_INVALID_ENUM); 3308 ctx.endSection(); 3309 } 3310 3311 void compressedteximage3d_neg_level (NegativeTestContext& ctx) 3312 { 3313 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 3314 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, -1, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0); 3315 ctx.expectError(GL_INVALID_VALUE); 3316 ctx.endSection(); 3317 } 3318 3319 void compressedteximage3d_max_level (NegativeTestContext& ctx) 3320 { 3321 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 3322 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 3323 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0, 0); 3324 ctx.expectError(GL_INVALID_VALUE); 3325 ctx.endSection(); 3326 } 3327 3328 void compressedteximage3d_neg_width_height_depth (NegativeTestContext& ctx) 3329 { 3330 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is less than 0."); 3331 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0, 0, 0, 0, 0); 3332 ctx.expectError(GL_INVALID_VALUE); 3333 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, -1, 0, 0, 0, 0); 3334 ctx.expectError(GL_INVALID_VALUE); 3335 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0, 0); 3336 ctx.expectError(GL_INVALID_VALUE); 3337 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, -1, -1, 0, 0, 0); 3338 ctx.expectError(GL_INVALID_VALUE); 3339 ctx.endSection(); 3340 } 3341 3342 void compressedteximage3d_max_width_height_depth (NegativeTestContext& ctx) 3343 { 3344 int maxTextureSize = ctx.getInteger(GL_MAX_TEXTURE_SIZE) + 1; 3345 3346 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth is greater than GL_MAX_TEXTURE_SIZE."); 3347 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, 0, 0, 0, 0, 0); 3348 ctx.expectError(GL_INVALID_VALUE); 3349 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, maxTextureSize, 0, 0, 0, 0); 3350 ctx.expectError(GL_INVALID_VALUE); 3351 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, maxTextureSize, 0, 0, 0); 3352 ctx.expectError(GL_INVALID_VALUE); 3353 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, maxTextureSize, maxTextureSize, 0, 0, 0); 3354 ctx.expectError(GL_INVALID_VALUE); 3355 ctx.endSection(); 3356 } 3357 3358 void compressedteximage3d_invalid_border (NegativeTestContext& ctx) 3359 { 3360 ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0."); 3361 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, -1, 0, 0); 3362 ctx.expectError(GL_INVALID_VALUE); 3363 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 1, 0, 0); 3364 ctx.expectError(GL_INVALID_VALUE); 3365 ctx.endSection(); 3366 } 3367 3368 void compressedteximage3d_invalid_size (NegativeTestContext& ctx) 3369 { 3370 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data."); 3371 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, -1, 0); 3372 ctx.expectError(GL_INVALID_VALUE); 3373 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, 4*4*8, 0); 3374 ctx.expectError(GL_INVALID_VALUE); 3375 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, 16, 16, 1, 0, 4*4*16, 0); 3376 ctx.expectError(GL_INVALID_VALUE); 3377 ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_SIGNED_R11_EAC, 16, 16, 1, 0, 4*4*16, 0); 3378 ctx.expectError(GL_INVALID_VALUE); 3379 ctx.endSection(); 3380 } 3381 3382 void compressedteximage3d_invalid_width_height (NegativeTestContext& ctx) 3383 { 3384 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3385 { 3386 const int width = 4; 3387 const int height = 6; 3388 const int depth = 6; 3389 const int blockSize = 16; 3390 const int imageSize = divRoundUp(width, 4) * divRoundUp(height, 4) * depth * blockSize; 3391 std::vector<GLubyte> data (imageSize); 3392 ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and width and height are not equal."); 3393 ctx.glCompressedTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, width, height, depth, 0, imageSize, &data[0]); 3394 ctx.expectError(GL_INVALID_VALUE); 3395 ctx.endSection(); 3396 } 3397 } 3398 3399 void compressedteximage3d_invalid_buffer_target (NegativeTestContext& ctx) 3400 { 3401 deUint32 buf = 0x1234; 3402 std::vector<GLubyte> data(512); 3403 3404 ctx.glGenBuffers (1, &buf); 3405 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 3406 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, 64, &data[0], GL_DYNAMIC_COPY); 3407 ctx.expectError (GL_NO_ERROR); 3408 3409 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."); 3410 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, 64, GL_MAP_WRITE_BIT); 3411 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, 4, 4, 1, 0, etc2DataSize(4, 4), 0); 3412 ctx.expectError (GL_INVALID_OPERATION); 3413 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 3414 ctx.endSection(); 3415 3416 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."); 3417 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGB8_ETC2, 16, 16, 1, 0, etc2DataSize(16, 16), 0); 3418 ctx.expectError (GL_INVALID_OPERATION); 3419 ctx.endSection(); 3420 3421 ctx.glDeleteBuffers (1, &buf); 3422 } 3423 3424 // glCompressedTexSubImage3D 3425 3426 void compressedtexsubimage3d (NegativeTestContext& ctx) 3427 { 3428 ctx.beginSection("GL_INVALID_ENUM is generated if target is invalid."); 3429 ctx.glCompressedTexSubImage3D(0, 0, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3430 ctx.expectError(GL_INVALID_ENUM); 3431 ctx.endSection(); 3432 3433 deUint32 texture = 0x1234; 3434 ctx.glGenTextures (1, &texture); 3435 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3436 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 18, 18, 1, 0, etc2EacDataSize(18, 18), 0); 3437 ctx.expectError (GL_NO_ERROR); 3438 3439 ctx.beginSection("GL_INVALID_OPERATION is generated if format does not match the internal format of the texture image being modified."); 3440 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGB8_ETC2, 0, 0); 3441 ctx.expectError(GL_INVALID_OPERATION); 3442 ctx.endSection(); 3443 3444 ctx.beginSection("GL_INVALID_OPERATION is generated if internalformat is an ETC2/EAC format and target is not GL_TEXTURE_2D_ARRAY."); 3445 ctx.glCompressedTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 18, 18, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(18, 18), 0); 3446 ctx.expectError(GL_INVALID_OPERATION); 3447 ctx.endSection(); 3448 3449 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."); 3450 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 4, 0, 0, 10, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(10, 4), 0); 3451 ctx.expectError(GL_INVALID_OPERATION); 3452 ctx.endSection(); 3453 3454 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."); 3455 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 4, 0, 4, 10, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 10), 0); 3456 ctx.expectError(GL_INVALID_OPERATION); 3457 ctx.endSection(); 3458 3459 ctx.beginSection("For ETC2/EAC images GL_INVALID_OPERATION is generated if xoffset or yoffset is not a multiple of four."); 3460 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 1, 0, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 3461 ctx.expectError(GL_INVALID_OPERATION); 3462 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 1, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 3463 ctx.expectError(GL_INVALID_OPERATION); 3464 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 1, 1, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 3465 ctx.expectError(GL_INVALID_OPERATION); 3466 ctx.endSection(); 3467 3468 ctx.glDeleteTextures (1, &texture); 3469 } 3470 3471 void compressedtexsubimage3d_neg_level (NegativeTestContext& ctx) 3472 { 3473 deUint32 texture = 0x1234; 3474 ctx.glGenTextures (1, &texture); 3475 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3476 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0); 3477 ctx.expectError (GL_NO_ERROR); 3478 3479 ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0."); 3480 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3481 ctx.expectError(GL_INVALID_VALUE); 3482 ctx.endSection(); 3483 3484 ctx.glDeleteTextures (1, &texture); 3485 } 3486 3487 void compressedtexsubimage3d_max_level (NegativeTestContext& ctx) 3488 { 3489 deUint32 texture = 0x1234; 3490 ctx.glGenTextures (1, &texture); 3491 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3492 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0); 3493 ctx.expectError (GL_NO_ERROR); 3494 3495 ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_TEXTURE_SIZE)."); 3496 deUint32 log2MaxTextureSize = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1; 3497 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3498 ctx.expectError(GL_INVALID_VALUE); 3499 ctx.endSection(); 3500 3501 ctx.glDeleteTextures (1, &texture); 3502 } 3503 3504 void compressedtexsubimage3d_neg_offset (NegativeTestContext& ctx) 3505 { 3506 deUint32 texture = 0x1234; 3507 ctx.glGenTextures (1, &texture); 3508 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3509 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0); 3510 ctx.expectError (GL_NO_ERROR); 3511 3512 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset, yoffset or zoffset are negative."); 3513 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -4, 0, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3514 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3515 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, -4, 0, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3516 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3517 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, -4, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3518 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3519 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -4, -4, -4, 0, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3520 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3521 ctx.endSection(); 3522 3523 ctx.glDeleteTextures (1, &texture); 3524 } 3525 3526 void compressedtexsubimage3d_invalid_offset (NegativeTestContext& ctx) 3527 { 3528 deUint32 texture = 0x1234; 3529 ctx.glGenTextures (1, &texture); 3530 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3531 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 4, 4, 1, 0, etc2EacDataSize(4, 4), 0); 3532 ctx.expectError (GL_NO_ERROR); 3533 3534 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if xoffset + width > texture_width or yoffset + height > texture_height."); 3535 3536 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 12, 0, 0, 8, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 4), 0); 3537 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3538 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 12, 0, 4, 8, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 8), 0); 3539 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3540 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 12, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 3541 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3542 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 12, 12, 12, 8, 8, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(8, 8), 0); 3543 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3544 ctx.endSection(); 3545 3546 ctx.glDeleteTextures (1, &texture); 3547 } 3548 3549 void compressedtexsubimage3d_neg_width_height_depth (NegativeTestContext& ctx) 3550 { 3551 deUint32 texture = 0x1234; 3552 ctx.glGenTextures (1, &texture); 3553 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3554 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0); 3555 ctx.expectError (GL_NO_ERROR); 3556 3557 ctx.beginSection("GL_INVALID_VALUE or GL_INVALID_OPERATION is generated if width, height or depth are negative."); 3558 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, -4, 0, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3559 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3560 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, -4, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3561 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3562 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3563 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3564 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, -4, -4, -4, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0); 3565 ctx.expectError(GL_INVALID_VALUE, GL_INVALID_OPERATION); 3566 ctx.endSection(); 3567 3568 ctx.glDeleteTextures (1, &texture); 3569 } 3570 3571 void compressedtexsubimage3d_invalid_size (NegativeTestContext& ctx) 3572 { 3573 deUint32 texture = 0x1234; 3574 ctx.glGenTextures (1, &texture); 3575 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3576 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, 4*4*16, 0); 3577 ctx.expectError (GL_NO_ERROR); 3578 3579 ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data."); 3580 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 16, 16, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, -1, 0); 3581 ctx.expectError(GL_INVALID_VALUE); 3582 3583 ctx.glCompressedTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 16, 16, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, 4*4*16-1, 0); 3584 ctx.expectError(GL_INVALID_VALUE); 3585 ctx.endSection(); 3586 3587 ctx.glDeleteTextures (1, &texture); 3588 } 3589 3590 void compressedtexsubimage3d_invalid_buffer_target (NegativeTestContext& ctx) 3591 { 3592 deUint32 buf = 0x1234; 3593 deUint32 texture = 0x1234; 3594 GLsizei bufferSize = etc2EacDataSize(4, 4); 3595 std::vector<GLubyte> data(bufferSize); 3596 3597 ctx.glGenTextures (1, &texture); 3598 ctx.glBindTexture (GL_TEXTURE_2D_ARRAY, texture); 3599 ctx.glCompressedTexImage3D (GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 1, 0, etc2EacDataSize(16, 16), 0); 3600 ctx.glGenBuffers (1, &buf); 3601 ctx.glBindBuffer (GL_PIXEL_UNPACK_BUFFER, buf); 3602 ctx.glBufferData (GL_PIXEL_UNPACK_BUFFER, bufferSize, &data[0], GL_DYNAMIC_COPY); 3603 ctx.expectError (GL_NO_ERROR); 3604 3605 ctx.beginSection("GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to the GL_PIXEL_UNPACK_BUFFER target and..."); 3606 ctx.beginSection("...the buffer object's data store is currently mapped."); 3607 ctx.glMapBufferRange (GL_PIXEL_UNPACK_BUFFER, 0, bufferSize, GL_MAP_WRITE_BIT); 3608 ctx.glCompressedTexSubImage3D (GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 4, 4, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(4, 4), 0); 3609 ctx.expectError (GL_INVALID_OPERATION); 3610 ctx.glUnmapBuffer (GL_PIXEL_UNPACK_BUFFER); 3611 ctx.endSection(); 3612 3613 ctx.beginSection("...the data would be unpacked from the buffer object such that the memory reads required would exceed the data store size."); 3614 ctx.glCompressedTexSubImage3D (GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 16, 16, 1, GL_COMPRESSED_RGBA8_ETC2_EAC, etc2EacDataSize(16, 16), 0); 3615 ctx.expectError (GL_INVALID_OPERATION); 3616 ctx.endSection(); 3617 ctx.endSection(); 3618 3619 ctx.glDeleteBuffers (1, &buf); 3620 ctx.glDeleteTextures (1, &texture); 3621 } 3622 3623 // glTexStorage2D 3624 3625 void texstorage2d (NegativeTestContext& ctx) 3626 { 3627 deUint32 textures[] = {0x1234, 0x1234}; 3628 3629 ctx.glGenTextures(2, textures); 3630 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]); 3631 ctx.expectError(GL_NO_ERROR); 3632 3633 ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not a valid sized internal format."); 3634 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, 0, 16, 16); 3635 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 3636 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA_INTEGER, 16, 16); 3637 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 3638 ctx.endSection(); 3639 3640 ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted target enumerants."); 3641 ctx.glTexStorage2D(0, 1, GL_RGBA8, 16, 16); 3642 ctx.expectError(GL_INVALID_ENUM); 3643 ctx.glTexStorage2D(GL_TEXTURE_3D, 1, GL_RGBA8, 16, 16); 3644 ctx.expectError(GL_INVALID_ENUM); 3645 ctx.glTexStorage2D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 16, 16); 3646 ctx.expectError(GL_INVALID_ENUM); 3647 ctx.endSection(); 3648 3649 ctx.beginSection("GL_INVALID_VALUE is generated if width or height are less than 1."); 3650 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 16); 3651 ctx.expectError(GL_INVALID_VALUE); 3652 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 0); 3653 ctx.expectError(GL_INVALID_VALUE); 3654 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 0); 3655 ctx.expectError(GL_INVALID_VALUE); 3656 3657 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 3658 { 3659 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]); 3660 ctx.expectError(GL_NO_ERROR); 3661 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 0, 16); 3662 ctx.expectError(GL_INVALID_VALUE); 3663 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 0); 3664 ctx.expectError(GL_INVALID_VALUE); 3665 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 0, 0); 3666 ctx.expectError(GL_INVALID_VALUE); 3667 } 3668 ctx.endSection(); 3669 3670 ctx.glDeleteTextures(2, textures); 3671 } 3672 3673 void texstorage2d_invalid_binding (NegativeTestContext& ctx) 3674 { 3675 deUint32 textures[] = {0x1234, 0x1234}; 3676 deInt32 immutable = 0x1234; 3677 const bool supportsES32 = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)); 3678 3679 ctx.beginSection("GL_INVALID_OPERATION is generated if the default texture object is curently bound to target."); 3680 ctx.glBindTexture(GL_TEXTURE_2D, 0); 3681 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16); 3682 ctx.expectError(GL_INVALID_OPERATION); 3683 3684 if (supportsES32) 3685 { 3686 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, 0); 3687 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16); 3688 ctx.expectError(GL_INVALID_OPERATION); 3689 } 3690 ctx.endSection(); 3691 3692 ctx.glGenTextures(2, textures); 3693 3694 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."); 3695 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]); 3696 ctx.glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3697 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3698 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16); 3699 ctx.expectError(GL_NO_ERROR); 3700 ctx.glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3701 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3702 ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16); 3703 ctx.expectError(GL_INVALID_OPERATION); 3704 3705 if (supportsES32) 3706 { 3707 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]); 3708 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3709 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3710 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16); 3711 ctx.expectError(GL_NO_ERROR); 3712 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3713 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3714 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16); 3715 ctx.expectError(GL_INVALID_OPERATION); 3716 } 3717 ctx.endSection(); 3718 3719 ctx.glDeleteTextures(2, textures); 3720 } 3721 3722 void texstorage2d_invalid_levels (NegativeTestContext& ctx) 3723 { 3724 deUint32 textures[] = {0x1234, 0x1234}; 3725 deUint32 log2MaxSize = deLog2Floor32(deMax32(16, 16)) + 1 + 1; 3726 const bool supportsES32 = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)); 3727 3728 ctx.glGenTextures(2, textures); 3729 ctx.glBindTexture(GL_TEXTURE_2D, textures[0]); 3730 3731 if (supportsES32) 3732 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]); 3733 3734 ctx.expectError(GL_NO_ERROR); 3735 3736 ctx.beginSection("GL_INVALID_VALUE is generated if levels is less than 1."); 3737 ctx.glTexStorage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16); 3738 ctx.expectError(GL_INVALID_VALUE); 3739 ctx.glTexStorage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0); 3740 ctx.expectError(GL_INVALID_VALUE); 3741 3742 if (supportsES32) 3743 { 3744 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 0, GL_RGBA8, 16, 16); 3745 ctx.expectError(GL_INVALID_VALUE); 3746 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 0, GL_RGBA8, 0, 0); 3747 ctx.expectError(GL_INVALID_VALUE); 3748 } 3749 ctx.endSection(); 3750 3751 ctx.beginSection("GL_INVALID_OPERATION is generated if levels is greater than floor(log_2(max(width, height))) + 1"); 3752 ctx.glTexStorage2D(GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 16, 16); 3753 ctx.expectError(GL_INVALID_OPERATION); 3754 3755 if (supportsES32) 3756 { 3757 ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, log2MaxSize, GL_RGBA8, 16, 16); 3758 ctx.expectError(GL_INVALID_OPERATION); 3759 } 3760 ctx.endSection(); 3761 3762 ctx.glDeleteTextures(2, textures); 3763 } 3764 3765 // glTexStorage3D 3766 3767 void texstorage3d (NegativeTestContext& ctx) 3768 { 3769 deUint32 textures[] = {0x1234, 0x1234}; 3770 3771 ctx.glGenTextures(2, textures); 3772 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]); 3773 ctx.expectError(GL_NO_ERROR); 3774 3775 ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not a valid sized internal format."); 3776 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, 0, 4, 4, 4); 3777 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 3778 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA_INTEGER, 4, 4, 4); 3779 ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE); 3780 ctx.endSection(); 3781 3782 ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted target enumerants."); 3783 ctx.glTexStorage3D(0, 1, GL_RGBA8, 4, 4, 4); 3784 ctx.expectError(GL_INVALID_ENUM); 3785 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 4, 4, 4); 3786 ctx.expectError(GL_INVALID_ENUM); 3787 ctx.glTexStorage3D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 4, 4); 3788 ctx.expectError(GL_INVALID_ENUM); 3789 ctx.endSection(); 3790 3791 ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth are less than 1."); 3792 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 0, 4, 4); 3793 ctx.expectError(GL_INVALID_VALUE); 3794 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 0, 4); 3795 ctx.expectError(GL_INVALID_VALUE); 3796 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 0); 3797 ctx.expectError(GL_INVALID_VALUE); 3798 ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 0, 0, 0); 3799 ctx.expectError(GL_INVALID_VALUE); 3800 3801 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3802 { 3803 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]); 3804 ctx.expectError(GL_NO_ERROR); 3805 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 0, 4, 4); 3806 ctx.expectError(GL_INVALID_VALUE); 3807 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 0, 4); 3808 ctx.expectError(GL_INVALID_VALUE); 3809 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 0); 3810 ctx.expectError(GL_INVALID_VALUE); 3811 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 0, 0, 0); 3812 ctx.expectError(GL_INVALID_VALUE); 3813 } 3814 ctx.endSection(); 3815 3816 ctx.glDeleteTextures(2, textures); 3817 } 3818 3819 void texstorage3d_invalid_binding (NegativeTestContext& ctx) 3820 { 3821 deUint32 textures[] = {0x1234, 0x1234}; 3822 deInt32 immutable = 0x1234; 3823 3824 ctx.beginSection("GL_INVALID_OPERATION is generated if the default texture object is curently bound to target."); 3825 ctx.glBindTexture (GL_TEXTURE_3D, 0); 3826 ctx.glTexStorage3D (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4); 3827 ctx.expectError (GL_INVALID_OPERATION); 3828 3829 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3830 { 3831 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, 0); 3832 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6); 3833 ctx.expectError (GL_INVALID_OPERATION); 3834 } 3835 ctx.endSection(); 3836 3837 ctx.glGenTextures (2, textures); 3838 3839 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."); 3840 ctx.glBindTexture (GL_TEXTURE_3D, textures[0]); 3841 ctx.glGetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3842 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3843 ctx.glTexStorage3D (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4); 3844 ctx.expectError (GL_NO_ERROR); 3845 ctx.glGetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3846 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3847 ctx.glTexStorage3D (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4); 3848 ctx.expectError (GL_INVALID_OPERATION); 3849 3850 if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3851 { 3852 ctx.glBindTexture (GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]); 3853 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3854 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3855 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6); 3856 ctx.expectError (GL_NO_ERROR); 3857 ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable); 3858 ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage; 3859 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6); 3860 ctx.expectError (GL_INVALID_OPERATION); 3861 } 3862 ctx.endSection(); 3863 3864 ctx.glDeleteTextures(2, textures); 3865 } 3866 3867 void texstorage3d_invalid_levels (NegativeTestContext& ctx) 3868 { 3869 deUint32 textures[] = {0x1234, 0x1234}; 3870 deUint32 log2MaxSize = deLog2Floor32(8) + 1 + 1; 3871 const bool supportsES32 = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)); 3872 ctx.glGenTextures(2, textures); 3873 ctx.glBindTexture(GL_TEXTURE_3D, textures[0]); 3874 3875 ctx.beginSection("GL_INVALID_VALUE is generated if levels is less than 1."); 3876 ctx.glTexStorage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 4, 4, 4); 3877 ctx.expectError(GL_INVALID_VALUE); 3878 ctx.glTexStorage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 0, 0, 0); 3879 ctx.expectError(GL_INVALID_VALUE); 3880 3881 if (supportsES32 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3882 { 3883 ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]); 3884 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA8, 4, 4, 6); 3885 ctx.expectError(GL_INVALID_VALUE); 3886 ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA8, 0, 0, 6); 3887 ctx.expectError(GL_INVALID_VALUE); 3888 } 3889 ctx.endSection(); 3890 3891 ctx.beginSection("GL_INVALID_OPERATION is generated if levels is greater than floor(log_2(max(width, height, depth))) + 1"); 3892 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 8, 2, 2); 3893 ctx.expectError (GL_INVALID_OPERATION); 3894 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 2, 8, 2); 3895 ctx.expectError (GL_INVALID_OPERATION); 3896 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 2, 2, 8); 3897 ctx.expectError (GL_INVALID_OPERATION); 3898 ctx.glTexStorage3D (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 8, 8, 8); 3899 ctx.expectError (GL_INVALID_OPERATION); 3900 3901 if (supportsES32 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array")) 3902 { 3903 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 2, 2, 6); 3904 ctx.expectError (GL_INVALID_OPERATION); 3905 ctx.glTexStorage3D (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 8, 8, 6); 3906 ctx.expectError (GL_INVALID_OPERATION); 3907 } 3908 ctx.endSection(); 3909 3910 ctx.glDeleteTextures(2, textures); 3911 } 3912 3913 void srgb_decode_texparameteri (NegativeTestContext& ctx) 3914 { 3915 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3916 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3917 3918 GLuint texture = 0x1234; 3919 GLint textureMode = -1; 3920 3921 ctx.glGenTextures(1, &texture); 3922 ctx.glBindTexture(GL_TEXTURE_2D, texture); 3923 3924 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)."); 3925 ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode); 3926 ctx.expectError(GL_INVALID_ENUM); 3927 ctx.endSection(); 3928 3929 ctx.glDeleteTextures(1, &texture); 3930 } 3931 3932 void srgb_decode_texparameterf (NegativeTestContext& ctx) 3933 { 3934 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3935 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3936 3937 GLuint texture = 0x1234; 3938 GLfloat textureMode = -1.0f; 3939 3940 ctx.glGenTextures(1, &texture); 3941 ctx.glBindTexture(GL_TEXTURE_2D, texture); 3942 3943 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)."); 3944 ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode); 3945 ctx.expectError(GL_INVALID_ENUM); 3946 ctx.endSection(); 3947 3948 ctx.glDeleteTextures(1, &texture); 3949 } 3950 3951 void srgb_decode_texparameteriv (NegativeTestContext& ctx) 3952 { 3953 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3954 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3955 3956 GLint params[1] = {GL_LINEAR}; 3957 GLuint texture = 0x1234; 3958 3959 ctx.glGenTextures(1, &texture); 3960 ctx.glBindTexture(GL_TEXTURE_2D, texture); 3961 3962 params[0] = -1; 3963 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)."); 3964 ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, ¶ms[0]); 3965 ctx.expectError(GL_INVALID_ENUM); 3966 ctx.endSection(); 3967 3968 ctx.glDeleteTextures(1, &texture); 3969 } 3970 3971 void srgb_decode_texparameterfv (NegativeTestContext& ctx) 3972 { 3973 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3974 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3975 3976 GLfloat params[1] = {GL_LINEAR}; 3977 GLuint texture = 0x1234; 3978 3979 ctx.glGenTextures(1, &texture); 3980 ctx.glBindTexture(GL_TEXTURE_2D, texture); 3981 3982 params[0] = -1.0f; 3983 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)."); 3984 ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, ¶ms[0]); 3985 ctx.expectError(GL_INVALID_ENUM); 3986 ctx.endSection(); 3987 3988 ctx.glDeleteTextures(1, &texture); 3989 } 3990 3991 void srgb_decode_texparameterIiv (NegativeTestContext& ctx) 3992 { 3993 if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 3994 TCU_THROW(NotSupportedError,"glTexParameterIiv is not supported."); 3995 3996 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 3997 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 3998 3999 GLint textureMode[] = {GL_DEPTH_COMPONENT, GL_STENCIL_INDEX}; 4000 GLuint texture = 0x1234; 4001 4002 ctx.glGenTextures(1, &texture); 4003 ctx.glBindTexture(GL_TEXTURE_2D, texture); 4004 4005 textureMode[0] = -1; 4006 textureMode[1] = -1; 4007 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)."); 4008 ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode); 4009 ctx.expectError(GL_INVALID_ENUM); 4010 ctx.endSection(); 4011 4012 ctx.glDeleteTextures(1, &texture); 4013 } 4014 4015 void srgb_decode_texparameterIuiv (NegativeTestContext& ctx) 4016 { 4017 if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))) 4018 TCU_THROW(NotSupportedError,"glTexParameterIuiv is not supported."); 4019 4020 if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode")) 4021 TCU_THROW(NotSupportedError, "GL_EXT_texture_sRGB_decode is not supported."); 4022 4023 GLuint textureMode[] = {GL_DEPTH_COMPONENT, GL_STENCIL_INDEX}; 4024 GLuint texture = 0x1234; 4025 4026 ctx.glGenTextures(1, &texture); 4027 ctx.glBindTexture(GL_TEXTURE_2D, texture); 4028 4029 textureMode[0] = GL_DONT_CARE; 4030 textureMode[1] = GL_DONT_CARE; 4031 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)."); 4032 ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, textureMode); 4033 ctx.expectError(GL_INVALID_ENUM); 4034 ctx.endSection(); 4035 4036 ctx.glDeleteTextures(1, &texture); 4037 } 4038 4039 std::vector<FunctionContainer> getNegativeTextureApiTestFunctions() 4040 { 4041 FunctionContainer funcs[] = 4042 { 4043 {activetexture, "activetexture", "Invalid glActiveTexture() usage" }, 4044 {bindtexture, "bindtexture", "Invalid glBindTexture() usage" }, 4045 {compressedteximage2d_invalid_target, "compressedteximage2d_invalid_target", "Invalid glCompressedTexImage2D() usage" }, 4046 {compressedteximage2d_invalid_format, "compressedteximage2d_invalid_format", "Invalid glCompressedTexImage2D() usage" }, 4047 {compressedteximage2d_neg_level, "compressedteximage2d_neg_level", "Invalid glCompressedTexImage2D() usage" }, 4048 {compressedteximage2d_max_level, "compressedteximage2d_max_level", "Invalid glCompressedTexImage2D() usage" }, 4049 {compressedteximage2d_neg_width_height, "compressedteximage2d_neg_width_height", "Invalid glCompressedTexImage2D() usage" }, 4050 {compressedteximage2d_max_width_height, "compressedteximage2d_max_width_height", "Invalid glCompressedTexImage2D() usage" }, 4051 {compressedteximage2d_invalid_border, "compressedteximage2d_invalid_border", "Invalid glCompressedTexImage2D() usage" }, 4052 {compressedteximage2d_invalid_size, "compressedteximage2d_invalid_size", "Invalid glCompressedTexImage2D() usage" }, 4053 {compressedteximage2d_neg_size, "compressedteximage2d_neg_size", "Invalid glCompressedTexImage2D() usage" }, 4054 {compressedteximage2d_invalid_width_height, "compressedteximage2d_invalid_width_height", "Invalid glCompressedTexImage2D() usage" }, 4055 {compressedteximage2d_invalid_buffer_target, "compressedteximage2d_invalid_buffer_target", "Invalid glCompressedTexImage2D() usage" }, 4056 {copyteximage2d_invalid_target, "copyteximage2d_invalid_target", "Invalid glCopyTexImage2D() usage" }, 4057 {copyteximage2d_invalid_format, "copyteximage2d_invalid_format", "Invalid glCopyTexImage2D() usage" }, 4058 {copyteximage2d_inequal_width_height_cube, "copyteximage2d_inequal_width_height_cube", "Invalid glCopyTexImage2D() usage" }, 4059 {copyteximage2d_neg_level, "copyteximage2d_neg_level", "Invalid glCopyTexImage2D() usage" }, 4060 {copyteximage2d_max_level, "copyteximage2d_max_level", "Invalid glCopyTexImage2D() usage" }, 4061 {copyteximage2d_neg_width_height, "copyteximage2d_neg_width_height", "Invalid glCopyTexImage2D() usage" }, 4062 {copyteximage2d_max_width_height, "copyteximage2d_max_width_height", "Invalid glCopyTexImage2D() usage" }, 4063 {copyteximage2d_invalid_border, "copyteximage2d_invalid_border", "Invalid glCopyTexImage2D() usage" }, 4064 {copyteximage2d_incomplete_framebuffer, "copyteximage2d_incomplete_framebuffer", "Invalid glCopyTexImage2D() usage" }, 4065 {copytexsubimage2d_invalid_target, "copytexsubimage2d_invalid_target", "Invalid glCopyTexSubImage2D() usage" }, 4066 {copytexsubimage2d_read_buffer_is_none, "copytexsubimage2d_read_buffer_is_none", "Invalid glCopyTexSubImage2D() usage" }, 4067 {copytexsubimage2d_texture_internalformat, "copytexsubimage2d_texture_internalformat", "Invalid glCopyTexSubImage2D() usage" }, 4068 {copytexsubimage2d_neg_level, "copytexsubimage2d_neg_level", "Invalid glCopyTexSubImage2D() usage" }, 4069 {copytexsubimage2d_max_level, "copytexsubimage2d_max_level", "Invalid glCopyTexSubImage2D() usage" }, 4070 {copytexsubimage2d_neg_offset, "copytexsubimage2d_neg_offset", "Invalid glCopyTexSubImage2D() usage" }, 4071 {copytexsubimage2d_invalid_offset, "copytexsubimage2d_invalid_offset", "Invalid glCopyTexSubImage2D() usage" }, 4072 {copytexsubimage2d_neg_width_height, "copytexsubimage2d_neg_width_height", "Invalid glCopyTexSubImage2D() usage" }, 4073 {copytexsubimage2d_incomplete_framebuffer, "copytexsubimage2d_incomplete_framebuffer", "Invalid glCopyTexSubImage2D() usage" }, 4074 {deletetextures, "deletetextures", "Invalid glDeleteTextures() usage" }, 4075 {generatemipmap, "generatemipmap", "Invalid glGenerateMipmap() usage" }, 4076 {gentextures, "gentextures", "Invalid glGenTextures() usage" }, 4077 {pixelstorei, "pixelstorei", "Invalid glPixelStorei() usage" }, 4078 {teximage2d, "teximage2d", "Invalid glTexImage2D() usage" }, 4079 {teximage2d_inequal_width_height_cube, "teximage2d_inequal_width_height_cube", "Invalid glTexImage2D() usage" }, 4080 {teximage2d_neg_level, "teximage2d_neg_level", "Invalid glTexImage2D() usage" }, 4081 {teximage2d_max_level, "teximage2d_max_level", "Invalid glTexImage2D() usage" }, 4082 {teximage2d_neg_width_height, "teximage2d_neg_width_height", "Invalid glTexImage2D() usage" }, 4083 {teximage2d_max_width_height, "teximage2d_max_width_height", "Invalid glTexImage2D() usage" }, 4084 {teximage2d_invalid_border, "teximage2d_invalid_border", "Invalid glTexImage2D() usage" }, 4085 {teximage2d_invalid_buffer_target, "teximage2d_invalid_buffer_target", "Invalid glTexImage2D() usage" }, 4086 {texsubimage2d, "texsubimage2d", "Invalid glTexSubImage2D() usage" }, 4087 {texsubimage2d_neg_level, "texsubimage2d_neg_level", "Invalid glTexSubImage2D() usage" }, 4088 {texsubimage2d_max_level, "texsubimage2d_max_level", "Invalid glTexSubImage2D() usage" }, 4089 {texsubimage2d_neg_offset, "texsubimage2d_neg_offset", "Invalid glTexSubImage2D() usage" }, 4090 {texsubimage2d_invalid_offset, "texsubimage2d_invalid_offset", "Invalid glTexSubImage2D() usage" }, 4091 {texsubimage2d_neg_width_height, "texsubimage2d_neg_width_height", "Invalid glTexSubImage2D() usage" }, 4092 {texsubimage2d_invalid_buffer_target, "texsubimage2d_invalid_buffer_target", "Invalid glTexSubImage2D() usage" }, 4093 {texparameteri, "texparameteri", "Invalid glTexParameteri() usage" }, 4094 {texparameterf, "texparameterf", "Invalid glTexParameterf() usage" }, 4095 {texparameteriv, "texparameteriv", "Invalid glTexParameteriv() usage" }, 4096 {texparameterfv, "texparameterfv", "Invalid glTexParameterfv() usage" }, 4097 {texparameterIiv, "texparameterIiv", "Invalid glTexParameterIiv() usage" }, 4098 {texparameterIuiv, "texparameterIuiv", "Invalid glTexParameterIuiv() usage" }, 4099 {compressedtexsubimage2d, "compressedtexsubimage2d", "Invalid glCompressedTexSubImage2D() usage"}, 4100 {compressedtexsubimage2d_neg_level, "compressedtexsubimage2d_neg_level", "Invalid glCompressedTexSubImage2D() usage"}, 4101 {compressedtexsubimage2d_max_level, "compressedtexsubimage2d_max_level", "Invalid glCompressedTexSubImage2D() usage"}, 4102 {compressedtexsubimage2d_neg_offset, "compressedtexsubimage2d_neg_offset", "Invalid glCompressedTexSubImage2D() usage"}, 4103 {compressedtexsubimage2d_invalid_offset, "compressedtexsubimage2d_invalid_offset", "Invalid glCompressedTexSubImage2D() usage"}, 4104 {compressedtexsubimage2d_neg_width_height, "compressedtexsubimage2d_neg_width_height", "Invalid glCompressedTexSubImage2D() usage"}, 4105 {compressedtexsubimage2d_invalid_size, "compressedtexsubimage2d_invalid_size", "Invalid glCompressedTexImage2D() usage" }, 4106 {compressedtexsubimage2d_invalid_buffer_target, "compressedtexsubimage2d_invalid_buffer_target", "Invalid glCompressedTexSubImage2D() usage"}, 4107 {teximage3d, "teximage3d", "Invalid glTexImage3D() usage" }, 4108 {teximage3d_neg_level, "teximage3d_neg_level", "Invalid glTexImage3D() usage" }, 4109 {teximage3d_max_level, "teximage3d_max_level", "Invalid glTexImage3D() usage" }, 4110 {teximage3d_neg_width_height_depth, "teximage3d_neg_width_height_depth", "Invalid glTexImage3D() usage" }, 4111 {teximage3d_max_width_height_depth, "teximage3d_max_width_height_depth", "Invalid glTexImage3D() usage" }, 4112 {teximage3d_invalid_border, "teximage3d_invalid_border", "Invalid glTexImage3D() usage" }, 4113 {teximage3d_invalid_buffer_target, "teximage3d_invalid_buffer_target", "Invalid glTexImage3D() usage" }, 4114 {texsubimage3d, "texsubimage3d", "Invalid glTexSubImage3D() usage" }, 4115 {texsubimage3d_neg_level, "texsubimage3d_neg_level", "Invalid glTexSubImage3D() usage" }, 4116 {texsubimage3d_max_level, "texsubimage3d_max_level", "Invalid glTexSubImage3D() usage" }, 4117 {texsubimage3d_neg_offset, "texsubimage3d_neg_offset", "Invalid glTexSubImage3D() usage" }, 4118 {texsubimage3d_invalid_offset, "texsubimage3d_invalid_offset", "Invalid glTexSubImage3D() usage" }, 4119 {texsubimage3d_neg_width_height, "texsubimage3d_neg_width_height", "Invalid glTexSubImage3D() usage" }, 4120 {texsubimage3d_invalid_buffer_target, "texsubimage3d_invalid_buffer_target", "Invalid glTexSubImage3D() usage" }, 4121 {copytexsubimage3d, "copytexsubimage3d", "Invalid glCopyTexSubImage3D() usage" }, 4122 {copytexsubimage3d_neg_level, "copytexsubimage3d_neg_level", "Invalid glCopyTexSubImage3D() usage" }, 4123 {copytexsubimage3d_max_level, "copytexsubimage3d_max_level", "Invalid glCopyTexSubImage3D() usage" }, 4124 {copytexsubimage3d_neg_offset, "copytexsubimage3d_neg_offset", "Invalid glCopyTexSubImage3D() usage" }, 4125 {copytexsubimage3d_invalid_offset, "copytexsubimage3d_invalid_offset", "Invalid glCopyTexSubImage3D() usage" }, 4126 {copytexsubimage3d_neg_width_height, "copytexsubimage3d_neg_width_height", "Invalid glCopyTexSubImage3D() usage" }, 4127 {copytexsubimage3d_incomplete_framebuffer, "copytexsubimage3d_incomplete_framebuffer", "Invalid glCopyTexSubImage3D() usage" }, 4128 {compressedteximage3d, "compressedteximage3d", "Invalid glCompressedTexImage3D() usage" }, 4129 {compressedteximage3d_neg_level, "compressedteximage3d_neg_level", "Invalid glCompressedTexImage3D() usage" }, 4130 {compressedteximage3d_max_level, "compressedteximage3d_max_level", "Invalid glCompressedTexImage3D() usage" }, 4131 {compressedteximage3d_neg_width_height_depth, "compressedteximage3d_neg_width_height_depth", "Invalid glCompressedTexImage3D() usage" }, 4132 {compressedteximage3d_max_width_height_depth, "compressedteximage3d_max_width_height_depth", "Invalid glCompressedTexImage3D() usage" }, 4133 {compressedteximage3d_invalid_border, "compressedteximage3d_invalid_border", "Invalid glCompressedTexImage3D() usage" }, 4134 {compressedteximage3d_invalid_size, "compressedteximage3d_invalid_size", "Invalid glCompressedTexImage3D() usage" }, 4135 {compressedteximage3d_invalid_width_height, "compressedteximage3d_invalid_width_height", "Invalid glCompressedTexImage3D() usage" }, 4136 {compressedteximage3d_invalid_buffer_target, "compressedteximage3d_invalid_buffer_target", "Invalid glCompressedTexImage3D() usage" }, 4137 {compressedtexsubimage3d, "compressedtexsubimage3d", "Invalid glCompressedTexSubImage3D() usage"}, 4138 {compressedtexsubimage3d_neg_level, "compressedtexsubimage3d_neg_level", "Invalid glCompressedTexSubImage3D() usage"}, 4139 {compressedtexsubimage3d_max_level, "compressedtexsubimage3d_max_level", "Invalid glCompressedTexSubImage3D() usage"}, 4140 {compressedtexsubimage3d_neg_offset, "compressedtexsubimage3d_neg_offset", "Invalid glCompressedTexSubImage3D() usage"}, 4141 {compressedtexsubimage3d_invalid_offset, "compressedtexsubimage3d_invalid_offset", "Invalid glCompressedTexSubImage3D() usage"}, 4142 {compressedtexsubimage3d_neg_width_height_depth,"compressedtexsubimage3d_neg_width_height_depth", "Invalid glCompressedTexSubImage3D() usage"}, 4143 {compressedtexsubimage3d_invalid_size, "compressedtexsubimage3d_invalid_size", "Invalid glCompressedTexSubImage3D() usage"}, 4144 {compressedtexsubimage3d_invalid_buffer_target, "compressedtexsubimage3d_invalid_buffer_target", "Invalid glCompressedTexSubImage3D() usage"}, 4145 {texstorage2d, "texstorage2d", "Invalid glTexStorage2D() usage" }, 4146 {texstorage2d_invalid_binding, "texstorage2d_invalid_binding", "Invalid glTexStorage2D() usage" }, 4147 {texstorage2d_invalid_levels, "texstorage2d_invalid_levels", "Invalid glTexStorage2D() usage" }, 4148 {texstorage3d, "texstorage3d", "Invalid glTexStorage3D() usage" }, 4149 {texstorage3d_invalid_binding, "texstorage3d_invalid_binding", "Invalid glTexStorage3D() usage" }, 4150 {texstorage3d_invalid_levels, "texstorage3d_invalid_levels", "Invalid glTexStorage3D() usage" }, 4151 {srgb_decode_texparameteri, "srgb_decode_texparameteri", "Invalid texparameteri() usage srgb" }, 4152 {srgb_decode_texparameterf, "srgb_decode_texparameterf", "Invalid texparameterf() usage srgb" }, 4153 {srgb_decode_texparameteriv, "srgb_decode_texparameteriv", "Invalid texparameteriv() usage srgb" }, 4154 {srgb_decode_texparameterfv, "srgb_decode_texparameterfv", "Invalid texparameterfv() usage srgb" }, 4155 {srgb_decode_texparameterIiv, "srgb_decode_texparameterIiv", "Invalid texparameterIiv() usage srgb" }, 4156 {srgb_decode_texparameterIuiv, "srgb_decode_texparameterIuiv", "Invalid texparameterIuiv() usage srgb" }, 4157 }; 4158 4159 return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs)); 4160 } 4161 4162 } // NegativeTestShared 4163 } // Functional 4164 } // gles31 4165 } // deqp 4166