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