1 /**************************************************************************
3 * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
4 * Copyright (c) 2008 VMware, Inc.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
24 **************************************************************************/
29 #include "u_format_s3tc.h"
30 #include "util/format_srgb.h"
31 #include "../../../mesa/main/texcompress_s3tc_tmp.h"
35 util_format_dxt1_rgb_fetch_stub(int src_stride
,
45 util_format_dxt1_rgba_fetch_stub(int src_stride
,
55 util_format_dxt3_rgba_fetch_stub(int src_stride
,
65 util_format_dxt5_rgba_fetch_stub(int src_stride
,
75 util_format_dxtn_pack_stub(int src_comps
,
76 int width
, int height
,
78 enum util_format_dxtn dst_format
,
86 util_format_dxtn_fetch_t util_format_dxt1_rgb_fetch
= util_format_dxt1_rgb_fetch_stub
;
87 util_format_dxtn_fetch_t util_format_dxt1_rgba_fetch
= util_format_dxt1_rgba_fetch_stub
;
88 util_format_dxtn_fetch_t util_format_dxt3_rgba_fetch
= util_format_dxt3_rgba_fetch_stub
;
89 util_format_dxtn_fetch_t util_format_dxt5_rgba_fetch
= util_format_dxt5_rgba_fetch_stub
;
91 util_format_dxtn_pack_t util_format_dxtn_pack
= util_format_dxtn_pack_stub
;
95 util_format_s3tc_init(void)
97 static boolean first_time
= TRUE
;
103 util_format_dxt1_rgb_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgb_dxt1
;
104 util_format_dxt1_rgba_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgba_dxt1
;
105 util_format_dxt3_rgba_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgba_dxt3
;
106 util_format_dxt5_rgba_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgba_dxt5
;
107 util_format_dxtn_pack
= (util_format_dxtn_pack_t
)tx_compress_dxtn
;
116 util_format_dxt1_rgb_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
118 util_format_dxt1_rgb_fetch(0, src
, i
, j
, dst
);
122 util_format_dxt1_rgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
124 util_format_dxt1_rgba_fetch(0, src
, i
, j
, dst
);
128 util_format_dxt3_rgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
130 util_format_dxt3_rgba_fetch(0, src
, i
, j
, dst
);
134 util_format_dxt5_rgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
136 util_format_dxt5_rgba_fetch(0, src
, i
, j
, dst
);
140 util_format_dxt1_rgb_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
143 util_format_dxt1_rgb_fetch(0, src
, i
, j
, tmp
);
144 dst
[0] = ubyte_to_float(tmp
[0]);
145 dst
[1] = ubyte_to_float(tmp
[1]);
146 dst
[2] = ubyte_to_float(tmp
[2]);
151 util_format_dxt1_rgba_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
154 util_format_dxt1_rgba_fetch(0, src
, i
, j
, tmp
);
155 dst
[0] = ubyte_to_float(tmp
[0]);
156 dst
[1] = ubyte_to_float(tmp
[1]);
157 dst
[2] = ubyte_to_float(tmp
[2]);
158 dst
[3] = ubyte_to_float(tmp
[3]);
162 util_format_dxt3_rgba_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
165 util_format_dxt3_rgba_fetch(0, src
, i
, j
, tmp
);
166 dst
[0] = ubyte_to_float(tmp
[0]);
167 dst
[1] = ubyte_to_float(tmp
[1]);
168 dst
[2] = ubyte_to_float(tmp
[2]);
169 dst
[3] = ubyte_to_float(tmp
[3]);
173 util_format_dxt5_rgba_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
176 util_format_dxt5_rgba_fetch(0, src
, i
, j
, tmp
);
177 dst
[0] = ubyte_to_float(tmp
[0]);
178 dst
[1] = ubyte_to_float(tmp
[1]);
179 dst
[2] = ubyte_to_float(tmp
[2]);
180 dst
[3] = ubyte_to_float(tmp
[3]);
185 * Block decompression.
189 util_format_dxtn_rgb_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
190 const uint8_t *src_row
, unsigned src_stride
,
191 unsigned width
, unsigned height
,
192 util_format_dxtn_fetch_t fetch
,
193 unsigned block_size
, boolean srgb
)
195 const unsigned bw
= 4, bh
= 4, comps
= 4;
197 for(y
= 0; y
< height
; y
+= bh
) {
198 const uint8_t *src
= src_row
;
199 for(x
= 0; x
< width
; x
+= bw
) {
200 for(j
= 0; j
< bh
; ++j
) {
201 for(i
= 0; i
< bw
; ++i
) {
202 uint8_t *dst
= dst_row
+ (y
+ j
)*dst_stride
/sizeof(*dst_row
) + (x
+ i
)*comps
;
203 fetch(0, src
, i
, j
, dst
);
205 dst
[0] = util_format_srgb_to_linear_8unorm(dst
[0]);
206 dst
[1] = util_format_srgb_to_linear_8unorm(dst
[1]);
207 dst
[2] = util_format_srgb_to_linear_8unorm(dst
[2]);
213 src_row
+= src_stride
;
218 util_format_dxt1_rgb_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
219 const uint8_t *src_row
, unsigned src_stride
,
220 unsigned width
, unsigned height
)
222 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
225 util_format_dxt1_rgb_fetch
,
230 util_format_dxt1_rgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
231 const uint8_t *src_row
, unsigned src_stride
,
232 unsigned width
, unsigned height
)
234 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
237 util_format_dxt1_rgba_fetch
,
242 util_format_dxt3_rgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
243 const uint8_t *src_row
, unsigned src_stride
,
244 unsigned width
, unsigned height
)
246 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
249 util_format_dxt3_rgba_fetch
,
254 util_format_dxt5_rgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
255 const uint8_t *src_row
, unsigned src_stride
,
256 unsigned width
, unsigned height
)
258 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
261 util_format_dxt5_rgba_fetch
,
266 util_format_dxtn_rgb_unpack_rgba_float(float *dst_row
, unsigned dst_stride
,
267 const uint8_t *src_row
, unsigned src_stride
,
268 unsigned width
, unsigned height
,
269 util_format_dxtn_fetch_t fetch
,
270 unsigned block_size
, boolean srgb
)
273 for(y
= 0; y
< height
; y
+= 4) {
274 const uint8_t *src
= src_row
;
275 for(x
= 0; x
< width
; x
+= 4) {
276 for(j
= 0; j
< 4; ++j
) {
277 for(i
= 0; i
< 4; ++i
) {
278 float *dst
= dst_row
+ (y
+ j
)*dst_stride
/sizeof(*dst_row
) + (x
+ i
)*4;
280 fetch(0, src
, i
, j
, tmp
);
282 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
283 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
284 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
287 dst
[0] = ubyte_to_float(tmp
[0]);
288 dst
[1] = ubyte_to_float(tmp
[1]);
289 dst
[2] = ubyte_to_float(tmp
[2]);
291 dst
[3] = ubyte_to_float(tmp
[3]);
296 src_row
+= src_stride
;
301 util_format_dxt1_rgb_unpack_rgba_float(float *dst_row
, unsigned dst_stride
,
302 const uint8_t *src_row
, unsigned src_stride
,
303 unsigned width
, unsigned height
)
305 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
308 util_format_dxt1_rgb_fetch
,
313 util_format_dxt1_rgba_unpack_rgba_float(float *dst_row
, unsigned dst_stride
,
314 const uint8_t *src_row
, unsigned src_stride
,
315 unsigned width
, unsigned height
)
317 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
320 util_format_dxt1_rgba_fetch
,
325 util_format_dxt3_rgba_unpack_rgba_float(float *dst_row
, unsigned dst_stride
,
326 const uint8_t *src_row
, unsigned src_stride
,
327 unsigned width
, unsigned height
)
329 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
332 util_format_dxt3_rgba_fetch
,
337 util_format_dxt5_rgba_unpack_rgba_float(float *dst_row
, unsigned dst_stride
,
338 const uint8_t *src_row
, unsigned src_stride
,
339 unsigned width
, unsigned height
)
341 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
344 util_format_dxt5_rgba_fetch
,
354 util_format_dxtn_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
355 const uint8_t *src
, unsigned src_stride
,
356 unsigned width
, unsigned height
,
357 enum util_format_dxtn format
,
358 unsigned block_size
, boolean srgb
)
360 const unsigned bw
= 4, bh
= 4, comps
= 4;
361 unsigned x
, y
, i
, j
, k
;
362 for(y
= 0; y
< height
; y
+= bh
) {
363 uint8_t *dst
= dst_row
;
364 for(x
= 0; x
< width
; x
+= bw
) {
365 uint8_t tmp
[4][4][4]; /* [bh][bw][comps] */
366 for(j
= 0; j
< bh
; ++j
) {
367 for(i
= 0; i
< bw
; ++i
) {
369 for(k
= 0; k
< 3; ++k
) {
370 src_tmp
= src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*comps
+ k
];
372 tmp
[j
][i
][k
] = util_format_linear_to_srgb_8unorm(src_tmp
);
375 tmp
[j
][i
][k
] = src_tmp
;
378 /* for sake of simplicity there's an unneeded 4th component for dxt1_rgb */
379 tmp
[j
][i
][3] = src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*comps
+ 3];
382 /* even for dxt1_rgb have 4 src comps */
383 util_format_dxtn_pack(4, 4, 4, &tmp
[0][0][0], format
, dst
, 0);
386 dst_row
+= dst_stride
/ sizeof(*dst_row
);
392 util_format_dxt1_rgb_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
393 const uint8_t *src
, unsigned src_stride
,
394 unsigned width
, unsigned height
)
396 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
397 width
, height
, UTIL_FORMAT_DXT1_RGB
,
402 util_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
403 const uint8_t *src
, unsigned src_stride
,
404 unsigned width
, unsigned height
)
406 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
407 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
412 util_format_dxt3_rgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
413 const uint8_t *src
, unsigned src_stride
,
414 unsigned width
, unsigned height
)
416 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
417 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
422 util_format_dxt5_rgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
423 const uint8_t *src
, unsigned src_stride
,
424 unsigned width
, unsigned height
)
426 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
427 width
, height
, UTIL_FORMAT_DXT5_RGBA
,
432 util_format_dxtn_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
433 const float *src
, unsigned src_stride
,
434 unsigned width
, unsigned height
,
435 enum util_format_dxtn format
,
436 unsigned block_size
, boolean srgb
)
438 unsigned x
, y
, i
, j
, k
;
439 for(y
= 0; y
< height
; y
+= 4) {
440 uint8_t *dst
= dst_row
;
441 for(x
= 0; x
< width
; x
+= 4) {
442 uint8_t tmp
[4][4][4];
443 for(j
= 0; j
< 4; ++j
) {
444 for(i
= 0; i
< 4; ++i
) {
446 for(k
= 0; k
< 3; ++k
) {
447 src_tmp
= src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*4 + k
];
449 tmp
[j
][i
][k
] = util_format_linear_float_to_srgb_8unorm(src_tmp
);
452 tmp
[j
][i
][k
] = float_to_ubyte(src_tmp
);
455 /* for sake of simplicity there's an unneeded 4th component for dxt1_rgb */
456 src_tmp
= src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*4 + 3];
457 tmp
[j
][i
][3] = float_to_ubyte(src_tmp
);
460 util_format_dxtn_pack(4, 4, 4, &tmp
[0][0][0], format
, dst
, 0);
463 dst_row
+= 4*dst_stride
/sizeof(*dst_row
);
468 util_format_dxt1_rgb_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
469 const float *src
, unsigned src_stride
,
470 unsigned width
, unsigned height
)
472 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
473 width
, height
, UTIL_FORMAT_DXT1_RGB
,
478 util_format_dxt1_rgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
479 const float *src
, unsigned src_stride
,
480 unsigned width
, unsigned height
)
482 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
483 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
488 util_format_dxt3_rgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
489 const float *src
, unsigned src_stride
,
490 unsigned width
, unsigned height
)
492 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
493 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
498 util_format_dxt5_rgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
499 const float *src
, unsigned src_stride
,
500 unsigned width
, unsigned height
)
502 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
503 width
, height
, UTIL_FORMAT_DXT5_RGBA
,
513 util_format_dxt1_srgb_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
516 util_format_dxt1_rgb_fetch(0, src
, i
, j
, tmp
);
517 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
518 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
519 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
524 util_format_dxt1_srgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
527 util_format_dxt1_rgba_fetch(0, src
, i
, j
, tmp
);
528 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
529 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
530 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
535 util_format_dxt3_srgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
538 util_format_dxt3_rgba_fetch(0, src
, i
, j
, tmp
);
539 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
540 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
541 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
546 util_format_dxt5_srgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
549 util_format_dxt5_rgba_fetch(0, src
, i
, j
, tmp
);
550 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
551 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
552 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
557 util_format_dxt1_srgb_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
560 util_format_dxt1_rgb_fetch(0, src
, i
, j
, tmp
);
561 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
562 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
563 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
568 util_format_dxt1_srgba_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
571 util_format_dxt1_rgba_fetch(0, src
, i
, j
, tmp
);
572 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
573 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
574 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
575 dst
[3] = ubyte_to_float(tmp
[3]);
579 util_format_dxt3_srgba_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
582 util_format_dxt3_rgba_fetch(0, src
, i
, j
, tmp
);
583 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
584 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
585 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
586 dst
[3] = ubyte_to_float(tmp
[3]);
590 util_format_dxt5_srgba_fetch_rgba_float(float *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
593 util_format_dxt5_rgba_fetch(0, src
, i
, j
, tmp
);
594 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
595 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
596 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
597 dst
[3] = ubyte_to_float(tmp
[3]);
601 util_format_dxt1_srgb_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
603 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
606 util_format_dxt1_rgb_fetch
,
611 util_format_dxt1_srgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
613 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
616 util_format_dxt1_rgba_fetch
,
621 util_format_dxt3_srgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
623 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
626 util_format_dxt3_rgba_fetch
,
631 util_format_dxt5_srgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
633 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
636 util_format_dxt5_rgba_fetch
,
641 util_format_dxt1_srgb_unpack_rgba_float(float *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
643 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
646 util_format_dxt1_rgb_fetch
,
651 util_format_dxt1_srgba_unpack_rgba_float(float *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
653 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
656 util_format_dxt1_rgba_fetch
,
661 util_format_dxt3_srgba_unpack_rgba_float(float *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
663 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
666 util_format_dxt3_rgba_fetch
,
671 util_format_dxt5_srgba_unpack_rgba_float(float *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
673 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
676 util_format_dxt5_rgba_fetch
,
681 util_format_dxt1_srgb_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
683 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
684 width
, height
, UTIL_FORMAT_DXT1_RGB
,
689 util_format_dxt1_srgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
691 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
692 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
697 util_format_dxt3_srgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
699 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
700 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
705 util_format_dxt5_srgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
707 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
708 width
, height
, UTIL_FORMAT_DXT5_RGBA
,
713 util_format_dxt1_srgb_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
, const float *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
715 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
716 width
, height
, UTIL_FORMAT_DXT1_RGB
,
721 util_format_dxt1_srgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
, const float *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
723 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
724 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
729 util_format_dxt3_srgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
, const float *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
731 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
732 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
737 util_format_dxt5_srgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
, const float *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
739 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
740 width
, height
, UTIL_FORMAT_DXT5_RGBA
,