u_format_s3tc.c revision 860c51d82711936d343b55aafb46befc8c032fe6
1/************************************************************************** 2 * 3 * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. 4 * Copyright (c) 2008 VMware, Inc. 5 * 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: 12 * 13 * The above copyright notice and this permission notice shall be included 14 * in all copies or substantial portions of the Software. 15 * 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 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 20 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 * 23 **************************************************************************/ 24 25#include "u_dl.h" 26#include "u_math.h" 27#include "u_format.h" 28#include "u_format_s3tc.h" 29 30 31#if defined(_WIN32) || defined(WIN32) 32#define DXTN_LIBNAME "dxtn.dll" 33#elif defined(__APPLE__) 34#define DXTN_LIBNAME "libtxc_dxtn.dylib" 35#else 36#define DXTN_LIBNAME "libtxc_dxtn.so" 37#endif 38 39 40static void 41util_format_dxt1_rgb_fetch_stub(int src_stride, 42 const uint8_t *src, 43 int col, int row, 44 uint8_t *dst) 45{ 46 assert(0); 47} 48 49 50static void 51util_format_dxt1_rgba_fetch_stub(int src_stride, 52 const uint8_t *src, 53 int col, int row, 54 uint8_t *dst ) 55{ 56 assert(0); 57} 58 59 60static void 61util_format_dxt3_rgba_fetch_stub(int src_stride, 62 const uint8_t *src, 63 int col, int row, 64 uint8_t *dst ) 65{ 66 assert(0); 67} 68 69 70static void 71util_format_dxt5_rgba_fetch_stub(int src_stride, 72 const uint8_t *src, 73 int col, int row, 74 uint8_t *dst ) 75{ 76 assert(0); 77} 78 79 80static void 81util_format_dxtn_pack_stub(int src_comps, 82 int width, int height, 83 const uint8_t *src, 84 enum util_format_dxtn dst_format, 85 uint8_t *dst, 86 int dst_stride) 87{ 88 assert(0); 89} 90 91 92boolean util_format_s3tc_enabled = FALSE; 93 94util_format_dxtn_fetch_t util_format_dxt1_rgb_fetch = util_format_dxt1_rgb_fetch_stub; 95util_format_dxtn_fetch_t util_format_dxt1_rgba_fetch = util_format_dxt1_rgba_fetch_stub; 96util_format_dxtn_fetch_t util_format_dxt3_rgba_fetch = util_format_dxt3_rgba_fetch_stub; 97util_format_dxtn_fetch_t util_format_dxt5_rgba_fetch = util_format_dxt5_rgba_fetch_stub; 98 99util_format_dxtn_pack_t util_format_dxtn_pack = util_format_dxtn_pack_stub; 100 101 102void 103util_format_s3tc_init(void) 104{ 105 static boolean first_time = TRUE; 106 struct util_dl_library *library = NULL; 107 util_dl_proc fetch_2d_texel_rgb_dxt1; 108 util_dl_proc fetch_2d_texel_rgba_dxt1; 109 util_dl_proc fetch_2d_texel_rgba_dxt3; 110 util_dl_proc fetch_2d_texel_rgba_dxt5; 111 util_dl_proc tx_compress_dxtn; 112 113 if (!first_time) 114 return; 115 first_time = FALSE; 116 117 if (util_format_s3tc_enabled) 118 return; 119 120 library = util_dl_open(DXTN_LIBNAME); 121 if (!library) { 122 if (getenv("force_s3tc_enable") && 123 !strcmp(getenv("force_s3tc_enable"), "true")) { 124 debug_printf("couldn't open " DXTN_LIBNAME ", enabling DXTn due to " 125 "force_s3tc_enable=true environment variable\n"); 126 util_format_s3tc_enabled = TRUE; 127 } else { 128 debug_printf("couldn't open " DXTN_LIBNAME ", software DXTn " 129 "compression/decompression unavailable\n"); 130 } 131 return; 132 } 133 134 fetch_2d_texel_rgb_dxt1 = 135 util_dl_get_proc_address(library, "fetch_2d_texel_rgb_dxt1"); 136 fetch_2d_texel_rgba_dxt1 = 137 util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt1"); 138 fetch_2d_texel_rgba_dxt3 = 139 util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt3"); 140 fetch_2d_texel_rgba_dxt5 = 141 util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt5"); 142 tx_compress_dxtn = 143 util_dl_get_proc_address(library, "tx_compress_dxtn"); 144 145 if (!util_format_dxt1_rgb_fetch || 146 !util_format_dxt1_rgba_fetch || 147 !util_format_dxt3_rgba_fetch || 148 !util_format_dxt5_rgba_fetch || 149 !util_format_dxtn_pack) { 150 debug_printf("couldn't reference all symbols in " DXTN_LIBNAME 151 ", software DXTn compression/decompression " 152 "unavailable\n"); 153 util_dl_close(library); 154 return; 155 } 156 157 util_format_dxt1_rgb_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgb_dxt1; 158 util_format_dxt1_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt1; 159 util_format_dxt3_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt3; 160 util_format_dxt5_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt5; 161 util_format_dxtn_pack = (util_format_dxtn_pack_t)tx_compress_dxtn; 162 util_format_s3tc_enabled = TRUE; 163} 164 165 166/* 167 * Pixel fetch. 168 */ 169 170void 171util_format_dxt1_rgb_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 172{ 173 util_format_dxt1_rgb_fetch(0, src, i, j, dst); 174} 175 176void 177util_format_dxt1_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 178{ 179 util_format_dxt1_rgba_fetch(0, src, i, j, dst); 180} 181 182void 183util_format_dxt3_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 184{ 185 util_format_dxt3_rgba_fetch(0, src, i, j, dst); 186} 187 188void 189util_format_dxt5_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 190{ 191 util_format_dxt5_rgba_fetch(0, src, i, j, dst); 192} 193 194void 195util_format_dxt1_rgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 196{ 197 uint8_t tmp[4]; 198 util_format_dxt1_rgb_fetch(0, src, i, j, tmp); 199 dst[0] = ubyte_to_float(tmp[0]); 200 dst[1] = ubyte_to_float(tmp[1]); 201 dst[2] = ubyte_to_float(tmp[2]); 202 dst[3] = 1.0; 203} 204 205void 206util_format_dxt1_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 207{ 208 uint8_t tmp[4]; 209 util_format_dxt1_rgba_fetch(0, src, i, j, tmp); 210 dst[0] = ubyte_to_float(tmp[0]); 211 dst[1] = ubyte_to_float(tmp[1]); 212 dst[2] = ubyte_to_float(tmp[2]); 213 dst[3] = ubyte_to_float(tmp[3]); 214} 215 216void 217util_format_dxt3_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 218{ 219 uint8_t tmp[4]; 220 util_format_dxt3_rgba_fetch(0, src, i, j, tmp); 221 dst[0] = ubyte_to_float(tmp[0]); 222 dst[1] = ubyte_to_float(tmp[1]); 223 dst[2] = ubyte_to_float(tmp[2]); 224 dst[3] = ubyte_to_float(tmp[3]); 225} 226 227void 228util_format_dxt5_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 229{ 230 uint8_t tmp[4]; 231 util_format_dxt5_rgba_fetch(0, src, i, j, tmp); 232 dst[0] = ubyte_to_float(tmp[0]); 233 dst[1] = ubyte_to_float(tmp[1]); 234 dst[2] = ubyte_to_float(tmp[2]); 235 dst[3] = ubyte_to_float(tmp[3]); 236} 237 238 239/* 240 * Block decompression. 241 */ 242 243static INLINE void 244util_format_dxtn_rgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 245 const uint8_t *src_row, unsigned src_stride, 246 unsigned width, unsigned height, 247 util_format_dxtn_fetch_t fetch, 248 unsigned block_size) 249{ 250 const unsigned bw = 4, bh = 4, comps = 4; 251 unsigned x, y, i, j; 252 for(y = 0; y < height; y += bh) { 253 const uint8_t *src = src_row; 254 for(x = 0; x < width; x += bw) { 255 for(j = 0; j < bh; ++j) { 256 for(i = 0; i < bw; ++i) { 257 uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; 258 fetch(0, src, i, j, dst); 259 } 260 } 261 src += block_size; 262 } 263 src_row += src_stride; 264 } 265} 266 267void 268util_format_dxt1_rgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 269 const uint8_t *src_row, unsigned src_stride, 270 unsigned width, unsigned height) 271{ 272 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 273 src_row, src_stride, 274 width, height, 275 util_format_dxt1_rgb_fetch, 8); 276} 277 278void 279util_format_dxt1_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 280 const uint8_t *src_row, unsigned src_stride, 281 unsigned width, unsigned height) 282{ 283 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 284 src_row, src_stride, 285 width, height, 286 util_format_dxt1_rgba_fetch, 8); 287} 288 289void 290util_format_dxt3_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 291 const uint8_t *src_row, unsigned src_stride, 292 unsigned width, unsigned height) 293{ 294 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 295 src_row, src_stride, 296 width, height, 297 util_format_dxt3_rgba_fetch, 16); 298} 299 300void 301util_format_dxt5_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 302 const uint8_t *src_row, unsigned src_stride, 303 unsigned width, unsigned height) 304{ 305 util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 306 src_row, src_stride, 307 width, height, 308 util_format_dxt5_rgba_fetch, 16); 309} 310 311static INLINE void 312util_format_dxtn_rgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, 313 const uint8_t *src_row, unsigned src_stride, 314 unsigned width, unsigned height, 315 util_format_dxtn_fetch_t fetch, 316 unsigned block_size) 317{ 318 unsigned x, y, i, j; 319 for(y = 0; y < height; y += 4) { 320 const uint8_t *src = src_row; 321 for(x = 0; x < width; x += 4) { 322 for(j = 0; j < 4; ++j) { 323 for(i = 0; i < 4; ++i) { 324 float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4; 325 uint8_t tmp[4]; 326 fetch(0, src, i, j, tmp); 327 dst[0] = ubyte_to_float(tmp[0]); 328 dst[1] = ubyte_to_float(tmp[1]); 329 dst[2] = ubyte_to_float(tmp[2]); 330 dst[3] = ubyte_to_float(tmp[3]); 331 } 332 } 333 src += block_size; 334 } 335 src_row += src_stride; 336 } 337} 338 339void 340util_format_dxt1_rgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, 341 const uint8_t *src_row, unsigned src_stride, 342 unsigned width, unsigned height) 343{ 344 util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 345 src_row, src_stride, 346 width, height, 347 util_format_dxt1_rgb_fetch, 8); 348} 349 350void 351util_format_dxt1_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, 352 const uint8_t *src_row, unsigned src_stride, 353 unsigned width, unsigned height) 354{ 355 util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 356 src_row, src_stride, 357 width, height, 358 util_format_dxt1_rgba_fetch, 8); 359} 360 361void 362util_format_dxt3_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, 363 const uint8_t *src_row, unsigned src_stride, 364 unsigned width, unsigned height) 365{ 366 util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 367 src_row, src_stride, 368 width, height, 369 util_format_dxt3_rgba_fetch, 16); 370} 371 372void 373util_format_dxt5_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, 374 const uint8_t *src_row, unsigned src_stride, 375 unsigned width, unsigned height) 376{ 377 util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 378 src_row, src_stride, 379 width, height, 380 util_format_dxt5_rgba_fetch, 16); 381} 382 383 384/* 385 * Block compression. 386 */ 387 388void 389util_format_dxt1_rgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 390 const uint8_t *src, unsigned src_stride, 391 unsigned width, unsigned height) 392{ 393 const unsigned bw = 4, bh = 4, bytes_per_block = 8; 394 unsigned x, y, i, j, k; 395 for(y = 0; y < height; y += bh) { 396 uint8_t *dst = dst_row; 397 for(x = 0; x < width; x += bw) { 398 uint8_t tmp[4][4][3]; /* [bh][bw][comps] */ 399 for(j = 0; j < bh; ++j) { 400 for(i = 0; i < bw; ++i) { 401 for(k = 0; k < 3; ++k) { 402 tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*4 + k]; 403 } 404 } 405 } 406 util_format_dxtn_pack(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0); 407 dst += bytes_per_block; 408 } 409 dst_row += dst_stride / sizeof(*dst_row); 410 } 411} 412 413void 414util_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 415 const uint8_t *src, unsigned src_stride, 416 unsigned width, unsigned height) 417{ 418 const unsigned bw = 4, bh = 4, comps = 4, bytes_per_block = 8; 419 unsigned x, y, i, j, k; 420 for(y = 0; y < height; y += bh) { 421 uint8_t *dst = dst_row; 422 for(x = 0; x < width; x += bw) { 423 uint8_t tmp[4][4][4]; /* [bh][bw][comps] */ 424 for(j = 0; j < bh; ++j) { 425 for(i = 0; i < bw; ++i) { 426 for(k = 0; k < comps; ++k) { 427 tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps + k]; 428 } 429 } 430 } 431 util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0); 432 dst += bytes_per_block; 433 } 434 dst_row += dst_stride / sizeof(*dst_row); 435 } 436} 437 438void 439util_format_dxt3_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 440 const uint8_t *src, unsigned src_stride, 441 unsigned width, unsigned height) 442{ 443 const unsigned bw = 4, bh = 4, comps = 4, bytes_per_block = 16; 444 unsigned x, y, i, j, k; 445 for(y = 0; y < height; y += bh) { 446 uint8_t *dst = dst_row; 447 for(x = 0; x < width; x += bw) { 448 uint8_t tmp[4][4][4]; /* [bh][bw][comps] */ 449 for(j = 0; j < bh; ++j) { 450 for(i = 0; i < bw; ++i) { 451 for(k = 0; k < comps; ++k) { 452 tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps + k]; 453 } 454 } 455 } 456 util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0); 457 dst += bytes_per_block; 458 } 459 dst_row += dst_stride / sizeof(*dst_row); 460 } 461} 462 463void 464util_format_dxt5_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 465 const uint8_t *src, unsigned src_stride, 466 unsigned width, unsigned height) 467{ 468 const unsigned bw = 4, bh = 4, comps = 4, bytes_per_block = 16; 469 unsigned x, y, i, j, k; 470 471 for(y = 0; y < height; y += bh) { 472 uint8_t *dst = dst_row; 473 for(x = 0; x < width; x += bw) { 474 uint8_t tmp[4][4][4]; /* [bh][bw][comps] */ 475 for(j = 0; j < bh; ++j) { 476 for(i = 0; i < bw; ++i) { 477 for(k = 0; k < comps; ++k) { 478 tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps + k]; 479 } 480 } 481 } 482 util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0); 483 dst += bytes_per_block; 484 } 485 dst_row += dst_stride / sizeof(*dst_row); 486 } 487} 488 489void 490util_format_dxt1_rgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 491 const float *src, unsigned src_stride, 492 unsigned width, unsigned height) 493{ 494 unsigned x, y, i, j, k; 495 for(y = 0; y < height; y += 4) { 496 uint8_t *dst = dst_row; 497 for(x = 0; x < width; x += 4) { 498 uint8_t tmp[4][4][3]; 499 for(j = 0; j < 4; ++j) { 500 for(i = 0; i < 4; ++i) { 501 for(k = 0; k < 3; ++k) { 502 tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 503 } 504 } 505 } 506 util_format_dxtn_pack(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0); 507 dst += 8; 508 } 509 dst_row += 4*dst_stride/sizeof(*dst_row); 510 } 511} 512 513void 514util_format_dxt1_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 515 const float *src, unsigned src_stride, 516 unsigned width, unsigned height) 517{ 518 unsigned x, y, i, j, k; 519 for(y = 0; y < height; y += 4) { 520 uint8_t *dst = dst_row; 521 for(x = 0; x < width; x += 4) { 522 uint8_t tmp[4][4][4]; 523 for(j = 0; j < 4; ++j) { 524 for(i = 0; i < 4; ++i) { 525 for(k = 0; k < 4; ++k) { 526 tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 527 } 528 } 529 } 530 util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0); 531 dst += 8; 532 } 533 dst_row += 4*dst_stride/sizeof(*dst_row); 534 } 535} 536 537void 538util_format_dxt3_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 539 const float *src, unsigned src_stride, 540 unsigned width, unsigned height) 541{ 542 unsigned x, y, i, j, k; 543 for(y = 0; y < height; y += 4) { 544 uint8_t *dst = dst_row; 545 for(x = 0; x < width; x += 4) { 546 uint8_t tmp[4][4][4]; 547 for(j = 0; j < 4; ++j) { 548 for(i = 0; i < 4; ++i) { 549 for(k = 0; k < 4; ++k) { 550 tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 551 } 552 } 553 } 554 util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0); 555 dst += 16; 556 } 557 dst_row += 4*dst_stride/sizeof(*dst_row); 558 } 559} 560 561void 562util_format_dxt5_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 563 const float *src, unsigned src_stride, 564 unsigned width, unsigned height) 565{ 566 unsigned x, y, i, j, k; 567 for(y = 0; y < height; y += 4) { 568 uint8_t *dst = dst_row; 569 for(x = 0; x < width; x += 4) { 570 uint8_t tmp[4][4][4]; 571 for(j = 0; j < 4; ++j) { 572 for(i = 0; i < 4; ++i) { 573 for(k = 0; k < 4; ++k) { 574 tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 575 } 576 } 577 } 578 util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0); 579 dst += 16; 580 } 581 dst_row += 4*dst_stride/sizeof(*dst_row); 582 } 583} 584 585 586/* 587 * SRGB variants. 588 * 589 * FIXME: shunts to RGB for now 590 */ 591 592void 593util_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) 594{ 595 util_format_dxt1_rgb_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 596} 597 598void 599util_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) 600{ 601 util_format_dxt1_rgb_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 602} 603 604void 605util_format_dxt1_srgb_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 606{ 607 util_format_dxt1_rgb_fetch_rgba_8unorm(dst, src, i, j); 608} 609 610void 611util_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) 612{ 613 util_format_dxt1_rgba_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 614} 615 616void 617util_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) 618{ 619 util_format_dxt1_rgba_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 620} 621 622void 623util_format_dxt1_srgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 624{ 625 util_format_dxt1_rgba_fetch_rgba_8unorm(dst, src, i, j); 626} 627 628void 629util_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) 630{ 631 util_format_dxt3_rgba_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 632} 633 634void 635util_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) 636{ 637 util_format_dxt3_rgba_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 638} 639 640void 641util_format_dxt3_srgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 642{ 643 util_format_dxt3_rgba_fetch_rgba_8unorm(dst, src, i, j); 644} 645 646void 647util_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) 648{ 649 util_format_dxt5_rgba_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 650} 651 652void 653util_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) 654{ 655 util_format_dxt5_rgba_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 656} 657 658void 659util_format_dxt5_srgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 660{ 661 util_format_dxt5_rgba_fetch_rgba_8unorm(dst, src, i, j); 662} 663 664void 665util_format_dxt1_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 666{ 667 util_format_dxt1_rgb_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 668} 669 670void 671util_format_dxt1_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 672{ 673 util_format_dxt1_rgb_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 674} 675 676void 677util_format_dxt1_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 678{ 679 util_format_dxt1_rgb_fetch_rgba_float(dst, src, i, j); 680} 681 682void 683util_format_dxt1_srgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 684{ 685 util_format_dxt1_rgba_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 686} 687 688void 689util_format_dxt1_srgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 690{ 691 util_format_dxt1_rgba_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 692} 693 694void 695util_format_dxt1_srgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 696{ 697 util_format_dxt1_rgba_fetch_rgba_float(dst, src, i, j); 698} 699 700void 701util_format_dxt3_srgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 702{ 703 util_format_dxt3_rgba_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 704} 705 706void 707util_format_dxt3_srgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 708{ 709 util_format_dxt3_rgba_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 710} 711 712void 713util_format_dxt3_srgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 714{ 715 util_format_dxt3_rgba_fetch_rgba_float(dst, src, i, j); 716} 717 718void 719util_format_dxt5_srgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 720{ 721 util_format_dxt5_rgba_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 722} 723 724void 725util_format_dxt5_srgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 726{ 727 util_format_dxt5_rgba_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 728} 729 730void 731util_format_dxt5_srgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 732{ 733 util_format_dxt5_rgba_fetch_rgba_float(dst, src, i, j); 734} 735 736