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