5 * \author Gareth Hughes
9 * Mesa 3-D graphics library
12 * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
14 * Permission is hereby granted, free of charge, to any person obtaining a
15 * copy of this software and associated documentation files (the "Software"),
16 * to deal in the Software without restriction, including without limitation
17 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
18 * and/or sell copies of the Software, and to permit persons to whom the
19 * Software is furnished to do so, subject to the following conditions:
21 * The above copyright notice and this permission notice shall be included
22 * in all copies or substantial portions of the Software.
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
28 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39 #include "texformat.h"
44 /* Texel fetch routines for all supported formats
47 #include "texformat_tmp.h"
50 #include "texformat_tmp.h"
53 #include "texformat_tmp.h"
56 * Null texel fetch function.
58 * Have to have this so the FetchTexel function pointer is never NULL.
60 static void fetch_null_texel( const struct gl_texture_image
*texImage
,
61 GLint i
, GLint j
, GLint k
, GLvoid
*texel
)
63 GLchan
*rgba
= (GLchan
*) texel
;
71 /***************************************************************/
72 /** \name Default GLchan-based formats */
75 const struct gl_texture_format _mesa_texformat_rgba
= {
76 MESA_FORMAT_RGBA
, /* MesaFormat */
77 GL_RGBA
, /* BaseFormat */
78 CHAN_BITS
, /* RedBits */
79 CHAN_BITS
, /* GreenBits */
80 CHAN_BITS
, /* BlueBits */
81 CHAN_BITS
, /* AlphaBits */
82 0, /* LuminanceBits */
83 0, /* IntensityBits */
86 4 * CHAN_BITS
/ 8, /* TexelBytes */
87 fetch_1d_texel_rgba
, /* FetchTexel1D */
88 fetch_2d_texel_rgba
, /* FetchTexel2D */
89 fetch_3d_texel_rgba
, /* FetchTexel3D */
92 const struct gl_texture_format _mesa_texformat_rgb
= {
93 MESA_FORMAT_RGB
, /* MesaFormat */
94 GL_RGB
, /* BaseFormat */
95 CHAN_BITS
, /* RedBits */
96 CHAN_BITS
, /* GreenBits */
97 CHAN_BITS
, /* BlueBits */
99 0, /* LuminanceBits */
100 0, /* IntensityBits */
103 3 * CHAN_BITS
/ 8, /* TexelBytes */
104 fetch_1d_texel_rgb
, /* FetchTexel1D */
105 fetch_2d_texel_rgb
, /* FetchTexel2D */
106 fetch_3d_texel_rgb
, /* FetchTexel3D */
109 const struct gl_texture_format _mesa_texformat_alpha
= {
110 MESA_FORMAT_ALPHA
, /* MesaFormat */
111 GL_ALPHA
, /* BaseFormat */
115 CHAN_BITS
, /* AlphaBits */
116 0, /* LuminanceBits */
117 0, /* IntensityBits */
120 CHAN_BITS
/ 8, /* TexelBytes */
121 fetch_1d_texel_alpha
, /* FetchTexel1D */
122 fetch_2d_texel_alpha
, /* FetchTexel2D */
123 fetch_3d_texel_alpha
, /* FetchTexel3D */
126 const struct gl_texture_format _mesa_texformat_luminance
= {
127 MESA_FORMAT_LUMINANCE
, /* MesaFormat */
128 GL_LUMINANCE
, /* BaseFormat */
133 CHAN_BITS
, /* LuminanceBits */
134 0, /* IntensityBits */
137 CHAN_BITS
/ 8, /* TexelBytes */
138 fetch_1d_texel_luminance
, /* FetchTexel1D */
139 fetch_2d_texel_luminance
, /* FetchTexel2D */
140 fetch_3d_texel_luminance
, /* FetchTexel3D */
143 const struct gl_texture_format _mesa_texformat_luminance_alpha
= {
144 MESA_FORMAT_LUMINANCE_ALPHA
, /* MesaFormat */
145 GL_LUMINANCE_ALPHA
, /* BaseFormat */
149 CHAN_BITS
, /* AlphaBits */
150 CHAN_BITS
, /* LuminanceBits */
151 0, /* IntensityBits */
154 2 * CHAN_BITS
/ 8, /* TexelBytes */
155 fetch_1d_texel_luminance_alpha
, /* FetchTexel1D */
156 fetch_2d_texel_luminance_alpha
, /* FetchTexel2D */
157 fetch_3d_texel_luminance_alpha
, /* FetchTexel3D */
160 const struct gl_texture_format _mesa_texformat_intensity
= {
161 MESA_FORMAT_INTENSITY
, /* MesaFormat */
162 GL_INTENSITY
, /* BaseFormat */
167 0, /* LuminanceBits */
168 CHAN_BITS
, /* IntensityBits */
171 CHAN_BITS
/ 8, /* TexelBytes */
172 fetch_1d_texel_intensity
, /* FetchTexel1D */
173 fetch_2d_texel_intensity
, /* FetchTexel2D */
174 fetch_3d_texel_intensity
, /* FetchTexel3D */
177 const struct gl_texture_format _mesa_texformat_color_index
= {
178 MESA_FORMAT_COLOR_INDEX
, /* MesaFormat */
179 GL_COLOR_INDEX
, /* BaseFormat */
184 0, /* LuminanceBits */
185 0, /* IntensityBits */
186 CHAN_BITS
, /* IndexBits */
188 CHAN_BITS
/ 8, /* TexelBytes */
189 fetch_1d_texel_color_index
, /* FetchTexel1D */
190 fetch_2d_texel_color_index
, /* FetchTexel2D */
191 fetch_3d_texel_color_index
, /* FetchTexel3D */
194 const struct gl_texture_format _mesa_texformat_depth_component
= {
195 MESA_FORMAT_DEPTH_COMPONENT
, /* MesaFormat */
196 GL_DEPTH_COMPONENT
, /* BaseFormat */
201 0, /* LuminanceBits */
202 0, /* IntensityBits */
204 sizeof(GLfloat
) * 8, /* DepthBits */
205 sizeof(GLfloat
), /* TexelBytes */
206 fetch_1d_texel_depth_component
, /* FetchTexel1D */
207 fetch_2d_texel_depth_component
, /* FetchTexel2D */
208 fetch_3d_texel_depth_component
, /* FetchTexel3D */
214 /***************************************************************/
215 /** \name Hardware formats */
218 const struct gl_texture_format _mesa_texformat_rgba8888
= {
219 MESA_FORMAT_RGBA8888
, /* MesaFormat */
220 GL_RGBA
, /* BaseFormat */
225 0, /* LuminanceBits */
226 0, /* IntensityBits */
230 fetch_1d_texel_rgba8888
, /* FetchTexel1D */
231 fetch_2d_texel_rgba8888
, /* FetchTexel2D */
232 fetch_3d_texel_rgba8888
, /* FetchTexel3D */
235 const struct gl_texture_format _mesa_texformat_argb8888
= {
236 MESA_FORMAT_ARGB8888
, /* MesaFormat */
237 GL_RGBA
, /* BaseFormat */
242 0, /* LuminanceBits */
243 0, /* IntensityBits */
247 fetch_1d_texel_argb8888
, /* FetchTexel1D */
248 fetch_2d_texel_argb8888
, /* FetchTexel2D */
249 fetch_3d_texel_argb8888
, /* FetchTexel3D */
252 const struct gl_texture_format _mesa_texformat_rgb888
= {
253 MESA_FORMAT_RGB888
, /* MesaFormat */
254 GL_RGB
, /* BaseFormat */
259 0, /* LuminanceBits */
260 0, /* IntensityBits */
264 fetch_1d_texel_rgb888
, /* FetchTexel1D */
265 fetch_2d_texel_rgb888
, /* FetchTexel2D */
266 fetch_3d_texel_rgb888
, /* FetchTexel3D */
269 const struct gl_texture_format _mesa_texformat_rgb565
= {
270 MESA_FORMAT_RGB565
, /* MesaFormat */
271 GL_RGB
, /* BaseFormat */
276 0, /* LuminanceBits */
277 0, /* IntensityBits */
281 fetch_1d_texel_rgb565
, /* FetchTexel1D */
282 fetch_2d_texel_rgb565
, /* FetchTexel2D */
283 fetch_3d_texel_rgb565
, /* FetchTexel3D */
286 const struct gl_texture_format _mesa_texformat_argb4444
= {
287 MESA_FORMAT_ARGB4444
, /* MesaFormat */
288 GL_RGBA
, /* BaseFormat */
293 0, /* LuminanceBits */
294 0, /* IntensityBits */
298 fetch_1d_texel_argb4444
, /* FetchTexel1D */
299 fetch_2d_texel_argb4444
, /* FetchTexel2D */
300 fetch_3d_texel_argb4444
, /* FetchTexel3D */
303 const struct gl_texture_format _mesa_texformat_argb1555
= {
304 MESA_FORMAT_ARGB1555
, /* MesaFormat */
305 GL_RGBA
, /* BaseFormat */
310 0, /* LuminanceBits */
311 0, /* IntensityBits */
315 fetch_1d_texel_argb1555
, /* FetchTexel1D */
316 fetch_2d_texel_argb1555
, /* FetchTexel2D */
317 fetch_3d_texel_argb1555
, /* FetchTexel3D */
320 const struct gl_texture_format _mesa_texformat_al88
= {
321 MESA_FORMAT_AL88
, /* MesaFormat */
322 GL_LUMINANCE_ALPHA
, /* BaseFormat */
327 8, /* LuminanceBits */
328 0, /* IntensityBits */
332 fetch_1d_texel_al88
, /* FetchTexel1D */
333 fetch_2d_texel_al88
, /* FetchTexel2D */
334 fetch_3d_texel_al88
, /* FetchTexel3D */
337 const struct gl_texture_format _mesa_texformat_rgb332
= {
338 MESA_FORMAT_RGB332
, /* MesaFormat */
339 GL_RGB
, /* BaseFormat */
344 0, /* LuminanceBits */
345 0, /* IntensityBits */
349 fetch_1d_texel_rgb332
, /* FetchTexel1D */
350 fetch_2d_texel_rgb332
, /* FetchTexel2D */
351 fetch_3d_texel_rgb332
, /* FetchTexel3D */
354 const struct gl_texture_format _mesa_texformat_a8
= {
355 MESA_FORMAT_A8
, /* MesaFormat */
356 GL_ALPHA
, /* BaseFormat */
361 0, /* LuminanceBits */
362 0, /* IntensityBits */
366 fetch_1d_texel_a8
, /* FetchTexel1D */
367 fetch_2d_texel_a8
, /* FetchTexel2D */
368 fetch_3d_texel_a8
, /* FetchTexel3D */
371 const struct gl_texture_format _mesa_texformat_l8
= {
372 MESA_FORMAT_L8
, /* MesaFormat */
373 GL_LUMINANCE
, /* BaseFormat */
378 8, /* LuminanceBits */
379 0, /* IntensityBits */
383 fetch_1d_texel_l8
, /* FetchTexel1D */
384 fetch_2d_texel_l8
, /* FetchTexel2D */
385 fetch_3d_texel_l8
, /* FetchTexel3D */
388 const struct gl_texture_format _mesa_texformat_i8
= {
389 MESA_FORMAT_I8
, /* MesaFormat */
390 GL_INTENSITY
, /* BaseFormat */
395 0, /* LuminanceBits */
396 8, /* IntensityBits */
400 fetch_1d_texel_i8
, /* FetchTexel1D */
401 fetch_2d_texel_i8
, /* FetchTexel2D */
402 fetch_3d_texel_i8
, /* FetchTexel3D */
405 const struct gl_texture_format _mesa_texformat_ci8
= {
406 MESA_FORMAT_CI8
, /* MesaFormat */
407 GL_COLOR_INDEX
, /* BaseFormat */
412 0, /* LuminanceBits */
413 0, /* IntensityBits */
417 fetch_1d_texel_ci8
, /* FetchTexel1D */
418 fetch_2d_texel_ci8
, /* FetchTexel2D */
419 fetch_3d_texel_ci8
, /* FetchTexel3D */
422 const struct gl_texture_format _mesa_texformat_ycbcr
= {
423 MESA_FORMAT_YCBCR
, /* MesaFormat */
424 GL_YCBCR_MESA
, /* BaseFormat */
429 0, /* LuminanceBits */
430 0, /* IntensityBits */
434 fetch_1d_texel_ycbcr
, /* FetchTexel1D */
435 fetch_2d_texel_ycbcr
, /* FetchTexel2D */
436 fetch_3d_texel_ycbcr
, /* FetchTexel3D */
439 const struct gl_texture_format _mesa_texformat_ycbcr_rev
= {
440 MESA_FORMAT_YCBCR_REV
, /* MesaFormat */
441 GL_YCBCR_MESA
, /* BaseFormat */
446 0, /* LuminanceBits */
447 0, /* IntensityBits */
451 fetch_1d_texel_ycbcr_rev
, /* FetchTexel1D */
452 fetch_2d_texel_ycbcr_rev
, /* FetchTexel2D */
453 fetch_3d_texel_ycbcr_rev
, /* FetchTexel3D */
456 const struct gl_texture_format _mesa_texformat_rgb_fxt1
= {
457 MESA_FORMAT_RGB_FXT1
, /* MesaFormat */
458 GL_RGB
, /* BaseFormat */
459 4, /*approx*/ /* RedBits */
460 4, /*approx*/ /* GreenBits */
461 4, /*approx*/ /* BlueBits */
463 0, /* LuminanceBits */
464 0, /* IntensityBits */
468 NULL
, /*impossible*/ /* FetchTexel1D */
469 fetch_2d_texel_rgb_fxt1
, /* FetchTexel2D */
470 NULL
, /*impossible*/ /* FetchTexel3D */
473 const struct gl_texture_format _mesa_texformat_rgba_fxt1
= {
474 MESA_FORMAT_RGBA_FXT1
, /* MesaFormat */
475 GL_RGBA
, /* BaseFormat */
476 4, /*approx*/ /* RedBits */
477 4, /*approx*/ /* GreenBits */
478 4, /*approx*/ /* BlueBits */
479 1, /*approx*/ /* AlphaBits */
480 0, /* LuminanceBits */
481 0, /* IntensityBits */
485 NULL
, /*impossible*/ /* FetchTexel1D */
486 fetch_2d_texel_rgba_fxt1
, /* FetchTexel2D */
487 NULL
, /*impossible*/ /* FetchTexel3D */
490 const struct gl_texture_format _mesa_texformat_rgb_dxt1
= {
491 MESA_FORMAT_RGB_DXT1
, /* MesaFormat */
492 GL_RGB
, /* BaseFormat */
493 4, /*approx*/ /* RedBits */
494 4, /*approx*/ /* GreenBits */
495 4, /*approx*/ /* BlueBits */
497 0, /* LuminanceBits */
498 0, /* IntensityBits */
502 NULL
, /*impossible*/ /* FetchTexel1D */
503 fetch_2d_texel_rgb_dxt1
, /* FetchTexel2D */
504 NULL
, /*impossible*/ /* FetchTexel3D */
507 const struct gl_texture_format _mesa_texformat_rgba_dxt1
= {
508 MESA_FORMAT_RGBA_DXT1
, /* MesaFormat */
509 GL_RGBA
, /* BaseFormat */
510 4, /*approx*/ /* RedBits */
511 4, /*approx*/ /* GreenBits */
512 4, /*approx*/ /* BlueBits */
513 1, /*approx*/ /* AlphaBits */
514 0, /* LuminanceBits */
515 0, /* IntensityBits */
519 NULL
, /*impossible*/ /* FetchTexel1D */
520 fetch_2d_texel_rgba_dxt1
, /* FetchTexel2D */
521 NULL
, /*impossible*/ /* FetchTexel3D */
524 const struct gl_texture_format _mesa_texformat_rgba_dxt3
= {
525 MESA_FORMAT_RGBA_DXT3
, /* MesaFormat */
526 GL_RGBA
, /* BaseFormat */
527 4, /*approx*/ /* RedBits */
528 4, /*approx*/ /* GreenBits */
529 4, /*approx*/ /* BlueBits */
530 4, /*approx*/ /* AlphaBits */
531 0, /* LuminanceBits */
532 0, /* IntensityBits */
536 NULL
, /*impossible*/ /* FetchTexel1D */
537 fetch_2d_texel_rgba_dxt3
, /* FetchTexel2D */
538 NULL
, /*impossible*/ /* FetchTexel3D */
541 const struct gl_texture_format _mesa_texformat_rgba_dxt5
= {
542 MESA_FORMAT_RGBA_DXT5
, /* MesaFormat */
543 GL_RGBA
, /* BaseFormat */
544 4,/*approx*/ /* RedBits */
545 4,/*approx*/ /* GreenBits */
546 4,/*approx*/ /* BlueBits */
547 4,/*approx*/ /* AlphaBits */
548 0, /* LuminanceBits */
549 0, /* IntensityBits */
553 NULL
, /*impossible*/ /* FetchTexel1D */
554 fetch_2d_texel_rgba_dxt5
, /* FetchTexel2D */
555 NULL
, /*impossible*/ /* FetchTexel3D */
561 const struct gl_texture_format _mesa_texformat_abgr8888
= {
562 MESA_FORMAT_ABGR8888
, /* MesaFormat */
563 GL_RGBA
, /* BaseFormat */
564 GL_UNSIGNED_INT_8_8_8_8
, /* Type */
569 0, /* LuminanceBits */
570 0, /* IntensityBits */
574 fetch_1d_texel_abgr8888
, /* FetchTexel1D */
575 fetch_2d_texel_abgr8888
, /* FetchTexel2D */
576 fetch_3d_texel_abgr8888
, /* FetchTexel3D */
579 const struct gl_texture_format _mesa_texformat_bgra8888
= {
580 MESA_FORMAT_BGRA8888
, /* MesaFormat */
581 GL_RGBA
, /* BaseFormat */
582 GL_UNSIGNED_INT_8_8_8_8
, /* Type */
587 0, /* LuminanceBits */
588 0, /* IntensityBits */
592 fetch_1d_texel_bgra8888
, /* FetchTexel1D */
593 fetch_2d_texel_bgra8888
, /* FetchTexel2D */
594 fetch_3d_texel_bgra8888
, /* FetchTexel3D */
597 const struct gl_texture_format _mesa_texformat_bgr888
= {
598 MESA_FORMAT_BGR888
, /* MesaFormat */
599 GL_RGB
, /* BaseFormat */
600 GL_UNSIGNED_BYTE
, /* Type */
605 0, /* LuminanceBits */
606 0, /* IntensityBits */
610 fetch_1d_texel_bgr888
, /* FetchTexel1D */
611 fetch_2d_texel_bgr888
, /* FetchTexel2D */
612 fetch_3d_texel_bgr888
, /* FetchTexel3D */
615 const struct gl_texture_format _mesa_texformat_bgr565
= {
616 MESA_FORMAT_BGR565
, /* MesaFormat */
617 GL_RGB
, /* BaseFormat */
618 GL_UNSIGNED_SHORT_5_6_5
, /* Type */
623 0, /* LuminanceBits */
624 0, /* IntensityBits */
628 fetch_1d_texel_bgr565
, /* FetchTexel1D */
629 fetch_2d_texel_bgr565
, /* FetchTexel2D */
630 fetch_3d_texel_bgr565
, /* FetchTexel3D */
633 const struct gl_texture_format _mesa_texformat_bgra4444
= {
634 MESA_FORMAT_BGRA4444
, /* MesaFormat */
635 GL_RGBA
, /* BaseFormat */
636 GL_UNSIGNED_SHORT_4_4_4_4_REV
, /* Type */
641 0, /* LuminanceBits */
642 0, /* IntensityBits */
646 fetch_1d_texel_bgra4444
, /* FetchTexel1D */
647 fetch_2d_texel_bgra4444
, /* FetchTexel2D */
648 fetch_3d_texel_bgra4444
, /* FetchTexel3D */
651 const struct gl_texture_format _mesa_texformat_bgra5551
= {
652 MESA_FORMAT_BGRA5551
, /* MesaFormat */
653 GL_RGBA
, /* BaseFormat */
654 GL_UNSIGNED_SHORT_1_5_5_5_REV
, /* Type */
659 0, /* LuminanceBits */
660 0, /* IntensityBits */
664 fetch_1d_texel_bgra1555
, /* FetchTexel1D */
665 fetch_2d_texel_bgra1555
, /* FetchTexel2D */
666 fetch_3d_texel_bgra1555
, /* FetchTexel3D */
669 const struct gl_texture_format _mesa_texformat_la88
= {
670 MESA_FORMAT_LA88
, /* MesaFormat */
671 GL_LUMINANCE_ALPHA
, /* BaseFormat */
672 GL_UNSIGNED_BYTE
, /* Type */
677 8, /* LuminanceBits */
678 0, /* IntensityBits */
682 fetch_1d_texel_la88
, /* FetchTexel1D */
683 fetch_2d_texel_la88
, /* FetchTexel2D */
684 fetch_3d_texel_la88
, /* FetchTexel3D */
687 const struct gl_texture_format _mesa_texformat_bgr233
= {
688 MESA_FORMAT_BGR233
, /* MesaFormat */
689 GL_RGB
, /* BaseFormat */
690 GL_UNSIGNED_BYTE_3_3_2
, /* Type */
695 0, /* LuminanceBits */
696 0, /* IntensityBits */
700 fetch_1d_texel_bgr233
, /* FetchTexel1D */
701 fetch_2d_texel_bgr233
, /* FetchTexel2D */
702 fetch_3d_texel_bgr233
, /* FetchTexel3D */
709 /***************************************************************/
710 /** \name Null format (useful for proxy textures) */
713 const struct gl_texture_format _mesa_null_texformat
= {
720 0, /* LuminanceBits */
721 0, /* IntensityBits */
725 fetch_null_texel
, /* FetchTexel1D */
726 fetch_null_texel
, /* FetchTexel2D */
727 fetch_null_texel
, /* FetchTexel3D */
734 * Determine whether a given texture format is a hardware texture
737 * \param format texture format.
739 * \return GL_TRUE if \p format is a hardware texture format, or GL_FALSE
742 * \p format is a hardware texture format if gl_texture_format::MesaFormat is
743 * lower than _format::MESA_FORMAT_RGBA.
746 _mesa_is_hardware_tex_format( const struct gl_texture_format
*format
)
748 return (format
->MesaFormat
< MESA_FORMAT_RGBA
);
753 * Choose an appropriate texture format.
755 * \param ctx GL context.
756 * \param internalFormat internal texture format.
757 * \param format pixel format.
758 * \param type data type.
760 * \return a pointer to a gl_texture_format in which to store the texture on
761 * success, or NULL on failure.
763 * This is called via dd_function_table::ChooseTextureFormat. Hardware drivers
764 * typically override this function with a specialized version.
766 const struct gl_texture_format
*
767 _mesa_choose_tex_format( GLcontext
*ctx
, GLint internalFormat
,
768 GLenum format
, GLenum type
)
773 switch ( internalFormat
) {
774 /* GH: Bias towards GL_RGB, GL_RGBA texture formats. This has
775 * got to be better than sticking them way down the end of this
778 case 4: /* Quake3 uses this... */
780 return &_mesa_texformat_rgba
;
782 case 3: /* ... and this. */
784 return &_mesa_texformat_rgb
;
786 /* GH: Okay, keep checking as normal. Still test for GL_RGB,
787 * GL_RGBA formats first.
796 return &_mesa_texformat_rgba
;
805 return &_mesa_texformat_rgb
;
812 return &_mesa_texformat_alpha
;
820 return &_mesa_texformat_luminance
;
823 case GL_LUMINANCE_ALPHA
:
824 case GL_LUMINANCE4_ALPHA4
:
825 case GL_LUMINANCE6_ALPHA2
:
826 case GL_LUMINANCE8_ALPHA8
:
827 case GL_LUMINANCE12_ALPHA4
:
828 case GL_LUMINANCE12_ALPHA12
:
829 case GL_LUMINANCE16_ALPHA16
:
830 return &_mesa_texformat_luminance_alpha
;
837 return &_mesa_texformat_intensity
;
840 case GL_COLOR_INDEX1_EXT
:
841 case GL_COLOR_INDEX2_EXT
:
842 case GL_COLOR_INDEX4_EXT
:
843 case GL_COLOR_INDEX8_EXT
:
844 case GL_COLOR_INDEX12_EXT
:
845 case GL_COLOR_INDEX16_EXT
:
846 return &_mesa_texformat_color_index
;
848 case GL_DEPTH_COMPONENT
:
849 case GL_DEPTH_COMPONENT16_SGIX
:
850 case GL_DEPTH_COMPONENT24_SGIX
:
851 case GL_DEPTH_COMPONENT32_SGIX
:
852 if (!ctx
->Extensions
.SGIX_depth_texture
)
853 _mesa_problem(ctx
, "depth format without GL_SGIX_depth_texture");
854 return &_mesa_texformat_depth_component
;
856 case GL_COMPRESSED_ALPHA_ARB
:
857 if (!ctx
->Extensions
.ARB_texture_compression
)
858 _mesa_problem(ctx
, "texture compression extension not enabled");
859 return &_mesa_texformat_alpha
;
860 case GL_COMPRESSED_LUMINANCE_ARB
:
861 if (!ctx
->Extensions
.ARB_texture_compression
)
862 _mesa_problem(ctx
, "texture compression extension not enabled");
863 return &_mesa_texformat_luminance
;
864 case GL_COMPRESSED_LUMINANCE_ALPHA_ARB
:
865 if (!ctx
->Extensions
.ARB_texture_compression
)
866 _mesa_problem(ctx
, "texture compression extension not enabled");
867 return &_mesa_texformat_luminance_alpha
;
868 case GL_COMPRESSED_INTENSITY_ARB
:
869 if (!ctx
->Extensions
.ARB_texture_compression
)
870 _mesa_problem(ctx
, "texture compression extension not enabled");
871 return &_mesa_texformat_intensity
;
872 case GL_COMPRESSED_RGB_ARB
:
873 if (!ctx
->Extensions
.ARB_texture_compression
)
874 _mesa_problem(ctx
, "texture compression extension not enabled");
875 if (ctx
->Extensions
.TDFX_texture_compression_FXT1
)
876 return &_mesa_texformat_rgb_fxt1
;
877 else if (ctx
->Extensions
.EXT_texture_compression_s3tc
|| ctx
->Extensions
.S3_s3tc
)
878 return &_mesa_texformat_rgb_dxt1
;
879 return &_mesa_texformat_rgb
;
880 case GL_COMPRESSED_RGBA_ARB
:
881 if (!ctx
->Extensions
.ARB_texture_compression
)
882 _mesa_problem(ctx
, "texture compression extension not enabled");
883 if (ctx
->Extensions
.TDFX_texture_compression_FXT1
)
884 return &_mesa_texformat_rgba_fxt1
;
885 else if (ctx
->Extensions
.EXT_texture_compression_s3tc
|| ctx
->Extensions
.S3_s3tc
)
886 return &_mesa_texformat_rgba_dxt3
; /* Not rgba_dxt1! See the spec */
887 return &_mesa_texformat_rgba
;
889 /* GL_MESA_ycrcr_texture */
891 if (type
== GL_UNSIGNED_SHORT_8_8_MESA
)
892 return &_mesa_texformat_ycbcr
;
894 return &_mesa_texformat_ycbcr_rev
;
896 /* GL_3DFX_texture_compression_FXT1 */
897 case GL_COMPRESSED_RGB_FXT1_3DFX
:
898 if (ctx
->Extensions
.TDFX_texture_compression_FXT1
)
899 return &_mesa_texformat_rgb_fxt1
;
902 case GL_COMPRESSED_RGBA_FXT1_3DFX
:
903 if (ctx
->Extensions
.TDFX_texture_compression_FXT1
)
904 return &_mesa_texformat_rgba_fxt1
;
908 /* GL_EXT_texture_compression_s3tc */
909 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT
:
910 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
911 return &_mesa_texformat_rgb_dxt1
;
914 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
:
915 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
916 return &_mesa_texformat_rgba_dxt1
;
919 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
:
920 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
921 return &_mesa_texformat_rgba_dxt3
;
924 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
:
925 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
926 return &_mesa_texformat_rgba_dxt5
;
933 if (ctx
->Extensions
.S3_s3tc
)
934 return &_mesa_texformat_rgb_dxt1
;
939 if (ctx
->Extensions
.S3_s3tc
)
940 return &_mesa_texformat_rgba_dxt3
;
945 _mesa_problem(ctx
, "unexpected format in _mesa_choose_tex_format()");
952 * Return the base texture format for the given compressed format
954 * Called via dd_function_table::Driver.BaseCompressedTexFormat.
955 * This function is used by software rasterizers. Hardware drivers
956 * which support texture compression should not use this function but
957 * a specialized function instead.
960 _mesa_base_compressed_texformat(GLcontext
*ctx
, GLint intFormat
)
963 case GL_COMPRESSED_ALPHA_ARB
:
965 case GL_COMPRESSED_LUMINANCE_ARB
:
967 case GL_COMPRESSED_LUMINANCE_ALPHA_ARB
:
968 return GL_LUMINANCE_ALPHA
;
969 case GL_COMPRESSED_INTENSITY_ARB
:
971 case GL_COMPRESSED_RGB_ARB
:
973 case GL_COMPRESSED_RGBA_ARB
:
976 return -1; /* not a recognized compressed format */