texformat.c revision 88233b0bc301eb0ccdf23ffcb0245b3faad43b04
1/*
2 * Mesa 3-D graphics library
3 * Version:  7.7
4 *
5 * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6 * Copyright (c) 2008-2009 VMware, Inc.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included
16 * in all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26
27/**
28 * \file texformat.c
29 * Texture formats.
30 *
31 * \author Gareth Hughes
32 * \author Brian Paul
33 */
34
35
36#include "context.h"
37#include "enums.h"
38#include "mfeatures.h"
39#include "mtypes.h"
40#include "texcompress.h"
41#include "texformat.h"
42
43#define RETURN_IF_SUPPORTED(f) do {		\
44   if (ctx->TextureFormatSupported[f])		\
45      return f;					\
46} while (0)
47
48/**
49 * Choose an appropriate texture format given the format, type and
50 * internalFormat parameters passed to glTexImage().
51 *
52 * \param ctx  the GL context.
53 * \param internalFormat  user's prefered internal texture format.
54 * \param format  incoming image pixel format.
55 * \param type  incoming image data type.
56 *
57 * \return a pointer to a gl_texture_format object which describes the
58 * choosen texture format, or NULL on failure.
59 *
60 * This is called via dd_function_table::ChooseTextureFormat.  Hardware drivers
61 * will typically override this function with a specialized version.
62 */
63gl_format
64_mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
65                        GLint internalFormat, GLenum format, GLenum type)
66{
67   (void) format;
68   (void) type;
69
70   switch (internalFormat) {
71      /* shallow RGBA formats */
72      case 4:
73      case GL_RGBA:
74	 if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
75	    RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
76	 } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
77	    RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
78	 }
79	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
80	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
81	 break;
82
83      case GL_RGBA8:
84	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
85	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
86	 break;
87      case GL_RGB5_A1:
88	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
89	 break;
90      case GL_RGBA2:
91	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/
92	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
93	 break;
94      case GL_RGBA4:
95	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
96	 break;
97
98      /* deep RGBA formats */
99      case GL_RGB10_A2:
100	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
101	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
102	 break;
103      case GL_RGBA12:
104      case GL_RGBA16:
105	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
106	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
107	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
108	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
109	 break;
110
111      /* shallow RGB formats */
112      case 3:
113      case GL_RGB:
114      case GL_RGB8:
115	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
116	 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
117	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
118	 break;
119      case GL_R3_G3_B2:
120	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332);
121	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
122	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV);
123	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
124	 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
125	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
126	 break;
127      case GL_RGB4:
128	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */
129	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
130	 break;
131      case GL_RGB5:
132	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
133	 break;
134
135      /* deep RGB formats */
136      case GL_RGB10:
137      case GL_RGB12:
138      case GL_RGB16:
139	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
140	 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
141	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
142	 break;
143
144      /* Alpha formats */
145      case GL_ALPHA:
146      case GL_ALPHA4:
147      case GL_ALPHA8:
148	 RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
149	 break;
150
151      case GL_ALPHA12:
152      case GL_ALPHA16:
153	 RETURN_IF_SUPPORTED(MESA_FORMAT_A16);
154	 RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
155	 break;
156
157      /* Luminance formats */
158      case 1:
159      case GL_LUMINANCE:
160      case GL_LUMINANCE4:
161      case GL_LUMINANCE8:
162	 RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
163	 break;
164
165      case GL_LUMINANCE12:
166      case GL_LUMINANCE16:
167	 RETURN_IF_SUPPORTED(MESA_FORMAT_L16);
168	 RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
169	 break;
170
171      /* Luminance/Alpha formats */
172      case GL_LUMINANCE4_ALPHA4:
173	 RETURN_IF_SUPPORTED(MESA_FORMAT_AL44);
174	 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
175	 break;
176
177      case 2:
178      case GL_LUMINANCE_ALPHA:
179      case GL_LUMINANCE6_ALPHA2:
180      case GL_LUMINANCE8_ALPHA8:
181	 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
182	 break;
183
184      case GL_LUMINANCE12_ALPHA4:
185      case GL_LUMINANCE12_ALPHA12:
186      case GL_LUMINANCE16_ALPHA16:
187	 RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616);
188	 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
189	 break;
190
191      case GL_INTENSITY:
192      case GL_INTENSITY4:
193      case GL_INTENSITY8:
194	 RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
195	 break;
196
197      case GL_INTENSITY12:
198      case GL_INTENSITY16:
199	 RETURN_IF_SUPPORTED(MESA_FORMAT_I16);
200	 RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
201	 break;
202
203      default:
204         ; /* fallthrough */
205   }
206
207   if (ctx->Extensions.ARB_depth_texture) {
208      switch (internalFormat) {
209         case GL_DEPTH_COMPONENT:
210         case GL_DEPTH_COMPONENT24:
211         case GL_DEPTH_COMPONENT32:
212	    RETURN_IF_SUPPORTED(MESA_FORMAT_Z32);
213	    RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
214	    RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
215	    break;
216         case GL_DEPTH_COMPONENT16:
217	    RETURN_IF_SUPPORTED(MESA_FORMAT_Z16);
218	    RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
219	    RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
220         default:
221            ; /* fallthrough */
222      }
223   }
224
225   switch (internalFormat) {
226      case GL_COMPRESSED_ALPHA_ARB:
227	 RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
228	 break;
229      case GL_COMPRESSED_LUMINANCE_ARB:
230	 RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
231	 break;
232      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
233	 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
234	 break;
235      case GL_COMPRESSED_INTENSITY_ARB:
236	 RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
237	 break;
238      case GL_COMPRESSED_RGB_ARB:
239         /* We don't use texture compression for 1D and 1D array textures.
240          * For 1D textures, compressions doesn't buy us much.
241          * For 1D ARRAY textures, there's complicated issues with updating
242          * sub-regions on non-block boundaries with glCopyTexSubImage, among
243          * other issues.  FWIW, the GL_EXT_texture_array extension prohibits
244          * 1D ARRAY textures in S3TC format.
245          */
246         if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
247            if (ctx->Extensions.EXT_texture_compression_s3tc ||
248                ctx->Extensions.S3_s3tc)
249               RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
250            if (ctx->Extensions.TDFX_texture_compression_FXT1)
251               RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
252         }
253	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
254	 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
255	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
256	 break;
257      case GL_COMPRESSED_RGBA_ARB:
258         /* We don't use texture compression for 1D and 1D array textures. */
259         if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
260            if (ctx->Extensions.EXT_texture_compression_s3tc ||
261                ctx->Extensions.S3_s3tc)
262               RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
263            if (ctx->Extensions.TDFX_texture_compression_FXT1)
264               RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
265         }
266	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
267	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
268	 break;
269      default:
270         ; /* fallthrough */
271   }
272
273   if (ctx->Extensions.ARB_ES2_compatibility) {
274      switch (internalFormat) {
275         case GL_RGB565:
276            RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
277            break;
278         default:
279         ; /* fallthrough */
280      }
281   }
282
283   if (ctx->Extensions.MESA_ycbcr_texture) {
284      if (internalFormat == GL_YCBCR_MESA) {
285         if (type == GL_UNSIGNED_SHORT_8_8_MESA)
286	    RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR);
287         else
288	    RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV);
289      }
290   }
291
292   if (ctx->Extensions.TDFX_texture_compression_FXT1) {
293      switch (internalFormat) {
294         case GL_COMPRESSED_RGB_FXT1_3DFX:
295	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
296	 break;
297         case GL_COMPRESSED_RGBA_FXT1_3DFX:
298	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
299	 break;
300         default:
301            ; /* fallthrough */
302      }
303   }
304
305   if (ctx->Extensions.EXT_texture_compression_s3tc) {
306      switch (internalFormat) {
307         case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
308	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
309	    break;
310         case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
311	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT1);
312	    break;
313         case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
314	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3);
315	    break;
316         case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
317	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5);
318	    break;
319         default:
320            ; /* fallthrough */
321      }
322   }
323
324   if (ctx->Extensions.S3_s3tc) {
325      switch (internalFormat) {
326         case GL_RGB_S3TC:
327         case GL_RGB4_S3TC:
328	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
329	    break;
330         case GL_RGBA_S3TC:
331         case GL_RGBA4_S3TC:
332	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3);
333	    break;
334         default:
335            ; /* fallthrough */
336      }
337   }
338
339   if (ctx->Extensions.ARB_texture_float) {
340      switch (internalFormat) {
341         case GL_ALPHA16F_ARB:
342	    RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
343	    RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
344	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
345	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
346	    break;
347         case GL_ALPHA32F_ARB:
348	    RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
349	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
350	    RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
351	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
352	    break;
353         case GL_LUMINANCE16F_ARB:
354	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
355	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
356	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
357	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
358	    break;
359         case GL_LUMINANCE32F_ARB:
360	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
361	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
362	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
363	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
364	    break;
365         case GL_LUMINANCE_ALPHA16F_ARB:
366	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
367	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
368	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
369	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
370	    break;
371         case GL_LUMINANCE_ALPHA32F_ARB:
372	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
373	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
374	    RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
375	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
376	    break;
377         case GL_INTENSITY16F_ARB:
378	    RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
379	    RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
380	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
381	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
382	    break;
383         case GL_INTENSITY32F_ARB:
384	    RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
385	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
386	    RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
387	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
388	    break;
389         case GL_RGB16F_ARB:
390	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
391	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
392	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
393	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
394	    break;
395         case GL_RGB32F_ARB:
396	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
397	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
398	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
399	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
400	    break;
401         case GL_RGBA16F_ARB:
402	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
403	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
404	    break;
405         case GL_RGBA32F_ARB:
406	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
407	    RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
408	    break;
409         default:
410            ; /* fallthrough */
411      }
412   }
413
414   if (ctx->Extensions.EXT_texture_shared_exponent) {
415      switch (internalFormat) {
416         case GL_RGB9_E5:
417            ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]);
418            return MESA_FORMAT_RGB9_E5_FLOAT;
419         default:
420            ; /* fallthrough */
421      }
422   }
423
424   if (ctx->Extensions.EXT_packed_float) {
425      switch (internalFormat) {
426         case GL_R11F_G11F_B10F:
427            ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]);
428            return MESA_FORMAT_R11_G11_B10_FLOAT;
429         default:
430            ; /* fallthrough */
431      }
432   }
433
434   if (ctx->Extensions.EXT_packed_depth_stencil) {
435      switch (internalFormat) {
436         case GL_DEPTH_STENCIL_EXT:
437         case GL_DEPTH24_STENCIL8_EXT:
438	    RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8);
439	    RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
440	    break;
441         default:
442            ; /* fallthrough */
443      }
444   }
445
446   if (ctx->Extensions.ARB_depth_buffer_float) {
447      switch (internalFormat) {
448         case GL_DEPTH_COMPONENT32F:
449            ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]);
450            return MESA_FORMAT_Z32_FLOAT;
451         case GL_DEPTH32F_STENCIL8:
452            ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]);
453            return MESA_FORMAT_Z32_FLOAT_X24S8;
454         default:
455            ; /* fallthrough */
456      }
457   }
458
459   if (ctx->Extensions.ATI_envmap_bumpmap) {
460      switch (internalFormat) {
461         case GL_DUDV_ATI:
462         case GL_DU8DV8_ATI:
463	    RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8);
464	    break;
465         default:
466            ; /* fallthrough */
467      }
468   }
469
470   if (ctx->Extensions.EXT_texture_snorm) {
471      switch (internalFormat) {
472         case GL_RED_SNORM:
473         case GL_R8_SNORM:
474	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8);
475	    break;
476         case GL_RG_SNORM:
477         case GL_RG8_SNORM:
478	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV);
479	    break;
480         case GL_RGB_SNORM:
481         case GL_RGB8_SNORM:
482	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
483	    /* FALLTHROUGH */
484         case GL_RGBA_SNORM:
485         case GL_RGBA8_SNORM:
486	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
487	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
488	    break;
489         case GL_ALPHA_SNORM:
490         case GL_ALPHA8_SNORM:
491            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8);
492	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
493	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
494            break;
495         case GL_LUMINANCE_SNORM:
496         case GL_LUMINANCE8_SNORM:
497            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8);
498	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
499	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
500	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
501            break;
502         case GL_LUMINANCE_ALPHA_SNORM:
503         case GL_LUMINANCE8_ALPHA8_SNORM:
504            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88);
505	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
506	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
507            break;
508         case GL_INTENSITY_SNORM:
509         case GL_INTENSITY8_SNORM:
510            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8);
511	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
512	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
513            break;
514         case GL_R16_SNORM:
515	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16);
516	    break;
517         case GL_RG16_SNORM:
518	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616);
519	    break;
520         case GL_RGB16_SNORM:
521	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16);
522	    /* FALLTHROUGH */
523         case GL_RGBA16_SNORM:
524	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
525	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
526	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
527	    break;
528         case GL_ALPHA16_SNORM:
529            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16);
530	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
531	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
532	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
533            break;
534         case GL_LUMINANCE16_SNORM:
535            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16);
536	    /* FALLTHROUGH */
537         case GL_LUMINANCE16_ALPHA16_SNORM:
538            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616);
539	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
540	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
541	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
542            break;
543         case GL_INTENSITY16_SNORM:
544            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16);
545	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
546	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
547	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
548            break;
549         default:
550            ; /* fall-through */
551      }
552   }
553
554   if (ctx->Extensions.EXT_texture_sRGB) {
555      switch (internalFormat) {
556         case GL_SRGB_EXT:
557         case GL_SRGB8_EXT:
558	    RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
559	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
560	    break;
561         case GL_SRGB_ALPHA_EXT:
562         case GL_SRGB8_ALPHA8_EXT:
563	    RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
564	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
565	    break;
566         case GL_SLUMINANCE_EXT:
567         case GL_SLUMINANCE8_EXT:
568	    RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
569	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
570	    break;
571         case GL_SLUMINANCE_ALPHA_EXT:
572         case GL_SLUMINANCE8_ALPHA8_EXT:
573	    RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
574	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
575	    break;
576         case GL_COMPRESSED_SLUMINANCE_EXT:
577	    RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
578	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
579	    break;
580         case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
581	    RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
582	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
583	    break;
584         case GL_COMPRESSED_SRGB_EXT:
585            if (ctx->Extensions.EXT_texture_compression_s3tc)
586	       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
587	    RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
588	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
589	    break;
590         case GL_COMPRESSED_SRGB_ALPHA_EXT:
591            if (ctx->Extensions.EXT_texture_compression_s3tc)
592	       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
593	    RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
594	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
595	    break;
596         case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
597            if (ctx->Extensions.EXT_texture_compression_s3tc)
598	       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
599	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
600            break;
601         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
602            if (ctx->Extensions.EXT_texture_compression_s3tc)
603	       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1);
604	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
605            break;
606         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
607            if (ctx->Extensions.EXT_texture_compression_s3tc)
608	       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3);
609	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
610            break;
611         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
612            if (ctx->Extensions.EXT_texture_compression_s3tc)
613	       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5);
614	    RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
615            break;
616         default:
617            ; /* fallthrough */
618      }
619   }
620
621   if (ctx->Extensions.EXT_texture_integer) {
622      switch (internalFormat) {
623      case GL_ALPHA8UI_EXT:
624         RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8);
625         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
626         break;
627      case GL_ALPHA16UI_EXT:
628         RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16);
629         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
630         break;
631      case GL_ALPHA32UI_EXT:
632         RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32);
633         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
634         break;
635      case GL_ALPHA8I_EXT:
636         RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8);
637         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
638         break;
639      case GL_ALPHA16I_EXT:
640         RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16);
641         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
642         break;
643      case GL_ALPHA32I_EXT:
644         RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32);
645         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
646         break;
647      case GL_LUMINANCE8UI_EXT:
648         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8);
649         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
650         break;
651      case GL_LUMINANCE16UI_EXT:
652         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16);
653         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
654         break;
655      case GL_LUMINANCE32UI_EXT:
656         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32);
657         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
658         break;
659      case GL_LUMINANCE8I_EXT:
660         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8);
661         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
662         break;
663      case GL_LUMINANCE16I_EXT:
664         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16);
665         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
666         break;
667      case GL_LUMINANCE32I_EXT:
668         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32);
669         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
670         break;
671      case GL_LUMINANCE_ALPHA8UI_EXT:
672         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8);
673         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
674         break;
675      case GL_LUMINANCE_ALPHA16UI_EXT:
676         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16);
677         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
678         break;
679      case GL_LUMINANCE_ALPHA32UI_EXT:
680         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32);
681         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
682         break;
683      case GL_LUMINANCE_ALPHA8I_EXT:
684         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8);
685         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
686         break;
687      case GL_LUMINANCE_ALPHA16I_EXT:
688         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16);
689         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
690         break;
691      case GL_LUMINANCE_ALPHA32I_EXT:
692         RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32);
693         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
694         break;
695      case GL_INTENSITY8UI_EXT:
696         RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8);
697         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
698         break;
699      case GL_INTENSITY16UI_EXT:
700         RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16);
701         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
702         break;
703      case GL_INTENSITY32UI_EXT:
704         RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32);
705         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
706         break;
707      case GL_INTENSITY8I_EXT:
708         RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8);
709         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
710         break;
711      case GL_INTENSITY16I_EXT:
712         RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16);
713         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
714         break;
715      case GL_INTENSITY32I_EXT:
716         RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32);
717         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
718         break;
719      }
720   }
721
722   if (ctx->Version >= 30 ||
723       ctx->Extensions.EXT_texture_integer) {
724      switch (internalFormat) {
725      case GL_RGB8UI_EXT:
726         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8);
727         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
728         break;
729      case GL_RGB16UI_EXT:
730         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16);
731         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
732         break;
733      case GL_RGB32UI_EXT:
734         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32);
735         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
736         break;
737      case GL_RGB8I_EXT:
738         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8);
739         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
740         break;
741      case GL_RGB16I_EXT:
742         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16);
743         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
744         break;
745      case GL_RGB32I_EXT:
746         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32);
747         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
748         break;
749      case GL_RGBA8UI_EXT:
750         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
751         break;
752      case GL_RGBA16UI_EXT:
753         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
754         break;
755      case GL_RGBA32UI_EXT:
756         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
757         break;
758      case GL_RGBA8I_EXT:
759         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
760         break;
761      case GL_RGBA16I_EXT:
762         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
763         break;
764      case GL_RGBA32I_EXT:
765         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
766         break;
767      }
768   }
769
770   if (ctx->Extensions.ARB_texture_rg) {
771      switch (internalFormat) {
772      case GL_R8:
773      case GL_RED:
774	 RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
775	 break;
776
777      case GL_COMPRESSED_RED:
778         if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
779            RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
780	 RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
781	 break;
782
783      case GL_R16:
784	 RETURN_IF_SUPPORTED(MESA_FORMAT_R16);
785	 break;
786
787      case GL_RG:
788      case GL_RG8:
789	 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
790	 break;
791
792      case GL_COMPRESSED_RG:
793         if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
794            RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
795	 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
796	 break;
797
798      case GL_RG16:
799	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG1616);
800	 break;
801
802      default:
803         ; /* fallthrough */
804      }
805   }
806
807   if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) {
808      switch (internalFormat) {
809      case GL_R16F:
810	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
811	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
812	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
813	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
814	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
815	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
816	 break;
817      case GL_R32F:
818	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
819	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
820	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
821	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
822	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
823	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
824	 break;
825      case GL_RG16F:
826	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
827	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
828	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
829	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
830	 break;
831      case GL_RG32F:
832	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
833	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
834	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
835	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
836	 break;
837
838      default:
839         ; /* fallthrough */
840      }
841   }
842
843   if (ctx->Version >= 30 ||
844       (ctx->Extensions.ARB_texture_rg &&
845        ctx->Extensions.EXT_texture_integer)) {
846      switch (internalFormat) {
847      case GL_R8UI:
848         RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8);
849         break;
850      case GL_RG8UI:
851         RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8);
852         break;
853      case GL_R16UI:
854         RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16);
855	 break;
856      case GL_RG16UI:
857	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16);
858         break;
859      case GL_R32UI:
860         RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32);
861         break;
862      case GL_RG32UI:
863         RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32);
864         break;
865      case GL_R8I:
866         RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8);
867         break;
868      case GL_RG8I:
869         RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8);
870         break;
871      case GL_R16I:
872         RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16);
873         break;
874      case GL_RG16I:
875         RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16);
876         break;
877      case GL_R32I:
878         RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32);
879         break;
880      case GL_RG32I:
881         RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32);
882         break;
883      default:
884         break;
885      }
886   }
887
888   if (ctx->Extensions.ARB_texture_rgb10_a2ui) {
889      switch (internalFormat) {
890      case GL_RGB10_A2UI:
891         RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT);
892         RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT);
893         break;
894      default:
895         break;
896      }
897   }
898   /* GL_BGRA can be an internal format *only* in OpenGL ES (1.x or 2.0).
899    */
900   if (_mesa_is_gles(ctx)) {
901      switch (internalFormat) {
902      case GL_BGRA:
903	 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
904	 break;
905
906      default:
907         ; /* fallthrough */
908      }
909   }
910
911   if (ctx->Extensions.ARB_texture_compression_rgtc) {
912      switch (internalFormat) {
913         case GL_COMPRESSED_RED_RGTC1:
914	    RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
915	    break;
916         case GL_COMPRESSED_SIGNED_RED_RGTC1:
917	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RED_RGTC1);
918	    break;
919         case GL_COMPRESSED_RG_RGTC2:
920	    RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
921	    break;
922         case GL_COMPRESSED_SIGNED_RG_RGTC2:
923	    RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_RGTC2);
924	    break;
925         default:
926            ; /* fallthrough */
927      }
928   }
929
930   if (ctx->Extensions.EXT_texture_compression_latc) {
931      switch (internalFormat) {
932         case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
933            RETURN_IF_SUPPORTED(MESA_FORMAT_L_LATC1);
934            break;
935         case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
936            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L_LATC1);
937            break;
938         case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
939            RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2);
940            break;
941         case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
942            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_LA_LATC2);
943            break;
944         default:
945            ; /* fallthrough */
946      }
947   }
948
949   if (ctx->Extensions.ATI_texture_compression_3dc) {
950      switch (internalFormat) {
951         case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
952            RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2);
953            break;
954         default:
955            ; /* fallthrough */
956      }
957   }
958
959   if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) {
960      switch (internalFormat) {
961         case GL_ETC1_RGB8_OES:
962            RETURN_IF_SUPPORTED(MESA_FORMAT_ETC1_RGB8);
963            break;
964         default:
965            ; /* fallthrough */
966      }
967   }
968
969   _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()",
970                 _mesa_lookup_enum_by_nr(internalFormat));
971   return MESA_FORMAT_NONE;
972}
973
974