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