mesa: remove old swrast-based compressed texel fetch code

This commit is contained in:
Brian Paul 2012-12-08 15:19:44 -07:00
parent 7dc36a50de
commit b29f2d5ff5
8 changed files with 1 additions and 692 deletions

View File

@ -43,9 +43,9 @@
#include "texcompress_etc.h"
#include "texstore.h"
#include "macros.h"
#include "swrast/s_context.h"
#include "format_unpack.h"
struct etc2_block {
int distance;
uint64_t pixel_indices[2];
@ -113,25 +113,6 @@ _mesa_texstore_etc1_rgb8(TEXSTORE_PARAMS)
return GL_FALSE;
}
void
_mesa_fetch_texel_2d_f_etc1_rgb8(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
struct etc1_block block;
GLubyte dst[3];
const GLubyte *src;
src = (const GLubyte *) texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
etc1_parse_block(&block, src);
etc1_fetch_texel(&block, i % 4, j % 4, dst);
texel[RCOMP] = UBYTE_TO_FLOAT(dst[0]);
texel[GCOMP] = UBYTE_TO_FLOAT(dst[1]);
texel[BCOMP] = UBYTE_TO_FLOAT(dst[2]);
texel[ACOMP] = 1.0f;
}
/**
* Decode texture data in format `MESA_FORMAT_ETC1_RGB8` to
@ -1166,229 +1147,6 @@ _mesa_texstore_etc2_srgb8_punchthrough_alpha1(TEXSTORE_PARAMS)
return GL_FALSE;
}
void
_mesa_fetch_texel_2d_f_etc2_rgb8(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[3];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
etc2_rgb8_parse_block(&block, src,
false /* punchthrough_alpha */);
etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,
false /* punchthrough_alpha */);
texel[RCOMP] = UBYTE_TO_FLOAT(dst[0]);
texel[GCOMP] = UBYTE_TO_FLOAT(dst[1]);
texel[BCOMP] = UBYTE_TO_FLOAT(dst[2]);
texel[ACOMP] = 1.0f;
}
void
_mesa_fetch_texel_2d_f_etc2_srgb8(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[3];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
etc2_rgb8_parse_block(&block, src,
false /* punchthrough_alpha */);
etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,
false /* punchthrough_alpha */);
texel[RCOMP] = _mesa_nonlinear_to_linear(dst[0]);
texel[GCOMP] = _mesa_nonlinear_to_linear(dst[1]);
texel[BCOMP] = _mesa_nonlinear_to_linear(dst[2]);
texel[ACOMP] = 1.0f;
}
void
_mesa_fetch_texel_2d_f_etc2_rgba8_eac(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[4];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
etc2_rgba8_parse_block(&block, src);
etc2_rgba8_fetch_texel(&block, i % 4, j % 4, dst);
texel[RCOMP] = UBYTE_TO_FLOAT(dst[0]);
texel[GCOMP] = UBYTE_TO_FLOAT(dst[1]);
texel[BCOMP] = UBYTE_TO_FLOAT(dst[2]);
texel[ACOMP] = UBYTE_TO_FLOAT(dst[3]);
}
void
_mesa_fetch_texel_2d_f_etc2_srgb8_alpha8_eac(const struct
swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[4];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
etc2_rgba8_parse_block(&block, src);
etc2_rgba8_fetch_texel(&block, i % 4, j % 4, dst);
texel[RCOMP] = _mesa_nonlinear_to_linear(dst[0]);
texel[GCOMP] = _mesa_nonlinear_to_linear(dst[1]);
texel[BCOMP] = _mesa_nonlinear_to_linear(dst[2]);
texel[ACOMP] = UBYTE_TO_FLOAT(dst[3]);
}
void
_mesa_fetch_texel_2d_f_etc2_r11_eac(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
struct etc2_block block;
GLushort dst;
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
etc2_r11_parse_block(&block, src);
etc2_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)&dst);
texel[RCOMP] = USHORT_TO_FLOAT(dst);
texel[GCOMP] = 0.0f;
texel[BCOMP] = 0.0f;
texel[ACOMP] = 1.0f;
}
void
_mesa_fetch_texel_2d_f_etc2_rg11_eac(const struct
swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel)
{
struct etc2_block block;
GLushort dst[2];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
/* red component */
etc2_r11_parse_block(&block, src);
etc2_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)dst);
/* green component */
etc2_r11_parse_block(&block, src + 8);
etc2_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)(dst + 1));
texel[RCOMP] = USHORT_TO_FLOAT(dst[0]);
texel[GCOMP] = USHORT_TO_FLOAT(dst[1]);
texel[BCOMP] = 0.0f;
texel[ACOMP] = 1.0f;
}
void
_mesa_fetch_texel_2d_f_etc2_signed_r11_eac(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
struct etc2_block block;
GLushort dst;
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
etc2_r11_parse_block(&block, src);
etc2_signed_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)&dst);
texel[RCOMP] = SHORT_TO_FLOAT(dst);
texel[GCOMP] = 0.0f;
texel[BCOMP] = 0.0f;
texel[ACOMP] = 1.0f;
}
void
_mesa_fetch_texel_2d_f_etc2_signed_rg11_eac(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
struct etc2_block block;
GLushort dst[2];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 16;
/* red component */
etc2_r11_parse_block(&block, src);
etc2_signed_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)dst);
/* green component */
etc2_r11_parse_block(&block, src + 8);
etc2_signed_r11_fetch_texel(&block, i % 4, j % 4, (uint8_t *)(dst + 1));
texel[RCOMP] = SHORT_TO_FLOAT(dst[0]);
texel[GCOMP] = SHORT_TO_FLOAT(dst[1]);
texel[BCOMP] = 0.0f;
texel[ACOMP] = 1.0f;
}
void
_mesa_fetch_texel_2d_f_etc2_rgb8_punchthrough_alpha1(
const struct swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[4];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
etc2_rgb8_parse_block(&block, src,
true /* punchthrough alpha */);
etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,
true /* punchthrough alpha */);
texel[RCOMP] = UBYTE_TO_FLOAT(dst[0]);
texel[GCOMP] = UBYTE_TO_FLOAT(dst[1]);
texel[BCOMP] = UBYTE_TO_FLOAT(dst[2]);
texel[ACOMP] = UBYTE_TO_FLOAT(dst[3]);
}
void
_mesa_fetch_texel_2d_f_etc2_srgb8_punchthrough_alpha1(
const struct swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel)
{
struct etc2_block block;
uint8_t dst[4];
const uint8_t *src;
src = texImage->Map +
(((texImage->RowStride + 3) / 4) * (j / 4) + (i / 4)) * 8;
etc2_rgb8_parse_block(&block, src,
true /* punchthrough alpha */);
etc2_rgb8_fetch_texel(&block, i % 4, j % 4, dst,
true /* punchthrough alpha */);
texel[RCOMP] = _mesa_nonlinear_to_linear(dst[0]);
texel[GCOMP] = _mesa_nonlinear_to_linear(dst[1]);
texel[BCOMP] = _mesa_nonlinear_to_linear(dst[2]);
texel[ACOMP] = UBYTE_TO_FLOAT(dst[3]);
}
/**
* Decode texture data in any one of following formats:

View File

@ -31,8 +31,6 @@
#include "texstore.h"
struct swrast_texture_image;
GLboolean
_mesa_texstore_etc1_rgb8(TEXSTORE_PARAMS);
@ -66,50 +64,6 @@ _mesa_texstore_etc2_rgb8_punchthrough_alpha1(TEXSTORE_PARAMS);
GLboolean
_mesa_texstore_etc2_srgb8_punchthrough_alpha1(TEXSTORE_PARAMS);
void
_mesa_fetch_texel_2d_f_etc1_rgb8(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_rgb8(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_srgb8(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_rgba8_eac(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_srgb8_alpha8_eac(const struct
swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_r11_eac(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_rg11_eac(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_signed_r11_eac(const struct
swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_signed_rg11_eac(const struct
swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_rgb8_punchthrough_alpha1(
const struct swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel);
void
_mesa_fetch_texel_2d_f_etc2_srgb8_punchthrough_alpha1(
const struct swrast_texture_image *texImage,
GLint i, GLint j,
GLint k, GLfloat *texel);
void
_mesa_etc1_unpack_rgba8888(uint8_t *dst_row,
unsigned dst_stride,

View File

@ -39,7 +39,6 @@
#include "texcompress.h"
#include "texcompress_fxt1.h"
#include "texstore.h"
#include "swrast/s_context.h"
static void
@ -151,37 +150,6 @@ _mesa_texstore_rgba_fxt1(TEXSTORE_PARAMS)
}
void
_mesa_fetch_texel_2d_f_rgba_fxt1( const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel )
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
(void) k;
fxt1_decode_1(texImage->Map, texImage->RowStride, i, j, rgba);
texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
void
_mesa_fetch_texel_2d_f_rgb_fxt1( const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel )
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
(void) k;
fxt1_decode_1(texImage->Map, texImage->RowStride, i, j, rgba);
texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
texel[ACOMP] = 1.0F;
}
/***************************************************************************\
* FXT1 encoder
*

View File

@ -29,7 +29,6 @@
#include "mfeatures.h"
#include "texstore.h"
struct swrast_texture_image;
extern GLboolean
_mesa_texstore_rgb_fxt1(TEXSTORE_PARAMS);
@ -37,13 +36,6 @@ _mesa_texstore_rgb_fxt1(TEXSTORE_PARAMS);
extern GLboolean
_mesa_texstore_rgba_fxt1(TEXSTORE_PARAMS);
extern void
_mesa_fetch_texel_2d_f_rgba_fxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_2d_f_rgb_fxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
compressed_fetch_func
_mesa_get_fxt_fetch_func(gl_format format);

View File

@ -43,7 +43,6 @@
#include "texcompress.h"
#include "texcompress_rgtc.h"
#include "texstore.h"
#include "swrast/s_context.h"
#define RGTC_DEBUG 0
@ -291,137 +290,6 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
return GL_TRUE;
}
void
_mesa_fetch_texel_red_rgtc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLubyte red;
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
unsigned_fetch_texel_rgtc(texImage->RowStride,
texImage->Map + sliceOffset,
i, j, &red, 1);
texel[RCOMP] = UBYTE_TO_FLOAT(red);
texel[GCOMP] = 0.0;
texel[BCOMP] = 0.0;
texel[ACOMP] = 1.0;
}
void
_mesa_fetch_texel_signed_red_rgtc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLbyte red;
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
signed_fetch_texel_rgtc(texImage->RowStride,
(GLbyte *)(texImage->Map) + sliceOffset,
i, j, &red, 1);
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
texel[GCOMP] = 0.0;
texel[BCOMP] = 0.0;
texel[ACOMP] = 1.0;
}
void
_mesa_fetch_texel_rg_rgtc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLubyte red, green;
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
unsigned_fetch_texel_rgtc(texImage->RowStride,
texImage->Map + sliceOffset,
i, j, &red, 2);
unsigned_fetch_texel_rgtc(texImage->RowStride,
texImage->Map + sliceOffset + 8,
i, j, &green, 2);
texel[RCOMP] = UBYTE_TO_FLOAT(red);
texel[GCOMP] = UBYTE_TO_FLOAT(green);
texel[BCOMP] = 0.0;
texel[ACOMP] = 1.0;
}
void
_mesa_fetch_texel_signed_rg_rgtc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLbyte red, green;
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
signed_fetch_texel_rgtc(texImage->RowStride,
(GLbyte *)(texImage->Map) + sliceOffset,
i, j, &red, 2);
signed_fetch_texel_rgtc(texImage->RowStride,
(GLbyte *)(texImage->Map) + sliceOffset + 8,
i, j, &green, 2);
texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
texel[GCOMP] = BYTE_TO_FLOAT_TEX(green);
texel[BCOMP] = 0.0;
texel[ACOMP] = 1.0;
}
void
_mesa_fetch_texel_l_latc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLubyte red;
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
unsigned_fetch_texel_rgtc(texImage->RowStride,
texImage->Map + sliceOffset,
i, j, &red, 1);
texel[RCOMP] =
texel[GCOMP] =
texel[BCOMP] = UBYTE_TO_FLOAT(red);
texel[ACOMP] = 1.0;
}
void
_mesa_fetch_texel_signed_l_latc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLbyte red;
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
signed_fetch_texel_rgtc(texImage->RowStride,
(GLbyte *)(texImage->Map) + sliceOffset,
i, j, &red, 1);
texel[RCOMP] =
texel[GCOMP] =
texel[BCOMP] = BYTE_TO_FLOAT_TEX(red);
texel[ACOMP] = 1.0;
}
void
_mesa_fetch_texel_la_latc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLubyte red, green;
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
unsigned_fetch_texel_rgtc(texImage->RowStride,
texImage->Map + sliceOffset,
i, j, &red, 2);
unsigned_fetch_texel_rgtc(texImage->RowStride,
texImage->Map + sliceOffset + 8,
i, j, &green, 2);
texel[RCOMP] =
texel[GCOMP] =
texel[BCOMP] = UBYTE_TO_FLOAT(red);
texel[ACOMP] = UBYTE_TO_FLOAT(green);
}
void
_mesa_fetch_texel_signed_la_latc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
GLbyte red, green;
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
signed_fetch_texel_rgtc(texImage->RowStride,
(GLbyte *)(texImage->Map) + sliceOffset,
i, j, &red, 2);
signed_fetch_texel_rgtc(texImage->RowStride,
(GLbyte *)(texImage->Map) + sliceOffset + 8,
i, j, &green, 2);
texel[RCOMP] =
texel[GCOMP] =
texel[BCOMP] = BYTE_TO_FLOAT_TEX(red);
texel[ACOMP] = BYTE_TO_FLOAT_TEX(green);
}
#define TAG(x) unsigned_##x

View File

@ -28,7 +28,6 @@
#include "mfeatures.h"
#include "texstore.h"
struct swrast_texture_image;
extern GLboolean
_mesa_texstore_red_rgtc1(TEXSTORE_PARAMS);
@ -42,39 +41,6 @@ _mesa_texstore_rg_rgtc2(TEXSTORE_PARAMS);
extern GLboolean
_mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS);
extern void
_mesa_fetch_texel_red_rgtc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_signed_red_rgtc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_rg_rgtc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_signed_rg_rgtc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_l_latc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_signed_l_latc1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_la_latc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_signed_la_latc2(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern compressed_fetch_func
_mesa_get_compressed_rgtc_func(gl_format format);

View File

@ -44,7 +44,6 @@
#include "texcompress.h"
#include "texcompress_s3tc.h"
#include "texstore.h"
#include "swrast/s_context.h"
#include "format_unpack.h"
@ -332,170 +331,6 @@ _mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS)
}
static void
fetch_texel_2d_rgb_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLubyte *texel)
{
if (fetch_ext_rgb_dxt1) {
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
fetch_ext_rgb_dxt1(texImage->RowStride,
texImage->Map + sliceOffset, i, j, texel);
}
else
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgb_dxt1");
}
void
_mesa_fetch_texel_rgb_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgb_dxt1(texImage, i, j, k, rgba);
texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
static void
fetch_texel_2d_rgba_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLubyte *texel)
{
if (fetch_ext_rgba_dxt1) {
GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
fetch_ext_rgba_dxt1(texImage->RowStride,
texImage->Map + sliceOffset, i, j, texel);
}
else
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgba_dxt1\n");
}
void
_mesa_fetch_texel_rgba_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgba_dxt1(texImage, i, j, k, rgba);
texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
static void
fetch_texel_2d_rgba_dxt3(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLubyte *texel)
{
if (fetch_ext_rgba_dxt3) {
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
fetch_ext_rgba_dxt3(texImage->RowStride,
texImage->Map + sliceOffset, i, j, texel);
}
else
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgba_dxt3\n");
}
void
_mesa_fetch_texel_rgba_dxt3(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgba_dxt3(texImage, i, j, k, rgba);
texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
static void
fetch_texel_2d_rgba_dxt5(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLubyte *texel)
{
if (fetch_ext_rgba_dxt5) {
GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
fetch_ext_rgba_dxt5(texImage->RowStride,
texImage->Map + sliceOffset, i, j, texel);
}
else
_mesa_debug(NULL, "attempted to decode s3tc texture without library available: fetch_texel_2d_rgba_dxt5\n");
}
void
_mesa_fetch_texel_rgba_dxt5(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgba_dxt5(texImage, i, j, k, rgba);
texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
void
_mesa_fetch_texel_srgb_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgb_dxt1(texImage, i, j, k, rgba);
texel[RCOMP] = _mesa_nonlinear_to_linear(rgba[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(rgba[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
void
_mesa_fetch_texel_srgba_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgba_dxt1(texImage, i, j, k, rgba);
texel[RCOMP] = _mesa_nonlinear_to_linear(rgba[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(rgba[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
void
_mesa_fetch_texel_srgba_dxt3(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgba_dxt3(texImage, i, j, k, rgba);
texel[RCOMP] = _mesa_nonlinear_to_linear(rgba[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(rgba[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
void
_mesa_fetch_texel_srgba_dxt5(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel)
{
/* just sample as GLubyte and convert to float here */
GLubyte rgba[4];
fetch_texel_2d_rgba_dxt5(texImage, i, j, k, rgba);
texel[RCOMP] = _mesa_nonlinear_to_linear(rgba[RCOMP]);
texel[GCOMP] = _mesa_nonlinear_to_linear(rgba[GCOMP]);
texel[BCOMP] = _mesa_nonlinear_to_linear(rgba[BCOMP]);
texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
}
/** Report problem with dxt texture decompression, once */
static void
problem(const char *func)

View File

@ -32,7 +32,6 @@
#include "texcompress.h"
struct gl_context;
struct swrast_texture_image;
extern GLboolean
_mesa_texstore_rgb_dxt1(TEXSTORE_PARAMS);
@ -46,37 +45,6 @@ _mesa_texstore_rgba_dxt3(TEXSTORE_PARAMS);
extern GLboolean
_mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS);
extern void
_mesa_fetch_texel_rgb_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_rgba_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_rgba_dxt3(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_rgba_dxt5(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_srgb_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_srgba_dxt1(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_srgba_dxt3(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_fetch_texel_srgba_dxt5(const struct swrast_texture_image *texImage,
GLint i, GLint j, GLint k, GLfloat *texel);
extern void
_mesa_init_texture_s3tc(struct gl_context *ctx);