texformat.c revision d47a6ada9ca9670c60fc141fabadf40c63031c08
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Mesa 3-D graphics library 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Version: 7.7 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 2008-2009 VMware, Inc. 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * copy of this software and associated documentation files (the "Software"), 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to deal in the Software without restriction, including without limitation 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Software is furnished to do so, subject to the following conditions: 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The above copyright notice and this permission notice shall be included 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in all copies or substantial portions of the Software. 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 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 if (ctx->Extensions.EXT_texture_compression_s3tc || 240 ctx->Extensions.S3_s3tc) 241 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 242 if (ctx->Extensions.TDFX_texture_compression_FXT1) 243 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); 244 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); 245 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 246 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 247 break; 248 case GL_COMPRESSED_RGBA_ARB: 249 if (ctx->Extensions.EXT_texture_compression_s3tc || 250 ctx->Extensions.S3_s3tc) 251 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */ 252 if (ctx->Extensions.TDFX_texture_compression_FXT1) 253 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); 254 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 255 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 256 break; 257 default: 258 ; /* fallthrough */ 259 } 260 261 if (ctx->Extensions.ARB_ES2_compatibility) { 262 switch (internalFormat) { 263 case GL_RGB565: 264 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 265 break; 266 default: 267 ; /* fallthrough */ 268 } 269 } 270 271 if (ctx->Extensions.MESA_ycbcr_texture) { 272 if (internalFormat == GL_YCBCR_MESA) { 273 if (type == GL_UNSIGNED_SHORT_8_8_MESA) 274 RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR); 275 else 276 RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV); 277 } 278 } 279 280#if FEATURE_texture_fxt1 281 if (ctx->Extensions.TDFX_texture_compression_FXT1) { 282 switch (internalFormat) { 283 case GL_COMPRESSED_RGB_FXT1_3DFX: 284 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); 285 break; 286 case GL_COMPRESSED_RGBA_FXT1_3DFX: 287 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); 288 break; 289 default: 290 ; /* fallthrough */ 291 } 292 } 293#endif 294 295#if FEATURE_texture_s3tc 296 if (ctx->Extensions.EXT_texture_compression_s3tc) { 297 switch (internalFormat) { 298 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: 299 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 300 break; 301 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: 302 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT1); 303 break; 304 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: 305 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 306 break; 307 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: 308 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5); 309 break; 310 default: 311 ; /* fallthrough */ 312 } 313 } 314 315 if (ctx->Extensions.S3_s3tc) { 316 switch (internalFormat) { 317 case GL_RGB_S3TC: 318 case GL_RGB4_S3TC: 319 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 320 break; 321 case GL_RGBA_S3TC: 322 case GL_RGBA4_S3TC: 323 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 324 break; 325 default: 326 ; /* fallthrough */ 327 } 328 } 329#endif 330 331 if (ctx->Extensions.ARB_texture_float) { 332 switch (internalFormat) { 333 case GL_ALPHA16F_ARB: 334 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 335 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 336 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 337 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 338 break; 339 case GL_ALPHA32F_ARB: 340 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 341 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 342 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 343 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 344 break; 345 case GL_LUMINANCE16F_ARB: 346 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 347 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 348 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 349 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 350 break; 351 case GL_LUMINANCE32F_ARB: 352 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 353 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 354 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 355 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 356 break; 357 case GL_LUMINANCE_ALPHA16F_ARB: 358 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 359 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 360 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 361 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 362 break; 363 case GL_LUMINANCE_ALPHA32F_ARB: 364 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 365 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 366 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 367 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 368 break; 369 case GL_INTENSITY16F_ARB: 370 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 371 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 372 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 373 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 374 break; 375 case GL_INTENSITY32F_ARB: 376 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 377 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 378 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 379 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 380 break; 381 case GL_RGB16F_ARB: 382 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 383 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 384 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 385 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 386 break; 387 case GL_RGB32F_ARB: 388 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 389 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 390 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 391 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 392 break; 393 case GL_RGBA16F_ARB: 394 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 395 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 396 break; 397 case GL_RGBA32F_ARB: 398 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 399 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 400 break; 401 default: 402 ; /* fallthrough */ 403 } 404 } 405 406 if (ctx->Extensions.EXT_texture_shared_exponent) { 407 switch (internalFormat) { 408 case GL_RGB9_E5: 409 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]); 410 return MESA_FORMAT_RGB9_E5_FLOAT; 411 default: 412 ; /* fallthrough */ 413 } 414 } 415 416 if (ctx->Extensions.EXT_packed_float) { 417 switch (internalFormat) { 418 case GL_R11F_G11F_B10F: 419 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]); 420 return MESA_FORMAT_R11_G11_B10_FLOAT; 421 default: 422 ; /* fallthrough */ 423 } 424 } 425 426 if (ctx->Extensions.EXT_packed_depth_stencil) { 427 switch (internalFormat) { 428 case GL_DEPTH_STENCIL_EXT: 429 case GL_DEPTH24_STENCIL8_EXT: 430 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8); 431 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 432 break; 433 default: 434 ; /* fallthrough */ 435 } 436 } 437 438 if (ctx->Extensions.ARB_depth_buffer_float) { 439 switch (internalFormat) { 440 case GL_DEPTH_COMPONENT32F: 441 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]); 442 return MESA_FORMAT_Z32_FLOAT; 443 case GL_DEPTH32F_STENCIL8: 444 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]); 445 return MESA_FORMAT_Z32_FLOAT_X24S8; 446 default: 447 ; /* fallthrough */ 448 } 449 } 450 451 if (ctx->Extensions.ATI_envmap_bumpmap) { 452 switch (internalFormat) { 453 case GL_DUDV_ATI: 454 case GL_DU8DV8_ATI: 455 RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8); 456 break; 457 default: 458 ; /* fallthrough */ 459 } 460 } 461 462 if (ctx->Extensions.EXT_texture_snorm) { 463 switch (internalFormat) { 464 case GL_RED_SNORM: 465 case GL_R8_SNORM: 466 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8); 467 break; 468 case GL_RG_SNORM: 469 case GL_RG8_SNORM: 470 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV); 471 break; 472 case GL_RGB_SNORM: 473 case GL_RGB8_SNORM: 474 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 475 /* FALLTHROUGH */ 476 case GL_RGBA_SNORM: 477 case GL_RGBA8_SNORM: 478 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 479 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 480 break; 481 case GL_ALPHA_SNORM: 482 case GL_ALPHA8_SNORM: 483 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8); 484 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 485 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 486 break; 487 case GL_LUMINANCE_SNORM: 488 case GL_LUMINANCE8_SNORM: 489 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8); 490 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 491 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 492 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 493 break; 494 case GL_LUMINANCE_ALPHA_SNORM: 495 case GL_LUMINANCE8_ALPHA8_SNORM: 496 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88); 497 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 498 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 499 break; 500 case GL_INTENSITY_SNORM: 501 case GL_INTENSITY8_SNORM: 502 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8); 503 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 504 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 505 break; 506 case GL_R16_SNORM: 507 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16); 508 break; 509 case GL_RG16_SNORM: 510 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616); 511 break; 512 case GL_RGB16_SNORM: 513 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16); 514 /* FALLTHROUGH */ 515 case GL_RGBA16_SNORM: 516 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 517 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 518 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 519 break; 520 case GL_ALPHA16_SNORM: 521 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16); 522 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 523 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 524 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 525 break; 526 case GL_LUMINANCE16_SNORM: 527 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16); 528 /* FALLTHROUGH */ 529 case GL_LUMINANCE16_ALPHA16_SNORM: 530 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616); 531 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 532 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 533 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 534 break; 535 case GL_INTENSITY16_SNORM: 536 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16); 537 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 538 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 539 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 540 break; 541 default: 542 ; /* fall-through */ 543 } 544 } 545 546#if FEATURE_EXT_texture_sRGB 547 if (ctx->Extensions.EXT_texture_sRGB) { 548 switch (internalFormat) { 549 case GL_SRGB_EXT: 550 case GL_SRGB8_EXT: 551 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 552 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 553 break; 554 case GL_SRGB_ALPHA_EXT: 555 case GL_SRGB8_ALPHA8_EXT: 556 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 557 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 558 break; 559 case GL_SLUMINANCE_EXT: 560 case GL_SLUMINANCE8_EXT: 561 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 562 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 563 break; 564 case GL_SLUMINANCE_ALPHA_EXT: 565 case GL_SLUMINANCE8_ALPHA8_EXT: 566 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 567 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 568 break; 569 case GL_COMPRESSED_SLUMINANCE_EXT: 570 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 571 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 572 break; 573 case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: 574 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 575 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 576 break; 577 case GL_COMPRESSED_SRGB_EXT: 578#if FEATURE_texture_s3tc 579 if (ctx->Extensions.EXT_texture_compression_s3tc) 580 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 581#endif 582 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 583 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 584 break; 585 case GL_COMPRESSED_SRGB_ALPHA_EXT: 586#if FEATURE_texture_s3tc 587 if (ctx->Extensions.EXT_texture_compression_s3tc) 588 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ 589#endif 590 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 591 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 592 break; 593#if FEATURE_texture_s3tc 594 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: 595 if (ctx->Extensions.EXT_texture_compression_s3tc) 596 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 597 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 598 break; 599 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 600 if (ctx->Extensions.EXT_texture_compression_s3tc) 601 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1); 602 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 603 break; 604 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 605 if (ctx->Extensions.EXT_texture_compression_s3tc) 606 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); 607 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 608 break; 609 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 610 if (ctx->Extensions.EXT_texture_compression_s3tc) 611 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5); 612 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 613 break; 614#endif 615 default: 616 ; /* fallthrough */ 617 } 618 } 619#endif /* FEATURE_EXT_texture_sRGB */ 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 RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 779 RETURN_IF_SUPPORTED(MESA_FORMAT_R8); 780 break; 781 782 case GL_R16: 783 RETURN_IF_SUPPORTED(MESA_FORMAT_R16); 784 break; 785 786 case GL_RG: 787 case GL_RG8: 788 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 789 break; 790 791 case GL_COMPRESSED_RG: 792 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 793 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 794 break; 795 796 case GL_RG16: 797 RETURN_IF_SUPPORTED(MESA_FORMAT_RG1616); 798 break; 799 800 default: 801 ; /* fallthrough */ 802 } 803 } 804 805 if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) { 806 switch (internalFormat) { 807 case GL_R16F: 808 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 809 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 810 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 811 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 812 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 813 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 814 break; 815 case GL_R32F: 816 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 817 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 818 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 819 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 820 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 821 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 822 break; 823 case GL_RG16F: 824 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 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_RG32F: 830 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 831 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 832 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 833 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 834 break; 835 836 default: 837 ; /* fallthrough */ 838 } 839 } 840 841 if (ctx->Version >= 30 || 842 (ctx->Extensions.ARB_texture_rg && 843 ctx->Extensions.EXT_texture_integer)) { 844 switch (internalFormat) { 845 case GL_R8UI: 846 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8); 847 break; 848 case GL_RG8UI: 849 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8); 850 break; 851 case GL_R16UI: 852 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16); 853 break; 854 case GL_RG16UI: 855 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16); 856 break; 857 case GL_R32UI: 858 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32); 859 break; 860 case GL_RG32UI: 861 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32); 862 break; 863 case GL_R8I: 864 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8); 865 break; 866 case GL_RG8I: 867 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8); 868 break; 869 case GL_R16I: 870 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16); 871 break; 872 case GL_RG16I: 873 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16); 874 break; 875 case GL_R32I: 876 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32); 877 break; 878 case GL_RG32I: 879 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32); 880 break; 881 default: 882 break; 883 } 884 } 885 886 if (ctx->Extensions.ARB_texture_rgb10_a2ui) { 887 switch (internalFormat) { 888 case GL_RGB10_A2UI: 889 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT); 890 RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT); 891 break; 892 default: 893 break; 894 } 895 } 896 /* GL_BGRA can be an internal format *only* in OpenGL ES (1.x or 2.0). 897 */ 898 if (_mesa_is_gles(ctx)) { 899 switch (internalFormat) { 900 case GL_BGRA: 901 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 902 break; 903 904 default: 905 ; /* fallthrough */ 906 } 907 } 908 909 if (ctx->Extensions.ARB_texture_compression_rgtc) { 910 switch (internalFormat) { 911 case GL_COMPRESSED_RED_RGTC1: 912 RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 913 break; 914 case GL_COMPRESSED_SIGNED_RED_RGTC1: 915 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RED_RGTC1); 916 break; 917 case GL_COMPRESSED_RG_RGTC2: 918 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 919 break; 920 case GL_COMPRESSED_SIGNED_RG_RGTC2: 921 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_RGTC2); 922 break; 923 default: 924 ; /* fallthrough */ 925 } 926 } 927 928 if (ctx->Extensions.EXT_texture_compression_latc) { 929 switch (internalFormat) { 930 case GL_COMPRESSED_LUMINANCE_LATC1_EXT: 931 RETURN_IF_SUPPORTED(MESA_FORMAT_L_LATC1); 932 break; 933 case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: 934 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L_LATC1); 935 break; 936 case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: 937 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 938 break; 939 case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: 940 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_LA_LATC2); 941 break; 942 default: 943 ; /* fallthrough */ 944 } 945 } 946 947 if (ctx->Extensions.ATI_texture_compression_3dc) { 948 switch (internalFormat) { 949 case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: 950 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 951 break; 952 default: 953 ; /* fallthrough */ 954 } 955 } 956 957 if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) { 958 switch (internalFormat) { 959 case GL_ETC1_RGB8_OES: 960 RETURN_IF_SUPPORTED(MESA_FORMAT_ETC1_RGB8); 961 break; 962 default: 963 ; /* fallthrough */ 964 } 965 } 966 967 _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()", 968 _mesa_lookup_enum_by_nr(internalFormat)); 969 return MESA_FORMAT_NONE; 970} 971 972