mesa: Use assert() instead of ASSERT wrapper.
[mesa.git] / src / mesa / main / texformat.c
1 /*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
5 * Copyright (c) 2008-2009 VMware, Inc.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * 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 "mtypes.h"
39 #include "texcompress.h"
40 #include "texformat.h"
41
42 #define RETURN_IF_SUPPORTED(f) do { \
43 if (ctx->TextureFormatSupported[f]) \
44 return f; \
45 } while (0)
46
47 /**
48 * Choose an appropriate texture format given the format, type and
49 * internalFormat parameters passed to glTexImage().
50 *
51 * \param ctx the GL context.
52 * \param target a texture target (GL_TEXTURE_x)
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 the closest mesa_format for the given format/type arguments
58 *
59 * This is called via dd_function_table::ChooseTextureFormat. Hardware
60 * drivers may override this function with a specialized version.
61 */
62 mesa_format
63 _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
64 GLint internalFormat, GLenum format, GLenum type)
65 {
66 (void) format;
67
68 switch (internalFormat) {
69 /* shallow RGBA formats */
70 case 4:
71 case GL_RGBA:
72 if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
73 RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM);
74 } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
75 RETURN_IF_SUPPORTED(MESA_FORMAT_B5G5R5A1_UNORM);
76 } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
77 RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM);
78 }
79 /* fallthrough */
80
81 case GL_RGBA8:
82 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_UNORM);
83 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM);
84 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
85 break;
86 case GL_RGB5_A1:
87 RETURN_IF_SUPPORTED(MESA_FORMAT_B5G5R5A1_UNORM);
88 break;
89 case GL_RGBA2:
90 RETURN_IF_SUPPORTED(MESA_FORMAT_A4R4G4B4_UNORM); /* just to test another format*/
91 RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM);
92 break;
93 case GL_RGBA4:
94 RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM);
95 break;
96
97 /* deep RGBA formats */
98 case GL_RGB10_A2:
99 RETURN_IF_SUPPORTED(MESA_FORMAT_R10G10B10A2_UNORM);
100 RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM);
101 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
102 break;
103 case GL_RGBA12:
104 case GL_RGBA16:
105 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UNORM16);
106 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UNORM16);
107 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM);
108 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
109 break;
110
111 /* shallow RGB formats */
112 case 3:
113 case GL_RGB:
114 if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
115 RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM);
116 }
117 /* fallthrough */
118 case GL_RGB8:
119 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UNORM8);
120 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8X8_UNORM);
121 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_UNORM);
122
123 RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8);
124 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM);
125 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
126 break;
127 case GL_R3_G3_B2:
128 RETURN_IF_SUPPORTED(MESA_FORMAT_B2G3R3_UNORM);
129 RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM);
130 RETURN_IF_SUPPORTED(MESA_FORMAT_R5G6B5_UNORM);
131 RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8);
132 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM);
133 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
134 break;
135 case GL_RGB4:
136 RETURN_IF_SUPPORTED(MESA_FORMAT_R5G6B5_UNORM); /* just to test another format */
137 RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM);
138 break;
139 case GL_RGB5:
140 RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM);
141 break;
142
143 /* deep RGB formats */
144 case GL_RGB10:
145 case GL_RGB12:
146 case GL_RGB16:
147 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_UNORM16);
148 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UNORM16);
149 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM);
150 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
151 break;
152
153 /* Alpha formats */
154 case GL_ALPHA:
155 case GL_ALPHA4:
156 case GL_ALPHA8:
157 RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8);
158 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
159 break;
160
161 case GL_ALPHA12:
162 case GL_ALPHA16:
163 RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM16);
164 RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8);
165 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
166 break;
167
168 /* Luminance formats */
169 case 1:
170 case GL_LUMINANCE:
171 case GL_LUMINANCE4:
172 case GL_LUMINANCE8:
173 RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8);
174 break;
175
176 case GL_LUMINANCE12:
177 case GL_LUMINANCE16:
178 RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM16);
179 RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8);
180 break;
181
182 /* Luminance/Alpha formats */
183 case GL_LUMINANCE4_ALPHA4:
184 RETURN_IF_SUPPORTED(MESA_FORMAT_L4A4_UNORM);
185 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
186 break;
187
188 case 2:
189 case GL_LUMINANCE_ALPHA:
190 case GL_LUMINANCE6_ALPHA2:
191 case GL_LUMINANCE8_ALPHA8:
192 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
193 break;
194
195 case GL_LUMINANCE12_ALPHA4:
196 case GL_LUMINANCE12_ALPHA12:
197 case GL_LUMINANCE16_ALPHA16:
198 RETURN_IF_SUPPORTED(MESA_FORMAT_L16A16_UNORM);
199 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
200 break;
201
202 case GL_INTENSITY:
203 case GL_INTENSITY4:
204 case GL_INTENSITY8:
205 RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM8);
206 break;
207
208 case GL_INTENSITY12:
209 case GL_INTENSITY16:
210 RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM16);
211 RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM8);
212 break;
213
214 case GL_DEPTH_COMPONENT:
215 case GL_DEPTH_COMPONENT24:
216 case GL_DEPTH_COMPONENT32:
217 RETURN_IF_SUPPORTED(MESA_FORMAT_Z_UNORM32);
218 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_X8_UINT);
219 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_S8_UINT);
220 break;
221 case GL_DEPTH_COMPONENT16:
222 RETURN_IF_SUPPORTED(MESA_FORMAT_Z_UNORM16);
223 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_X8_UINT);
224 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_S8_UINT);
225 break;
226
227 case GL_COMPRESSED_ALPHA_ARB:
228 RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8);
229 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
230 break;
231 case GL_COMPRESSED_LUMINANCE_ARB:
232 RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8);
233 break;
234 case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
235 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
236 break;
237 case GL_COMPRESSED_INTENSITY_ARB:
238 RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM8);
239 break;
240 case GL_COMPRESSED_RGB_ARB:
241 /* We don't use texture compression for 1D and 1D array textures.
242 * For 1D textures, compressions doesn't buy us much.
243 * For 1D ARRAY textures, there's complicated issues with updating
244 * sub-regions on non-block boundaries with glCopyTexSubImage, among
245 * other issues. FWIW, the GL_EXT_texture_array extension prohibits
246 * 1D ARRAY textures in S3TC format.
247 */
248 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
249 if (ctx->Mesa_DXTn)
250 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
251 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
252 }
253 RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8);
254 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM);
255 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
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->Mesa_DXTn)
261 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
262 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
263 }
264 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM);
265 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
266 break;
267
268 case GL_RGB565:
269 RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM);
270 break;
271
272 case 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 break;
278
279 /* For non-generic compressed format we assert two things:
280 *
281 * 1. The format has already been validated against the set of available
282 * extensions.
283 *
284 * 2. The driver only enables the extension if it supports all of the
285 * formats that are part of that extension.
286 */
287 case GL_COMPRESSED_RGB_FXT1_3DFX:
288 return MESA_FORMAT_RGB_FXT1;
289 case GL_COMPRESSED_RGBA_FXT1_3DFX:
290 return MESA_FORMAT_RGBA_FXT1;
291 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
292 case GL_RGB_S3TC:
293 case GL_RGB4_S3TC:
294 return MESA_FORMAT_RGB_DXT1;
295 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
296 return MESA_FORMAT_RGBA_DXT1;
297 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
298 case GL_RGBA_S3TC:
299 case GL_RGBA4_S3TC:
300 return MESA_FORMAT_RGBA_DXT3;
301 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
302 return MESA_FORMAT_RGBA_DXT5;
303 case GL_COMPRESSED_RED_RGTC1:
304 return MESA_FORMAT_R_RGTC1_UNORM;
305 case GL_COMPRESSED_SIGNED_RED_RGTC1:
306 return MESA_FORMAT_R_RGTC1_SNORM;
307 case GL_COMPRESSED_RG_RGTC2:
308 return MESA_FORMAT_RG_RGTC2_UNORM;
309 case GL_COMPRESSED_SIGNED_RG_RGTC2:
310 return MESA_FORMAT_RG_RGTC2_SNORM;
311 case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
312 return MESA_FORMAT_L_LATC1_UNORM;
313 case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
314 return MESA_FORMAT_L_LATC1_SNORM;
315 case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
316 return MESA_FORMAT_LA_LATC2_UNORM;
317 case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
318 return MESA_FORMAT_LA_LATC2_SNORM;
319 case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
320 return MESA_FORMAT_LA_LATC2_UNORM;
321 case GL_ETC1_RGB8_OES:
322 return MESA_FORMAT_ETC1_RGB8;
323 case GL_COMPRESSED_RGB8_ETC2:
324 return MESA_FORMAT_ETC2_RGB8;
325 case GL_COMPRESSED_SRGB8_ETC2:
326 return MESA_FORMAT_ETC2_SRGB8;
327 case GL_COMPRESSED_RGBA8_ETC2_EAC:
328 return MESA_FORMAT_ETC2_RGBA8_EAC;
329 case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
330 return MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC;
331 case GL_COMPRESSED_R11_EAC:
332 return MESA_FORMAT_ETC2_R11_EAC;
333 case GL_COMPRESSED_RG11_EAC:
334 return MESA_FORMAT_ETC2_RG11_EAC;
335 case GL_COMPRESSED_SIGNED_R11_EAC:
336 return MESA_FORMAT_ETC2_SIGNED_R11_EAC;
337 case GL_COMPRESSED_SIGNED_RG11_EAC:
338 return MESA_FORMAT_ETC2_SIGNED_RG11_EAC;
339 case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
340 return MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1;
341 case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
342 return MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1;
343 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
344 return MESA_FORMAT_SRGB_DXT1;
345 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
346 return MESA_FORMAT_SRGBA_DXT1;
347 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
348 return MESA_FORMAT_SRGBA_DXT3;
349 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
350 return MESA_FORMAT_SRGBA_DXT5;
351 case GL_COMPRESSED_RGBA_BPTC_UNORM:
352 return MESA_FORMAT_BPTC_RGBA_UNORM;
353 case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:
354 return MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM;
355 case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:
356 return MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT;
357 case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
358 return MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT;
359
360 case GL_ALPHA16F_ARB:
361 RETURN_IF_SUPPORTED(MESA_FORMAT_A_FLOAT16);
362 RETURN_IF_SUPPORTED(MESA_FORMAT_A_FLOAT32);
363 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
364 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
365 break;
366 case GL_ALPHA32F_ARB:
367 RETURN_IF_SUPPORTED(MESA_FORMAT_A_FLOAT32);
368 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
369 RETURN_IF_SUPPORTED(MESA_FORMAT_A_FLOAT16);
370 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
371 break;
372 case GL_LUMINANCE16F_ARB:
373 RETURN_IF_SUPPORTED(MESA_FORMAT_L_FLOAT16);
374 RETURN_IF_SUPPORTED(MESA_FORMAT_L_FLOAT32);
375 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
376 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
377 break;
378 case GL_LUMINANCE32F_ARB:
379 RETURN_IF_SUPPORTED(MESA_FORMAT_L_FLOAT32);
380 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
381 RETURN_IF_SUPPORTED(MESA_FORMAT_L_FLOAT16);
382 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
383 break;
384 case GL_LUMINANCE_ALPHA16F_ARB:
385 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_FLOAT16);
386 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_FLOAT32);
387 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
388 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
389 break;
390 case GL_LUMINANCE_ALPHA32F_ARB:
391 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_FLOAT32);
392 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
393 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_FLOAT16);
394 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
395 break;
396 case GL_INTENSITY16F_ARB:
397 RETURN_IF_SUPPORTED(MESA_FORMAT_I_FLOAT16);
398 RETURN_IF_SUPPORTED(MESA_FORMAT_I_FLOAT32);
399 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
400 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
401 break;
402 case GL_INTENSITY32F_ARB:
403 RETURN_IF_SUPPORTED(MESA_FORMAT_I_FLOAT32);
404 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
405 RETURN_IF_SUPPORTED(MESA_FORMAT_I_FLOAT16);
406 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
407 break;
408 case GL_RGB16F_ARB:
409 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
410 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_FLOAT16);
411 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
412 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
413 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
414 break;
415 case GL_RGB32F_ARB:
416 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
417 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_FLOAT32);
418 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
419 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
420 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
421 break;
422 case GL_RGBA16F_ARB:
423 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
424 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
425 break;
426 case GL_RGBA32F_ARB:
427 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
428 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
429 break;
430
431 case GL_RGB9_E5:
432 /* GL_EXT_texture_shared_exponent -- just one format to support */
433 assert(ctx->TextureFormatSupported[MESA_FORMAT_R9G9B9E5_FLOAT]);
434 return MESA_FORMAT_R9G9B9E5_FLOAT;
435
436 case GL_R11F_G11F_B10F:
437 /* GL_EXT_texture_packed_float -- just one format to support */
438 assert(ctx->TextureFormatSupported[MESA_FORMAT_R11G11B10_FLOAT]);
439 return MESA_FORMAT_R11G11B10_FLOAT;
440
441 case GL_DEPTH_STENCIL_EXT:
442 case GL_DEPTH24_STENCIL8_EXT:
443 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_UINT_Z24_UNORM);
444 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_S8_UINT);
445 break;
446
447 case GL_DEPTH_COMPONENT32F:
448 assert(ctx->TextureFormatSupported[MESA_FORMAT_Z_FLOAT32]);
449 return MESA_FORMAT_Z_FLOAT32;
450 case GL_DEPTH32F_STENCIL8:
451 assert(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_S8X24_UINT]);
452 return MESA_FORMAT_Z32_FLOAT_S8X24_UINT;
453
454 case GL_RED_SNORM:
455 case GL_R8_SNORM:
456 RETURN_IF_SUPPORTED(MESA_FORMAT_R_SNORM8);
457 break;
458 case GL_RG_SNORM:
459 case GL_RG8_SNORM:
460 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_SNORM);
461 break;
462 case GL_RGB_SNORM:
463 case GL_RGB8_SNORM:
464 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8X8_SNORM);
465 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
466 RETURN_IF_SUPPORTED(MESA_FORMAT_X8B8G8R8_SNORM);
467 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
468 break;
469 case GL_RGBA_SNORM:
470 case GL_RGBA8_SNORM:
471 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
472 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
473 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
474 break;
475 case GL_ALPHA_SNORM:
476 case GL_ALPHA8_SNORM:
477 RETURN_IF_SUPPORTED(MESA_FORMAT_A_SNORM8);
478 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
479 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
480 break;
481 case GL_LUMINANCE_SNORM:
482 case GL_LUMINANCE8_SNORM:
483 RETURN_IF_SUPPORTED(MESA_FORMAT_L_SNORM8);
484 RETURN_IF_SUPPORTED(MESA_FORMAT_X8B8G8R8_SNORM);
485 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
486 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
487 break;
488 case GL_LUMINANCE_ALPHA_SNORM:
489 case GL_LUMINANCE8_ALPHA8_SNORM:
490 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SNORM);
491 RETURN_IF_SUPPORTED(MESA_FORMAT_A8L8_SNORM);
492 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
493 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
494 break;
495 case GL_INTENSITY_SNORM:
496 case GL_INTENSITY8_SNORM:
497 RETURN_IF_SUPPORTED(MESA_FORMAT_I_SNORM8);
498 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
499 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
500 break;
501 case GL_R16_SNORM:
502 RETURN_IF_SUPPORTED(MESA_FORMAT_R_SNORM16);
503 break;
504 case GL_RG16_SNORM:
505 RETURN_IF_SUPPORTED(MESA_FORMAT_R16G16_SNORM);
506 break;
507 case GL_RGB16_SNORM:
508 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SNORM16);
509 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SNORM16);
510 /* FALLTHROUGH */
511 case GL_RGBA16_SNORM:
512 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16);
513 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
514 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
515 break;
516 case GL_ALPHA16_SNORM:
517 RETURN_IF_SUPPORTED(MESA_FORMAT_A_SNORM16);
518 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16);
519 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
520 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
521 break;
522 case GL_LUMINANCE16_SNORM:
523 RETURN_IF_SUPPORTED(MESA_FORMAT_L_SNORM16);
524 /* FALLTHROUGH */
525 case GL_LUMINANCE16_ALPHA16_SNORM:
526 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SNORM16);
527 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16);
528 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
529 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
530 break;
531 case GL_INTENSITY16_SNORM:
532 RETURN_IF_SUPPORTED(MESA_FORMAT_I_SNORM16);
533 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16);
534 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM);
535 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM);
536 break;
537
538 case GL_SRGB_EXT:
539 case GL_SRGB8_EXT:
540 /* there is no MESA_FORMAT_RGB_SRGB8 */
541 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8X8_SRGB);
542 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SRGB);
543
544 RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_SRGB8);
545 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
546
547 RETURN_IF_SUPPORTED(MESA_FORMAT_X8B8G8R8_SRGB);
548 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
549 break;
550 case GL_SRGB_ALPHA_EXT:
551 case GL_SRGB8_ALPHA8_EXT:
552 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SRGB);
553
554 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SRGB);
555 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
556 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
557 break;
558 case GL_SLUMINANCE_EXT:
559 case GL_SLUMINANCE8_EXT:
560 RETURN_IF_SUPPORTED(MESA_FORMAT_L_SRGB8);
561 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
562 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
563 break;
564 case GL_SLUMINANCE_ALPHA_EXT:
565 case GL_SLUMINANCE8_ALPHA8_EXT:
566 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SRGB);
567 RETURN_IF_SUPPORTED(MESA_FORMAT_A8L8_SRGB);
568 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
569 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
570 break;
571 case GL_COMPRESSED_SLUMINANCE_EXT:
572 RETURN_IF_SUPPORTED(MESA_FORMAT_L_SRGB8);
573 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
574 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
575 break;
576 case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
577 RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SRGB);
578 RETURN_IF_SUPPORTED(MESA_FORMAT_A8L8_SRGB);
579 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
580 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
581 break;
582 case GL_COMPRESSED_SRGB_EXT:
583 if (ctx->Mesa_DXTn)
584 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
585 RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_SRGB8);
586 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
587 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
588 break;
589 case GL_COMPRESSED_SRGB_ALPHA_EXT:
590 if (ctx->Mesa_DXTn)
591 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
592 RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SRGB);
593 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
594 RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
595 break;
596
597 case GL_ALPHA8UI_EXT:
598 RETURN_IF_SUPPORTED(MESA_FORMAT_A_UINT8);
599 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
600 break;
601 case GL_ALPHA16UI_EXT:
602 RETURN_IF_SUPPORTED(MESA_FORMAT_A_UINT16);
603 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
604 break;
605 case GL_ALPHA32UI_EXT:
606 RETURN_IF_SUPPORTED(MESA_FORMAT_A_UINT32);
607 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
608 break;
609 case GL_ALPHA8I_EXT:
610 RETURN_IF_SUPPORTED(MESA_FORMAT_A_SINT8);
611 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8);
612 break;
613 case GL_ALPHA16I_EXT:
614 RETURN_IF_SUPPORTED(MESA_FORMAT_A_SINT16);
615 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16);
616 break;
617 case GL_ALPHA32I_EXT:
618 RETURN_IF_SUPPORTED(MESA_FORMAT_A_SINT32);
619 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32);
620 break;
621 case GL_LUMINANCE8UI_EXT:
622 RETURN_IF_SUPPORTED(MESA_FORMAT_L_UINT8);
623 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
624 break;
625 case GL_LUMINANCE16UI_EXT:
626 RETURN_IF_SUPPORTED(MESA_FORMAT_L_UINT16);
627 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
628 break;
629 case GL_LUMINANCE32UI_EXT:
630 RETURN_IF_SUPPORTED(MESA_FORMAT_L_UINT32);
631 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
632 break;
633 case GL_LUMINANCE8I_EXT:
634 RETURN_IF_SUPPORTED(MESA_FORMAT_L_SINT8);
635 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8);
636 break;
637 case GL_LUMINANCE16I_EXT:
638 RETURN_IF_SUPPORTED(MESA_FORMAT_L_SINT16);
639 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16);
640 break;
641 case GL_LUMINANCE32I_EXT:
642 RETURN_IF_SUPPORTED(MESA_FORMAT_L_SINT32);
643 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32);
644 break;
645 case GL_LUMINANCE_ALPHA8UI_EXT:
646 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UINT8);
647 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
648 break;
649 case GL_LUMINANCE_ALPHA16UI_EXT:
650 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UINT16);
651 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
652 break;
653 case GL_LUMINANCE_ALPHA32UI_EXT:
654 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UINT32);
655 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
656 break;
657 case GL_LUMINANCE_ALPHA8I_EXT:
658 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SINT8);
659 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8);
660 break;
661 case GL_LUMINANCE_ALPHA16I_EXT:
662 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SINT16);
663 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16);
664 break;
665 case GL_LUMINANCE_ALPHA32I_EXT:
666 RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SINT32);
667 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32);
668 break;
669 case GL_INTENSITY8UI_EXT:
670 RETURN_IF_SUPPORTED(MESA_FORMAT_I_UINT8);
671 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
672 break;
673 case GL_INTENSITY16UI_EXT:
674 RETURN_IF_SUPPORTED(MESA_FORMAT_I_UINT16);
675 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
676 break;
677 case GL_INTENSITY32UI_EXT:
678 RETURN_IF_SUPPORTED(MESA_FORMAT_I_UINT32);
679 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
680 break;
681 case GL_INTENSITY8I_EXT:
682 RETURN_IF_SUPPORTED(MESA_FORMAT_I_SINT8);
683 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8);
684 break;
685 case GL_INTENSITY16I_EXT:
686 RETURN_IF_SUPPORTED(MESA_FORMAT_I_SINT16);
687 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16);
688 break;
689 case GL_INTENSITY32I_EXT:
690 RETURN_IF_SUPPORTED(MESA_FORMAT_I_SINT32);
691 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32);
692 break;
693
694 case GL_RGB8UI_EXT:
695 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8);
696 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_UINT8);
697 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
698 break;
699 case GL_RGB16UI_EXT:
700 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16);
701 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_UINT16);
702 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
703 break;
704 case GL_RGB32UI_EXT:
705 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32);
706 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_UINT32);
707 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
708 break;
709 case GL_RGB8I_EXT:
710 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SINT8);
711 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SINT8);
712 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8);
713 break;
714 case GL_RGB16I_EXT:
715 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SINT16);
716 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SINT16);
717 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16);
718 break;
719 case GL_RGB32I_EXT:
720 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SINT32);
721 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SINT32);
722 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32);
723 break;
724 case GL_RGBA8UI_EXT:
725 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
726 break;
727 case GL_RGBA16UI_EXT:
728 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
729 break;
730 case GL_RGBA32UI_EXT:
731 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
732 break;
733 case GL_RGBA8I_EXT:
734 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8);
735 break;
736 case GL_RGBA16I_EXT:
737 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16);
738 break;
739 case GL_RGBA32I_EXT:
740 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32);
741 break;
742
743 case GL_R8:
744 case GL_RED:
745 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UNORM8);
746 break;
747
748 case GL_COMPRESSED_RED:
749 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
750 RETURN_IF_SUPPORTED(MESA_FORMAT_R_RGTC1_UNORM);
751 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UNORM8);
752 break;
753
754 case GL_R16:
755 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UNORM16);
756 break;
757
758 case GL_RG:
759 case GL_RG8:
760 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_UNORM);
761 break;
762
763 case GL_COMPRESSED_RG:
764 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
765 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2_UNORM);
766 RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_UNORM);
767 break;
768
769 case GL_RG16:
770 RETURN_IF_SUPPORTED(MESA_FORMAT_R16G16_UNORM);
771 break;
772
773 case GL_R16F:
774 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
775 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
776 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
777 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
778 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
779 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
780 break;
781 case GL_R32F:
782 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
783 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
784 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
785 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
786 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
787 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
788 break;
789 case GL_RG16F:
790 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
791 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
792 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
793 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
794 break;
795 case GL_RG32F:
796 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
797 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
798 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
799 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
800 break;
801
802 case GL_R8UI:
803 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8);
804 break;
805 case GL_RG8UI:
806 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8);
807 break;
808 case GL_R16UI:
809 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16);
810 break;
811 case GL_RG16UI:
812 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16);
813 break;
814 case GL_R32UI:
815 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32);
816 break;
817 case GL_RG32UI:
818 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32);
819 break;
820 case GL_R8I:
821 RETURN_IF_SUPPORTED(MESA_FORMAT_R_SINT8);
822 break;
823 case GL_RG8I:
824 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SINT8);
825 break;
826 case GL_R16I:
827 RETURN_IF_SUPPORTED(MESA_FORMAT_R_SINT16);
828 break;
829 case GL_RG16I:
830 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SINT16);
831 break;
832 case GL_R32I:
833 RETURN_IF_SUPPORTED(MESA_FORMAT_R_SINT32);
834 break;
835 case GL_RG32I:
836 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SINT32);
837 break;
838
839 case GL_RGB10_A2UI:
840 RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UINT);
841 RETURN_IF_SUPPORTED(MESA_FORMAT_R10G10B10A2_UINT);
842 break;
843
844 case GL_BGRA:
845 RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM);
846 break;
847 }
848
849 _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()",
850 _mesa_lookup_enum_by_nr(internalFormat));
851 return MESA_FORMAT_NONE;
852 }
853
854 GLboolean
855 _mesa_tex_target_is_array(GLenum target)
856 {
857 switch (target) {
858 case GL_TEXTURE_1D_ARRAY_EXT:
859 case GL_TEXTURE_2D_ARRAY_EXT:
860 case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
861 case GL_TEXTURE_CUBE_MAP_ARRAY:
862 return GL_TRUE;
863 default:
864 return GL_FALSE;
865 }
866 }