2 * Mesa 3-D graphics library
5 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
6 * Copyright (c) 2008-2009 VMware, Inc.
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 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.
31 #include "glformats.h"
35 * Information about texture formats.
41 /** text name for debugging */
45 * Base format is one of GL_RED, GL_RG, GL_RGB, GL_RGBA, GL_ALPHA,
46 * GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_INTENSITY, GL_YCBCR_MESA,
47 * GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_DEPTH_STENCIL, GL_DUDV_ATI.
52 * Logical data type: one of GL_UNSIGNED_NORMALIZED, GL_SIGNED_NORMALIZED,
53 * GL_UNSIGNED_INT, GL_INT, GL_FLOAT.
61 GLubyte LuminanceBits
;
62 GLubyte IntensityBits
;
68 * To describe compressed formats. If not compressed, Width=Height=1.
70 GLubyte BlockWidth
, BlockHeight
;
71 GLubyte BytesPerBlock
;
76 * Info about each format.
77 * These must be in the same order as the MESA_FORMAT_* enums so that
78 * we can do lookups without searching.
80 static struct gl_format_info format_info
[MESA_FORMAT_COUNT
] =
83 MESA_FORMAT_NONE
, /* Name */
84 "MESA_FORMAT_NONE", /* StrName */
85 GL_NONE
, /* BaseFormat */
86 GL_NONE
, /* DataType */
87 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
88 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
89 0, 0, 0 /* BlockWidth/Height,Bytes */
92 MESA_FORMAT_RGBA8888
, /* Name */
93 "MESA_FORMAT_RGBA8888", /* StrName */
94 GL_RGBA
, /* BaseFormat */
95 GL_UNSIGNED_NORMALIZED
, /* DataType */
96 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */
97 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
98 1, 1, 4 /* BlockWidth/Height,Bytes */
101 MESA_FORMAT_RGBA8888_REV
, /* Name */
102 "MESA_FORMAT_RGBA8888_REV", /* StrName */
103 GL_RGBA
, /* BaseFormat */
104 GL_UNSIGNED_NORMALIZED
, /* DataType */
105 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */
106 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
107 1, 1, 4 /* BlockWidth/Height,Bytes */
110 MESA_FORMAT_ARGB8888
, /* Name */
111 "MESA_FORMAT_ARGB8888", /* StrName */
112 GL_RGBA
, /* BaseFormat */
113 GL_UNSIGNED_NORMALIZED
, /* DataType */
114 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */
115 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
116 1, 1, 4 /* BlockWidth/Height,Bytes */
119 MESA_FORMAT_ARGB8888_REV
, /* Name */
120 "MESA_FORMAT_ARGB8888_REV", /* StrName */
121 GL_RGBA
, /* BaseFormat */
122 GL_UNSIGNED_NORMALIZED
, /* DataType */
123 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */
124 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
125 1, 1, 4 /* BlockWidth/Height,Bytes */
128 MESA_FORMAT_RGBX8888
, /* Name */
129 "MESA_FORMAT_RGBX8888", /* StrName */
130 GL_RGB
, /* BaseFormat */
131 GL_UNSIGNED_NORMALIZED
, /* DataType */
132 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */
133 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
134 1, 1, 4 /* BlockWidth/Height,Bytes */
137 MESA_FORMAT_RGBX8888_REV
, /* Name */
138 "MESA_FORMAT_RGBX8888_REV", /* StrName */
139 GL_RGB
, /* BaseFormat */
140 GL_UNSIGNED_NORMALIZED
, /* DataType */
141 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */
142 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
143 1, 1, 4 /* BlockWidth/Height,Bytes */
146 MESA_FORMAT_XRGB8888
, /* Name */
147 "MESA_FORMAT_XRGB8888", /* StrName */
148 GL_RGB
, /* BaseFormat */
149 GL_UNSIGNED_NORMALIZED
, /* DataType */
150 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */
151 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
152 1, 1, 4 /* BlockWidth/Height,Bytes */
155 MESA_FORMAT_XRGB8888_REV
, /* Name */
156 "MESA_FORMAT_XRGB8888_REV", /* StrName */
157 GL_RGB
, /* BaseFormat */
158 GL_UNSIGNED_NORMALIZED
, /* DataType */
159 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */
160 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
161 1, 1, 4 /* BlockWidth/Height,Bytes */
164 MESA_FORMAT_RGB888
, /* Name */
165 "MESA_FORMAT_RGB888", /* StrName */
166 GL_RGB
, /* BaseFormat */
167 GL_UNSIGNED_NORMALIZED
, /* DataType */
168 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */
169 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
170 1, 1, 3 /* BlockWidth/Height,Bytes */
173 MESA_FORMAT_BGR888
, /* Name */
174 "MESA_FORMAT_BGR888", /* StrName */
175 GL_RGB
, /* BaseFormat */
176 GL_UNSIGNED_NORMALIZED
, /* DataType */
177 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */
178 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
179 1, 1, 3 /* BlockWidth/Height,Bytes */
182 MESA_FORMAT_RGB565
, /* Name */
183 "MESA_FORMAT_RGB565", /* StrName */
184 GL_RGB
, /* BaseFormat */
185 GL_UNSIGNED_NORMALIZED
, /* DataType */
186 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */
187 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
188 1, 1, 2 /* BlockWidth/Height,Bytes */
191 MESA_FORMAT_RGB565_REV
, /* Name */
192 "MESA_FORMAT_RGB565_REV", /* StrName */
193 GL_RGB
, /* BaseFormat */
194 GL_UNSIGNED_NORMALIZED
, /* DataType */
195 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */
196 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
197 1, 1, 2 /* BlockWidth/Height,Bytes */
200 MESA_FORMAT_ARGB4444
, /* Name */
201 "MESA_FORMAT_ARGB4444", /* StrName */
202 GL_RGBA
, /* BaseFormat */
203 GL_UNSIGNED_NORMALIZED
, /* DataType */
204 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */
205 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
206 1, 1, 2 /* BlockWidth/Height,Bytes */
209 MESA_FORMAT_ARGB4444_REV
, /* Name */
210 "MESA_FORMAT_ARGB4444_REV", /* StrName */
211 GL_RGBA
, /* BaseFormat */
212 GL_UNSIGNED_NORMALIZED
, /* DataType */
213 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */
214 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
215 1, 1, 2 /* BlockWidth/Height,Bytes */
218 MESA_FORMAT_RGBA5551
, /* Name */
219 "MESA_FORMAT_RGBA5551", /* StrName */
220 GL_RGBA
, /* BaseFormat */
221 GL_UNSIGNED_NORMALIZED
, /* DataType */
222 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */
223 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
224 1, 1, 2 /* BlockWidth/Height,Bytes */
227 MESA_FORMAT_ARGB1555
, /* Name */
228 "MESA_FORMAT_ARGB1555", /* StrName */
229 GL_RGBA
, /* BaseFormat */
230 GL_UNSIGNED_NORMALIZED
, /* DataType */
231 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */
232 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
233 1, 1, 2 /* BlockWidth/Height,Bytes */
236 MESA_FORMAT_ARGB1555_REV
, /* Name */
237 "MESA_FORMAT_ARGB1555_REV", /* StrName */
238 GL_RGBA
, /* BaseFormat */
239 GL_UNSIGNED_NORMALIZED
, /* DataType */
240 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */
241 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
242 1, 1, 2 /* BlockWidth/Height,Bytes */
245 MESA_FORMAT_AL44
, /* Name */
246 "MESA_FORMAT_AL44", /* StrName */
247 GL_LUMINANCE_ALPHA
, /* BaseFormat */
248 GL_UNSIGNED_NORMALIZED
, /* DataType */
249 0, 0, 0, 4, /* Red/Green/Blue/AlphaBits */
250 4, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
251 1, 1, 1 /* BlockWidth/Height,Bytes */
254 MESA_FORMAT_AL88
, /* Name */
255 "MESA_FORMAT_AL88", /* StrName */
256 GL_LUMINANCE_ALPHA
, /* BaseFormat */
257 GL_UNSIGNED_NORMALIZED
, /* DataType */
258 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */
259 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
260 1, 1, 2 /* BlockWidth/Height,Bytes */
263 MESA_FORMAT_AL88_REV
, /* Name */
264 "MESA_FORMAT_AL88_REV", /* StrName */
265 GL_LUMINANCE_ALPHA
, /* BaseFormat */
266 GL_UNSIGNED_NORMALIZED
, /* DataType */
267 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */
268 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
269 1, 1, 2 /* BlockWidth/Height,Bytes */
272 MESA_FORMAT_AL1616
, /* Name */
273 "MESA_FORMAT_AL1616", /* StrName */
274 GL_LUMINANCE_ALPHA
, /* BaseFormat */
275 GL_UNSIGNED_NORMALIZED
, /* DataType */
276 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */
277 16, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
278 1, 1, 4 /* BlockWidth/Height,Bytes */
281 MESA_FORMAT_AL1616_REV
, /* Name */
282 "MESA_FORMAT_AL1616_REV", /* StrName */
283 GL_LUMINANCE_ALPHA
, /* BaseFormat */
284 GL_UNSIGNED_NORMALIZED
, /* DataType */
285 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */
286 16, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
287 1, 1, 4 /* BlockWidth/Height,Bytes */
290 MESA_FORMAT_RGB332
, /* Name */
291 "MESA_FORMAT_RGB332", /* StrName */
292 GL_RGB
, /* BaseFormat */
293 GL_UNSIGNED_NORMALIZED
, /* DataType */
294 3, 3, 2, 0, /* Red/Green/Blue/AlphaBits */
295 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
296 1, 1, 1 /* BlockWidth/Height,Bytes */
299 MESA_FORMAT_A8
, /* Name */
300 "MESA_FORMAT_A8", /* StrName */
301 GL_ALPHA
, /* BaseFormat */
302 GL_UNSIGNED_NORMALIZED
, /* DataType */
303 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */
304 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
305 1, 1, 1 /* BlockWidth/Height,Bytes */
308 MESA_FORMAT_A16
, /* Name */
309 "MESA_FORMAT_A16", /* StrName */
310 GL_ALPHA
, /* BaseFormat */
311 GL_UNSIGNED_NORMALIZED
, /* DataType */
312 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */
313 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
314 1, 1, 2 /* BlockWidth/Height,Bytes */
317 MESA_FORMAT_L8
, /* Name */
318 "MESA_FORMAT_L8", /* StrName */
319 GL_LUMINANCE
, /* BaseFormat */
320 GL_UNSIGNED_NORMALIZED
, /* DataType */
321 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
322 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
323 1, 1, 1 /* BlockWidth/Height,Bytes */
326 MESA_FORMAT_L16
, /* Name */
327 "MESA_FORMAT_L16", /* StrName */
328 GL_LUMINANCE
, /* BaseFormat */
329 GL_UNSIGNED_NORMALIZED
, /* DataType */
330 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
331 16, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
332 1, 1, 2 /* BlockWidth/Height,Bytes */
335 MESA_FORMAT_I8
, /* Name */
336 "MESA_FORMAT_I8", /* StrName */
337 GL_INTENSITY
, /* BaseFormat */
338 GL_UNSIGNED_NORMALIZED
, /* DataType */
339 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
340 0, 8, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
341 1, 1, 1 /* BlockWidth/Height,Bytes */
344 MESA_FORMAT_I16
, /* Name */
345 "MESA_FORMAT_I16", /* StrName */
346 GL_INTENSITY
, /* BaseFormat */
347 GL_UNSIGNED_NORMALIZED
, /* DataType */
348 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
349 0, 16, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
350 1, 1, 2 /* BlockWidth/Height,Bytes */
353 MESA_FORMAT_YCBCR
, /* Name */
354 "MESA_FORMAT_YCBCR", /* StrName */
355 GL_YCBCR_MESA
, /* BaseFormat */
356 GL_UNSIGNED_NORMALIZED
, /* DataType */
357 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
358 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
359 1, 1, 2 /* BlockWidth/Height,Bytes */
362 MESA_FORMAT_YCBCR_REV
, /* Name */
363 "MESA_FORMAT_YCBCR_REV", /* StrName */
364 GL_YCBCR_MESA
, /* BaseFormat */
365 GL_UNSIGNED_NORMALIZED
, /* DataType */
366 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
367 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
368 1, 1, 2 /* BlockWidth/Height,Bytes */
374 GL_UNSIGNED_NORMALIZED
,
383 GL_UNSIGNED_NORMALIZED
,
392 GL_UNSIGNED_NORMALIZED
,
401 GL_UNSIGNED_NORMALIZED
,
408 "MESA_FORMAT_GR1616",
410 GL_UNSIGNED_NORMALIZED
,
417 "MESA_FORMAT_RG1616",
419 GL_UNSIGNED_NORMALIZED
,
425 MESA_FORMAT_ARGB2101010
,
426 "MESA_FORMAT_ARGB2101010",
428 GL_UNSIGNED_NORMALIZED
,
434 MESA_FORMAT_Z24_S8
, /* Name */
435 "MESA_FORMAT_Z24_S8", /* StrName */
436 GL_DEPTH_STENCIL
, /* BaseFormat */
437 GL_UNSIGNED_NORMALIZED
, /* DataType */
438 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
439 0, 0, 0, 24, 8, /* Lum/Int/Index/Depth/StencilBits */
440 1, 1, 4 /* BlockWidth/Height,Bytes */
443 MESA_FORMAT_S8_Z24
, /* Name */
444 "MESA_FORMAT_S8_Z24", /* StrName */
445 GL_DEPTH_STENCIL
, /* BaseFormat */
446 GL_UNSIGNED_NORMALIZED
, /* DataType */
447 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
448 0, 0, 0, 24, 8, /* Lum/Int/Index/Depth/StencilBits */
449 1, 1, 4 /* BlockWidth/Height,Bytes */
452 MESA_FORMAT_Z16
, /* Name */
453 "MESA_FORMAT_Z16", /* StrName */
454 GL_DEPTH_COMPONENT
, /* BaseFormat */
455 GL_UNSIGNED_NORMALIZED
, /* DataType */
456 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
457 0, 0, 0, 16, 0, /* Lum/Int/Index/Depth/StencilBits */
458 1, 1, 2 /* BlockWidth/Height,Bytes */
461 MESA_FORMAT_X8_Z24
, /* Name */
462 "MESA_FORMAT_X8_Z24", /* StrName */
463 GL_DEPTH_COMPONENT
, /* BaseFormat */
464 GL_UNSIGNED_NORMALIZED
, /* DataType */
465 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
466 0, 0, 0, 24, 0, /* Lum/Int/Index/Depth/StencilBits */
467 1, 1, 4 /* BlockWidth/Height,Bytes */
470 MESA_FORMAT_Z24_X8
, /* Name */
471 "MESA_FORMAT_Z24_X8", /* StrName */
472 GL_DEPTH_COMPONENT
, /* BaseFormat */
473 GL_UNSIGNED_NORMALIZED
, /* DataType */
474 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
475 0, 0, 0, 24, 0, /* Lum/Int/Index/Depth/StencilBits */
476 1, 1, 4 /* BlockWidth/Height,Bytes */
479 MESA_FORMAT_Z32
, /* Name */
480 "MESA_FORMAT_Z32", /* StrName */
481 GL_DEPTH_COMPONENT
, /* BaseFormat */
482 GL_UNSIGNED_NORMALIZED
, /* DataType */
483 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
484 0, 0, 0, 32, 0, /* Lum/Int/Index/Depth/StencilBits */
485 1, 1, 4 /* BlockWidth/Height,Bytes */
488 MESA_FORMAT_S8
, /* Name */
489 "MESA_FORMAT_S8", /* StrName */
490 GL_STENCIL_INDEX
, /* BaseFormat */
491 GL_UNSIGNED_INT
, /* DataType */
492 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
493 0, 0, 0, 0, 8, /* Lum/Int/Index/Depth/StencilBits */
494 1, 1, 1 /* BlockWidth/Height,Bytes */
500 GL_UNSIGNED_NORMALIZED
,
507 "MESA_FORMAT_SRGBA8",
509 GL_UNSIGNED_NORMALIZED
,
516 "MESA_FORMAT_SARGB8",
518 GL_UNSIGNED_NORMALIZED
,
527 GL_UNSIGNED_NORMALIZED
,
536 GL_UNSIGNED_NORMALIZED
,
542 MESA_FORMAT_SRGB_DXT1
, /* Name */
543 "MESA_FORMAT_SRGB_DXT1", /* StrName */
544 GL_RGB
, /* BaseFormat */
545 GL_UNSIGNED_NORMALIZED
, /* DataType */
546 4, 4, 4, 0, /* approx Red/Green/Blue/AlphaBits */
547 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
548 4, 4, 8 /* 8 bytes per 4x4 block */
551 MESA_FORMAT_SRGBA_DXT1
,
552 "MESA_FORMAT_SRGBA_DXT1",
554 GL_UNSIGNED_NORMALIZED
,
557 4, 4, 8 /* 8 bytes per 4x4 block */
560 MESA_FORMAT_SRGBA_DXT3
,
561 "MESA_FORMAT_SRGBA_DXT3",
563 GL_UNSIGNED_NORMALIZED
,
566 4, 4, 16 /* 16 bytes per 4x4 block */
569 MESA_FORMAT_SRGBA_DXT5
,
570 "MESA_FORMAT_SRGBA_DXT5",
572 GL_UNSIGNED_NORMALIZED
,
575 4, 4, 16 /* 16 bytes per 4x4 block */
579 MESA_FORMAT_RGB_FXT1
,
580 "MESA_FORMAT_RGB_FXT1",
582 GL_UNSIGNED_NORMALIZED
,
583 4, 4, 4, 0, /* approx Red/Green/BlueBits */
585 8, 4, 16 /* 16 bytes per 8x4 block */
588 MESA_FORMAT_RGBA_FXT1
,
589 "MESA_FORMAT_RGBA_FXT1",
591 GL_UNSIGNED_NORMALIZED
,
592 4, 4, 4, 1, /* approx Red/Green/Blue/AlphaBits */
594 8, 4, 16 /* 16 bytes per 8x4 block */
598 MESA_FORMAT_RGB_DXT1
, /* Name */
599 "MESA_FORMAT_RGB_DXT1", /* StrName */
600 GL_RGB
, /* BaseFormat */
601 GL_UNSIGNED_NORMALIZED
, /* DataType */
602 4, 4, 4, 0, /* approx Red/Green/Blue/AlphaBits */
603 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
604 4, 4, 8 /* 8 bytes per 4x4 block */
607 MESA_FORMAT_RGBA_DXT1
,
608 "MESA_FORMAT_RGBA_DXT1",
610 GL_UNSIGNED_NORMALIZED
,
613 4, 4, 8 /* 8 bytes per 4x4 block */
616 MESA_FORMAT_RGBA_DXT3
,
617 "MESA_FORMAT_RGBA_DXT3",
619 GL_UNSIGNED_NORMALIZED
,
622 4, 4, 16 /* 16 bytes per 4x4 block */
625 MESA_FORMAT_RGBA_DXT5
,
626 "MESA_FORMAT_RGBA_DXT5",
628 GL_UNSIGNED_NORMALIZED
,
631 4, 4, 16 /* 16 bytes per 4x4 block */
634 MESA_FORMAT_RGBA_FLOAT32
,
635 "MESA_FORMAT_RGBA_FLOAT32",
643 MESA_FORMAT_RGBA_FLOAT16
,
644 "MESA_FORMAT_RGBA_FLOAT16",
652 MESA_FORMAT_RGB_FLOAT32
,
653 "MESA_FORMAT_RGB_FLOAT32",
661 MESA_FORMAT_RGB_FLOAT16
,
662 "MESA_FORMAT_RGB_FLOAT16",
670 MESA_FORMAT_ALPHA_FLOAT32
,
671 "MESA_FORMAT_ALPHA_FLOAT32",
679 MESA_FORMAT_ALPHA_FLOAT16
,
680 "MESA_FORMAT_ALPHA_FLOAT16",
688 MESA_FORMAT_LUMINANCE_FLOAT32
,
689 "MESA_FORMAT_LUMINANCE_FLOAT32",
697 MESA_FORMAT_LUMINANCE_FLOAT16
,
698 "MESA_FORMAT_LUMINANCE_FLOAT16",
706 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
,
707 "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32",
715 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
,
716 "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16",
724 MESA_FORMAT_INTENSITY_FLOAT32
,
725 "MESA_FORMAT_INTENSITY_FLOAT32",
733 MESA_FORMAT_INTENSITY_FLOAT16
,
734 "MESA_FORMAT_INTENSITY_FLOAT16",
742 MESA_FORMAT_R_FLOAT32
,
743 "MESA_FORMAT_R_FLOAT32",
751 MESA_FORMAT_R_FLOAT16
,
752 "MESA_FORMAT_R_FLOAT16",
760 MESA_FORMAT_RG_FLOAT32
,
761 "MESA_FORMAT_RG_FLOAT32",
769 MESA_FORMAT_RG_FLOAT16
,
770 "MESA_FORMAT_RG_FLOAT16",
778 /* unnormalized signed int formats */
779 /* unnormalized unsigned int formats */
781 MESA_FORMAT_ALPHA_UINT8
,
782 "MESA_FORMAT_ALPHA_UINT8",
790 MESA_FORMAT_ALPHA_UINT16
,
791 "MESA_FORMAT_ALPHA_UINT16",
799 MESA_FORMAT_ALPHA_UINT32
,
800 "MESA_FORMAT_ALPHA_UINT32",
808 MESA_FORMAT_ALPHA_INT8
,
809 "MESA_FORMAT_ALPHA_INT8",
817 MESA_FORMAT_ALPHA_INT16
,
818 "MESA_FORMAT_ALPHA_INT16",
826 MESA_FORMAT_ALPHA_INT32
,
827 "MESA_FORMAT_ALPHA_INT32",
835 MESA_FORMAT_INTENSITY_UINT8
,
836 "MESA_FORMAT_INTENSITY_UINT8",
844 MESA_FORMAT_INTENSITY_UINT16
,
845 "MESA_FORMAT_INTENSITY_UINT16",
853 MESA_FORMAT_INTENSITY_UINT32
,
854 "MESA_FORMAT_INTENSITY_UINT32",
862 MESA_FORMAT_INTENSITY_INT8
,
863 "MESA_FORMAT_INTENSITY_INT8",
871 MESA_FORMAT_INTENSITY_INT16
,
872 "MESA_FORMAT_INTENSITY_INT16",
880 MESA_FORMAT_INTENSITY_INT32
,
881 "MESA_FORMAT_INTENSITY_INT32",
889 MESA_FORMAT_LUMINANCE_UINT8
,
890 "MESA_FORMAT_LUMINANCE_UINT8",
898 MESA_FORMAT_LUMINANCE_UINT16
,
899 "MESA_FORMAT_LUMINANCE_UINT16",
907 MESA_FORMAT_LUMINANCE_UINT32
,
908 "MESA_FORMAT_LUMINANCE_UINT32",
916 MESA_FORMAT_LUMINANCE_INT8
,
917 "MESA_FORMAT_LUMINANCE_INT8",
925 MESA_FORMAT_LUMINANCE_INT16
,
926 "MESA_FORMAT_LUMINANCE_INT16",
934 MESA_FORMAT_LUMINANCE_INT32
,
935 "MESA_FORMAT_LUMINANCE_INT32",
943 MESA_FORMAT_LUMINANCE_ALPHA_UINT8
,
944 "MESA_FORMAT_LUMINANCE_ALPHA_UINT8",
952 MESA_FORMAT_LUMINANCE_ALPHA_UINT16
,
953 "MESA_FORMAT_LUMINANCE_ALPHA_UINT16",
961 MESA_FORMAT_LUMINANCE_ALPHA_UINT32
,
962 "MESA_FORMAT_LUMINANCE_ALPHA_UINT32",
970 MESA_FORMAT_LUMINANCE_ALPHA_INT8
,
971 "MESA_FORMAT_LUMINANCE_ALPHA_INT8",
979 MESA_FORMAT_LUMINANCE_ALPHA_INT16
,
980 "MESA_FORMAT_LUMINANCE_ALPHA_INT16",
988 MESA_FORMAT_LUMINANCE_ALPHA_INT32
,
989 "MESA_FORMAT_LUMINANCE_ALPHA_INT32",
999 "MESA_FORMAT_R_INT8",
1007 MESA_FORMAT_RG_INT8
,
1008 "MESA_FORMAT_RG_INT8",
1016 MESA_FORMAT_RGB_INT8
,
1017 "MESA_FORMAT_RGB_INT8",
1025 MESA_FORMAT_RGBA_INT8
,
1026 "MESA_FORMAT_RGBA_INT8",
1034 MESA_FORMAT_R_INT16
,
1035 "MESA_FORMAT_R_INT16",
1043 MESA_FORMAT_RG_INT16
,
1044 "MESA_FORMAT_RG_INT16",
1052 MESA_FORMAT_RGB_INT16
,
1053 "MESA_FORMAT_RGB_INT16",
1061 MESA_FORMAT_RGBA_INT16
,
1062 "MESA_FORMAT_RGBA_INT16",
1070 MESA_FORMAT_R_INT32
,
1071 "MESA_FORMAT_R_INT32",
1079 MESA_FORMAT_RG_INT32
,
1080 "MESA_FORMAT_RG_INT32",
1088 MESA_FORMAT_RGB_INT32
,
1089 "MESA_FORMAT_RGB_INT32",
1097 MESA_FORMAT_RGBA_INT32
,
1098 "MESA_FORMAT_RGBA_INT32",
1106 MESA_FORMAT_R_UINT8
,
1107 "MESA_FORMAT_R_UINT8",
1115 MESA_FORMAT_RG_UINT8
,
1116 "MESA_FORMAT_RG_UINT8",
1124 MESA_FORMAT_RGB_UINT8
,
1125 "MESA_FORMAT_RGB_UINT8",
1133 MESA_FORMAT_RGBA_UINT8
,
1134 "MESA_FORMAT_RGBA_UINT8",
1142 MESA_FORMAT_R_UINT16
,
1143 "MESA_FORMAT_R_UINT16",
1151 MESA_FORMAT_RG_UINT16
,
1152 "MESA_FORMAT_RG_UINT16",
1160 MESA_FORMAT_RGB_UINT16
,
1161 "MESA_FORMAT_RGB_UINT16",
1169 MESA_FORMAT_RGBA_UINT16
,
1170 "MESA_FORMAT_RGBA_UINT16",
1178 MESA_FORMAT_R_UINT32
,
1179 "MESA_FORMAT_R_UINT32",
1187 MESA_FORMAT_RG_UINT32
,
1188 "MESA_FORMAT_RG_UINT32",
1196 MESA_FORMAT_RGB_UINT32
,
1197 "MESA_FORMAT_RGB_UINT32",
1205 MESA_FORMAT_RGBA_UINT32
,
1206 "MESA_FORMAT_RGBA_UINT32",
1217 "MESA_FORMAT_DUDV8",
1219 GL_SIGNED_NORMALIZED
,
1225 /* Signed 8 bits / channel */
1227 MESA_FORMAT_SIGNED_R8
, /* Name */
1228 "MESA_FORMAT_SIGNED_R8", /* StrName */
1229 GL_RED
, /* BaseFormat */
1230 GL_SIGNED_NORMALIZED
, /* DataType */
1231 8, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
1232 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
1233 1, 1, 1 /* BlockWidth/Height,Bytes */
1236 MESA_FORMAT_SIGNED_RG88_REV
,
1237 "MESA_FORMAT_SIGNED_RG88_REV",
1239 GL_SIGNED_NORMALIZED
,
1245 MESA_FORMAT_SIGNED_RGBX8888
,
1246 "MESA_FORMAT_SIGNED_RGBX8888",
1248 GL_SIGNED_NORMALIZED
,
1251 1, 1, 4 /* 4 bpp, but no alpha */
1254 MESA_FORMAT_SIGNED_RGBA8888
,
1255 "MESA_FORMAT_SIGNED_RGBA8888",
1257 GL_SIGNED_NORMALIZED
,
1263 MESA_FORMAT_SIGNED_RGBA8888_REV
,
1264 "MESA_FORMAT_SIGNED_RGBA8888_REV",
1266 GL_SIGNED_NORMALIZED
,
1272 /* Signed 16 bits / channel */
1274 MESA_FORMAT_SIGNED_R16
,
1275 "MESA_FORMAT_SIGNED_R16",
1277 GL_SIGNED_NORMALIZED
,
1283 MESA_FORMAT_SIGNED_GR1616
,
1284 "MESA_FORMAT_SIGNED_GR1616",
1286 GL_SIGNED_NORMALIZED
,
1292 MESA_FORMAT_SIGNED_RGB_16
,
1293 "MESA_FORMAT_SIGNED_RGB_16",
1295 GL_SIGNED_NORMALIZED
,
1301 MESA_FORMAT_SIGNED_RGBA_16
,
1302 "MESA_FORMAT_SIGNED_RGBA_16",
1304 GL_SIGNED_NORMALIZED
,
1310 MESA_FORMAT_RGBA_16
,
1311 "MESA_FORMAT_RGBA_16",
1313 GL_UNSIGNED_NORMALIZED
,
1319 MESA_FORMAT_RED_RGTC1
,
1320 "MESA_FORMAT_RED_RGTC1",
1322 GL_UNSIGNED_NORMALIZED
,
1325 4, 4, 8 /* 8 bytes per 4x4 block */
1328 MESA_FORMAT_SIGNED_RED_RGTC1
,
1329 "MESA_FORMAT_SIGNED_RED_RGTC1",
1331 GL_SIGNED_NORMALIZED
,
1334 4, 4, 8 /* 8 bytes per 4x4 block */
1337 MESA_FORMAT_RG_RGTC2
,
1338 "MESA_FORMAT_RG_RGTC2",
1340 GL_UNSIGNED_NORMALIZED
,
1343 4, 4, 16 /* 16 bytes per 4x4 block */
1346 MESA_FORMAT_SIGNED_RG_RGTC2
,
1347 "MESA_FORMAT_SIGNED_RG_RGTC2",
1349 GL_SIGNED_NORMALIZED
,
1352 4, 4, 16 /* 16 bytes per 4x4 block */
1355 MESA_FORMAT_L_LATC1
,
1356 "MESA_FORMAT_L_LATC1",
1358 GL_UNSIGNED_NORMALIZED
,
1361 4, 4, 8 /* 8 bytes per 4x4 block */
1364 MESA_FORMAT_SIGNED_L_LATC1
,
1365 "MESA_FORMAT_SIGNED_L_LATC1",
1367 GL_SIGNED_NORMALIZED
,
1370 4, 4, 8 /* 8 bytes per 4x4 block */
1373 MESA_FORMAT_LA_LATC2
,
1374 "MESA_FORMAT_LA_LATC2",
1376 GL_UNSIGNED_NORMALIZED
,
1379 4, 4, 16 /* 16 bytes per 4x4 block */
1382 MESA_FORMAT_SIGNED_LA_LATC2
,
1383 "MESA_FORMAT_SIGNED_LA_LATC2",
1385 GL_SIGNED_NORMALIZED
,
1388 4, 4, 16 /* 16 bytes per 4x4 block */
1392 MESA_FORMAT_ETC1_RGB8
,
1393 "MESA_FORMAT_ETC1_RGB8",
1395 GL_UNSIGNED_NORMALIZED
,
1398 4, 4, 8 /* 8 bytes per 4x4 block */
1402 MESA_FORMAT_ETC2_RGB8
,
1403 "MESA_FORMAT_ETC2_RGB8",
1405 GL_UNSIGNED_NORMALIZED
,
1408 4, 4, 8 /* 8 bytes per 4x4 block */
1412 MESA_FORMAT_ETC2_SRGB8
,
1413 "MESA_FORMAT_ETC2_SRGB8",
1415 GL_UNSIGNED_NORMALIZED
,
1418 4, 4, 8 /* 8 bytes per 4x4 block */
1422 MESA_FORMAT_ETC2_RGBA8_EAC
,
1423 "MESA_FORMAT_ETC2_RGBA8_EAC",
1425 GL_UNSIGNED_NORMALIZED
,
1428 4, 4, 16 /* 16 bytes per 4x4 block */
1432 MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC
,
1433 "MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC",
1435 GL_UNSIGNED_NORMALIZED
,
1438 4, 4, 16 /* 16 bytes per 4x4 block */
1442 MESA_FORMAT_ETC2_R11_EAC
,
1443 "MESA_FORMAT_ETC2_R11_EAC",
1445 GL_UNSIGNED_NORMALIZED
,
1448 4, 4, 8 /* 8 bytes per 4x4 block */
1452 MESA_FORMAT_ETC2_RG11_EAC
,
1453 "MESA_FORMAT_ETC2_RG11_EAC",
1455 GL_UNSIGNED_NORMALIZED
,
1458 4, 4, 16 /* 16 bytes per 4x4 block */
1462 MESA_FORMAT_ETC2_SIGNED_R11_EAC
,
1463 "MESA_FORMAT_ETC2_SIGNED_R11_EAC",
1465 GL_SIGNED_NORMALIZED
,
1468 4, 4, 8 /* 8 bytes per 4x4 block */
1472 MESA_FORMAT_ETC2_SIGNED_RG11_EAC
,
1473 "MESA_FORMAT_ETC2_SIGNED_RG11_EAC",
1475 GL_SIGNED_NORMALIZED
,
1478 4, 4, 16 /* 16 bytes per 4x4 block */
1482 MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
,
1483 "MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1",
1485 GL_UNSIGNED_NORMALIZED
,
1488 4, 4, 8 /* 8 bytes per 4x4 block */
1492 MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1
,
1493 "MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1",
1495 GL_UNSIGNED_NORMALIZED
,
1498 4, 4, 8 /* 8 bytes per 4x4 block */
1501 /* Signed formats from EXT_texture_snorm that are not in GL3.1 */
1503 MESA_FORMAT_SIGNED_A8
,
1504 "MESA_FORMAT_SIGNED_A8",
1506 GL_SIGNED_NORMALIZED
,
1512 MESA_FORMAT_SIGNED_L8
,
1513 "MESA_FORMAT_SIGNED_L8",
1515 GL_SIGNED_NORMALIZED
,
1521 MESA_FORMAT_SIGNED_AL88
,
1522 "MESA_FORMAT_SIGNED_AL88",
1524 GL_SIGNED_NORMALIZED
,
1530 MESA_FORMAT_SIGNED_I8
,
1531 "MESA_FORMAT_SIGNED_I8",
1533 GL_SIGNED_NORMALIZED
,
1539 MESA_FORMAT_SIGNED_A16
,
1540 "MESA_FORMAT_SIGNED_A16",
1542 GL_SIGNED_NORMALIZED
,
1548 MESA_FORMAT_SIGNED_L16
,
1549 "MESA_FORMAT_SIGNED_L16",
1551 GL_SIGNED_NORMALIZED
,
1557 MESA_FORMAT_SIGNED_AL1616
,
1558 "MESA_FORMAT_SIGNED_AL1616",
1560 GL_SIGNED_NORMALIZED
,
1566 MESA_FORMAT_SIGNED_I16
,
1567 "MESA_FORMAT_SIGNED_I16",
1569 GL_SIGNED_NORMALIZED
,
1575 MESA_FORMAT_RGB9_E5_FLOAT
,
1576 "MESA_FORMAT_RGB9_E5",
1584 MESA_FORMAT_R11_G11_B10_FLOAT
,
1585 "MESA_FORMAT_R11_G11_B10_FLOAT",
1592 /* ARB_depth_buffer_float */
1594 MESA_FORMAT_Z32_FLOAT
, /* Name */
1595 "MESA_FORMAT_Z32_FLOAT", /* StrName */
1596 GL_DEPTH_COMPONENT
, /* BaseFormat */
1597 GL_FLOAT
, /* DataType */
1598 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
1599 0, 0, 0, 32, 0, /* Lum/Int/Index/Depth/StencilBits */
1600 1, 1, 4 /* BlockWidth/Height,Bytes */
1603 MESA_FORMAT_Z32_FLOAT_X24S8
, /* Name */
1604 "MESA_FORMAT_Z32_FLOAT_X24S8", /* StrName */
1605 GL_DEPTH_STENCIL
, /* BaseFormat */
1606 /* DataType here is used to answer GL_TEXTURE_DEPTH_TYPE queries, and is
1607 * never used for stencil because stencil is always GL_UNSIGNED_INT.
1609 GL_FLOAT
, /* DataType */
1610 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */
1611 0, 0, 0, 32, 8, /* Lum/Int/Index/Depth/StencilBits */
1612 1, 1, 8 /* BlockWidth/Height,Bytes */
1615 MESA_FORMAT_ARGB2101010_UINT
,
1616 "MESA_FORMAT_ARGB2101010_UINT",
1624 MESA_FORMAT_ABGR2101010_UINT
,
1625 "MESA_FORMAT_ABGR2101010_UINT",
1633 MESA_FORMAT_XRGB4444_UNORM
,
1634 "MESA_FORMAT_XRGB4444_UNORM",
1636 GL_UNSIGNED_NORMALIZED
,
1642 MESA_FORMAT_XRGB1555_UNORM
,
1643 "MESA_FORMAT_XRGB1555_UNORM",
1645 GL_UNSIGNED_NORMALIZED
,
1651 MESA_FORMAT_XBGR8888_SNORM
,
1652 "MESA_FORMAT_XBGR8888_SNORM",
1654 GL_SIGNED_NORMALIZED
,
1660 MESA_FORMAT_XBGR8888_SRGB
,
1661 "MESA_FORMAT_XBGR8888_SRGB",
1663 GL_UNSIGNED_NORMALIZED
,
1669 MESA_FORMAT_XBGR8888_UINT
,
1670 "MESA_FORMAT_XBGR8888_UINT",
1678 MESA_FORMAT_XBGR8888_SINT
,
1679 "MESA_FORMAT_XBGR8888_SINT",
1687 MESA_FORMAT_XRGB2101010_UNORM
,
1688 "MESA_FORMAT_XRGB2101010_UNORM",
1690 GL_UNSIGNED_NORMALIZED
,
1696 MESA_FORMAT_XBGR16161616_UNORM
,
1697 "MESA_FORMAT_XBGR16161616_UNORM",
1699 GL_UNSIGNED_NORMALIZED
,
1705 MESA_FORMAT_XBGR16161616_SNORM
,
1706 "MESA_FORMAT_XBGR16161616_SNORM",
1708 GL_SIGNED_NORMALIZED
,
1714 MESA_FORMAT_XBGR16161616_FLOAT
,
1715 "MESA_FORMAT_XBGR16161616_FLOAT",
1723 MESA_FORMAT_XBGR16161616_UINT
,
1724 "MESA_FORMAT_XBGR16161616_UINT",
1732 MESA_FORMAT_XBGR16161616_SINT
,
1733 "MESA_FORMAT_XBGR16161616_SINT",
1741 MESA_FORMAT_XBGR32323232_FLOAT
,
1742 "MESA_FORMAT_XBGR32323232_FLOAT",
1750 MESA_FORMAT_XBGR32323232_UINT
,
1751 "MESA_FORMAT_XBGR32323232_UINT",
1759 MESA_FORMAT_XBGR32323232_SINT
,
1760 "MESA_FORMAT_XBGR32323232_SINT",
1771 static const struct gl_format_info
*
1772 _mesa_get_format_info(gl_format format
)
1774 const struct gl_format_info
*info
= &format_info
[format
];
1775 assert(info
->Name
== format
);
1780 /** Return string name of format (for debugging) */
1782 _mesa_get_format_name(gl_format format
)
1784 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1785 return info
->StrName
;
1791 * Return bytes needed to store a block of pixels in the given format.
1792 * Normally, a block is 1x1 (a single pixel). But for compressed formats
1793 * a block may be 4x4 or 8x4, etc.
1795 * Note: not GLuint, so as not to coerce math to unsigned. cf. fdo #37351
1798 _mesa_get_format_bytes(gl_format format
)
1800 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1801 ASSERT(info
->BytesPerBlock
);
1802 ASSERT(info
->BytesPerBlock
<= MAX_PIXEL_BYTES
||
1803 _mesa_is_format_compressed(format
));
1804 return info
->BytesPerBlock
;
1809 * Return bits per component for the given format.
1810 * \param format one of MESA_FORMAT_x
1811 * \param pname the component, such as GL_RED_BITS, GL_TEXTURE_BLUE_BITS, etc.
1814 _mesa_get_format_bits(gl_format format
, GLenum pname
)
1816 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1820 case GL_TEXTURE_RED_SIZE
:
1821 case GL_RENDERBUFFER_RED_SIZE_EXT
:
1822 case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE
:
1823 return info
->RedBits
;
1825 case GL_TEXTURE_GREEN_SIZE
:
1826 case GL_RENDERBUFFER_GREEN_SIZE_EXT
:
1827 case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
:
1828 return info
->GreenBits
;
1830 case GL_TEXTURE_BLUE_SIZE
:
1831 case GL_RENDERBUFFER_BLUE_SIZE_EXT
:
1832 case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
:
1833 return info
->BlueBits
;
1835 case GL_TEXTURE_ALPHA_SIZE
:
1836 case GL_RENDERBUFFER_ALPHA_SIZE_EXT
:
1837 case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
:
1838 return info
->AlphaBits
;
1839 case GL_TEXTURE_INTENSITY_SIZE
:
1840 return info
->IntensityBits
;
1841 case GL_TEXTURE_LUMINANCE_SIZE
:
1842 return info
->LuminanceBits
;
1844 return info
->IndexBits
;
1846 case GL_TEXTURE_DEPTH_SIZE_ARB
:
1847 case GL_RENDERBUFFER_DEPTH_SIZE_EXT
:
1848 case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
:
1849 return info
->DepthBits
;
1850 case GL_STENCIL_BITS
:
1851 case GL_TEXTURE_STENCIL_SIZE_EXT
:
1852 case GL_RENDERBUFFER_STENCIL_SIZE_EXT
:
1853 case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
:
1854 return info
->StencilBits
;
1856 _mesa_problem(NULL
, "bad pname in _mesa_get_format_bits()");
1863 _mesa_get_format_max_bits(gl_format format
)
1865 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1866 GLuint max
= MAX2(info
->RedBits
, info
->GreenBits
);
1867 max
= MAX2(max
, info
->BlueBits
);
1868 max
= MAX2(max
, info
->AlphaBits
);
1869 max
= MAX2(max
, info
->LuminanceBits
);
1870 max
= MAX2(max
, info
->IntensityBits
);
1871 max
= MAX2(max
, info
->DepthBits
);
1872 max
= MAX2(max
, info
->StencilBits
);
1878 * Return the data type (or more specifically, the data representation)
1879 * for the given format.
1880 * The return value will be one of:
1881 * GL_UNSIGNED_NORMALIZED = unsigned int representing [0,1]
1882 * GL_SIGNED_NORMALIZED = signed int representing [-1, 1]
1883 * GL_UNSIGNED_INT = an ordinary unsigned integer
1884 * GL_INT = an ordinary signed integer
1885 * GL_FLOAT = an ordinary float
1888 _mesa_get_format_datatype(gl_format format
)
1890 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1891 return info
->DataType
;
1896 * Return the basic format for the given type. The result will be one of
1897 * GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_INTENSITY,
1898 * GL_YCBCR_MESA, GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_DEPTH_STENCIL.
1901 _mesa_get_format_base_format(gl_format format
)
1903 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1904 return info
->BaseFormat
;
1909 * Return the block size (in pixels) for the given format. Normally
1910 * the block size is 1x1. But compressed formats will have block sizes
1911 * of 4x4 or 8x4 pixels, etc.
1912 * \param bw returns block width in pixels
1913 * \param bh returns block height in pixels
1916 _mesa_get_format_block_size(gl_format format
, GLuint
*bw
, GLuint
*bh
)
1918 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1919 *bw
= info
->BlockWidth
;
1920 *bh
= info
->BlockHeight
;
1924 /** Is the given format a compressed format? */
1926 _mesa_is_format_compressed(gl_format format
)
1928 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1929 return info
->BlockWidth
> 1 || info
->BlockHeight
> 1;
1934 * Determine if the given format represents a packed depth/stencil buffer.
1937 _mesa_is_format_packed_depth_stencil(gl_format format
)
1939 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1941 return info
->BaseFormat
== GL_DEPTH_STENCIL
;
1946 * Is the given format a signed/unsigned integer color format?
1949 _mesa_is_format_integer_color(gl_format format
)
1951 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1952 return (info
->DataType
== GL_INT
|| info
->DataType
== GL_UNSIGNED_INT
) &&
1953 info
->BaseFormat
!= GL_DEPTH_COMPONENT
&&
1954 info
->BaseFormat
!= GL_DEPTH_STENCIL
&&
1955 info
->BaseFormat
!= GL_STENCIL_INDEX
;
1960 * Is the given format an unsigned integer format?
1963 _mesa_is_format_unsigned(gl_format format
)
1965 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
1966 return _mesa_is_type_unsigned(info
->DataType
);
1971 * Return color encoding for given format.
1972 * \return GL_LINEAR or GL_SRGB
1975 _mesa_get_format_color_encoding(gl_format format
)
1977 /* XXX this info should be encoded in gl_format_info */
1979 case MESA_FORMAT_SRGB8
:
1980 case MESA_FORMAT_SRGBA8
:
1981 case MESA_FORMAT_SARGB8
:
1982 case MESA_FORMAT_SL8
:
1983 case MESA_FORMAT_SLA8
:
1984 case MESA_FORMAT_SRGB_DXT1
:
1985 case MESA_FORMAT_SRGBA_DXT1
:
1986 case MESA_FORMAT_SRGBA_DXT3
:
1987 case MESA_FORMAT_SRGBA_DXT5
:
1988 case MESA_FORMAT_XBGR8888_SRGB
:
1997 * For an sRGB format, return the corresponding linear color space format.
1998 * For non-sRGB formats, return the format as-is.
2001 _mesa_get_srgb_format_linear(gl_format format
)
2004 case MESA_FORMAT_SRGB8
:
2005 format
= MESA_FORMAT_RGB888
;
2007 case MESA_FORMAT_SRGBA8
:
2008 format
= MESA_FORMAT_RGBA8888
;
2010 case MESA_FORMAT_SARGB8
:
2011 format
= MESA_FORMAT_ARGB8888
;
2013 case MESA_FORMAT_SL8
:
2014 format
= MESA_FORMAT_L8
;
2016 case MESA_FORMAT_SLA8
:
2017 format
= MESA_FORMAT_AL88
;
2019 case MESA_FORMAT_SRGB_DXT1
:
2020 format
= MESA_FORMAT_RGB_DXT1
;
2022 case MESA_FORMAT_SRGBA_DXT1
:
2023 format
= MESA_FORMAT_RGBA_DXT1
;
2025 case MESA_FORMAT_SRGBA_DXT3
:
2026 format
= MESA_FORMAT_RGBA_DXT3
;
2028 case MESA_FORMAT_SRGBA_DXT5
:
2029 format
= MESA_FORMAT_RGBA_DXT5
;
2031 case MESA_FORMAT_XBGR8888_SRGB
:
2032 format
= MESA_FORMAT_RGBX8888_REV
;
2042 * If the given format is a compressed format, return a corresponding
2043 * uncompressed format.
2046 _mesa_get_uncompressed_format(gl_format format
)
2049 case MESA_FORMAT_RGB_FXT1
:
2050 return MESA_FORMAT_RGB888
;
2051 case MESA_FORMAT_RGBA_FXT1
:
2052 return MESA_FORMAT_RGBA8888
;
2053 case MESA_FORMAT_RGB_DXT1
:
2054 case MESA_FORMAT_SRGB_DXT1
:
2055 return MESA_FORMAT_RGB888
;
2056 case MESA_FORMAT_RGBA_DXT1
:
2057 case MESA_FORMAT_SRGBA_DXT1
:
2058 return MESA_FORMAT_RGBA8888
;
2059 case MESA_FORMAT_RGBA_DXT3
:
2060 case MESA_FORMAT_SRGBA_DXT3
:
2061 return MESA_FORMAT_RGBA8888
;
2062 case MESA_FORMAT_RGBA_DXT5
:
2063 case MESA_FORMAT_SRGBA_DXT5
:
2064 return MESA_FORMAT_RGBA8888
;
2065 case MESA_FORMAT_RED_RGTC1
:
2066 return MESA_FORMAT_R8
;
2067 case MESA_FORMAT_SIGNED_RED_RGTC1
:
2068 return MESA_FORMAT_SIGNED_R8
;
2069 case MESA_FORMAT_RG_RGTC2
:
2070 return MESA_FORMAT_GR88
;
2071 case MESA_FORMAT_SIGNED_RG_RGTC2
:
2072 return MESA_FORMAT_SIGNED_RG88_REV
;
2073 case MESA_FORMAT_L_LATC1
:
2074 return MESA_FORMAT_L8
;
2075 case MESA_FORMAT_SIGNED_L_LATC1
:
2076 return MESA_FORMAT_SIGNED_L8
;
2077 case MESA_FORMAT_LA_LATC2
:
2078 return MESA_FORMAT_AL88
;
2079 case MESA_FORMAT_SIGNED_LA_LATC2
:
2080 return MESA_FORMAT_SIGNED_AL88
;
2081 case MESA_FORMAT_ETC1_RGB8
:
2082 case MESA_FORMAT_ETC2_RGB8
:
2083 case MESA_FORMAT_ETC2_SRGB8
:
2084 return MESA_FORMAT_RGB888
;
2085 case MESA_FORMAT_ETC2_RGBA8_EAC
:
2086 case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC
:
2087 case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
:
2088 case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1
:
2089 return MESA_FORMAT_RGBA8888
;
2090 case MESA_FORMAT_ETC2_R11_EAC
:
2091 case MESA_FORMAT_ETC2_SIGNED_R11_EAC
:
2092 return MESA_FORMAT_R16
;
2093 case MESA_FORMAT_ETC2_RG11_EAC
:
2094 case MESA_FORMAT_ETC2_SIGNED_RG11_EAC
:
2095 return MESA_FORMAT_GR1616
;
2098 assert(!_mesa_is_format_compressed(format
));
2106 _mesa_format_num_components(gl_format format
)
2108 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
2109 return ((info
->RedBits
> 0) +
2110 (info
->GreenBits
> 0) +
2111 (info
->BlueBits
> 0) +
2112 (info
->AlphaBits
> 0) +
2113 (info
->LuminanceBits
> 0) +
2114 (info
->IntensityBits
> 0) +
2115 (info
->DepthBits
> 0) +
2116 (info
->StencilBits
> 0));
2121 * Return number of bytes needed to store an image of the given size
2122 * in the given format.
2125 _mesa_format_image_size(gl_format format
, GLsizei width
,
2126 GLsizei height
, GLsizei depth
)
2128 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
2129 /* Strictly speaking, a conditional isn't needed here */
2130 if (info
->BlockWidth
> 1 || info
->BlockHeight
> 1) {
2131 /* compressed format (2D only for now) */
2132 const GLuint bw
= info
->BlockWidth
, bh
= info
->BlockHeight
;
2133 const GLuint wblocks
= (width
+ bw
- 1) / bw
;
2134 const GLuint hblocks
= (height
+ bh
- 1) / bh
;
2135 const GLuint sz
= wblocks
* hblocks
* info
->BytesPerBlock
;
2139 /* non-compressed */
2140 const GLuint sz
= width
* height
* depth
* info
->BytesPerBlock
;
2147 * Same as _mesa_format_image_size() but returns a 64-bit value to
2148 * accomodate very large textures.
2151 _mesa_format_image_size64(gl_format format
, GLsizei width
,
2152 GLsizei height
, GLsizei depth
)
2154 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
2155 /* Strictly speaking, a conditional isn't needed here */
2156 if (info
->BlockWidth
> 1 || info
->BlockHeight
> 1) {
2157 /* compressed format (2D only for now) */
2158 const uint64_t bw
= info
->BlockWidth
, bh
= info
->BlockHeight
;
2159 const uint64_t wblocks
= (width
+ bw
- 1) / bw
;
2160 const uint64_t hblocks
= (height
+ bh
- 1) / bh
;
2161 const uint64_t sz
= wblocks
* hblocks
* info
->BytesPerBlock
;
2165 /* non-compressed */
2166 const uint64_t sz
= ((uint64_t) width
*
2169 info
->BytesPerBlock
);
2177 _mesa_format_row_stride(gl_format format
, GLsizei width
)
2179 const struct gl_format_info
*info
= _mesa_get_format_info(format
);
2180 /* Strictly speaking, a conditional isn't needed here */
2181 if (info
->BlockWidth
> 1 || info
->BlockHeight
> 1) {
2182 /* compressed format */
2183 const GLuint bw
= info
->BlockWidth
;
2184 const GLuint wblocks
= (width
+ bw
- 1) / bw
;
2185 const GLint stride
= wblocks
* info
->BytesPerBlock
;
2189 const GLint stride
= width
* info
->BytesPerBlock
;
2196 * Debug/test: check that all formats are handled in the
2197 * _mesa_format_to_type_and_comps() function. When new pixel formats
2198 * are added to Mesa, that function needs to be updated.
2199 * This is a no-op after the first call.
2202 check_format_to_type_and_comps(void)
2206 for (f
= MESA_FORMAT_NONE
+ 1; f
< MESA_FORMAT_COUNT
; f
++) {
2207 GLenum datatype
= 0;
2209 /* This function will emit a problem/warning if the format is
2212 _mesa_format_to_type_and_comps(f
, &datatype
, &comps
);
2218 * Do sanity checking of the format info table.
2221 _mesa_test_formats(void)
2225 STATIC_ASSERT(Elements(format_info
) == MESA_FORMAT_COUNT
);
2227 for (i
= 0; i
< MESA_FORMAT_COUNT
; i
++) {
2228 const struct gl_format_info
*info
= _mesa_get_format_info(i
);
2231 assert(info
->Name
== i
);
2233 if (info
->Name
== MESA_FORMAT_NONE
)
2236 if (info
->BlockWidth
== 1 && info
->BlockHeight
== 1) {
2237 if (info
->RedBits
> 0) {
2238 GLuint t
= info
->RedBits
+ info
->GreenBits
2239 + info
->BlueBits
+ info
->AlphaBits
;
2240 assert(t
/ 8 <= info
->BytesPerBlock
);
2245 assert(info
->DataType
== GL_UNSIGNED_NORMALIZED
||
2246 info
->DataType
== GL_SIGNED_NORMALIZED
||
2247 info
->DataType
== GL_UNSIGNED_INT
||
2248 info
->DataType
== GL_INT
||
2249 info
->DataType
== GL_FLOAT
||
2250 /* Z32_FLOAT_X24S8 has DataType of GL_NONE */
2251 info
->DataType
== GL_NONE
);
2253 if (info
->BaseFormat
== GL_RGB
) {
2254 assert(info
->RedBits
> 0);
2255 assert(info
->GreenBits
> 0);
2256 assert(info
->BlueBits
> 0);
2257 assert(info
->AlphaBits
== 0);
2258 assert(info
->LuminanceBits
== 0);
2259 assert(info
->IntensityBits
== 0);
2261 else if (info
->BaseFormat
== GL_RGBA
) {
2262 assert(info
->RedBits
> 0);
2263 assert(info
->GreenBits
> 0);
2264 assert(info
->BlueBits
> 0);
2265 assert(info
->AlphaBits
> 0);
2266 assert(info
->LuminanceBits
== 0);
2267 assert(info
->IntensityBits
== 0);
2269 else if (info
->BaseFormat
== GL_RG
) {
2270 assert(info
->RedBits
> 0);
2271 assert(info
->GreenBits
> 0);
2272 assert(info
->BlueBits
== 0);
2273 assert(info
->AlphaBits
== 0);
2274 assert(info
->LuminanceBits
== 0);
2275 assert(info
->IntensityBits
== 0);
2277 else if (info
->BaseFormat
== GL_RED
) {
2278 assert(info
->RedBits
> 0);
2279 assert(info
->GreenBits
== 0);
2280 assert(info
->BlueBits
== 0);
2281 assert(info
->AlphaBits
== 0);
2282 assert(info
->LuminanceBits
== 0);
2283 assert(info
->IntensityBits
== 0);
2285 else if (info
->BaseFormat
== GL_LUMINANCE
) {
2286 assert(info
->RedBits
== 0);
2287 assert(info
->GreenBits
== 0);
2288 assert(info
->BlueBits
== 0);
2289 assert(info
->AlphaBits
== 0);
2290 assert(info
->LuminanceBits
> 0);
2291 assert(info
->IntensityBits
== 0);
2293 else if (info
->BaseFormat
== GL_INTENSITY
) {
2294 assert(info
->RedBits
== 0);
2295 assert(info
->GreenBits
== 0);
2296 assert(info
->BlueBits
== 0);
2297 assert(info
->AlphaBits
== 0);
2298 assert(info
->LuminanceBits
== 0);
2299 assert(info
->IntensityBits
> 0);
2303 check_format_to_type_and_comps();
2309 * Return datatype and number of components per texel for the given gl_format.
2310 * Only used for mipmap generation code.
2313 _mesa_format_to_type_and_comps(gl_format format
,
2314 GLenum
*datatype
, GLuint
*comps
)
2317 case MESA_FORMAT_RGBA8888
:
2318 case MESA_FORMAT_RGBA8888_REV
:
2319 case MESA_FORMAT_ARGB8888
:
2320 case MESA_FORMAT_ARGB8888_REV
:
2321 case MESA_FORMAT_RGBX8888
:
2322 case MESA_FORMAT_RGBX8888_REV
:
2323 case MESA_FORMAT_XRGB8888
:
2324 case MESA_FORMAT_XRGB8888_REV
:
2325 *datatype
= GL_UNSIGNED_BYTE
;
2328 case MESA_FORMAT_RGB888
:
2329 case MESA_FORMAT_BGR888
:
2330 *datatype
= GL_UNSIGNED_BYTE
;
2333 case MESA_FORMAT_RGB565
:
2334 case MESA_FORMAT_RGB565_REV
:
2335 *datatype
= GL_UNSIGNED_SHORT_5_6_5
;
2339 case MESA_FORMAT_ARGB4444
:
2340 case MESA_FORMAT_ARGB4444_REV
:
2341 case MESA_FORMAT_XRGB4444_UNORM
:
2342 *datatype
= GL_UNSIGNED_SHORT_4_4_4_4
;
2346 case MESA_FORMAT_ARGB1555
:
2347 case MESA_FORMAT_ARGB1555_REV
:
2348 case MESA_FORMAT_XRGB1555_UNORM
:
2349 *datatype
= GL_UNSIGNED_SHORT_1_5_5_5_REV
;
2353 case MESA_FORMAT_ARGB2101010
:
2354 *datatype
= GL_UNSIGNED_INT_2_10_10_10_REV
;
2358 case MESA_FORMAT_RGBA5551
:
2359 *datatype
= GL_UNSIGNED_SHORT_5_5_5_1
;
2363 case MESA_FORMAT_AL44
:
2364 *datatype
= MESA_UNSIGNED_BYTE_4_4
;
2368 case MESA_FORMAT_AL88
:
2369 case MESA_FORMAT_AL88_REV
:
2370 case MESA_FORMAT_GR88
:
2371 case MESA_FORMAT_RG88
:
2372 *datatype
= GL_UNSIGNED_BYTE
;
2376 case MESA_FORMAT_AL1616
:
2377 case MESA_FORMAT_AL1616_REV
:
2378 case MESA_FORMAT_GR1616
:
2379 case MESA_FORMAT_RG1616
:
2380 *datatype
= GL_UNSIGNED_SHORT
;
2384 case MESA_FORMAT_R16
:
2385 case MESA_FORMAT_A16
:
2386 case MESA_FORMAT_L16
:
2387 case MESA_FORMAT_I16
:
2388 *datatype
= GL_UNSIGNED_SHORT
;
2392 case MESA_FORMAT_RGB332
:
2393 *datatype
= GL_UNSIGNED_BYTE_3_3_2
;
2397 case MESA_FORMAT_A8
:
2398 case MESA_FORMAT_L8
:
2399 case MESA_FORMAT_I8
:
2400 case MESA_FORMAT_R8
:
2401 case MESA_FORMAT_S8
:
2402 *datatype
= GL_UNSIGNED_BYTE
;
2406 case MESA_FORMAT_YCBCR
:
2407 case MESA_FORMAT_YCBCR_REV
:
2408 *datatype
= GL_UNSIGNED_SHORT
;
2412 case MESA_FORMAT_Z24_S8
:
2413 *datatype
= GL_UNSIGNED_INT_24_8_MESA
;
2417 case MESA_FORMAT_S8_Z24
:
2418 *datatype
= GL_UNSIGNED_INT_8_24_REV_MESA
;
2422 case MESA_FORMAT_Z16
:
2423 *datatype
= GL_UNSIGNED_SHORT
;
2427 case MESA_FORMAT_X8_Z24
:
2428 *datatype
= GL_UNSIGNED_INT
;
2432 case MESA_FORMAT_Z24_X8
:
2433 *datatype
= GL_UNSIGNED_INT
;
2437 case MESA_FORMAT_Z32
:
2438 *datatype
= GL_UNSIGNED_INT
;
2442 case MESA_FORMAT_Z32_FLOAT
:
2443 *datatype
= GL_FLOAT
;
2447 case MESA_FORMAT_Z32_FLOAT_X24S8
:
2448 *datatype
= GL_FLOAT_32_UNSIGNED_INT_24_8_REV
;
2452 case MESA_FORMAT_DUDV8
:
2453 *datatype
= GL_BYTE
;
2457 case MESA_FORMAT_SIGNED_R8
:
2458 case MESA_FORMAT_SIGNED_A8
:
2459 case MESA_FORMAT_SIGNED_L8
:
2460 case MESA_FORMAT_SIGNED_I8
:
2461 *datatype
= GL_BYTE
;
2464 case MESA_FORMAT_SIGNED_RG88_REV
:
2465 case MESA_FORMAT_SIGNED_AL88
:
2466 *datatype
= GL_BYTE
;
2469 case MESA_FORMAT_SIGNED_RGBA8888
:
2470 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
2471 case MESA_FORMAT_SIGNED_RGBX8888
:
2472 *datatype
= GL_BYTE
;
2476 case MESA_FORMAT_RGBA_16
:
2477 *datatype
= GL_UNSIGNED_SHORT
;
2481 case MESA_FORMAT_SIGNED_R16
:
2482 case MESA_FORMAT_SIGNED_A16
:
2483 case MESA_FORMAT_SIGNED_L16
:
2484 case MESA_FORMAT_SIGNED_I16
:
2485 *datatype
= GL_SHORT
;
2488 case MESA_FORMAT_SIGNED_GR1616
:
2489 case MESA_FORMAT_SIGNED_AL1616
:
2490 *datatype
= GL_SHORT
;
2493 case MESA_FORMAT_SIGNED_RGB_16
:
2494 *datatype
= GL_SHORT
;
2497 case MESA_FORMAT_SIGNED_RGBA_16
:
2498 *datatype
= GL_SHORT
;
2502 case MESA_FORMAT_SRGB8
:
2503 *datatype
= GL_UNSIGNED_BYTE
;
2506 case MESA_FORMAT_SRGBA8
:
2507 case MESA_FORMAT_SARGB8
:
2508 *datatype
= GL_UNSIGNED_BYTE
;
2511 case MESA_FORMAT_SL8
:
2512 *datatype
= GL_UNSIGNED_BYTE
;
2515 case MESA_FORMAT_SLA8
:
2516 *datatype
= GL_UNSIGNED_BYTE
;
2520 case MESA_FORMAT_RGB_FXT1
:
2521 case MESA_FORMAT_RGBA_FXT1
:
2522 case MESA_FORMAT_RGB_DXT1
:
2523 case MESA_FORMAT_RGBA_DXT1
:
2524 case MESA_FORMAT_RGBA_DXT3
:
2525 case MESA_FORMAT_RGBA_DXT5
:
2526 case MESA_FORMAT_SRGB_DXT1
:
2527 case MESA_FORMAT_SRGBA_DXT1
:
2528 case MESA_FORMAT_SRGBA_DXT3
:
2529 case MESA_FORMAT_SRGBA_DXT5
:
2530 case MESA_FORMAT_RED_RGTC1
:
2531 case MESA_FORMAT_SIGNED_RED_RGTC1
:
2532 case MESA_FORMAT_RG_RGTC2
:
2533 case MESA_FORMAT_SIGNED_RG_RGTC2
:
2534 case MESA_FORMAT_L_LATC1
:
2535 case MESA_FORMAT_SIGNED_L_LATC1
:
2536 case MESA_FORMAT_LA_LATC2
:
2537 case MESA_FORMAT_SIGNED_LA_LATC2
:
2538 case MESA_FORMAT_ETC1_RGB8
:
2539 case MESA_FORMAT_ETC2_RGB8
:
2540 case MESA_FORMAT_ETC2_SRGB8
:
2541 case MESA_FORMAT_ETC2_RGBA8_EAC
:
2542 case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC
:
2543 case MESA_FORMAT_ETC2_R11_EAC
:
2544 case MESA_FORMAT_ETC2_RG11_EAC
:
2545 case MESA_FORMAT_ETC2_SIGNED_R11_EAC
:
2546 case MESA_FORMAT_ETC2_SIGNED_RG11_EAC
:
2547 case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
:
2548 case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1
:
2549 /* XXX generate error instead? */
2550 *datatype
= GL_UNSIGNED_BYTE
;
2554 case MESA_FORMAT_RGBA_FLOAT32
:
2555 *datatype
= GL_FLOAT
;
2558 case MESA_FORMAT_RGBA_FLOAT16
:
2559 *datatype
= GL_HALF_FLOAT_ARB
;
2562 case MESA_FORMAT_RGB_FLOAT32
:
2563 *datatype
= GL_FLOAT
;
2566 case MESA_FORMAT_RGB_FLOAT16
:
2567 *datatype
= GL_HALF_FLOAT_ARB
;
2570 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
2571 case MESA_FORMAT_RG_FLOAT32
:
2572 *datatype
= GL_FLOAT
;
2575 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
2576 case MESA_FORMAT_RG_FLOAT16
:
2577 *datatype
= GL_HALF_FLOAT_ARB
;
2580 case MESA_FORMAT_ALPHA_FLOAT32
:
2581 case MESA_FORMAT_LUMINANCE_FLOAT32
:
2582 case MESA_FORMAT_INTENSITY_FLOAT32
:
2583 case MESA_FORMAT_R_FLOAT32
:
2584 *datatype
= GL_FLOAT
;
2587 case MESA_FORMAT_ALPHA_FLOAT16
:
2588 case MESA_FORMAT_LUMINANCE_FLOAT16
:
2589 case MESA_FORMAT_INTENSITY_FLOAT16
:
2590 case MESA_FORMAT_R_FLOAT16
:
2591 *datatype
= GL_HALF_FLOAT_ARB
;
2595 case MESA_FORMAT_ALPHA_UINT8
:
2596 case MESA_FORMAT_LUMINANCE_UINT8
:
2597 case MESA_FORMAT_INTENSITY_UINT8
:
2598 *datatype
= GL_UNSIGNED_BYTE
;
2601 case MESA_FORMAT_LUMINANCE_ALPHA_UINT8
:
2602 *datatype
= GL_UNSIGNED_BYTE
;
2606 case MESA_FORMAT_ALPHA_UINT16
:
2607 case MESA_FORMAT_LUMINANCE_UINT16
:
2608 case MESA_FORMAT_INTENSITY_UINT16
:
2609 *datatype
= GL_UNSIGNED_SHORT
;
2612 case MESA_FORMAT_LUMINANCE_ALPHA_UINT16
:
2613 *datatype
= GL_UNSIGNED_SHORT
;
2616 case MESA_FORMAT_ALPHA_UINT32
:
2617 case MESA_FORMAT_LUMINANCE_UINT32
:
2618 case MESA_FORMAT_INTENSITY_UINT32
:
2619 *datatype
= GL_UNSIGNED_INT
;
2622 case MESA_FORMAT_LUMINANCE_ALPHA_UINT32
:
2623 *datatype
= GL_UNSIGNED_INT
;
2626 case MESA_FORMAT_ALPHA_INT8
:
2627 case MESA_FORMAT_LUMINANCE_INT8
:
2628 case MESA_FORMAT_INTENSITY_INT8
:
2629 *datatype
= GL_BYTE
;
2632 case MESA_FORMAT_LUMINANCE_ALPHA_INT8
:
2633 *datatype
= GL_BYTE
;
2637 case MESA_FORMAT_ALPHA_INT16
:
2638 case MESA_FORMAT_LUMINANCE_INT16
:
2639 case MESA_FORMAT_INTENSITY_INT16
:
2640 *datatype
= GL_SHORT
;
2643 case MESA_FORMAT_LUMINANCE_ALPHA_INT16
:
2644 *datatype
= GL_SHORT
;
2648 case MESA_FORMAT_ALPHA_INT32
:
2649 case MESA_FORMAT_LUMINANCE_INT32
:
2650 case MESA_FORMAT_INTENSITY_INT32
:
2654 case MESA_FORMAT_LUMINANCE_ALPHA_INT32
:
2659 case MESA_FORMAT_R_INT8
:
2660 *datatype
= GL_BYTE
;
2663 case MESA_FORMAT_RG_INT8
:
2664 *datatype
= GL_BYTE
;
2667 case MESA_FORMAT_RGB_INT8
:
2668 *datatype
= GL_BYTE
;
2671 case MESA_FORMAT_RGBA_INT8
:
2672 *datatype
= GL_BYTE
;
2675 case MESA_FORMAT_R_INT16
:
2676 *datatype
= GL_SHORT
;
2679 case MESA_FORMAT_RG_INT16
:
2680 *datatype
= GL_SHORT
;
2683 case MESA_FORMAT_RGB_INT16
:
2684 *datatype
= GL_SHORT
;
2687 case MESA_FORMAT_RGBA_INT16
:
2688 *datatype
= GL_SHORT
;
2691 case MESA_FORMAT_R_INT32
:
2695 case MESA_FORMAT_RG_INT32
:
2699 case MESA_FORMAT_RGB_INT32
:
2703 case MESA_FORMAT_RGBA_INT32
:
2709 * \name Non-normalized unsigned integer formats.
2711 case MESA_FORMAT_R_UINT8
:
2712 *datatype
= GL_UNSIGNED_BYTE
;
2715 case MESA_FORMAT_RG_UINT8
:
2716 *datatype
= GL_UNSIGNED_BYTE
;
2719 case MESA_FORMAT_RGB_UINT8
:
2720 *datatype
= GL_UNSIGNED_BYTE
;
2723 case MESA_FORMAT_RGBA_UINT8
:
2724 *datatype
= GL_UNSIGNED_BYTE
;
2727 case MESA_FORMAT_R_UINT16
:
2728 *datatype
= GL_UNSIGNED_SHORT
;
2731 case MESA_FORMAT_RG_UINT16
:
2732 *datatype
= GL_UNSIGNED_SHORT
;
2735 case MESA_FORMAT_RGB_UINT16
:
2736 *datatype
= GL_UNSIGNED_SHORT
;
2739 case MESA_FORMAT_RGBA_UINT16
:
2740 *datatype
= GL_UNSIGNED_SHORT
;
2743 case MESA_FORMAT_R_UINT32
:
2744 *datatype
= GL_UNSIGNED_INT
;
2747 case MESA_FORMAT_RG_UINT32
:
2748 *datatype
= GL_UNSIGNED_INT
;
2751 case MESA_FORMAT_RGB_UINT32
:
2752 *datatype
= GL_UNSIGNED_INT
;
2755 case MESA_FORMAT_RGBA_UINT32
:
2756 *datatype
= GL_UNSIGNED_INT
;
2760 case MESA_FORMAT_RGB9_E5_FLOAT
:
2761 *datatype
= GL_UNSIGNED_INT_5_9_9_9_REV
;
2765 case MESA_FORMAT_R11_G11_B10_FLOAT
:
2766 *datatype
= GL_UNSIGNED_INT_10F_11F_11F_REV
;
2770 case MESA_FORMAT_ARGB2101010_UINT
:
2771 case MESA_FORMAT_ABGR2101010_UINT
:
2772 *datatype
= GL_UNSIGNED_INT_2_10_10_10_REV
;
2776 case MESA_FORMAT_XBGR8888_SRGB
:
2777 case MESA_FORMAT_XBGR8888_UINT
:
2778 *datatype
= GL_UNSIGNED_BYTE
;
2782 case MESA_FORMAT_XBGR8888_SNORM
:
2783 case MESA_FORMAT_XBGR8888_SINT
:
2784 *datatype
= GL_BYTE
;
2788 case MESA_FORMAT_XRGB2101010_UNORM
:
2789 *datatype
= GL_UNSIGNED_INT_2_10_10_10_REV
;
2793 case MESA_FORMAT_XBGR16161616_UNORM
:
2794 case MESA_FORMAT_XBGR16161616_UINT
:
2795 *datatype
= GL_UNSIGNED_SHORT
;
2799 case MESA_FORMAT_XBGR16161616_SNORM
:
2800 case MESA_FORMAT_XBGR16161616_SINT
:
2801 *datatype
= GL_SHORT
;
2805 case MESA_FORMAT_XBGR16161616_FLOAT
:
2806 *datatype
= GL_HALF_FLOAT
;
2810 case MESA_FORMAT_XBGR32323232_FLOAT
:
2811 *datatype
= GL_FLOAT
;
2815 case MESA_FORMAT_XBGR32323232_UINT
:
2816 *datatype
= GL_UNSIGNED_INT
;
2820 case MESA_FORMAT_XBGR32323232_SINT
:
2825 case MESA_FORMAT_COUNT
:
2829 case MESA_FORMAT_NONE
:
2830 /* For debug builds, warn if any formats are not handled */
2834 _mesa_problem(NULL
, "bad format %s in _mesa_format_to_type_and_comps",
2835 _mesa_get_format_name(format
));
2842 * Check if a gl_format exactly matches a GL format/type combination
2843 * such that we can use memcpy() from one to the other.
2844 * \param gl_format a MESA_FORMAT_x value
2845 * \param format the user-specified image format
2846 * \param type the user-specified image datatype
2847 * \param swapBytes typically the current pixel pack/unpack byteswap state
2848 * \return GL_TRUE if the formats match, GL_FALSE otherwise.
2851 _mesa_format_matches_format_and_type(gl_format gl_format
,
2852 GLenum format
, GLenum type
,
2853 GLboolean swapBytes
)
2855 const GLboolean littleEndian
= _mesa_little_endian();
2857 /* Note: When reading a GL format/type combination, the format lists channel
2858 * assignments from most significant channel in the type to least
2859 * significant. A type with _REV indicates that the assignments are
2860 * swapped, so they are listed from least significant to most significant.
2862 * For sanity, please keep this switch statement ordered the same as the
2863 * enums in formats.h.
2866 switch (gl_format
) {
2868 case MESA_FORMAT_NONE
:
2869 case MESA_FORMAT_COUNT
:
2872 case MESA_FORMAT_RGBA8888
:
2873 case MESA_FORMAT_SRGBA8
:
2874 if (format
== GL_RGBA
&& type
== GL_UNSIGNED_INT_8_8_8_8
&& !swapBytes
)
2877 if (format
== GL_RGBA
&& type
== GL_UNSIGNED_INT_8_8_8_8_REV
&& swapBytes
)
2880 if (format
== GL_RGBA
&& type
== GL_UNSIGNED_BYTE
&& !littleEndian
)
2883 if (format
== GL_ABGR_EXT
&& type
== GL_UNSIGNED_INT_8_8_8_8_REV
2887 if (format
== GL_ABGR_EXT
&& type
== GL_UNSIGNED_INT_8_8_8_8
2891 if (format
== GL_ABGR_EXT
&& type
== GL_UNSIGNED_BYTE
&& littleEndian
)
2896 case MESA_FORMAT_RGBA8888_REV
:
2897 if (format
== GL_RGBA
&& type
== GL_UNSIGNED_INT_8_8_8_8_REV
&&
2901 if (format
== GL_RGBA
&& type
== GL_UNSIGNED_INT_8_8_8_8
&& swapBytes
)
2904 if (format
== GL_RGBA
&& type
== GL_UNSIGNED_BYTE
&& littleEndian
)
2907 if (format
== GL_ABGR_EXT
&& type
== GL_UNSIGNED_INT_8_8_8_8
&&
2911 if (format
== GL_ABGR_EXT
&& type
== GL_UNSIGNED_INT_8_8_8_8_REV
&&
2915 if (format
== GL_ABGR_EXT
&& type
== GL_UNSIGNED_BYTE
&& !littleEndian
)
2920 case MESA_FORMAT_ARGB8888
:
2921 case MESA_FORMAT_SARGB8
:
2922 if (format
== GL_BGRA
&& type
== GL_UNSIGNED_INT_8_8_8_8_REV
&&
2926 if (format
== GL_BGRA
&& type
== GL_UNSIGNED_INT_8_8_8_8
&& swapBytes
)
2929 if (format
== GL_BGRA
&& type
== GL_UNSIGNED_BYTE
&& littleEndian
)
2934 case MESA_FORMAT_ARGB8888_REV
:
2935 if (format
== GL_BGRA
&& type
== GL_UNSIGNED_INT_8_8_8_8
&& !swapBytes
)
2938 if (format
== GL_BGRA
&& type
== GL_UNSIGNED_INT_8_8_8_8_REV
&&
2942 if (format
== GL_BGRA
&& type
== GL_UNSIGNED_BYTE
&& !littleEndian
)
2947 case MESA_FORMAT_RGBX8888
:
2948 case MESA_FORMAT_RGBX8888_REV
:
2951 case MESA_FORMAT_XRGB8888
:
2952 case MESA_FORMAT_XRGB8888_REV
:
2955 case MESA_FORMAT_RGB888
:
2956 case MESA_FORMAT_SRGB8
:
2957 return format
== GL_BGR
&& type
== GL_UNSIGNED_BYTE
&& littleEndian
;
2959 case MESA_FORMAT_BGR888
:
2960 return format
== GL_RGB
&& type
== GL_UNSIGNED_BYTE
&& littleEndian
;
2962 case MESA_FORMAT_RGB565
:
2963 return format
== GL_RGB
&& type
== GL_UNSIGNED_SHORT_5_6_5
&& !swapBytes
;
2965 case MESA_FORMAT_RGB565_REV
:
2966 /* Some of the 16-bit MESA_FORMATs that would seem to correspond to
2967 * GL_UNSIGNED_SHORT_* are byte-swapped instead of channel-reversed,
2968 * according to formats.h, so they can't be matched.
2972 case MESA_FORMAT_ARGB4444
:
2973 return format
== GL_BGRA
&& type
== GL_UNSIGNED_SHORT_4_4_4_4_REV
&&
2976 case MESA_FORMAT_ARGB4444_REV
:
2979 case MESA_FORMAT_RGBA5551
:
2980 return format
== GL_RGBA
&& type
== GL_UNSIGNED_SHORT_5_5_5_1
&&
2983 case MESA_FORMAT_ARGB1555
:
2984 return format
== GL_BGRA
&& type
== GL_UNSIGNED_SHORT_1_5_5_5_REV
&&
2987 case MESA_FORMAT_ARGB1555_REV
:
2990 case MESA_FORMAT_AL44
:
2992 case MESA_FORMAT_AL88
:
2993 case MESA_FORMAT_SLA8
:
2994 return format
== GL_LUMINANCE_ALPHA
&& type
== GL_UNSIGNED_BYTE
&& littleEndian
;
2995 case MESA_FORMAT_AL88_REV
:
2998 case MESA_FORMAT_AL1616
:
2999 return format
== GL_LUMINANCE_ALPHA
&& type
== GL_UNSIGNED_SHORT
&& littleEndian
&& !swapBytes
;
3000 case MESA_FORMAT_AL1616_REV
:
3003 case MESA_FORMAT_RGB332
:
3004 return format
== GL_RGB
&& type
== GL_UNSIGNED_BYTE_3_3_2
;
3006 case MESA_FORMAT_A8
:
3007 return format
== GL_ALPHA
&& type
== GL_UNSIGNED_BYTE
;
3008 case MESA_FORMAT_A16
:
3009 return format
== GL_ALPHA
&& type
== GL_UNSIGNED_SHORT
&& !swapBytes
;
3010 case MESA_FORMAT_L8
:
3011 case MESA_FORMAT_SL8
:
3012 return format
== GL_LUMINANCE
&& type
== GL_UNSIGNED_BYTE
;
3013 case MESA_FORMAT_L16
:
3014 return format
== GL_LUMINANCE
&& type
== GL_UNSIGNED_SHORT
&& !swapBytes
;
3015 case MESA_FORMAT_I8
:
3016 return format
== GL_INTENSITY
&& type
== GL_UNSIGNED_BYTE
;
3017 case MESA_FORMAT_I16
:
3018 return format
== GL_INTENSITY
&& type
== GL_UNSIGNED_SHORT
&& !swapBytes
;
3020 case MESA_FORMAT_YCBCR
:
3021 return format
== GL_YCBCR_MESA
&&
3022 ((type
== GL_UNSIGNED_SHORT_8_8_MESA
&& littleEndian
!= swapBytes
) ||
3023 (type
== GL_UNSIGNED_SHORT_8_8_REV_MESA
&& littleEndian
== swapBytes
));
3024 case MESA_FORMAT_YCBCR_REV
:
3025 return format
== GL_YCBCR_MESA
&&
3026 ((type
== GL_UNSIGNED_SHORT_8_8_MESA
&& littleEndian
== swapBytes
) ||
3027 (type
== GL_UNSIGNED_SHORT_8_8_REV_MESA
&& littleEndian
!= swapBytes
));
3029 case MESA_FORMAT_R8
:
3030 return format
== GL_RED
&& type
== GL_UNSIGNED_BYTE
;
3031 case MESA_FORMAT_GR88
:
3032 return format
== GL_RG
&& type
== GL_UNSIGNED_BYTE
&& littleEndian
;
3033 case MESA_FORMAT_RG88
:
3036 case MESA_FORMAT_R16
:
3037 return format
== GL_RED
&& type
== GL_UNSIGNED_SHORT
&&
3039 case MESA_FORMAT_GR1616
:
3040 return format
== GL_RG
&& type
== GL_UNSIGNED_SHORT
&& littleEndian
&&
3042 case MESA_FORMAT_RG1616
:
3045 case MESA_FORMAT_ARGB2101010
:
3046 return format
== GL_BGRA
&& type
== GL_UNSIGNED_INT_2_10_10_10_REV
&&
3049 case MESA_FORMAT_Z24_S8
:
3050 return format
== GL_DEPTH_STENCIL
&& type
== GL_UNSIGNED_INT_24_8
&&
3052 case MESA_FORMAT_Z24_X8
:
3053 case MESA_FORMAT_S8_Z24
:
3056 case MESA_FORMAT_Z16
:
3057 return format
== GL_DEPTH_COMPONENT
&& type
== GL_UNSIGNED_SHORT
&&
3060 case MESA_FORMAT_X8_Z24
:
3063 case MESA_FORMAT_Z32
:
3064 return format
== GL_DEPTH_COMPONENT
&& type
== GL_UNSIGNED_INT
&&
3067 case MESA_FORMAT_S8
:
3068 return format
== GL_STENCIL_INDEX
&& type
== GL_UNSIGNED_BYTE
;
3070 case MESA_FORMAT_SRGB_DXT1
:
3071 case MESA_FORMAT_SRGBA_DXT1
:
3072 case MESA_FORMAT_SRGBA_DXT3
:
3073 case MESA_FORMAT_SRGBA_DXT5
:
3076 case MESA_FORMAT_RGB_FXT1
:
3077 case MESA_FORMAT_RGBA_FXT1
:
3078 case MESA_FORMAT_RGB_DXT1
:
3079 case MESA_FORMAT_RGBA_DXT1
:
3080 case MESA_FORMAT_RGBA_DXT3
:
3081 case MESA_FORMAT_RGBA_DXT5
:
3084 case MESA_FORMAT_RGBA_FLOAT32
:
3085 return format
== GL_RGBA
&& type
== GL_FLOAT
&& !swapBytes
;
3086 case MESA_FORMAT_RGBA_FLOAT16
:
3087 return format
== GL_RGBA
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3089 case MESA_FORMAT_RGB_FLOAT32
:
3090 return format
== GL_RGB
&& type
== GL_FLOAT
&& !swapBytes
;
3091 case MESA_FORMAT_RGB_FLOAT16
:
3092 return format
== GL_RGB
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3094 case MESA_FORMAT_ALPHA_FLOAT32
:
3095 return format
== GL_ALPHA
&& type
== GL_FLOAT
&& !swapBytes
;
3096 case MESA_FORMAT_ALPHA_FLOAT16
:
3097 return format
== GL_ALPHA
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3099 case MESA_FORMAT_LUMINANCE_FLOAT32
:
3100 return format
== GL_LUMINANCE
&& type
== GL_FLOAT
&& !swapBytes
;
3101 case MESA_FORMAT_LUMINANCE_FLOAT16
:
3102 return format
== GL_LUMINANCE
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3104 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
3105 return format
== GL_LUMINANCE_ALPHA
&& type
== GL_FLOAT
&& !swapBytes
;
3106 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
3107 return format
== GL_LUMINANCE_ALPHA
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3109 case MESA_FORMAT_INTENSITY_FLOAT32
:
3110 return format
== GL_INTENSITY
&& type
== GL_FLOAT
&& !swapBytes
;
3111 case MESA_FORMAT_INTENSITY_FLOAT16
:
3112 return format
== GL_INTENSITY
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3114 case MESA_FORMAT_R_FLOAT32
:
3115 return format
== GL_RED
&& type
== GL_FLOAT
&& !swapBytes
;
3116 case MESA_FORMAT_R_FLOAT16
:
3117 return format
== GL_RED
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3119 case MESA_FORMAT_RG_FLOAT32
:
3120 return format
== GL_RG
&& type
== GL_FLOAT
&& !swapBytes
;
3121 case MESA_FORMAT_RG_FLOAT16
:
3122 return format
== GL_RG
&& type
== GL_HALF_FLOAT
&& !swapBytes
;
3124 case MESA_FORMAT_ALPHA_UINT8
:
3125 return format
== GL_ALPHA_INTEGER
&& type
== GL_UNSIGNED_BYTE
;
3126 case MESA_FORMAT_ALPHA_UINT16
:
3127 return format
== GL_ALPHA_INTEGER
&& type
== GL_UNSIGNED_SHORT
&&
3129 case MESA_FORMAT_ALPHA_UINT32
:
3130 return format
== GL_ALPHA_INTEGER
&& type
== GL_UNSIGNED_INT
&&
3132 case MESA_FORMAT_ALPHA_INT8
:
3133 return format
== GL_ALPHA_INTEGER
&& type
== GL_BYTE
;
3134 case MESA_FORMAT_ALPHA_INT16
:
3135 return format
== GL_ALPHA_INTEGER
&& type
== GL_SHORT
&& !swapBytes
;
3136 case MESA_FORMAT_ALPHA_INT32
:
3137 return format
== GL_ALPHA_INTEGER
&& type
== GL_INT
&& !swapBytes
;
3139 case MESA_FORMAT_INTENSITY_UINT8
:
3140 case MESA_FORMAT_INTENSITY_UINT16
:
3141 case MESA_FORMAT_INTENSITY_UINT32
:
3142 case MESA_FORMAT_INTENSITY_INT8
:
3143 case MESA_FORMAT_INTENSITY_INT16
:
3144 case MESA_FORMAT_INTENSITY_INT32
:
3145 /* GL_INTENSITY_INTEGER_EXT doesn't exist. */
3148 case MESA_FORMAT_LUMINANCE_UINT8
:
3149 return format
== GL_LUMINANCE_INTEGER_EXT
&& type
== GL_UNSIGNED_BYTE
;
3150 case MESA_FORMAT_LUMINANCE_UINT16
:
3151 return format
== GL_LUMINANCE_INTEGER_EXT
&& type
== GL_UNSIGNED_SHORT
&&
3153 case MESA_FORMAT_LUMINANCE_UINT32
:
3154 return format
== GL_LUMINANCE_INTEGER_EXT
&& type
== GL_UNSIGNED_INT
&&
3156 case MESA_FORMAT_LUMINANCE_INT8
:
3157 return format
== GL_LUMINANCE_INTEGER_EXT
&& type
== GL_BYTE
;
3158 case MESA_FORMAT_LUMINANCE_INT16
:
3159 return format
== GL_LUMINANCE_INTEGER_EXT
&& type
== GL_SHORT
&&
3161 case MESA_FORMAT_LUMINANCE_INT32
:
3162 return format
== GL_LUMINANCE_INTEGER_EXT
&& type
== GL_INT
&& !swapBytes
;
3164 case MESA_FORMAT_LUMINANCE_ALPHA_UINT8
:
3165 return format
== GL_LUMINANCE_ALPHA_INTEGER_EXT
&&
3166 type
== GL_UNSIGNED_BYTE
&& !swapBytes
;
3167 case MESA_FORMAT_LUMINANCE_ALPHA_UINT16
:
3168 return format
== GL_LUMINANCE_ALPHA_INTEGER_EXT
&&
3169 type
== GL_UNSIGNED_SHORT
&& !swapBytes
;
3170 case MESA_FORMAT_LUMINANCE_ALPHA_UINT32
:
3171 return format
== GL_LUMINANCE_ALPHA_INTEGER_EXT
&&
3172 type
== GL_UNSIGNED_INT
&& !swapBytes
;
3173 case MESA_FORMAT_LUMINANCE_ALPHA_INT8
:
3174 return format
== GL_LUMINANCE_ALPHA_INTEGER_EXT
&& type
== GL_BYTE
&&
3176 case MESA_FORMAT_LUMINANCE_ALPHA_INT16
:
3177 return format
== GL_LUMINANCE_ALPHA_INTEGER_EXT
&& type
== GL_SHORT
&&
3179 case MESA_FORMAT_LUMINANCE_ALPHA_INT32
:
3180 return format
== GL_LUMINANCE_ALPHA_INTEGER_EXT
&& type
== GL_INT
&&
3183 case MESA_FORMAT_R_INT8
:
3184 return format
== GL_RED_INTEGER
&& type
== GL_BYTE
;
3185 case MESA_FORMAT_RG_INT8
:
3186 return format
== GL_RG_INTEGER
&& type
== GL_BYTE
&& !swapBytes
;
3187 case MESA_FORMAT_RGB_INT8
:
3188 return format
== GL_RGB_INTEGER
&& type
== GL_BYTE
&& !swapBytes
;
3189 case MESA_FORMAT_RGBA_INT8
:
3190 return format
== GL_RGBA_INTEGER
&& type
== GL_BYTE
&& !swapBytes
;
3191 case MESA_FORMAT_R_INT16
:
3192 return format
== GL_RED_INTEGER
&& type
== GL_SHORT
&& !swapBytes
;
3193 case MESA_FORMAT_RG_INT16
:
3194 return format
== GL_RG_INTEGER
&& type
== GL_SHORT
&& !swapBytes
;
3195 case MESA_FORMAT_RGB_INT16
:
3196 return format
== GL_RGB_INTEGER
&& type
== GL_SHORT
&& !swapBytes
;
3197 case MESA_FORMAT_RGBA_INT16
:
3198 return format
== GL_RGBA_INTEGER
&& type
== GL_SHORT
&& !swapBytes
;
3199 case MESA_FORMAT_R_INT32
:
3200 return format
== GL_RED_INTEGER
&& type
== GL_INT
&& !swapBytes
;
3201 case MESA_FORMAT_RG_INT32
:
3202 return format
== GL_RG_INTEGER
&& type
== GL_INT
&& !swapBytes
;
3203 case MESA_FORMAT_RGB_INT32
:
3204 return format
== GL_RGB_INTEGER
&& type
== GL_INT
&& !swapBytes
;
3205 case MESA_FORMAT_RGBA_INT32
:
3206 return format
== GL_RGBA_INTEGER
&& type
== GL_INT
&& !swapBytes
;
3208 case MESA_FORMAT_R_UINT8
:
3209 return format
== GL_RED_INTEGER
&& type
== GL_UNSIGNED_BYTE
;
3210 case MESA_FORMAT_RG_UINT8
:
3211 return format
== GL_RG_INTEGER
&& type
== GL_UNSIGNED_BYTE
&& !swapBytes
;
3212 case MESA_FORMAT_RGB_UINT8
:
3213 return format
== GL_RGB_INTEGER
&& type
== GL_UNSIGNED_BYTE
&& !swapBytes
;
3214 case MESA_FORMAT_RGBA_UINT8
:
3215 return format
== GL_RGBA_INTEGER
&& type
== GL_UNSIGNED_BYTE
&&
3217 case MESA_FORMAT_R_UINT16
:
3218 return format
== GL_RED_INTEGER
&& type
== GL_UNSIGNED_SHORT
&&
3220 case MESA_FORMAT_RG_UINT16
:
3221 return format
== GL_RG_INTEGER
&& type
== GL_UNSIGNED_SHORT
&& !swapBytes
;
3222 case MESA_FORMAT_RGB_UINT16
:
3223 return format
== GL_RGB_INTEGER
&& type
== GL_UNSIGNED_SHORT
&&
3225 case MESA_FORMAT_RGBA_UINT16
:
3226 return format
== GL_RGBA_INTEGER
&& type
== GL_UNSIGNED_SHORT
&&
3228 case MESA_FORMAT_R_UINT32
:
3229 return format
== GL_RED_INTEGER
&& type
== GL_UNSIGNED_INT
&& !swapBytes
;
3230 case MESA_FORMAT_RG_UINT32
:
3231 return format
== GL_RG_INTEGER
&& type
== GL_UNSIGNED_INT
&& !swapBytes
;
3232 case MESA_FORMAT_RGB_UINT32
:
3233 return format
== GL_RGB_INTEGER
&& type
== GL_UNSIGNED_INT
&& !swapBytes
;
3234 case MESA_FORMAT_RGBA_UINT32
:
3235 return format
== GL_RGBA_INTEGER
&& type
== GL_UNSIGNED_INT
&& !swapBytes
;
3237 case MESA_FORMAT_DUDV8
:
3238 return (format
== GL_DU8DV8_ATI
|| format
== GL_DUDV_ATI
) &&
3239 type
== GL_BYTE
&& littleEndian
&& !swapBytes
;
3241 case MESA_FORMAT_SIGNED_R8
:
3242 return format
== GL_RED
&& type
== GL_BYTE
;
3243 case MESA_FORMAT_SIGNED_RG88_REV
:
3244 return format
== GL_RG
&& type
== GL_BYTE
&& littleEndian
&&
3246 case MESA_FORMAT_SIGNED_RGBX8888
:
3249 case MESA_FORMAT_SIGNED_RGBA8888
:
3250 if (format
== GL_RGBA
&& type
== GL_BYTE
&& !littleEndian
)
3253 if (format
== GL_ABGR_EXT
&& type
== GL_BYTE
&& littleEndian
)
3258 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
3259 if (format
== GL_RGBA
&& type
== GL_BYTE
&& littleEndian
)
3262 if (format
== GL_ABGR_EXT
&& type
== GL_BYTE
&& !littleEndian
)
3267 case MESA_FORMAT_SIGNED_R16
:
3268 return format
== GL_RED
&& type
== GL_SHORT
&&
3270 case MESA_FORMAT_SIGNED_GR1616
:
3271 return format
== GL_RG
&& type
== GL_SHORT
&& littleEndian
&& !swapBytes
;
3272 case MESA_FORMAT_SIGNED_RGB_16
:
3273 return format
== GL_RGB
&& type
== GL_SHORT
&& !swapBytes
;
3274 case MESA_FORMAT_SIGNED_RGBA_16
:
3275 return format
== GL_RGBA
&& type
== GL_SHORT
&& !swapBytes
;
3276 case MESA_FORMAT_RGBA_16
:
3277 return format
== GL_RGBA
&& type
== GL_UNSIGNED_SHORT
&&
3280 case MESA_FORMAT_RED_RGTC1
:
3281 case MESA_FORMAT_SIGNED_RED_RGTC1
:
3282 case MESA_FORMAT_RG_RGTC2
:
3283 case MESA_FORMAT_SIGNED_RG_RGTC2
:
3286 case MESA_FORMAT_L_LATC1
:
3287 case MESA_FORMAT_SIGNED_L_LATC1
:
3288 case MESA_FORMAT_LA_LATC2
:
3289 case MESA_FORMAT_SIGNED_LA_LATC2
:
3292 case MESA_FORMAT_ETC1_RGB8
:
3293 case MESA_FORMAT_ETC2_RGB8
:
3294 case MESA_FORMAT_ETC2_SRGB8
:
3295 case MESA_FORMAT_ETC2_RGBA8_EAC
:
3296 case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC
:
3297 case MESA_FORMAT_ETC2_R11_EAC
:
3298 case MESA_FORMAT_ETC2_RG11_EAC
:
3299 case MESA_FORMAT_ETC2_SIGNED_R11_EAC
:
3300 case MESA_FORMAT_ETC2_SIGNED_RG11_EAC
:
3301 case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
:
3302 case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1
:
3305 case MESA_FORMAT_SIGNED_A8
:
3306 return format
== GL_ALPHA
&& type
== GL_BYTE
;
3307 case MESA_FORMAT_SIGNED_L8
:
3308 return format
== GL_LUMINANCE
&& type
== GL_BYTE
;
3309 case MESA_FORMAT_SIGNED_AL88
:
3310 return format
== GL_LUMINANCE_ALPHA
&& type
== GL_BYTE
&&
3311 littleEndian
&& !swapBytes
;
3312 case MESA_FORMAT_SIGNED_I8
:
3313 return format
== GL_INTENSITY
&& type
== GL_BYTE
;
3314 case MESA_FORMAT_SIGNED_A16
:
3315 return format
== GL_ALPHA
&& type
== GL_SHORT
&& !swapBytes
;
3316 case MESA_FORMAT_SIGNED_L16
:
3317 return format
== GL_LUMINANCE
&& type
== GL_SHORT
&& !swapBytes
;
3318 case MESA_FORMAT_SIGNED_AL1616
:
3319 return format
== GL_LUMINANCE_ALPHA
&& type
== GL_SHORT
&&
3320 littleEndian
&& !swapBytes
;
3321 case MESA_FORMAT_SIGNED_I16
:
3322 return format
== GL_INTENSITY
&& type
== GL_SHORT
&& littleEndian
&&
3325 case MESA_FORMAT_ARGB2101010_UINT
:
3326 return (format
== GL_BGRA_INTEGER_EXT
&&
3327 type
== GL_UNSIGNED_INT_2_10_10_10_REV
&&
3330 case MESA_FORMAT_ABGR2101010_UINT
:
3331 return (format
== GL_RGBA_INTEGER_EXT
&&
3332 type
== GL_UNSIGNED_INT_2_10_10_10_REV
&&
3335 case MESA_FORMAT_RGB9_E5_FLOAT
:
3336 return format
== GL_RGB
&& type
== GL_UNSIGNED_INT_5_9_9_9_REV
&&
3339 case MESA_FORMAT_R11_G11_B10_FLOAT
:
3340 return format
== GL_RGB
&& type
== GL_UNSIGNED_INT_10F_11F_11F_REV
&&
3343 case MESA_FORMAT_Z32_FLOAT
:
3344 return format
== GL_DEPTH_COMPONENT
&& type
== GL_FLOAT
&& !swapBytes
;
3346 case MESA_FORMAT_Z32_FLOAT_X24S8
:
3347 return format
== GL_DEPTH_STENCIL
&&
3348 type
== GL_FLOAT_32_UNSIGNED_INT_24_8_REV
&& !swapBytes
;
3350 case MESA_FORMAT_XRGB4444_UNORM
:
3351 case MESA_FORMAT_XRGB1555_UNORM
:
3352 case MESA_FORMAT_XBGR8888_SNORM
:
3353 case MESA_FORMAT_XBGR8888_SRGB
:
3354 case MESA_FORMAT_XBGR8888_UINT
:
3355 case MESA_FORMAT_XBGR8888_SINT
:
3356 case MESA_FORMAT_XRGB2101010_UNORM
:
3357 case MESA_FORMAT_XBGR16161616_UNORM
:
3358 case MESA_FORMAT_XBGR16161616_SNORM
:
3359 case MESA_FORMAT_XBGR16161616_FLOAT
:
3360 case MESA_FORMAT_XBGR16161616_UINT
:
3361 case MESA_FORMAT_XBGR16161616_SINT
:
3362 case MESA_FORMAT_XBGR32323232_FLOAT
:
3363 case MESA_FORMAT_XBGR32323232_UINT
:
3364 case MESA_FORMAT_XBGR32323232_SINT
: