2 * Mesa 3-D graphics library
5 * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
6 * Copyright (c) 2008 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 * BRIAN PAUL 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.
31 * \author Gareth Hughes
37 #include "texcompress.h"
38 #include "texcompress_fxt1.h"
39 #include "texcompress_s3tc.h"
40 #include "texformat.h"
44 #if FEATURE_EXT_texture_sRGB
47 * Convert an 8-bit sRGB value from non-linear space to a
48 * linear RGB value in [0, 1].
49 * Implemented with a 256-entry lookup table.
52 nonlinear_to_linear(GLubyte cs8
)
54 static GLfloat table
[256];
55 static GLboolean tableReady
= GL_FALSE
;
57 /* compute lookup table now */
59 for (i
= 0; i
< 256; i
++) {
60 const GLfloat cs
= UBYTE_TO_FLOAT(i
);
62 table
[i
] = cs
/ 12.92f
;
65 table
[i
] = (GLfloat
) _mesa_pow((cs
+ 0.055) / 1.055, 2.4);
74 #endif /* FEATURE_EXT_texture_sRGB */
77 /* Texel fetch routines for all supported formats
80 #include "texformat_tmp.h"
83 #include "texformat_tmp.h"
86 #include "texformat_tmp.h"
89 * Null texel fetch function.
91 * Have to have this so the FetchTexel function pointer is never NULL.
93 static void fetch_null_texelf( const struct gl_texture_image
*texImage
,
94 GLint i
, GLint j
, GLint k
, GLfloat
*texel
)
96 (void) texImage
; (void) i
; (void) j
; (void) k
;
101 _mesa_warning(NULL
, "fetch_null_texelf() called!");
104 static void store_null_texel(struct gl_texture_image
*texImage
,
105 GLint i
, GLint j
, GLint k
, const void *texel
)
117 * Choose an appropriate texture format given the format, type and
118 * internalFormat parameters passed to glTexImage().
120 * \param ctx the GL context.
121 * \param internalFormat user's prefered internal texture format.
122 * \param format incoming image pixel format.
123 * \param type incoming image data type.
125 * \return a pointer to a gl_texture_format object which describes the
126 * choosen texture format, or NULL on failure.
128 * This is called via dd_function_table::ChooseTextureFormat. Hardware drivers
129 * will typically override this function with a specialized version.
132 _mesa_choose_tex_format( GLcontext
*ctx
, GLint internalFormat
,
133 GLenum format
, GLenum type
)
138 switch (internalFormat
) {
145 return MESA_FORMAT_RGBA
;
147 return MESA_FORMAT_RGBA8888
;
149 return MESA_FORMAT_ARGB1555
;
151 return MESA_FORMAT_ARGB4444_REV
; /* just to test another format*/
153 return MESA_FORMAT_ARGB4444
;
161 return MESA_FORMAT_RGB
;
163 return MESA_FORMAT_RGB888
;
165 return MESA_FORMAT_RGB332
;
167 return MESA_FORMAT_RGB565_REV
; /* just to test another format */
169 return MESA_FORMAT_RGB565
;
176 return MESA_FORMAT_ALPHA
;
178 return MESA_FORMAT_A8
;
180 /* Luminance formats */
186 return MESA_FORMAT_LUMINANCE
;
188 return MESA_FORMAT_L8
;
190 /* Luminance/Alpha formats */
192 case GL_LUMINANCE_ALPHA
:
193 case GL_LUMINANCE4_ALPHA4
:
194 case GL_LUMINANCE6_ALPHA2
:
195 case GL_LUMINANCE12_ALPHA4
:
196 case GL_LUMINANCE12_ALPHA12
:
197 case GL_LUMINANCE16_ALPHA16
:
198 return MESA_FORMAT_LUMINANCE_ALPHA
;
199 case GL_LUMINANCE8_ALPHA8
:
200 return MESA_FORMAT_AL88
;
206 return MESA_FORMAT_INTENSITY
;
208 return MESA_FORMAT_I8
;
211 case GL_COLOR_INDEX1_EXT
:
212 case GL_COLOR_INDEX2_EXT
:
213 case GL_COLOR_INDEX4_EXT
:
214 case GL_COLOR_INDEX12_EXT
:
215 case GL_COLOR_INDEX16_EXT
:
216 case GL_COLOR_INDEX8_EXT
:
217 return MESA_FORMAT_CI8
;
223 if (ctx
->Extensions
.ARB_depth_texture
) {
224 switch (internalFormat
) {
225 case GL_DEPTH_COMPONENT
:
226 case GL_DEPTH_COMPONENT24
:
227 case GL_DEPTH_COMPONENT32
:
228 return MESA_FORMAT_Z32
;
229 case GL_DEPTH_COMPONENT16
:
230 return MESA_FORMAT_Z16
;
236 switch (internalFormat
) {
237 case GL_COMPRESSED_ALPHA_ARB
:
238 return MESA_FORMAT_ALPHA
;
239 case GL_COMPRESSED_LUMINANCE_ARB
:
240 return MESA_FORMAT_LUMINANCE
;
241 case GL_COMPRESSED_LUMINANCE_ALPHA_ARB
:
242 return MESA_FORMAT_LUMINANCE_ALPHA
;
243 case GL_COMPRESSED_INTENSITY_ARB
:
244 return MESA_FORMAT_INTENSITY
;
245 case GL_COMPRESSED_RGB_ARB
:
246 #if FEATURE_texture_fxt1
247 if (ctx
->Extensions
.TDFX_texture_compression_FXT1
)
248 return MESA_FORMAT_RGB_FXT1
;
250 #if FEATURE_texture_s3tc
251 if (ctx
->Extensions
.EXT_texture_compression_s3tc
||
252 ctx
->Extensions
.S3_s3tc
)
253 return MESA_FORMAT_RGB_DXT1
;
255 return MESA_FORMAT_RGB
;
256 case GL_COMPRESSED_RGBA_ARB
:
257 #if FEATURE_texture_fxt1
258 if (ctx
->Extensions
.TDFX_texture_compression_FXT1
)
259 return MESA_FORMAT_RGBA_FXT1
;
261 #if FEATURE_texture_s3tc
262 if (ctx
->Extensions
.EXT_texture_compression_s3tc
||
263 ctx
->Extensions
.S3_s3tc
)
264 return MESA_FORMAT_RGBA_DXT3
; /* Not rgba_dxt1, see spec */
266 return MESA_FORMAT_RGBA
;
271 if (ctx
->Extensions
.MESA_ycbcr_texture
) {
272 if (internalFormat
== GL_YCBCR_MESA
) {
273 if (type
== GL_UNSIGNED_SHORT_8_8_MESA
)
274 return MESA_FORMAT_YCBCR
;
276 return MESA_FORMAT_YCBCR_REV
;
280 #if FEATURE_texture_fxt1
281 if (ctx
->Extensions
.TDFX_texture_compression_FXT1
) {
282 switch (internalFormat
) {
283 case GL_COMPRESSED_RGB_FXT1_3DFX
:
284 return MESA_FORMAT_RGB_FXT1
;
285 case GL_COMPRESSED_RGBA_FXT1_3DFX
:
286 return MESA_FORMAT_RGBA_FXT1
;
293 #if FEATURE_texture_s3tc
294 if (ctx
->Extensions
.EXT_texture_compression_s3tc
) {
295 switch (internalFormat
) {
296 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT
:
297 return MESA_FORMAT_RGB_DXT1
;
298 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
:
299 return MESA_FORMAT_RGBA_DXT1
;
300 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
:
301 return MESA_FORMAT_RGBA_DXT3
;
302 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
:
303 return MESA_FORMAT_RGBA_DXT5
;
309 if (ctx
->Extensions
.S3_s3tc
) {
310 switch (internalFormat
) {
313 return MESA_FORMAT_RGB_DXT1
;
316 return MESA_FORMAT_RGBA_DXT3
;
323 if (ctx
->Extensions
.ARB_texture_float
) {
324 switch (internalFormat
) {
325 case GL_ALPHA16F_ARB
:
326 return MESA_FORMAT_ALPHA_FLOAT16
;
327 case GL_ALPHA32F_ARB
:
328 return MESA_FORMAT_ALPHA_FLOAT32
;
329 case GL_LUMINANCE16F_ARB
:
330 return MESA_FORMAT_LUMINANCE_FLOAT16
;
331 case GL_LUMINANCE32F_ARB
:
332 return MESA_FORMAT_LUMINANCE_FLOAT32
;
333 case GL_LUMINANCE_ALPHA16F_ARB
:
334 return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
;
335 case GL_LUMINANCE_ALPHA32F_ARB
:
336 return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
;
337 case GL_INTENSITY16F_ARB
:
338 return MESA_FORMAT_INTENSITY_FLOAT16
;
339 case GL_INTENSITY32F_ARB
:
340 return MESA_FORMAT_INTENSITY_FLOAT32
;
342 return MESA_FORMAT_RGB_FLOAT16
;
344 return MESA_FORMAT_RGB_FLOAT32
;
346 return MESA_FORMAT_RGBA_FLOAT16
;
348 return MESA_FORMAT_RGBA_FLOAT32
;
354 if (ctx
->Extensions
.EXT_packed_depth_stencil
) {
355 switch (internalFormat
) {
356 case GL_DEPTH_STENCIL_EXT
:
357 case GL_DEPTH24_STENCIL8_EXT
:
358 return MESA_FORMAT_Z24_S8
;
364 if (ctx
->Extensions
.ATI_envmap_bumpmap
) {
365 switch (internalFormat
) {
368 return MESA_FORMAT_DUDV8
;
374 if (ctx
->Extensions
.MESA_texture_signed_rgba
) {
375 switch (internalFormat
) {
378 return MESA_FORMAT_SIGNED_RGBA8888
;
385 #if FEATURE_EXT_texture_sRGB
386 if (ctx
->Extensions
.EXT_texture_sRGB
) {
387 switch (internalFormat
) {
390 return MESA_FORMAT_SRGB8
;
391 case GL_SRGB_ALPHA_EXT
:
392 case GL_SRGB8_ALPHA8_EXT
:
393 return MESA_FORMAT_SRGBA8
;
394 case GL_SLUMINANCE_EXT
:
395 case GL_SLUMINANCE8_EXT
:
396 return MESA_FORMAT_SL8
;
397 case GL_SLUMINANCE_ALPHA_EXT
:
398 case GL_SLUMINANCE8_ALPHA8_EXT
:
399 return MESA_FORMAT_SLA8
;
400 case GL_COMPRESSED_SLUMINANCE_EXT
:
401 return MESA_FORMAT_SL8
;
402 case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT
:
403 return MESA_FORMAT_SLA8
;
404 case GL_COMPRESSED_SRGB_EXT
:
405 #if FEATURE_texture_s3tc
406 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
407 return MESA_FORMAT_SRGB_DXT1
;
409 return MESA_FORMAT_SRGB8
;
410 case GL_COMPRESSED_SRGB_ALPHA_EXT
:
411 #if FEATURE_texture_s3tc
412 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
413 return MESA_FORMAT_SRGBA_DXT3
; /* Not srgba_dxt1, see spec */
415 return MESA_FORMAT_SRGBA8
;
416 #if FEATURE_texture_s3tc
417 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
:
418 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
419 return MESA_FORMAT_SRGB_DXT1
;
421 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
:
422 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
423 return MESA_FORMAT_SRGBA_DXT1
;
425 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
:
426 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
427 return MESA_FORMAT_SRGBA_DXT3
;
429 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
:
430 if (ctx
->Extensions
.EXT_texture_compression_s3tc
)
431 return MESA_FORMAT_SRGBA_DXT5
;
438 #endif /* FEATURE_EXT_texture_sRGB */
440 _mesa_problem(ctx
, "unexpected format in _mesa_choose_tex_format()");
441 return MESA_FORMAT_NONE
;
447 * Return datatype and number of components per texel for the given gl_format.
450 _mesa_format_to_type_and_comps(gl_format format
,
451 GLenum
*datatype
, GLuint
*comps
)
454 case MESA_FORMAT_RGBA8888
:
455 case MESA_FORMAT_RGBA8888_REV
:
456 case MESA_FORMAT_ARGB8888
:
457 case MESA_FORMAT_ARGB8888_REV
:
458 *datatype
= CHAN_TYPE
;
461 case MESA_FORMAT_RGB888
:
462 case MESA_FORMAT_BGR888
:
463 *datatype
= GL_UNSIGNED_BYTE
;
466 case MESA_FORMAT_RGB565
:
467 case MESA_FORMAT_RGB565_REV
:
468 *datatype
= GL_UNSIGNED_SHORT_5_6_5
;
472 case MESA_FORMAT_ARGB4444
:
473 case MESA_FORMAT_ARGB4444_REV
:
474 *datatype
= GL_UNSIGNED_SHORT_4_4_4_4
;
478 case MESA_FORMAT_ARGB1555
:
479 case MESA_FORMAT_ARGB1555_REV
:
480 *datatype
= GL_UNSIGNED_SHORT_1_5_5_5_REV
;
484 case MESA_FORMAT_AL88
:
485 case MESA_FORMAT_AL88_REV
:
486 *datatype
= GL_UNSIGNED_BYTE
;
489 case MESA_FORMAT_RGB332
:
490 *datatype
= GL_UNSIGNED_BYTE_3_3_2
;
497 case MESA_FORMAT_CI8
:
498 *datatype
= GL_UNSIGNED_BYTE
;
502 case MESA_FORMAT_YCBCR
:
503 case MESA_FORMAT_YCBCR_REV
:
504 *datatype
= GL_UNSIGNED_SHORT
;
508 case MESA_FORMAT_Z24_S8
:
509 *datatype
= GL_UNSIGNED_INT
;
510 *comps
= 1; /* XXX OK? */
513 case MESA_FORMAT_S8_Z24
:
514 *datatype
= GL_UNSIGNED_INT
;
515 *comps
= 1; /* XXX OK? */
518 case MESA_FORMAT_Z16
:
519 *datatype
= GL_UNSIGNED_SHORT
;
523 case MESA_FORMAT_Z32
:
524 *datatype
= GL_UNSIGNED_INT
;
528 case MESA_FORMAT_DUDV8
:
533 case MESA_FORMAT_SIGNED_RGBA8888
:
534 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
539 #if FEATURE_EXT_texture_sRGB
540 case MESA_FORMAT_SRGB8
:
541 *datatype
= GL_UNSIGNED_BYTE
;
544 case MESA_FORMAT_SRGBA8
:
545 case MESA_FORMAT_SARGB8
:
546 *datatype
= GL_UNSIGNED_BYTE
;
549 case MESA_FORMAT_SL8
:
550 *datatype
= GL_UNSIGNED_BYTE
;
553 case MESA_FORMAT_SLA8
:
554 *datatype
= GL_UNSIGNED_BYTE
;
559 #if FEATURE_texture_fxt1
560 case MESA_FORMAT_RGB_FXT1
:
561 case MESA_FORMAT_RGBA_FXT1
:
563 #if FEATURE_texture_s3tc
564 case MESA_FORMAT_RGB_DXT1
:
565 case MESA_FORMAT_RGBA_DXT1
:
566 case MESA_FORMAT_RGBA_DXT3
:
567 case MESA_FORMAT_RGBA_DXT5
:
568 #if FEATURE_EXT_texture_sRGB
569 case MESA_FORMAT_SRGB_DXT1
:
570 case MESA_FORMAT_SRGBA_DXT1
:
571 case MESA_FORMAT_SRGBA_DXT3
:
572 case MESA_FORMAT_SRGBA_DXT5
:
574 /* XXX generate error instead? */
575 *datatype
= GL_UNSIGNED_BYTE
;
580 case MESA_FORMAT_RGBA
:
581 *datatype
= CHAN_TYPE
;
584 case MESA_FORMAT_RGB
:
585 *datatype
= CHAN_TYPE
;
588 case MESA_FORMAT_LUMINANCE_ALPHA
:
589 *datatype
= CHAN_TYPE
;
592 case MESA_FORMAT_ALPHA
:
593 case MESA_FORMAT_LUMINANCE
:
594 case MESA_FORMAT_INTENSITY
:
595 *datatype
= CHAN_TYPE
;
599 case MESA_FORMAT_RGBA_FLOAT32
:
600 *datatype
= GL_FLOAT
;
603 case MESA_FORMAT_RGBA_FLOAT16
:
604 *datatype
= GL_HALF_FLOAT_ARB
;
607 case MESA_FORMAT_RGB_FLOAT32
:
608 *datatype
= GL_FLOAT
;
611 case MESA_FORMAT_RGB_FLOAT16
:
612 *datatype
= GL_HALF_FLOAT_ARB
;
615 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
616 *datatype
= GL_FLOAT
;
619 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
620 *datatype
= GL_HALF_FLOAT_ARB
;
623 case MESA_FORMAT_ALPHA_FLOAT32
:
624 case MESA_FORMAT_LUMINANCE_FLOAT32
:
625 case MESA_FORMAT_INTENSITY_FLOAT32
:
626 *datatype
= GL_FLOAT
;
629 case MESA_FORMAT_ALPHA_FLOAT16
:
630 case MESA_FORMAT_LUMINANCE_FLOAT16
:
631 case MESA_FORMAT_INTENSITY_FLOAT16
:
632 *datatype
= GL_HALF_FLOAT_ARB
;
637 _mesa_problem(NULL
, "bad format in _mesa_format_to_type_and_comps");
646 * Table to map MESA_FORMAT_ to texel fetch/store funcs.
647 * XXX this is somewhat temporary.
651 FetchTexelFuncF Fetch1D
;
652 FetchTexelFuncF Fetch2D
;
653 FetchTexelFuncF Fetch3D
;
654 StoreTexelFunc StoreTexel
;
656 texfetch_funcs
[MESA_FORMAT_COUNT
] =
660 fetch_texel_1d_f_rgba
,
661 fetch_texel_2d_f_rgba
,
662 fetch_texel_3d_f_rgba
,
667 fetch_texel_1d_f_rgb
,
668 fetch_texel_2d_f_rgb
,
669 fetch_texel_3d_f_rgb
,
674 fetch_texel_1d_f_alpha
,
675 fetch_texel_2d_f_alpha
,
676 fetch_texel_3d_f_alpha
,
680 MESA_FORMAT_LUMINANCE
,
681 fetch_texel_1d_f_luminance
,
682 fetch_texel_2d_f_luminance
,
683 fetch_texel_3d_f_luminance
,
684 store_texel_luminance
687 MESA_FORMAT_LUMINANCE_ALPHA
,
688 fetch_texel_1d_f_luminance_alpha
,
689 fetch_texel_2d_f_luminance_alpha
,
690 fetch_texel_3d_f_luminance_alpha
,
691 store_texel_luminance_alpha
694 MESA_FORMAT_INTENSITY
,
695 fetch_texel_1d_f_intensity
,
696 fetch_texel_2d_f_intensity
,
697 fetch_texel_3d_f_intensity
,
698 store_texel_intensity
702 fetch_texel_1d_srgb8
,
703 fetch_texel_2d_srgb8
,
704 fetch_texel_3d_srgb8
,
709 fetch_texel_1d_srgba8
,
710 fetch_texel_2d_srgba8
,
711 fetch_texel_3d_srgba8
,
716 fetch_texel_1d_sargb8
,
717 fetch_texel_2d_sargb8
,
718 fetch_texel_3d_sargb8
,
736 MESA_FORMAT_RGB_FXT1
,
738 _mesa_fetch_texel_2d_f_rgb_fxt1
,
743 MESA_FORMAT_RGBA_FXT1
,
745 _mesa_fetch_texel_2d_f_rgba_fxt1
,
750 MESA_FORMAT_RGB_DXT1
,
752 _mesa_fetch_texel_2d_f_rgb_dxt1
,
757 MESA_FORMAT_RGBA_DXT1
,
759 _mesa_fetch_texel_2d_f_rgba_dxt1
,
764 MESA_FORMAT_RGBA_DXT3
,
766 _mesa_fetch_texel_2d_f_rgba_dxt3
,
771 MESA_FORMAT_RGBA_DXT5
,
773 _mesa_fetch_texel_2d_f_rgba_dxt5
,
778 MESA_FORMAT_SRGB_DXT1
,
780 _mesa_fetch_texel_2d_f_srgb_dxt1
,
785 MESA_FORMAT_SRGBA_DXT1
,
787 _mesa_fetch_texel_2d_f_srgba_dxt1
,
792 MESA_FORMAT_SRGBA_DXT3
,
794 _mesa_fetch_texel_2d_f_srgba_dxt3
,
799 MESA_FORMAT_SRGBA_DXT5
,
801 _mesa_fetch_texel_2d_f_srgba_dxt5
,
806 MESA_FORMAT_RGBA_FLOAT32
,
807 fetch_texel_1d_f_rgba_f32
,
808 fetch_texel_2d_f_rgba_f32
,
809 fetch_texel_3d_f_rgba_f32
,
813 MESA_FORMAT_RGBA_FLOAT16
,
814 fetch_texel_1d_f_rgba_f16
,
815 fetch_texel_2d_f_rgba_f16
,
816 fetch_texel_3d_f_rgba_f16
,
820 MESA_FORMAT_RGB_FLOAT32
,
821 fetch_texel_1d_f_rgb_f32
,
822 fetch_texel_2d_f_rgb_f32
,
823 fetch_texel_3d_f_rgb_f32
,
827 MESA_FORMAT_RGB_FLOAT16
,
828 fetch_texel_1d_f_rgb_f16
,
829 fetch_texel_2d_f_rgb_f16
,
830 fetch_texel_3d_f_rgb_f16
,
834 MESA_FORMAT_ALPHA_FLOAT32
,
835 fetch_texel_1d_f_alpha_f32
,
836 fetch_texel_2d_f_alpha_f32
,
837 fetch_texel_3d_f_alpha_f32
,
838 store_texel_alpha_f32
841 MESA_FORMAT_ALPHA_FLOAT16
,
842 fetch_texel_1d_f_alpha_f16
,
843 fetch_texel_2d_f_alpha_f16
,
844 fetch_texel_3d_f_alpha_f16
,
845 store_texel_alpha_f16
848 MESA_FORMAT_LUMINANCE_FLOAT32
,
849 fetch_texel_1d_f_luminance_f32
,
850 fetch_texel_2d_f_luminance_f32
,
851 fetch_texel_3d_f_luminance_f32
,
852 store_texel_luminance_f32
855 MESA_FORMAT_LUMINANCE_FLOAT16
,
856 fetch_texel_1d_f_luminance_f16
,
857 fetch_texel_2d_f_luminance_f16
,
858 fetch_texel_3d_f_luminance_f16
,
859 store_texel_luminance_f16
862 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
,
863 fetch_texel_1d_f_luminance_alpha_f32
,
864 fetch_texel_2d_f_luminance_alpha_f32
,
865 fetch_texel_3d_f_luminance_alpha_f32
,
866 store_texel_luminance_alpha_f32
869 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
,
870 fetch_texel_1d_f_luminance_alpha_f16
,
871 fetch_texel_2d_f_luminance_alpha_f16
,
872 fetch_texel_3d_f_luminance_alpha_f16
,
873 store_texel_luminance_alpha_f16
876 MESA_FORMAT_INTENSITY_FLOAT32
,
877 fetch_texel_1d_f_intensity_f32
,
878 fetch_texel_2d_f_intensity_f32
,
879 fetch_texel_3d_f_intensity_f32
,
880 store_texel_intensity_f32
883 MESA_FORMAT_INTENSITY_FLOAT16
,
884 fetch_texel_1d_f_intensity_f16
,
885 fetch_texel_2d_f_intensity_f16
,
886 fetch_texel_3d_f_intensity_f16
,
887 store_texel_intensity_f16
891 fetch_texel_1d_dudv8
,
892 fetch_texel_2d_dudv8
,
893 fetch_texel_3d_dudv8
,
897 MESA_FORMAT_SIGNED_RGBA8888
,
898 fetch_texel_1d_signed_rgba8888
,
899 fetch_texel_2d_signed_rgba8888
,
900 fetch_texel_3d_signed_rgba8888
,
901 store_texel_signed_rgba8888
904 MESA_FORMAT_SIGNED_RGBA8888_REV
,
905 fetch_texel_1d_signed_rgba8888_rev
,
906 fetch_texel_2d_signed_rgba8888_rev
,
907 fetch_texel_3d_signed_rgba8888_rev
,
908 store_texel_signed_rgba8888_rev
911 MESA_FORMAT_RGBA8888
,
912 fetch_texel_1d_f_rgba8888
,
913 fetch_texel_2d_f_rgba8888
,
914 fetch_texel_3d_f_rgba8888
,
918 MESA_FORMAT_RGBA8888_REV
,
919 fetch_texel_1d_f_rgba8888_rev
,
920 fetch_texel_2d_f_rgba8888_rev
,
921 fetch_texel_3d_f_rgba8888_rev
,
922 store_texel_rgba8888_rev
925 MESA_FORMAT_ARGB8888
,
926 fetch_texel_1d_f_argb8888
,
927 fetch_texel_2d_f_argb8888
,
928 fetch_texel_3d_f_argb8888
,
932 MESA_FORMAT_ARGB8888_REV
,
933 fetch_texel_1d_f_argb8888_rev
,
934 fetch_texel_2d_f_argb8888_rev
,
935 fetch_texel_3d_f_argb8888_rev
,
936 store_texel_argb8888_rev
940 fetch_texel_1d_f_rgb888
,
941 fetch_texel_2d_f_rgb888
,
942 fetch_texel_3d_f_rgb888
,
947 fetch_texel_1d_f_bgr888
,
948 fetch_texel_2d_f_bgr888
,
949 fetch_texel_3d_f_bgr888
,
954 fetch_texel_1d_f_rgb565
,
955 fetch_texel_2d_f_rgb565
,
956 fetch_texel_3d_f_rgb565
,
960 MESA_FORMAT_RGB565_REV
,
961 fetch_texel_1d_f_rgb565_rev
,
962 fetch_texel_2d_f_rgb565_rev
,
963 fetch_texel_3d_f_rgb565_rev
,
964 store_texel_rgb565_rev
967 MESA_FORMAT_RGBA4444
,
968 fetch_texel_1d_f_rgba4444
,
969 fetch_texel_2d_f_rgba4444
,
970 fetch_texel_3d_f_rgba4444
,
974 MESA_FORMAT_ARGB4444
,
975 fetch_texel_1d_f_argb4444
,
976 fetch_texel_2d_f_argb4444
,
977 fetch_texel_3d_f_argb4444
,
981 MESA_FORMAT_ARGB4444_REV
,
982 fetch_texel_1d_f_argb4444_rev
,
983 fetch_texel_2d_f_argb4444_rev
,
984 fetch_texel_3d_f_argb4444_rev
,
985 store_texel_argb4444_rev
988 MESA_FORMAT_RGBA5551
,
989 fetch_texel_1d_f_rgba5551
,
990 fetch_texel_2d_f_rgba5551
,
991 fetch_texel_3d_f_rgba5551
,
995 MESA_FORMAT_ARGB1555
,
996 fetch_texel_1d_f_argb1555
,
997 fetch_texel_2d_f_argb1555
,
998 fetch_texel_3d_f_argb1555
,
1002 MESA_FORMAT_ARGB1555_REV
,
1003 fetch_texel_1d_f_argb1555_rev
,
1004 fetch_texel_2d_f_argb1555_rev
,
1005 fetch_texel_3d_f_argb1555_rev
,
1006 store_texel_argb1555_rev
1010 fetch_texel_1d_f_al88
,
1011 fetch_texel_2d_f_al88
,
1012 fetch_texel_3d_f_al88
,
1016 MESA_FORMAT_AL88_REV
,
1017 fetch_texel_1d_f_al88_rev
,
1018 fetch_texel_2d_f_al88_rev
,
1019 fetch_texel_3d_f_al88_rev
,
1020 store_texel_al88_rev
1024 fetch_texel_1d_f_rgb332
,
1025 fetch_texel_2d_f_rgb332
,
1026 fetch_texel_3d_f_rgb332
,
1031 fetch_texel_1d_f_a8
,
1032 fetch_texel_2d_f_a8
,
1033 fetch_texel_3d_f_a8
,
1038 fetch_texel_1d_f_l8
,
1039 fetch_texel_2d_f_l8
,
1040 fetch_texel_3d_f_l8
,
1045 fetch_texel_1d_f_i8
,
1046 fetch_texel_2d_f_i8
,
1047 fetch_texel_3d_f_i8
,
1052 fetch_texel_1d_f_ci8
,
1053 fetch_texel_2d_f_ci8
,
1054 fetch_texel_3d_f_ci8
,
1059 fetch_texel_1d_f_ycbcr
,
1060 fetch_texel_2d_f_ycbcr
,
1061 fetch_texel_3d_f_ycbcr
,
1065 MESA_FORMAT_YCBCR_REV
,
1066 fetch_texel_1d_f_ycbcr_rev
,
1067 fetch_texel_2d_f_ycbcr_rev
,
1068 fetch_texel_3d_f_ycbcr_rev
,
1069 store_texel_ycbcr_rev
1073 fetch_texel_1d_f_z24_s8
,
1074 fetch_texel_2d_f_z24_s8
,
1075 fetch_texel_3d_f_z24_s8
,
1080 fetch_texel_1d_f_s8_z24
,
1081 fetch_texel_2d_f_s8_z24
,
1082 fetch_texel_3d_f_s8_z24
,
1087 fetch_texel_1d_f_z16
,
1088 fetch_texel_2d_f_z16
,
1089 fetch_texel_3d_f_z16
,
1094 fetch_texel_1d_f_z32
,
1095 fetch_texel_2d_f_z32
,
1096 fetch_texel_3d_f_z32
,
1103 _mesa_get_texel_fetch_func(GLuint format
, GLuint dims
)
1107 /* XXX replace loop with direct table lookup */
1108 for (i
= 0; i
< MESA_FORMAT_COUNT
; i
++) {
1109 if (texfetch_funcs
[i
].Name
== format
) {
1112 f
= texfetch_funcs
[i
].Fetch1D
;
1115 f
= texfetch_funcs
[i
].Fetch2D
;
1118 f
= texfetch_funcs
[i
].Fetch3D
;
1122 f
= fetch_null_texelf
;
1131 _mesa_get_texel_store_func(GLuint format
)
1134 /* XXX replace loop with direct table lookup */
1135 for (i
= 0; i
< MESA_FORMAT_COUNT
; i
++) {
1136 if (texfetch_funcs
[i
].Name
== format
) {
1137 if (texfetch_funcs
[i
].StoreTexel
)
1138 return texfetch_funcs
[i
].StoreTexel
;
1140 return store_null_texel
;