util: move shared rgtc code to util (v2)
This was being shared using a ../../ get out of gallium into mesa, and I swore when I did it I'd fix things when we got a util dir, we did, so I have. v2: move RGTC_DEBUG define Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
2b6711cc5f
commit
ebcb2ee989
|
@ -27,27 +27,16 @@
|
|||
#include "u_format.h"
|
||||
#include "u_format_rgtc.h"
|
||||
#include "u_format_latc.h"
|
||||
|
||||
static void u_format_unsigned_encode_rgtc_ubyte(uint8_t *blkaddr, uint8_t srccolors[4][4],
|
||||
int numxpixels, int numypixels);
|
||||
|
||||
static void u_format_unsigned_fetch_texel_rgtc(unsigned srcRowStride, const uint8_t *pixdata,
|
||||
unsigned i, unsigned j, uint8_t *value, unsigned comps);
|
||||
|
||||
static void u_format_signed_encode_rgtc_ubyte(int8_t *blkaddr, int8_t srccolors[4][4],
|
||||
int numxpixels, int numypixels);
|
||||
|
||||
static void u_format_signed_fetch_texel_rgtc(unsigned srcRowStride, const int8_t *pixdata,
|
||||
unsigned i, unsigned j, int8_t *value, unsigned comps);
|
||||
#include "util/rgtc.h"
|
||||
|
||||
void
|
||||
util_format_latc1_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
/* Fix warnings here: */
|
||||
(void) u_format_unsigned_encode_rgtc_ubyte;
|
||||
(void) u_format_signed_encode_rgtc_ubyte;
|
||||
(void) util_format_unsigned_encode_rgtc_ubyte;
|
||||
(void) util_format_signed_encode_rgtc_ubyte;
|
||||
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
|
||||
dst[1] = dst[0];
|
||||
dst[2] = dst[0];
|
||||
dst[3] = 255;
|
||||
|
@ -79,7 +68,7 @@ util_format_latc1_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
uint8_t tmp_r;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = ubyte_to_float(tmp_r);
|
||||
|
@ -103,7 +92,7 @@ util_format_latc1_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
|
|||
{
|
||||
uint8_t tmp_r;
|
||||
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = ubyte_to_float(tmp_r);
|
||||
|
@ -147,7 +136,7 @@ util_format_latc1_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
int8_t tmp_r;
|
||||
u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = byte_to_float_tex(tmp_r);
|
||||
|
@ -165,7 +154,7 @@ util_format_latc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
|
|||
{
|
||||
int8_t tmp_r;
|
||||
|
||||
u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
|
||||
util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = byte_to_float_tex(tmp_r);
|
||||
|
@ -176,10 +165,10 @@ util_format_latc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
|
|||
void
|
||||
util_format_latc2_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
|
||||
dst[1] = dst[0];
|
||||
dst[2] = dst[0];
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 3, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 3, 2);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -213,8 +202,8 @@ util_format_latc2_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
uint8_t tmp_r, tmp_g;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = ubyte_to_float(tmp_r);
|
||||
|
@ -232,8 +221,8 @@ util_format_latc2_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
|
|||
{
|
||||
uint8_t tmp_r, tmp_g;
|
||||
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = ubyte_to_float(tmp_r);
|
||||
|
@ -272,8 +261,8 @@ util_format_latc2_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
int8_t tmp_r, tmp_g;
|
||||
u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
u_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = byte_to_float_tex(tmp_r);
|
||||
|
@ -297,36 +286,11 @@ util_format_latc2_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
|
|||
{
|
||||
int8_t tmp_r, tmp_g;
|
||||
|
||||
u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
|
||||
u_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] =
|
||||
dst[1] =
|
||||
dst[2] = byte_to_float_tex(tmp_r);
|
||||
dst[3] = byte_to_float_tex(tmp_g);
|
||||
}
|
||||
|
||||
|
||||
#define TAG(x) u_format_unsigned_##x
|
||||
#define TYPE uint8_t
|
||||
#define T_MIN 0
|
||||
#define T_MAX 255
|
||||
|
||||
#include "../../../mesa/main/texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TYPE
|
||||
#undef TAG
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
||||
|
||||
#define TAG(x) u_format_signed_##x
|
||||
#define TYPE int8_t
|
||||
#define T_MIN (int8_t)-128
|
||||
#define T_MAX (int8_t)127
|
||||
|
||||
#include "../../../mesa/main/texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TYPE
|
||||
#undef TAG
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
|
|
@ -26,23 +26,12 @@
|
|||
#include "u_math.h"
|
||||
#include "u_format.h"
|
||||
#include "u_format_rgtc.h"
|
||||
|
||||
static void u_format_unsigned_encode_rgtc_ubyte(uint8_t *blkaddr, uint8_t srccolors[4][4],
|
||||
int numxpixels, int numypixels);
|
||||
|
||||
static void u_format_unsigned_fetch_texel_rgtc(unsigned srcRowStride, const uint8_t *pixdata,
|
||||
unsigned i, unsigned j, uint8_t *value, unsigned comps);
|
||||
|
||||
static void u_format_signed_encode_rgtc_ubyte(int8_t *blkaddr, int8_t srccolors[4][4],
|
||||
int numxpixels, int numypixels);
|
||||
|
||||
static void u_format_signed_fetch_texel_rgtc(unsigned srcRowStride, const int8_t *pixdata,
|
||||
unsigned i, unsigned j, int8_t *value, unsigned comps);
|
||||
#include "util/rgtc.h"
|
||||
|
||||
void
|
||||
util_format_rgtc1_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
|
||||
dst[1] = 0;
|
||||
dst[2] = 0;
|
||||
dst[3] = 255;
|
||||
|
@ -61,7 +50,7 @@ util_format_rgtc1_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride
|
|||
for(j = 0; j < bh; ++j) {
|
||||
for(i = 0; i < bw; ++i) {
|
||||
uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
|
||||
dst[1] = 0;
|
||||
dst[2] = 0;
|
||||
dst[3] = 255;
|
||||
|
@ -89,7 +78,7 @@ util_format_rgtc1_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
|
|||
tmp[j][i] = src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4];
|
||||
}
|
||||
}
|
||||
u_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
|
||||
util_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
|
||||
dst += bytes_per_block;
|
||||
}
|
||||
dst_row += dst_stride / sizeof(*dst_row);
|
||||
|
@ -108,7 +97,7 @@ util_format_rgtc1_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
uint8_t tmp_r;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
dst[0] = ubyte_to_float(tmp_r);
|
||||
dst[1] = 0.0;
|
||||
dst[2] = 0.0;
|
||||
|
@ -136,7 +125,7 @@ util_format_rgtc1_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
|
|||
tmp[j][i] = float_to_ubyte(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]);
|
||||
}
|
||||
}
|
||||
u_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
|
||||
util_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
|
||||
dst += bytes_per_block;
|
||||
}
|
||||
dst_row += dst_stride / sizeof(*dst_row);
|
||||
|
@ -147,7 +136,7 @@ void
|
|||
util_format_rgtc1_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
uint8_t tmp_r;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
dst[0] = ubyte_to_float(tmp_r);
|
||||
dst[1] = 0.0;
|
||||
dst[2] = 0.0;
|
||||
|
@ -187,7 +176,7 @@ util_format_rgtc1_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
|
|||
tmp[j][i] = float_to_byte_tex(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]);
|
||||
}
|
||||
}
|
||||
u_format_signed_encode_rgtc_ubyte(dst, tmp, 4, 4);
|
||||
util_format_signed_encode_rgtc_ubyte(dst, tmp, 4, 4);
|
||||
dst += bytes_per_block;
|
||||
}
|
||||
dst_row += dst_stride / sizeof(*dst_row);
|
||||
|
@ -206,7 +195,7 @@ util_format_rgtc1_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
int8_t tmp_r;
|
||||
u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
|
||||
dst[0] = byte_to_float_tex(tmp_r);
|
||||
dst[1] = 0.0;
|
||||
dst[2] = 0.0;
|
||||
|
@ -223,7 +212,7 @@ void
|
|||
util_format_rgtc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
int8_t tmp_r;
|
||||
u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
|
||||
util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
|
||||
dst[0] = byte_to_float_tex(tmp_r);
|
||||
dst[1] = 0.0;
|
||||
dst[2] = 0.0;
|
||||
|
@ -234,8 +223,8 @@ util_format_rgtc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
|
|||
void
|
||||
util_format_rgtc2_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
|
||||
dst[2] = 0;
|
||||
dst[3] = 255;
|
||||
}
|
||||
|
@ -253,8 +242,8 @@ util_format_rgtc2_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride
|
|||
for(j = 0; j < bh; ++j) {
|
||||
for(i = 0; i < bw; ++i) {
|
||||
uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
|
||||
dst[2] = 0;
|
||||
dst[3] = 255;
|
||||
}
|
||||
|
@ -282,8 +271,8 @@ util_format_rgtc2_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
|
|||
tmp_g[j][i] = src_row[((y + j)*src_stride/sizeof(*src_row) + (x + i)*4) + 1];
|
||||
}
|
||||
}
|
||||
u_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
|
||||
u_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
|
||||
util_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
|
||||
util_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
|
||||
dst += bytes_per_block;
|
||||
}
|
||||
dst_row += dst_stride / sizeof(*dst_row);
|
||||
|
@ -307,8 +296,8 @@ util_format_rxtc2_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
|
|||
tmp_g[j][i] = float_to_ubyte(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4 + chan2off]);
|
||||
}
|
||||
}
|
||||
u_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
|
||||
u_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
|
||||
util_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
|
||||
util_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
|
||||
dst += bytes_per_block;
|
||||
}
|
||||
dst_row += dst_stride / sizeof(*dst_row);
|
||||
|
@ -333,8 +322,8 @@ util_format_rgtc2_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
uint8_t tmp_r, tmp_g;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] = ubyte_to_float(tmp_r);
|
||||
dst[1] = ubyte_to_float(tmp_g);
|
||||
dst[2] = 0.0;
|
||||
|
@ -351,8 +340,8 @@ void
|
|||
util_format_rgtc2_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
uint8_t tmp_r, tmp_g;
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] = ubyte_to_float(tmp_r);
|
||||
dst[1] = ubyte_to_float(tmp_g);
|
||||
dst[2] = 0.0;
|
||||
|
@ -390,8 +379,8 @@ util_format_rgtc2_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
|
|||
for(i = 0; i < 4; ++i) {
|
||||
float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
|
||||
int8_t tmp_r, tmp_g;
|
||||
u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
u_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] = byte_to_float_tex(tmp_r);
|
||||
dst[1] = byte_to_float_tex(tmp_g);
|
||||
dst[2] = 0.0;
|
||||
|
@ -421,8 +410,8 @@ util_format_rxtc2_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
|
|||
tmp_g[j][i] = float_to_byte_tex(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4 + chan2off]);
|
||||
}
|
||||
}
|
||||
u_format_signed_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
|
||||
u_format_signed_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
|
||||
util_format_signed_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
|
||||
util_format_signed_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
|
||||
dst += bytes_per_block;
|
||||
}
|
||||
dst_row += dst_stride / sizeof(*dst_row);
|
||||
|
@ -439,36 +428,11 @@ void
|
|||
util_format_rgtc2_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
int8_t tmp_r, tmp_g;
|
||||
u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
|
||||
u_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
|
||||
util_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
|
||||
dst[0] = byte_to_float_tex(tmp_r);
|
||||
dst[1] = byte_to_float_tex(tmp_g);
|
||||
dst[2] = 0.0;
|
||||
dst[3] = 1.0;
|
||||
}
|
||||
|
||||
|
||||
#define TAG(x) u_format_unsigned_##x
|
||||
#define TYPE uint8_t
|
||||
#define T_MIN 0
|
||||
#define T_MAX 255
|
||||
|
||||
#include "../../../mesa/main/texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TYPE
|
||||
#undef TAG
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
||||
|
||||
#define TAG(x) u_format_signed_##x
|
||||
#define TYPE int8_t
|
||||
#define T_MIN (int8_t)-128
|
||||
#define T_MAX (int8_t)127
|
||||
|
||||
#include "../../../mesa/main/texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TYPE
|
||||
#undef TAG
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
|
|
@ -40,23 +40,10 @@
|
|||
#include "macros.h"
|
||||
#include "mipmap.h"
|
||||
#include "texcompress.h"
|
||||
#include "util/rgtc.h"
|
||||
#include "texcompress_rgtc.h"
|
||||
#include "texstore.h"
|
||||
|
||||
|
||||
#define RGTC_DEBUG 0
|
||||
|
||||
static void unsigned_encode_rgtc_ubyte(GLubyte *blkaddr, GLubyte srccolors[4][4],
|
||||
GLint numxpixels, GLint numypixels);
|
||||
static void signed_encode_rgtc_ubyte(GLbyte *blkaddr, GLbyte srccolors[4][4],
|
||||
GLint numxpixels, GLint numypixels);
|
||||
|
||||
static void unsigned_fetch_texel_rgtc(unsigned srcRowStride, const GLubyte *pixdata,
|
||||
unsigned i, unsigned j, GLubyte *value, unsigned comps);
|
||||
|
||||
static void signed_fetch_texel_rgtc(unsigned srcRowStride, const GLbyte *pixdata,
|
||||
unsigned i, unsigned j, GLbyte *value, unsigned comps);
|
||||
|
||||
static void extractsrc_u( GLubyte srcpixels[4][4], const GLubyte *srcaddr,
|
||||
GLint srcRowStride, GLint numxpixels, GLint numypixels, GLint comps)
|
||||
{
|
||||
|
@ -121,7 +108,7 @@ _mesa_texstore_red_rgtc1(TEXSTORE_PARAMS)
|
|||
if (srcWidth > i + 3) numxpixels = 4;
|
||||
else numxpixels = srcWidth - i;
|
||||
extractsrc_u(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 1);
|
||||
unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
util_format_unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
srcaddr += numxpixels;
|
||||
blkaddr += 8;
|
||||
}
|
||||
|
@ -168,7 +155,7 @@ _mesa_texstore_signed_red_rgtc1(TEXSTORE_PARAMS)
|
|||
if (srcWidth > i + 3) numxpixels = 4;
|
||||
else numxpixels = srcWidth - i;
|
||||
extractsrc_s(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 1);
|
||||
signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
util_format_signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
srcaddr += numxpixels;
|
||||
blkaddr += 8;
|
||||
}
|
||||
|
@ -216,11 +203,11 @@ _mesa_texstore_rg_rgtc2(TEXSTORE_PARAMS)
|
|||
if (srcWidth > i + 3) numxpixels = 4;
|
||||
else numxpixels = srcWidth - i;
|
||||
extractsrc_u(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 2);
|
||||
unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
util_format_unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
|
||||
blkaddr += 8;
|
||||
extractsrc_u(srcpixels, (GLubyte *)srcaddr + 1, srcWidth, numxpixels, numypixels, 2);
|
||||
unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
util_format_unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
|
||||
blkaddr += 8;
|
||||
|
||||
|
@ -271,11 +258,11 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
|
|||
else numxpixels = srcWidth - i;
|
||||
|
||||
extractsrc_s(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 2);
|
||||
signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
util_format_signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
blkaddr += 8;
|
||||
|
||||
extractsrc_s(srcpixels, srcaddr + 1, srcWidth, numxpixels, numypixels, 2);
|
||||
signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
util_format_signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
|
||||
blkaddr += 8;
|
||||
|
||||
srcaddr += numxpixels * 2;
|
||||
|
@ -289,40 +276,12 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
|
|||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
#define TAG(x) unsigned_##x
|
||||
|
||||
#define TYPE GLubyte
|
||||
#define T_MIN 0
|
||||
#define T_MAX 0xff
|
||||
|
||||
#include "texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TAG
|
||||
#undef TYPE
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
||||
#define TAG(x) signed_##x
|
||||
#define TYPE GLbyte
|
||||
#define T_MIN (GLbyte)-128
|
||||
#define T_MAX (GLbyte)127
|
||||
|
||||
#include "texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TAG
|
||||
#undef TYPE
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
||||
|
||||
|
||||
static void
|
||||
fetch_red_rgtc1(const GLubyte *map,
|
||||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLubyte red;
|
||||
unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
|
||||
texel[RCOMP] = UBYTE_TO_FLOAT(red);
|
||||
texel[GCOMP] = 0.0;
|
||||
texel[BCOMP] = 0.0;
|
||||
|
@ -334,7 +293,7 @@ fetch_l_latc1(const GLubyte *map,
|
|||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLubyte red;
|
||||
unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
|
||||
util_format_unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
|
||||
texel[RCOMP] =
|
||||
texel[GCOMP] =
|
||||
texel[BCOMP] = UBYTE_TO_FLOAT(red);
|
||||
|
@ -346,7 +305,7 @@ fetch_signed_red_rgtc1(const GLubyte *map,
|
|||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLbyte red;
|
||||
signed_fetch_texel_rgtc(rowStride, (const GLbyte *) map,
|
||||
util_format_signed_fetch_texel_rgtc(rowStride, (const GLbyte *) map,
|
||||
i, j, &red, 1);
|
||||
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
|
||||
texel[GCOMP] = 0.0;
|
||||
|
@ -359,7 +318,7 @@ fetch_signed_l_latc1(const GLubyte *map,
|
|||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLbyte red;
|
||||
signed_fetch_texel_rgtc(rowStride, (GLbyte *) map,
|
||||
util_format_signed_fetch_texel_rgtc(rowStride, (GLbyte *) map,
|
||||
i, j, &red, 1);
|
||||
texel[RCOMP] =
|
||||
texel[GCOMP] =
|
||||
|
@ -372,10 +331,10 @@ fetch_rg_rgtc2(const GLubyte *map,
|
|||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLubyte red, green;
|
||||
unsigned_fetch_texel_rgtc(rowStride,
|
||||
util_format_unsigned_fetch_texel_rgtc(rowStride,
|
||||
map,
|
||||
i, j, &red, 2);
|
||||
unsigned_fetch_texel_rgtc(rowStride,
|
||||
util_format_unsigned_fetch_texel_rgtc(rowStride,
|
||||
map + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] = UBYTE_TO_FLOAT(red);
|
||||
|
@ -389,10 +348,10 @@ fetch_la_latc2(const GLubyte *map,
|
|||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLubyte red, green;
|
||||
unsigned_fetch_texel_rgtc(rowStride,
|
||||
util_format_unsigned_fetch_texel_rgtc(rowStride,
|
||||
map,
|
||||
i, j, &red, 2);
|
||||
unsigned_fetch_texel_rgtc(rowStride,
|
||||
util_format_unsigned_fetch_texel_rgtc(rowStride,
|
||||
map + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] =
|
||||
|
@ -407,10 +366,10 @@ fetch_signed_rg_rgtc2(const GLubyte *map,
|
|||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLbyte red, green;
|
||||
signed_fetch_texel_rgtc(rowStride,
|
||||
util_format_signed_fetch_texel_rgtc(rowStride,
|
||||
(GLbyte *) map,
|
||||
i, j, &red, 2);
|
||||
signed_fetch_texel_rgtc(rowStride,
|
||||
util_format_signed_fetch_texel_rgtc(rowStride,
|
||||
(GLbyte *) map + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
|
||||
|
@ -425,10 +384,10 @@ fetch_signed_la_latc2(const GLubyte *map,
|
|||
GLint rowStride, GLint i, GLint j, GLfloat *texel)
|
||||
{
|
||||
GLbyte red, green;
|
||||
signed_fetch_texel_rgtc(rowStride,
|
||||
util_format_signed_fetch_texel_rgtc(rowStride,
|
||||
(GLbyte *) map,
|
||||
i, j, &red, 2);
|
||||
signed_fetch_texel_rgtc(rowStride,
|
||||
util_format_signed_fetch_texel_rgtc(rowStride,
|
||||
(GLbyte *) map + 8,
|
||||
i, j, &green, 2);
|
||||
texel[RCOMP] =
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
MESA_UTIL_FILES := \
|
||||
hash_table.c \
|
||||
ralloc.c
|
||||
ralloc.c \
|
||||
rgtc.c
|
||||
|
||||
MESA_UTIL_GENERATED_FILES = \
|
||||
format_srgb.c
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright (C) 2011 Red Hat Inc.
|
||||
*
|
||||
* block compression parts are:
|
||||
* Copyright (C) 2004 Roland Scheidegger All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Author:
|
||||
* Dave Airlie
|
||||
*/
|
||||
|
||||
#include <inttypes.h>
|
||||
#include "macros.h"
|
||||
|
||||
#include "rgtc.h"
|
||||
|
||||
#define RGTC_DEBUG 0
|
||||
|
||||
#define TAG(x) util_format_unsigned_##x
|
||||
|
||||
#define TYPE unsigned char
|
||||
#define T_MIN 0
|
||||
#define T_MAX 0xff
|
||||
|
||||
#include "texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TAG
|
||||
#undef TYPE
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
||||
#define TAG(x) util_format_signed_##x
|
||||
#define TYPE signed char
|
||||
#define T_MIN (signed char)-128
|
||||
#define T_MAX (signed char)127
|
||||
|
||||
#include "texcompress_rgtc_tmp.h"
|
||||
|
||||
#undef TAG
|
||||
#undef TYPE
|
||||
#undef T_MIN
|
||||
#undef T_MAX
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright © 2014 Red Hat
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _RGTC_H
|
||||
#define _RGTC_H
|
||||
|
||||
void util_format_unsigned_fetch_texel_rgtc(unsigned srcRowStride, const unsigned char *pixdata,
|
||||
unsigned i, unsigned j, unsigned char *value, unsigned comps);
|
||||
|
||||
void util_format_signed_fetch_texel_rgtc(unsigned srcRowStride, const signed char *pixdata,
|
||||
unsigned i, unsigned j, signed char *value, unsigned comps);
|
||||
|
||||
void util_format_unsigned_encode_rgtc_ubyte(unsigned char *blkaddr, unsigned char srccolors[4][4],
|
||||
int numxpixels, int numypixels);
|
||||
|
||||
void util_format_signed_encode_rgtc_ubyte(signed char *blkaddr, signed char srccolors[4][4],
|
||||
int numxpixels, int numypixels);
|
||||
#endif /* _RGTC_H */
|
|
@ -29,8 +29,8 @@
|
|||
|
||||
/* included by texcompress_rgtc to define byte/ubyte compressors */
|
||||
|
||||
static void TAG(fetch_texel_rgtc)(unsigned srcRowStride, const TYPE *pixdata,
|
||||
unsigned i, unsigned j, TYPE *value, unsigned comps)
|
||||
void TAG(fetch_texel_rgtc)(unsigned srcRowStride, const TYPE *pixdata,
|
||||
unsigned i, unsigned j, TYPE *value, unsigned comps)
|
||||
{
|
||||
TYPE decode;
|
||||
const TYPE *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 8 * comps);
|
||||
|
@ -59,9 +59,9 @@ static void TAG(fetch_texel_rgtc)(unsigned srcRowStride, const TYPE *pixdata,
|
|||
}
|
||||
|
||||
static void TAG(write_rgtc_encoded_channel)(TYPE *blkaddr,
|
||||
TYPE alphabase1,
|
||||
TYPE alphabase2,
|
||||
TYPE alphaenc[16])
|
||||
TYPE alphabase1,
|
||||
TYPE alphabase2,
|
||||
TYPE alphaenc[16])
|
||||
{
|
||||
*blkaddr++ = alphabase1;
|
||||
*blkaddr++ = alphabase2;
|
||||
|
@ -73,8 +73,8 @@ static void TAG(write_rgtc_encoded_channel)(TYPE *blkaddr,
|
|||
*blkaddr++ = (alphaenc[13] >> 1) | (alphaenc[14] << 2) | (alphaenc[15] << 5);
|
||||
}
|
||||
|
||||
static void TAG(encode_rgtc_ubyte)(TYPE *blkaddr, TYPE srccolors[4][4],
|
||||
int numxpixels, int numypixels)
|
||||
void TAG(encode_rgtc_ubyte)(TYPE *blkaddr, TYPE srccolors[4][4],
|
||||
int numxpixels, int numypixels)
|
||||
{
|
||||
TYPE alphabase[2], alphause[2];
|
||||
short alphatest[2] = { 0 };
|
Loading…
Reference in New Issue