summaryrefslogtreecommitdiff
path: root/src/mesa/main/texformat.c
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2003-04-03 20:57:49 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>2003-04-03 20:57:49 +0000
commit78233887446a8f5fe66d674caf1b7ee838647ac1 (patch)
tree3ecb062cc05a387fdf2e75682d3428d8446815fa /src/mesa/main/texformat.c
parentbb5ebf17248d1d389525d4fcd9e238fb13b695bf (diff)
some texture compression odds & ends
Diffstat (limited to 'src/mesa/main/texformat.c')
-rw-r--r--src/mesa/main/texformat.c97
1 files changed, 94 insertions, 3 deletions
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index c529031f9f..e92572242f 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -1,5 +1,3 @@
-/* $Id: texformat.c,v 1.19 2003/03/01 01:50:22 brianp Exp $ */
-
/*
* Mesa 3-D graphics library
* Version: 5.1
@@ -428,7 +426,6 @@ const struct gl_texture_format _mesa_texformat_ycbcr = {
fetch_3d_texel_ycbcr, /* FetchTexel3D */
};
-
const struct gl_texture_format _mesa_texformat_ycbcr_rev = {
MESA_FORMAT_YCBCR_REV, /* MesaFormat */
GL_YCBCR_MESA, /* BaseFormat */
@@ -446,6 +443,74 @@ const struct gl_texture_format _mesa_texformat_ycbcr_rev = {
fetch_3d_texel_ycbcr_rev, /* FetchTexel3D */
};
+const struct gl_texture_format _mesa_texformat_rgb_dxt1 = {
+ MESA_FORMAT_RGB_DXT1, /* MesaFormat */
+ GL_RGB, /* BaseFormat */
+ 4, /*approx*/ /* RedBits */
+ 4, /*approx*/ /* GreenBits */
+ 4, /*approx*/ /* BlueBits */
+ 0, /* AlphaBits */
+ 0, /* LuminanceBits */
+ 0, /* IntensityBits */
+ 0, /* IndexBits */
+ 0, /* DepthBits */
+ 0, /* TexelBytes */
+ NULL, /*impossible*/ /* FetchTexel1D */
+ fetch_2d_texel_rgb_dxt1, /* FetchTexel2D */
+ NULL, /*impossible*/ /* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_rgba_dxt1 = {
+ MESA_FORMAT_RGBA_DXT1, /* MesaFormat */
+ GL_RGBA, /* BaseFormat */
+ 4, /*approx*/ /* RedBits */
+ 4, /*approx*/ /* GreenBits */
+ 4, /*approx*/ /* BlueBits */
+ 1, /*approx*/ /* AlphaBits */
+ 0, /* LuminanceBits */
+ 0, /* IntensityBits */
+ 0, /* IndexBits */
+ 0, /* DepthBits */
+ 0, /* TexelBytes */
+ NULL, /*impossible*/ /* FetchTexel1D */
+ fetch_2d_texel_rgba_dxt1, /* FetchTexel2D */
+ NULL, /*impossible*/ /* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_rgba_dxt3 = {
+ MESA_FORMAT_RGBA_DXT3, /* MesaFormat */
+ GL_RGBA, /* BaseFormat */
+ 4, /*approx*/ /* RedBits */
+ 4, /*approx*/ /* GreenBits */
+ 4, /*approx*/ /* BlueBits */
+ 4, /*approx*/ /* AlphaBits */
+ 0, /* LuminanceBits */
+ 0, /* IntensityBits */
+ 0, /* IndexBits */
+ 0, /* DepthBits */
+ 0, /* TexelBytes */
+ NULL, /*impossible*/ /* FetchTexel1D */
+ fetch_2d_texel_rgba_dxt3, /* FetchTexel2D */
+ NULL, /*impossible*/ /* FetchTexel3D */
+};
+
+const struct gl_texture_format _mesa_texformat_rgba_dxt5 = {
+ MESA_FORMAT_RGBA_DXT5, /* MesaFormat */
+ GL_RGBA, /* BaseFormat */
+ 4,/*approx*/ /* RedBits */
+ 4,/*approx*/ /* GreenBits */
+ 4,/*approx*/ /* BlueBits */
+ 4,/*approx*/ /* AlphaBits */
+ 0, /* LuminanceBits */
+ 0, /* IntensityBits */
+ 0, /* IndexBits */
+ 0, /* DepthBits */
+ 0, /* TexelBytes */
+ NULL, /*impossible*/ /* FetchTexel1D */
+ fetch_2d_texel_rgba_dxt5, /* FetchTexel2D */
+ NULL, /*impossible*/ /* FetchTexel3D */
+};
+
/* Big-endian */
#if 0
@@ -738,10 +803,14 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
case GL_COMPRESSED_RGB_ARB:
if (!ctx->Extensions.ARB_texture_compression)
_mesa_problem(ctx, "texture compression extension not enabled");
+ if (ctx->Extensions.EXT_texture_compression_s3tc)
+ return &_mesa_texformat_rgb_dxt1;
return &_mesa_texformat_rgb;
case GL_COMPRESSED_RGBA_ARB:
if (!ctx->Extensions.ARB_texture_compression)
_mesa_problem(ctx, "texture compression extension not enabled");
+ if (ctx->Extensions.EXT_texture_compression_s3tc)
+ return &_mesa_texformat_rgba_dxt3; /* Not rgba_dxt1! See the spec */
return &_mesa_texformat_rgba;
/* GL_MESA_ycrcr_texture */
@@ -751,6 +820,28 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
else
return &_mesa_texformat_ycbcr_rev;
+ /* GL_EXT_texture_compression_s3tc */
+ case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
+ if (ctx->Extensions.EXT_texture_compression_s3tc)
+ return &_mesa_texformat_rgb_dxt1;
+ else
+ return NULL;
+ case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
+ if (ctx->Extensions.EXT_texture_compression_s3tc)
+ return &_mesa_texformat_rgba_dxt1;
+ else
+ return NULL;
+ case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
+ if (ctx->Extensions.EXT_texture_compression_s3tc)
+ return &_mesa_texformat_rgba_dxt3;
+ else
+ return NULL;
+ case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
+ if (ctx->Extensions.EXT_texture_compression_s3tc)
+ return &_mesa_texformat_rgba_dxt5;
+ else
+ return NULL;
+
default:
_mesa_problem(ctx, "unexpected format in _mesa_choose_tex_format()");
return NULL;