2 * Mesa 3-D graphics library
4 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
5 * Copyright (c) 2008-2009 VMware, Inc.
6 * Copyright (c) 2012 Intel Corporation
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:
15 * The above copyright notice and this permission notice shall be included
16 * in all copies or substantial portions of the Software.
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 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.
28 #include "glformats.h"
32 * Test if the given format is an integer (non-normalized) format.
35 _mesa_is_enum_format_integer(GLenum format
)
38 /* generic integer formats */
39 case GL_RED_INTEGER_EXT
:
40 case GL_GREEN_INTEGER_EXT
:
41 case GL_BLUE_INTEGER_EXT
:
42 case GL_ALPHA_INTEGER_EXT
:
43 case GL_RGB_INTEGER_EXT
:
44 case GL_RGBA_INTEGER_EXT
:
45 case GL_BGR_INTEGER_EXT
:
46 case GL_BGRA_INTEGER_EXT
:
47 case GL_LUMINANCE_INTEGER_EXT
:
48 case GL_LUMINANCE_ALPHA_INTEGER_EXT
:
50 /* specific integer formats */
55 case GL_ALPHA32UI_EXT
:
56 case GL_INTENSITY32UI_EXT
:
57 case GL_LUMINANCE32UI_EXT
:
58 case GL_LUMINANCE_ALPHA32UI_EXT
:
63 case GL_ALPHA16UI_EXT
:
64 case GL_INTENSITY16UI_EXT
:
65 case GL_LUMINANCE16UI_EXT
:
66 case GL_LUMINANCE_ALPHA16UI_EXT
:
72 case GL_INTENSITY8UI_EXT
:
73 case GL_LUMINANCE8UI_EXT
:
74 case GL_LUMINANCE_ALPHA8UI_EXT
:
80 case GL_INTENSITY32I_EXT
:
81 case GL_LUMINANCE32I_EXT
:
82 case GL_LUMINANCE_ALPHA32I_EXT
:
88 case GL_INTENSITY16I_EXT
:
89 case GL_LUMINANCE16I_EXT
:
90 case GL_LUMINANCE_ALPHA16I_EXT
:
96 case GL_INTENSITY8I_EXT
:
97 case GL_LUMINANCE8I_EXT
:
98 case GL_LUMINANCE_ALPHA8I_EXT
:
108 * Test if the given type is an integer (non-normalized) format.
111 _mesa_is_type_integer(GLenum type
)
115 case GL_UNSIGNED_INT
:
117 case GL_UNSIGNED_SHORT
:
119 case GL_UNSIGNED_BYTE
:
128 * Test if the given format or type is an integer (non-normalized) format.
131 _mesa_is_enum_format_or_type_integer(GLenum format
, GLenum type
)
133 return _mesa_is_enum_format_integer(format
) || _mesa_is_type_integer(type
);
138 _mesa_is_type_unsigned(GLenum type
)
141 case GL_UNSIGNED_INT
:
142 case GL_UNSIGNED_INT_8_8_8_8
:
143 case GL_UNSIGNED_INT_8_8_8_8_REV
:
144 case GL_UNSIGNED_INT_10_10_10_2
:
145 case GL_UNSIGNED_INT_2_10_10_10_REV
:
147 case GL_UNSIGNED_SHORT
:
148 case GL_UNSIGNED_SHORT_4_4_4_4
:
149 case GL_UNSIGNED_SHORT_5_5_5_1
:
150 case GL_UNSIGNED_SHORT_5_6_5
:
151 case GL_UNSIGNED_SHORT_5_6_5_REV
:
152 case GL_UNSIGNED_SHORT_4_4_4_4_REV
:
153 case GL_UNSIGNED_SHORT_1_5_5_5_REV
:
154 case GL_UNSIGNED_SHORT_8_8_MESA
:
155 case GL_UNSIGNED_SHORT_8_8_REV_MESA
:
157 case GL_UNSIGNED_BYTE
:
158 case GL_UNSIGNED_BYTE_3_3_2
:
159 case GL_UNSIGNED_BYTE_2_3_3_REV
:
169 * Test if the given image format is a color/RGBA format (i.e., not color
170 * index, depth, stencil, etc).
171 * \param format the image format value (may by an internal texture format)
172 * \return GL_TRUE if its a color/RGBA format, GL_FALSE otherwise.
175 _mesa_is_color_format(GLenum format
)
193 case GL_LUMINANCE_ALPHA
:
194 case GL_LUMINANCE4_ALPHA4
:
195 case GL_LUMINANCE6_ALPHA2
:
196 case GL_LUMINANCE8_ALPHA8
:
197 case GL_LUMINANCE12_ALPHA4
:
198 case GL_LUMINANCE12_ALPHA12
:
199 case GL_LUMINANCE16_ALPHA16
:
232 /* float texture formats */
233 case GL_ALPHA16F_ARB
:
234 case GL_ALPHA32F_ARB
:
235 case GL_LUMINANCE16F_ARB
:
236 case GL_LUMINANCE32F_ARB
:
237 case GL_LUMINANCE_ALPHA16F_ARB
:
238 case GL_LUMINANCE_ALPHA32F_ARB
:
239 case GL_INTENSITY16F_ARB
:
240 case GL_INTENSITY32F_ARB
:
249 /* compressed formats */
250 case GL_COMPRESSED_ALPHA
:
251 case GL_COMPRESSED_LUMINANCE
:
252 case GL_COMPRESSED_LUMINANCE_ALPHA
:
253 case GL_COMPRESSED_INTENSITY
:
254 case GL_COMPRESSED_RED
:
255 case GL_COMPRESSED_RG
:
256 case GL_COMPRESSED_RGB
:
257 case GL_COMPRESSED_RGBA
:
262 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT
:
263 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
:
264 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
:
265 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
:
266 case GL_COMPRESSED_RGB_FXT1_3DFX
:
267 case GL_COMPRESSED_RGBA_FXT1_3DFX
:
268 #if FEATURE_EXT_texture_sRGB
271 case GL_SRGB_ALPHA_EXT
:
272 case GL_SRGB8_ALPHA8_EXT
:
273 case GL_SLUMINANCE_ALPHA_EXT
:
274 case GL_SLUMINANCE8_ALPHA8_EXT
:
275 case GL_SLUMINANCE_EXT
:
276 case GL_SLUMINANCE8_EXT
:
277 case GL_COMPRESSED_SRGB_EXT
:
278 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
:
279 case GL_COMPRESSED_SRGB_ALPHA_EXT
:
280 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
:
281 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
:
282 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
:
283 case GL_COMPRESSED_SLUMINANCE_EXT
:
284 case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT
:
285 #endif /* FEATURE_EXT_texture_sRGB */
286 case GL_COMPRESSED_RED_RGTC1
:
287 case GL_COMPRESSED_SIGNED_RED_RGTC1
:
288 case GL_COMPRESSED_RG_RGTC2
:
289 case GL_COMPRESSED_SIGNED_RG_RGTC2
:
290 case GL_COMPRESSED_LUMINANCE_LATC1_EXT
:
291 case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT
:
292 case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT
:
293 case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT
:
294 case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI
:
295 case GL_ETC1_RGB8_OES
:
296 /* generic integer formats */
297 case GL_RED_INTEGER_EXT
:
298 case GL_GREEN_INTEGER_EXT
:
299 case GL_BLUE_INTEGER_EXT
:
300 case GL_ALPHA_INTEGER_EXT
:
301 case GL_RGB_INTEGER_EXT
:
302 case GL_RGBA_INTEGER_EXT
:
303 case GL_BGR_INTEGER_EXT
:
304 case GL_BGRA_INTEGER_EXT
:
306 case GL_LUMINANCE_INTEGER_EXT
:
307 case GL_LUMINANCE_ALPHA_INTEGER_EXT
:
308 /* sized integer formats */
309 case GL_RGBA32UI_EXT
:
313 case GL_ALPHA32UI_EXT
:
314 case GL_INTENSITY32UI_EXT
:
315 case GL_LUMINANCE32UI_EXT
:
316 case GL_LUMINANCE_ALPHA32UI_EXT
:
317 case GL_RGBA16UI_EXT
:
321 case GL_ALPHA16UI_EXT
:
322 case GL_INTENSITY16UI_EXT
:
323 case GL_LUMINANCE16UI_EXT
:
324 case GL_LUMINANCE_ALPHA16UI_EXT
:
329 case GL_ALPHA8UI_EXT
:
330 case GL_INTENSITY8UI_EXT
:
331 case GL_LUMINANCE8UI_EXT
:
332 case GL_LUMINANCE_ALPHA8UI_EXT
:
337 case GL_ALPHA32I_EXT
:
338 case GL_INTENSITY32I_EXT
:
339 case GL_LUMINANCE32I_EXT
:
340 case GL_LUMINANCE_ALPHA32I_EXT
:
345 case GL_ALPHA16I_EXT
:
346 case GL_INTENSITY16I_EXT
:
347 case GL_LUMINANCE16I_EXT
:
348 case GL_LUMINANCE_ALPHA16I_EXT
:
354 case GL_INTENSITY8I_EXT
:
355 case GL_LUMINANCE8I_EXT
:
356 case GL_LUMINANCE_ALPHA8I_EXT
:
357 /* signed, normalized texture formats */
369 case GL_RGBA16_SNORM
:
371 case GL_ALPHA8_SNORM
:
372 case GL_ALPHA16_SNORM
:
373 case GL_LUMINANCE_SNORM
:
374 case GL_LUMINANCE8_SNORM
:
375 case GL_LUMINANCE16_SNORM
:
376 case GL_LUMINANCE_ALPHA_SNORM
:
377 case GL_LUMINANCE8_ALPHA8_SNORM
:
378 case GL_LUMINANCE16_ALPHA16_SNORM
:
379 case GL_INTENSITY_SNORM
:
380 case GL_INTENSITY8_SNORM
:
381 case GL_INTENSITY16_SNORM
:
383 case GL_R11F_G11F_B10F
:
386 case GL_YCBCR_MESA
: /* not considered to be RGB */
395 * Test if the given image format is a depth component format.
398 _mesa_is_depth_format(GLenum format
)
401 case GL_DEPTH_COMPONENT
:
402 case GL_DEPTH_COMPONENT16
:
403 case GL_DEPTH_COMPONENT24
:
404 case GL_DEPTH_COMPONENT32
:
405 case GL_DEPTH_COMPONENT32F
:
414 * Test if the given image format is a stencil format.
417 _mesa_is_stencil_format(GLenum format
)
420 case GL_STENCIL_INDEX
:
429 * Test if the given image format is a YCbCr format.
432 _mesa_is_ycbcr_format(GLenum format
)
444 * Test if the given image format is a depth+stencil format.
447 _mesa_is_depthstencil_format(GLenum format
)
450 case GL_DEPTH24_STENCIL8_EXT
:
451 case GL_DEPTH_STENCIL_EXT
:
452 case GL_DEPTH32F_STENCIL8
:
461 * Test if the given image format is a depth or stencil format.
464 _mesa_is_depth_or_stencil_format(GLenum format
)
467 case GL_DEPTH_COMPONENT
:
468 case GL_DEPTH_COMPONENT16
:
469 case GL_DEPTH_COMPONENT24
:
470 case GL_DEPTH_COMPONENT32
:
471 case GL_STENCIL_INDEX
:
472 case GL_STENCIL_INDEX1_EXT
:
473 case GL_STENCIL_INDEX4_EXT
:
474 case GL_STENCIL_INDEX8_EXT
:
475 case GL_STENCIL_INDEX16_EXT
:
476 case GL_DEPTH_STENCIL_EXT
:
477 case GL_DEPTH24_STENCIL8_EXT
:
478 case GL_DEPTH_COMPONENT32F
:
479 case GL_DEPTH32F_STENCIL8
:
488 * Test if the given image format is a dudv format.
491 _mesa_is_dudv_format(GLenum format
)
504 * Test if an image format is a supported compressed format.
505 * \param format the internal format token provided by the user.
506 * \return GL_TRUE if compressed, GL_FALSE if uncompressed
509 _mesa_is_compressed_format(struct gl_context
*ctx
, GLenum format
)
512 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT
:
513 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
:
514 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
:
515 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
:
516 return ctx
->Extensions
.EXT_texture_compression_s3tc
;
521 return ctx
->Extensions
.S3_s3tc
;
522 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
:
523 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
:
524 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
:
525 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
:
526 return ctx
->Extensions
.EXT_texture_sRGB
527 && ctx
->Extensions
.EXT_texture_compression_s3tc
;
528 case GL_COMPRESSED_RGB_FXT1_3DFX
:
529 case GL_COMPRESSED_RGBA_FXT1_3DFX
:
530 return ctx
->Extensions
.TDFX_texture_compression_FXT1
;
531 case GL_COMPRESSED_RED_RGTC1
:
532 case GL_COMPRESSED_SIGNED_RED_RGTC1
:
533 case GL_COMPRESSED_RG_RGTC2
:
534 case GL_COMPRESSED_SIGNED_RG_RGTC2
:
535 return ctx
->Extensions
.ARB_texture_compression_rgtc
;
536 case GL_COMPRESSED_LUMINANCE_LATC1_EXT
:
537 case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT
:
538 case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT
:
539 case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT
:
540 return ctx
->Extensions
.EXT_texture_compression_latc
;
541 case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI
:
542 return ctx
->Extensions
.ATI_texture_compression_3dc
;
543 case GL_ETC1_RGB8_OES
:
544 return ctx
->Extensions
.OES_compressed_ETC1_RGB8_texture
;
546 case GL_PALETTE4_RGB8_OES
:
547 case GL_PALETTE4_RGBA8_OES
:
548 case GL_PALETTE4_R5_G6_B5_OES
:
549 case GL_PALETTE4_RGBA4_OES
:
550 case GL_PALETTE4_RGB5_A1_OES
:
551 case GL_PALETTE8_RGB8_OES
:
552 case GL_PALETTE8_RGBA8_OES
:
553 case GL_PALETTE8_R5_G6_B5_OES
:
554 case GL_PALETTE8_RGBA4_OES
:
555 case GL_PALETTE8_RGB5_A1_OES
:
556 return ctx
->API
== API_OPENGLES
;
565 * Convert various base formats to the cooresponding integer format.
568 _mesa_base_format_to_integer_format(GLenum format
)
572 return GL_RED_INTEGER
;
574 return GL_GREEN_INTEGER
;
576 return GL_BLUE_INTEGER
;
578 return GL_RG_INTEGER
;
580 return GL_RGB_INTEGER
;
582 return GL_RGBA_INTEGER
;
584 return GL_BGR_INTEGER
;
586 return GL_BGRA_INTEGER
;
588 return GL_ALPHA_INTEGER
;
590 return GL_LUMINANCE_INTEGER_EXT
;
591 case GL_LUMINANCE_ALPHA
:
592 return GL_LUMINANCE_ALPHA_INTEGER_EXT
;