2 * Mesa 3-D graphics library
4 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
5 * Copyright (c) 2009 VMware, Inc.
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * 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"
93 * All compressed texture texel fetching is done though this function.
94 * Basically just call a core-Mesa texel fetch function.
97 fetch_compressed(const struct swrast_texture_image
*swImage
,
98 GLint i
, GLint j
, GLint k
, GLfloat
*texel
)
100 /* The FetchCompressedTexel function takes an integer pixel rowstride,
101 * while the image's rowstride is bytes per row of blocks.
104 GLuint texelBytes
= _mesa_get_format_bytes(swImage
->Base
.TexFormat
);
105 _mesa_get_format_block_size(swImage
->Base
.TexFormat
, &bw
, &bh
);
106 assert(swImage
->RowStride
* bw
% texelBytes
== 0);
108 swImage
->FetchCompressedTexel(swImage
->ImageSlices
[k
],
109 swImage
->RowStride
* bw
/ texelBytes
,
116 * Null texel fetch function.
118 * Have to have this so the FetchTexel function pointer is never NULL.
120 static void fetch_null_texelf( const struct swrast_texture_image
*texImage
,
121 GLint i
, GLint j
, GLint k
, GLfloat
*texel
)
123 (void) texImage
; (void) i
; (void) j
; (void) k
;
128 _mesa_warning(NULL
, "fetch_null_texelf() called!");
133 * Table to map MESA_FORMAT_ to texel fetch/store funcs.
134 * XXX this is somewhat temporary.
138 FetchTexelFunc Fetch1D
;
139 FetchTexelFunc Fetch2D
;
140 FetchTexelFunc Fetch3D
;
151 /* Packed unorm formats */
153 MESA_FORMAT_A8B8G8R8_UNORM
,
154 fetch_texel_1d_A8B8G8R8_UNORM
,
155 fetch_texel_2d_A8B8G8R8_UNORM
,
156 fetch_texel_3d_A8B8G8R8_UNORM
159 MESA_FORMAT_X8B8G8R8_UNORM
,
160 fetch_texel_1d_X8B8G8R8_UNORM
,
161 fetch_texel_2d_X8B8G8R8_UNORM
,
162 fetch_texel_3d_X8B8G8R8_UNORM
165 MESA_FORMAT_R8G8B8A8_UNORM
,
166 fetch_texel_1d_R8G8B8A_UNORM
,
167 fetch_texel_2d_R8G8B8A_UNORM
,
168 fetch_texel_3d_R8G8B8A_UNORM
171 MESA_FORMAT_R8G8B8X8_UNORM
,
172 fetch_texel_1d_R8G8B8X8_UNORM
,
173 fetch_texel_2d_R8G8B8X8_UNORM
,
174 fetch_texel_3d_R8G8B8X8_UNORM
177 MESA_FORMAT_B8G8R8A8_UNORM
,
178 fetch_texel_1d_B8G8R8A8_UNORM
,
179 fetch_texel_2d_B8G8R8A8_UNORM
,
180 fetch_texel_3d_B8G8R8A8_UNORM
183 MESA_FORMAT_B8G8R8X8_UNORM
,
184 fetch_texel_1d_B8G8R8X8_UNORM
,
185 fetch_texel_2d_B8G8R8X8_UNORM
,
186 fetch_texel_3d_B8G8R8X8_UNORM
189 MESA_FORMAT_A8R8G8B8_UNORM
,
190 fetch_texel_1d_A8R8G8B8_UNORM
,
191 fetch_texel_2d_A8R8G8B8_UNORM
,
192 fetch_texel_3d_A8R8G8B8_UNORM
195 MESA_FORMAT_X8R8G8B8_UNORM
,
196 fetch_texel_1d_X8R8G8B8_UNORM
,
197 fetch_texel_2d_X8R8G8B8_UNORM
,
198 fetch_texel_3d_X8R8G8B8_UNORM
201 MESA_FORMAT_L16A16_UNORM
,
202 fetch_texel_1d_L16A16_UNORM
,
203 fetch_texel_2d_L16A16_UNORM
,
204 fetch_texel_3d_L16A16_UNORM
207 MESA_FORMAT_A16L16_UNORM
,
208 fetch_texel_1d_A16L16_UNORM
,
209 fetch_texel_2d_A16L16_UNORM
,
210 fetch_texel_3d_A16L16_UNORM
213 MESA_FORMAT_B5G6R5_UNORM
,
214 fetch_texel_1d_B5G6R5_UNORM
,
215 fetch_texel_2d_B5G6R5_UNORM
,
216 fetch_texel_3d_B5G6R5_UNORM
219 MESA_FORMAT_R5G6B5_UNORM
,
220 fetch_texel_1d_R5G6B5_UNORM
,
221 fetch_texel_2d_R5G6B5_UNORM
,
222 fetch_texel_3d_R5G6B5_UNORM
225 MESA_FORMAT_B4G4R4A4_UNORM
,
226 fetch_texel_1d_B4G4R4A4_UNORM
,
227 fetch_texel_2d_B4G4R4A4_UNORM
,
228 fetch_texel_3d_B4G4R4A4_UNORM
231 MESA_FORMAT_B4G4R4X4_UNORM
,
237 MESA_FORMAT_A4R4G4B4_UNORM
,
238 fetch_texel_1d_A4R4G4B4_UNORM
,
239 fetch_texel_2d_A4R4G4B4_UNORM
,
240 fetch_texel_3d_A4R4G4B4_UNORM
243 MESA_FORMAT_A1B5G5R5_UNORM
,
244 fetch_texel_1d_A1B5G5R5_UNORM
,
245 fetch_texel_2d_A1B5G5R5_UNORM
,
246 fetch_texel_3d_A1B5G5R5_UNORM
249 MESA_FORMAT_B5G5R5A1_UNORM
,
250 fetch_texel_1d_B5G5R5A1_UNORM
,
251 fetch_texel_2d_B5G5R5A1_UNORM
,
252 fetch_texel_3d_B5G5R5A1_UNORM
255 MESA_FORMAT_B5G5R5X1_UNORM
,
261 MESA_FORMAT_A1R5G5B5_UNORM
,
262 fetch_texel_1d_A1R5G5B5_UNORM
,
263 fetch_texel_2d_A1R5G5B5_UNORM
,
264 fetch_texel_3d_A1R5G5B5_UNORM
267 MESA_FORMAT_L8A8_UNORM
,
268 fetch_texel_1d_L8A8_UNORM
,
269 fetch_texel_2d_L8A8_UNORM
,
270 fetch_texel_3d_L8A8_UNORM
273 MESA_FORMAT_A8L8_UNORM
,
274 fetch_texel_1d_A8L8_UNORM
,
275 fetch_texel_2d_A8L8_UNORM
,
276 fetch_texel_3d_A8L8_UNORM
279 MESA_FORMAT_R8G8_UNORM
,
280 fetch_texel_1d_R8G8_UNORM
,
281 fetch_texel_2d_R8G8_UNORM
,
282 fetch_texel_3d_R8G8_UNORM
285 MESA_FORMAT_G8R8_UNORM
,
286 fetch_texel_1d_G8R8_UNORM
,
287 fetch_texel_2d_G8R8_UNORM
,
288 fetch_texel_3d_G8R8_UNORM
291 MESA_FORMAT_L4A4_UNORM
,
292 fetch_texel_1d_L4A4_UNORM
,
293 fetch_texel_2d_L4A4_UNORM
,
294 fetch_texel_3d_L4A4_UNORM
297 MESA_FORMAT_B2G3R3_UNORM
,
298 fetch_texel_1d_B2G3R3_UNORM
,
299 fetch_texel_2d_B2G3R3_UNORM
,
300 fetch_texel_3d_B2G3R3_UNORM
303 MESA_FORMAT_R16G16_UNORM
,
304 fetch_texel_1d_R16G16_UNORM
,
305 fetch_texel_2d_R16G16_UNORM
,
306 fetch_texel_3d_R16G16_UNORM
309 MESA_FORMAT_G16R16_UNORM
,
310 fetch_texel_1d_G16R16_UNORM
,
311 fetch_texel_2d_G16R16_UNORM
,
312 fetch_texel_3d_G16R16_UNORM
315 MESA_FORMAT_B10G10R10A2_UNORM
,
316 fetch_texel_1d_B10G10R10A2_UNORM
,
317 fetch_texel_2d_B10G10R10A2_UNORM
,
318 fetch_texel_3d_B10G10R10A2_UNORM
321 MESA_FORMAT_B10G10R10X2_UNORM
,
327 MESA_FORMAT_R10G10B10A2_UNORM
,
328 fetch_texel_1d_R10G10B10A2_UNORM
,
329 fetch_texel_2d_R10G10B10A2_UNORM
,
330 fetch_texel_3d_R10G10B10A2_UNORM
333 MESA_FORMAT_S8_UINT_Z24_UNORM
,
334 fetch_texel_1d_S8_UINT_Z24_UNORM
,
335 fetch_texel_2d_S8_UINT_Z24_UNORM
,
336 fetch_texel_3d_S8_UINT_Z24_UNORM
339 MESA_FORMAT_X8_UINT_Z24_UNORM
,
340 fetch_texel_1d_S8_UINT_Z24_UNORM
,
341 fetch_texel_2d_S8_UINT_Z24_UNORM
,
342 fetch_texel_3d_S8_UINT_Z24_UNORM
345 MESA_FORMAT_Z24_UNORM_S8_UINT
,
346 fetch_texel_1d_Z24_UNORM_S8_UINT
,
347 fetch_texel_2d_Z24_UNORM_S8_UINT
,
348 fetch_texel_3d_Z24_UNORM_S8_UINT
351 MESA_FORMAT_Z24_UNORM_X8_UINT
,
352 fetch_texel_1d_Z24_UNORM_S8_UINT
,
353 fetch_texel_2d_Z24_UNORM_S8_UINT
,
354 fetch_texel_3d_Z24_UNORM_S8_UINT
358 fetch_texel_1d_YCBCR
,
359 fetch_texel_2d_YCBCR
,
363 MESA_FORMAT_YCBCR_REV
,
364 fetch_texel_1d_YCBCR_REV
,
365 fetch_texel_2d_YCBCR_REV
,
366 fetch_texel_3d_YCBCR_REV
370 fetch_texel_1d_DUDV8
,
371 fetch_texel_2d_DUDV8
,
375 /* Array unorm formats */
377 MESA_FORMAT_A_UNORM8
,
378 fetch_texel_1d_A_UNORM8
,
379 fetch_texel_2d_A_UNORM8
,
380 fetch_texel_3d_A_UNORM8
383 MESA_FORMAT_A_UNORM16
,
384 fetch_texel_1d_A_UNORM16
,
385 fetch_texel_2d_A_UNORM16
,
386 fetch_texel_3d_A_UNORM16
389 MESA_FORMAT_L_UNORM8
,
390 fetch_texel_1d_L_UNORM8
,
391 fetch_texel_2d_L_UNORM8
,
392 fetch_texel_3d_L_UNORM8
395 MESA_FORMAT_L_UNORM16
,
396 fetch_texel_1d_L_UNORM16
,
397 fetch_texel_2d_L_UNORM16
,
398 fetch_texel_3d_L_UNORM16
401 MESA_FORMAT_I_UNORM8
,
402 fetch_texel_1d_I_UNORM8
,
403 fetch_texel_2d_I_UNORM8
,
404 fetch_texel_3d_I_UNORM8
407 MESA_FORMAT_I_UNORM16
,
408 fetch_texel_1d_I_UNORM16
,
409 fetch_texel_2d_I_UNORM16
,
410 fetch_texel_3d_I_UNORM16
413 MESA_FORMAT_R_UNORM8
,
414 fetch_texel_1d_R_UNORM8
,
415 fetch_texel_2d_R_UNORM8
,
416 fetch_texel_3d_R_UNORM8
419 MESA_FORMAT_R_UNORM16
,
420 fetch_texel_1d_R_UNORM16
,
421 fetch_texel_2d_R_UNORM16
,
422 fetch_texel_3d_R_UNORM16
425 MESA_FORMAT_BGR_UNORM8
,
426 fetch_texel_1d_BGR_UNORM8
,
427 fetch_texel_2d_BGR_UNORM8
,
428 fetch_texel_3d_BGR_UNORM8
431 MESA_FORMAT_RGB_UNORM8
,
432 fetch_texel_1d_RGB_UNORM8
,
433 fetch_texel_2d_RGB_UNORM8
,
434 fetch_texel_3d_RGB_UNORM8
437 MESA_FORMAT_RGBA_UNORM16
,
438 fetch_texel_1d_rgba_16
,
439 fetch_texel_2d_rgba_16
,
440 fetch_texel_3d_rgba_16
443 MESA_FORMAT_RGBX_UNORM16
,
444 fetch_texel_1d_RGBX_UNORM16
,
445 fetch_texel_2d_RGBX_UNORM16
,
446 fetch_texel_3d_RGBX_UNORM16
449 MESA_FORMAT_Z_UNORM16
,
450 fetch_texel_1d_Z_UNORM16
,
451 fetch_texel_2d_Z_UNORM16
,
452 fetch_texel_3d_Z_UNORM16
455 MESA_FORMAT_Z_UNORM32
,
456 fetch_texel_1d_Z_UNORM32
,
457 fetch_texel_2d_Z_UNORM32
,
458 fetch_texel_3d_Z_UNORM32
467 /* Packed signed/normalized formats */
469 MESA_FORMAT_A8B8G8R8_SNORM
,
470 fetch_texel_1d_A8B8G8R8_SNORM
,
471 fetch_texel_2d_A8B8G8R8_SNORM
,
472 fetch_texel_3d_A8B8G8R8_SNORM
475 MESA_FORMAT_X8B8G8R8_SNORM
,
476 fetch_texel_1d_X8B8G8R8_SNORM
,
477 fetch_texel_2d_X8B8G8R8_SNORM
,
478 fetch_texel_3d_X8B8G8R8_SNORM
481 MESA_FORMAT_R8G8B8A8_SNORM
,
482 fetch_texel_1d_R8G8B8A8_SNORM
,
483 fetch_texel_2d_R8G8B8A8_SNORM
,
484 fetch_texel_3d_R8G8B8A8_SNORM
487 MESA_FORMAT_R8G8B8X8_SNORM
,
493 MESA_FORMAT_R16G16_SNORM
,
494 fetch_texel_1d_R16G16_SNORM
,
495 fetch_texel_2d_R16G16_SNORM
,
496 fetch_texel_3d_R16G16_SNORM
499 MESA_FORMAT_G16R16_SNORM
,
505 MESA_FORMAT_R8G8_SNORM
,
506 fetch_texel_1d_R8G8_SNORM
,
507 fetch_texel_2d_R8G8_SNORM
,
508 fetch_texel_3d_R8G8_SNORM
511 MESA_FORMAT_G8R8_SNORM
,
517 MESA_FORMAT_L8A8_SNORM
,
518 fetch_texel_1d_L8A8_SNORM
,
519 fetch_texel_2d_L8A8_SNORM
,
520 fetch_texel_3d_L8A8_SNORM
523 /* Array signed/normalized formats */
525 MESA_FORMAT_A_SNORM8
,
526 fetch_texel_1d_A_SNORM8
,
527 fetch_texel_2d_A_SNORM8
,
528 fetch_texel_3d_A_SNORM8
531 MESA_FORMAT_A_SNORM16
,
532 fetch_texel_1d_A_SNORM16
,
533 fetch_texel_2d_A_SNORM16
,
534 fetch_texel_3d_A_SNORM16
537 MESA_FORMAT_L_SNORM8
,
538 fetch_texel_1d_L_SNORM8
,
539 fetch_texel_2d_L_SNORM8
,
540 fetch_texel_3d_L_SNORM8
543 MESA_FORMAT_L_SNORM16
,
544 fetch_texel_1d_L_SNORM16
,
545 fetch_texel_2d_L_SNORM16
,
546 fetch_texel_3d_L_SNORM16
549 MESA_FORMAT_I_SNORM8
,
550 fetch_texel_1d_I_SNORM8
,
551 fetch_texel_2d_I_SNORM8
,
552 fetch_texel_3d_I_SNORM8
555 MESA_FORMAT_I_SNORM16
,
556 fetch_texel_1d_I_SNORM16
,
557 fetch_texel_2d_I_SNORM16
,
558 fetch_texel_3d_I_SNORM16
561 MESA_FORMAT_R_SNORM8
,
562 fetch_texel_1d_R_SNORM8
,
563 fetch_texel_2d_R_SNORM8
,
564 fetch_texel_3d_R_SNORM8
567 MESA_FORMAT_R_SNORM16
,
568 fetch_texel_1d_R_SNORM16
,
569 fetch_texel_2d_R_SNORM16
,
570 fetch_texel_3d_R_SNORM16
573 MESA_FORMAT_LA_SNORM16
,
574 fetch_texel_1d_LA_SNORM16
,
575 fetch_texel_2d_LA_SNORM16
,
576 fetch_texel_3d_LA_SNORM16
579 MESA_FORMAT_RGB_SNORM16
,
580 fetch_texel_1d_RGB_SNORM16
,
581 fetch_texel_2d_RGB_SNORM16
,
582 fetch_texel_3d_RGB_SNORM16
585 MESA_FORMAT_RGBA_SNORM16
,
586 fetch_texel_1d_RGBA_SNORM16
,
587 fetch_texel_2d_RGBA_SNORM16
,
588 fetch_texel_3d_RGBA_SNORM16
591 MESA_FORMAT_RGBX_SNORM16
,
597 /* Packed sRGB formats */
599 MESA_FORMAT_A8B8G8R8_SRGB
,
600 fetch_texel_1d_A8B8G8R8_SRGB
,
601 fetch_texel_2d_A8B8G8R8_SRGB
,
602 fetch_texel_3d_A8B8G8R8_SRGB
605 MESA_FORMAT_B8G8R8A8_SRGB
,
606 fetch_texel_1d_B8G8R8A8_SRGB
,
607 fetch_texel_2d_B8G8R8A8_SRGB
,
608 fetch_texel_3d_B8G8R8A8_SRGB
611 MESA_FORMAT_B8G8R8X8_SRGB
,
617 MESA_FORMAT_R8G8B8A8_SRGB
,
618 fetch_texel_1d_R8G8B8A8_SRGB
,
619 fetch_texel_2d_R8G8B8A8_SRGB
,
620 fetch_texel_3d_R8G8B8A8_SRGB
623 MESA_FORMAT_R8G8B8X8_SRGB
,
624 fetch_texel_1d_R8G8B8X8_SRGB
,
625 fetch_texel_2d_R8G8B8X8_SRGB
,
626 fetch_texel_3d_R8G8B8X8_SRGB
629 MESA_FORMAT_L8A8_SRGB
,
630 fetch_texel_1d_L8A8_SRGB
,
631 fetch_texel_2d_L8A8_SRGB
,
632 fetch_texel_3d_L8A8_SRGB
635 /* Array sRGB formats */
638 fetch_texel_1d_L_SRGB8
,
639 fetch_texel_2d_L_SRGB8
,
640 fetch_texel_3d_L_SRGB8
643 MESA_FORMAT_BGR_SRGB8
,
644 fetch_texel_1d_BGR_SRGB8
,
645 fetch_texel_2d_BGR_SRGB8
,
646 fetch_texel_3d_BGR_SRGB8
649 /* Packed float formats */
651 MESA_FORMAT_R9G9B9E5_FLOAT
,
652 fetch_texel_1d_R9G9B9E5_FLOAT
,
653 fetch_texel_2d_R9G9B9E5_FLOAT
,
654 fetch_texel_3d_R9G9B9E5_FLOAT
657 MESA_FORMAT_R11G11B10_FLOAT
,
658 fetch_texel_1d_R11G11B10_FLOAT
,
659 fetch_texel_2d_R11G11B10_FLOAT
,
660 fetch_texel_3d_R11G11B10_FLOAT
663 MESA_FORMAT_Z32_FLOAT_S8X24_UINT
,
664 fetch_texel_1d_Z32_FLOAT_S8X24_UINT
,
665 fetch_texel_2d_Z32_FLOAT_S8X24_UINT
,
666 fetch_texel_3d_Z32_FLOAT_S8X24_UINT
669 /* Array float formats */
671 MESA_FORMAT_A_FLOAT16
,
672 fetch_texel_1d_A_FLOAT16
,
673 fetch_texel_2d_A_FLOAT16
,
674 fetch_texel_3d_A_FLOAT16
677 MESA_FORMAT_A_FLOAT32
,
678 fetch_texel_1d_A_FLOAT32
,
679 fetch_texel_2d_A_FLOAT32
,
680 fetch_texel_3d_A_FLOAT32
683 MESA_FORMAT_L_FLOAT16
,
684 fetch_texel_1d_L_FLOAT16
,
685 fetch_texel_2d_L_FLOAT16
,
686 fetch_texel_3d_L_FLOAT16
689 MESA_FORMAT_L_FLOAT32
,
690 fetch_texel_1d_L_FLOAT32
,
691 fetch_texel_2d_L_FLOAT32
,
692 fetch_texel_3d_L_FLOAT32
695 MESA_FORMAT_LA_FLOAT16
,
696 fetch_texel_1d_LA_FLOAT16
,
697 fetch_texel_2d_LA_FLOAT16
,
698 fetch_texel_3d_LA_FLOAT16
701 MESA_FORMAT_LA_FLOAT32
,
702 fetch_texel_1d_LA_FLOAT32
,
703 fetch_texel_2d_LA_FLOAT32
,
704 fetch_texel_3d_LA_FLOAT32
707 MESA_FORMAT_I_FLOAT16
,
708 fetch_texel_1d_I_FLOAT16
,
709 fetch_texel_2d_I_FLOAT16
,
710 fetch_texel_3d_I_FLOAT16
713 MESA_FORMAT_I_FLOAT32
,
714 fetch_texel_1d_I_FLOAT32
,
715 fetch_texel_2d_I_FLOAT32
,
716 fetch_texel_3d_I_FLOAT32
719 MESA_FORMAT_R_FLOAT16
,
720 fetch_texel_1d_R_FLOAT16
,
721 fetch_texel_2d_R_FLOAT16
,
722 fetch_texel_3d_R_FLOAT16
725 MESA_FORMAT_R_FLOAT32
,
726 fetch_texel_1d_R_FLOAT32
,
727 fetch_texel_2d_R_FLOAT32
,
728 fetch_texel_3d_R_FLOAT32
731 MESA_FORMAT_RG_FLOAT16
,
732 fetch_texel_1d_RG_FLOAT16
,
733 fetch_texel_2d_RG_FLOAT16
,
734 fetch_texel_3d_RG_FLOAT16
737 MESA_FORMAT_RG_FLOAT32
,
738 fetch_texel_1d_RG_FLOAT32
,
739 fetch_texel_2d_RG_FLOAT32
,
740 fetch_texel_3d_RG_FLOAT32
743 MESA_FORMAT_RGB_FLOAT16
,
744 fetch_texel_1d_RGB_FLOAT16
,
745 fetch_texel_2d_RGB_FLOAT16
,
746 fetch_texel_3d_RGB_FLOAT16
749 MESA_FORMAT_RGB_FLOAT32
,
750 fetch_texel_1d_RGB_FLOAT32
,
751 fetch_texel_2d_RGB_FLOAT32
,
752 fetch_texel_3d_RGB_FLOAT32
755 MESA_FORMAT_RGBA_FLOAT16
,
756 fetch_texel_1d_RGBA_FLOAT16
,
757 fetch_texel_2d_RGBA_FLOAT16
,
758 fetch_texel_3d_RGBA_FLOAT16
761 MESA_FORMAT_RGBA_FLOAT32
,
762 fetch_texel_1d_RGBA_FLOAT32
,
763 fetch_texel_2d_RGBA_FLOAT32
,
764 fetch_texel_3d_RGBA_FLOAT32
767 MESA_FORMAT_RGBX_FLOAT16
,
768 fetch_texel_1d_RGBX_FLOAT16
,
769 fetch_texel_2d_RGBX_FLOAT16
,
770 fetch_texel_3d_RGBX_FLOAT16
773 MESA_FORMAT_RGBX_FLOAT32
,
774 fetch_texel_1d_RGBX_FLOAT32
,
775 fetch_texel_2d_RGBX_FLOAT32
,
776 fetch_texel_3d_RGBX_FLOAT32
779 MESA_FORMAT_Z_FLOAT32
,
780 fetch_texel_1d_R_FLOAT32
, /* Reuse the R32F functions. */
781 fetch_texel_2d_R_FLOAT32
,
782 fetch_texel_3d_R_FLOAT32
785 /* Packed signed/unsigned non-normalized integer formats */
787 MESA_FORMAT_B10G10R10A2_UINT
,
793 MESA_FORMAT_R10G10B10A2_UINT
,
799 /* Array signed/unsigned non-normalized integer formats */
807 MESA_FORMAT_A_UINT16
,
813 MESA_FORMAT_A_UINT32
,
825 MESA_FORMAT_A_SINT16
,
831 MESA_FORMAT_A_SINT32
,
843 MESA_FORMAT_I_UINT16
,
849 MESA_FORMAT_I_UINT32
,
861 MESA_FORMAT_I_SINT16
,
867 MESA_FORMAT_I_SINT32
,
879 MESA_FORMAT_L_UINT16
,
885 MESA_FORMAT_L_UINT32
,
897 MESA_FORMAT_L_SINT16
,
903 MESA_FORMAT_L_SINT32
,
909 MESA_FORMAT_LA_UINT8
,
915 MESA_FORMAT_LA_UINT16
,
921 MESA_FORMAT_LA_UINT32
,
927 MESA_FORMAT_LA_SINT8
,
933 MESA_FORMAT_LA_SINT16
,
939 MESA_FORMAT_LA_SINT32
,
951 MESA_FORMAT_R_UINT16
,
957 MESA_FORMAT_R_UINT32
,
969 MESA_FORMAT_R_SINT16
,
975 MESA_FORMAT_R_SINT32
,
981 MESA_FORMAT_RG_UINT8
,
987 MESA_FORMAT_RG_UINT16
,
993 MESA_FORMAT_RG_UINT32
,
999 MESA_FORMAT_RG_SINT8
,
1005 MESA_FORMAT_RG_SINT16
,
1011 MESA_FORMAT_RG_SINT32
,
1017 MESA_FORMAT_RGB_UINT8
,
1023 MESA_FORMAT_RGB_UINT16
,
1029 MESA_FORMAT_RGB_UINT32
,
1035 MESA_FORMAT_RGB_SINT8
,
1041 MESA_FORMAT_RGB_SINT16
,
1047 MESA_FORMAT_RGB_SINT32
,
1053 MESA_FORMAT_RGBA_UINT8
,
1054 fetch_texel_1d_rgba_uint8
,
1055 fetch_texel_2d_rgba_uint8
,
1056 fetch_texel_3d_rgba_uint8
1059 MESA_FORMAT_RGBA_UINT16
,
1060 fetch_texel_1d_rgba_uint16
,
1061 fetch_texel_2d_rgba_uint16
,
1062 fetch_texel_3d_rgba_uint16
1065 MESA_FORMAT_RGBA_UINT32
,
1066 fetch_texel_1d_rgba_uint32
,
1067 fetch_texel_2d_rgba_uint32
,
1068 fetch_texel_3d_rgba_uint32
1071 MESA_FORMAT_RGBA_SINT8
,
1072 fetch_texel_1d_rgba_int8
,
1073 fetch_texel_2d_rgba_int8
,
1074 fetch_texel_3d_rgba_int8
1077 MESA_FORMAT_RGBA_SINT16
,
1078 fetch_texel_1d_rgba_int16
,
1079 fetch_texel_2d_rgba_int16
,
1080 fetch_texel_3d_rgba_int16
1083 MESA_FORMAT_RGBA_SINT32
,
1084 fetch_texel_1d_rgba_int32
,
1085 fetch_texel_2d_rgba_int32
,
1086 fetch_texel_3d_rgba_int32
1089 MESA_FORMAT_RGBX_UINT8
,
1095 MESA_FORMAT_RGBX_UINT16
,
1101 MESA_FORMAT_RGBX_UINT32
,
1107 MESA_FORMAT_RGBX_SINT8
,
1113 MESA_FORMAT_RGBX_SINT16
,
1119 MESA_FORMAT_RGBX_SINT32
,
1125 /* DXT compressed formats */
1127 MESA_FORMAT_RGB_DXT1
,
1133 MESA_FORMAT_RGBA_DXT1
,
1139 MESA_FORMAT_RGBA_DXT3
,
1145 MESA_FORMAT_RGBA_DXT5
,
1151 /* DXT sRGB compressed formats */
1153 MESA_FORMAT_SRGB_DXT1
,
1159 MESA_FORMAT_SRGBA_DXT1
,
1165 MESA_FORMAT_SRGBA_DXT3
,
1171 MESA_FORMAT_SRGBA_DXT5
,
1177 /* FXT1 compressed formats */
1179 MESA_FORMAT_RGB_FXT1
,
1185 MESA_FORMAT_RGBA_FXT1
,
1191 /* RGTC compressed formats */
1193 MESA_FORMAT_R_RGTC1_UNORM
,
1199 MESA_FORMAT_R_RGTC1_SNORM
,
1205 MESA_FORMAT_RG_RGTC2_UNORM
,
1211 MESA_FORMAT_RG_RGTC2_SNORM
,
1217 /* LATC1/2 compressed formats */
1219 MESA_FORMAT_L_LATC1_UNORM
,
1225 MESA_FORMAT_L_LATC1_SNORM
,
1231 MESA_FORMAT_LA_LATC2_UNORM
,
1237 MESA_FORMAT_LA_LATC2_SNORM
,
1243 /* ETC1/2 compressed formats */
1245 MESA_FORMAT_ETC1_RGB8
,
1251 MESA_FORMAT_ETC2_RGB8
,
1257 MESA_FORMAT_ETC2_SRGB8
,
1263 MESA_FORMAT_ETC2_RGBA8_EAC
,
1269 MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC
,
1275 MESA_FORMAT_ETC2_R11_EAC
,
1281 MESA_FORMAT_ETC2_RG11_EAC
,
1287 MESA_FORMAT_ETC2_SIGNED_R11_EAC
,
1293 MESA_FORMAT_ETC2_SIGNED_RG11_EAC
,
1299 MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
,
1305 MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1
,
1314 * Initialize the texture image's FetchTexel methods.
1317 set_fetch_functions(const struct gl_sampler_object
*samp
,
1318 struct swrast_texture_image
*texImage
, GLuint dims
)
1320 mesa_format format
= texImage
->Base
.TexFormat
;
1323 /* check that the table entries are sorted by format name */
1325 for (fmt
= 0; fmt
< MESA_FORMAT_COUNT
; fmt
++) {
1326 assert(texfetch_funcs
[fmt
].Name
== fmt
);
1330 STATIC_ASSERT(Elements(texfetch_funcs
) == MESA_FORMAT_COUNT
);
1332 if (samp
->sRGBDecode
== GL_SKIP_DECODE_EXT
&&
1333 _mesa_get_format_color_encoding(format
) == GL_SRGB
) {
1334 format
= _mesa_get_srgb_format_linear(format
);
1337 assert(format
< MESA_FORMAT_COUNT
);
1341 texImage
->FetchTexel
= texfetch_funcs
[format
].Fetch1D
;
1344 texImage
->FetchTexel
= texfetch_funcs
[format
].Fetch2D
;
1347 texImage
->FetchTexel
= texfetch_funcs
[format
].Fetch3D
;
1350 assert(!"Bad dims in set_fetch_functions()");
1353 texImage
->FetchCompressedTexel
= _mesa_get_compressed_fetch_func(format
);
1355 ASSERT(texImage
->FetchTexel
);
1359 _mesa_update_fetch_functions(struct gl_context
*ctx
, GLuint unit
)
1361 struct gl_texture_object
*texObj
= ctx
->Texture
.Unit
[unit
]._Current
;
1362 struct gl_sampler_object
*samp
;
1369 samp
= _mesa_get_samplerobj(ctx
, unit
);
1371 dims
= _mesa_get_texture_dimensions(texObj
->Target
);
1373 for (face
= 0; face
< 6; face
++) {
1374 for (i
= 0; i
< MAX_TEXTURE_LEVELS
; i
++) {
1375 if (texObj
->Image
[face
][i
]) {
1376 set_fetch_functions(samp
,
1377 swrast_texture_image(texObj
->Image
[face
][i
]),