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 **************************************************************************/
26 #include "util/format/u_format.h"
27 #include "util/format/u_format_s3tc.h"
28 #include "util/format_srgb.h"
29 #include "util/u_math.h"
30 #include "../../mesa/main/texcompress_s3tc_tmp.h"
33 util_format_dxtn_fetch_t util_format_dxt1_rgb_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgb_dxt1
;
34 util_format_dxtn_fetch_t util_format_dxt1_rgba_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgba_dxt1
;
35 util_format_dxtn_fetch_t util_format_dxt3_rgba_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgba_dxt3
;
36 util_format_dxtn_fetch_t util_format_dxt5_rgba_fetch
= (util_format_dxtn_fetch_t
)fetch_2d_texel_rgba_dxt5
;
38 util_format_dxtn_pack_t util_format_dxtn_pack
= (util_format_dxtn_pack_t
)tx_compress_dxtn
;
46 util_format_dxt1_rgb_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
48 util_format_dxt1_rgb_fetch(0, src
, i
, j
, dst
);
52 util_format_dxt1_rgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
54 util_format_dxt1_rgba_fetch(0, src
, i
, j
, dst
);
58 util_format_dxt3_rgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
60 util_format_dxt3_rgba_fetch(0, src
, i
, j
, dst
);
64 util_format_dxt5_rgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
66 util_format_dxt5_rgba_fetch(0, src
, i
, j
, dst
);
70 util_format_dxt1_rgb_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
74 util_format_dxt1_rgb_fetch(0, src
, i
, j
, tmp
);
75 dst
[0] = ubyte_to_float(tmp
[0]);
76 dst
[1] = ubyte_to_float(tmp
[1]);
77 dst
[2] = ubyte_to_float(tmp
[2]);
82 util_format_dxt1_rgba_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
86 util_format_dxt1_rgba_fetch(0, src
, i
, j
, tmp
);
87 dst
[0] = ubyte_to_float(tmp
[0]);
88 dst
[1] = ubyte_to_float(tmp
[1]);
89 dst
[2] = ubyte_to_float(tmp
[2]);
90 dst
[3] = ubyte_to_float(tmp
[3]);
94 util_format_dxt3_rgba_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
98 util_format_dxt3_rgba_fetch(0, src
, i
, j
, tmp
);
99 dst
[0] = ubyte_to_float(tmp
[0]);
100 dst
[1] = ubyte_to_float(tmp
[1]);
101 dst
[2] = ubyte_to_float(tmp
[2]);
102 dst
[3] = ubyte_to_float(tmp
[3]);
106 util_format_dxt5_rgba_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
110 util_format_dxt5_rgba_fetch(0, src
, i
, j
, tmp
);
111 dst
[0] = ubyte_to_float(tmp
[0]);
112 dst
[1] = ubyte_to_float(tmp
[1]);
113 dst
[2] = ubyte_to_float(tmp
[2]);
114 dst
[3] = ubyte_to_float(tmp
[3]);
119 * Block decompression.
123 util_format_dxtn_rgb_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
124 const uint8_t *src_row
, unsigned src_stride
,
125 unsigned width
, unsigned height
,
126 util_format_dxtn_fetch_t fetch
,
127 unsigned block_size
, boolean srgb
)
129 const unsigned bw
= 4, bh
= 4, comps
= 4;
131 for(y
= 0; y
< height
; y
+= bh
) {
132 const uint8_t *src
= src_row
;
133 for(x
= 0; x
< width
; x
+= bw
) {
134 for(j
= 0; j
< bh
; ++j
) {
135 for(i
= 0; i
< bw
; ++i
) {
136 uint8_t *dst
= dst_row
+ (y
+ j
)*dst_stride
/sizeof(*dst_row
) + (x
+ i
)*comps
;
137 fetch(0, src
, i
, j
, dst
);
139 dst
[0] = util_format_srgb_to_linear_8unorm(dst
[0]);
140 dst
[1] = util_format_srgb_to_linear_8unorm(dst
[1]);
141 dst
[2] = util_format_srgb_to_linear_8unorm(dst
[2]);
147 src_row
+= src_stride
;
152 util_format_dxt1_rgb_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
153 const uint8_t *src_row
, unsigned src_stride
,
154 unsigned width
, unsigned height
)
156 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
159 util_format_dxt1_rgb_fetch
,
164 util_format_dxt1_rgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
165 const uint8_t *src_row
, unsigned src_stride
,
166 unsigned width
, unsigned height
)
168 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
171 util_format_dxt1_rgba_fetch
,
176 util_format_dxt3_rgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
177 const uint8_t *src_row
, unsigned src_stride
,
178 unsigned width
, unsigned height
)
180 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
183 util_format_dxt3_rgba_fetch
,
188 util_format_dxt5_rgba_unpack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
189 const uint8_t *src_row
, unsigned src_stride
,
190 unsigned width
, unsigned height
)
192 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
195 util_format_dxt5_rgba_fetch
,
200 util_format_dxtn_rgb_unpack_rgba_float(float *dst_row
, unsigned dst_stride
,
201 const uint8_t *src_row
, unsigned src_stride
,
202 unsigned width
, unsigned height
,
203 util_format_dxtn_fetch_t fetch
,
204 unsigned block_size
, boolean srgb
)
207 for(y
= 0; y
< height
; y
+= 4) {
208 const uint8_t *src
= src_row
;
209 for(x
= 0; x
< width
; x
+= 4) {
210 for(j
= 0; j
< 4; ++j
) {
211 for(i
= 0; i
< 4; ++i
) {
212 float *dst
= dst_row
+ (y
+ j
)*dst_stride
/sizeof(*dst_row
) + (x
+ i
)*4;
214 fetch(0, src
, i
, j
, tmp
);
216 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
217 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
218 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
221 dst
[0] = ubyte_to_float(tmp
[0]);
222 dst
[1] = ubyte_to_float(tmp
[1]);
223 dst
[2] = ubyte_to_float(tmp
[2]);
225 dst
[3] = ubyte_to_float(tmp
[3]);
230 src_row
+= src_stride
;
235 util_format_dxt1_rgb_unpack_rgba_float(void *dst_row
, unsigned dst_stride
,
236 const uint8_t *src_row
, unsigned src_stride
,
237 unsigned width
, unsigned height
)
239 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
242 util_format_dxt1_rgb_fetch
,
247 util_format_dxt1_rgba_unpack_rgba_float(void *dst_row
, unsigned dst_stride
,
248 const uint8_t *src_row
, unsigned src_stride
,
249 unsigned width
, unsigned height
)
251 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
254 util_format_dxt1_rgba_fetch
,
259 util_format_dxt3_rgba_unpack_rgba_float(void *dst_row
, unsigned dst_stride
,
260 const uint8_t *src_row
, unsigned src_stride
,
261 unsigned width
, unsigned height
)
263 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
266 util_format_dxt3_rgba_fetch
,
271 util_format_dxt5_rgba_unpack_rgba_float(void *dst_row
, unsigned dst_stride
,
272 const uint8_t *src_row
, unsigned src_stride
,
273 unsigned width
, unsigned height
)
275 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
278 util_format_dxt5_rgba_fetch
,
288 util_format_dxtn_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
289 const uint8_t *src
, unsigned src_stride
,
290 unsigned width
, unsigned height
,
291 enum util_format_dxtn format
,
292 unsigned block_size
, boolean srgb
)
294 const unsigned bw
= 4, bh
= 4, comps
= 4;
295 unsigned x
, y
, i
, j
, k
;
296 for(y
= 0; y
< height
; y
+= bh
) {
297 uint8_t *dst
= dst_row
;
298 for(x
= 0; x
< width
; x
+= bw
) {
299 uint8_t tmp
[4][4][4]; /* [bh][bw][comps] */
300 for(j
= 0; j
< bh
; ++j
) {
301 for(i
= 0; i
< bw
; ++i
) {
303 for(k
= 0; k
< 3; ++k
) {
304 src_tmp
= src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*comps
+ k
];
306 tmp
[j
][i
][k
] = util_format_linear_to_srgb_8unorm(src_tmp
);
309 tmp
[j
][i
][k
] = src_tmp
;
312 /* for sake of simplicity there's an unneeded 4th component for dxt1_rgb */
313 tmp
[j
][i
][3] = src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*comps
+ 3];
316 /* even for dxt1_rgb have 4 src comps */
317 util_format_dxtn_pack(4, 4, 4, &tmp
[0][0][0], format
, dst
, 0);
320 dst_row
+= dst_stride
/ sizeof(*dst_row
);
326 util_format_dxt1_rgb_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
327 const uint8_t *src
, unsigned src_stride
,
328 unsigned width
, unsigned height
)
330 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
331 width
, height
, UTIL_FORMAT_DXT1_RGB
,
336 util_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
337 const uint8_t *src
, unsigned src_stride
,
338 unsigned width
, unsigned height
)
340 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
341 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
346 util_format_dxt3_rgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
347 const uint8_t *src
, unsigned src_stride
,
348 unsigned width
, unsigned height
)
350 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
351 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
356 util_format_dxt5_rgba_pack_rgba_8unorm(uint8_t *dst_row
, unsigned dst_stride
,
357 const uint8_t *src
, unsigned src_stride
,
358 unsigned width
, unsigned height
)
360 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src
, src_stride
,
361 width
, height
, UTIL_FORMAT_DXT5_RGBA
,
366 util_format_dxtn_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
367 const float *src
, unsigned src_stride
,
368 unsigned width
, unsigned height
,
369 enum util_format_dxtn format
,
370 unsigned block_size
, boolean srgb
)
372 unsigned x
, y
, i
, j
, k
;
373 for(y
= 0; y
< height
; y
+= 4) {
374 uint8_t *dst
= dst_row
;
375 for(x
= 0; x
< width
; x
+= 4) {
376 uint8_t tmp
[4][4][4];
377 for(j
= 0; j
< 4; ++j
) {
378 for(i
= 0; i
< 4; ++i
) {
380 for(k
= 0; k
< 3; ++k
) {
381 src_tmp
= src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*4 + k
];
383 tmp
[j
][i
][k
] = util_format_linear_float_to_srgb_8unorm(src_tmp
);
386 tmp
[j
][i
][k
] = float_to_ubyte(src_tmp
);
389 /* for sake of simplicity there's an unneeded 4th component for dxt1_rgb */
390 src_tmp
= src
[(y
+ j
)*src_stride
/sizeof(*src
) + (x
+i
)*4 + 3];
391 tmp
[j
][i
][3] = float_to_ubyte(src_tmp
);
394 util_format_dxtn_pack(4, 4, 4, &tmp
[0][0][0], format
, dst
, 0);
397 dst_row
+= 4*dst_stride
/sizeof(*dst_row
);
402 util_format_dxt1_rgb_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
403 const float *src
, unsigned src_stride
,
404 unsigned width
, unsigned height
)
406 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
407 width
, height
, UTIL_FORMAT_DXT1_RGB
,
412 util_format_dxt1_rgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
413 const float *src
, unsigned src_stride
,
414 unsigned width
, unsigned height
)
416 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
417 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
422 util_format_dxt3_rgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
423 const float *src
, unsigned src_stride
,
424 unsigned width
, unsigned height
)
426 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
427 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
432 util_format_dxt5_rgba_pack_rgba_float(uint8_t *dst_row
, unsigned dst_stride
,
433 const float *src
, unsigned src_stride
,
434 unsigned width
, unsigned height
)
436 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src
, src_stride
,
437 width
, height
, UTIL_FORMAT_DXT5_RGBA
,
447 util_format_dxt1_srgb_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
450 util_format_dxt1_rgb_fetch(0, src
, i
, j
, tmp
);
451 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
452 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
453 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
458 util_format_dxt1_srgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
461 util_format_dxt1_rgba_fetch(0, src
, i
, j
, tmp
);
462 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
463 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
464 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
469 util_format_dxt3_srgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
472 util_format_dxt3_rgba_fetch(0, src
, i
, j
, tmp
);
473 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
474 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
475 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
480 util_format_dxt5_srgba_fetch_rgba_8unorm(uint8_t *dst
, const uint8_t *src
, unsigned i
, unsigned j
)
483 util_format_dxt5_rgba_fetch(0, src
, i
, j
, tmp
);
484 dst
[0] = util_format_srgb_to_linear_8unorm(tmp
[0]);
485 dst
[1] = util_format_srgb_to_linear_8unorm(tmp
[1]);
486 dst
[2] = util_format_srgb_to_linear_8unorm(tmp
[2]);
491 util_format_dxt1_srgb_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
495 util_format_dxt1_rgb_fetch(0, src
, i
, j
, tmp
);
496 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
497 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
498 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
503 util_format_dxt1_srgba_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
507 util_format_dxt1_rgba_fetch(0, src
, i
, j
, tmp
);
508 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
509 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
510 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
511 dst
[3] = ubyte_to_float(tmp
[3]);
515 util_format_dxt3_srgba_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
519 util_format_dxt3_rgba_fetch(0, src
, i
, j
, tmp
);
520 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
521 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
522 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
523 dst
[3] = ubyte_to_float(tmp
[3]);
527 util_format_dxt5_srgba_fetch_rgba(void *in_dst
, const uint8_t *src
, unsigned i
, unsigned j
)
531 util_format_dxt5_rgba_fetch(0, src
, i
, j
, tmp
);
532 dst
[0] = util_format_srgb_8unorm_to_linear_float(tmp
[0]);
533 dst
[1] = util_format_srgb_8unorm_to_linear_float(tmp
[1]);
534 dst
[2] = util_format_srgb_8unorm_to_linear_float(tmp
[2]);
535 dst
[3] = ubyte_to_float(tmp
[3]);
539 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
)
541 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
544 util_format_dxt1_rgb_fetch
,
549 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
)
551 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
554 util_format_dxt1_rgba_fetch
,
559 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
)
561 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
564 util_format_dxt3_rgba_fetch
,
569 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
)
571 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row
, dst_stride
,
574 util_format_dxt5_rgba_fetch
,
579 util_format_dxt1_srgb_unpack_rgba_float(void *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
581 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
584 util_format_dxt1_rgb_fetch
,
589 util_format_dxt1_srgba_unpack_rgba_float(void *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
591 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
594 util_format_dxt1_rgba_fetch
,
599 util_format_dxt3_srgba_unpack_rgba_float(void *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
601 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
604 util_format_dxt3_rgba_fetch
,
609 util_format_dxt5_srgba_unpack_rgba_float(void *dst_row
, unsigned dst_stride
, const uint8_t *src_row
, unsigned src_stride
, unsigned width
, unsigned height
)
611 util_format_dxtn_rgb_unpack_rgba_float(dst_row
, dst_stride
,
614 util_format_dxt5_rgba_fetch
,
619 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
)
621 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
622 width
, height
, UTIL_FORMAT_DXT1_RGB
,
627 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
)
629 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
630 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
635 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
)
637 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
638 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
643 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
)
645 util_format_dxtn_pack_rgba_8unorm(dst_row
, dst_stride
, src_row
, src_stride
,
646 width
, height
, UTIL_FORMAT_DXT5_RGBA
,
651 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
)
653 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
654 width
, height
, UTIL_FORMAT_DXT1_RGB
,
659 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
)
661 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
662 width
, height
, UTIL_FORMAT_DXT1_RGBA
,
667 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
)
669 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
670 width
, height
, UTIL_FORMAT_DXT3_RGBA
,
675 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
)
677 util_format_dxtn_pack_rgba_float(dst_row
, dst_stride
, src_row
, src_stride
,
678 width
, height
, UTIL_FORMAT_DXT5_RGBA
,