From 38f28665bf9fb5b2464738ca5074848ec2777ae1 Mon Sep 17 00:00:00 2001 From: Gareth Hughes Date: Wed, 28 Mar 2001 20:40:51 +0000 Subject: More texture format updates. Drivers now need only plug an appropriate format into texImage->TexFormat, the rest is handled by core Mesa. --- src/mesa/main/mtypes.h | 10 ++-- src/mesa/main/texformat.c | 135 ++++++++++++++++++++++------------------------ src/mesa/main/teximage.c | 98 ++++++++++++++------------------- src/mesa/main/texstate.c | 6 +-- src/mesa/main/texstore.c | 22 ++------ src/mesa/main/texutil.c | 93 ++++++++++++++++---------------- 6 files changed, 161 insertions(+), 203 deletions(-) (limited to 'src/mesa/main') diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 5aa3619e62..6ecb33d32e 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1,4 +1,4 @@ -/* $Id: mtypes.h,v 1.33 2001/03/27 19:18:02 gareth Exp $ */ +/* $Id: mtypes.h,v 1.34 2001/03/28 20:40:51 gareth Exp $ */ /* * Mesa 3-D graphics library @@ -777,10 +777,10 @@ typedef void (*FetchTexelFunc)( const struct gl_texture_image *texImage, /* Texture format record */ struct gl_texture_format { - GLint IntFormat; /* One of the MESA_FORMAT_* values */ + GLint MesaFormat; /* One of the MESA_FORMAT_* values */ - GLenum BaseFormat; - GLenum BaseType; + GLenum IntFormat; /* Internal format as GL enum value */ + GLenum Type; /* Internal type as GL enum value */ GLubyte RedBits; /* Bits per texel component */ GLubyte GreenBits; @@ -804,8 +804,6 @@ struct gl_texture_image { * GL_INTENSITY, GL_RGB, GL_RGBA, * GL_COLOR_INDEX or GL_DEPTH_COMPONENT only. */ - GLenum Type; /* Texel type: GL_UNSIGNED_BYTE, etc. */ - GLenum IntFormat; /* Internal format as given by the user */ GLuint Border; /* 0 or 1 */ GLuint Width; /* = 2^WidthLog2 + 2*Border */ GLuint Height; /* = 2^HeightLog2 + 2*Border */ diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index d24f6833ed..ec8aecc0f6 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -1,4 +1,4 @@ -/* $Id: texformat.c,v 1.5 2001/03/27 20:26:37 brianp Exp $ */ +/* $Id: texformat.c,v 1.6 2001/03/28 20:40:51 gareth Exp $ */ /* * Mesa 3-D graphics library @@ -73,9 +73,9 @@ static void fetch_null_texel( const struct gl_texture_image *texImage, */ const struct gl_texture_format _mesa_texformat_rgba = { - MESA_FORMAT_RGBA, /* IntFormat */ - GL_RGBA, /* BaseFormat */ - CHAN_TYPE, /* BaseType */ + MESA_FORMAT_RGBA, /* MesaFormat */ + GL_RGBA, /* IntFormat */ + CHAN_TYPE, /* Type */ CHAN_BITS, /* RedBits */ CHAN_BITS, /* GreenBits */ CHAN_BITS, /* BlueBits */ @@ -91,9 +91,9 @@ const struct gl_texture_format _mesa_texformat_rgba = { }; const struct gl_texture_format _mesa_texformat_rgb = { - MESA_FORMAT_RGB, /* IntFormat */ - GL_RGB, /* BaseFormat */ - CHAN_TYPE, /* BaseType */ + MESA_FORMAT_RGB, /* MesaFormat */ + GL_RGB, /* IntFormat */ + CHAN_TYPE, /* Type */ CHAN_BITS, /* RedBits */ CHAN_BITS, /* GreenBits */ CHAN_BITS, /* BlueBits */ @@ -109,9 +109,9 @@ const struct gl_texture_format _mesa_texformat_rgb = { }; const struct gl_texture_format _mesa_texformat_alpha = { - MESA_FORMAT_ALPHA, /* IntFormat */ - GL_ALPHA, /* BaseFormat */ - CHAN_TYPE, /* BaseType */ + MESA_FORMAT_ALPHA, /* MesaFormat */ + GL_ALPHA, /* IntFormat */ + CHAN_TYPE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -127,9 +127,9 @@ const struct gl_texture_format _mesa_texformat_alpha = { }; const struct gl_texture_format _mesa_texformat_luminance = { - MESA_FORMAT_LUMINANCE, /* IntFormat */ - GL_LUMINANCE, /* BaseFormat */ - CHAN_TYPE, /* BaseType */ + MESA_FORMAT_LUMINANCE, /* MesaFormat */ + GL_LUMINANCE, /* IntFormat */ + CHAN_TYPE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -145,9 +145,9 @@ const struct gl_texture_format _mesa_texformat_luminance = { }; const struct gl_texture_format _mesa_texformat_luminance_alpha = { - MESA_FORMAT_LUMINANCE_ALPHA, /* IntFormat */ - GL_LUMINANCE_ALPHA, /* BaseFormat */ - CHAN_TYPE, /* BaseType */ + MESA_FORMAT_LUMINANCE_ALPHA, /* MesaFormat */ + GL_LUMINANCE_ALPHA, /* IntFormat */ + CHAN_TYPE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -163,9 +163,9 @@ const struct gl_texture_format _mesa_texformat_luminance_alpha = { }; const struct gl_texture_format _mesa_texformat_intensity = { - MESA_FORMAT_INTENSITY, /* IntFormat */ - GL_INTENSITY, /* BaseFormat */ - CHAN_TYPE, /* BaseType */ + MESA_FORMAT_INTENSITY, /* MesaFormat */ + GL_INTENSITY, /* IntFormat */ + CHAN_TYPE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -181,9 +181,9 @@ const struct gl_texture_format _mesa_texformat_intensity = { }; const struct gl_texture_format _mesa_texformat_color_index = { - MESA_FORMAT_COLOR_INDEX, /* IntFormat */ - GL_COLOR_INDEX, /* BaseFormat */ - CHAN_TYPE, /* BaseType */ + MESA_FORMAT_COLOR_INDEX, /* MesaFormat */ + GL_COLOR_INDEX, /* IntFormat */ + CHAN_TYPE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -199,9 +199,9 @@ const struct gl_texture_format _mesa_texformat_color_index = { }; const struct gl_texture_format _mesa_texformat_depth_component = { - MESA_FORMAT_DEPTH_COMPONENT, /* IntFormat */ - GL_DEPTH_COMPONENT, /* BaseFormat */ - GL_FLOAT, /* BaseType */ + MESA_FORMAT_DEPTH_COMPONENT, /* MesaFormat */ + GL_DEPTH_COMPONENT, /* IntFormat */ + GL_FLOAT, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -222,9 +222,9 @@ const struct gl_texture_format _mesa_texformat_depth_component = { */ const struct gl_texture_format _mesa_texformat_rgba8888 = { - MESA_FORMAT_RGBA8888, /* IntFormat */ - GL_RGBA, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* BaseType */ + MESA_FORMAT_RGBA8888, /* MesaFormat */ + GL_RGBA, /* IntFormat */ + GL_UNSIGNED_INT_8_8_8_8, /* Type */ 8, /* RedBits */ 8, /* GreenBits */ 8, /* BlueBits */ @@ -240,9 +240,9 @@ const struct gl_texture_format _mesa_texformat_rgba8888 = { }; const struct gl_texture_format _mesa_texformat_argb8888 = { - MESA_FORMAT_ARGB8888, /* IntFormat */ - GL_RGBA, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* FIXME: ??? */ /* BaseType */ + MESA_FORMAT_ARGB8888, /* MesaFormat */ + GL_BGRA, /* IntFormat */ + GL_UNSIGNED_INT_8_8_8_8_REV, /* Type */ 8, /* RedBits */ 8, /* GreenBits */ 8, /* BlueBits */ @@ -258,9 +258,9 @@ const struct gl_texture_format _mesa_texformat_argb8888 = { }; const struct gl_texture_format _mesa_texformat_rgb888 = { - MESA_FORMAT_RGB888, /* IntFormat */ - GL_RGB, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* BaseType */ + MESA_FORMAT_RGB888, /* MesaFormat */ + GL_BGR, /* IntFormat */ + GL_UNSIGNED_BYTE, /* Type */ 8, /* RedBits */ 8, /* GreenBits */ 8, /* BlueBits */ @@ -276,9 +276,9 @@ const struct gl_texture_format _mesa_texformat_rgb888 = { }; const struct gl_texture_format _mesa_texformat_rgb565 = { - MESA_FORMAT_RGB565, /* IntFormat */ - GL_RGB, /* BaseFormat */ - GL_UNSIGNED_SHORT_5_6_5, /* BaseType */ + MESA_FORMAT_RGB565, /* MesaFormat */ + GL_RGB, /* IntFormat */ + GL_UNSIGNED_SHORT_5_6_5, /* Type */ 5, /* RedBits */ 6, /* GreenBits */ 5, /* BlueBits */ @@ -294,9 +294,9 @@ const struct gl_texture_format _mesa_texformat_rgb565 = { }; const struct gl_texture_format _mesa_texformat_argb4444 = { - MESA_FORMAT_ARGB4444, /* IntFormat */ - GL_RGBA, /* BaseFormat */ - GL_UNSIGNED_SHORT_4_4_4_4_REV, /* BaseType */ + MESA_FORMAT_ARGB4444, /* MesaFormat */ + GL_BGRA, /* IntFormat */ + GL_UNSIGNED_SHORT_4_4_4_4_REV, /* Type */ 4, /* RedBits */ 4, /* GreenBits */ 4, /* BlueBits */ @@ -312,9 +312,9 @@ const struct gl_texture_format _mesa_texformat_argb4444 = { }; const struct gl_texture_format _mesa_texformat_argb1555 = { - MESA_FORMAT_ARGB1555, /* IntFormat */ - GL_RGBA, /* BaseFormat */ - GL_UNSIGNED_SHORT_1_5_5_5_REV, /* BaseType */ + MESA_FORMAT_ARGB1555, /* MesaFormat */ + GL_BGRA, /* IntFormat */ + GL_UNSIGNED_SHORT_1_5_5_5_REV, /* Type */ 5, /* RedBits */ 5, /* GreenBits */ 5, /* BlueBits */ @@ -330,9 +330,9 @@ const struct gl_texture_format _mesa_texformat_argb1555 = { }; const struct gl_texture_format _mesa_texformat_al88 = { - MESA_FORMAT_AL88, /* IntFormat */ - GL_LUMINANCE_ALPHA, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* BaseType */ + MESA_FORMAT_AL88, /* MesaFormat */ + GL_LUMINANCE_ALPHA, /* IntFormat */ + GL_UNSIGNED_BYTE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -348,9 +348,9 @@ const struct gl_texture_format _mesa_texformat_al88 = { }; const struct gl_texture_format _mesa_texformat_rgb332 = { - MESA_FORMAT_RGB332, /* IntFormat */ - GL_RGB, /* BaseFormat */ - GL_UNSIGNED_BYTE_3_3_2, /* BaseType */ + MESA_FORMAT_RGB332, /* MesaFormat */ + GL_RGB, /* IntFormat */ + GL_UNSIGNED_BYTE_3_3_2, /* Type */ 3, /* RedBits */ 3, /* GreenBits */ 2, /* BlueBits */ @@ -366,9 +366,9 @@ const struct gl_texture_format _mesa_texformat_rgb332 = { }; const struct gl_texture_format _mesa_texformat_a8 = { - MESA_FORMAT_A8, /* IntFormat */ - GL_ALPHA, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* BaseType */ + MESA_FORMAT_A8, /* MesaFormat */ + GL_ALPHA, /* IntFormat */ + GL_UNSIGNED_BYTE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -384,9 +384,9 @@ const struct gl_texture_format _mesa_texformat_a8 = { }; const struct gl_texture_format _mesa_texformat_l8 = { - MESA_FORMAT_L8, /* IntFormat */ - GL_LUMINANCE, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* BaseType */ + MESA_FORMAT_L8, /* MesaFormat */ + GL_LUMINANCE, /* IntFormat */ + GL_UNSIGNED_BYTE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -402,9 +402,9 @@ const struct gl_texture_format _mesa_texformat_l8 = { }; const struct gl_texture_format _mesa_texformat_i8 = { - MESA_FORMAT_I8, /* IntFormat */ - GL_INTENSITY, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* BaseType */ + MESA_FORMAT_I8, /* MesaFormat */ + GL_INTENSITY, /* IntFormat */ + GL_UNSIGNED_BYTE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -420,9 +420,9 @@ const struct gl_texture_format _mesa_texformat_i8 = { }; const struct gl_texture_format _mesa_texformat_ci8 = { - MESA_FORMAT_CI8, /* IntFormat */ - GL_COLOR_INDEX, /* BaseFormat */ - GL_UNSIGNED_BYTE, /* BaseType */ + MESA_FORMAT_CI8, /* MesaFormat */ + GL_COLOR_INDEX, /* IntFormat */ + GL_UNSIGNED_BYTE, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -443,9 +443,9 @@ const struct gl_texture_format _mesa_texformat_ci8 = { */ const struct gl_texture_format _mesa_null_texformat = { - -1, /* IntFormat */ - 0, /* BaseFormat */ - 0, /* BaseType */ + -1, /* MesaFormat */ + 0, /* IntFormat */ + 0, /* Type */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ @@ -472,8 +472,6 @@ void _mesa_init_tex_format( GLcontext *ctx, GLenum internalFormat, { const struct gl_texture_format *texFormat; - texImage->IntFormat = internalFormat; - /* Ask the driver for the base format, if it doesn't know, it will * return -1; */ @@ -583,10 +581,5 @@ void _mesa_init_tex_format( GLcontext *ctx, GLenum internalFormat, return; } - /* Initialize the base format and type. - */ - texImage->Format = texFormat->BaseFormat; - texImage->Type = texFormat->BaseType; - texImage->TexFormat = texFormat; } diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index a92172a39b..4f9e2761ae 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -1,4 +1,4 @@ -/* $Id: teximage.c,v 1.87 2001/03/26 20:02:38 brianp Exp $ */ +/* $Id: teximage.c,v 1.88 2001/03/28 20:40:51 gareth Exp $ */ /* * Mesa 3-D graphics library @@ -108,7 +108,7 @@ static void PrintTexture(const struct gl_texture_image *img) /* * Compute log base 2 of n. * If n isn't an exact power of two return -1. - * If n<0 return -1. + * If n < 0 return -1. */ static int logbase2( int n ) @@ -116,7 +116,7 @@ logbase2( int n ) GLint i = 1; GLint log2 = 0; - if (n<0) { + if (n < 0) { return -1; } @@ -143,10 +143,10 @@ logbase2( int n ) GLint _mesa_base_tex_format( GLcontext *ctx, GLint format ) { - /* - * Ask the driver for the base format, if it doesn't - * know, it will return -1; - */ + /* + * Ask the driver for the base format, if it doesn't + * know, it will return -1; + */ if (ctx->Driver.BaseCompressedTexFormat) { GLint ifmt = (*ctx->Driver.BaseCompressedTexFormat)(ctx, format); if (ifmt >= 0) { @@ -558,8 +558,6 @@ clear_teximage_fields(struct gl_texture_image *img) { ASSERT(img); img->Format = 0; - img->Type = 0; - img->IntFormat = 0; img->Border = 0; img->Width = 0; img->Height = 0; @@ -588,8 +586,7 @@ init_teximage_fields(GLcontext *ctx, GLint border, GLenum internalFormat) { ASSERT(img); - - img->IntFormat = internalFormat; + img->Format = _mesa_base_tex_format( ctx, internalFormat ); img->Border = border; img->Width = width; img->Height = height; @@ -747,18 +744,17 @@ texture_error_check( GLcontext *ctx, GLenum target, return GL_TRUE; } - if (!is_compressed_format(ctx, internalFormat)) { - if (!_mesa_is_legal_format_and_type( format, type )) { - /* Yes, generate GL_INVALID_OPERATION, not GL_INVALID_ENUM, if there - * is a type/format mismatch. See 1.2 spec page 94, sec 3.6.4. - */ - if (!isProxy) { - char message[100]; - sprintf(message, "glTexImage%dD(format or type)", dimensions); - _mesa_error(ctx, GL_INVALID_OPERATION, message); - } - return GL_TRUE; + if (!is_compressed_format( ctx, internalFormat ) && + !_mesa_is_legal_format_and_type( format, type )) { + /* Yes, generate GL_INVALID_OPERATION, not GL_INVALID_ENUM, if there + * is a type/format mismatch. See 1.2 spec page 94, sec 3.6.4. + */ + if (!isProxy) { + char message[100]; + sprintf(message, "glTexImage%dD(format or type)", dimensions); + _mesa_error(ctx, GL_INVALID_OPERATION, message); } + return GL_TRUE; } /* if we get here, the parameters are OK */ @@ -870,19 +866,18 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions, _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset)"); return GL_TRUE; } - if (zoffset + depth > (GLint) (destTex->Depth+destTex->Border)) { + if (zoffset + depth > (GLint) (destTex->Depth + destTex->Border)) { _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset+depth)"); return GL_TRUE; } } - if (!is_compressed_format(ctx, destTex->IntFormat)) { - if (!_mesa_is_legal_format_and_type(format, type)) { - char message[100]; - sprintf(message, "glTexSubImage%dD(format or type)", dimensions); - _mesa_error(ctx, GL_INVALID_ENUM, message); - return GL_TRUE; - } + if (!is_compressed_format(ctx, destTex->TexFormat->IntFormat) && + !_mesa_is_legal_format_and_type(format, type)) { + char message[100]; + sprintf(message, "glTexSubImage%dD(format or type)", dimensions); + _mesa_error(ctx, GL_INVALID_ENUM, message); + return GL_TRUE; } return GL_FALSE; @@ -923,7 +918,7 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, } /* Border */ - if (border!=0 && border!=1) { + if (border != 0 && border != 1) { char message[100]; sprintf(message, "glCopyTexImage%dD(border)", dimensions); _mesa_error(ctx, GL_INVALID_VALUE, message); @@ -960,7 +955,7 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, } /* Level */ - if (level<0 || level>=ctx->Const.MaxTextureLevels) { + if (level < 0 || level>=ctx->Const.MaxTextureLevels) { char message[100]; sprintf(message, "glCopyTexImage%dD(level=%d)", dimensions, level); _mesa_error(ctx, GL_INVALID_VALUE, message); @@ -1050,7 +1045,7 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, _mesa_error(ctx, GL_INVALID_VALUE, message); return GL_TRUE; } - if (xoffset+width > (GLint) (teximage->Width+teximage->Border)) { + if (xoffset + width > (GLint) (teximage->Width + teximage->Border)) { char message[100]; sprintf(message, "glCopyTexSubImage%dD(xoffset+width)", dimensions); _mesa_error(ctx, GL_INVALID_VALUE, message); @@ -1064,7 +1059,7 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } /* NOTE: we're adding the border here, not subtracting! */ - if (yoffset+height > (GLint) (teximage->Height+teximage->Border)) { + if (yoffset + height > (GLint) (teximage->Height + teximage->Border)) { char message[100]; sprintf(message, "glCopyTexSubImage%dD(yoffset+height)", dimensions); _mesa_error(ctx, GL_INVALID_VALUE, message); @@ -1079,7 +1074,7 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, _mesa_error(ctx, GL_INVALID_VALUE, message); return GL_TRUE; } - if (zoffset > (GLint) (teximage->Depth+teximage->Border)) { + if (zoffset > (GLint) (teximage->Depth + teximage->Border)) { char message[100]; sprintf(message, "glCopyTexSubImage%dD(zoffset+depth)", dimensions); _mesa_error(ctx, GL_INVALID_VALUE, message); @@ -1349,13 +1344,8 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat, } } -#if 0 - /* one of these has to be non-zero! */ - ASSERT(texImage->RedBits || texImage->IndexBits || texImage->AlphaBits || - texImage->LuminanceBits || texImage->IntensityBits || - texImage->DepthBits); - ASSERT(texImage->FetchTexel); -#endif + ASSERT(texImage->TexFormat); + texImage->FetchTexel = texImage->TexFormat->FetchTexel1D; /* state update */ texObj->Complete = GL_FALSE; @@ -1404,7 +1394,7 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, if (is_color_format(internalFormat)) { _mesa_adjust_image_for_convolution(ctx, 2, &postConvWidth, - &postConvHeight); + &postConvHeight); } if (target == GL_TEXTURE_2D || @@ -1463,13 +1453,8 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, } } -#if 0 - /* one of these has to be non-zero! */ - ASSERT(texImage->RedBits || texImage->IndexBits || texImage->AlphaBits || - texImage->LuminanceBits || texImage->IntensityBits || - texImage->DepthBits); - ASSERT(texImage->FetchTexel); -#endif + ASSERT(texImage->TexFormat); + texImage->FetchTexel = texImage->TexFormat->FetchTexel2D; /* state update */ texObj->Complete = GL_FALSE; @@ -1478,8 +1463,8 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, else if (target == GL_PROXY_TEXTURE_2D) { /* Proxy texture: check for errors and update proxy state */ GLenum error = texture_error_check(ctx, target, level, internalFormat, - format, type, 2, - postConvWidth, postConvHeight, 1, border); + format, type, 2, + postConvWidth, postConvHeight, 1, border); if (!error) { struct gl_texture_unit *texUnit; struct gl_texture_image *texImage; @@ -1571,13 +1556,8 @@ _mesa_TexImage3D( GLenum target, GLint level, GLenum internalFormat, } } -#if 0 - /* one of these has to be non-zero! */ - ASSERT(texImage->RedBits || texImage->IndexBits || texImage->AlphaBits || - texImage->LuminanceBits || texImage->IntensityBits || - texImage->DepthBits); - ASSERT(texImage->FetchTexel); -#endif + ASSERT(texImage->TexFormat); + texImage->FetchTexel = texImage->TexFormat->FetchTexel3D; /* state update */ texObj->Complete = GL_FALSE; diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c index 93d12e7191..5e98965730 100644 --- a/src/mesa/main/texstate.c +++ b/src/mesa/main/texstate.c @@ -1,4 +1,4 @@ -/* $Id: texstate.c,v 1.39 2001/03/26 19:42:40 brianp Exp $ */ +/* $Id: texstate.c,v 1.40 2001/03/28 20:40:51 gareth Exp $ */ /* * Mesa 3-D graphics library @@ -956,8 +956,8 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, case GL_TEXTURE_DEPTH: *params = img->Depth; return; - case GL_TEXTURE_COMPONENTS: - *params = img->IntFormat; + case GL_TEXTURE_INTERNAL_FORMAT: + *params = img->TexFormat->IntFormat; return; case GL_TEXTURE_BORDER: *params = img->Border; diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index c1d9dfc4bc..0647b2c7d5 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -1,4 +1,4 @@ -/* $Id: texstore.c,v 1.20 2001/03/27 20:26:10 brianp Exp $ */ +/* $Id: texstore.c,v 1.21 2001/03/28 20:40:51 gareth Exp $ */ /* * Mesa 3-D graphics library @@ -406,7 +406,6 @@ _mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level, /* setup the teximage struct's fields */ _mesa_init_tex_format( ctx, internalFormat, texImage ); - texImage->FetchTexel = texImage->TexFormat->FetchTexel1D; texelBytes = texImage->TexFormat->TexelBytes; @@ -450,7 +449,6 @@ _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level, /* setup the teximage struct's fields */ _mesa_init_tex_format( ctx, internalFormat, texImage ); - texImage->FetchTexel = texImage->TexFormat->FetchTexel2D; texelBytes = texImage->TexFormat->TexelBytes; @@ -490,7 +488,6 @@ _mesa_store_teximage3d(GLcontext *ctx, GLenum target, GLint level, /* setup the teximage struct's fields */ _mesa_init_tex_format( ctx, internalFormat, texImage ); - texImage->FetchTexel = texImage->TexFormat->FetchTexel3D; texelBytes = texImage->TexFormat->TexelBytes; @@ -542,12 +539,10 @@ _mesa_store_texsubimage2d(GLcontext *ctx, GLenum target, GLint level, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - const GLint components = components_in_intformat(texImage->IntFormat); - const GLint compSize = _mesa_sizeof_type(texImage->Type); _mesa_transfer_teximage(ctx, 2, texImage->Format, texImage->Data, width, height, 1, /* src size */ xoffset, yoffset, 0, /* dest offsets */ - texImage->Width * components * compSize, + texImage->Width * texImage->TexFormat->TexelBytes, 0, /* dstImageStride */ format, type, pixels, packing); } @@ -565,14 +560,12 @@ _mesa_store_texsubimage3d(GLcontext *ctx, GLenum target, GLint level, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - const GLint components = components_in_intformat(texImage->IntFormat); - const GLint compSize = _mesa_sizeof_type(texImage->Type); + const GLint texelBytes = texImage->TexFormat->TexelBytes; _mesa_transfer_teximage(ctx, 3, texImage->Format, texImage->Data, width, height, depth, /* src size */ xoffset, yoffset, xoffset, /* dest offsets */ - texImage->Width * components * compSize, - texImage->Width * texImage->Height * components - * compSize, + texImage->Width * texelBytes, + texImage->Width * texImage->Height * texelBytes, format, type, pixels, packing); } @@ -648,7 +641,6 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level, struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; - const struct gl_texture_format *texFormat; (void) format; (void) type; @@ -665,9 +657,5 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level, /* setup the teximage struct's fields */ _mesa_init_tex_format( ctx, internalFormat, texImage ); - texFormat = texImage->TexFormat; - texImage->Format = texFormat->BaseFormat; - texImage->Type = texFormat->BaseType; - return GL_TRUE; } diff --git a/src/mesa/main/texutil.c b/src/mesa/main/texutil.c index c6bf0c32da..d96af2bee7 100644 --- a/src/mesa/main/texutil.c +++ b/src/mesa/main/texutil.c @@ -1,4 +1,4 @@ -/* $Id: texutil.c,v 1.20 2001/03/27 20:32:24 brianp Exp $ */ +/* $Id: texutil.c,v 1.21 2001/03/28 20:40:51 gareth Exp $ */ /* * Mesa 3-D graphics library @@ -75,7 +75,7 @@ typedef GLboolean (*convert_func)( struct gl_texture_convert *convert ); #define DST_TEXELS_PER_DWORD 1 #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) + dst = PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) #define CONVERT_DIRECT @@ -87,7 +87,7 @@ typedef GLboolean (*convert_func)( struct gl_texture_convert *convert ); #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_8888( src[0], src[1], src[2], src[3] ) + dst = PACK_COLOR_8888( src[0], src[1], src[2], src[3] ) #define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) @@ -99,7 +99,7 @@ typedef GLboolean (*convert_func)( struct gl_texture_convert *convert ); #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_8888( src[0], src[1], src[2], 0xff ) + dst = PACK_COLOR_8888( src[0], src[1], src[2], 0xff ) #define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) @@ -154,7 +154,7 @@ CONVERT_RGBA8888( texsubimage3d ) #define DST_TEXELS_PER_DWORD 1 #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) + dst = PACK_COLOR_8888( src[3], src[2], src[1], src[0] ) #define CONVERT_DIRECT @@ -166,7 +166,7 @@ CONVERT_RGBA8888( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_8888( src[3], src[0], src[1], src[2] ) + dst = PACK_COLOR_8888( src[3], src[0], src[1], src[2] ) #define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) @@ -178,7 +178,7 @@ CONVERT_RGBA8888( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_8888( 0xff, src[0], src[1], src[2] ) + dst = PACK_COLOR_8888( 0xff, src[0], src[1], src[2] ) #define CONVERT_TEXEL_DWORD( dst, src ) CONVERT_TEXEL( dst, src ) @@ -254,7 +254,7 @@ convert_texsubimage3d_rgb888( struct gl_texture_convert *convert ) #define DST_TEXELS_PER_DWORD 2 #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_565( src[0], src[1], src[2] ) + dst = PACK_COLOR_565( src[0], src[1], src[2] ) #define CONVERT_DIRECT @@ -266,11 +266,11 @@ convert_texsubimage3d_rgb888( struct gl_texture_convert *convert ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_565( src[0], src[1], src[2] ) + dst = PACK_COLOR_565( src[0], src[1], src[2] ) #define CONVERT_TEXEL_DWORD( dst, src ) \ - dst = ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ - (PACK_COLOR_565( src[3], src[4], src[5] ) << 16)) + dst = ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ + (PACK_COLOR_565( src[3], src[4], src[5] ) << 16)) #define SRC_TEXEL_BYTES 3 @@ -280,11 +280,11 @@ convert_texsubimage3d_rgb888( struct gl_texture_convert *convert ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_565( src[0], src[1], src[2] ) + dst = PACK_COLOR_565( src[0], src[1], src[2] ) #define CONVERT_TEXEL_DWORD( dst, src ) \ - dst = ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ - (PACK_COLOR_565( src[4], src[5], src[6] ) << 16)) + dst = ((PACK_COLOR_565( src[0], src[1], src[2] )) | \ + (PACK_COLOR_565( src[4], src[5], src[6] ) << 16)) #define SRC_TEXEL_BYTES 4 @@ -336,7 +336,7 @@ CONVERT_RGB565( texsubimage3d ) #define DST_TEXELS_PER_DWORD 2 #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) + dst = PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) #define CONVERT_DIRECT @@ -348,15 +348,15 @@ CONVERT_RGB565( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) + dst = PACK_COLOR_4444( src[3], src[0], src[1], src[2] ) #define CONVERT_TEXEL_DWORD( dst, src ) \ - dst = ((PACK_COLOR_4444( src[3], src[0], src[1], src[2] )) |\ - (PACK_COLOR_4444( src[7], src[4], src[5], src[6] ) << 16)) + dst = ((PACK_COLOR_4444( src[3], src[0], src[1], src[2] )) | \ + (PACK_COLOR_4444( src[7], src[4], src[5], src[6] ) << 16)) #define SRC_TEXEL_BYTES 4 -#define TAG(x) x##_rgba8888_to_argb4444 +#define TAG(x) x##_abgr8888_to_argb4444 #include "texutil_tmp.h" @@ -375,7 +375,7 @@ convert_##name##_argb4444( struct gl_texture_convert *convert ) \ else if ( convert->format == GL_RGBA && \ convert->type == GL_UNSIGNED_BYTE ) \ { \ - tab = name##_tab_rgba8888_to_argb4444; \ + tab = name##_tab_abgr8888_to_argb4444; \ } \ else \ { \ @@ -399,7 +399,7 @@ CONVERT_ARGB4444( texsubimage3d ) #define DST_TEXELS_PER_DWORD 2 #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) + dst = PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) #define CONVERT_DIRECT @@ -411,13 +411,13 @@ CONVERT_ARGB4444( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - { const GLushort s = *(GLushort *)src; \ - dst = (s >> 1) | ((s & 1) << 15); } + { const GLushort s = *(GLushort *)src; \ + dst = (s >> 1) | ((s & 1) << 15); } #define CONVERT_TEXEL_DWORD( dst, src ) \ - { const GLuint s = *(GLuint *)src; \ - dst = (((s & 0xfffefffe) >> 1) | \ - ((s & 0x00010001) << 15)); } + { const GLuint s = *(GLuint *)src; \ + dst = (((s & 0xfffefffe) >> 1) | \ + ((s & 0x00010001) << 15)); } #define SRC_TEXEL_BYTES 2 @@ -427,15 +427,15 @@ CONVERT_ARGB4444( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) + dst = PACK_COLOR_1555( src[3], src[0], src[1], src[2] ) #define CONVERT_TEXEL_DWORD( dst, src ) \ - dst = ((PACK_COLOR_1555( src[3], src[0], src[1], src[2] )) |\ - (PACK_COLOR_1555( src[7], src[4], src[5], src[6] ) << 16)) + dst = ((PACK_COLOR_1555( src[3], src[0], src[1], src[2] )) | \ + (PACK_COLOR_1555( src[7], src[4], src[5], src[6] ) << 16)) #define SRC_TEXEL_BYTES 4 -#define TAG(x) x##_rgba8888_to_argb1555 +#define TAG(x) x##_abgr8888_to_argb1555 #include "texutil_tmp.h" @@ -459,7 +459,7 @@ convert_##name##_argb1555( struct gl_texture_convert *convert ) \ else if ( convert->format == GL_RGBA && \ convert->type == GL_UNSIGNED_BYTE ) \ { \ - tab = name##_tab_rgba8888_to_argb1555; \ + tab = name##_tab_abgr8888_to_argb1555; \ } \ else \ { \ @@ -483,7 +483,7 @@ CONVERT_ARGB1555( texsubimage3d ) #define DST_TEXELS_PER_DWORD 2 #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_88( src[0], src[1] ) + dst = PACK_COLOR_88( src[0], src[1] ) #define CONVERT_DIRECT @@ -495,11 +495,11 @@ CONVERT_ARGB1555( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_88( src[0], 0x00 ) + dst = PACK_COLOR_88( src[0], 0x00 ) #define CONVERT_TEXEL_DWORD( dst, src ) \ - dst = ((PACK_COLOR_88( src[0], 0x00 )) | \ - (PACK_COLOR_88( src[1], 0x00 ) << 16)) + dst = ((PACK_COLOR_88( src[0], 0x00 )) | \ + (PACK_COLOR_88( src[1], 0x00 ) << 16)) #define SRC_TEXEL_BYTES 1 @@ -509,11 +509,11 @@ CONVERT_ARGB1555( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_88( 0xff, src[0] ) + dst = PACK_COLOR_88( 0xff, src[0] ) #define CONVERT_TEXEL_DWORD( dst, src ) \ - dst = ((PACK_COLOR_88( 0xff, src[0] )) | \ - (PACK_COLOR_88( 0xff, src[1] ) << 16)) + dst = ((PACK_COLOR_88( 0xff, src[0] )) | \ + (PACK_COLOR_88( 0xff, src[1] ) << 16)) #define SRC_TEXEL_BYTES 1 @@ -523,11 +523,11 @@ CONVERT_ARGB1555( texsubimage3d ) #define CONVERT_TEXEL( dst, src ) \ - dst = PACK_COLOR_88( src[3], src[0] ) + dst = PACK_COLOR_88( src[3], src[0] ) #define CONVERT_TEXEL_DWORD( dst, src ) \ - dst = ((PACK_COLOR_88( src[3], src[0] )) | \ - (PACK_COLOR_88( src[7], src[1] ) << 16)) + dst = ((PACK_COLOR_88( src[3], src[0] )) | \ + (PACK_COLOR_88( src[7], src[1] ) << 16)) #define SRC_TEXEL_BYTES 4 @@ -743,13 +743,12 @@ _mesa_convert_texsubimage1d( GLint mesaFormat, } -/* - * Convert a user's 2D image into a texture image. This basically repacks - * pixel data into the special texture formats used by core Mesa and the DRI - * drivers. This function can do full images or subimages. +/* Convert a user's 2D image into a texture image. This basically + * repacks pixel data into the special texture formats used by core Mesa + * and the DRI drivers. This function can do full images or subimages. * - * We return a boolean because this function may not accept some kinds of - * source image formats and/or types. For example, if the incoming + * We return a boolean because this function may not accept some kinds + * of source image formats and/or types. For example, if the incoming * format/type = GL_BGR, GL_UNSIGNED_INT this function probably won't * be able to do the conversion. * -- cgit v1.2.3