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