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