1 /* 2 * Mesa 3-D graphics library 3 * Version: 7.7 4 * 5 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6 * Copyright (c) 2008-2009 VMware, Inc. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a 9 * copy of this software and associated documentation files (the "Software"), 10 * to deal in the Software without restriction, including without limitation 11 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12 * and/or sell copies of the Software, and to permit persons to whom the 13 * Software is furnished to do so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included 16 * in all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 */ 25 26 27 /** 28 * \file texformat.c 29 * Texture formats. 30 * 31 * \author Gareth Hughes 32 * \author Brian Paul 33 */ 34 35 36 #include "context.h" 37 #include "enums.h" 38 #include "mfeatures.h" 39 #include "mtypes.h" 40 #include "texcompress.h" 41 #include "texformat.h" 42 43 #define RETURN_IF_SUPPORTED(f) do { \ 44 if (ctx->TextureFormatSupported[f]) \ 45 return f; \ 46 } while (0) 47 48 /** 49 * Choose an appropriate texture format given the format, type and 50 * internalFormat parameters passed to glTexImage(). 51 * 52 * \param ctx the GL context. 53 * \param internalFormat user's prefered internal texture format. 54 * \param format incoming image pixel format. 55 * \param type incoming image data type. 56 * 57 * \return a pointer to a gl_texture_format object which describes the 58 * choosen texture format, or NULL on failure. 59 * 60 * This is called via dd_function_table::ChooseTextureFormat. Hardware drivers 61 * will typically override this function with a specialized version. 62 */ 63 gl_format 64 _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, 65 GLint internalFormat, GLenum format, GLenum type) 66 { 67 (void) format; 68 (void) type; 69 70 switch (internalFormat) { 71 /* shallow RGBA formats */ 72 case 4: 73 case GL_RGBA: 74 if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) { 75 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); 76 } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) { 77 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555); 78 } 79 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 80 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 81 break; 82 83 case GL_RGBA8: 84 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 85 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 86 break; 87 case GL_RGB5_A1: 88 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555); 89 break; 90 case GL_RGBA2: 91 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/ 92 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); 93 break; 94 case GL_RGBA4: 95 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); 96 break; 97 98 /* deep RGBA formats */ 99 case GL_RGB10_A2: 100 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010); 101 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 102 break; 103 case GL_RGBA12: 104 case GL_RGBA16: 105 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); 106 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); 107 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 108 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 109 break; 110 111 /* shallow RGB formats */ 112 case 3: 113 case GL_RGB: 114 case GL_RGB8: 115 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); 116 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 117 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 118 break; 119 case GL_R3_G3_B2: 120 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332); 121 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 122 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); 123 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); 124 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 125 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 126 break; 127 case GL_RGB4: 128 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */ 129 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 130 break; 131 case GL_RGB5: 132 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 133 break; 134 135 /* deep RGB formats */ 136 case GL_RGB10: 137 case GL_RGB12: 138 case GL_RGB16: 139 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); 140 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 141 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 142 break; 143 144 /* Alpha formats */ 145 case GL_ALPHA: 146 case GL_ALPHA4: 147 case GL_ALPHA8: 148 RETURN_IF_SUPPORTED(MESA_FORMAT_A8); 149 break; 150 151 case GL_ALPHA12: 152 case GL_ALPHA16: 153 RETURN_IF_SUPPORTED(MESA_FORMAT_A16); 154 RETURN_IF_SUPPORTED(MESA_FORMAT_A8); 155 break; 156 157 /* Luminance formats */ 158 case 1: 159 case GL_LUMINANCE: 160 case GL_LUMINANCE4: 161 case GL_LUMINANCE8: 162 RETURN_IF_SUPPORTED(MESA_FORMAT_L8); 163 break; 164 165 case GL_LUMINANCE12: 166 case GL_LUMINANCE16: 167 RETURN_IF_SUPPORTED(MESA_FORMAT_L16); 168 RETURN_IF_SUPPORTED(MESA_FORMAT_L8); 169 break; 170 171 /* Luminance/Alpha formats */ 172 case GL_LUMINANCE4_ALPHA4: 173 RETURN_IF_SUPPORTED(MESA_FORMAT_AL44); 174 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 175 break; 176 177 case 2: 178 case GL_LUMINANCE_ALPHA: 179 case GL_LUMINANCE6_ALPHA2: 180 case GL_LUMINANCE8_ALPHA8: 181 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 182 break; 183 184 case GL_LUMINANCE12_ALPHA4: 185 case GL_LUMINANCE12_ALPHA12: 186 case GL_LUMINANCE16_ALPHA16: 187 RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616); 188 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 189 break; 190 191 case GL_INTENSITY: 192 case GL_INTENSITY4: 193 case GL_INTENSITY8: 194 RETURN_IF_SUPPORTED(MESA_FORMAT_I8); 195 break; 196 197 case GL_INTENSITY12: 198 case GL_INTENSITY16: 199 RETURN_IF_SUPPORTED(MESA_FORMAT_I16); 200 RETURN_IF_SUPPORTED(MESA_FORMAT_I8); 201 break; 202 203 default: 204 ; /* fallthrough */ 205 } 206 207 if (ctx->Extensions.ARB_depth_texture) { 208 switch (internalFormat) { 209 case GL_DEPTH_COMPONENT: 210 case GL_DEPTH_COMPONENT24: 211 case GL_DEPTH_COMPONENT32: 212 RETURN_IF_SUPPORTED(MESA_FORMAT_Z32); 213 RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24); 214 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 215 break; 216 case GL_DEPTH_COMPONENT16: 217 RETURN_IF_SUPPORTED(MESA_FORMAT_Z16); 218 RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24); 219 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 220 default: 221 ; /* fallthrough */ 222 } 223 } 224 225 switch (internalFormat) { 226 case GL_COMPRESSED_ALPHA_ARB: 227 RETURN_IF_SUPPORTED(MESA_FORMAT_A8); 228 break; 229 case GL_COMPRESSED_LUMINANCE_ARB: 230 RETURN_IF_SUPPORTED(MESA_FORMAT_L8); 231 break; 232 case GL_COMPRESSED_LUMINANCE_ALPHA_ARB: 233 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 234 break; 235 case GL_COMPRESSED_INTENSITY_ARB: 236 RETURN_IF_SUPPORTED(MESA_FORMAT_I8); 237 break; 238 case GL_COMPRESSED_RGB_ARB: 239 /* We don't use texture compression for 1D and 1D array textures. 240 * For 1D textures, compressions doesn't buy us much. 241 * For 1D ARRAY textures, there's complicated issues with updating 242 * sub-regions on non-block boundaries with glCopyTexSubImage, among 243 * other issues. FWIW, the GL_EXT_texture_array extension prohibits 244 * 1D ARRAY textures in S3TC format. 245 */ 246 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) { 247 if (ctx->Extensions.EXT_texture_compression_s3tc || 248 ctx->Extensions.S3_s3tc) 249 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 250 if (ctx->Extensions.TDFX_texture_compression_FXT1) 251 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); 252 } 253 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); 254 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 255 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 256 break; 257 case GL_COMPRESSED_RGBA_ARB: 258 /* We don't use texture compression for 1D and 1D array textures. */ 259 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) { 260 if (ctx->Extensions.EXT_texture_compression_s3tc || 261 ctx->Extensions.S3_s3tc) 262 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */ 263 if (ctx->Extensions.TDFX_texture_compression_FXT1) 264 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); 265 } 266 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 267 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 268 break; 269 default: 270 ; /* fallthrough */ 271 } 272 273 if (ctx->Extensions.ARB_ES2_compatibility) { 274 switch (internalFormat) { 275 case GL_RGB565: 276 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 277 break; 278 default: 279 ; /* fallthrough */ 280 } 281 } 282 283 if (ctx->Extensions.MESA_ycbcr_texture) { 284 if (internalFormat == GL_YCBCR_MESA) { 285 if (type == GL_UNSIGNED_SHORT_8_8_MESA) 286 RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR); 287 else 288 RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV); 289 } 290 } 291 292 #if FEATURE_texture_fxt1 293 if (ctx->Extensions.TDFX_texture_compression_FXT1) { 294 switch (internalFormat) { 295 case GL_COMPRESSED_RGB_FXT1_3DFX: 296 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); 297 break; 298 case GL_COMPRESSED_RGBA_FXT1_3DFX: 299 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); 300 break; 301 default: 302 ; /* fallthrough */ 303 } 304 } 305 #endif 306 307 #if FEATURE_texture_s3tc 308 if (ctx->Extensions.EXT_texture_compression_s3tc) { 309 switch (internalFormat) { 310 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: 311 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 312 break; 313 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: 314 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT1); 315 break; 316 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: 317 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 318 break; 319 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: 320 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5); 321 break; 322 default: 323 ; /* fallthrough */ 324 } 325 } 326 327 if (ctx->Extensions.S3_s3tc) { 328 switch (internalFormat) { 329 case GL_RGB_S3TC: 330 case GL_RGB4_S3TC: 331 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 332 break; 333 case GL_RGBA_S3TC: 334 case GL_RGBA4_S3TC: 335 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 336 break; 337 default: 338 ; /* fallthrough */ 339 } 340 } 341 #endif 342 343 if (ctx->Extensions.ARB_texture_float) { 344 switch (internalFormat) { 345 case GL_ALPHA16F_ARB: 346 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 347 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 348 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 349 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 350 break; 351 case GL_ALPHA32F_ARB: 352 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 353 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 354 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 355 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 356 break; 357 case GL_LUMINANCE16F_ARB: 358 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 359 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 360 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 361 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 362 break; 363 case GL_LUMINANCE32F_ARB: 364 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 365 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 366 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 367 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 368 break; 369 case GL_LUMINANCE_ALPHA16F_ARB: 370 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 371 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 372 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 373 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 374 break; 375 case GL_LUMINANCE_ALPHA32F_ARB: 376 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 377 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 378 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 379 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 380 break; 381 case GL_INTENSITY16F_ARB: 382 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 383 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 384 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 385 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 386 break; 387 case GL_INTENSITY32F_ARB: 388 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 389 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 390 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 391 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 392 break; 393 case GL_RGB16F_ARB: 394 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 395 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 396 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 397 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 398 break; 399 case GL_RGB32F_ARB: 400 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 401 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 402 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 403 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 404 break; 405 case GL_RGBA16F_ARB: 406 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 407 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 408 break; 409 case GL_RGBA32F_ARB: 410 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 411 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 412 break; 413 default: 414 ; /* fallthrough */ 415 } 416 } 417 418 if (ctx->Extensions.EXT_texture_shared_exponent) { 419 switch (internalFormat) { 420 case GL_RGB9_E5: 421 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]); 422 return MESA_FORMAT_RGB9_E5_FLOAT; 423 default: 424 ; /* fallthrough */ 425 } 426 } 427 428 if (ctx->Extensions.EXT_packed_float) { 429 switch (internalFormat) { 430 case GL_R11F_G11F_B10F: 431 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]); 432 return MESA_FORMAT_R11_G11_B10_FLOAT; 433 default: 434 ; /* fallthrough */ 435 } 436 } 437 438 if (ctx->Extensions.EXT_packed_depth_stencil) { 439 switch (internalFormat) { 440 case GL_DEPTH_STENCIL_EXT: 441 case GL_DEPTH24_STENCIL8_EXT: 442 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8); 443 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 444 break; 445 default: 446 ; /* fallthrough */ 447 } 448 } 449 450 if (ctx->Extensions.ARB_depth_buffer_float) { 451 switch (internalFormat) { 452 case GL_DEPTH_COMPONENT32F: 453 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]); 454 return MESA_FORMAT_Z32_FLOAT; 455 case GL_DEPTH32F_STENCIL8: 456 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]); 457 return MESA_FORMAT_Z32_FLOAT_X24S8; 458 default: 459 ; /* fallthrough */ 460 } 461 } 462 463 if (ctx->Extensions.ATI_envmap_bumpmap) { 464 switch (internalFormat) { 465 case GL_DUDV_ATI: 466 case GL_DU8DV8_ATI: 467 RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8); 468 break; 469 default: 470 ; /* fallthrough */ 471 } 472 } 473 474 if (ctx->Extensions.EXT_texture_snorm) { 475 switch (internalFormat) { 476 case GL_RED_SNORM: 477 case GL_R8_SNORM: 478 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8); 479 break; 480 case GL_RG_SNORM: 481 case GL_RG8_SNORM: 482 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV); 483 break; 484 case GL_RGB_SNORM: 485 case GL_RGB8_SNORM: 486 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 487 /* FALLTHROUGH */ 488 case GL_RGBA_SNORM: 489 case GL_RGBA8_SNORM: 490 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 491 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 492 break; 493 case GL_ALPHA_SNORM: 494 case GL_ALPHA8_SNORM: 495 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8); 496 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 497 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 498 break; 499 case GL_LUMINANCE_SNORM: 500 case GL_LUMINANCE8_SNORM: 501 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8); 502 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 503 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 504 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 505 break; 506 case GL_LUMINANCE_ALPHA_SNORM: 507 case GL_LUMINANCE8_ALPHA8_SNORM: 508 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88); 509 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 510 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 511 break; 512 case GL_INTENSITY_SNORM: 513 case GL_INTENSITY8_SNORM: 514 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8); 515 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 516 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 517 break; 518 case GL_R16_SNORM: 519 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16); 520 break; 521 case GL_RG16_SNORM: 522 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616); 523 break; 524 case GL_RGB16_SNORM: 525 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16); 526 /* FALLTHROUGH */ 527 case GL_RGBA16_SNORM: 528 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 529 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 530 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 531 break; 532 case GL_ALPHA16_SNORM: 533 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16); 534 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 535 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 536 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 537 break; 538 case GL_LUMINANCE16_SNORM: 539 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16); 540 /* FALLTHROUGH */ 541 case GL_LUMINANCE16_ALPHA16_SNORM: 542 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616); 543 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 544 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 545 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 546 break; 547 case GL_INTENSITY16_SNORM: 548 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16); 549 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 550 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 551 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 552 break; 553 default: 554 ; /* fall-through */ 555 } 556 } 557 558 #if FEATURE_EXT_texture_sRGB 559 if (ctx->Extensions.EXT_texture_sRGB) { 560 switch (internalFormat) { 561 case GL_SRGB_EXT: 562 case GL_SRGB8_EXT: 563 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 564 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 565 break; 566 case GL_SRGB_ALPHA_EXT: 567 case GL_SRGB8_ALPHA8_EXT: 568 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 569 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 570 break; 571 case GL_SLUMINANCE_EXT: 572 case GL_SLUMINANCE8_EXT: 573 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 574 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 575 break; 576 case GL_SLUMINANCE_ALPHA_EXT: 577 case GL_SLUMINANCE8_ALPHA8_EXT: 578 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 579 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 580 break; 581 case GL_COMPRESSED_SLUMINANCE_EXT: 582 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 583 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 584 break; 585 case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: 586 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 587 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 588 break; 589 case GL_COMPRESSED_SRGB_EXT: 590 #if FEATURE_texture_s3tc 591 if (ctx->Extensions.EXT_texture_compression_s3tc) 592 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 593 #endif 594 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 595 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 596 break; 597 case GL_COMPRESSED_SRGB_ALPHA_EXT: 598 #if FEATURE_texture_s3tc 599 if (ctx->Extensions.EXT_texture_compression_s3tc) 600 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ 601 #endif 602 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 603 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 604 break; 605 #if FEATURE_texture_s3tc 606 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: 607 if (ctx->Extensions.EXT_texture_compression_s3tc) 608 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 609 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 610 break; 611 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 612 if (ctx->Extensions.EXT_texture_compression_s3tc) 613 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1); 614 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 615 break; 616 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 617 if (ctx->Extensions.EXT_texture_compression_s3tc) 618 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); 619 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 620 break; 621 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 622 if (ctx->Extensions.EXT_texture_compression_s3tc) 623 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5); 624 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 625 break; 626 #endif 627 default: 628 ; /* fallthrough */ 629 } 630 } 631 #endif /* FEATURE_EXT_texture_sRGB */ 632 633 if (ctx->Extensions.EXT_texture_integer) { 634 switch (internalFormat) { 635 case GL_ALPHA8UI_EXT: 636 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8); 637 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 638 break; 639 case GL_ALPHA16UI_EXT: 640 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16); 641 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 642 break; 643 case GL_ALPHA32UI_EXT: 644 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32); 645 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 646 break; 647 case GL_ALPHA8I_EXT: 648 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8); 649 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 650 break; 651 case GL_ALPHA16I_EXT: 652 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16); 653 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 654 break; 655 case GL_ALPHA32I_EXT: 656 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32); 657 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 658 break; 659 case GL_LUMINANCE8UI_EXT: 660 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8); 661 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 662 break; 663 case GL_LUMINANCE16UI_EXT: 664 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16); 665 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 666 break; 667 case GL_LUMINANCE32UI_EXT: 668 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32); 669 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 670 break; 671 case GL_LUMINANCE8I_EXT: 672 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8); 673 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 674 break; 675 case GL_LUMINANCE16I_EXT: 676 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16); 677 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 678 break; 679 case GL_LUMINANCE32I_EXT: 680 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32); 681 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 682 break; 683 case GL_LUMINANCE_ALPHA8UI_EXT: 684 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8); 685 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 686 break; 687 case GL_LUMINANCE_ALPHA16UI_EXT: 688 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16); 689 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 690 break; 691 case GL_LUMINANCE_ALPHA32UI_EXT: 692 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32); 693 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 694 break; 695 case GL_LUMINANCE_ALPHA8I_EXT: 696 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8); 697 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 698 break; 699 case GL_LUMINANCE_ALPHA16I_EXT: 700 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16); 701 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 702 break; 703 case GL_LUMINANCE_ALPHA32I_EXT: 704 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32); 705 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 706 break; 707 case GL_INTENSITY8UI_EXT: 708 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8); 709 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 710 break; 711 case GL_INTENSITY16UI_EXT: 712 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16); 713 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 714 break; 715 case GL_INTENSITY32UI_EXT: 716 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32); 717 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 718 break; 719 case GL_INTENSITY8I_EXT: 720 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8); 721 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 722 break; 723 case GL_INTENSITY16I_EXT: 724 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16); 725 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 726 break; 727 case GL_INTENSITY32I_EXT: 728 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32); 729 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 730 break; 731 } 732 } 733 734 if (ctx->Version >= 30 || 735 ctx->Extensions.EXT_texture_integer) { 736 switch (internalFormat) { 737 case GL_RGB8UI_EXT: 738 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8); 739 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 740 break; 741 case GL_RGB16UI_EXT: 742 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16); 743 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 744 break; 745 case GL_RGB32UI_EXT: 746 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32); 747 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 748 break; 749 case GL_RGB8I_EXT: 750 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8); 751 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 752 break; 753 case GL_RGB16I_EXT: 754 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16); 755 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 756 break; 757 case GL_RGB32I_EXT: 758 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32); 759 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 760 break; 761 case GL_RGBA8UI_EXT: 762 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 763 break; 764 case GL_RGBA16UI_EXT: 765 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 766 break; 767 case GL_RGBA32UI_EXT: 768 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 769 break; 770 case GL_RGBA8I_EXT: 771 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 772 break; 773 case GL_RGBA16I_EXT: 774 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 775 break; 776 case GL_RGBA32I_EXT: 777 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 778 break; 779 } 780 } 781 782 if (ctx->Extensions.ARB_texture_rg) { 783 switch (internalFormat) { 784 case GL_R8: 785 case GL_RED: 786 RETURN_IF_SUPPORTED(MESA_FORMAT_R8); 787 break; 788 789 case GL_COMPRESSED_RED: 790 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) 791 RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 792 RETURN_IF_SUPPORTED(MESA_FORMAT_R8); 793 break; 794 795 case GL_R16: 796 RETURN_IF_SUPPORTED(MESA_FORMAT_R16); 797 break; 798 799 case GL_RG: 800 case GL_RG8: 801 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 802 break; 803 804 case GL_COMPRESSED_RG: 805 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) 806 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 807 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 808 break; 809 810 case GL_RG16: 811 RETURN_IF_SUPPORTED(MESA_FORMAT_RG1616); 812 break; 813 814 default: 815 ; /* fallthrough */ 816 } 817 } 818 819 if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) { 820 switch (internalFormat) { 821 case GL_R16F: 822 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 823 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 824 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 825 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 826 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 827 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 828 break; 829 case GL_R32F: 830 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 831 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 832 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 833 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 834 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 835 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 836 break; 837 case GL_RG16F: 838 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 839 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 840 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 841 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 842 break; 843 case GL_RG32F: 844 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 845 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 846 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 847 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 848 break; 849 850 default: 851 ; /* fallthrough */ 852 } 853 } 854 855 if (ctx->Version >= 30 || 856 (ctx->Extensions.ARB_texture_rg && 857 ctx->Extensions.EXT_texture_integer)) { 858 switch (internalFormat) { 859 case GL_R8UI: 860 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8); 861 break; 862 case GL_RG8UI: 863 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8); 864 break; 865 case GL_R16UI: 866 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16); 867 break; 868 case GL_RG16UI: 869 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16); 870 break; 871 case GL_R32UI: 872 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32); 873 break; 874 case GL_RG32UI: 875 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32); 876 break; 877 case GL_R8I: 878 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8); 879 break; 880 case GL_RG8I: 881 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8); 882 break; 883 case GL_R16I: 884 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16); 885 break; 886 case GL_RG16I: 887 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16); 888 break; 889 case GL_R32I: 890 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32); 891 break; 892 case GL_RG32I: 893 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32); 894 break; 895 default: 896 break; 897 } 898 } 899 900 if (ctx->Extensions.ARB_texture_rgb10_a2ui) { 901 switch (internalFormat) { 902 case GL_RGB10_A2UI: 903 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT); 904 RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT); 905 break; 906 default: 907 break; 908 } 909 } 910 /* GL_BGRA can be an internal format *only* in OpenGL ES (1.x or 2.0). 911 */ 912 if (_mesa_is_gles(ctx)) { 913 switch (internalFormat) { 914 case GL_BGRA: 915 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 916 break; 917 918 default: 919 ; /* fallthrough */ 920 } 921 } 922 923 if (ctx->Extensions.ARB_texture_compression_rgtc) { 924 switch (internalFormat) { 925 case GL_COMPRESSED_RED_RGTC1: 926 RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 927 break; 928 case GL_COMPRESSED_SIGNED_RED_RGTC1: 929 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RED_RGTC1); 930 break; 931 case GL_COMPRESSED_RG_RGTC2: 932 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 933 break; 934 case GL_COMPRESSED_SIGNED_RG_RGTC2: 935 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_RGTC2); 936 break; 937 default: 938 ; /* fallthrough */ 939 } 940 } 941 942 if (ctx->Extensions.EXT_texture_compression_latc) { 943 switch (internalFormat) { 944 case GL_COMPRESSED_LUMINANCE_LATC1_EXT: 945 RETURN_IF_SUPPORTED(MESA_FORMAT_L_LATC1); 946 break; 947 case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: 948 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L_LATC1); 949 break; 950 case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: 951 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 952 break; 953 case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: 954 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_LA_LATC2); 955 break; 956 default: 957 ; /* fallthrough */ 958 } 959 } 960 961 if (ctx->Extensions.ATI_texture_compression_3dc) { 962 switch (internalFormat) { 963 case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: 964 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 965 break; 966 default: 967 ; /* fallthrough */ 968 } 969 } 970 971 if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) { 972 switch (internalFormat) { 973 case GL_ETC1_RGB8_OES: 974 RETURN_IF_SUPPORTED(MESA_FORMAT_ETC1_RGB8); 975 break; 976 default: 977 ; /* fallthrough */ 978 } 979 } 980 981 _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()", 982 _mesa_lookup_enum_by_nr(internalFormat)); 983 return MESA_FORMAT_NONE; 984 } 985 986