15c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#include "pipe/p_compiler.h" 25c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#include "util/u_debug.h" 35c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#include "util/u_math.h" 45c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#include "u_format_etc.h" 55c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 65c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu/* define etc1_parse_block and etc. */ 75c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#define UINT8_TYPE uint8_t 85c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#define TAG(x) x 95c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#include "../../../mesa/main/texcompress_etc_tmp.h" 105c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#undef TAG 115c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu#undef UINT8_TYPE 125c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 135c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuvoid 145c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuutil_format_etc1_rgb8_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 155c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu{ 16d7458e401e97aea882309855cc72730aa3b39920Chad Versace etc1_unpack_rgba8888(dst_row, dst_stride, src_row, src_stride, width, height); 175c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu} 185c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 195c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuvoid 205c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuutil_format_etc1_rgb8_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 215c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu{ 225c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu assert(0); 235c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu} 245c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 255c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuvoid 265c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuutil_format_etc1_rgb8_unpack_rgba_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height) 275c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu{ 285c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu const unsigned bw = 4, bh = 4, bs = 8, comps = 4; 295c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu struct etc1_block block; 305c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu unsigned x, y, i, j; 315c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 325c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu for (y = 0; y < height; y += bh) { 335c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu const uint8_t *src = src_row; 345c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 355c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu for (x = 0; x < width; x+= bw) { 365c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu etc1_parse_block(&block, src); 375c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 385c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu for (j = 0; j < bh; j++) { 395c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu float *dst = dst_row + (y + j) * dst_stride / sizeof(*dst_row) + x * comps; 405c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu uint8_t tmp[3]; 415c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 425c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu for (i = 0; i < bw; i++) { 435c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu etc1_fetch_texel(&block, i, j, tmp); 445c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[0] = ubyte_to_float(tmp[0]); 455c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[1] = ubyte_to_float(tmp[1]); 465c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[2] = ubyte_to_float(tmp[2]); 475c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[3] = 1.0f; 485c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst += comps; 495c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu } 505c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu } 515c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 525c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu src += bs; 535c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu } 545c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 555c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu src_row += src_stride; 565c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu } 575c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu} 585c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 595c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuvoid 605c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuutil_format_etc1_rgb8_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, const float *src_row, unsigned src_stride, unsigned width, unsigned height) 615c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu{ 625c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu assert(0); 635c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu} 645c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 655c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuvoid 665c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wuutil_format_etc1_rgb8_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j) 675c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu{ 685c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu const unsigned bw = 4, bh = 4; 695c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu struct etc1_block block; 705c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu uint8_t tmp[3]; 715c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 725c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu assert(i < bw && j < bh); 735c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 745c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu etc1_parse_block(&block, src); 755c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu etc1_fetch_texel(&block, i, j, tmp); 765c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu 775c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[0] = ubyte_to_float(tmp[0]); 785c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[1] = ubyte_to_float(tmp[1]); 795c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[2] = ubyte_to_float(tmp[2]); 805c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu dst[3] = 1.0f; 815c31eb78e5fa4c4cfcc82df3c9a2c34fcd4b402cChia-I Wu} 82