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