texformat.c revision 9545d9611fd983fd63960de787dff51aedd4a7f9
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 */ 63gl_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 (ctx->Extensions.TDFX_texture_compression_FXT1) { 293 switch (internalFormat) { 294 case GL_COMPRESSED_RGB_FXT1_3DFX: 295 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); 296 break; 297 case GL_COMPRESSED_RGBA_FXT1_3DFX: 298 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); 299 break; 300 default: 301 ; /* fallthrough */ 302 } 303 } 304 305 if (ctx->Extensions.EXT_texture_compression_s3tc || 306 (ctx->API == API_OPENGLES2 && 307 ctx->Extensions.ANGLE_texture_compression_dxt)) { 308 switch (internalFormat) { 309 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: 310 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 311 break; 312 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: 313 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT1); 314 break; 315 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: 316 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 317 break; 318 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: 319 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5); 320 break; 321 default: 322 ; /* fallthrough */ 323 } 324 } 325 326 if (ctx->Extensions.S3_s3tc) { 327 switch (internalFormat) { 328 case GL_RGB_S3TC: 329 case GL_RGB4_S3TC: 330 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 331 break; 332 case GL_RGBA_S3TC: 333 case GL_RGBA4_S3TC: 334 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 335 break; 336 default: 337 ; /* fallthrough */ 338 } 339 } 340 341 if (ctx->Extensions.ARB_texture_float) { 342 switch (internalFormat) { 343 case GL_ALPHA16F_ARB: 344 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 345 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 346 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 347 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 348 break; 349 case GL_ALPHA32F_ARB: 350 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 351 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 352 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 353 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 354 break; 355 case GL_LUMINANCE16F_ARB: 356 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 357 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 358 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 359 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 360 break; 361 case GL_LUMINANCE32F_ARB: 362 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 363 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 364 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 365 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 366 break; 367 case GL_LUMINANCE_ALPHA16F_ARB: 368 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 369 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 370 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 371 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 372 break; 373 case GL_LUMINANCE_ALPHA32F_ARB: 374 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 375 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 376 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 377 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 378 break; 379 case GL_INTENSITY16F_ARB: 380 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 381 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 382 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 383 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 384 break; 385 case GL_INTENSITY32F_ARB: 386 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 387 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 388 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 389 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 390 break; 391 case GL_RGB16F_ARB: 392 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 393 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 394 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 395 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 396 break; 397 case GL_RGB32F_ARB: 398 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 399 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 400 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 401 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 402 break; 403 case GL_RGBA16F_ARB: 404 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 405 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 406 break; 407 case GL_RGBA32F_ARB: 408 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 409 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 410 break; 411 default: 412 ; /* fallthrough */ 413 } 414 } 415 416 if (ctx->Extensions.EXT_texture_shared_exponent) { 417 switch (internalFormat) { 418 case GL_RGB9_E5: 419 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]); 420 return MESA_FORMAT_RGB9_E5_FLOAT; 421 default: 422 ; /* fallthrough */ 423 } 424 } 425 426 if (ctx->Extensions.EXT_packed_float) { 427 switch (internalFormat) { 428 case GL_R11F_G11F_B10F: 429 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]); 430 return MESA_FORMAT_R11_G11_B10_FLOAT; 431 default: 432 ; /* fallthrough */ 433 } 434 } 435 436 if (ctx->Extensions.EXT_packed_depth_stencil) { 437 switch (internalFormat) { 438 case GL_DEPTH_STENCIL_EXT: 439 case GL_DEPTH24_STENCIL8_EXT: 440 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8); 441 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 442 break; 443 default: 444 ; /* fallthrough */ 445 } 446 } 447 448 if (ctx->Extensions.ARB_depth_buffer_float) { 449 switch (internalFormat) { 450 case GL_DEPTH_COMPONENT32F: 451 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]); 452 return MESA_FORMAT_Z32_FLOAT; 453 case GL_DEPTH32F_STENCIL8: 454 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]); 455 return MESA_FORMAT_Z32_FLOAT_X24S8; 456 default: 457 ; /* fallthrough */ 458 } 459 } 460 461 if (ctx->Extensions.ATI_envmap_bumpmap) { 462 switch (internalFormat) { 463 case GL_DUDV_ATI: 464 case GL_DU8DV8_ATI: 465 RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8); 466 break; 467 default: 468 ; /* fallthrough */ 469 } 470 } 471 472 if (ctx->Extensions.EXT_texture_snorm) { 473 switch (internalFormat) { 474 case GL_RED_SNORM: 475 case GL_R8_SNORM: 476 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8); 477 break; 478 case GL_RG_SNORM: 479 case GL_RG8_SNORM: 480 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV); 481 break; 482 case GL_RGB_SNORM: 483 case GL_RGB8_SNORM: 484 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 485 /* FALLTHROUGH */ 486 case GL_RGBA_SNORM: 487 case GL_RGBA8_SNORM: 488 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 489 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 490 break; 491 case GL_ALPHA_SNORM: 492 case GL_ALPHA8_SNORM: 493 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8); 494 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 495 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 496 break; 497 case GL_LUMINANCE_SNORM: 498 case GL_LUMINANCE8_SNORM: 499 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8); 500 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 501 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 502 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 503 break; 504 case GL_LUMINANCE_ALPHA_SNORM: 505 case GL_LUMINANCE8_ALPHA8_SNORM: 506 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88); 507 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 508 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 509 break; 510 case GL_INTENSITY_SNORM: 511 case GL_INTENSITY8_SNORM: 512 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8); 513 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 514 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 515 break; 516 case GL_R16_SNORM: 517 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16); 518 break; 519 case GL_RG16_SNORM: 520 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616); 521 break; 522 case GL_RGB16_SNORM: 523 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16); 524 /* FALLTHROUGH */ 525 case GL_RGBA16_SNORM: 526 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 527 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 528 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 529 break; 530 case GL_ALPHA16_SNORM: 531 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16); 532 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 533 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 534 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 535 break; 536 case GL_LUMINANCE16_SNORM: 537 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16); 538 /* FALLTHROUGH */ 539 case GL_LUMINANCE16_ALPHA16_SNORM: 540 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616); 541 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 542 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 543 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 544 break; 545 case GL_INTENSITY16_SNORM: 546 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16); 547 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 548 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 549 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 550 break; 551 default: 552 ; /* fall-through */ 553 } 554 } 555 556 if (ctx->Extensions.EXT_texture_sRGB) { 557 switch (internalFormat) { 558 case GL_SRGB_EXT: 559 case GL_SRGB8_EXT: 560 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 561 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 562 break; 563 case GL_SRGB_ALPHA_EXT: 564 case GL_SRGB8_ALPHA8_EXT: 565 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 566 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 567 break; 568 case GL_SLUMINANCE_EXT: 569 case GL_SLUMINANCE8_EXT: 570 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 571 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 572 break; 573 case GL_SLUMINANCE_ALPHA_EXT: 574 case GL_SLUMINANCE8_ALPHA8_EXT: 575 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 576 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 577 break; 578 case GL_COMPRESSED_SLUMINANCE_EXT: 579 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 580 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 581 break; 582 case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: 583 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 584 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 585 break; 586 case GL_COMPRESSED_SRGB_EXT: 587 if (ctx->Extensions.EXT_texture_compression_s3tc) 588 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 589 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 590 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 591 break; 592 case GL_COMPRESSED_SRGB_ALPHA_EXT: 593 if (ctx->Extensions.EXT_texture_compression_s3tc) 594 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ 595 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 596 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 597 break; 598 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: 599 if (ctx->Extensions.EXT_texture_compression_s3tc) 600 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 601 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 602 break; 603 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 604 if (ctx->Extensions.EXT_texture_compression_s3tc) 605 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1); 606 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 607 break; 608 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 609 if (ctx->Extensions.EXT_texture_compression_s3tc || 610 (ctx->API == API_OPENGLES2 && 611 ctx->Extensions.ANGLE_texture_compression_dxt)) 612 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); 613 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 614 break; 615 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 616 if (ctx->Extensions.EXT_texture_compression_s3tc || 617 (ctx->API == API_OPENGLES2 && 618 ctx->Extensions.ANGLE_texture_compression_dxt)) 619 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5); 620 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 621 break; 622 default: 623 ; /* fallthrough */ 624 } 625 } 626 627 if (ctx->Extensions.EXT_texture_integer) { 628 switch (internalFormat) { 629 case GL_ALPHA8UI_EXT: 630 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8); 631 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 632 break; 633 case GL_ALPHA16UI_EXT: 634 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16); 635 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 636 break; 637 case GL_ALPHA32UI_EXT: 638 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32); 639 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 640 break; 641 case GL_ALPHA8I_EXT: 642 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8); 643 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 644 break; 645 case GL_ALPHA16I_EXT: 646 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16); 647 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 648 break; 649 case GL_ALPHA32I_EXT: 650 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32); 651 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 652 break; 653 case GL_LUMINANCE8UI_EXT: 654 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8); 655 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 656 break; 657 case GL_LUMINANCE16UI_EXT: 658 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16); 659 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 660 break; 661 case GL_LUMINANCE32UI_EXT: 662 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32); 663 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 664 break; 665 case GL_LUMINANCE8I_EXT: 666 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8); 667 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 668 break; 669 case GL_LUMINANCE16I_EXT: 670 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16); 671 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 672 break; 673 case GL_LUMINANCE32I_EXT: 674 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32); 675 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 676 break; 677 case GL_LUMINANCE_ALPHA8UI_EXT: 678 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8); 679 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 680 break; 681 case GL_LUMINANCE_ALPHA16UI_EXT: 682 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16); 683 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 684 break; 685 case GL_LUMINANCE_ALPHA32UI_EXT: 686 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32); 687 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 688 break; 689 case GL_LUMINANCE_ALPHA8I_EXT: 690 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8); 691 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 692 break; 693 case GL_LUMINANCE_ALPHA16I_EXT: 694 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16); 695 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 696 break; 697 case GL_LUMINANCE_ALPHA32I_EXT: 698 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32); 699 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 700 break; 701 case GL_INTENSITY8UI_EXT: 702 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8); 703 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 704 break; 705 case GL_INTENSITY16UI_EXT: 706 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16); 707 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 708 break; 709 case GL_INTENSITY32UI_EXT: 710 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32); 711 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 712 break; 713 case GL_INTENSITY8I_EXT: 714 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8); 715 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 716 break; 717 case GL_INTENSITY16I_EXT: 718 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16); 719 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 720 break; 721 case GL_INTENSITY32I_EXT: 722 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32); 723 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 724 break; 725 } 726 } 727 728 if (ctx->Version >= 30 || 729 ctx->Extensions.EXT_texture_integer) { 730 switch (internalFormat) { 731 case GL_RGB8UI_EXT: 732 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8); 733 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 734 break; 735 case GL_RGB16UI_EXT: 736 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16); 737 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 738 break; 739 case GL_RGB32UI_EXT: 740 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32); 741 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 742 break; 743 case GL_RGB8I_EXT: 744 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8); 745 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 746 break; 747 case GL_RGB16I_EXT: 748 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16); 749 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 750 break; 751 case GL_RGB32I_EXT: 752 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32); 753 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 754 break; 755 case GL_RGBA8UI_EXT: 756 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 757 break; 758 case GL_RGBA16UI_EXT: 759 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 760 break; 761 case GL_RGBA32UI_EXT: 762 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 763 break; 764 case GL_RGBA8I_EXT: 765 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 766 break; 767 case GL_RGBA16I_EXT: 768 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 769 break; 770 case GL_RGBA32I_EXT: 771 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 772 break; 773 } 774 } 775 776 if (ctx->Extensions.ARB_texture_rg) { 777 switch (internalFormat) { 778 case GL_R8: 779 case GL_RED: 780 RETURN_IF_SUPPORTED(MESA_FORMAT_R8); 781 break; 782 783 case GL_COMPRESSED_RED: 784 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) 785 RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 786 RETURN_IF_SUPPORTED(MESA_FORMAT_R8); 787 break; 788 789 case GL_R16: 790 RETURN_IF_SUPPORTED(MESA_FORMAT_R16); 791 break; 792 793 case GL_RG: 794 case GL_RG8: 795 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 796 break; 797 798 case GL_COMPRESSED_RG: 799 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) 800 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 801 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 802 break; 803 804 case GL_RG16: 805 RETURN_IF_SUPPORTED(MESA_FORMAT_RG1616); 806 break; 807 808 default: 809 ; /* fallthrough */ 810 } 811 } 812 813 if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) { 814 switch (internalFormat) { 815 case GL_R16F: 816 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 817 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 818 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 819 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 820 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 821 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 822 break; 823 case GL_R32F: 824 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 825 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 826 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 827 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 828 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 829 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 830 break; 831 case GL_RG16F: 832 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 833 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 834 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 835 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 836 break; 837 case GL_RG32F: 838 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 839 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 840 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 841 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 842 break; 843 844 default: 845 ; /* fallthrough */ 846 } 847 } 848 849 if (ctx->Version >= 30 || 850 (ctx->Extensions.ARB_texture_rg && 851 ctx->Extensions.EXT_texture_integer)) { 852 switch (internalFormat) { 853 case GL_R8UI: 854 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8); 855 break; 856 case GL_RG8UI: 857 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8); 858 break; 859 case GL_R16UI: 860 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16); 861 break; 862 case GL_RG16UI: 863 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16); 864 break; 865 case GL_R32UI: 866 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32); 867 break; 868 case GL_RG32UI: 869 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32); 870 break; 871 case GL_R8I: 872 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8); 873 break; 874 case GL_RG8I: 875 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8); 876 break; 877 case GL_R16I: 878 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16); 879 break; 880 case GL_RG16I: 881 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16); 882 break; 883 case GL_R32I: 884 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32); 885 break; 886 case GL_RG32I: 887 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32); 888 break; 889 default: 890 break; 891 } 892 } 893 894 if (ctx->Extensions.ARB_texture_rgb10_a2ui) { 895 switch (internalFormat) { 896 case GL_RGB10_A2UI: 897 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT); 898 RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT); 899 break; 900 default: 901 break; 902 } 903 } 904 /* GL_BGRA can be an internal format *only* in OpenGL ES (1.x or 2.0). 905 */ 906 if (_mesa_is_gles(ctx)) { 907 switch (internalFormat) { 908 case GL_BGRA: 909 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 910 break; 911 912 default: 913 ; /* fallthrough */ 914 } 915 } 916 917 if (ctx->Extensions.ARB_texture_compression_rgtc) { 918 switch (internalFormat) { 919 case GL_COMPRESSED_RED_RGTC1: 920 RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 921 break; 922 case GL_COMPRESSED_SIGNED_RED_RGTC1: 923 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RED_RGTC1); 924 break; 925 case GL_COMPRESSED_RG_RGTC2: 926 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 927 break; 928 case GL_COMPRESSED_SIGNED_RG_RGTC2: 929 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_RGTC2); 930 break; 931 default: 932 ; /* fallthrough */ 933 } 934 } 935 936 if (ctx->Extensions.EXT_texture_compression_latc) { 937 switch (internalFormat) { 938 case GL_COMPRESSED_LUMINANCE_LATC1_EXT: 939 RETURN_IF_SUPPORTED(MESA_FORMAT_L_LATC1); 940 break; 941 case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: 942 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L_LATC1); 943 break; 944 case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: 945 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 946 break; 947 case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: 948 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_LA_LATC2); 949 break; 950 default: 951 ; /* fallthrough */ 952 } 953 } 954 955 if (ctx->Extensions.ATI_texture_compression_3dc) { 956 switch (internalFormat) { 957 case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: 958 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 959 break; 960 default: 961 ; /* fallthrough */ 962 } 963 } 964 965 if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) { 966 switch (internalFormat) { 967 case GL_ETC1_RGB8_OES: 968 RETURN_IF_SUPPORTED(MESA_FORMAT_ETC1_RGB8); 969 break; 970 default: 971 ; /* fallthrough */ 972 } 973 } 974 975 _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()", 976 _mesa_lookup_enum_by_nr(internalFormat)); 977 return MESA_FORMAT_NONE; 978} 979 980