2 * Mesa 3-D graphics library
5 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
6 * Copyright (c) 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 * 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.
30 * Texel fetch/store functions
32 * \author Gareth Hughes
36 #include "main/colormac.h"
37 #include "main/macros.h"
38 #include "main/texcompress.h"
39 #include "main/texcompress_fxt1.h"
40 #include "main/texcompress_s3tc.h"
41 #include "main/texcompress_rgtc.h"
42 #include "main/texcompress_etc.h"
43 #include "main/teximage.h"
44 #include "main/samplerobj.h"
45 #include "s_context.h"
46 #include "s_texfetch.h"
47 #include "../../gallium/auxiliary/util/u_format_rgb9e5.h"
48 #include "../../gallium/auxiliary/util/u_format_r11g11b10f.h"
52 * Convert an 8-bit sRGB value from non-linear space to a
53 * linear RGB value in [0, 1].
54 * Implemented with a 256-entry lookup table.
57 nonlinear_to_linear(GLubyte cs8
)
59 static GLfloat table
[256];
60 static GLboolean tableReady
= GL_FALSE
;
62 /* compute lookup table now */
64 for (i
= 0; i
< 256; i
++) {
65 const GLfloat cs
= UBYTE_TO_FLOAT(i
);
67 table
[i
] = cs
/ 12.92f
;
70 table
[i
] = (GLfloat
) pow((cs
+ 0.055) / 1.055, 2.4);
80 /* Texel fetch routines for all supported formats
83 #include "s_texfetch_tmp.h"
86 #include "s_texfetch_tmp.h"
89 #include "s_texfetch_tmp.h"
92 * Null texel fetch function.
94 * Have to have this so the FetchTexel function pointer is never NULL.
96 static void fetch_null_texelf( const struct swrast_texture_image
*texImage
,
97 GLint i
, GLint j
, GLint k
, GLfloat
*texel
)
99 (void) texImage
; (void) i
; (void) j
; (void) k
;
104 _mesa_warning(NULL
, "fetch_null_texelf() called!");
109 * Table to map MESA_FORMAT_ to texel fetch/store funcs.
110 * XXX this is somewhat temporary.
114 FetchTexelFunc Fetch1D
;
115 FetchTexelFunc Fetch2D
;
116 FetchTexelFunc Fetch3D
;
128 MESA_FORMAT_RGBA8888
,
129 fetch_texel_1d_f_rgba8888
,
130 fetch_texel_2d_f_rgba8888
,
131 fetch_texel_3d_f_rgba8888
134 MESA_FORMAT_RGBA8888_REV
,
135 fetch_texel_1d_f_rgba8888_rev
,
136 fetch_texel_2d_f_rgba8888_rev
,
137 fetch_texel_3d_f_rgba8888_rev
140 MESA_FORMAT_ARGB8888
,
141 fetch_texel_1d_f_argb8888
,
142 fetch_texel_2d_f_argb8888
,
143 fetch_texel_3d_f_argb8888
146 MESA_FORMAT_ARGB8888_REV
,
147 fetch_texel_1d_f_argb8888_rev
,
148 fetch_texel_2d_f_argb8888_rev
,
149 fetch_texel_3d_f_argb8888_rev
152 MESA_FORMAT_RGBX8888
,
153 fetch_texel_1d_f_rgbx8888
,
154 fetch_texel_2d_f_rgbx8888
,
155 fetch_texel_3d_f_rgbx8888
158 MESA_FORMAT_RGBX8888_REV
,
159 fetch_texel_1d_f_rgbx8888_rev
,
160 fetch_texel_2d_f_rgbx8888_rev
,
161 fetch_texel_3d_f_rgbx8888_rev
164 MESA_FORMAT_XRGB8888
,
165 fetch_texel_1d_f_xrgb8888
,
166 fetch_texel_2d_f_xrgb8888
,
167 fetch_texel_3d_f_xrgb8888
170 MESA_FORMAT_XRGB8888_REV
,
171 fetch_texel_1d_f_xrgb8888_rev
,
172 fetch_texel_2d_f_xrgb8888_rev
,
173 fetch_texel_3d_f_xrgb8888_rev
177 fetch_texel_1d_f_rgb888
,
178 fetch_texel_2d_f_rgb888
,
179 fetch_texel_3d_f_rgb888
183 fetch_texel_1d_f_bgr888
,
184 fetch_texel_2d_f_bgr888
,
185 fetch_texel_3d_f_bgr888
189 fetch_texel_1d_f_rgb565
,
190 fetch_texel_2d_f_rgb565
,
191 fetch_texel_3d_f_rgb565
194 MESA_FORMAT_RGB565_REV
,
195 fetch_texel_1d_f_rgb565_rev
,
196 fetch_texel_2d_f_rgb565_rev
,
197 fetch_texel_3d_f_rgb565_rev
200 MESA_FORMAT_ARGB4444
,
201 fetch_texel_1d_f_argb4444
,
202 fetch_texel_2d_f_argb4444
,
203 fetch_texel_3d_f_argb4444
206 MESA_FORMAT_ARGB4444_REV
,
207 fetch_texel_1d_f_argb4444_rev
,
208 fetch_texel_2d_f_argb4444_rev
,
209 fetch_texel_3d_f_argb4444_rev
212 MESA_FORMAT_RGBA5551
,
213 fetch_texel_1d_f_rgba5551
,
214 fetch_texel_2d_f_rgba5551
,
215 fetch_texel_3d_f_rgba5551
218 MESA_FORMAT_ARGB1555
,
219 fetch_texel_1d_f_argb1555
,
220 fetch_texel_2d_f_argb1555
,
221 fetch_texel_3d_f_argb1555
224 MESA_FORMAT_ARGB1555_REV
,
225 fetch_texel_1d_f_argb1555_rev
,
226 fetch_texel_2d_f_argb1555_rev
,
227 fetch_texel_3d_f_argb1555_rev
231 fetch_texel_1d_f_al44
,
232 fetch_texel_2d_f_al44
,
233 fetch_texel_3d_f_al44
237 fetch_texel_1d_f_al88
,
238 fetch_texel_2d_f_al88
,
239 fetch_texel_3d_f_al88
242 MESA_FORMAT_AL88_REV
,
243 fetch_texel_1d_f_al88_rev
,
244 fetch_texel_2d_f_al88_rev
,
245 fetch_texel_3d_f_al88_rev
249 fetch_texel_1d_f_al1616
,
250 fetch_texel_2d_f_al1616
,
251 fetch_texel_3d_f_al1616
254 MESA_FORMAT_AL1616_REV
,
255 fetch_texel_1d_f_al1616_rev
,
256 fetch_texel_2d_f_al1616_rev
,
257 fetch_texel_3d_f_al1616_rev
261 fetch_texel_1d_f_rgb332
,
262 fetch_texel_2d_f_rgb332
,
263 fetch_texel_3d_f_rgb332
273 fetch_texel_1d_f_a16
,
274 fetch_texel_2d_f_a16
,
285 fetch_texel_1d_f_l16
,
286 fetch_texel_2d_f_l16
,
297 fetch_texel_1d_f_i16
,
298 fetch_texel_2d_f_i16
,
303 fetch_texel_1d_f_ycbcr
,
304 fetch_texel_2d_f_ycbcr
,
305 fetch_texel_3d_f_ycbcr
308 MESA_FORMAT_YCBCR_REV
,
309 fetch_texel_1d_f_ycbcr_rev
,
310 fetch_texel_2d_f_ycbcr_rev
,
311 fetch_texel_3d_f_ycbcr_rev
321 fetch_texel_1d_f_gr88
,
322 fetch_texel_2d_f_gr88
,
323 fetch_texel_3d_f_gr88
327 fetch_texel_1d_f_rg88
,
328 fetch_texel_2d_f_rg88
,
329 fetch_texel_3d_f_rg88
333 fetch_texel_1d_f_r16
,
334 fetch_texel_2d_f_r16
,
339 fetch_texel_1d_f_rg1616
,
340 fetch_texel_2d_f_rg1616
,
341 fetch_texel_3d_f_rg1616
344 MESA_FORMAT_RG1616_REV
,
345 fetch_texel_1d_f_rg1616_rev
,
346 fetch_texel_2d_f_rg1616_rev
,
347 fetch_texel_3d_f_rg1616_rev
350 MESA_FORMAT_ARGB2101010
,
351 fetch_texel_1d_f_argb2101010
,
352 fetch_texel_2d_f_argb2101010
,
353 fetch_texel_3d_f_argb2101010
357 fetch_texel_1d_f_z24_s8
,
358 fetch_texel_2d_f_z24_s8
,
359 fetch_texel_3d_f_z24_s8
363 fetch_texel_1d_f_s8_z24
,
364 fetch_texel_2d_f_s8_z24
,
365 fetch_texel_3d_f_s8_z24
369 fetch_texel_1d_f_z16
,
370 fetch_texel_2d_f_z16
,
375 fetch_texel_1d_f_s8_z24
,
376 fetch_texel_2d_f_s8_z24
,
377 fetch_texel_3d_f_s8_z24
381 fetch_texel_1d_f_z24_s8
,
382 fetch_texel_2d_f_z24_s8
,
383 fetch_texel_3d_f_z24_s8
387 fetch_texel_1d_f_z32
,
388 fetch_texel_2d_f_z32
,
399 fetch_texel_1d_srgb8
,
400 fetch_texel_2d_srgb8
,
405 fetch_texel_1d_srgba8
,
406 fetch_texel_2d_srgba8
,
407 fetch_texel_3d_srgba8
411 fetch_texel_1d_sargb8
,
412 fetch_texel_2d_sargb8
,
413 fetch_texel_3d_sargb8
428 MESA_FORMAT_SRGB_DXT1
,
429 _mesa_fetch_texel_srgb_dxt1
,
430 _mesa_fetch_texel_srgb_dxt1
,
431 _mesa_fetch_texel_srgb_dxt1
434 MESA_FORMAT_SRGBA_DXT1
,
435 _mesa_fetch_texel_srgba_dxt1
,
436 _mesa_fetch_texel_srgba_dxt1
,
437 _mesa_fetch_texel_srgba_dxt1
440 MESA_FORMAT_SRGBA_DXT3
,
441 _mesa_fetch_texel_srgba_dxt3
,
442 _mesa_fetch_texel_srgba_dxt3
,
443 _mesa_fetch_texel_srgba_dxt3
446 MESA_FORMAT_SRGBA_DXT5
,
447 _mesa_fetch_texel_srgba_dxt5
,
448 _mesa_fetch_texel_srgba_dxt5
,
449 _mesa_fetch_texel_srgba_dxt5
453 MESA_FORMAT_RGB_FXT1
,
455 _mesa_fetch_texel_2d_f_rgb_fxt1
,
459 MESA_FORMAT_RGBA_FXT1
,
461 _mesa_fetch_texel_2d_f_rgba_fxt1
,
465 MESA_FORMAT_RGB_DXT1
,
466 _mesa_fetch_texel_rgb_dxt1
,
467 _mesa_fetch_texel_rgb_dxt1
,
468 _mesa_fetch_texel_rgb_dxt1
471 MESA_FORMAT_RGBA_DXT1
,
472 _mesa_fetch_texel_rgba_dxt1
,
473 _mesa_fetch_texel_rgba_dxt1
,
474 _mesa_fetch_texel_rgba_dxt1
477 MESA_FORMAT_RGBA_DXT3
,
478 _mesa_fetch_texel_rgba_dxt3
,
479 _mesa_fetch_texel_rgba_dxt3
,
480 _mesa_fetch_texel_rgba_dxt3
483 MESA_FORMAT_RGBA_DXT5
,
484 _mesa_fetch_texel_rgba_dxt5
,
485 _mesa_fetch_texel_rgba_dxt5
,
486 _mesa_fetch_texel_rgba_dxt5
489 MESA_FORMAT_RGBA_FLOAT32
,
490 fetch_texel_1d_f_rgba_f32
,
491 fetch_texel_2d_f_rgba_f32
,
492 fetch_texel_3d_f_rgba_f32
495 MESA_FORMAT_RGBA_FLOAT16
,
496 fetch_texel_1d_f_rgba_f16
,
497 fetch_texel_2d_f_rgba_f16
,
498 fetch_texel_3d_f_rgba_f16
501 MESA_FORMAT_RGB_FLOAT32
,
502 fetch_texel_1d_f_rgb_f32
,
503 fetch_texel_2d_f_rgb_f32
,
504 fetch_texel_3d_f_rgb_f32
507 MESA_FORMAT_RGB_FLOAT16
,
508 fetch_texel_1d_f_rgb_f16
,
509 fetch_texel_2d_f_rgb_f16
,
510 fetch_texel_3d_f_rgb_f16
513 MESA_FORMAT_ALPHA_FLOAT32
,
514 fetch_texel_1d_f_alpha_f32
,
515 fetch_texel_2d_f_alpha_f32
,
516 fetch_texel_3d_f_alpha_f32
519 MESA_FORMAT_ALPHA_FLOAT16
,
520 fetch_texel_1d_f_alpha_f16
,
521 fetch_texel_2d_f_alpha_f16
,
522 fetch_texel_3d_f_alpha_f16
525 MESA_FORMAT_LUMINANCE_FLOAT32
,
526 fetch_texel_1d_f_luminance_f32
,
527 fetch_texel_2d_f_luminance_f32
,
528 fetch_texel_3d_f_luminance_f32
531 MESA_FORMAT_LUMINANCE_FLOAT16
,
532 fetch_texel_1d_f_luminance_f16
,
533 fetch_texel_2d_f_luminance_f16
,
534 fetch_texel_3d_f_luminance_f16
537 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
,
538 fetch_texel_1d_f_luminance_alpha_f32
,
539 fetch_texel_2d_f_luminance_alpha_f32
,
540 fetch_texel_3d_f_luminance_alpha_f32
543 MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
,
544 fetch_texel_1d_f_luminance_alpha_f16
,
545 fetch_texel_2d_f_luminance_alpha_f16
,
546 fetch_texel_3d_f_luminance_alpha_f16
549 MESA_FORMAT_INTENSITY_FLOAT32
,
550 fetch_texel_1d_f_intensity_f32
,
551 fetch_texel_2d_f_intensity_f32
,
552 fetch_texel_3d_f_intensity_f32
555 MESA_FORMAT_INTENSITY_FLOAT16
,
556 fetch_texel_1d_f_intensity_f16
,
557 fetch_texel_2d_f_intensity_f16
,
558 fetch_texel_3d_f_intensity_f16
561 MESA_FORMAT_R_FLOAT32
,
562 fetch_texel_1d_f_r_f32
,
563 fetch_texel_2d_f_r_f32
,
564 fetch_texel_3d_f_r_f32
567 MESA_FORMAT_R_FLOAT16
,
568 fetch_texel_1d_f_r_f16
,
569 fetch_texel_2d_f_r_f16
,
570 fetch_texel_3d_f_r_f16
573 MESA_FORMAT_RG_FLOAT32
,
574 fetch_texel_1d_f_rg_f32
,
575 fetch_texel_2d_f_rg_f32
,
576 fetch_texel_3d_f_rg_f32
579 MESA_FORMAT_RG_FLOAT16
,
580 fetch_texel_1d_f_rg_f16
,
581 fetch_texel_2d_f_rg_f16
,
582 fetch_texel_3d_f_rg_f16
586 MESA_FORMAT_ALPHA_UINT8
,
593 MESA_FORMAT_ALPHA_UINT16
,
600 MESA_FORMAT_ALPHA_UINT32
,
607 MESA_FORMAT_ALPHA_INT8
,
614 MESA_FORMAT_ALPHA_INT16
,
621 MESA_FORMAT_ALPHA_INT32
,
629 MESA_FORMAT_INTENSITY_UINT8
,
636 MESA_FORMAT_INTENSITY_UINT16
,
643 MESA_FORMAT_INTENSITY_UINT32
,
650 MESA_FORMAT_INTENSITY_INT8
,
657 MESA_FORMAT_INTENSITY_INT16
,
664 MESA_FORMAT_INTENSITY_INT32
,
672 MESA_FORMAT_LUMINANCE_UINT8
,
679 MESA_FORMAT_LUMINANCE_UINT16
,
686 MESA_FORMAT_LUMINANCE_UINT32
,
693 MESA_FORMAT_LUMINANCE_INT8
,
700 MESA_FORMAT_LUMINANCE_INT16
,
707 MESA_FORMAT_LUMINANCE_INT32
,
715 MESA_FORMAT_LUMINANCE_ALPHA_UINT8
,
722 MESA_FORMAT_LUMINANCE_ALPHA_UINT16
,
729 MESA_FORMAT_LUMINANCE_ALPHA_UINT32
,
736 MESA_FORMAT_LUMINANCE_ALPHA_INT8
,
743 MESA_FORMAT_LUMINANCE_ALPHA_INT16
,
750 MESA_FORMAT_LUMINANCE_ALPHA_INT32
,
772 MESA_FORMAT_RGB_INT8
,
778 /* non-normalized, signed int */
780 MESA_FORMAT_RGBA_INT8
,
781 fetch_texel_1d_rgba_int8
,
782 fetch_texel_2d_rgba_int8
,
783 fetch_texel_3d_rgba_int8
792 MESA_FORMAT_RG_INT16
,
798 MESA_FORMAT_RGB_INT16
,
804 MESA_FORMAT_RGBA_INT16
,
805 fetch_texel_1d_rgba_int16
,
806 fetch_texel_2d_rgba_int16
,
807 fetch_texel_3d_rgba_int16
816 MESA_FORMAT_RG_INT32
,
822 MESA_FORMAT_RGB_INT32
,
828 MESA_FORMAT_RGBA_INT32
,
829 fetch_texel_1d_rgba_int32
,
830 fetch_texel_2d_rgba_int32
,
831 fetch_texel_3d_rgba_int32
834 /* non-normalized, unsigned int */
842 MESA_FORMAT_RG_UINT8
,
848 MESA_FORMAT_RGB_UINT8
,
854 MESA_FORMAT_RGBA_UINT8
,
855 fetch_texel_1d_rgba_uint8
,
856 fetch_texel_2d_rgba_uint8
,
857 fetch_texel_3d_rgba_uint8
860 MESA_FORMAT_R_UINT16
,
866 MESA_FORMAT_RG_UINT16
,
872 MESA_FORMAT_RGB_UINT16
,
878 MESA_FORMAT_RGBA_UINT16
,
879 fetch_texel_1d_rgba_uint16
,
880 fetch_texel_2d_rgba_uint16
,
881 fetch_texel_3d_rgba_uint16
884 MESA_FORMAT_R_UINT32
,
890 MESA_FORMAT_RG_UINT32
,
896 MESA_FORMAT_RGB_UINT32
,
902 MESA_FORMAT_RGBA_UINT32
,
903 fetch_texel_1d_rgba_uint32
,
904 fetch_texel_2d_rgba_uint32
,
905 fetch_texel_3d_rgba_uint32
911 fetch_texel_1d_dudv8
,
912 fetch_texel_2d_dudv8
,
916 /* signed, normalized */
918 MESA_FORMAT_SIGNED_R8
,
919 fetch_texel_1d_signed_r8
,
920 fetch_texel_2d_signed_r8
,
921 fetch_texel_3d_signed_r8
924 MESA_FORMAT_SIGNED_RG88_REV
,
925 fetch_texel_1d_signed_rg88_rev
,
926 fetch_texel_2d_signed_rg88_rev
,
927 fetch_texel_3d_signed_rg88_rev
930 MESA_FORMAT_SIGNED_RGBX8888
,
931 fetch_texel_1d_signed_rgbx8888
,
932 fetch_texel_2d_signed_rgbx8888
,
933 fetch_texel_3d_signed_rgbx8888
936 MESA_FORMAT_SIGNED_RGBA8888
,
937 fetch_texel_1d_signed_rgba8888
,
938 fetch_texel_2d_signed_rgba8888
,
939 fetch_texel_3d_signed_rgba8888
942 MESA_FORMAT_SIGNED_RGBA8888_REV
,
943 fetch_texel_1d_signed_rgba8888_rev
,
944 fetch_texel_2d_signed_rgba8888_rev
,
945 fetch_texel_3d_signed_rgba8888_rev
948 MESA_FORMAT_SIGNED_R16
,
949 fetch_texel_1d_signed_r16
,
950 fetch_texel_2d_signed_r16
,
951 fetch_texel_3d_signed_r16
954 MESA_FORMAT_SIGNED_GR1616
,
955 fetch_texel_1d_signed_rg1616
,
956 fetch_texel_2d_signed_rg1616
,
957 fetch_texel_3d_signed_rg1616
960 MESA_FORMAT_SIGNED_RGB_16
,
961 fetch_texel_1d_signed_rgb_16
,
962 fetch_texel_2d_signed_rgb_16
,
963 fetch_texel_3d_signed_rgb_16
966 MESA_FORMAT_SIGNED_RGBA_16
,
967 fetch_texel_1d_signed_rgba_16
,
968 fetch_texel_2d_signed_rgba_16
,
969 fetch_texel_3d_signed_rgba_16
973 fetch_texel_1d_rgba_16
,
974 fetch_texel_2d_rgba_16
,
975 fetch_texel_3d_rgba_16
978 MESA_FORMAT_RED_RGTC1
,
979 _mesa_fetch_texel_red_rgtc1
,
980 _mesa_fetch_texel_red_rgtc1
,
981 _mesa_fetch_texel_red_rgtc1
984 MESA_FORMAT_SIGNED_RED_RGTC1
,
985 _mesa_fetch_texel_signed_red_rgtc1
,
986 _mesa_fetch_texel_signed_red_rgtc1
,
987 _mesa_fetch_texel_signed_red_rgtc1
990 MESA_FORMAT_RG_RGTC2
,
991 _mesa_fetch_texel_rg_rgtc2
,
992 _mesa_fetch_texel_rg_rgtc2
,
993 _mesa_fetch_texel_rg_rgtc2
996 MESA_FORMAT_SIGNED_RG_RGTC2
,
997 _mesa_fetch_texel_signed_rg_rgtc2
,
998 _mesa_fetch_texel_signed_rg_rgtc2
,
999 _mesa_fetch_texel_signed_rg_rgtc2
1002 MESA_FORMAT_L_LATC1
,
1003 _mesa_fetch_texel_l_latc1
,
1004 _mesa_fetch_texel_l_latc1
,
1005 _mesa_fetch_texel_l_latc1
1008 MESA_FORMAT_SIGNED_L_LATC1
,
1009 _mesa_fetch_texel_signed_l_latc1
,
1010 _mesa_fetch_texel_signed_l_latc1
,
1011 _mesa_fetch_texel_signed_l_latc1
1014 MESA_FORMAT_LA_LATC2
,
1015 _mesa_fetch_texel_la_latc2
,
1016 _mesa_fetch_texel_la_latc2
,
1017 _mesa_fetch_texel_la_latc2
1020 MESA_FORMAT_SIGNED_LA_LATC2
,
1021 _mesa_fetch_texel_signed_la_latc2
,
1022 _mesa_fetch_texel_signed_la_latc2
,
1023 _mesa_fetch_texel_signed_la_latc2
1026 MESA_FORMAT_ETC1_RGB8
,
1028 _mesa_fetch_texel_2d_f_etc1_rgb8
,
1032 MESA_FORMAT_ETC2_RGB8
,
1034 _mesa_fetch_texel_2d_f_etc2_rgb8
,
1038 MESA_FORMAT_ETC2_SRGB8
,
1040 _mesa_fetch_texel_2d_f_etc2_srgb8
,
1044 MESA_FORMAT_ETC2_RGBA8_EAC
,
1046 _mesa_fetch_texel_2d_f_etc2_rgba8_eac
,
1050 MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC
,
1052 _mesa_fetch_texel_2d_f_etc2_srgb8_alpha8_eac
,
1056 MESA_FORMAT_ETC2_R11_EAC
,
1058 _mesa_fetch_texel_2d_f_etc2_r11_eac
,
1062 MESA_FORMAT_ETC2_RG11_EAC
,
1064 _mesa_fetch_texel_2d_f_etc2_rg11_eac
,
1068 MESA_FORMAT_ETC2_SIGNED_R11_EAC
,
1070 _mesa_fetch_texel_2d_f_etc2_signed_r11_eac
,
1074 MESA_FORMAT_ETC2_SIGNED_RG11_EAC
,
1076 _mesa_fetch_texel_2d_f_etc2_signed_rg11_eac
,
1080 MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
,
1082 NULL
/* _mesa_fetch_texel_2d_f_etc2_rgb8_punchthrough_alpha1 -- not implemented yet */,
1086 MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1
,
1088 NULL
/* _mesa_fetch_texel_2d_f_etc2_srgb8_punchthrough_alpha1 -- not implemented yet */,
1092 MESA_FORMAT_SIGNED_A8
,
1093 fetch_texel_1d_signed_a8
,
1094 fetch_texel_2d_signed_a8
,
1095 fetch_texel_3d_signed_a8
1098 MESA_FORMAT_SIGNED_L8
,
1099 fetch_texel_1d_signed_l8
,
1100 fetch_texel_2d_signed_l8
,
1101 fetch_texel_3d_signed_l8
1104 MESA_FORMAT_SIGNED_AL88
,
1105 fetch_texel_1d_signed_al88
,
1106 fetch_texel_2d_signed_al88
,
1107 fetch_texel_3d_signed_al88
1110 MESA_FORMAT_SIGNED_I8
,
1111 fetch_texel_1d_signed_i8
,
1112 fetch_texel_2d_signed_i8
,
1113 fetch_texel_3d_signed_i8
1116 MESA_FORMAT_SIGNED_A16
,
1117 fetch_texel_1d_signed_a16
,
1118 fetch_texel_2d_signed_a16
,
1119 fetch_texel_3d_signed_a16
1122 MESA_FORMAT_SIGNED_L16
,
1123 fetch_texel_1d_signed_l16
,
1124 fetch_texel_2d_signed_l16
,
1125 fetch_texel_3d_signed_l16
1128 MESA_FORMAT_SIGNED_AL1616
,
1129 fetch_texel_1d_signed_al1616
,
1130 fetch_texel_2d_signed_al1616
,
1131 fetch_texel_3d_signed_al1616
1134 MESA_FORMAT_SIGNED_I16
,
1135 fetch_texel_1d_signed_i16
,
1136 fetch_texel_2d_signed_i16
,
1137 fetch_texel_3d_signed_i16
1140 MESA_FORMAT_RGB9_E5_FLOAT
,
1141 fetch_texel_1d_rgb9_e5
,
1142 fetch_texel_2d_rgb9_e5
,
1143 fetch_texel_3d_rgb9_e5
1146 MESA_FORMAT_R11_G11_B10_FLOAT
,
1147 fetch_texel_1d_r11_g11_b10f
,
1148 fetch_texel_2d_r11_g11_b10f
,
1149 fetch_texel_3d_r11_g11_b10f
1152 MESA_FORMAT_Z32_FLOAT
,
1153 fetch_texel_1d_f_r_f32
, /* Reuse the R32F functions. */
1154 fetch_texel_2d_f_r_f32
,
1155 fetch_texel_3d_f_r_f32
1158 MESA_FORMAT_Z32_FLOAT_X24S8
,
1159 fetch_texel_1d_z32f_x24s8
,
1160 fetch_texel_2d_z32f_x24s8
,
1161 fetch_texel_3d_z32f_x24s8
1164 MESA_FORMAT_ARGB2101010_UINT
,
1170 MESA_FORMAT_ABGR2101010_UINT
,
1179 _mesa_get_texel_fetch_func(gl_format format
, GLuint dims
)
1182 /* check that the table entries are sorted by format name */
1184 for (fmt
= 0; fmt
< MESA_FORMAT_COUNT
; fmt
++) {
1185 assert(texfetch_funcs
[fmt
].Name
== fmt
);
1189 STATIC_ASSERT(Elements(texfetch_funcs
) == MESA_FORMAT_COUNT
);
1191 assert(format
< MESA_FORMAT_COUNT
);
1195 return texfetch_funcs
[format
].Fetch1D
;
1197 return texfetch_funcs
[format
].Fetch2D
;
1199 return texfetch_funcs
[format
].Fetch3D
;
1201 assert(0 && "bad dims in _mesa_get_texel_fetch_func");
1208 * Initialize the texture image's FetchTexel methods.
1211 set_fetch_functions(struct gl_sampler_object
*samp
,
1212 struct swrast_texture_image
*texImage
, GLuint dims
)
1214 gl_format format
= texImage
->Base
.TexFormat
;
1216 ASSERT(dims
== 1 || dims
== 2 || dims
== 3);
1218 if (samp
->sRGBDecode
== GL_SKIP_DECODE_EXT
&&
1219 _mesa_get_format_color_encoding(format
) == GL_SRGB
) {
1220 format
= _mesa_get_srgb_format_linear(format
);
1223 texImage
->FetchTexel
= _mesa_get_texel_fetch_func(format
, dims
);
1224 ASSERT(texImage
->FetchTexel
);
1228 _mesa_update_fetch_functions(struct gl_context
*ctx
, GLuint unit
)
1230 struct gl_texture_object
*texObj
= ctx
->Texture
.Unit
[unit
]._Current
;
1231 struct gl_sampler_object
*samp
;
1238 samp
= _mesa_get_samplerobj(ctx
, unit
);
1240 dims
= _mesa_get_texture_dimensions(texObj
->Target
);
1242 for (face
= 0; face
< 6; face
++) {
1243 for (i
= 0; i
< MAX_TEXTURE_LEVELS
; i
++) {
1244 if (texObj
->Image
[face
][i
]) {
1245 set_fetch_functions(samp
,
1246 swrast_texture_image(texObj
->Image
[face
][i
]),