19388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca/************************************************************************** 29388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * 39388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. 49388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * Copyright (c) 2008 VMware, Inc. 59388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * 69388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 79388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * copy of this software and associated documentation files (the "Software"), 89388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * to deal in the Software without restriction, including without limitation 99388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * the rights to use, copy, modify, merge, publish, distribute, sublicense, 109388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * and/or sell copies of the Software, and to permit persons to whom the 119388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * Software is furnished to do so, subject to the following conditions: 129388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * 139388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * The above copyright notice and this permission notice shall be included 149388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * in all copies or substantial portions of the Software. 159388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * 169388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 179388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 189388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 199388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 209388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 219388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 229388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * 239388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca **************************************************************************/ 249388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 259388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#include "u_dl.h" 269388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#include "u_math.h" 279388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#include "u_format.h" 289388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#include "u_format_s3tc.h" 299388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 309388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 319388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#if defined(_WIN32) || defined(WIN32) 329388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#define DXTN_LIBNAME "dxtn.dll" 3308100aa44449e9f43d7b3b7b195d68185c109703Vinson Lee#elif defined(__APPLE__) 3408100aa44449e9f43d7b3b7b195d68185c109703Vinson Lee#define DXTN_LIBNAME "libtxc_dxtn.dylib" 359388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#else 369388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#define DXTN_LIBNAME "libtxc_dxtn.so" 379388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca#endif 389388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3952e9b990a192a9329006d5f7dd2ac222effea5a5Luca Barbieri 40d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecastatic void 41d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxt1_rgb_fetch_stub(int src_stride, 42d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca const uint8_t *src, 43d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca int col, int row, 44d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst) 45d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca{ 46d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca assert(0); 47d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca} 48d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 49d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 50d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecastatic void 51d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxt1_rgba_fetch_stub(int src_stride, 52d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca const uint8_t *src, 53d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca int col, int row, 54d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst ) 55d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca{ 56d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca assert(0); 57d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca} 58d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 59d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 60d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecastatic void 61d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxt3_rgba_fetch_stub(int src_stride, 62d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca const uint8_t *src, 63d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca int col, int row, 64d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst ) 65d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca{ 66d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca assert(0); 67d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca} 68d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 69d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 70d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecastatic void 71d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxt5_rgba_fetch_stub(int src_stride, 72d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca const uint8_t *src, 73d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca int col, int row, 74d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst ) 75d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca{ 76d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca assert(0); 77d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca} 78d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 79d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 80d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecastatic void 81d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxtn_pack_stub(int src_comps, 82d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca int width, int height, 83d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca const uint8_t *src, 84d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca enum util_format_dxtn dst_format, 85d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst, 86d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca int dst_stride) 87d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca{ 88d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca assert(0); 89d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca} 90d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 91d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 9247e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonsecaboolean util_format_s3tc_enabled = FALSE; 9352e9b990a192a9329006d5f7dd2ac222effea5a5Luca Barbieri 94d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxtn_fetch_t util_format_dxt1_rgb_fetch = util_format_dxt1_rgb_fetch_stub; 95d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxtn_fetch_t util_format_dxt1_rgba_fetch = util_format_dxt1_rgba_fetch_stub; 96d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxtn_fetch_t util_format_dxt3_rgba_fetch = util_format_dxt3_rgba_fetch_stub; 97d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxtn_fetch_t util_format_dxt5_rgba_fetch = util_format_dxt5_rgba_fetch_stub; 9852e9b990a192a9329006d5f7dd2ac222effea5a5Luca Barbieri 99d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonsecautil_format_dxtn_pack_t util_format_dxtn_pack = util_format_dxtn_pack_stub; 10052e9b990a192a9329006d5f7dd2ac222effea5a5Luca Barbieri 1019388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 10252e9b990a192a9329006d5f7dd2ac222effea5a5Luca Barbierivoid 10347e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonsecautil_format_s3tc_init(void) 10452e9b990a192a9329006d5f7dd2ac222effea5a5Luca Barbieri{ 105d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca static boolean first_time = TRUE; 106d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca struct util_dl_library *library = NULL; 107d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_proc fetch_2d_texel_rgb_dxt1; 108d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_proc fetch_2d_texel_rgba_dxt1; 109d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_proc fetch_2d_texel_rgba_dxt3; 110d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_proc fetch_2d_texel_rgba_dxt5; 111d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_proc tx_compress_dxtn; 112d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 113d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca if (!first_time) 114d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca return; 115d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca first_time = FALSE; 1165126683e3b971ccfb51e50e560750ce44e86bae8Luca Barbieri 11747e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca if (util_format_s3tc_enabled) 11847e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca return; 1195126683e3b971ccfb51e50e560750ce44e86bae8Luca Barbieri 120d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca library = util_dl_open(DXTN_LIBNAME); 12147e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca if (!library) { 122860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain if (getenv("force_s3tc_enable") && 123860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain !strcmp(getenv("force_s3tc_enable"), "true")) { 124860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain debug_printf("couldn't open " DXTN_LIBNAME ", enabling DXTn due to " 125860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain "force_s3tc_enable=true environment variable\n"); 126860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain util_format_s3tc_enabled = TRUE; 127860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain } else { 128860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain debug_printf("couldn't open " DXTN_LIBNAME ", software DXTn " 129860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain "compression/decompression unavailable\n"); 130860c51d82711936d343b55aafb46befc8c032fe6Bryan Cain } 131d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca return; 132d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca } 133d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 134d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca fetch_2d_texel_rgb_dxt1 = 135d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_get_proc_address(library, "fetch_2d_texel_rgb_dxt1"); 136d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca fetch_2d_texel_rgba_dxt1 = 137d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt1"); 138d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca fetch_2d_texel_rgba_dxt3 = 139d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt3"); 140d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca fetch_2d_texel_rgba_dxt5 = 141d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt5"); 142d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca tx_compress_dxtn = 143d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_dl_get_proc_address(library, "tx_compress_dxtn"); 144d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 145d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca if (!util_format_dxt1_rgb_fetch || 146d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca !util_format_dxt1_rgba_fetch || 147d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca !util_format_dxt3_rgba_fetch || 148d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca !util_format_dxt5_rgba_fetch || 149d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca !util_format_dxtn_pack) { 150d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca debug_printf("couldn't reference all symbols in " DXTN_LIBNAME 151d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca ", software DXTn compression/decompression " 152d0f9e7521c6e59852ceb00b30f063d0fe2c72965Luca Barbieri "unavailable\n"); 153bc2bc0306e4dd8c56bd66a8aabf2433f6689653dVinson Lee util_dl_close(library); 154d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca return; 15547e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca } 156d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca 157d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt1_rgb_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgb_dxt1; 158d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt1_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt1; 159d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt3_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt3; 160d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt5_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt5; 161d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxtn_pack = (util_format_dxtn_pack_t)tx_compress_dxtn; 162d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_s3tc_enabled = TRUE; 1639388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 1649388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 1659388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 1669388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca/* 1679388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * Pixel fetch. 1689388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca */ 1699388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 1709388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 171d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_rgb_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 1729388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 173d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt1_rgb_fetch(0, src, i, j, dst); 1749388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 1759388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 1769388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 177d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 1789388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 179d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt1_rgba_fetch(0, src, i, j, dst); 1809388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 1819388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 1829388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 183d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt3_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 1849388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 185d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt3_rgba_fetch(0, src, i, j, dst); 1869388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 1879388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 1889388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 189d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt5_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 1909388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 191d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt5_rgba_fetch(0, src, i, j, dst); 1929388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 1939388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 1949388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 195d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_rgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 1969388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 197d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4]; 198d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt1_rgb_fetch(0, src, i, j, tmp); 199d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[0] = ubyte_to_float(tmp[0]); 200d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[1] = ubyte_to_float(tmp[1]); 201d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[2] = ubyte_to_float(tmp[2]); 202d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[3] = 1.0; 2039388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2049388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2059388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 206d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 2079388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 208d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4]; 209d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt1_rgba_fetch(0, src, i, j, tmp); 210d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[0] = ubyte_to_float(tmp[0]); 211d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[1] = ubyte_to_float(tmp[1]); 212d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[2] = ubyte_to_float(tmp[2]); 213d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[3] = ubyte_to_float(tmp[3]); 2149388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2159388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2169388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 217d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt3_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 2189388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 219d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4]; 220d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt3_rgba_fetch(0, src, i, j, tmp); 221d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[0] = ubyte_to_float(tmp[0]); 222d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[1] = ubyte_to_float(tmp[1]); 223d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[2] = ubyte_to_float(tmp[2]); 224d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[3] = ubyte_to_float(tmp[3]); 2259388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2269388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2279388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 228d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt5_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 2299388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 230d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4]; 231d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca util_format_dxt5_rgba_fetch(0, src, i, j, tmp); 232d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[0] = ubyte_to_float(tmp[0]); 233d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[1] = ubyte_to_float(tmp[1]); 234d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[2] = ubyte_to_float(tmp[2]); 235d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[3] = ubyte_to_float(tmp[3]); 2369388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2379388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2389388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2399388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca/* 2409388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * Block decompression. 2419388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca */ 2429388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 24352bc90caa86925629296c02306773c4e00176f78José Fonsecastatic INLINE void 24452bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxtn_rgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 24552bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 24652bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height, 24752bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_fetch_t fetch, 24852bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned block_size) 2499388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 25015c53d124500864bfab66cfde43aa75d905925d8Brian Paul const unsigned bw = 4, bh = 4, comps = 4; 251d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j; 25215c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(y = 0; y < height; y += bh) { 253d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca const uint8_t *src = src_row; 25415c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(x = 0; x < width; x += bw) { 25515c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(j = 0; j < bh; ++j) { 25615c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(i = 0; i < bw; ++i) { 25715c53d124500864bfab66cfde43aa75d905925d8Brian Paul uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; 25852bc90caa86925629296c02306773c4e00176f78José Fonseca fetch(0, src, i, j, dst); 2598548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 2608548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 26152bc90caa86925629296c02306773c4e00176f78José Fonseca src += block_size; 2628548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 263d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca src_row += src_stride; 2648548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 2659388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2669388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2679388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 26852bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 26952bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 27052bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 2719388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 27252bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 27352bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 27452bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 27552bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt1_rgb_fetch, 8); 2769388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2779388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2789388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 27952bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 28052bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 28152bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 2829388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 28352bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 28452bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 28552bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 28652bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt1_rgba_fetch, 8); 2879388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2889388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 2899388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 29052bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt3_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 29152bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 29252bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 2939388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 29452bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 29552bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 29652bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 29752bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt3_rgba_fetch, 16); 2989388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 2999388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3009388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 30152bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt5_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 30252bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 30352bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 3049388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 30552bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, 30652bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 30752bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 30852bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt5_rgba_fetch, 16); 3099388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 3109388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3111eeae05441f4cf77773efa7079eec1fe4b70c5d9José Fonsecastatic INLINE void 31252bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxtn_rgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, 31352bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 31452bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height, 31552bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_fetch_t fetch, 31652bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned block_size) 3179388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 318d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j; 319d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(y = 0; y < height; y += 4) { 320d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca const uint8_t *src = src_row; 321d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(x = 0; x < width; x += 4) { 322d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(j = 0; j < 4; ++j) { 323d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(i = 0; i < 4; ++i) { 324d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4; 325d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4]; 32652bc90caa86925629296c02306773c4e00176f78José Fonseca fetch(0, src, i, j, tmp); 327d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[0] = ubyte_to_float(tmp[0]); 328d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[1] = ubyte_to_float(tmp[1]); 329d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[2] = ubyte_to_float(tmp[2]); 330d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst[3] = ubyte_to_float(tmp[3]); 3319388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca } 3329388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca } 33352bc90caa86925629296c02306773c4e00176f78José Fonseca src += block_size; 3349388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca } 335d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca src_row += src_stride; 3369388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca } 3379388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 3389388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3399388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 34052bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, 34152bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 34252bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 3439388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 34452bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 34552bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 34652bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 34752bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt1_rgb_fetch, 8); 3489388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 3499388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3509388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 35152bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, 35252bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 35352bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 3549388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 35552bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 35652bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 35752bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 35852bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt1_rgba_fetch, 8); 35952bc90caa86925629296c02306773c4e00176f78José Fonseca} 36052bc90caa86925629296c02306773c4e00176f78José Fonseca 36152bc90caa86925629296c02306773c4e00176f78José Fonsecavoid 36252bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt3_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, 36352bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 36452bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 36552bc90caa86925629296c02306773c4e00176f78José Fonseca{ 36652bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 36752bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 36852bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 36952bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt3_rgba_fetch, 16); 37052bc90caa86925629296c02306773c4e00176f78José Fonseca} 37152bc90caa86925629296c02306773c4e00176f78José Fonseca 37252bc90caa86925629296c02306773c4e00176f78José Fonsecavoid 37352bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt5_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, 37452bc90caa86925629296c02306773c4e00176f78José Fonseca const uint8_t *src_row, unsigned src_stride, 37552bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 37652bc90caa86925629296c02306773c4e00176f78José Fonseca{ 37752bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, 37852bc90caa86925629296c02306773c4e00176f78José Fonseca src_row, src_stride, 37952bc90caa86925629296c02306773c4e00176f78José Fonseca width, height, 38052bc90caa86925629296c02306773c4e00176f78José Fonseca util_format_dxt5_rgba_fetch, 16); 3819388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 3829388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3839388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3849388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca/* 3859388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * Block compression. 3869388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca */ 3879388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 3889388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 38952bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 39015c53d124500864bfab66cfde43aa75d905925d8Brian Paul const uint8_t *src, unsigned src_stride, 39152bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 3929388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 39315c53d124500864bfab66cfde43aa75d905925d8Brian Paul const unsigned bw = 4, bh = 4, bytes_per_block = 8; 394d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 39515c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(y = 0; y < height; y += bh) { 396d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 39715c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(x = 0; x < width; x += bw) { 39815c53d124500864bfab66cfde43aa75d905925d8Brian Paul uint8_t tmp[4][4][3]; /* [bh][bw][comps] */ 39915c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(j = 0; j < bh; ++j) { 40015c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(i = 0; i < bw; ++i) { 401d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(k = 0; k < 3; ++k) { 40215c53d124500864bfab66cfde43aa75d905925d8Brian Paul tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*4 + k]; 4038548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 4048548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 4058548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 40615c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0); 40715c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst += bytes_per_block; 4088548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 40915c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst_row += dst_stride / sizeof(*dst_row); 4108548efbe1d2ebc9cfe5636d3e0f3064958ad0644José Fonseca } 4119388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 4129388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 4139388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 41452bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 41515c53d124500864bfab66cfde43aa75d905925d8Brian Paul const uint8_t *src, unsigned src_stride, 41652bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 4179388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 41815c53d124500864bfab66cfde43aa75d905925d8Brian Paul const unsigned bw = 4, bh = 4, comps = 4, bytes_per_block = 8; 419d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 42015c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(y = 0; y < height; y += bh) { 421d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 42215c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(x = 0; x < width; x += bw) { 42315c53d124500864bfab66cfde43aa75d905925d8Brian Paul uint8_t tmp[4][4][4]; /* [bh][bw][comps] */ 42415c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(j = 0; j < bh; ++j) { 42515c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(i = 0; i < bw; ++i) { 4264ffef888997888c120deba9c1604cfd56645c041Dave Airlie for(k = 0; k < comps; ++k) { 4274ffef888997888c120deba9c1604cfd56645c041Dave Airlie tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps + k]; 42808eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 42908eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 43008eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 43115c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0); 43215c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst += bytes_per_block; 43308eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 43415c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst_row += dst_stride / sizeof(*dst_row); 43508eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 4369388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 4379388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 4389388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 43952bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt3_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 44015c53d124500864bfab66cfde43aa75d905925d8Brian Paul const uint8_t *src, unsigned src_stride, 44152bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 4429388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 44315c53d124500864bfab66cfde43aa75d905925d8Brian Paul const unsigned bw = 4, bh = 4, comps = 4, bytes_per_block = 16; 444d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 44515c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(y = 0; y < height; y += bh) { 446d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 44715c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(x = 0; x < width; x += bw) { 44815c53d124500864bfab66cfde43aa75d905925d8Brian Paul uint8_t tmp[4][4][4]; /* [bh][bw][comps] */ 44915c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(j = 0; j < bh; ++j) { 45015c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(i = 0; i < bw; ++i) { 45115c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(k = 0; k < comps; ++k) { 45215c53d124500864bfab66cfde43aa75d905925d8Brian Paul tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps + k]; 45308eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 45408eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 45508eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 45615c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0); 45715c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst += bytes_per_block; 45808eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 45915c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst_row += dst_stride / sizeof(*dst_row); 46008eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 4619388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 4629388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 4639388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 46452bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt5_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 46515c53d124500864bfab66cfde43aa75d905925d8Brian Paul const uint8_t *src, unsigned src_stride, 46652bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 4679388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 46815c53d124500864bfab66cfde43aa75d905925d8Brian Paul const unsigned bw = 4, bh = 4, comps = 4, bytes_per_block = 16; 469d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 47015c53d124500864bfab66cfde43aa75d905925d8Brian Paul 47115c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(y = 0; y < height; y += bh) { 472d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 47315c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(x = 0; x < width; x += bw) { 47415c53d124500864bfab66cfde43aa75d905925d8Brian Paul uint8_t tmp[4][4][4]; /* [bh][bw][comps] */ 47515c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(j = 0; j < bh; ++j) { 47615c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(i = 0; i < bw; ++i) { 47715c53d124500864bfab66cfde43aa75d905925d8Brian Paul for(k = 0; k < comps; ++k) { 47815c53d124500864bfab66cfde43aa75d905925d8Brian Paul tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps + k]; 47908eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 48008eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 48108eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 48215c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0); 48315c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst += bytes_per_block; 48408eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 48515c53d124500864bfab66cfde43aa75d905925d8Brian Paul dst_row += dst_stride / sizeof(*dst_row); 48608eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 4879388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 4889388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 4899388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 49052bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 49115c53d124500864bfab66cfde43aa75d905925d8Brian Paul const float *src, unsigned src_stride, 49252bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 4939388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 494d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 495d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(y = 0; y < height; y += 4) { 496d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 497d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(x = 0; x < width; x += 4) { 498d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4][4][3]; 499d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(j = 0; j < 4; ++j) { 500d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(i = 0; i < 4; ++i) { 501d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(k = 0; k < 3; ++k) { 50215c53d124500864bfab66cfde43aa75d905925d8Brian Paul tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 50308eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 50408eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 50508eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 50615c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0); 507d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst += 8; 50808eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 509d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst_row += 4*dst_stride/sizeof(*dst_row); 51008eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 5119388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 5129388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 5139388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 51452bc90caa86925629296c02306773c4e00176f78José Fonsecautil_format_dxt1_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 51515c53d124500864bfab66cfde43aa75d905925d8Brian Paul const float *src, unsigned src_stride, 51652bc90caa86925629296c02306773c4e00176f78José Fonseca unsigned width, unsigned height) 5179388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 518d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 519d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(y = 0; y < height; y += 4) { 520d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 521d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(x = 0; x < width; x += 4) { 522d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4][4][4]; 523d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(j = 0; j < 4; ++j) { 524d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(i = 0; i < 4; ++i) { 525d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(k = 0; k < 4; ++k) { 52615c53d124500864bfab66cfde43aa75d905925d8Brian Paul tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 52708eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 52808eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 52908eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 53015c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0); 531d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst += 8; 53208eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 533d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst_row += 4*dst_stride/sizeof(*dst_row); 53408eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 5359388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 5369388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 5379388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 53815c53d124500864bfab66cfde43aa75d905925d8Brian Paulutil_format_dxt3_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 53915c53d124500864bfab66cfde43aa75d905925d8Brian Paul const float *src, unsigned src_stride, 54015c53d124500864bfab66cfde43aa75d905925d8Brian Paul unsigned width, unsigned height) 5419388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 542d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 543d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(y = 0; y < height; y += 4) { 544d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 545d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(x = 0; x < width; x += 4) { 546d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4][4][4]; 547d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(j = 0; j < 4; ++j) { 548d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(i = 0; i < 4; ++i) { 549d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(k = 0; k < 4; ++k) { 55015c53d124500864bfab66cfde43aa75d905925d8Brian Paul tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 55108eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 55208eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 55308eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 55415c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0); 555d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst += 16; 55608eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 557d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst_row += 4*dst_stride/sizeof(*dst_row); 55808eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 5599388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 5609388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 5619388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 56215c53d124500864bfab66cfde43aa75d905925d8Brian Paulutil_format_dxt5_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 56315c53d124500864bfab66cfde43aa75d905925d8Brian Paul const float *src, unsigned src_stride, 56415c53d124500864bfab66cfde43aa75d905925d8Brian Paul unsigned width, unsigned height) 5659388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 566d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca unsigned x, y, i, j, k; 567d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(y = 0; y < height; y += 4) { 568d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t *dst = dst_row; 569d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(x = 0; x < width; x += 4) { 570d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca uint8_t tmp[4][4][4]; 571d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(j = 0; j < 4; ++j) { 572d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(i = 0; i < 4; ++i) { 573d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca for(k = 0; k < 4; ++k) { 57415c53d124500864bfab66cfde43aa75d905925d8Brian Paul tmp[j][i][k] = float_to_ubyte(src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]); 57508eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 57608eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 57708eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 57815c53d124500864bfab66cfde43aa75d905925d8Brian Paul util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0); 579d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst += 16; 58008eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 581d96e87c3c513f8ed350ae24425edb74b6d6fcc13José Fonseca dst_row += 4*dst_stride/sizeof(*dst_row); 58208eb07bc83c9ba81ad5b497b8991d1069e17f4d7José Fonseca } 5839388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 5849388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 5859388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 5869388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca/* 5879388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * SRGB variants. 5889388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * 5899388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca * FIXME: shunts to RGB for now 5909388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca */ 5919388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 5929388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 593d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 5949388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 595d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgb_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 5969388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 5979388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 5989388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 599d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 6009388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 601d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgb_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 6029388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6039388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6049388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 605d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgb_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 6069388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 607d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgb_fetch_rgba_8unorm(dst, src, i, j); 6089388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6099388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6109388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 611d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 6129388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 613d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgba_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 6149388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6159388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6169388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 617d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 6189388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 619d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgba_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 6209388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6219388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6229388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 623d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 6249388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 625d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgba_fetch_rgba_8unorm(dst, src, i, j); 6269388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6279388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6289388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 629d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 6309388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 631d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt3_rgba_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 6329388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6339388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6349388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 635d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 6369388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 637d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt3_rgba_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 6389388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6399388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6409388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 641d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt3_srgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 6429388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 643d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt3_rgba_fetch_rgba_8unorm(dst, src, i, j); 6449388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6459388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6469388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 647d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 6489388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 649d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt5_rgba_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 6509388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6519388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6529388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 653d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_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) 6549388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 655d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt5_rgba_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); 6569388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6579388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6589388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 659d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt5_srgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j) 6609388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 661d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt5_rgba_fetch_rgba_8unorm(dst, src, i, j); 6629388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6639388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6649388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 665d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 6669388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 667d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgb_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 6689388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6699388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6709388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 671d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 6729388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 673d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgb_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 6749388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6759388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6769388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 677d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 6789388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 679d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgb_fetch_rgba_float(dst, src, i, j); 6809388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6819388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6829388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 683d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 6849388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 685d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgba_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 6869388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6879388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6889388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 689d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 6909388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 691d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgba_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 6929388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6939388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 6949388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 695d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt1_srgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 6969388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 697d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt1_rgba_fetch_rgba_float(dst, src, i, j); 6989388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 6999388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 7009388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 701d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt3_srgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 7029388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 703d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt3_rgba_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 7049388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 7059388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 7069388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 707d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt3_srgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 7089388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 709d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt3_rgba_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 7109388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 7119388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 7129388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 713d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt3_srgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 7149388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 715d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt3_rgba_fetch_rgba_float(dst, src, i, j); 7169388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 7179388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 7189388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 719d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt5_srgba_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 7209388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 721d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt5_rgba_unpack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 7229388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 7239388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 7249388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 725d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt5_srgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 7269388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 727d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt5_rgba_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); 7289388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 7299388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 7309388ce41917fa4c706c5e284d960e1ca648ee935José Fonsecavoid 731d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_dxt5_srgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 7329388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca{ 733d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonseca util_format_dxt5_rgba_fetch_rgba_float(dst, src, i, j); 7349388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca} 7359388ce41917fa4c706c5e284d960e1ca648ee935José Fonseca 736